Objets et Programmation. origine des langages orientés-objet



Documents pareils
Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Chapitre VI- La validation de la composition.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmer en JAVA. par Tama

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Héritage presque multiple en Java (1/2)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours 1: Java et les objets

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation Par Objets

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

Programmation Orientée Objet

TP1 : Initiation à Java et Eclipse

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

Programmation avec des objets : Cours 7. Menu du jour

Auto-évaluation Programmation en Java

Une introduction à Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Langage Java. Classe de première SI

Génie Logiciel avec Ada. 4 février 2013

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Projet de programmation (IK3) : TP n 1 Correction

Programmation en Java IUT GEII (MC-II1) 1

Remote Method Invocation Les classes implémentant Serializable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INITIATION AU LANGAGE JAVA

Plan du cours. Historique du langage Nouveautés de Java 7

Premiers Pas en Programmation Objet : les Classes et les Objets

2. Comprendre les définitions de classes

as Architecture des Systèmes d Information

Initiation à JAVA et à la programmation objet.

Un ordonnanceur stupide

Programmation par les Objets en Java

Arbres binaires de recherche

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Calcul Parallèle. Cours 5 - JAVA RMI

Programme Compte bancaire (code)

UML et les Bases de Données

Utilisation d objets : String et ArrayList

TD3: tableaux avancées, première classe et chaînes

Threads. Threads. USTL routier 1

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

TD/TP PAC - Programmation n 3

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TD/TP PAC - Programmation n 3

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Classes et Objets en Ocaml.

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

PROGRAMMATION PAR OBJETS

Programmation Orientée Objet application au langage Java Version Novembre 2007

Généralités sur le Langage Java et éléments syntaxiques.

Programmation Objet Java Correction

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Synchro et Threads Java TM

Dis papa, c est quoi un bus logiciel réparti?

Programmation Orientée Objet

Cours de Programmation 2

Design patterns. Design patterns - définition. Design patterns - avantages

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Tp 1 correction. Structures de données (IF2)

Développement Logiciel

1 Définition d une classe en Java

Gestion distribuée (par sockets) de banque en Java

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Plan Pédagogique du cours

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Traduction des Langages : Le Compilateur Micro Java

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Chapitre V. Les classes : Object, Vector, etc.

Java 1.5 : principales nouveautés

Programmation Objet I

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Introduction au langage C

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Conception des systèmes répartis

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

OCL - Object Constraint Language

Java c est quoi? Java pourquoi?

Exercices sur les interfaces

Classe Interne, Anonyme & Enumération

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Transcription:

Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève 1 / 24

Origine des langages orientés objet structurés Algol C Pascal (1970) Simula (1967) Smalltalk (1973) Modula-2 Ada Object Pascal C++ Objective C Eiffel Ada95 modulaires Java orientés objet G. Falquet, Th. Estier CUI Université de Genève 2 / 24

Modularité Modularité et Encapsulation technique de décomposition de systèmes réduire la complexité d un système par un assemblage de sous-systèmes plus simples réussite de la technique dépend du degré d indépendance entre les soussystèmes (ou degré de couplage) on appelle module, un sous-système dont le couplage avec les autres est relativement faible par rapport au couplage de ses propres parties Encapsulation technique pour favoriser la modularité (l indépendance) des soussystèmes séparer l interface d un module de son implémentation, interface (partie publique): liste des services offerts (quoi) implémentation (partie privée): réalisation des services (comment) structure de données instructions et algorithmes protection des données par des règles (dans les instructions): les modules communiquent par messages, pas par accès aux données G. Falquet, Th. Estier CUI Université de Genève 3 / 24

Un module message A interface implémentation réponse A service A A X structure de données instructions B service B (d après G. Falquet 1997) G. Falquet, Th. Estier CUI Université de Genève 4 / 24

Types abstraits Type classique ensembles de valeurs possibles Type abstrait ensemble d opérations applicables TA rectangle -- Opération de construction: rect: entier X, entier Y, entier L, entier H --> rectangle; translation: rectangle R, entier DX, entier DY--> rectangle; agrandissement: rectangle R, entier DL, entier DH --> rectangle. -- Opération d accès gauche: rectangle R --> entier; haut: rectangle R --> entier; largeur: rectangle R --> entier; hauter: rectangle R --> entier; bas: rectangle R --> entier; droite: rectangle R --> entier. Sémantique => équations gauche(translation(r, DX, DY)) <==> gauche(r) + DX G. Falquet, Th. Estier CUI Université de Genève 5 / 24

Modules + Types abs. => Langage à objet Un objet est un module privé: variables d instance, code des méthodes public: nom et paramètres des méthodes communication: invocation de méthodes, retour de résultats Classe = générateur d objet génère des objets de même structure localise la définition de structure et action des objets définit la visibilité: private, public, etc. Classe --> type abstrait partie publique --> spécif. (partielle) TA Classe --> structuration du logiciel liens client/serveur -> statiques (variables) -> dynamiques (méthodes) découplage spécification / réalisation -> différentes versions de la réalisation G. Falquet, Th. Estier CUI Université de Genève 6 / 24

Objet Une entité contenant des données (état) et des procédures associées (comportement) méthodes variables Exemple: un objet rectangle surface perimetre hauteur 25 105 largeur diagonale doubler Un objet possède une identité unique et invariable. G. Falquet, Th. Estier CUI Université de Genève 7 / 24

Messages Pour utiliser un objet on lui envoie des messages Un message déclenche l exécution d une méthode Une méthode peut envoyer des messages à d autres objets obja.m(x,y,z) m n objb.k(y,u) i k p obja o en Java : j h objb rect1.doubler(); d = rect1.diagonale(); System.out.println( Hello ); Longtemps je me suis levé de bonne heure.size(); uneliste.insertat(12, bien ); z = Math.cos(2.45); Un système est constitué d objets qui communiquent entre eux. G. Falquet, Th. Estier CUI Université de Genève 8 / 24

Classes Une classe est un moule pour fabriquer des objets de même structure et de même comportement. Un objet est une instance d une classe surface diagonale perimetre hauteur largeur doubler new Rectangle surface diagonale 6 5 rect1 perimetre doubler Une classe C définit un type C. Une variable de type C peut faire référence à un objet de la classe C. G. Falquet, Th. Estier CUI Université de Genève 9 / 24

Déclaration d une classe en Java class Rectangle { // variables d instance int largeur, hauteur; // constructeur Rectangle(int initiall, int initialh) { largeur = initiall; hauteur = initialh; // méthodes int perimetre() { return 2 * (largeur+hauteur); int surface() { return largeur*hauteur; void retaille(double facteur) { largeur = (int)(largeur*facteur); hauteur = (int)(hauteur*facteur); G. Falquet, Th. Estier CUI Université de Genève 10 / 24

Déclaration de variables Utilisation d une classe Java Rectangle r1, r2; Création d objets (instantiation) r1 = new Rectangle(50, 100); r2 = new Rectangle(32, 150); Envoi de messages (utilisation) r2.retaille(1.25); System.out.println( r2.perimetre() ); G. Falquet, Th. Estier CUI Université de Genève 11 / 24

Références aux objets Une variable de type C fait référence à une objet de la classe C. Rectangle ra, rb; ra = new Rectangle(32, 125); rb = ra // les deux variables font référence au même obj. Les variables d instance établissent des relations entre objets. class Dessin { Rectangle cadre; Couleur fond; Point[] forme;... d = new Dessin(); d.cadre = monrectangle; d.fond = rouge; d.form[0] = point1; d.forme[1] = pointz;... cadre d fond forme monrectangle point1 pointz... rouge G. Falquet, Th. Estier CUI Université de Genève 12 / 24

Identité et Egalité Une des difficultés de la programmation O-O: distinction objet / valeur ==> identité égalité r1 = new Rectangle(128, 256); r2 = new Rectangle(256, 128); r3 = new Rectangle(128, 256); (r1 == r2) ==> false (r1 == r3) ==> false r1.equals(r2) ==> false r1.equals(r3) ==> true. Test d égalité (simple) comparaison des variables d instance (complexe) calcul sur les variables d instance class Fraction { private int numerateur, denominateur; public boolean equals(fraction f) { return (this.numerateur * f.denominateur = this.denominateur * f.numerateur); G. Falquet, Th. Estier CUI Université de Genève 13 / 24

Structures de données complexes Tableaux : dans le langage Point[] monpolygone = new Point[12]; Tuples / Records / Struct : classe avec variables d instance class Adresse { int no; String rue, ville, npostal; Ensembles/Listes/Piles/Files : classes de l environnement Vector participants = new Vector(); participants.addelement(joecool); s = participants.size(); Fonctions/Dictionnaires : classes de l environnement HashTable localisation = new HashTable(); localisation.put(cntower, toronto); localisation.get(toureiffel); Itérateurs: Enumeration e = localisation.keys(); while (e.hasmoreelements()) { k = e.nextelement();... G. Falquet, Th. Estier CUI Université de Genève 14 / 24

Egalité profonde et de surface class ListeRect { private Reactangle[] lesrectangles; private int nbrectangles; Egalité de surface si a.lesrectangles[0] == b.lesrectangles[0] et a.lesrectangles[1] == b.lesrectangles[1] et etc. Egalité profonde (ou récursive) a.lesrectangles[0].equals (b.lesrectangles[0]) et a.lesrectangles[1].equals (b.lesrectangles[1]) et etc. Propriétés à maintenir Symétrique: a.equals(b) et b.equals(a) doivent toujours donner le même résultat; Réflexive: a.equals(a) doit toujour donner true; Transitive: si a.equals(b) et b.equals(c) donnent true alors a.equals(c) doit aussi donner true. G. Falquet, Th. Estier CUI Université de Genève 15 / 24

La copie d objets Même genre de questions que l égalité copie de surface for (i=0; i<nbrectangles; i++) {b.lesrectangles[i] = a.lesrectangles[i]; copie profonde for (i=0; i<nbrectangles; i++) {b.lesrectangles[i] = a.lesrectangles[i].clone(); La copie de surface introduit du partage de structure! copie de surface copie profonde a b a b G. Falquet, Th. Estier CUI Université de Genève 16 / 24

Technique de réutilisation Sous-classes class Point { int x, y; public float distanceorigine() {... public float distance(point pt) {... class PointTopographique extends Point { //hérité: int x, y; //hérité: public float distanceorigine() {... //hérité: public float distance(point pt) {... int alt; public int altitude() {... public void ajusteraltitude(int a) {... Réutilisation souple ( tout ou rien) On peut redéfinir des méthodes public float distance(point p) {... ou les surcharger public float distance(pointtopographique p) {... => technique de résolution des message (late binding) G. Falquet, Th. Estier CUI Université de Genève 17 / 24

Suppression des tests de typage class Piece { String nom; boolean estcomposee; //la pièce est-elle composée? int poids; int nbcomposantes; Piece [] composantes;... int poidstotal() { if (estcomposee) { int pt = 0; for (int i = 0; i < nbcomposantes; i++) pt += composantes[i].poidstotal(); return pt; else return poids;... * Variables inutilisées * Code avec des tests de cas G. Falquet, Th. Estier CUI Université de Genève 18 / 24

Taxonomie et factorisation abstract class Piece { String nom; // FACTORISATION abstract int poidstotal(); void affiche() { // FACTORISATION System.out.println("nom:" + nom + " poids: " + this.poidstotal()); class PieceSimple extends Piece { int poids; int poidstotal() {return poids; void affiche() { System.out.println("Pièce simple: "); super.affiche(); class PieceComposee extends Piece { int nbcomposantes; Piece [] composantes; int poidstotal() { int pt = 0; for (int i = 0; i < nbcomposantes; i++) pt += composantes[i].poidstotal(); return pt; G. Falquet, Th. Estier CUI Université de Genève 19 / 24

Mécanisme de liaison dynamique Une variable ou un paramètre de type C peut faire référence à un objet de C ou d une sous-classe de C. Le choix de la méthode à exécuter se fait dynamiquement lors de l envoi d un mesage. p.poidstotal() si p fait référence à une PieceSimple exécute poidstotal() de PieceSimple. si p fait référence à une PieceComposée etc. exécute poidstotal() de PieceComposée. La gestion du typage est laissée au système d exécution. G. Falquet, Th. Estier CUI Université de Genève 20 / 24

Construction d une hiérarchie de classe Conservation de la sémantique des méthodes des méthodes de même nom doivent faire la même chose class Rectangle { double perimetre() {return 2*(largeur+hauteur);... class RectangleMobile { * double perimetre() {return largeur*hauteur; //!!! Créer des abstractions pour factoriser abstract class Personne {... class PersonneMorale extends Personne {... class PersonnePhysique extends Personne {... Eviter les héritages à l envers de la spécialisation class Point {x y... * class Carre extends Points {x y c... * class Rectangle extends Carre {x y c h... Un carré n est pas un point, un rectangle n est pas un carré! Un carré est un rectangle particulier, un point est un carré de taille 0. G. Falquet, Th. Estier CUI Université de Genève 21 / 24

Interfaces Comme une classe abstraite mais sans aucun code de méthodes Définissent des propriétés communes transversalement à la hiérarchie des classes Hétérarchie d interfaces (héritage multiple) Définissent des types Une classe peut implémenter une interface Pour cela elle doit définir toutes les méthodes de l interface. interface Vendable { double prix(); double rabais(); void acheter(); class PieceSimple extends Piece implements Vendable { void affiche(){... double prix(){return 7.5 * poidstotal(); double rabais(){return 0.12 * prix(); void acheter(){...... Vendable avendre; avendre = mapiecesimple12; x = avendre.prix(); G. Falquet, Th. Estier CUI Université de Genève 22 / 24

Outil pour la généricité // l interface est un contrat: s engager à être comparable interface Comparable { boolean inferieur(object c); // classe capable de traiter tout objet respectant le // contrat Comparable. class Tri { static void parechange(comparable[] x) { Comparable tmp; for (int i = 0; i<x.length - 1; i++) { for (int j = i+1; j<x.length; j++) { if (x[j].inferieur(x[i])) { tmp = x[i]; x[i] = x[j]; x[j] = tmp; G. Falquet, Th. Estier CUI Université de Genève 23 / 24

class MotoTriable extends Moto implements Comparable { public boolean inferieur(object c) { return this.prix() <= ((Moto)c).prix(); // Et maintenant trions des motos(triables): public static void main(string[] args) { MotoTriable motos[] = {new MotoTriable( Honda, 900, 18350), new MotoTriable( Kawasaki, 750, 14500), new MotoTriable( Gagiva, 650, 28300); Tri.parEchange(motos); for (int i = 0; i<motos.length; i++) {System.out.println(motos[i].label());; G. Falquet, Th. Estier CUI Université de Genève 24 / 24