La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

ISBN 0- 321-49362-1 Chapitre 11 Types de données abstrait et mécanismes d'encapsulation.

Présentations similaires


Présentation au sujet: "ISBN 0- 321-49362-1 Chapitre 11 Types de données abstrait et mécanismes d'encapsulation."— Transcription de la présentation:

1 ISBN Chapitre 11 Types de données abstrait et mécanismes d'encapsulation

2 1-2 Chapitre 11 Sujets Le concept d'abstraction Types de données abstraits Choix de conception Exemples: C++, Java, C# et C Types de données paramétrés Encapsulation Espace de noms

3 1-3 Le concept d'abstraction Une abstraction est la représentation d'une entité par ses éléments les plus significatifs Fondamental en informatique Abstraction des processus: –Sous programmes Abstraction des données: –Sujet de ce chapitre

4 1-4 Type de données abtrait Type de données satisfaisant les conditions suivantes: –La représentation ainsi que les opérations sont définies à l'intérieur d'une seule unité syntactique. –La représentation des instances (objets) du type est invisible à l'extérieur de l'unité syntactique. Les seules opérations possibles sont celles explicitement rendues disponibles dans la définition du type.

5 1-5 Avantages de l'abstraction Programmes mieux structurés et plus facilement modifiables. Permet de compiler séparément différentes unités du programme Fiabilité –La modification de la représentation du type n'a aucune conséquence sur les autres parties qui utilisent le type de données.

6 1-6 Choix de conception Forme de l'unité syntactique contenant la définition du type. Opérations prédéfinies –Affectation –Comparaison Opérations fréquentes –Itérateurs –Accesseurs –Constructeurs –Destructeurs Types paramétriques

7 1-7 Exemples: C++ (1) Influence des struct en C et des classes en Simula 67 L'unité syntactique est la classe Toutes les instances d'une classe partagent un même copie des fonctions membres Chaque instance d'une classe possède sa propre copie des membres qui sont des variables –sauf pour les variables déclarés statiques (variables de classe) Les instances peuvent être statiques, dynamique sur pile ou dynamique sur tas

8 1-8 Exemples: C++ (2) Protection de l'information –Private: pour cacher l'information –Public: Pour l'interface –Protected clause: Pour l'héritage

9 1-9 Exemples: C++ (3) Constructeurs: –Fonction pour initialiser les variables membres une fois l'objet créé –Peut aussi allouer de l'espace si une partie de l'objet est dynamique sur tas –Peut inclure des paramètres –Appelé implicitement lorsque l'objet est créé –Peut aussi être appelé explicitement –Le nom du constructeur est le même que celui de la classe

10 1-10 Exemples: C++ (4) Destructeurs –Nettoie l'environnement lorsque l'objet est détruit: libère la mémoire utilisée par l'objet –Appelé implicitement à la fin de la vie de l'objet –Peut être appelé explicitement –Le nom du destructeur est le même que celui de la classe précédé par le symbole ~

11 1-11 Exemple: C++ (5) class stack { private: int *stackPtr, maxLen, topPtr; public: stack() { // a constructor stackPtr = new int [100]; maxLen = 99; topPtr = -1; }; ~stack () {delete [] stackPtr;}; void push (int num) {…}; void pop () {…}; int top () {…}; int empty () {…}; }

12 1-12 Exemples: C++ (6) Fonctions et classes amies (friend) –Donne accès aux membres privés à d'autres unités syntaxiques –Nécessaire en C++ Exemple: –classe matrice –classe vecteur –multiplication d'une matrice par un vecteur

13 1-13 Exemples: Java (1) Similaire à C++, sauf: –Tous les type définis par l'usager sont des classes –Tous les objets sont alloués sur le tas (on y accède via une variable référence) –On associe explicitement à chaque membre un attribut private, protected ou public (plutôt que de définir des zones private et public) –Java possède un second mécanisme de portée: les packages. Contient plusieurs classes Chaque classe a accès aux membres protected des autres classes du même package. Alternative aux fonctions friend du C++

14 1-14 Exemples: Java (2) classepackage sous classe autres publicOui protectedOui Non (rien)Oui Non privateOuiNon Accès aux membres selon les modificateurs:

15 1-15 Exemple: Java (3) class StackClass { private int [] stackRef; private int [] maxLen, topIndex; public StackClass() { // a constructor stackRef = new int [100]; maxLen = 99; topPtr = -1; }; public void push (int num) {…}; public void pop () {…}; public int top () {…}; public boolean empty () {…}; }

16 1-16 Exemples: C# Influencé par C++ et Java Toutes les instances de classes sont dynamique sur le tas Constructeur par défaut La présence d'un ramasse miettes rend le destructeur moins utile Les struct s sont des classes restreintes ne supportant pas l'héritage.

17 1-17 Exemples: C# (2) Méthode d'accès pour accéder aux variables membres d'une classe: –getter et setter C# contient un mécanisme (les propriétés --properties) facilitant l'implémentation de méthodes d'accès.

18 1-18 Exemple: C# (3) public class Weather { public int DegreeDays { //** DegreeDays est une propriété get {return degreeDays;} set {degreeDays = value;} } private int degreeDays;... }... Weather w = new Weather(); int degreeDaysToday, oldDegreeDays;... w.DegreeDays = degreeDaysToday;... oldDegreeDays = w.DegreeDays;

19 1-19 Exemple: C# (4) Les propriétes permettent: Créer des variables en lecture seule Ajouter des contraintes tels que la vérification de bornes avant l'affectation d'une variable. Modifier l'implémentation des variables membres sans affecter le code client

20 1-20 Types de données paramétrés Permet de créer des TDA pouvant contenir des éléments de type arbitraire Aussi appelé classe générique Supporté en C++, Ada, et C# 2005 Supporté partiellement en Java 5.0 (les paramètres générique doivent être des classes). Inutile dans les langages à typage dynamique comme Python

21 1-21 Exemple: C++ template class stack { … stack (int size) { stk_ptr = new type [size]; max_len = size - 1; top = -1; }; … } stack stk(100);

22 1-22 Exemple: Java Les premières versions ne supportait pas les types génériques définis par l'usager. Les conteneurs (LinkedList, ArrayList, etc.) pouvaient contenir n'importe quel type d'éléments (tous de type Object) Obligé d'utilise une conversion explicite de type. Depuis la version 5.0, Java supporte les type génériques.

23 1-23 Mécanisme d'encapsulation Deux besoins spéciaux pour les grands programmes: –Struturer autrement qu'avec les sous- programmes –Compilation partielle Solution: Regroupement de sous- programmes logiquement reliés en unités de compilation C'est ce qu'on appelle l'encapsulation

24 1-24 Encapsulation en C Les fichiers contiennent un ou plusieurs sous programmes. Ils peuvent être compilés séparément. L'interface est mise dans un fichier d'en-tête Problème: L'éditeur de lien ne vérifie pas la cohérence des types entre un fichiers d'en-tête et le fichier contenant l'implémentation. On utilise le préprocesseur pour inclure le fichier d'en-tête –#include

25 1-25 Encapsulation en C++ Similaire à C Il y a aussi les fonction amies (friend) qui peuvent accéder aux membres privés d'une classe.

26 1-26 C#: Assemblies Collection de fichiers apparaissant comme une unique composante (dll ou exe) Un dll est une collection de classes et de méthodes pouvant être lié dynamiquement en cours d'exécution. Les assemblies peuvent être: –private: disponible à une seule application –public: disponible à toutes les applications. C# possède un modificateur appelés internal. Un membre internal n'est visible que dans les classes d'un même assembly.

27 1-27 Espace de noms Les grand programmes utilisent beaucoup de noms (classes, fonctions, variables globales, etc.). Il est nécessaire d'avoir un mécanisme permettant de définir des espaces de noms. Autre forme d'encapsulation C++ et C#: –Chaque librairie possède son propre espace de noms

28 1-28 Espace de nom (2) Les packages de Java –Peut contenir plus d'une classes –Les classes d'un même package sont des amies (partiel à cause du modificateur private ) –Les clients utilisent les noms de classes avec le nom du package ou utilisent la déclaration import

29 1-29 Sommaire Importance des TDA Deux caractéristiques: Unité syntactique unique et protection de l'information. C++: Utilise les classes Java et C#: similaire à C++ Types de données paramétriques Espace de noms


Télécharger ppt "ISBN 0- 321-49362-1 Chapitre 11 Types de données abstrait et mécanismes d'encapsulation."

Présentations similaires


Annonces Google