Cours programmation- orientée objet en Java...

Click here to load reader

  • date post

    31-Aug-2019
  • Category

    Documents

  • view

    1
  • download

    0

Embed Size (px)

Transcript of Cours programmation- orientée objet en Java...

  • Cours programmation-oriente objet en Java

    Licence dinformatique Hugues Fauconnier

    hf@liafa.univ-paris-diderot.fr (2012-2013)

  • POO-L3 H. Fauconnier 2

    Plan du cours o Introduction:

    n programmation objet pourquoi? Comment? Un exemple en Java o Classes et objets (rvision)

    n Mthodes et variables, constructeurs, contrle daccs, constructeurs o Hritage: liaison dynamique et typage

    n Extension de classe, mthode et hritage, variables et hritage, constructeurs et hritage o Hritage: complments

    n classes abstraites et interfaces, classes internes et embotes, classe Object, clonage, o Exemple de programmation objet: interface graphique et Swing o Exceptions o Divers: Noms, conversions, hritage et tableaux o Gnricit

    n Gnralits, types gnriques imbriqus, types paramtres borns, mthodes gnriques o Types de donnes

    n String et expressions rgulires, Collections, Conteneurs, itrations o Diverses classes:

    n String expressions rgulires, systmes, fichiers, E/S o Threads

    n Introduction la programmation concurrente o Complments

    n Reflections, annotations, documentation o Les objets dans dautres langages

    Le site du cours: http://www.liafa.univ-paris-diderot.fr/~hf/verif/ens/an12-13/poo/L3.POO.html Didel: http://didel.script.univ-paris-diderot.fr/claroline/course/index.php?cid=POO

  • POO-L3 H. Fauconnier 3

    Bibliographie o De nombreux livres sur java (attention

    java >= 1.5) dernire version 1.7 o En ligne:

    n http://mindview.net/Books/TIJ4 n Thinking in Java, 4th edition Bruce Eckel n http://docs.oracle.com/javase/

    o Livre conseill: n The Java Programming language fourth

    edition AW Ken Arnold, James Gosling, David Holmes

  • Chapitre I Introduction

  • POO-L3 H. Fauconnier 5

    A) Gnralits o Problme du logiciel:

    n Taille n Cot : dveloppement et maintenance n Fiabilit

    o Solutions : n Modularit n Rutiliser le logiciel n Certification

    n Comment?

  • POO-L3 H. Fauconnier 6

    Typage o Histoire:

    n Fonctions et procdures (60 Fortran) n Typage des donnes (70) Pascal Algol n Modules: donnes + fonctions regroupes

    (80) ada n Programmation objet: classes, objets et

    hritage

  • POO-L3 H. Fauconnier 7

    B) Principes de base de la POO o Objet et classe:

    n Classe = dfinitions pour des donnes (variables) + fonctions (mthodes) agissant sur ces donnes

    n Objet = lment dune classe (instance) avec un tat

    n (une mthode ou une variable peut tre o de classe = commune la classe ou o dinstance = dpendant de linstance )

  • POO-L3 H. Fauconnier 8

    Principes de bases (suite) o Encapsulation et sparation de la

    spcification et de limplmentation n Sparer limplmentation de la spcification.

    o Ne doit tre visible de lextrieur que ce qui est ncessaire, les dtails dimplmentation sont cachs

    o Hritage: n Une classe peut hriter des proprits dune

    autre classe: un classe peut tre une extension dune autre classe.

  • POO-L3 H. Fauconnier 9

    Principes de bases de la POO o Mais surtout notion de polymorphisme:

    n Si une classe A est une extension dune classe B: o A doit pouvoir redfinir certaines mthodes (disons f()) o Un objet a de classe A doit pouvoir tre considr

    comme un objet de classe B o On doit donc accepter :

    n B b; n b=a; (a a toutes les proprits dun B) n b.f()

    o Doit appeler la mthode redfinie dans A! n Cest le transtypage

    o (exemple: mthode paint des interfaces graphiques)

  • POO-L3 H. Fauconnier 10

    Principes de bases o Polymorphisme:

    n Ici lassociation entre le nom f() et le code (code de A ou code de B) a lieu dynamiquement (= lexcution)

    Liaison dynamique n On peut aussi vouloir paramtrer une classe

    (ou une mthode) par une autre classe. Exemple: Pile dentiers Dans ce cas aussi un nom peut correspondre plusieurs codes, mais ici lassociation peut avoir lieu de faon statique (au moment de la compilation)

  • POO-L3 H. Fauconnier 11

    C) Comment assurer la rutilisation du logiciel? o Type abstrait de donnes

    n dfinir le type par ses proprits (spcification) o Interface, spcification et implmentation

    n Une interface et une spcification (=les proprits assurer) pour dfinir un type

    n Une (ou plusieurs) implmentation du type abstrait de donnes o Ces implmentations doivent vrifier la spcification

  • POO-L3 H. Fauconnier 12

    Comment assurer la rutilisation du logiciel? o Pour lutilisateur du type abstrait de

    donnes n Accs uniquement linterface (pas

    daccs limplmentation) n Utilisation des proprits du type abstrait

    telles que dfinies dans la spcification. n (Lutilisateur est lui-mme un type

    abstrait avec une interface et une spcification)

  • POO-L3 H. Fauconnier 13

    Comment assurer la rutilisation du logiciel? o Mais en utilisant un type abstrait

    lutilisateur n'en connat pas limplmentation n il sait uniquement que la spcification du

    type abstrait est suppose tre vrifie par l'implmentation.

    o Pour la ralisation concrte, une implmentation particulire est choisie

    o Il y a naturellement polymorphisme

  • POO-L3 H. Fauconnier 14

    Notion de contrat (Eiffel) o Un client et un vendeur o Un contrat lie le vendeur et le client (spcification) o Le client ne peut utiliser lobjet que par son

    interface o La ralisation de lobjet est cache au client o Le contrat est conditionn par lutilisation correcte

    de lobjet (pr-condition) o Sous rserve de la pr-condition le vendeur sengage

    ce que lobjet vrifie sa spcification (post-condition)

    o Le vendeur peut dlguer: lobjet dlgu doit vrifier au moins le contrat (hritage)

  • POO-L3 H. Fauconnier 15

    D) Un exemple o Pile abstraite et diverses

    implmentations

  • POO-L3 H. Fauconnier 16

    Type abstrait de donnes NOM pile[X] FONCTIONS vide : pile[X] -> Boolean nouvelle : -> pile[X] empiler : X x pile[X] -> pile[X] dpiler : pile[X] -> X x pile[X] PRECONDITIONS dpiler(s: pile[X]) (not vide(s)) AXIOMES forall x in X, s in pile[X] vide(nouvelle()) not vide(empiler(x,s)) dpiler(empiler(x,s))=(x,s)

  • POO-L3 H. Fauconnier 17

    Remarques o Le type est paramtr par un autre

    type o Les axiomes correspondent aux pr-

    conditions o Il ny pas de reprsentation o Il faudrait vrifier que cette dfinition

    caractrise bien un pile au sens usuel du terme (cest possible)

  • POO-L3 H. Fauconnier 18

    Pile abstraite en java package pile; abstract class Pile { abstract public T empiler(T v); abstract public T dpiler(); abstract public Boolean estVide(); }

  • POO-L3 H. Fauconnier 19

    Divers o package: regroupement de diverses

    classes o abstract: signifie quil ny a pas

    dimplmentation o public: accessible de lextrieur o La classe est paramtre par un

    type

  • POO-L3 H. Fauconnier 20

    Implmentations o On va implmenter la pile:

    n Avec un objet de classe ArrayList n Avec un objet de classe LinkedList n Avec la classe Integer pour obtenir une

    pile de Integer

  • POO-L3 H. Fauconnier 21

    Une implmentation package pile; import java.util.EmptyStackException; import java.util.ArrayList; public class MaPile extends Pile{ private ArrayList items;

    public MaPile() { items =new ArrayList(10); } public Boolean estVide(){ return items.isEmpty(); } public T empiler(T item){ items.add(item); return item; } //

  • POO-L3 H. Fauconnier 22

    Suite // Public T dpiler(){ int len = items.size(); T item = null; if (len == 0) throw new EmptyStackException(); item = items.elementAt(len - 1); items.get(len - 1); return item; } }

  • POO-L3 H. Fauconnier 23

    Autre implmentation 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 dpiler(){ return items.removeFirst(); } }

  • POO-L3 H. Fauconnier 24

    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. Fauconnier 25

    Suite public synchronized Integer dpiler(){ 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. Fauconnier 26

    Comment utiliser ces classes? o Le but est de pouvoir crire du code

    utilisant la classe Pile abstraite o Au moment de lexcution, bien sr, ce

    code sappliquera un objet concret (qui a une implmentation)

    o Mais ce code doit sappliquer toute implmentation de Pile

  • POO-L3 H. Fauconnier 27

    Un main package pile;