UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 :...

49
UE LI314 : Programmation Orientée Objet - JAVA Ludovic DENOYER (d’après les cours de Frédéric Peschanski) [email protected] 15h15 – 17h15

Transcript of UE LI314 : Programmation Orientée Objet - JAVAdenoyer/Courses/2006-2007/LI... · UE LI314 :...

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

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

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

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

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

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

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

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

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

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

[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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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