SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
Concepts OO avancés




                      1
Plan

1.   Les tableaux
2.   Le principe d’agrégation
3.   Encapsulation et Contrôle des accès
4.   Héritage
5.   Polymorphisme
6.   Surcharge



                                           2
1. Les tableaux

Déclaration de tableaux
 Déclaration de tableaux de types
  fondamentaux ou de classe :
int tab [];
int [] tab;
char s[];
Point p[];


                                     3
1. Les tableaux

 En Java, un tableau est l’instance d’une classe,
 La déclaration ne crée pas l’objet lui-même.

 La déclaration créer simplement une référence

 Le format crochet ouvrant et fermant est hérité des
  langages C et C++. Java offre une alternative de
  format en plaçant les crochets ouvrant et fermant
  avant la variable elle-même :
Création de deux référence de type tableau
  de char et tableau de
char [] s;
int [] tab;
                                                        4
1. Les tableaux

 Les tableaux comme les objets, sont crées en
  utilisant le mot clé new .
 Les tableaux déclarés en dessous peuvent être
  crées comme suit :
s = new char[20];
tab = new int[100];
 La première ligne crée un tableau de dimension 20
  valeurs de type char.
 Le second crée un tableau de 100 variables de type
  int.

                                                       5
1. Les tableaux

//création de la référence et
  instantiation
int [] tab = new int [5]
 ou

//création de la référence
int [] tab;
//instantiation
tab=new int[5];

                                6
1. Les tableaux
   création de la référence tab de type [ ]int
                tabint []

         null




                                                 7
1. Les tableaux
     instantiation et copie de l’adresse dans la référence

                tabint[]

           @1




@1          0              tab[0]int

            0              tab[1]int

            0              tab[2]int
            0              tab[3]int

            0              tab[4]int
                                                             8
1. Les tableaux

Initialisation de tableaux
 Lorsqu’un tableau est créé, chaque élément
  est initialisé à sa valeur par défaut
 Pour le tableau de int ci-dessus, chaque
  élément est initialisé à la valeur 0




                                               9
1. Les tableaux

Limites de tableau
 Dans le langage Java, les indices des tableaux sont
  des entiers commençant à zéro.
 Java génère une exception en cas de dépassement
  d’indice.
 L’obtention de la taille d’un tableau en utilisant la
  variable membre length. Pour une itération de
  tableau le code suivant utilise cette variable :
int list[] = new int [10];
for (int i = 0; i < list.length; i++){
// faire quelque chose.}

                                                          10
1. Les tableaux
   remplir un tableau
int tab[] = {3, 5,9,10 };
 La ligne de code au dessus est
  équivalente à la suivante :
int tab[];
tab = new int[4];
tab[0] = 3;
tab[1] = 5;
tab[2] = 9;
tab[3] = 10;
                                   11
1. Les tableaux

   Notez que la limite de la boucle est déterminé
    par comparaison avec la variable
    list.length plutôt qu’une valeur immédiate
    10.
   Cette approche sécurise davantage le code
    engendré.




                                                 12
2. Principe d’agrégation

   On a vu que les attributs d’une classe sont de type
    primitif

class Date{
int jour,mois,annee;
}
class Cercle{
int rayon;
……
}

                                                          13
2. Principe d’agrégation

   Une classe peut être      class Cercle{
    aussi constitué de type   int rayon;
    structuré                 Point centre;
                              ……
class Point{                  }
int abs,ord
Point(int a,int b)
{abs=a;
ord=b;}
}

                                              14
2. Principe d’agrégation

   Création d’un Cercle de rayon 10 et de centre
    le Point(2,3)

Cercle c1=new Cercle();

//Le cercle est de rayon 0 et le
  centre est à null


                                                15
3.Instanciation.
3.3 Mais que se passe t-il en mémoire
              cCercle

        @1




@1       0              rayonint

       null             centrePoint




                                        16
2. Principe d’agrégation


c1.rayon=10;
c1.centre = new Point(2,3);
//c à maintenant un rayon 10 et le
  centre est à null




                                     17
3.Instanciation.
3.3 Mais que se passe t-il en mémoire
             cCercle

        @1




@1      10
         0             rayonint      @2
                                              2   absint
       @2              centrePoint
                                          3       ordint




                                                      18
2. Principe d’agrégation

 Une classe peut être class Cercle{
  aussi constitué de type int rayon;
  structuré
                          Point centre;
                          Cercle (int r,Point p)
class Point{
                          {
int abs,ord
                          rayon=r;
Point(int a,int b)
                          centre=p;
{abs=a;ord=b;}
                          }
}
                       }

                                                   19
2. Principe d’agrégation

Point p=new Point(1,3)
Cercle c=new Cercle(10,p)

Ou

Cercle c=new Cercle(10,new
  Point(2,3));


                             20
2. Principe d’agrégation

   Les tableaux d’objets

Point tab []=new Point[2]
Il s’agit d’un tableau de 2 référence
  de type Point




                                        21
3.Instanciation.
3.3 Mais que se passe t-il en mémoire
               tabPoint[]

        @1




@1      null                tab[0]Point

       null                 tab[1]Point




                                          22
 Remplir le tableau
tab[0] = new Point(2,3);
tab[1]=new Point(5,6);




                           23
3.Instanciation.
3.3 Mais que se passe t-il en mémoire
             tabPoint[]

        @1
                                            2       abs

                                        3           ord
@1      @2                tab[0]Point
                                                5   abs
       @3                 tab[1]Point
                                                6
                                                     ord




                                                           24
1.Encapsulation & Contrôle des accès

   L’encapsulation est la possibilité de ne
    montrer de l’objet que ce qui est
    nécessaire à son utilisation,
   Les avantages en sont :
       Simplification de l’utilisation des objets,
       Meilleure robustesse du programme,
       Simplification de la maintenance globale de
        l’application.


                                                      25
1. Encapsulation & Contrôle des Accès

class MaDate {
private int jour;
private int mois;
private int annee;
}




                                        26
1.Encapsulation & Contrôle des accès

   L’utilisation du mot-clé private comme
    modificateur de jour, mois et annee au sein
    de la classe MaDate a pour effet de rendre
    impossible tout accès à ces membres à partir
    de n’importe quel code, excepté les
    méthodes de la classe MaDate elle-même.




                                               27
1.Encapsulation & Contrôle des accès

class MaDateUser {
public static void main(String args[])
  {
MaDate mydate = new MaDate();
mydate.jour = 21; // incorrect !
}
}


                                     28
1.Encapsulation & Contrôle des accès

   Cela peut sembler une chose étrange à faire délibérément mais
    présente en fait de gros avantages potentiels pour la qualité du
    programme qui utilise la classe MaDate.
   Les différents éléments de données étant inaccessibles, le seul
    moyen de lire ou d’écrire dans ces éléments est d’utiliser des
    méthodes.
   Ainsi, si une cohérence interne des membres de la classe est
    requise, cette cohérence peut être gérée par les méthodes de la
    classe elle-même.




                                                                       29
1.Encapsulation & Contrôle des accès

 Considérons une classe de date permettant un accès arbitraire aux
  membres depuis l’extérieur. Il serait alors très facile de coder pour
  effectuer l’une des opérations suivantes :
MaDate d = new MaDate();
d.jour = 32;
d.mois = 2; d.jour = 30; // plausible mais faux
d.mois = d.mois + 1; // omettre le contrôle
  //pour retour au début
 Cette affectation, comme beaucoup d’autres, génère des valeurs

 incorrectes ou incohérentes dans les champs de l’objet date.




                                                                      30
1.Encapsulation & Contrôle des accès

   Si les membres de données d’une classe ne
    sont pas exposés, l’utilisateur de la classe est
    contraint de modifier les variables membres
    par l’intermédiaire de méthodes.
   Du fait qu’elles correspondent à du code
    réel, ces méthodes peuvent réaliser des
    contrôles de validité.



                                                   31
1.Encapsulation & Contrôle des accès

 Considérez la méthode suivante comme faisant partie de la
  classe MaDate :
public void setJour(int nouveauJour) {
if (nouveauJour > 31) {
System.err.println(« jour invalide " + nouveauJour);
}
else {
jour = nouveauJour;
}
}
 La méthode vérifie si le jour qu’elle doit définir est en fait valide.
  S’il ne l’est pas, elle ignore la requête et imprime un message.
  Vous pouvez voir que cette classe de dates est efficacement
  protégée contre les dates trop élevées.


                                                                           32
1.Encapsulation & Contrôle des accès

   Outre protéger les données d’un objet contre une modification
    incorrecte, forcer l’utilisateur à accéder aux données via une
    méthode permet de réutiliser plus simplement cette méthode en
    garantissant que les effets secondaires sont correctement gérés.
   Si les données étaient entièrement accessibles, chaque
    utilisateur de la classe aurait à incrémenter la valeur jour, à la
    tester par rapport au nombre de jours contenus dans le mois en
    cours, et à gérer la boucle de fin du mois (voire de fin d’année).
    Cette opération est fastidieuse et source d’erreurs.
   Ces besoins sont bien compris pour les dates, mais d’autres
    types de données présentent des contraintes similaires qui sont
    mal connues.
   En forçant l’utilisateur à utiliser les méthodes fournies, chacun
    peut être assuré que les effets secondaires seront chaque fois
    gérés de façon cohérente et correcte.


                                                                     33
1.Encapsulation & Contrôle des accès

   Cet aspect du regroupement des données et
    du code dans un objet comme celui du
    masquage de données est généralement
    appelé encapsulation.




                                                34
1.Encapsulation & Contrôle des accès

   Les get/set sont des méthodes permettant de
    respectivement lire/modifier les attributs
    privés
   Leur nom et normalisé
    getNomAttribu, setNomAttribu
   Il doit exister une paire get/set pour chaque
    attribut



                                                35
1.Encapsulation & Contrôle des accès

class MaDate {
private int day;
private int month;
private int year;
int getDay(){return day;}
int getMonth(){return month;}
int getYear(){return year;}
void setDay(int d){day=d;}
void setMonth(int m){month=m;}
void setYear(int y){year=y;}
}

                                   36
1.Encapsulation & Contrôle des accès

                                 void setAnnee(int nA)


         void setJour(int nJ)

                                           int getAnnee()
                            jour=30
                            mois=1
                            annee=2009

                                           int getMois()


            int getJour()


                                 void setMois(int nM)




                                                            37
1.Encapsulation & Contrôle des accès




                                   38
1.Encapsulation & Contrôle des accès

   L’encapsulation permet d’offrir aux utilisateurs d’une classe la
    liste des méthodes et éventuellement des attributs utilisables
    depuis l’extérieur.
   Cette liste de services exportables est appelé l’interface de la
    classe et elle est composée d’un ensemble de méthodes et
    d’attributs dits publics.
   Les méthodes et attributs réservés à l’implémentation des
    comportements internes à l’objet sont dits privés. Leur utilisation
    est exclusivement réservée aux méthodes définies dans la
    classe courante.




                                                                      39
1.Encapsulation & Contrôle des accès
Encapsulation : avantages
   1. Simplification de l’utilisation des objets.
       Pour utiliser un objet, inutile de connaître son implémentation, la
        connaissance de son interface suffit. Par exemple, il est inutile de savoir
        que les coordonnées du centre du cercle sont stockées dans deux
        variables cx et cy, qui sont de type int.
   2. Meilleure robustesse du programme
       Une fois un objet testé et développé, un “bug” ne peut pas être généré
        par du code extérieur à l’objet. Par exemple, si on tente par erreur de
        mettre une valeur de type int dans la variable cx ou cy, ce ne sera pas
        permis.
       Nous somme donc obligé d’appeler la méthode publique move(int
        dx, int dy). Si un bug apparaît, c’est alors dans l’objet qu’il faut le
        chercher (notre méthode publique est-elle capable de traiter ce type
        d’erreur ?)
   3. Simplification et maintenance de l’application
       En fonction de ce que nous avons dit précédemment, ce point en est
        une conséquence logique.


                                                                                  40
1.Encapsulation & Contrôle des accès

Attribut ou                 Defaut (rien)   public   private
Méthode


Accessible dans la classe   OUI             OUI      OUI
elle même


Accessible dans une autre   OUI             OUI      NON
classe du même package
(répertoire)

Accessible dans une autre   NON             OUI      NON
classe dans un autre
package (répertoire)

                                                               41
public class Personne {
String nom,prenom;
public static void main(String
  args[]){
Personne p = new Personne();
System.out.println(p);
}
}

                                 42
Personne@de6ced




                  43
public class Personne {
String nom,prenom;
public static void main(String
  args[]){
Personne p = new Personne();
//System.out.println(p);
System.out.println(p.toString());
}
}
                                    44
   Afficher une référence c’est faire appel à la
    méthode toString()




                                                    45
public class Personne{
String nom,prenom;
public String toString(){return « nom=«
  +nom+ « prenom=»+prenom;}
public static void main(String args[]){
Personne p = new Personne();
p.nom=«a »,p.prenom=« b »;
System.out.println(p);
//System.out.println(p.toString());
}
}

                                          46
nom=a prenom=b




                 47

Contenu connexe

Tendances

Etude De Fonctions,2
Etude De Fonctions,2Etude De Fonctions,2
Etude De Fonctions,2atire
 
S3 algebre i (polycopie du cours)
S3 algebre i (polycopie du cours)S3 algebre i (polycopie du cours)
S3 algebre i (polycopie du cours)issa-fariss
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentationDonia Hammami
 
Exercice 30607-corrige biffé
Exercice 30607-corrige bifféExercice 30607-corrige biffé
Exercice 30607-corrige bifféhassan1488
 
Techniques du data mining
Techniques du data miningTechniques du data mining
Techniques du data miningDonia Hammami
 
Support matlab st
Support matlab stSupport matlab st
Support matlab stN NASRI
 
Cours Algorithme: Matrice
Cours Algorithme: MatriceCours Algorithme: Matrice
Cours Algorithme: MatriceInforMatica34
 
3 vb reference
3 vb reference3 vb reference
3 vb referencekkatia31
 
Les opérations fondamentales
Les opérations fondamentalesLes opérations fondamentales
Les opérations fondamentalesDaniela Rotelli
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: TableauInforMatica34
 
Chap 1 espace vectoriel
Chap 1 espace vectorielChap 1 espace vectoriel
Chap 1 espace vectorielAlberto Landim
 
Pricing of American options on stocks with discrete dividends
Pricing of American options on stocks with discrete dividendsPricing of American options on stocks with discrete dividends
Pricing of American options on stocks with discrete dividendsJulien Royer
 
Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41megaplanet20
 

Tendances (18)

Etude De Fonctions,2
Etude De Fonctions,2Etude De Fonctions,2
Etude De Fonctions,2
 
Determinanant
Determinanant Determinanant
Determinanant
 
S3 algebre i (polycopie du cours)
S3 algebre i (polycopie du cours)S3 algebre i (polycopie du cours)
S3 algebre i (polycopie du cours)
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentation
 
Exercice 30607-corrige biffé
Exercice 30607-corrige bifféExercice 30607-corrige biffé
Exercice 30607-corrige biffé
 
les matrices
les matricesles matrices
les matrices
 
Techniques du data mining
Techniques du data miningTechniques du data mining
Techniques du data mining
 
Support matlab st
Support matlab stSupport matlab st
Support matlab st
 
Tp 2 vecteur et matrice
Tp 2 vecteur et matriceTp 2 vecteur et matrice
Tp 2 vecteur et matrice
 
Cours Algorithme: Matrice
Cours Algorithme: MatriceCours Algorithme: Matrice
Cours Algorithme: Matrice
 
3 vb reference
3 vb reference3 vb reference
3 vb reference
 
Les opérations fondamentales
Les opérations fondamentalesLes opérations fondamentales
Les opérations fondamentales
 
Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
Determinanant
DeterminanantDeterminanant
Determinanant
 
Chap 1 espace vectoriel
Chap 1 espace vectorielChap 1 espace vectoriel
Chap 1 espace vectoriel
 
Pricing of American options on stocks with discrete dividends
Pricing of American options on stocks with discrete dividendsPricing of American options on stocks with discrete dividends
Pricing of American options on stocks with discrete dividends
 
Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41Uml: Diagrammes de classes -- Concepts De Base 41
Uml: Diagrammes de classes -- Concepts De Base 41
 

En vedette

Ma famille
Ma familleMa famille
Ma famillemaudhit
 
DCTS - Projets sélectionnés
DCTS -  Projets sélectionnésDCTS -  Projets sélectionnés
DCTS - Projets sélectionnésAna-Maria Popa
 
Historia de las computadoras
Historia de las computadoras Historia de las computadoras
Historia de las computadoras dian130297
 
ριστουγεννα στο παρισι
ριστουγεννα στο παρισιριστουγεννα στο παρισι
ριστουγεννα στο παρισιfilipj2000
 
Trabajo empresarial 23
Trabajo empresarial 23Trabajo empresarial 23
Trabajo empresarial 23chavezmurillo
 
Présentation Mots-Dits Québec
Présentation Mots-Dits QuébecPrésentation Mots-Dits Québec
Présentation Mots-Dits Québecmikaeltheim
 
Limpieza del gabinete
Limpieza del gabineteLimpieza del gabinete
Limpieza del gabineteEsa Silv:3
 
Reportedeprocesador 140624203723-phpapp02
Reportedeprocesador 140624203723-phpapp02Reportedeprocesador 140624203723-phpapp02
Reportedeprocesador 140624203723-phpapp02dian130297
 
Estructurascondicionales simples
Estructurascondicionales simplesEstructurascondicionales simples
Estructurascondicionales simplesteichampa
 
People superbe
People superbePeople superbe
People superbefilipj2000
 
L'Echo - Germes d'étudiant
L'Echo - Germes d'étudiantL'Echo - Germes d'étudiant
L'Echo - Germes d'étudiantSteve Goudsmit
 
La toscane. coro
La toscane. coroLa toscane. coro
La toscane. corofilipj2000
 
1.4.diedrico intersecciones
1.4.diedrico intersecciones1.4.diedrico intersecciones
1.4.diedrico interseccionesarq______
 
3 esob clara romero & robert talica
3 esob clara romero & robert talica3 esob clara romero & robert talica
3 esob clara romero & robert talicaJanoi Romero
 
1m mb 4_national_geographic
1m mb 4_national_geographic1m mb 4_national_geographic
1m mb 4_national_geographicfilipj2000
 

En vedette (20)

Ma famille
Ma familleMa famille
Ma famille
 
DCTS - Projets sélectionnés
DCTS -  Projets sélectionnésDCTS -  Projets sélectionnés
DCTS - Projets sélectionnés
 
Historia de las computadoras
Historia de las computadoras Historia de las computadoras
Historia de las computadoras
 
ριστουγεννα στο παρισι
ριστουγεννα στο παρισιριστουγεννα στο παρισι
ριστουγεννα στο παρισι
 
Trabajo empresarial 23
Trabajo empresarial 23Trabajo empresarial 23
Trabajo empresarial 23
 
InfoSACU
InfoSACUInfoSACU
InfoSACU
 
Présentation Mots-Dits Québec
Présentation Mots-Dits QuébecPrésentation Mots-Dits Québec
Présentation Mots-Dits Québec
 
Limpieza del gabinete
Limpieza del gabineteLimpieza del gabinete
Limpieza del gabinete
 
Reportedeprocesador 140624203723-phpapp02
Reportedeprocesador 140624203723-phpapp02Reportedeprocesador 140624203723-phpapp02
Reportedeprocesador 140624203723-phpapp02
 
Presentación1
Presentación1Presentación1
Presentación1
 
Estructurascondicionales simples
Estructurascondicionales simplesEstructurascondicionales simples
Estructurascondicionales simples
 
People superbe
People superbePeople superbe
People superbe
 
L'Echo - Germes d'étudiant
L'Echo - Germes d'étudiantL'Echo - Germes d'étudiant
L'Echo - Germes d'étudiant
 
La toscane. coro
La toscane. coroLa toscane. coro
La toscane. coro
 
MOTIVACION
MOTIVACIONMOTIVACION
MOTIVACION
 
La nutrición
La nutriciónLa nutrición
La nutrición
 
1.4.diedrico intersecciones
1.4.diedrico intersecciones1.4.diedrico intersecciones
1.4.diedrico intersecciones
 
Synthese paroles 21juin2011
Synthese paroles 21juin2011Synthese paroles 21juin2011
Synthese paroles 21juin2011
 
3 esob clara romero & robert talica
3 esob clara romero & robert talica3 esob clara romero & robert talica
3 esob clara romero & robert talica
 
1m mb 4_national_geographic
1m mb 4_national_geographic1m mb 4_national_geographic
1m mb 4_national_geographic
 

Similaire à Java uik-chap5-poo avance vf

Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingSmee Kaem Chann
 
Enrichissez vos-classes-avec-extends-20
Enrichissez vos-classes-avec-extends-20Enrichissez vos-classes-avec-extends-20
Enrichissez vos-classes-avec-extends-20Asmaa BENGUEDDACH
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Laurent BUNIET
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de javaAmir Souissi
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CAbdelouahed Abdou
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Laurent BUNIET
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfShiniGami0o0
 

Similaire à Java uik-chap5-poo avance vf (20)

Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and Programming
 
Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
Matlab by Prof.Keang Sè Pouv
Matlab by Prof.Keang Sè PouvMatlab by Prof.Keang Sè Pouv
Matlab by Prof.Keang Sè Pouv
 
Enrichissez vos-classes-avec-extends-20
Enrichissez vos-classes-avec-extends-20Enrichissez vos-classes-avec-extends-20
Enrichissez vos-classes-avec-extends-20
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
poo.pdf
poo.pdfpoo.pdf
poo.pdf
 
Ch06
Ch06Ch06
Ch06
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdf
 

Plus de Amel Morchdi

Cours réseaux informatiques ia2
Cours réseaux informatiques  ia2Cours réseaux informatiques  ia2
Cours réseaux informatiques ia2Amel Morchdi
 
Cours r _seaux__chapitre_5
Cours r _seaux__chapitre_5Cours r _seaux__chapitre_5
Cours r _seaux__chapitre_5Amel Morchdi
 
Cours réseaux chap3et4
Cours réseaux chap3et4Cours réseaux chap3et4
Cours réseaux chap3et4Amel Morchdi
 
Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Amel Morchdi
 
Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Amel Morchdi
 
Jeux d instruction du 6809
Jeux d instruction du 6809Jeux d instruction du 6809
Jeux d instruction du 6809Amel Morchdi
 
Cours r _seaux_chap1et2
Cours r _seaux_chap1et2Cours r _seaux_chap1et2
Cours r _seaux_chap1et2Amel Morchdi
 
Cours réseaux informatiques iia2
Cours réseaux informatiques  iia2Cours réseaux informatiques  iia2
Cours réseaux informatiques iia2Amel Morchdi
 
Exam seiia2gl20111
Exam seiia2gl20111Exam seiia2gl20111
Exam seiia2gl20111Amel Morchdi
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19Amel Morchdi
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3Amel Morchdi
 
Java uik-chap3-bases java
Java uik-chap3-bases javaJava uik-chap3-bases java
Java uik-chap3-bases javaAmel Morchdi
 
Java uik-chap2-dev java
Java uik-chap2-dev javaJava uik-chap2-dev java
Java uik-chap2-dev javaAmel Morchdi
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro javaAmel Morchdi
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageAmel Morchdi
 
Seria 3 iia2 2011_2012
Seria 3 iia2 2011_2012Seria 3 iia2 2011_2012
Seria 3 iia2 2011_2012Amel Morchdi
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19Amel Morchdi
 

Plus de Amel Morchdi (20)

Cours réseaux informatiques ia2
Cours réseaux informatiques  ia2Cours réseaux informatiques  ia2
Cours réseaux informatiques ia2
 
Cours r _seaux__chapitre_5
Cours r _seaux__chapitre_5Cours r _seaux__chapitre_5
Cours r _seaux__chapitre_5
 
Cours réseaux chap3et4
Cours réseaux chap3et4Cours réseaux chap3et4
Cours réseaux chap3et4
 
Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++
 
Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++
 
Jeux d instruction du 6809
Jeux d instruction du 6809Jeux d instruction du 6809
Jeux d instruction du 6809
 
Cours r _seaux_chap1et2
Cours r _seaux_chap1et2Cours r _seaux_chap1et2
Cours r _seaux_chap1et2
 
Cours réseaux informatiques iia2
Cours réseaux informatiques  iia2Cours réseaux informatiques  iia2
Cours réseaux informatiques iia2
 
Corrections td4
Corrections td4Corrections td4
Corrections td4
 
Cours s epart2
Cours s epart2Cours s epart2
Cours s epart2
 
Exam seiia2gl20111
Exam seiia2gl20111Exam seiia2gl20111
Exam seiia2gl20111
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
 
Java uik-chap3-bases java
Java uik-chap3-bases javaJava uik-chap3-bases java
Java uik-chap3-bases java
 
Java uik-chap2-dev java
Java uik-chap2-dev javaJava uik-chap2-dev java
Java uik-chap2-dev java
 
Java uik-chap1-intro java
Java uik-chap1-intro javaJava uik-chap1-intro java
Java uik-chap1-intro java
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritage
 
Seria 3 iia2 2011_2012
Seria 3 iia2 2011_2012Seria 3 iia2 2011_2012
Seria 3 iia2 2011_2012
 
Attachments 2011 12_19
Attachments 2011 12_19Attachments 2011 12_19
Attachments 2011 12_19
 
Cours s epartie2
Cours s epartie2Cours s epartie2
Cours s epartie2
 

Java uik-chap5-poo avance vf

  • 2. Plan 1. Les tableaux 2. Le principe d’agrégation 3. Encapsulation et Contrôle des accès 4. Héritage 5. Polymorphisme 6. Surcharge 2
  • 3. 1. Les tableaux Déclaration de tableaux  Déclaration de tableaux de types fondamentaux ou de classe : int tab []; int [] tab; char s[]; Point p[]; 3
  • 4. 1. Les tableaux  En Java, un tableau est l’instance d’une classe,  La déclaration ne crée pas l’objet lui-même.  La déclaration créer simplement une référence  Le format crochet ouvrant et fermant est hérité des langages C et C++. Java offre une alternative de format en plaçant les crochets ouvrant et fermant avant la variable elle-même : Création de deux référence de type tableau de char et tableau de char [] s; int [] tab; 4
  • 5. 1. Les tableaux  Les tableaux comme les objets, sont crées en utilisant le mot clé new .  Les tableaux déclarés en dessous peuvent être crées comme suit : s = new char[20]; tab = new int[100];  La première ligne crée un tableau de dimension 20 valeurs de type char.  Le second crée un tableau de 100 variables de type int. 5
  • 6. 1. Les tableaux //création de la référence et instantiation int [] tab = new int [5]  ou //création de la référence int [] tab; //instantiation tab=new int[5]; 6
  • 7. 1. Les tableaux création de la référence tab de type [ ]int tabint [] null 7
  • 8. 1. Les tableaux instantiation et copie de l’adresse dans la référence tabint[] @1 @1 0 tab[0]int 0 tab[1]int 0 tab[2]int 0 tab[3]int 0 tab[4]int 8
  • 9. 1. Les tableaux Initialisation de tableaux  Lorsqu’un tableau est créé, chaque élément est initialisé à sa valeur par défaut  Pour le tableau de int ci-dessus, chaque élément est initialisé à la valeur 0 9
  • 10. 1. Les tableaux Limites de tableau  Dans le langage Java, les indices des tableaux sont des entiers commençant à zéro.  Java génère une exception en cas de dépassement d’indice.  L’obtention de la taille d’un tableau en utilisant la variable membre length. Pour une itération de tableau le code suivant utilise cette variable : int list[] = new int [10]; for (int i = 0; i < list.length; i++){ // faire quelque chose.} 10
  • 11. 1. Les tableaux remplir un tableau int tab[] = {3, 5,9,10 };  La ligne de code au dessus est équivalente à la suivante : int tab[]; tab = new int[4]; tab[0] = 3; tab[1] = 5; tab[2] = 9; tab[3] = 10; 11
  • 12. 1. Les tableaux  Notez que la limite de la boucle est déterminé par comparaison avec la variable list.length plutôt qu’une valeur immédiate 10.  Cette approche sécurise davantage le code engendré. 12
  • 13. 2. Principe d’agrégation  On a vu que les attributs d’une classe sont de type primitif class Date{ int jour,mois,annee; } class Cercle{ int rayon; …… } 13
  • 14. 2. Principe d’agrégation  Une classe peut être class Cercle{ aussi constitué de type int rayon; structuré Point centre; …… class Point{ } int abs,ord Point(int a,int b) {abs=a; ord=b;} } 14
  • 15. 2. Principe d’agrégation  Création d’un Cercle de rayon 10 et de centre le Point(2,3) Cercle c1=new Cercle(); //Le cercle est de rayon 0 et le centre est à null 15
  • 16. 3.Instanciation. 3.3 Mais que se passe t-il en mémoire cCercle @1 @1 0 rayonint null centrePoint 16
  • 17. 2. Principe d’agrégation c1.rayon=10; c1.centre = new Point(2,3); //c à maintenant un rayon 10 et le centre est à null 17
  • 18. 3.Instanciation. 3.3 Mais que se passe t-il en mémoire cCercle @1 @1 10 0 rayonint @2 2 absint @2 centrePoint 3 ordint 18
  • 19. 2. Principe d’agrégation  Une classe peut être class Cercle{ aussi constitué de type int rayon; structuré Point centre; Cercle (int r,Point p) class Point{ { int abs,ord rayon=r; Point(int a,int b) centre=p; {abs=a;ord=b;} } } } 19
  • 20. 2. Principe d’agrégation Point p=new Point(1,3) Cercle c=new Cercle(10,p) Ou Cercle c=new Cercle(10,new Point(2,3)); 20
  • 21. 2. Principe d’agrégation  Les tableaux d’objets Point tab []=new Point[2] Il s’agit d’un tableau de 2 référence de type Point 21
  • 22. 3.Instanciation. 3.3 Mais que se passe t-il en mémoire tabPoint[] @1 @1 null tab[0]Point null tab[1]Point 22
  • 23.  Remplir le tableau tab[0] = new Point(2,3); tab[1]=new Point(5,6); 23
  • 24. 3.Instanciation. 3.3 Mais que se passe t-il en mémoire tabPoint[] @1 2 abs 3 ord @1 @2 tab[0]Point 5 abs @3 tab[1]Point 6 ord 24
  • 25. 1.Encapsulation & Contrôle des accès  L’encapsulation est la possibilité de ne montrer de l’objet que ce qui est nécessaire à son utilisation,  Les avantages en sont :  Simplification de l’utilisation des objets,  Meilleure robustesse du programme,  Simplification de la maintenance globale de l’application. 25
  • 26. 1. Encapsulation & Contrôle des Accès class MaDate { private int jour; private int mois; private int annee; } 26
  • 27. 1.Encapsulation & Contrôle des accès  L’utilisation du mot-clé private comme modificateur de jour, mois et annee au sein de la classe MaDate a pour effet de rendre impossible tout accès à ces membres à partir de n’importe quel code, excepté les méthodes de la classe MaDate elle-même. 27
  • 28. 1.Encapsulation & Contrôle des accès class MaDateUser { public static void main(String args[]) { MaDate mydate = new MaDate(); mydate.jour = 21; // incorrect ! } } 28
  • 29. 1.Encapsulation & Contrôle des accès  Cela peut sembler une chose étrange à faire délibérément mais présente en fait de gros avantages potentiels pour la qualité du programme qui utilise la classe MaDate.  Les différents éléments de données étant inaccessibles, le seul moyen de lire ou d’écrire dans ces éléments est d’utiliser des méthodes.  Ainsi, si une cohérence interne des membres de la classe est requise, cette cohérence peut être gérée par les méthodes de la classe elle-même. 29
  • 30. 1.Encapsulation & Contrôle des accès  Considérons une classe de date permettant un accès arbitraire aux membres depuis l’extérieur. Il serait alors très facile de coder pour effectuer l’une des opérations suivantes : MaDate d = new MaDate(); d.jour = 32; d.mois = 2; d.jour = 30; // plausible mais faux d.mois = d.mois + 1; // omettre le contrôle //pour retour au début  Cette affectation, comme beaucoup d’autres, génère des valeurs  incorrectes ou incohérentes dans les champs de l’objet date. 30
  • 31. 1.Encapsulation & Contrôle des accès  Si les membres de données d’une classe ne sont pas exposés, l’utilisateur de la classe est contraint de modifier les variables membres par l’intermédiaire de méthodes.  Du fait qu’elles correspondent à du code réel, ces méthodes peuvent réaliser des contrôles de validité. 31
  • 32. 1.Encapsulation & Contrôle des accès  Considérez la méthode suivante comme faisant partie de la classe MaDate : public void setJour(int nouveauJour) { if (nouveauJour > 31) { System.err.println(« jour invalide " + nouveauJour); } else { jour = nouveauJour; } }  La méthode vérifie si le jour qu’elle doit définir est en fait valide. S’il ne l’est pas, elle ignore la requête et imprime un message. Vous pouvez voir que cette classe de dates est efficacement protégée contre les dates trop élevées. 32
  • 33. 1.Encapsulation & Contrôle des accès  Outre protéger les données d’un objet contre une modification incorrecte, forcer l’utilisateur à accéder aux données via une méthode permet de réutiliser plus simplement cette méthode en garantissant que les effets secondaires sont correctement gérés.  Si les données étaient entièrement accessibles, chaque utilisateur de la classe aurait à incrémenter la valeur jour, à la tester par rapport au nombre de jours contenus dans le mois en cours, et à gérer la boucle de fin du mois (voire de fin d’année). Cette opération est fastidieuse et source d’erreurs.  Ces besoins sont bien compris pour les dates, mais d’autres types de données présentent des contraintes similaires qui sont mal connues.  En forçant l’utilisateur à utiliser les méthodes fournies, chacun peut être assuré que les effets secondaires seront chaque fois gérés de façon cohérente et correcte. 33
  • 34. 1.Encapsulation & Contrôle des accès  Cet aspect du regroupement des données et du code dans un objet comme celui du masquage de données est généralement appelé encapsulation. 34
  • 35. 1.Encapsulation & Contrôle des accès  Les get/set sont des méthodes permettant de respectivement lire/modifier les attributs privés  Leur nom et normalisé getNomAttribu, setNomAttribu  Il doit exister une paire get/set pour chaque attribut 35
  • 36. 1.Encapsulation & Contrôle des accès class MaDate { private int day; private int month; private int year; int getDay(){return day;} int getMonth(){return month;} int getYear(){return year;} void setDay(int d){day=d;} void setMonth(int m){month=m;} void setYear(int y){year=y;} } 36
  • 37. 1.Encapsulation & Contrôle des accès void setAnnee(int nA) void setJour(int nJ) int getAnnee() jour=30 mois=1 annee=2009 int getMois() int getJour() void setMois(int nM) 37
  • 39. 1.Encapsulation & Contrôle des accès  L’encapsulation permet d’offrir aux utilisateurs d’une classe la liste des méthodes et éventuellement des attributs utilisables depuis l’extérieur.  Cette liste de services exportables est appelé l’interface de la classe et elle est composée d’un ensemble de méthodes et d’attributs dits publics.  Les méthodes et attributs réservés à l’implémentation des comportements internes à l’objet sont dits privés. Leur utilisation est exclusivement réservée aux méthodes définies dans la classe courante. 39
  • 40. 1.Encapsulation & Contrôle des accès Encapsulation : avantages  1. Simplification de l’utilisation des objets.  Pour utiliser un objet, inutile de connaître son implémentation, la connaissance de son interface suffit. Par exemple, il est inutile de savoir que les coordonnées du centre du cercle sont stockées dans deux variables cx et cy, qui sont de type int.  2. Meilleure robustesse du programme  Une fois un objet testé et développé, un “bug” ne peut pas être généré par du code extérieur à l’objet. Par exemple, si on tente par erreur de mettre une valeur de type int dans la variable cx ou cy, ce ne sera pas permis.  Nous somme donc obligé d’appeler la méthode publique move(int dx, int dy). Si un bug apparaît, c’est alors dans l’objet qu’il faut le chercher (notre méthode publique est-elle capable de traiter ce type d’erreur ?)  3. Simplification et maintenance de l’application  En fonction de ce que nous avons dit précédemment, ce point en est une conséquence logique. 40
  • 41. 1.Encapsulation & Contrôle des accès Attribut ou Defaut (rien) public private Méthode Accessible dans la classe OUI OUI OUI elle même Accessible dans une autre OUI OUI NON classe du même package (répertoire) Accessible dans une autre NON OUI NON classe dans un autre package (répertoire) 41
  • 42. public class Personne { String nom,prenom; public static void main(String args[]){ Personne p = new Personne(); System.out.println(p); } } 42
  • 44. public class Personne { String nom,prenom; public static void main(String args[]){ Personne p = new Personne(); //System.out.println(p); System.out.println(p.toString()); } } 44
  • 45. Afficher une référence c’est faire appel à la méthode toString() 45
  • 46. public class Personne{ String nom,prenom; public String toString(){return « nom=« +nom+ « prenom=»+prenom;} public static void main(String args[]){ Personne p = new Personne(); p.nom=«a »,p.prenom=« b »; System.out.println(p); //System.out.println(p.toString()); } } 46