Vous êtes sur la page 1sur 13

Programmation Oriente Objet

Cours n5 : tables d'objets


Alain Giorgetti
giorgetti@univ-fcomte.fr
http://lifc.univ-fcomte.fr/~giorgett/
Laboratoire d'Informatique
de lUniversit de Franche-Comt
Tables d'objets - A. Giorgetti 2
Motivations
Stocker une collection d'objets
simplement dans un tableau Pascal (array )
amliorations possibles
faire varier le nombre dobjets stocks
stocker des objets de types diffrents
type objet (table) amliorant le type Pascal
Programmer des traitements itratifs
recherches dlments, tris,
mme mthode applique tous les lments
adaptation automatique de la mthode en fonction du type des
objets de la table : mcanisme de liaison dynamique
Tables d'objets - A. Giorgetti 3
Table : structure de donnes
Dfinition dune table
Collection de donnes de mme type
Nombre de donnes : n, born par un entier B fix
Donnes repres par un rang (= indice) entre 1 et n
Mthodes lmentaires
Connatre le nombre n de donnes (entre 0 et B)
Connatre la donne stocke au rang i, i {1, , n}
Savoir si la table est vide (n = 0) ou pleine (n = B)
Stocker une donne en lui donnant un rang entre 1 et n+1
ter une donne de rang connu (entre 1 et n)
Tables d'objets - A. Giorgetti 4
Comment implanter une table ?
En Pascal
une constante BORNE pour la borne B de la table
un champ tableau (array) pour les donnes
Type des lments de la table
des objets de mme type connu
des objets quelconques : table gnrique
crer un type TObjet anctre des types des objets stocker
comment dfinir le champ tableau ? (taille des objets variable et
inconnue)
on stocke les adresses des objets au lieu des objets eux-mmes !
des adresses dobjets de mme type
table gnrique + contrle des ajouts
Tables d'objets - A. Giorgetti 5
Hirarchie de types de tables (1)
Tables d'objets de mme type TTr uc : TTr ucTable
un type de table diffrent pour chaque type dobjets
Hritage : type ascendant Ttable
pour les caractristiques communes tous les TTr ucTable
Exemple
TTable
TDateTable TPersonneTable TCharTable
Tables d'objets - A. Giorgetti 6
Hirarchie de types de tables (2)
Tables de pointeurs sur objets
pour des objets de type diffrent, donc
de taille diffrente
TRefTable
TRefDateTable TRefJourTable
TObjet
TDate TJour
TFerie
Anctre : TRefTable
table de pointeurs sur un anctre
commun TObjet
Types drivs : TRefTrucTable
tables de pointeurs de type contrl
Tables d'objets - A. Giorgetti 7
Interface du type TRefTable
UNIT reftable;
INTERFACE
USES objet; { unit qui dfinit TObjet }
CONST BORNE = 100; { nombre maximal dlments }
TYPE
TIndice = 1..BORNE;
TTaille = 0..BORNE;
TRefTable = OBJECT()
n : TTaille;
elt : ARRAY[TIndice] OF TPtObjet;
{}
CONSTRUCTOR init;
{Self est construit et Self.n = 0}
{Self est construit}
FUNCTION plein : BOOLEAN;
{retourne TRUE si Self.n = BORNE, FALSE sinon}
END;
IMPLEMENTATION
Tables d'objets - A. Giorgetti 8
Nom du type : TRefTable
un champ pour stocker le nombre de donnes n
un champ elt de type tableau de pointeurs sur TObjet
type TObjet : anctre des types des objets stocker
Reprsentation du champ elt
Le type "Table de pointeurs"
1 BORNE
n
nil nil
n+1
2 3
... ...
rangs : de 1 BORNE (constante)
rangs occups : au dbut du tableau, de 1 n
les objets points sont des objets diffrents en mmoire
Tables d'objets - A. Giorgetti 9
Spcification par pr- et post-condition
FUNCTION nbElt : TTaille;
{retourne le nombre de donnes dans la table}
FUNCTION contenu(i : TIndice) : TPtObjet;
{retourne ladresse stocke au rang i}
{ Self.n = na, na > 0, i entre 1 et na }
PROCEDURE supprime(i : TIndice);
{ supprime Self.elt[i], Self.n = na-1 }
Post-condition partage par toutes les mthodes
{Donnes stockes aux rangs 1 Self.n,
objets points tous distincts}
Quelques mthodes de TRefTable
Tables d'objets - A. Giorgetti 10
Stocker un objet dans la table
Spcification (dans linterface de TRefTable)
{Self.n = na, na < BORNE, i entre 1 et na+1,
pt <> nil, pt absent du tableau Self.elt}
PROCEDURE stocke(i : TIndice; pt : TPtObjet);
{Self.elt[i] = pt, Self.n=na+1 si i=na+1}
Appels de la mthode (Q et R)
Si une table t de type TRefTable existe, si un objet dynamique de
type TDate est point par ptJour, si un objet statique de type
TPersonne est nomm maire, alors on peut crire :
t.stocke(1,ptJour); Q
t.stocke(2,@ maire); R
La transmission (argument rel paramtre formel) est possible si les
types TDate et TPersonne hritent de TObjet
Q pt := ptJour;
R pt := @ maire;
Tables d'objets - A. Giorgetti 11
Afficher tous les objets dune table
Mthode daffichage de TRefTable
On suppose que la mthode TObjet.afficher existe
On spcifie la mthode TRefTable.afficher (o ?)
PROCEDURE afficher;
{affiche tous les objets de la table Self}
On implante la mthode TRefTable.afficher (o ?)
PROCEDURE TRefTable.afficher ;
VAR i : TIndice;
BEGIN
FOR i := 1 TO Self.nbElt DO BEGIN
Self.elt[i]^.afficher ;
END;
END;
TRefTable.afficher
nbElt
elt[i]^.afficher
Tables d'objets - A. Giorgetti 12
Mthode itrative (ou itrateur)
Appliquer tous les objets de la table une mme mthode
meth de type TObjet
Exemple : TRefTable.afficher avec TObjet.afficher
Comportement
statique : quel que soit le type rel TTr uc de lobjet stock,
cest toujours la mthode TObjet.meth qui est appele
dynamique : si lobjet stock est de type TTr uc, alors la
mthode appele est la mthode TTr uc.meth
Intrts du comportement dynamique
prendre en compte le type rel (dynamique) des objets
utiliser les nombreuses mthodes dfinies dans les types drivs du
type gnral TObjet
Tables d'objets - A. Giorgetti 13
Afficher chaque objet selon son type
Amliore laffichage des objets dune table
Prvoir une mthode virtuelle daffichage par type driv de TObjet
Modification des interfaces
TObjet = OBJECT
PROCEDURE afficher;
END;
TDate = OBJECT(TObjet)

PROCEDURE afficher; VIRTUAL;
END;
Implantation identique
Effet : chaque objet de la table est affich selon sa propre mthode
Affichage dynamique
VIRTUAL;
afficher; VIRTUAL;