1 Des classes et des objets
2 Hiérarchie d'objets
(Ce qui suit sera repris et largement développé progressivement dans la suite du cours)
Exemple d'objet | Attributs possibles | Méthodes possibles |
---|---|---|
Facture |
|
|
Flux sur fichier |
|
|
Collection d'objets |
|
|
Historique du cours |
|
|
Quand on déclare une variable objet, on réserve un espace en mémoire vive qui va contenir l'adresse d'un objet. Quand on instancie un objet, on crée un espace en mémoire vive dans lequel on stocke l'objet. En affectant une nouvelle instance de classe à une variable objet, on met dans la variable objet l'adresse de l'objet nouvellement créé.
Type primitif On déclare une variable entière :int i; En mémoire vive sont reservés 4 octets. Imaginons qu'il s'agit des octets 1 à 4 :
On affecte une valeur à la variable entière i : i=13; La valeur des champs est modifiées pour enregistrer la valeur affectée :
int j=i; Ici la machine crée un nouvel espace en mémoire vive pour stocker la variable j : imaginons que cela soit fait de l'octet 17 à l'octet 20 :
i=15; Dans ce cas, la machine va à l'adresse qu'elle connait pour i et met la valeur 15 codée 1111 en binaire :
|
Type Objet Voiture voit; //déclaration de variable objet Supposons que le codage des variables objets se fait sur 4 octets et que la machine stocke la variable voit sur les octets 50 à 53. Le contenu qui est stocké pour la variable voit sera interprété comme un adresse sur la mémoire vive. new Voiture(); //instanciation L'instanciation réserve de l'espace en mémoire pour stocker l'objet. La taille réservée en mémoire dépend de la taille de l'objet. Si l'objet a deux attributs qui sont des int, il faudrait 8 octets pour le stocker. Supposons que le stockage concerne les octects 100 à 107. Voit voit=new Voiture(); //Déclaration instanciation Ici on crée deux espaces en mémoire : la machine crée l'espace pour la nouvelle instance stockée en mémoire vive : 100 à 107, puis elle crée un espace de 4 octets (50 à 53) dans laquelle elle enregistre le numéro de l'octet 100 : la variable "pointe" sur l'objet, son contenu est l'adresse de l'objet. Par suite, il devient possible de manipuler les attributs : voit.vitesse=5; Ici, pour exécuter voit.vitesse=5, la machine sait que voit est à l'adresse 50, elle récupère le contenu de cette variable : l'addresse 100. La machine va à l'adresse 100 et affecte à l'espace qui correspond à l'entier vitesse la valeur 5. On peut alors créer une nouvelle variable objet : Voiture voit2=voit; La variable voit2 est stockée aux octets 200 à 203, à cette adresse est affectée la valeur de la variable voit : soit l'adresse 100. De fait en faisant : voit.vitesse=7; La machine sait que voit est à l'adresse 50, elle récupère le contenu de cette variable : l'adresse 100. La machine va alors à l'adresse 100 et affecte à l'espace qui correspond à l'entier vitesse la valeur 7. Dans ce cas, à quelle valeur est voit2.vitesse ? affiche(voit2.vitesse); La machine sait que voit2 est à l'adresse 200, elle récupère le contenu de cette variable : l'adresse 100. La machine va alors à l'adresse 100 et récupère la valeur qui correspond à l'entier vitesse la valeur 7. |
Tout langage objet définit un certain nombre de classes hiérarchisées.
A tout moment, un certain nombre de classes sont "actives". Le progammeur peut vouloir en activer un certain nombre en fonction de ses besoins.
Dès qu'un type d'objet est actif, on peut déclarer une variable de ce type.
Le programmeur rajoute des types d'objets à la hiérarchie existante ou API (Application Programming Interface)
: il peut créer des objets entièrement nouveaux ou des objets dérivés d'objets
pré-existtant dans la hiérarchie du langage qu'il utilise en ajoutant des comportements. Par exemple, une collection d'images peut
induire des comportements différents d'une collection d'objets en général : on peut vouloir comparer les images, les classer selon un
certain ordre etc...
Le bon niveau de granularité : il est possible de faire les opérations de la même manière qu'elles sont faites en programmation classique en programmation objet,
sans définir un seul objet. Ce n'est bien sûr généralement pas la bonne démarche, de même que la démarche qui consisterait à créer trop d'objets pour
une application simple serait une mauvaise démarche.
Pour chaque langage objet il existe une API officielle (celle donnée sur le site de Sun pour java par exemple) et des APIs spécifiques à
certains domaines, développées et mises à disposition. Par exemple, une API de classes pour la 3D en java, des APIs de calcul scientifique etc...