PROGRAMMATION PAR OBJETS EN Java Pascale LE CERTEN lecerten@irisa.fr Lucien UNG

PROGRAMMATION PAR OBJETS EN Java Pascale LE CERTEN lecerten@irisa.fr Lucien UNGARO ungaro@irisa.fr mars 1999 IFSIC - Campus de Beaulieu - 35042 Rennes Cedex Tel. 02 99 84 71 00 - fax 02 99 84 71 71 Table des matières 1 Classes et objets 1.1 Introduction 1 1.2 Définition d’une classe 2 1.3 Déclaration et création d’objets 4 1.4 Utilisation des objets 4 1.5 Rédaction des méthodes 5 Déclaration de méthode 5 Instance courante : this 5 1.6 Composants non liés à des objets : static 6 1.7 Abstraction de la représentation : private et public 6 1.8 Classes internes 8 2 Structure et environnement des programmes 2.1 Structure des fichiers sources 10 2.2 Paquetages : package 11 3 Types et structures de contrôle 3.1 Types en Java 12 Types primitifs 12 Types classes et tableaux 13 3.2 Les références 13 3.3 Chaînes de caractères : String et StringBuffer 15 3.4 Données constantes - final 17 3.5 Instructions 19 Affectation 19 Conditionnelle 19 Boucles 20 Instruction cas 20 3.6 Entrées/sorties 21 3.7 Traitement d’exception : throw-try-catch 22 4 Héritage 4.1 Usage simple de l’héritage : ajout de propriétés 26 Accessibilité : public, protected, private 27 4.2 Compatibilité entre types 27 4.3 Méthodes virtuelles 30 Définition de méthodes virtuelles 30 Liaison dynamique des méthodes virtuelles 31 4.4 Quelques utilisations des méthodes virtuelles 32 5 Généricité - Réalisation imparfaite en Java 6 Interfaces - polymorphisme 7 Interfaces utilisateurs : paquetage AWT 7.1 Organisation générale des interfaces utilisateurs 41 7.2 Gestion des événements 43 7.3 Placement des composants 44 7.4 Quelques méthodes des classes de AWT 45 8 Parallélisme en Java : Threads 8.1 Création de processus 48 8.2 Exclusion et moniteurs : synchronized 49 Exclusion 49 Moniteurs 51 8.3 Attente explicite : wait - notify 52 Attente qu’une condition soit satisfaite : wait() 52 Réveil des processus : notify() et notifyAll() 52 Utilisation - Analogie avec les Moniteurs de Hoare 54 8.4 Réflexions sur l’usage des processus 55 Nature des processus 55 Intérêts des processus 56 9 Documents HTML actifs : Applet 10 Communications réseau : net 10.1 Adresses Internet 70 10.2 Communications de bas niveau 70 10.3 Communications fiables en mode connecté 73 10.4 Accès par URL 77 11 Applications réparties : rmi 11.1 Mécanisme illustré sur un exemple 78 11.2 Communication de références d’objets distants 81 11.3 Passage des paramètres et rendu de résultat 83 12 Sujets de travaux pratiques TP1 Gestion des étudiants 85 TP2 Deux représentations des matrices 86 TP3 Simulateur de circuits logiques 87 TP4 Tri parallèle 90 TP5 Applet 92 TP6 Communications réseau 93 TP7 Application répartie - RMI 94 CORRIGÉS d’EXERCICES et de TRAVAUX PRATIQUES 95 Paquetages utilisés dans les exercices 134 Ce cours est disponible sur le serveur pédagogique de SPECIF : http://www.ove.fr/cgi-bin/w3-msql/spd/cours.html Ouvrage de référence : Thinking in Java - Bruce Eckel http://www.EckelObjects.com/javabook.html Programmation par objets en Java 1 © IFSIC - Université de Rennes 1 - 1999 Programmation par objets en Java 1 Classes et objets 1.1 Introduction La programmation par objets consiste essentiellement à structurer les applications selon les types de données. L’expérience montre que l’on obtient ainsi des logiciels fiables, évolutifs et faciles à maintenir. Le programmeur par objets se pose en premier la question : quels sont les objets fondamentaux de l’application ? Quelles sont les choses et les concepts qui constituent le domaine de l’application ? Il décrit alors cha- que type d’objet sous forme de variables qui caractérisent son état puis il s’intéresse aux opérations que peuvent subir ces objets et les décrit sous forme de procédures. Ceci conduit à une modularité basée sur les types de données. Les traitements sont toujours définis à propos de la définition d’un type de données, et non pas isolément comme c’est le cas pour une modularité basée en priorité sur la décomposition des traitements. Par exemple, pour une gestion de réseau ferroviaire, le programmeur par objets sera tenté de définir les objets suivants : trains, voitures, lignes, gares, ... Pour chaque type d’objet, il définira les propriétés de ces objets et les actions que l’on peut leur faire subir : un train est formé d’une collection de voitures, on peut lui accrocher une voiture, lui décrocher une voiture, chaque voiture a une capacité ... Considérons un exemple très élémentaire : un robot (simpliste). Un tel robot occupe une certaine position (X,Y), il a une orientation parmi {Nord, Est, Sud, Ouest}, il est initialisé avec une position et une orientation données, il peut tourner à droite, il peut avancer d’un pas ... On le décrira par une association de variables d’état et de procédu- res. C’est une telle association de données et de procédures que l’on nomme habituel- lement un objet. Y X Nord Est Sud Ouest données + procédures objet = X Y orientation avancer tournerADroite Initialisations Classes et objets 2 Programmation par objets en Java © IFSIC - Université de Rennes 1 - 1999 Il existe de nombreux langages permettant la programmation par objets : Simula, Smalltalk, Eiffel, Turbo Pascal Objet, C++, Java. Ces langages ont en commun les notions suivantes : • La notion d’objet, qui possède deux aspects totalement indépendants : - Un objet est une chose dotée d’une identité (on peut le référencer). Ceci s’oppose à la notion de valeur (par exemple 12 n’est pas un objet). - Un objet peut, accessoirement, être composé de données et de procédures liées à ces données : les données de l’objet constituent le contexte de travail pour les procédures associées. • La notion de classe, qui n’est autre que celle de type (ou modèle) d’objets, • La notion d’héritage : l’héritage permet de définir des types d’objets plus précis à partir de types d’objets plus généraux. Si la programmation par objets se limitait à la notion d’objet et de classe, elle ne serait qu’un simple conseil méthodologique et ne nécessiterait pas vraiment de langage par- ticulier. Il est toujours possible en effet, dans un langage tel que Pascal ou C, de regrouper les textes de définition des types de données (structures) et des procédures qui accèdent aux données de ces types. En revanche, la notion d’héritage est plus profonde et ne peut être réalisée simplement par discipline, elle doit être offerte par le langage. Elle permet de définir une hiérar- chie de types, des plus généraux aux plus spécialisés. L’héritage et les notions qui lui sont associées, notamment les procédures virtuelles, permettent la conception de logi- ciels extensibles et favorisent la réutilisation de modules logiciels existants. Dans les paragraphes qui suivent, nous présentons les notions de programmation par objets du langage Java. 1.2 Définition d’une classe La notion de classe est un enrichissement de la notion usuelle de type. Une classe per- met de définir un type d’objet, éventuellement compliqué, associant des données et des procédures qui accèdent à ces données. Les données se présentent sous forme de champs désignés par identificateurs et dotés d’un type. Ces champs sont généralement des variables qui représentent l’état de l’objet. Les procédures, également appelées méthodes, définissent les opérations possibles sur un tel objet. Ces données et procédures sont qualifiées de membres ou composants de la classe. Nous prenons comme exemple de déclaration de classe, les “robots” précédents. Classes et objets Programmation par objets en Java 3 © IFSIC - Université de Rennes 1 - 1999 class Robot { public static final int Nord = 1; (constantes) public static final int Est = 2; public static final int Sud = 3; public static final int Ouest = 4; public int X; (variables d’état) public int Y; public int orientation; public Robot(int x, int y, int o) { (initialisation) X=x; Y=y; orientation=o; } public Robot() { (autre initialisation possible) X=0; Y=0; orientation=Nord; } public void avancer() { switch (orientation) { case Nord : Y=Y+1; break; case Est : X=X+1; break; case Sud : Y=Y-1; break; case Ouest: X=X-1; break; }; } public void tournerADroite(){ switch (orientation) { case Nord : orientation=Est ; break; case Est : orientation=Sud ; break; case Sud : orientation=Ouest; break; case Ouest: orientation=Nord ; break; }; } } L’attribut public, appliqué à un composant quelconque, donnée ou méthode, signi- fie que ce composant est désignable par son identificateur depuis le texte de toute autre classe. L’attribut final, lorsqu’il est appliqué à un composant qui est une don- née, signifie que ce composant est constant. Initialisation des objets : constructeur Une classe peut définir une ou plusieurs procédures d’initialisation appelées construc- teurs. Ces procédures ont le même nom que la classe, et s’il y en a plusieurs, elles se distinguent par le type ou le nombre des paramètres : Robot(int x, int y, int o) Robot() Si on ne définit pas explicitement de constructeur, Java définit un constructeur par défaut, qui est sans paramètre, et qui ne fait pas grand chose (pour une classe héritière il se borne à appeler le constructeur sans paramètre de la classe de base : voir plus loin le chapitre 4, page 26, sur l’héritage). Classes et objets 4 Programmation par objets en Java © IFSIC - uploads/Management/ programmation-objet-en-java.pdf

  • 42
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Apv 22, 2022
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.9371MB