ue li314 : programmation orientée objet - javadenoyer/courses/2006-2007/li... · ue li314 :...
TRANSCRIPT
![Page 1: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/1.jpg)
UE LI314 : Programmation Orientée Objet - JAVA
Ludovic DENOYER (d’après les cours de Frédéric Peschanski)[email protected] – 17h15
![Page 2: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/2.jpg)
Introduction
Présentation et prérequisIntroduction à la P.O.O
HistoriqueP.O.O et Java
Anatomie d'une classeEncapsulationProtection de l'informationDe la classe à l'objet/instance (instantiation)
Environnement de développement (JDK)
![Page 3: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/3.jpg)
Qu’est ce qu’il va se passer ?
Cours : Apprentissage des concepts de la POO
Un/Deux concepts par coursAttention :
Pour ceux qui ne connaissent pas : difficile à digérerPour ceux qui connaissent : difficile à digérer aussi
TD : Mise en application
TME : Les mains dans le cambouis
![Page 4: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/4.jpg)
Plan Du Cours
10 Cours de 2h + 10 TDs/TMES
Cours 1 : Introduction à la POOCours 2 : Cycle de vieCours 3 et 4 : HéritageCours 5 : InterfacesCours 6 : Exceptions
![Page 5: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/5.jpg)
Plan Du Cours
Cours 7 : Interfaces graphiquesCours 8 : CollectionsCours 9 : Design Patterns 1Cours 10 : Design Patterns 2
![Page 6: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/6.jpg)
RemarquesCours orientés Ingénierie
Pas un cours « syntaxique » !!!
Prérequis : programmation en C et initiation Java (sinon tutoriaux sur Internet ou livre à la bibliothèque, etc.) + se débrouiller avec les API Java
Centré sur les concepts fondamentaux
Encapsulation, Héritage, polymorphisme
…
![Page 7: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/7.jpg)
Remarques
Utilisation de diagrammes UML simples
Pas un cours d’analyse/conception mais de conception/implémentation
Importance des tests unitaires !
![Page 8: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/8.jpg)
Remarques
La présence en cours est vivement conseillée:
Accès au tutorat
La présence en TD/TMEs est obligatoire
Interros suprises !
![Page 9: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/9.jpg)
Un site Web
http://www-connex.lip6.fr/~denoyer/Courses/2006-2007/LI314-eleves/pmwiki.php
Accès aux transparents Accès aux enoncés de TDAccès aux enoncés de TME Inscriptions au tutoratEn construction…
![Page 10: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/10.jpg)
[email protected] en place dans la semaineDébut dès la semaine 3Limité à quelques étudiants chaque semainePrincipe
Chaque semaine, je renseigne sur ma présence à Jussieu pour la semaine suivanteInscription individuelle en coursSi présence en coursTutorat <> TD !!!!!!!
![Page 11: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/11.jpg)
Evaluation
CC : 30 %Examen : 70 %
PAS DE PARTIEL =>Note de présence/participation TD/TMENote de TMEInterros surprises (entre 2 et 4)Mini projet (début en semaine 3 ou 4)
Soyez prévoyants (et autonomes) !!!
![Page 12: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/12.jpg)
Un peu d’histoire
![Page 13: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/13.jpg)
Histoire de la POO
Bases de la POO dans les années 60Simula-67 : Langage pour la simulation
Années 70/80Bases de la POOCommunauté de l’Intelligence Artificielle
Langage smalltalk 72 et 80
![Page 14: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/14.jpg)
Histoire de la POO
Années 80Apparition des premiers langages OO
Objective CC++EiffelLisp Object
Années 90 : Passage à l’industrieEmergence du génie logiciel: modélisation (UML)
Essort des langages objet : C++, Java (95), C#, Python, Ruby, etc.
![Page 15: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/15.jpg)
Histoire de la POOA la base d’autres reflexions
l’analyse objet (AOO ou OOA en anglais), la conception objet (COO ou OOD en anglais), les banques de données objet (SGBDOO), les langages objets avec les langages àprototypes, ou encore la méthodologie avec MDA (Model Driven Architecture).
Années 2000Paradigme (et non technique)méthodologies/outils/évolutions
prog. générique, tests unitaires (eXtreme ...), etc.
![Page 16: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/16.jpg)
Histoire de JAVALangage de Sun Microsystems
Combler les lacunes de c++PortableEssor avec le Web
1995 : naissance de Java 1.0langage impératif, à classes, fortement typé, packages
Nouveautés: Machine virtuelle, Garbage collector, Multithreading, API riche et portable
1997 : Java 1.1 (1998: JFC Javabeans/Swing)
Rationalisation du langage, Collections API, nio, etc.
1999 : Java 2 (jdk 1.2) : la maturité
Intégration des JFC (Swing, Collections, etc.)2004 : Java 2 édition 5 (jdk 1.5 « tiger »)
Les génériques, auto-boxing, boucles for-each, etc.Améliorations multi-threading
![Page 17: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/17.jpg)
Pourquoi la POOComment comprendre et réutiliser les programmes faits par d’autres Comment réutiliser les programmes que vous avez écrits il y’a six mois et dont vous avez oubliéle fonctionnementComment "cloner" rapidement des programmes déjà fait pour des applications légèrement différentes ?Comment programmer simplement des actions simples sur des éléments variés et complexes ?Comment ajouter des fonctions sans tout réécrire et tout retester ?
![Page 18: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/18.jpg)
Modèle de programmation et modèle objet
Modèle de programmation:faciliter la compréhension du programme étudié, en réduisant la complexitépermettre de simuler le comportement du programme
Modèle objetCalqué sur une réalitéLes caractéristiques fondamentales d’un objet sont :
une identité (ne pas confondre "voiture" et la voiture 2345 FGT 75)un comportement (freinage)un état (elle est rouge, le réservoir est plein)
![Page 19: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/19.jpg)
La POOL’intérêt de la POO par rapport au procédural et au fonctionnel
Le code est plus sûrLes programmes sont plus clairsLa maintenance des applications est facilitéeLe code est facilement réutilisableIl est facile de créer de nouveaux programmes légèrement différents par clonage d’un programme existantIl est facile de faire évoluer des programmesLa POO rend possible le développement de gros programmes
Les inconvénientsLa POO oblige à réfléchir et à modéliser avant de programmer (est-ce réellement un inconvénient)La notation POO n’est pas toujours intuitive (mais toujours verbeuse !)
![Page 20: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/20.jpg)
POO et Java
Langage à 99% objetTypes de base non-objets ... mais autoboxingLangage à classes
Définition des classes (=> déclaration d'un type)Objet = instance d'une classe
Compilation et exécution séparéesjavac: vérificateur de types, compilateur
les variables et les types
java: machine virtuelle (exécution)les références et les classes
![Page 21: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/21.jpg)
Compilation / ExecutionCode source
Compréhensible par l’humain
Code MachineCode binaireSpécifique à un processeurInsupportable
Compilateur = Traducteur
Code Source
COMPILATEUR
Code Machine
![Page 22: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/22.jpg)
Compilation / ExecutionCode source JAVA
Langage POO
ByteCode JAVACode machineD’une machine qui n’existe pas !Machine virtuelle
Quel interet ?
Code Source JAVA
COMPILATEURJAVAC
ByteCode JAVA
![Page 23: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/23.jpg)
Compilation / Execution
![Page 24: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/24.jpg)
Interet de la POO
Architecture de baseEncapsulationHéritage
![Page 25: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/25.jpg)
Architecture de base
![Page 26: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/26.jpg)
Encapsulation
![Page 27: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/27.jpg)
Architecture de base
Objet = Données + Méthodes
![Page 28: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/28.jpg)
Héritage, polymorphisme,…
![Page 29: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/29.jpg)
Anatomie d'une classe (1)
// fichier upmc/pobj/geometrie/Point.javapackage upmc.pobj.geometrie;public class Point { // (1) Type + nom (de classe)
private double x; // (2) Attributsprivate double y;public Point(double x, double y) { // (3) Constructeursthis.x = x;this.y = y;
}public double getX() { // (4) Accesseursreturn x;
}public double getY() {return y;
}
// ça continue ...
// fichier upmc/pobj/geometrie/Point.javapackage upmc.pobj.geometrie;public class Point { // (1) Type + nom (de classe)
private double x; // (2) Attributsprivate double y;public Point(double x, double y) { // (3) Constructeursthis.x = x;this.y = y;
}public double getX() { // (4) Accesseursreturn x;
}public double getY() {return y;
}
// ça continue ...
![Page 30: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/30.jpg)
Anatomie d'une classe (2)
// (4) méthodes (traitements)public double calculeDistance(Point p2) {double dx = Math.abs(p2.getX() - getX());double dy = Math.abs(p2.getY() - getY());return Math.sqrt(dx*dx+dy*dy);
}
public void translater(double tx, double ty) {deplace(x+tx,y+ty);
}// (4) méthodes privéesprivate void deplace(double x, double y) {
this.x=x; this.y=y;}// (5) méthodes standards (ici seulement l'affichage)public String toString() {
return "("+x+","+y+")";}}
// (4) méthodes (traitements)public double calculeDistance(Point p2) {double dx = Math.abs(p2.getX() - getX());double dy = Math.abs(p2.getY() - getY());return Math.sqrt(dx*dx+dy*dy);
}
public void translater(double tx, double ty) {deplace(x+tx,y+ty);
}// (4) méthodes privéesprivate void deplace(double x, double y) {
this.x=x; this.y=y;}// (5) méthodes standards (ici seulement l'affichage)public String toString() {
return "("+x+","+y+")";}}
![Page 31: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/31.jpg)
Classe de programme principal : Point d’entrée// fichier upmc/pobj/geometrie/PointMain.javapackage upmc.pobj.geometrie;
public class PointMain {public static void main(String[] args) {
Point a = new Point(2,1);Point b = new Point(4,4);System.out.println("Point a="+a); // ou
a.toString()System.out.println("Point b="+b);
b.translater(1,-1);System.out.println("Point b="+b);double dist = a.calculeDistance(b);System.out.println("d(a,b)="+dist);
}
// fichier upmc/pobj/geometrie/PointMain.javapackage upmc.pobj.geometrie;
public class PointMain {public static void main(String[] args) {
Point a = new Point(2,1);Point b = new Point(4,4);System.out.println("Point a="+a); // ou
a.toString()System.out.println("Point b="+b);
b.translater(1,-1);System.out.println("Point b="+b);double dist = a.calculeDistance(b);System.out.println("d(a,b)="+dist);
}
![Page 32: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/32.jpg)
Compilation
Commande de compilation: javacjavac <fichier source>.java<fichier source> : Point.java dans le répertoire upmc/pobj/geometrie
cd upmc/pobj/geometrie/javac Point.java
=> si tout se passe bien, création du fichier compilé
upmc/pobj/geometrie/Point.class
![Page 33: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/33.jpg)
Compilation et exécution
Commande de compilationjavac upmc/pobj/geometrie/PointMain.java(création de PointMain.class)
Commande d'exécution : javajava <nom de la classe><nom de la classe> = upmc.pobj.PointMainjava upmc.pobj.PointMain
![Page 34: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/34.jpg)
Principe OO (1) : Encapsulation
Dans la classe Point, on met ensemble:Les données associées à un point
Les attributs : mode d'accès private visibles uniquement dans les méthodes de la classe => protection de l'information (information hiding) vis-à-vis des clientsAccéder en lecture seule aux attributs est parfois nécessaire => accesseursAccéder directement en écriture est dangereux !
Les traitements que l'on peut effectuer sur les points
Les méthodes : mode d'accès public visibles depuis l'extérieur de la classe (accès client)on peut également ajouter des méthodes auxiliaires privées avec le mode d'accès private
![Page 35: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/35.jpg)
Protection de l'informationZone Classe Protection Danger
Indépendance de la représentation
Attributs privés
Excellente AucunPas d'accesseurs directs publiques
Pas de modificateurs directs publiques
Information protégée
Attributs privés
Bonne Utiliser l'attribut accédéAccesseurs directs publiques si nécessaires
Pas de modificateurs directs publiques
Encapsulation minimale
Attributs privés
Moyenne Modification partielle depuis l'extérieurAccesseurs directs publiques si nécessaires
Modificateurs directs publiques si nécessaires
Encapsulation « trouée »
Attributs privés
Mauvaise Modification intégrale depuis l'extérieurAccesseurs directs publiques systématiques
Modificateurs directs publiques systématiques
Pas d'encapsulation Attributs publiques Insuffisante Accès direct aux données
Remarque: en POBJ, on s'en tiendra aux zones vertes (on essaiera)
![Page 36: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/36.jpg)
Représentation des classes (UML)
Vision client (accès public)constructeurs et méthodes publiquespour les utilisateurs de la classe
Vision fournisseur (accès privé)tout ce que contient la classe (accès public+privé)
attributs, méthodes privées, etc.
Pour les autres concepteurs de la classe
IMPORTANT: On ne programme par pour soi, mais pour les autres.
![Page 37: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/37.jpg)
Un mot sur UML
UML (en anglais Unified ModelingLanguage, « langage de modélisation unifié ») est un langage graphique de modélisation des données et des traitements.
![Page 38: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/38.jpg)
Vision Client
![Page 39: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/39.jpg)
Vision fournisseur
![Page 40: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/40.jpg)
Principe OO(2)Agrégation
Attributs = variables (portée de la classe)types de base: int, long, short, float, double, char, bytetypes objet « standards »: String, ArrayList<Integer>, etc.Types objet « utilisateurs »: Point, etc.
Agrégation: attributs de type objet utilisateursRelation: « A UN »
<T1> « A – UN » <T2>
Exemple: Voiture « A UN » MoteurSegment « A UN » Point
![Page 41: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/41.jpg)
Agrégation - exemple
// fichier upmc/pobj/geometrie/Segment.javapackage upmc.pobj.geometrie;public class Segment {
private Point a;private Point b;public Segment(Point a, Point b) {this.a = a; this.b = b;
}public Point getP1() {return a;
}public Point getP2() {return b;
}
// ça continue ...
// fichier upmc/pobj/geometrie/Segment.javapackage upmc.pobj.geometrie;public class Segment {
private Point a;private Point b;public Segment(Point a, Point b) {this.a = a; this.b = b;
}public Point getP1() {return a;
}public Point getP2() {return b;
}
// ça continue ...
Exemple:
![Page 42: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/42.jpg)
Agrégation : suite
public double getLongueur() {return a.calculeDistance(b);
}
public void translater(double dx, double dy) {a.translater(dx,dy);b.translater(dx,dy);
}
public void translater(Point p2) {translater(p2.getX(),p2.getY());
}
public void toString() {return a.toString()+" --> "+b.toString();
}// etc.
}
public double getLongueur() {return a.calculeDistance(b);
}
public void translater(double dx, double dy) {a.translater(dx,dy);b.translater(dx,dy);
}
public void translater(Point p2) {translater(p2.getX(),p2.getY());
}
public void toString() {return a.toString()+" --> "+b.toString();
}// etc.
}
![Page 43: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/43.jpg)
Agrégationreprésentation UML
Vision client (accès public)constructeurs et méthodes publiquespour les utilisateurs de la classe
Vision fournisseur (accès privé)tout ce que contient la classe (accès public+privé)
attributs, méthodes privées, etc.
Pour les autres concepteurs de la classe
RAPPEL: On ne programme par pour soi, mais pour les autres.
![Page 44: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/44.jpg)
Vision client
IMPORTANT: uniquement si accesseurs disponibles (sinon Point est cachée)
![Page 45: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/45.jpg)
Vision fournisseur
![Page 46: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/46.jpg)
Principe OO(3)Liens d'association
Paramètres de méthodes = variables « locales »
types de base ou type objet standard ou utilisateur
Type de retour de méthodelien d'association:
Relation: « UTILISE » (ou « EST ASSOCIE A »)<T1> « UTILISE » <T2>
Exemple: Conducteur « UTILISE » VoitureSegment « UTILISE » Point (pour translation)
![Page 47: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/47.jpg)
Lien d'association: exemple
Remarques: • liens d'association parfois difficile à caractériser (cf. cours UML)•A « UTILISE » B (et non l'inverse) : flèche de A vers B + commentaires• agrégation = cas particulier d'association
![Page 48: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/48.jpg)
Conclusion
Encapsulationune classe = données (attributs) + traitements (méthodes)En Java: une classe définit un type du nom de la classe protection de l'information (attributs private, pas de modificateurs public sauf si vraiment nécessaire)
AgrégationOn peut utiliser des objets comme attributs
Liens d'associationOn peut utiliser des objets en argument ou valeurs de retour de méthodes, les « stocker » dans des attributs, etc.
![Page 49: UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER ... Historique P.O.O et Java Anatomie](https://reader033.vdocuments.mx/reader033/viewer/2022050100/5f3fadcd0255cc14281fc20f/html5/thumbnails/49.jpg)
Conclusion (suite)
En Objet, on programme pour les autresbien distinguer le point de vue client (accès public) du point de vue fournisseur (accès public+privé)importance de la documentation
diagrammes UMLdocumentation du code source (javadoc)
Environnement Java (cf. TME)rappels syntaxiquesassociation paquetage => répertoireAssociation classe public => fichier source .javaProgramme principal