Programmation orientée objet - jb.vioix.fr ?· Présentation de la programmation orientée objet 1.…

Embed Size (px)

Text of Programmation orientée objet - jb.vioix.fr ?· Présentation de la programmation orientée objet...

  • Programmation oriente objet

    Prsentation de la programmation oriente objet

    1

  • Plan du cours

    Avant propos

    Manipulation des objets et des classes

    Construction de nouvelles classes

    Hritage, classes abstraites, interfaces

    Visibilit et encapsulation

    2

  • Avant propos

    La programmation orient objets est ardue. Il faut un certain temps pour assimiler tous les concepts associs.

    Pour bien aborder la suite de ce module, il faut apprendre et admettre un certain nombre de concepts sans forcement les comprendre (tout du moins dans les premires semaines).

    La POO fait appel de nombreux mots de vocabulaire prcis, il est impratif de les connatre pour comprendre (et se comprendre...).

    N'hsitez pas poser des question au fur et mesure du cours !

    Les diffrents lments seront dtaills en TD/TP ce qui en clairera la comprhension.

    Pour bien comprendre la POO, il faut apprhender beaucoup de notion de manire simultanes, il nest pas possible de tout prsenter en mme temps, relisez donc ce cours plusieurs fois.

    A la fin du cours, vous comprendrez la notation :

    System.out.println("...");

    3

  • UML en quelques mots

    Dans ce cours, quelques lments dUML sont prsents pour illustrer les relations.

    UML est une mthode de modlisation des problmes informatiques trs complte.

    Lapproche retenue a t un peu simplifie par rapport la norme, ce module nest pas un cours de gnie logiciel.

    Dans un schma UML, les types sont souvent crit en franais car le mme schma UML pourrait tre utilis pour du Java, C++, ... sans grosses modifications.

    Entre Java et UML, certains notation sont inverses (type de retour des mthodes, ...) il est impratif de respecter cette contrainte.

    Par contre, vous devez savoir comment passer dun diagramme UML un fichier Java sans hsitation ; ce nest quune mcanique que les ordinateurs sont capables de raliser trs simplement. Cette opration ne ncessite aucune intelligence, juste lapplication de rgles simples.

    4

  • Utilisation dobjet

    Dans le cours prcdent nous avons utilis quelques classes :

    les chanes de caractres : String

    le lecteur de flux : Scanner

    le gnrateur alatoire : Random

    ...

    De trs nombreuses classes sont disponibles dans lAPI standard couvrant les principaux besoins (plus dinfos disponibles sur : http://java.sun.com/j2se/1.5.0/docs/api/)

    Il est aussi possible (et cest le but) de crer de nouvelle classes en associant des classes existantes.

    5

    http://java.sun.com/j2se/1.5.0/docs/api/http://java.sun.com/j2se/1.5.0/docs/api/

  • Classes et objets

    String, Scanner, ... sont des classes. Les classes dfinissent les proprits et les mthodes communes tous les lments qui seront cres.

    Chaque lment cre est objet.

    Les classes dfinissent :

    Des proprits (ou attributs) qui stockent linformation,

    Des mthodes utilises pour modifier linformation ou accder linformation.

    6

  • Classes et objets

    Pour pouvoir utiliser un objet, il faut dfinir une variable qui permettra daccder cet objet.

    La dclaration se fait avec le nom dune classe suivie du nom de la variable.

    Lobjet est ensuite cre en utilisant loprateur new suivi du constructeur (une mthode qui porte gnralement le mme nom que la classe). Cette opration porte le nom de cration ou instanciation.

    Pour accder aux attributs ou aux mthodes on utilise la variable suivie dun point et de lattribut ou de la mthode (qui a obligatoirement des parenthses mme sil ny a rien dans les parenthses).

    Les objets pouvant en contenir dautres, plusieurs identifiants (mthode ou attribut) peuvent tre mis lun au bout de lautre, simplement spar par des points.

    7

  • UnAutreEntier

    UnEntier

    Objets et rfrences

    Les objets sont dsigns par les variables, mais contrairement aux types, les variables ne contiennent pas les objets.

    class MonEntier { int valeur;}

    class TestEntier { public static void main(String[] args) { MonEntier UnEntier; MonEntier UnAutreEntier; UnEntier = new MonEntier(); UnAutreEntier = new MonEntier(); UnEntier.valeur = 5; UnAutreEntier.valeur = 5; if (UnEntier==UnAutreEntier){ System.out.println("Les 2 variables dsignent le mme objet"); }else{ System.out.println("Les 2 variables sont diffrentes"); } }}

    valeurvaleur = 5

    valeur

    UnEntier

    UnAutreEntier

    Les 2 variables sont diffrentes

    valeur = 5

    8

  • Objets et rfrences

    Deux variables peuvent rfrencer le mme objet.

    class MonEntier { int valeur;}

    class TestEntier { public static void main(String[] args) { MonEntier UnEntier; MonEntier UnAutreEntier; UnEntier = new MonEntier(); UnAutreEntier = UnEntier; UnEntier.valeur = 5; if (UnEntier==UnAutreEntier){ System.out.println("Les 2 variables dsignent le mme objet"); }else{ System.out.println("Les 2 variables sont diffrentes"); } }}

    valeur

    Les 2 variables dsignent le mme objet

    UnEntier

    UnAutreEntier

    valeur = 5

    UnEntier

    UnAutreEntier

    9

  • Destruction dobjet

    Un objet est dtruit par un systme automatique (le garbage collector) quand plus aucune rfrence ne le dsigne.

    Pour supprimer une rfrence il suffit de lassocier null.

    Quand un objet est dtruit toutes les rfrences quil contenait sont dtruites (mais pas forcement les objets associs, dautre rfrences peuvent exister ailleurs).

    class TestEntier { public static void main(String[] args) { MonEntier UnEntier; MonEntier UnAutreEntier; UnEntier = new MonEntier(); UnAutreEntier = UnEntier; UnEntier.valeur = 5; UnEntier = null;

    UnAutreEntier = null; }}

    valeur

    UnEntier

    UnAutreEntier

    valeur = 5

    UnEntier

    UnAutreEntier

    UnEntier

    UnAutreEntier

    10

  • Utilisation des mthodes

    Les mthodes peuvent retourner des donnes (un type, un objet,... ) , elles sont alors utilises dans une affectation ou un test.

    Les objets reus sont cres par la mthode, on doit juste dclarer des variables qui les rfrenceront.

    Pour les mthodes qui ne renvoient pas de donne, on les utilise simplement sur lobjet.

    class TestEntier { public static void main(String[] args) { File fichier; FileWriter fw; String nomComplet; fichier = new File("Toto.txt"); nomComplet = fichier.getAbsolutePath(); System.out.println("Le nom complet du fichier est : " + nomComplet); if (fichier.canWrite()){ fw = new FileWriter(fichier); fw.write('a'); fw.close(); } }}

    Dclaration des variables rfrenant les objets.

    Cration des objets et affectation rfrences

    Appel dune mthode et affectation de sa valeur de retour

    Appel dune mthode et test de sa valeur de retour

    Utilisation de mthodes sans valeur de retour

    11

  • Classes

    Les classes sont des lments de programme qui dfinissent les attributs et les mthodes qui seront utiliss par un (ou plusieurs) objet(s).

    En Java une classe doit tre dans un fichier et un fichier ne peut contenir quune classe (en seule classe dclare public ce qui est la majorit des cas).

    En Java une classe est dclare en utilisant le mot cl class (normalement prcd de public) suivie du nom de la classe avec toute limplmentation entre des accolades

    Dans les schma UML, les classes sont reprsentes par une boite comprenant 3 cadre avec le nom de la classe dans le premier cadre.

    MaClasse public class MaClasse {

    }

    12

  • Attributs

    Les attributs sont des donnes stocks dans les objets.

    Chaque instance de la classe (chaque objet) sont propre jeu dattributs.

    Les attributs sont dclars comme les variables :

    Un type, une classe ou une interface

    Un nom permettant daccder cet lment.

    Dans les schma UML, les attributs sont reprsentes dans le 2me cadre.

    Fichier

    nom : Chainedroits : entier

    public class Fichier { String nom; int droits;}

    13

  • Lecture et criture des attributs

    Pour accder un attribut prsent dans un objet, on utilise la variable qui rfrence cet objet suivie dun point et du nom de lattribut.

    Les attributs (visibles...) peuvent tre lus et crits comme nimporte quelle autre variable.

    public class Entiers { int valeur;}

    public class Programme { public static void main(String[] args) { Entiers monEntier monEntier = new Entiers(); monEntier.valeur = 10; System.out.println("Dans monEntier la valeur est : " + monEntier.valeur); if (monEntier.valeur == 10) { System.out.println("La valeur stocke est bien 10"); }

    }}

    14

  • Attributs

    Les attributs sont propres chaque objet, ils ne sont pas partags entre les diffrents objets dune mme classe.

    public class Entiers { int valeur;}

    public class Programme { public static void main(String[] args) { Entiers monEntier, monAutreEntier; monEntier = new Entiers(); monAutreEntier = new Entiers(); monEntier.valeur = 10; monAutreEntier.valeur = 20; System.out.println("Dans monEntier la valeur est : " + monEntier.valeur); System.out.println("Dans monAutreEntier la valeur est : " + monAutreEntier.valeur); }}

    Dans monEntier la valeur est : 10Dans monAutreEntier la valeur est : 20

    15

  • Attributs statiques

    Un attribut statique est un attribut qui peut tre utilis sans crer dobjet. Pour y accder, on fait suivre le nom de la classe dun point puis du nom de lattribut.

    Tous les objets issus de cette classe se partagent cet attribut.

    Le modificateur static permet de dfinir un attribut statique (ce modificateur est plac juste avant le type). Dans un schma UML, un attribut statique est soul