Premier cours (23 septembre). Cours programmation- orientée objet en Java Licence dinformatique Hugues Fauconnier

Slides:



Advertisements
Présentations similaires
Spécialisation/généralisation Héritage Polymorphisme
Advertisements

SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Approfondissement du langage
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
JAV - TD 6 Structures de données JAVA
Introduction à la POO: Les classes vs les objets
Chapitre IV Object, interfaces, classes imbriquées.
Programmation par Objets et Java
Chapitre III Héritage (début)
VI) exemple: Les astres…
Tests Programmation par contrats
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Classes locales classes définies à l'intérieur d'un bloc de code,
Cours programmation-orientée objet en Java
Cours programmation-orientée objet en Java
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Langage Oriente Objet Cours 4.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
POO-L3 H. Fauconnier1 C) Méthodes: Redéfinition Un classe hérite des méthodes des classes ancêtres Elle peut ajouter de nouvelles méthodes Elle peut surcharger.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
IFT1025, Programmation 2 Jian-Yun Nie
Cours programmation-orientée objet en Java
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Interfaces (fin) classes locales et internes, Object, clonage.
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
Présentation Structures de Données et TDA
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
Types de données abstrait et mécanismes d'encapsulation
Introduction Poo.
Cours du 22 novembre généricité. Chapitre VII Généricité.
Cours 6 Interfaces, classes imbriquées (début). Chapitre IV Interfaces, classes imbriquées, Object.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Cours2 Poo: rappels.
Cours 8 (18 novembre 2011) exceptions. héritagePOO-L3 H. Fauconnier2 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X();
Cours 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
COURS DE PROGRAMMATION ORIENTEE OBJET :
Structures de données IFT-10541
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Objectifs À la fin de ce cours, vous serez capables de :
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Cours n°3 rappels. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a = 5.6d ; double b =
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Types Abstraits.
Cours 7 Classes locales Clonage Divers: tableaux.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Cours 2 Introduction. POO-L3 H. Fauconnier2 D) Un exemple…  Pile abstraite et diverses implémentations.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Transcription de la présentation:

Premier cours (23 septembre)

Cours programmation- orientée objet en Java Licence dinformatique Hugues Fauconnier

POO-L3 H. Fauconnier3 Plan du cours Introduction: programmation objet pourquoi? Comment? Un exemple en Java Classes et objets (révision) Méthodes et variables, constructeurs, contrôle daccès, constructeurs Héritage: liaison dynamique et typage Extension de classe, méthode et héritage, variables et héritage, constructeurs et héritage Héritage: compléments classes abstraites et interfaces, classes internes et emboîtées, classe Object, clonage, Introduction à Swing Exceptions Exceptions, assertions Divers: Noms, conversions, héritage et tableaux Généricité Généralités, types génériques imbriqués, types paramètres bornés, méthodes génériques Types de données String et expressions régulières, Collections, Conteneurs, itérations Entrées-sorties Threads Compléments Reflections, annotations, documentation… Le site du cours: Didel POO

POO-L3 H. Fauconnier4 Bibliographie De nombreux livres sur java (attention java >= 1.5) En ligne: Thinking in Java, 4th edition Bruce Eckel Livre conseillé: The Java Programming language fourth edition AW Ken Arnold, James Gosling, David HolmesKen ArnoldJames Gosling David Holmes

Chapitre I Introduction

POO-L3 H. Fauconnier6 A) Généralités Problème du logiciel: Taille Coût : développement et maintenance Fiabilité Solutions : Modularité Réutiliser le logiciel Certification Comment?

POO-L3 H. Fauconnier7 Typage… Histoire: Fonctions et procédures (60 Fortran) Typage des données (70) Pascal Algol Modules: données + fonctions regroupées (80) ada Programmation objet: classes, objets et héritage

POO-L3 H. Fauconnier8 B) Principes de base de la POO Objet et classe: Classe = définitions pour des données (variables) + fonctions (méthodes) agissant sur ces données Objet = élément dune classe (instance) avec un état (une méthode ou une variable peut être de classe = commune à la classe ou dinstance = dépendant de linstance )

POO-L3 H. Fauconnier9 Principes de bases (suite) Encapsulation et séparation de la spécification et de limplémentation Séparer limplémentation de la spécification. Ne doit être visible de lextérieur que ce qui est nécessaire, les détails dimplémentation sont « cachés » Héritage: Une classe peut hériter des propriétés dune autre classe: un classe peut être une extension dune autre classe.

POO-L3 H. Fauconnier10 Principes de bases de la POO Mais surtout notion de polymorphisme: Si une classe A est une extension dune classe B: A doit pouvoir redéfinir certaines méthodes (disons f()) Un objet a de classe A doit pouvoir être considéré comme un objet de classe B On doit donc accepter : B b; b=a; (a a toutes les propriétés dun B) b.f() Doit appeler la méthode redéfinie dans A! Cest le transtypage (exemple: méthode paint des interfaces graphiques)

POO-L3 H. Fauconnier11 Principes de bases Polymorphisme: Ici lassociation entre le nom f() et le code (code de A ou code de B) a lieu dynamiquement (=à lexécution) Liaison dynamique On peut aussi vouloir « paramétrer » une classe (ou une méthode) par une autre classe. Exemple: Pile dentiers Dans ce cas aussi un nom peut correspondre à plusieurs codes, mais ici lassociation peut avoir lieu de façon statique (au moment de la compilation)

POO-L3 H. Fauconnier12 C) Comment assurer la réutilisation du logiciel? Type abstrait de données définir le type par ses propriétés (spécification) Interface, spécification et implémentation Une interface et une spécification (=les propriétés à assurer) pour définir un type Une (ou plusieurs) implémentation du type abstrait de données Ces implémentations doivent vérifier la spécification

POO-L3 H. Fauconnier13 Comment assurer la réutilisation du logiciel? Pour lutilisateur du type abstrait de données Accès uniquement à linterface (pas daccès à limplémentation) Utilisation des propriétés du type abstrait telles que définies dans la spécification. (Lutilisateur est lui-même un type abstrait avec une interface et une spécification)

POO-L3 H. Fauconnier14 Comment assurer la réutilisation du logiciel? Mais en utilisant un type abstrait lutilisateur n'en connaît pas limplémentation il sait uniquement que la spécification du type abstrait est supposée être vérifiée par l'implémentation. Pour la réalisation concrète, une implémentation particulière est choisie Il y a naturellement polymorphisme

POO-L3 H. Fauconnier15 Notion de contrat (Eiffel) Un client et un vendeur Un contrat lie le vendeur et le client (spécification) Le client ne peut utiliser lobjet que par son interface La réalisation de lobjet est cachée au client Le contrat est conditionné par lutilisation correcte de lobjet (pré-condition) Sous réserve de la pré-condition le vendeur sengage à ce que lobjet vérifie sa spécification (post- condition) Le vendeur peut déléguer: lobjet délégué doit vérifier au moins le contrat (héritage)

POO-L3 H. Fauconnier16 D) Un exemple… Pile abstraite et diverses implémentations

POO-L3 H. Fauconnier17 Type abstrait de données NOM pile[X] FONCTIONS vide : pile[X] -> Boolean nouvelle : -> pile[X] empiler : X x pile[X] -> pile[X] dépiler : pile[X] -> X x pile[X] PRECONDITIONS dépiler(s: pile[X]) (not vide(s)) AXIOMES forall x in X, s in pile[X] vide(nouvelle()) not vide(empiler(x,s)) dépiler(empiler(x,s))=(x,s)

POO-L3 H. Fauconnier18 Remarques Le type est paramétré par un autre type Les axiomes correspondent aux pré- conditions Il ny pas de représentation Il faudrait vérifier que cette définition caractérise bien un pile au sens usuel du terme (cest possible)

POO-L3 H. Fauconnier19 Pile abstraite en java package pile; abstract class Pile { abstract public T empiler(T v); abstract public T dépiler(); abstract public Boolean estVide(); }

POO-L3 H. Fauconnier20 Divers package : regroupement de diverses classes abstract: signifie quil ny a pas dimplémentation public : accessible de lextérieur La classe est paramétrée par un type (java 1.5)

POO-L3 H. Fauconnier21 Implémentations On va implémenter la pile: avec un objet de classe Vector (classe définie dans java.util.package ) en fait il sagit dun ArrayList Avec un objet de classe LinkedList Avec Integer pour obtenir une pile de Integer

POO-L3 H. Fauconnier22 Une implémentation package pile; import java.util.EmptyStackException; import java.util.Vector; public class MaPile extends Pile { private Vector items; // Vector devrait être remplacé par ArrayList public MaPile() { items =new Vector (10); } public Boolean estVide(){ return items.size()==0; } public T empiler(T item){ items.addElement(item); return item; } //…

POO-L3 H. Fauconnier23 Suite //… public synchronized T dépiler(){ int len = items.size(); T item = null; if (len == 0) throw new EmptyStackException(); item = items.elementAt(len - 1); items.removeElementAt(len - 1); return item; }

POO-L3 H. Fauconnier24 Autre implémentation avec listes package pile; import java.util.LinkedList; public class SaPile extends Pile { private LinkedList items; public SaPile(){ items = new LinkedList (); } public Boolean estVide(){ return items.isEmpty(); } public T empiler(T item){ items.addFirst(item); return item; } public T dépiler(){ return items.removeFirst(); }

POO-L3 H. Fauconnier25 Une pile de Integer public class PileInteger extends Pile { private Integer[] items; private int top=0; private int max=100; public PileInteger(){ items = new Integer[max]; } public Integer empiler(Integer item){ if (this.estPleine()) throw new EmptyStackException(); items[top++] = item; return item; } //…

POO-L3 H. Fauconnier26 Suite… public synchronized Integer dépiler(){ Integer item = null; if (this.estVide()) throw new EmptyStackException(); item = items[--top]; return item; } public Boolean estVide(){ return (top == 0); } public boolean estPleine(){ return (top == max -1); } protected void finalize() throws Throwable { items = null; super.finalize(); }

POO-L3 H. Fauconnier27 Comment utiliser ces classes? Le but est de pouvoir écrire du code utilisant la classe Pile abstraite Au moment de lexécution, bien sûr, ce code sappliquera à un objet concret (qui a une implémentation) Mais ce code doit sappliquer à toute implémentation de Pile

POO-L3 H. Fauconnier28 Un main package pile; public class Main { public static void vider(Pile p){ while(!p.estVide()){ System.out.println(p.dépiler()); } public static void main(String[] args) { MaPile p1= new MaPile (); for(int i=0;i<10;i++) p1.empiler(i); vider(p1); SaPile p2= new SaPile (); p2.empiler("un"); p2.empiler("deux"); p2.empiler("trois"); vider(p2); } }

POO-L3 H. Fauconnier29 E) java: quelques rappels… Un source avec le suffixe.java Une classe par fichier source (en principe) même nom pour la classe et le fichier source (sans le suffixe.java ) Méthode public static void main(String[]); main est le point dentrée Compilation génère un. class Exécution en lançant la machine java