Programmation objet. Objectifs - maitriser le paradigme de Programmation Orientée Objet - savoir utiliser efficacement et pleinement le langage Java

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

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

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation en Java IUT GEII (MC-II1) 1

as Architecture des Systèmes d Information

Programmer en JAVA. par Tama

Chapitre 2. Classes et objets

Java c est quoi? Java pourquoi?

Initiation à JAVA et à la programmation objet.

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

Cours 1: Java et les objets

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

Diagramme de classes

Premiers Pas en Programmation Objet : les Classes et les Objets

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

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

TP1 : Initiation à Java et Eclipse

Une introduction à Java

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

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Évaluation et implémentation des langages

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

PROGRAMMATION PAR OBJETS

Programmation par composants (1/3) Programmation par composants (2/3)

INITIATION AU LANGAGE JAVA

Langage Java. Classe de première SI

Utilisation d objets : String et ArrayList

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

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

TD/TP PAC - Programmation n 3

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

Chapitre VI- La validation de la composition.

Programmation avec des objets : Cours 7. Menu du jour

Programmation Orientée Objet Java

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)

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

Le génie logiciel. maintenance de logiciels.

Structurer ses données : les tableaux. Introduction à la programmation

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

UE Programmation Impérative Licence 2ème Année

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

I. Introduction aux fonctions : les fonctions standards

Java - la plateforme

Éléments de programmation et introduction à Java

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Programmation Orientée Objet en C#

Création d objet imbriqué sous PowerShell.

Programmation Objet - Cours II

Traduction des Langages : Le Compilateur Micro Java

ACTIVITÉ DE PROGRAMMATION

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

Projet de Veille Technologique

Java Licence Professionnelle CISII,

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

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

Générer du code à partir d une description de haut niveau

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

La carte à puce. Jean-Philippe Babau

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

TD/TP PAC - Programmation n 3

UML et les Bases de Données

GOL502 Industries de services

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programmation Orientée Objet

Java Licence Professionnelle CISII,

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

Application web de gestion de comptes en banques

1 Définition d une classe en Java

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

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

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

Architecture Orientée Service, JSON et API REST

Programmation MacOSX / ios

Programmation par les Objets en Java

Support de cours et TD Programmation Orientée Objet

Derrière toi Une machine virtuelle!

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Cours 14 Les fichiers

Introduction à la Programmation Parallèle: MPI

Cours de Génie Logiciel

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

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

Université de Bangui. Modélisons en UML

Chapitre 1 : Introduction aux bases de données

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

Transcription:

Programmation objet Objectifs - maitriser le paradigme de Programmation Orientée Objet - savoir utiliser efficacement et pleinement le langage Java - notions de bases d'algorithmique - bases syntaxiques de Java Prérequis Bibliographie : 1

La crise du logiciel Dans les années 1970, la programmation se développe et de nouvelles technologies logicielles apparaissent : mode multi-utilisateurs, interfaces graphiques, programmation concurrente, La taille des programmes augmente également : 10 000 lignes de code pour un logiciel de bonne taille dans les années 1970, 50000 dans les années 1980 (et des millions de nos jours). La crise du logiciel des années 70 est provoquée par : l'impossibilité de maitriser la sureté des logiciels (pannes nombreuses) l'inflation des délais de développement De bonnes techniques de développement logiciel deviennent nécessaires. 2

Critères de qualité du logiciel Utilité : le logiciel doit correspondre aux besoins des utilisateurs Utilisabilité : ergonomie et facilité d'apprentissage et d'utilisation Fiabilité : correction et conformité, robustesse et sureté Efficacité : temps d'exécution faible et utilisation réduite des ressources Interopérabilité : interactions possibles entre logiciels Portabilité : le logiciel doit pouvoir tourner sur le plus possible de systèmes Maintenabilité : facilité de test, concision et lisibilité, extensibilité Réutilisabilité : le code doit pouvoir être réutilisé au maximum 3

Principes du génie logiciel Généralisation : regrouper du code commun à plusieurs programmes dans un seul programme et regrouper un ensemble de fonctionnalités semblables en une fonctionnalité paramétrable. Abstraction : décrire des entités à différents niveaux d'abstraction, ne donner que les éléments pertinents et omettre ceux qui ne le sont pas. Modularité : décomposer les logiciels en composants aussi petits et indépendants que possible. Documentation : documenter le code et produire des notices permettant la réutilisation. Vérification : respecter des spécifications initiales, permettre des tests unitaires. 4

Historique (1/3) La programmation objet est inventée dans les années 1970 comme une extension de la programmation procédurale. L'idée est de concevoir les programmes non plus comme des lignes de codes qui s'exécutent séquentiellement, mais comme des objets qui dialoguent. toto titi tutu tata 5

Historique (2/3) Simula 64 est le premier langage à utiliser ce paradigme mais de façon limitée. Smalltalk, développé à partir de 1971 par Alan Kay et publié en 1980, est le premier vrai langage objet. D'autres suivront : Eiffel en 1986, Python en 1991, Des versions objets de langages existants seront développées : C++ pour le C, ADA95 pour le ADA, Object Pascal pour le Pascal, PHP5 pour le PHP, Pour une histoire des langages, voir par exemple http://www.levenez.com/lang/ 6

Historique (3/3) Première version de Java en 1995, développée principalement par James Gosling. La programmation objet devient à la fin des années 90 le paradigme dominant en programmation. Les technologies objets englobent désormais : La programmation (langages objets, composants, ) la modélisation logicielle (UML, ) la communication entre programmes (CORBA, ) les ateliers logiciels (Eclipse, NetBeans, ) les règles de conception (Design Pattern, ). 7

Notion d'objet (1/4) Chaque objet en mémoire regroupe : des attributs : valeurs typées qui décrivent les caractéristiques de l'objet des méthodes : fonctions qui décrivent ce que l'objet peut faire et qui opèrent sur les attributs des objets Les messages que s'échangent les objets sont des appels de fonction. objet rectangle12 entier h : 5 entier l : 7 couleur c : vert bleu changecouleur(couleur c) entier donnerh() entier donnerl() changeh(entier h) changel(entier l) changecouleur(bleu) donnerh() changedim(4) 5 objet carré27 entier dim : 54 couleur c : rouge changecouleur(couleur c) entier donnerdim() changedim(entier d) 8

Notion d'objet (2/4) Une méthode d'un objet est appelée en préfixant l'appel de fonction par la variable contenant l'objet. Exemple : r.changecouleur(bleu) si r contient l'objet rectangle12. Le programme est lancé par l'appel d'une fonction principale (main) qui peut être placée dans le code de n'importe quel objet. Pour lancer le programme, il faut préciser quelle fonction principale est exécutée. objet rectangle12 // z doit contenir carré27 z.changedim(4); main(){ objet carré27 main(){ // v doit contenir rectangle12 entier e = v.donnerh(); 9

Notion d'objet (3/4) Les attributs des objets peuvent être des objets également. Les paramètres des méthodes et leurs valeurs de retour peuvent également être des objets. objet facteur12527 chaine nom : "Olivier" entier matricule : 12527 Centre_de_Tri ct : ct234 distribuercourrier() triercourrier() objet ct234 chaine nom : "Centre de Tri de Pétaouchnok" Facteur[] personnel : tab456 payertouslesfacteurs() embaucher(facteur f) virer(facteur f) Idéalement, tout est objet (en Smalltalk par exemple). En Java, il existe des types primitifs non objets (byte, short, int, long, float, double, boolean, char). 10

Notion d'objet (4/4) Un enregistrement est un objet sans méthode. Les enregistrements sont décrits par des types enregistrement, qui spécifient les noms des champs et leurs types. static class Personne{ String nom; String prenom; int age = 0; enregistrement e1 nom : "toto" prenom : "tutu" age : 27 enregistrement e2 nom : "toto" prenom : "titi" age : 32 enregistrement e3 nom : "tata" prenom : "tete" age : 12 Les objets sont décrits par des classes, qui spécifient les noms des champs (attributs) et leurs types, mais aussi les méthodes des objets. 11

Notion de classe (1/3) Plusieurs raisons justifient l'existence des classes : Typage : typer les objets permet de tester à la compilation la correction des programmes. Les classes sont les types des objets. Généralisation : des objets peuvent avoir des contenus semblables susceptibles d'être décrits de la même façon même nombre d'attributs, avec les mêmes types mêmes méthodes Il y a tout intérêt à regrouper les méthodes et la déclaration des types des attributs dans une même entité : c'est une classe. La plupart des langages objets permettent donc d'écrire des classes. 12

Notion de Classe (2/3) Une classe définit : des attributs avec leurs noms et leurs types. Les valeurs des attributs ne sont a priori pas définis dans la classe, car propres à chaque objet. Une valeur par défaut peut cependant être spécifiée. des méthodes avec leur signature et le code qui décrit le comportement associé. class Personne{ String nom; String prenom; int age = 0; public String donnenom(){ return nom; public void anniversaire(){ age = age + 1; public void changeprenom(string s){ prenom = s; 13

Notion de Classe (3/3) Les attributs et les méthodes sont appelés membres de la classe. Le membre m d'un objet o est désigné par o.m Les objets décrits par une classe c sont des instances de la classe c class Multiplieur{ int multiplicande; int multiplie(int e){ return multiplicande*e; objet tripleur instance de Multiplieur multiplicande : 3 int multiplie(int e){ return multiplicande*e; objet doubleur instance de Multiplieur multiplicande : 2 int multiplie(int e){ return multiplicande*e; Quelle valeur sera stockée dans la variable i? Multiplieur m; int i = m.multiplie(5); 14

Objet et Classe (1/2) Chaque objet est différent des autres, même si deux objets de même type peuvent avoir les mêmes valeurs d'attributs. objet o1 instance de Personne nom : "toto" prenom : "titi" age : 56 objet o2 instance de Personne nom : "toto" prenom : "titi" age : 56 Les classes sont définies par le programmeur dans son programme, les objets sont créés lors de l'exécution du programme. Les objets peuvent être créés à partir des classes (opérateur new en Java) ou autrement si le langage n'implémente pas les classes. 15

TYPES ABSTRAITS DE DONNEES C'2 EN ENTREE C'1 Objet et Classe (2/2) ALGORITHME sur le papier TYPES ABSTRAITS DE DONNEES C'3 EN SORTIE implémenté par TYPES CONCRETS DE DONNEES C2 EN ENTREE C1 implémenté par PROGRAMME implémenté par dans des fichiers TYPES CONCRETS DE DONNEES C3 EN SORTIE implémenté par implémenté par implémenté par o1 o2 o3 TRAITEMENT DONNEES RESULTAT o4 (exécution d'un programme) dans le processeur et la mémoire 16

Langages objets avec ou sans classe Langages objets à base de classes : chaque objet appartient à (au moins) une classe qui décrit toutes ses instances. Exemples : Simula, Smalltalk, Java, C++ Langages objets à base d'objets (ou de prototypes) : pas de classe, mais un objet peut délèguer ses attributs à ses clônes. Ces langages ne sont généralement pas typés. Exemples : JavaScript, LogTalk Pour un même type de langage, les implémentations du paradigme peuvent être très différentes : Smalltalk et Java par exemple. 17

Méthodes (1/6) Les méthodes se comportent comme des fonctions attachées à chaque objet. Une méthode possède : un nom. des paramètres typés (par des classes!). En Java, les paramètres sont passés par référence, sauf pour les types primitifs. un type de retour (void si la méthode ne retourne rien). class Facteur{ void distribuercourrier(courrier c){ if(c.lepays() == "France"){ c.affecter(centredetrinational); else c.affecter(centredetriinternational); class Courrier{ Pays pays Ville ville Pays lepays(){ return pays; void affecter(centredetri ct){ ct.accepter(this); 18

Méthodes (2/6) Le mot clé this désigne l'objet dans lequel le code est exécuté. Il peut être utilisé pour désigner un attribut ou une méthode. objet doubleur instance de Multiplieur multiplicande : 2 int multiplie(int e){ return this.multiplicande*e; int multiplie(int e, Multiplieur m){ return m.multiplie(e); objet tripleur instance de Multiplieur multiplicande : 3 int multiplie(int e){ return this.multiplicande*e; int multiplie(int e, Multiplieur m){ return m.multiplie(e); Quelles valeurs seront stockées dans i et j? Multiplieur x,y; // on met l'objet doubleur dans x // on met l'objet tripleur dans y int i = x.multiplie(5); int j = x.multiplie(5,y); Le mot clé null est une référence vide (sur aucun objet). 19

Méthodes (3/6) L'envoi d'un message est synchrone : il bloque l'exécution de la méthode appelante jusqu'à ce que la méthode appelée soit terminée, même si la méthode appelée est dans un autre objet. objet o1 void methode1(){ int i = methode2(); Sytem.out.println(i); objet o2 int methode2(){ return this.dimension; La programmation objet est cependant compatible avec la programmation concurrente (multithread). Dans un programme objet multithread, chaque thread exécute ses propres objets. Chaque objet peut même s'exécuter dans un thread différent. 20

Méthodes (4/6) objet facteur12527 distribuercourrier(courrier6543) void distribuercourrier(courrier c){ if(c.retournepays() == "France") c.affecter(centredetrinational); else c.affecter(centredetriinternational); courrier6543.retournepays() "Pérou" courrier6543.affecter (centredetriinternational) objet centredetriinternational adresse : "12 rue Machin " listecourriers : (courrier2,) boolean accepter(courrier c){ objet courrier6543 pays : "Pérou" Pays retournepays(){ return pays; void affecter(centredetri ct){ ct.accepter(this); centredetriinternational.accepter(courrier6543) TRUE 21

Méthodes (5/6) Différentes sortes de méthodes sont distinguées : constructeur : réserve une zone mémoire et initialize les valeurs des attributs de l'objet. destructeur : libère la zone mémoire occupée par l'objet. Les destructeurs n'existent pas en Java. modifieur : modifie la valeur d'un attribut de l'objet. accesseur : renvoie la valeur d'un attribut de l'objet. Pour distinguer entre méthodes, classes, etc, la convention suivante est utilisée en Java : les noms de classe commencent par une majuscule, tous les autres identifiants commencent par une minuscule. 22

Méthodes (6/6) classe Facteur{ En Java, un constructeur a le nom de sa classe et aucune type de retour (pas même void). Par convention, un accesseur a pour nom geta où A est le nom de l'attribut accédé. String nom; int matricule; Facteur(String n, int m){ nom = n; matricule = m; String getnom(){ return nom; Par convention, un modifieur a pour nom seta où A est le nom de l'attribut modifié. int getmatricule(){ return matricule; void setnom(string c){ nom = c; 23

Création des objets (1/2) En Java, un objet est créé par appel à un constructeur de sa classe : L'opérateur new déclenche l'allocation mémoire de l'objet et retourne l'instance créée. Facteur f = new Facteur("Olivier", 03984); Si aucun constructeur n'a été défini dans la classe un constructeur par défaut sans paramètre est ajouté par le compilateur. Facteur f = new Facteur(); Plusieurs constructeurs peuvent être définis avec des paramètres différents (surcharge). 24

Création des objets (2/2) Les attributs pour lesquels des valeurs par défaut sont spécifiées peuvent ne pas être initialisés dans le constructeur. class Facteur{ String nom; int matricule; int age = 0; Facteur(String n, int m){ nom = n; matricule = m; Facteur(String n, int m, int age a){ nom = n; matricule = m; age = a; Facteur(){ nom = n; matricule = m; 25

Destruction des objets (1/2) Lorsque un objet n'est plus référencé nulle part la zone mémoire qu'il occupe peut et même doit être libérée. C++ prévoit des méthodes de destruction (désallocation mémoire). Un destructeur porte le nom de la classe et n'a ni paramètre ni type de retour. En Java la méthode appelée pour détruire l'objet s'appelle finalize. Elle permet de réaliser des traitements pour que la destruction de l'objet soit «propre». class Facteur{ protected void finalize(){ // enlever le facteur de la liste des facteurs dans l'objet Centre_de_tri // supprimer l'adresse du facteur dans l'annuaire // exécuter les dispositions testamentaires du facteur Si on ne redéfinit pas la méthode finalize, la méthode par défaut ne fait rien. 26

Destruction des objets (2/2) La gestion de la destruction des objets est réalisée par le mécanisme automatique de ramasse miettes (garbage collector) qui peut être appelé par System.gc() objet facteur12 objet titi3 // attribut Facteur facteur12 facteur14 Java Virtual Machine (JVM) objet toto27 // void m(facteur f){ appel de la méthode finalize et désallocation mémoire toto27.m(facteur12) objet truc4 Garbage collector 27

Modularité et programmation objet (1/2) Le modèle objet permet d'écrire un programme sous forme d'un ensemble de classes relativement indépendantes. Chaque classe peut être écrite par un programmeur différent, ce qui assouplit le développement logiciel. programme Toto{ // déclarations de types type Facteur type Courrier // déclarations de fonctions int f1() void f2() // programme principal public static void main() class Facteur{ int f1() class C3{ class Courrier{ void f2() 28

Modularité et programmation objet (2/2) Maintenabilité : modifier une classe peut a priori se faire sans modifier d'autres classes, si on ne touche qu'au code interne aux méthodes. Réutilisabilité : une classe peut facilement être réutilisée partout où l'entité qu'elle représente doit être manipulée. Programme de gestion de la paye des facteurs Programme de gestion des tournées des facteurs class Facteur{ int f1() class Facteur{ int f1() 29

Généralisation et abstraction en programmation objet métamétaclasse MétaClasse attributs liste d'attributs liste de méthodes méthodes métaclasse Classe attributs nom liste d'attributs liste de méthodes méthodes métaclasse Attribut attributs nom type méthodes métaclasse Méthode attributs nom liste de paramètres type de retour méthodes class Facteur class Courrier objet facteur1 objet facteur2 objet courrier1 30

Programmer "objet" Paradigme indépendant des langages de programmation certains langages ont été développés directement autour de ce paradigme (Simula, Smalltalk, Eiffel, Java, ). les langages non objet peuvent être étendus avec des mécanismes objet (C, Pascal, PHP, Lips, CAML, ADA, Cobol, Perl, Prolog, ). Il s'agit d'un paradigme, pas toujours implémenté de façon contraignante un programme écrit dans un langage non objet peut respecter le paradigme objet. un programme écrit dans un langage objet peut ne pas respecter ce paradigme. Programmer (proprement) objet dépend en bonne partie du programmeur! 31