Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

programmation orienté objet, Summaries of Java Programming

un petit resumé sur POO et java

Typology: Summaries

2019/2020

Uploaded on 01/25/2020

dalel-dalel
dalel-dalel 🇩🇿

3 documents

Partial preview of the text

Download programmation orienté objet and more Summaries Java Programming in PDF only on Docsity! Paradigmes de programmation — 3°“ Licence (SI/ISIL) | Chapitre N°5: Programmation orientée objet Chapitre 5: Programmation orientée objet Le paradigme de la programmation orientée objet est à l’origine dé plusieurs motivations. Entre autres, une décomposition modulaire ne permettant pas de prendre en compte des problèmes complexes. Ainsi, la manipulation de volume d'information important met en évidence la nécessité de regrouper en entités les ensembles de données partageant les mêmes caractéristiques. Les concepts de la programmation orientée objet ont comme racine le langage Simula 67, mais ils n’ont pas été entièrement développés jusqu’à ce que l’évolution du Smalltalk ait eu lieu. Smalltalk a été le premier langage offrant un support complet pour la programmation orientée objet. Un langage de programmation orienté objet s’appuie sur trois techniques fondamentales qui sont: l’encapsulation (regrouper données et traitements ensemble), l'héritage (permet la réutilisation) et le po/ymorphisme (permet la surcharge et la liaison dynamique). La programmation orientée objet est la programmation dans laquelle les programmes sont organisés comme des ensembles d'objets qui interagissent entre eux par envoi de messages. Chaque objet représente une instance d’une classe. L'ensemble des classes est organisé dans une hiérarchie selon la relation d’héritage. L'objectif de ce chapitre est d'introduire les concepts de base de la programmation orientée objet, puis de discuter les supports de ce style de programmation dans certains langages orientés objet tel que Simula, Smalltalk, C++ et Java. Ainsi, présenter une évaluation de la programmation orientée objet. 1. Concepts de base de la programmation orientée objet Un objet est l’entité élémentaire dans le paradigme orienté objet. Il intègre les données et les procédures ou méthodes qui manipulent ces données. Cela illustre le principe de l'encapsulation qui permet l’abstraction des données. La classe est l’entité conceptuelle qui décrit les objets. Les classes d'objets sont organisées en hiérarchie d’héritage. Une méthode définie au niveau d’une classe peut être redéfinie par une sous-classe, ce qui illustre le principe de la surcharge. 1.1 Classe Une classe est une entité qui regroupe sous le même nom des données et des méthodes qui manipulent ces données. Généralement une méthode appartenant à une classe ne peut manipuler que les données de celle-ci et ne peut pas accéder aux données d’une autre classe. Une classe peut être considérée comme un moule à partir duquel on peut créer des objets. 1.2 Instance La classe est un descripteur statique qu'on ne peut pas utiliser directement (sauf les membres de la classe). À partir d’une classe on peut construire autant d'exemplaires que l’on veut. Ces exemplaires sont appelées des instances ou objets de la classe qui a permis de les Mr. Sedairia A. (2015/2016) 43 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3°" Licence (SI/ ISIL) |_ Chapitre N°5: Programmation orientée objet créer. Deux instances différentes d’une même classe partagent la même liste de méthodes et de données mais avec des valeurs différentes (si les données ne sont pas statiques). 1.4 Transmission de messages Le mécanisme de transmission de messages assure l'interaction entre les objets. Un objet qui envoie Un message mentionne toujours le récepteur du message, le nom de la méthode à exécuter et les arguments de cette méthode. L'objet récepteur du message recherche le nom de la méthode puis procède à son activation. Le résultat de l'exécution de cette méthode sera retourné à l’objet qui a envoyé le message. La recherche est faite en remontant l’arbre d’héritage. 1.5 Principe de l’abstraction de données L'abstraction est le processus qui consiste à représenter des objets qui appartiennent au monde réel dans le monde du programme que l’on écrit. Il consiste essentiellement à extraire des variables pertinentes, attachées aux objets que l’on souhaite manipuler, et à les placer dans un modèle informatique convenable. Dans la programmation orientée objet une classe est composée d’une interface et d’une implémentation. L'interface définit les méthodes et l'implémentation se compose de structures de données et d’algorithmes spécifiant ces méthodes. 1.6 Principe de l’encapsulation La première étape du travail de conception a consisté à définir les données intéressantes, et à les regrouper dans des structures qui ont un sens. La deuxième étape consiste à définir les méthodes d'accès à ces données, et les calculs qui seront effectués dessus. L'idée de la programmation objet est de regrouper ces méthodes d'accès et de calcul dans la même structure que les données. Le regroupement des données et des méthodes est un des points importants des langages objet, qui n’est absolument pas supporté dans des langages tels que le C, Pascal ou Fortran. C'est cela que l’on appelle l’encapsulation. L’encapsulation cache les données et les algorithmes et ne laissent visible aux développeurs que l'interface. Ainsi, une méthode appartenant à une encapsulation ne peut manipuler que les données de cette encapsulation et ne peut pas modifier les données d’une autre encapsulation. Par conséquent, les risques d'erreurs sont considérablement réduits et leurs conséquences sont mieux maîtrisées. 1.7 Héritage L'héritage est la propriété la plus innovatrice et l’une des plus intéressantes dans la programmation orientée objet. L'héritage se fait sur des classes et non pas sur des objets. Ce mécanisme permet, quand on veut construire une classe ayant des propriétés communes avec une autre classe qui existe dans le système, de ne programmer que les différences entre les deux. Toutes les variables et les procédures de la classe existante seront ajoutées aux variables et aux procédures de la classe en construction, La nouvelle entité créée par héritage sera une Mr. Sedairia À. (2015/2016) 44 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3* "Licence (SI / ISIL) | Chapitre N°5: Programmation orientée objet 2.4 Java Étant donné que le langage C++ comportait plusieurs limites, James Gosling a décidé de créer un langage orienté objet reprenant les caractéristiques principales du C++, en éliminant ses points faibles. Ainsi, ce langage a été nommé Java. Java est un langage orienté objet par excellence. II possède une syntaxe qui ressemble beaucoup à celle du C++. Toutefois Java est plus simple que C++ car les caractéristiques critiques de ce dernier ont été supprimées (pointeurs, héritage multiple, libération de mémoire, etc.). Seulement l'héritage simple est supporté, bien qu’une sorte d'héritage multiple soit toujours possible en utilisant les interfaces. Tous les liens de messages aux méthodes dans Java sont dynamiques. L'avantage principal de Java comparé aux autres langages est sa portabilité. En effet, un programme Java peut être exécuté sur n'importe qu’elle plate-forme. Le langage de programmation Java est maintenant devenu un standard des langages orientés objet. Un programme java est traduit à l’aide d’un compilateur afin de générer le bytecode (un programme intermédiaire). Ensuite, ce bytecode est interprété par une machine virtuelle (environnement d'exécution du bytecode, généralement dénoté par JVM). Ce qui rend le langage Java beaucoup moins rapide que le langage C++, Néanmoins, les nouvelles versions des machines virtuelles Java se sont bien améliorées en matière de rapidité et fournissent une performance acceptable. 3. Application de la programmation orientée objet La POO à obtenu ses premiers succès importants avec la programmation d’interfaces graphiques. Depuis, son application s'est généralisée à de nombreux domaines tels que les applications de gestions, les bases de données et les systèmes réparties. 4. Évaluation de ia programmation orienté objet La programmation orientée objet présente beaucoup d'avantages. Principalement, elle assure la modularité, la réutilisation, la factorisation, la modélisation des applications complexes, l’extensibilité, et la compatibilité. ° Modularité Dans la programmation orientée objet, la modularité est mise en oeuvre par découpage de l'application en un ensemble de modules (classes) fonctionnellement indépendants et en entités plus fines (objets). + Réutilisation La programmation orientée objet permet la réutilisation des programmes et des composants logiciels déjà développés. Une classe sera réutilisée dans sa totalité en créant une nouvelle instance de cette classe comme elle peut être réutilisée partiellement en lui ajoutant de nouvelles propriétés ou en modifiant la sémantique de certaines de ses méthodes. Ceci permet d'exploiter les points communs dans les applications et d'éviter à réinventer les solutions à des problèmes qui sont déjà rencontrés. Mr. Sedairia 4. (2015/2016) 47 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3*"“Licence (ST/ ISIL) |_ Chapitre N°5: Programmation orientée objet e Factorisation Le mécanisme d’héritage permet une factorisation de la partie commune de la définition de plusieurs classes. Ce qui permet d'enlever les redondances, d’alléger les programmes de l'application et de faciliter le travail du programmeur. e Modélisation Un langage orienté objet n’est pas concentré sur les procédures mais il manipule des objets. Un objet est une entité qui contient certains nombre de données et d'actions permettant de manipuler ces données. Donc, l’approche orientée objet est plus proche de notre mode de pensée. Ce qui permet d’avoir une modélisation fidèle du monde réel et par conséquent une meilleure conception des applications ainsi qu’une implémentation plus aisée. e Extensibilité L'extensibilité est la facilité d'adaptation d’une application aux changements de la spécification. Le problème de l’extensibilité devient de plus en plus difficile tant que la taille de l’application est grande. Ce problème est très lié à l'autonomie des modules de l'application. Dans l'approche orientée objet, la décomposition d’une application en différentes classes nous permet de mieux cerner les parties que l’on veut faire évoluer. De plus, la notion d’héritage nous permet de construire de nouvelles classes et de programmer juste la différence avec les classes des applications antérieures. e Compatibilité La compatibilité entre les différents composants d’une application est assurée par la normalisation de ces composants. La programmation orientée objet fournit une structure unique qui est la classe. Les classes sont instanciées d’une seule manière et communiquent entre elles à l’aide d’un unique mécanisme qui est l’envoi de message. 5. Conclusion Les quatres notions : de classe, d’instanciation, d'envoi de message et d’héritage suffisent à définir le concept de programmation orientée objet. D’autres notions moins fondamentales sont introduites dans la programmation orientée objet telles que la généricité qui permet de paramétrer des classes d'objets. Par exemple, la classe pile sera paramétrée par le type de ses éléments. Une classe paramétrée est également appelée « classe générique ». Il y a également d’autres notions qui caractérisent les propriétés techniques des différents langages orientés objet. Bien qu'elle présente plusieurs avantages, l'approche orientée objet présente aussi certains inconvénients si bien que la richesse des concepts à maîtriser exige des concepteurs et des programmeurs de grande qualité. La construction du graphe d’héritage est particulièrement délicate pour les applications complexes. Ainsi, l’invocation dynamique de certaines méthodes pendant l'exécution d’un programme nécessite une recherche de l'implantation de la méthode. Ce qui conduit à un traitement supplémentaire. Mr. Sedairia A. (2015/2016) 48 Université Larbi ben M'hidi - OEB Paradigmes de programmation - 3* "Licence (SI/ ISIL) |_ Chapitre N°5: Programmation orientée objet Résumé langage Java Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme succès : Java est interprété : le programme source est compilé en pseudo code ou byte code puis exécuté par un interpréteur Java : la Java Virtual Machine (JVM). Ce concept est à la base du slogan de Java : WORA (Write Once, Run Anywhere : écrire une fois, exécuter partout). En effet, le byte code, s'il ne contient pas de code spécifique à une plate-forme particulière peut être exécuté et obtenir quasiment les mêmes résultats sur toutes les machines disposant d'une JVM. Java est orienté objet : comme la plupart des langages récents, Java est orienté objet. Chaque fichier source contient la définition d'une ou plusieurs classes qui sont utilisées les unes avec les autres pour former une application. Java n'est pas complètement objet car il définit des types primitifs (entier, caractère, flottant, booléen,...). Java est portable : il est indépendant de toute plate-forme. Java assure la gestion de la mémoire : l'allocation de la mémoire pour un objet est automatique à sa création et Java récupère automatiquement la mémoire inutilisée et restitue les zones de mémoire laissées libres suite à la destruction des objets. Il'existe 2 types de programmes avec Java : les applets et les applications. Une application autonome est une application qui s'exécute sous le contrôle direct du système d'exploitation. Une applet est une application qui est chargée par un navigateur et qui est exécutée sous le contrôle d'un plug-in de ce dernier. La compilation d'un code source: Pour compiler un fichier source il suffit d'invoquer la commande javac avec le nom du fichier source avec son extension .java ( javac NomFichier.java) Le nom du fichier doit correspondre au nom de la classe principale en respectant la casse. Suite à la compilation, le pseudo code Java est enregistré sous le nom NomFichier.class L'exécution d'un programme : Pour exécuter un fichier .class il suffit d'invoquer la commande java avec le nom du fichier source sans son extension .class (java NomFichier ) = javac test. java java test test. java test.class >| executable Mon premier programme public class bonjour { public static void main(String args{]) { System.out.println("Bonjour le monde! "y } } Le paramètre args passé à la méthode main est un tableau de chaînes de caractères qui contient les paramètres passés à l'application java sur la ligne de commande. On a accès à ces paramètres en écrivant args{0], args[1], etc. Le nombre de paramètres est fourni par args.length. Mr. Sedairia A. (2015/2016) 49 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3°"] jcence (S1/ ISIL) | Chapitre N°5: Programmation orientée objet Les constantes Les constantes sont définies avec le mot clé final : leur valeur ne peut pas être modifiée une fois qu'elles sont initialisées. Exemple: public class Math { public static final double PI = 3. 14159265358979323846 ; } Les méthodes Les méthodes sont des fonctions qui implémentent les traitements de la classe. La syntaxe de la déclaration [visibilité] [static] ] [final] type retourné nom_ méthode (argl, ..){..)] Le type retourné peut être élémentaire ou correspondre à un objet. Si la méthode ne retourne rien, alors on utilise void. La valeur de retour de la méthode doit être transmise par l'instruction return. Elle indique la valeur que prend la méthode et termine celle ci : toutes les instructions qui suivent return sont donc ignorées. Exemple : private int add(int a, int b) { return a+b; } Constructeurs d'une classe Un constructeur d'une classe est une méthode particulière. Elle n'a pas de type de retour, et porte le même nom que la classe dans laquelle elle se trouve. Une classe peut avoir plusieurs constructeurs à condition qu'ils aient des signatures différentes, c'est-à-dire des paramètres différents. Une classe qui ne déclare aucun constructeur explicitement en possède en fait toujours un : le constructeur vide par défaut, qui ne prend aucun paramètre. Si l'on définit un constructeur explicite, alors ce constructeur vide par défaut n'existe plus, Le mot-clé this Le mot-clé this désigne en permanence l'objet dans lequel on se trouve. Il existe dès l'instant que l'on se trouve dans l'instance de quelque chose. En particulier, il n'est pas défini dans un élément statique. En général, ce mot-clé est utilisé pour lever l'ambigüité qui peut exister entre le champ d'une classe et un paramètre d'une méthode dans laquelle on se trouve, comme dans l'exemple qui suit. public class Personne { public void setNom(String nom) { this.nom = nom ; //utiliser this pour lever l'ambigüité entre le paramètre et le champ } } Mr. Sedairia À. (2015/2016) 52 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3* “Licence (SI/ISIL) | Chapitre N°5: Programmation orientée objet Le choix public ou privé Les champs et les méthodes d'une classe peuvent être publics (mot-clé public) ou privés (mot-clé private). Comment choisir ? 1. Les classes et leurs constructeurs sont en général publics, leur raison d'être est justement d'être utilisés par d'autres. Les champs contenant les données doivent en général être privés. 3. L'accès aux champs se fait par des méthodes de lecture (préfixées par get) et d'écriture (préfixées par set) qui doivent être publiques. 4. Pour les autres méthodes on décide au cas par cas. Héritage Une classe B qui hérite d’une classe A est une sous-classe de A, et À est la super-classe de B. La classe java.lang.Object est la super-classe de toutes les classes Java, directement ou indirectement. Pour créer une classe B qui hérite d’une classe À, il faut utiliser la syntaxe suivante. public class À { } public class B extends À { } On peut dire aussi que B étend A, ou dérive de A, ou est une classe dérivée de A. On peut également exprimer cette relation en termes de parent / enfant, les parents étant les super- classes, et les enfants les sous-classes. On dit aussi que les objets de B sont des objets de A. Cette dernière façon d'exprimer la relation d'héritage est très pratique, et permet de bien comprendre cette notion d'héritage. Une référence de type A ne peut se voir affecter qu’une référence d’un type À ou dérivé de A. Une des particularités de Java par rapport à d’autres langages objet tels que le C++, est que l'héritage multiple n’est pas autorisé. Une classe ne peut hériter que d’une seule classe à la fois, Empêcher l'héritage Il est possible d'empêcher qu'une classe soit héritée par une autre classe, ou qu'une méthode soit surchargée par une méthode d'une sous-classe. || suffit pour cela d'utiliser le mot- clé final, pris en compte à la compilation. public final class À { // A ne peut être étendue } public B { public final void test() { // ne peut être surchargée, bien que // B puisse être étendue Mr. Sedairia À. (2015/2016) 53 Université Larbi ben M'hidi - OEB Paradigmes de programmation — 3°" Licence (SI/1SIL) |_ Chapitre N°5: Programmation orientée objet Polymorphisme et surcharge de méthodes La surcharge (overload) consiste à écrire plusieurs méthodes de même nom dans une même classe, prenant des paramètres différents, Quand un appel de méthode est fait, le compilateur commence par établir la liste des méthodes portant le bon nom. Ensuite, il regarde la liste des paramètres, trouve celle des méthodes qui correspond le mieux. L'utilisation de telle méthode plutôt que telle autre est donc décidée à la compilation, et non pas à l'exécution. La redéfinition (override) consiste à redéfinir une méthode d'une classe parent dans une classe enfant. Bien souvent, il n'est pas possible, à la compilation, de déterminer quel objet va effectivement être appelé. Ce mécanisme s'appelle liaison dynamique, qui signifie que l'appel d'une méthode est déterminé à l'exécution, suivant la nature de l’objet effectivement référencé (et non seulement suivant le type de la référence). public class À !{ public String nom = "Classe A"; public void ouSuisye(){ System.out.printin("Je suis dans À !") ; } public class B extends A { public String nom = "Classe B"; public void ouSuisJe(){ System.out.println("Je suis dans Bent) } public class Test{ public static void main(String(] args) { À al = new A() ; B b = new B() ; À a2 = b ; System.out.printin('"al.ouSuisde ? "); al.ouSuisJe(); System.out.println("b.ouSuisJe ? "); b.ouSuisJe(); System.out.printin("a2.ouSuisJe ? "); a2.ouSuisJe() ; System.out.println("a2.nom = " + a2.nom) ; } Nous obtenons le résultat : al.ouSuis]e ? Je suis dans À ! b.ouSuisJe ? Je suis dans B... a2.ouSuisJe ? Je suis dans B... a2.nom = Classe _A Les classes abstraites Une classe abstraite est une classe qui ne permet pas d'instancier des objets. Elle ne peut servir que de classe de base pour une dérivation. Elle se déclare ainsi: Mr. Sedairia À. (2015/2016) 54 Université Larbi ben M'hidi - OEB