OBJET Les concepts.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
(Classes prédéfinies – API Java)
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
La programmation Orienté Objet
Programmation orientée objet
Analyse et Conception orientée objet
Principes de la technologie orientée objets
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Langage Oriente Objet Cours 4.
Mémoire de fin d’études présenté par Amine Brikci-Nigassa
Principes de programmation (suite)
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
C++ : classes Introduction aux Langages Orientés Objets
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la programmation objet Langage Java
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
COURS DE PROGRAMMATION ORIENTEE OBJET :
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Créer des packages.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Campus-Booster ID : Copyright © SUPINFO. All rights reserved La programmation objet, un fondement de la programmation évènementielle.
Introduction à la Programmation Orientée Objet
Langage de Programmation Orientée Objet : C++
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Cours N°4 Mohamed El Hacen Mohamed Dyla Institut professionnel universitaire 1.
Transcription de la présentation:

OBJET Les concepts

Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et modifient des données Programmer c’est concevoir des traitements Paradigme : Modèle de pensée

Approche classique Découpage net entre données et traitement Prog 2 SQL Prog 2 SGBD Prog 3 SP Basée sur la séparation entre le code et les données Un programme est un ensemble de procédures qui utilisent et modifient des données Programmer c’est concevoir des traitements Prog 1

Approche Objet Regrouper (encapsuler) données et traitement au sein d’une même entité : l’objet Un objet est une entité informatique Dont les attributs décrivent l’état Dont les opérations(méthodes) décrivent le comportement Un programme écrit en langage objet: Est un ensemble d’objets ayant chacun une structure et un comportement C’est la résultante de la collaboration de ces objets (qui communiquent par envoi de messages)

Approche objet Un programme devient un ensemble de petites entités informatiques qui interagissent et communiquent par messages

Historique des langages OO ALGOL 1960 LISP 1957 SIMULA 1967 PASCAL C 1972 SMALLTALK 1976 OBJECT PASCAL ADA C++ 1983 OBJECTIVE C EIFFEL 1989 C# 2000 JAVA 1995

Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

L’objet Un objet est défini par : Un objet regroupe ainsi : Ses attributs (ses caractéristiques) Les opérations qu’il supporte (ses méthodes) Un objet regroupe ainsi : Un aspect statique (sa structure, son état) Un aspect dynamique (son comportement)

L’objet uneVoiture Attributs : couleur = bleue poids = 979 kg puissance = 12 CV capacité carburant = 50 l vitesse instantanée =50km/h Opérations : Démarrer () Se déplacer () Mettre de l’essence () uneFenêtre Attributs : point-sup-gauche point-inf-droit texture en-tête Opérations : Activer () Fermer () Réduire (coeff) Agrandir (coeff) Déplacer (lieu) unCompte Attributs : numero solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde ()

Objet et Classe Il est impossible de décrire chaque objet d’un système Pour simplifier, pour abstraire, on décrit des classes d’objets avec: Des caractéristiques communes : Attributs Un comportement commun : Méthodes Une classe est donc une abstraction, un concept

Objet et Classe Les classes ont un double rôle : décrire et classer de façon abstraite des objets servir de « moule » à objets (mécanisme d’instanciation).

Attributs Les attributs définissent la structure d’un objet : ils sont nommés, typés et peuvent posséder une valeur initiale L’état de l’objet correspond à la valeur des attributs à un instant donné unCompte numéro solde : réel =0.0 titulaire Déposer (somme) Retirer (somme) AvoirSolde () Type de l’attribut Nom de l’attribut Valeur initiale

Nom de l’objet recevant le message Méthodes Structure d'un message : Récepteur Sélecteur Paramètre ... Nom de la méthode à activer Nom de l’objet recevant le message unCompte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () 4462 Déposer 100 Déposer L’objet est sollicité de l’extérieur par un message Il réagit à cette sollicitation en exécutant cette méthode 4462

Méthodes Une méthode est un « petit programme » qui exécute un traitement. Les méthodes sont décrites au niveau des classes. Chacune à un nom qui permet de l’activer.

Méthodes Les méthodes peuvent être publiques ou privées. Les méthodes publiques constituent l'interface de l'objet avec l'extérieur. Les méthodes privées sont invisibles de l’extérieur. Données privées Méthodes publiques Méthodes privées

Membres d ’objet Comme on vient de le voir, les objets sont caractérisés par les données et les méthodes qu’ils encapsulent; chaque objet possède ses propres membres selon le modèle de sa classe d ’appartenance. Ce sont les variables d’objet et les méthodes d’objets.

Membres de classe La classe peut elle même être caractérisée par des membres qui lui sont propres. La classe Compte conserve le nombre total de comptes Compte.nbTot La classe Compte propose une méthode qui retourne ce nombre Compte.RetourneNb() Ces membres n’existent qu’à l’unité; ils sont rattachés à la classe et sont partagés par toutes les instances de la classe. On dit alors qu’ils sont statiques (qualifieur static en C++,Java, C#), car ils existent dès le début de l’application. Ce sont les variables de classe et les méthodes de classe.

Membres de classe Cette notion est très utile, à tel point que certaines classes ne font que proposer des membres statiques et ne sont pas destinées à être instanciées. C ’est le cas en C# de la classe Math qui propose les données PI, E et les méthodes log, sin, exp , etc... On dispose ainsi de nombreuses bibliothèques thématiques.

Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Encapsulation L’encapsulation consiste à masquer aux utilisateurs d’un objet les détails relevant de son implémentation (vue interne ou réalisation), et de ne laisser accessible que la vue externe ou interface. Voiture Attributs privés Démarrer kilométrage consommation SeDéplacer Mettredelessence

Encapsulation : Types de visibilité Types de visibilité d’un attribut ou d’une opération Public : visible de toutes les classes Protégé : visible de la classe et des sous-classes Privé : visible uniquement de la classe

Encapsulation Limiter la visibilité, c’est : Protéger l’intérieur de l’objet Dissimuler la complexité Simplifier la maintenance Codifier les échanges avec l’extérieur

Encapsulation Il est important de noter : qu’un objet n’est connu que par son interface : les services qu’il peut rendre qu’il est autonome : il est responsable des actions qu’il sait effectuer.

C# : une classe class Compte { public int numero; private decimal solde; public string titulaire; public void Deposer (decimal somme) solde += somme } public void Retirer (decimal somme) { solde -= somme }

C# : une classe class Compte { private int numero; .... public int GetNumero() return numero; } public void SetNumero(int num) numero = num; class Compte { private int numero; .... public int Numero get return numero; } set numero = value; Fonction d’accès aux attributs Ou assesseurs et modifieurs Propriétés d’objets

Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Cycle de vie de l’objet L’objet naît , vit , meurt : il a un cycle de vie Création d’objet Allocation de mémoire à l’aide de new L’objet est initialisé grâce à un constructeur Utilisation de l’objet : appel de méthodes Destruction d’objet L’objet redevient mémoire L’allocation de mémoire est annulée

Cycle de vie de l’objet L'instanciation est le processus par lequel on crée de nouveaux objets à partir du modèle défini par une classe. Classe L’opérateur new est utilisé pour créer des objets (allocation de mémoire à partir de tas) I n s t a n c e s

Cycle de vie de l’objet Le monde abstrait des concepts Classe unCompte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () Le monde abstrait des concepts Classe numéro 4462 solde 200 titulaire Paul numéro 8765 solde 5000 titulaire Jean Instance de Le monde réel, concret

public void Deposer (decimal somme) class Compte { private int numero; private decimal solde; private string titulaire; public int Numero get{return numero;} set{numero = value;} } public string Titulaire get{return titulaire;} set{titulaire = value;} public decimal Solde get{return solde;} public void Deposer (decimal somme) { solde += somme; } public void Retirer (decimal somme) { solde -= somme; }

C# : Cycle de vie de l’objet class Exemple { static void Main() Compte leCompte = new Compte(); leCompte.Numero=4462; leCompte.Titulaire = “Paul”; leCompte.Deposer(200); Console.WriteLine(leCompte.Solde) // écrit 200 }

C# : Cycle de vie de l’objet class Compte{ private int numero; private decimal solde; private string titulaire; public int Numero { get{return numero;} set{numero = value;}} public string Titulaire { get{return titulaire;} set{titulaire = value;}} public decimal Solde { get{return solde;}} public Compte() { numero=0; solde=0.0M; titulaire=“”;} public void Deposer (decimal somme) { solde += somme; } public void Retirer (decimal somme) { solde -= somme; } } Constructeur par défaut (généré par le compilateur si non codé)

C# : Cycle de vie de l’objet class Compte { public int numero; private decimal solde; public string titulaire; public Compte (int num, decimal mt, string nom) numero=num; solde=mt; titulaire=nom; } public void Deposer (decimal somme) { solde += somme; } public void Retirer (decimal somme) { solde -= somme; } Constructeur surchargé

C# : Cycle de vie de l’objet class Compte{ private int numero; private decimal solde; private string titulaire; public int Numero { get{return numero;} set{numero = value;}} public string Titulaire { get{return titulaire;} set{titulaire = value;}} public decimal Solde { get{return solde;}} public Compte (int num, string nom) { numero=num; titulaire=nom;} public void Deposer (decimal somme) { solde += somme; } public void Retirer (decimal somme) { solde -= somme; } } Constructeur surchargé

C# : Cycle de vie de l’objet class Exemple { static void Main() Compte leCompte = new Compte(4462,“ Paul”); leCompte.Deposer(200); Console.WriteLine(leCompte.Solde) // écrit 200 }

Notion de référence L ’identifieur (leCompte) qui est attaché à l ’objet lors de l ’instanciation puis qui permet de le manipuler s ’appelle une référence ( en C#), un pointeur (en C++) ou un handle(en Java ) Rien n’empêche que plusieurs références pointent sur le même objet leCompte=new Compte tabCompte[5]=leCompte paramXX=leCompte Dans ce cas, le garbage collector est vigilant et ne détruit pas l ’objet tant qu ’il est encore référencé. leCompte paramXX numéro 4462 solde 200 titulaire Paul Deposer (Somme) Retirer (Somme) AvoirSolde() tabCompte[5]

Suppression d’objets en C# Impossible de détruire explicitement un objet C# ne fournit pas d’opposé à new car une fonction de suppression est source de nombreuses erreurs Oubli de détruire les objets Tentative de destruction d’un même objet plusieurs fois Destruction d’un objet actif C’est le garbage collector qui détruit les objets Détruit les objets inaccessibles Réalloue la mémoire dans le tas Effectue cette tâche lorsque la mémoire est insuffisante

Suppression d’objets en C# Impossible de contrôler le moment ou un objet est détruit, mais contrôle possible de ce qui se passe lors de la destruction Par l’utilisation de la méthode Finalize (objets du framework) Par l’écriture d’un destructeur class Compte { ~ Compte // instructions de nettoyage } A éviter … Augmente la charge et retarde la récupération mémoire

Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Classification Les classifications permettent de gérer la complexité en ordonnant les objets au sein d'arborescences de classes d'abstraction croissante. Substance Corps Substance incorporelle Corps animé Corps inerte Esprit Animal Pierre Animal rationnel L’arbre de Porphyre(philosophe 3eme siècle après JC) Etre humain Ange

Classification Personnel Naviguant Au sol Hôtesse de l’air Pilote d’accueil Technicien

Généralisation La généralisation consiste à factoriser les éléments communs d'un ensemble de classes dans une classe plus générale : la super-classe ou sur-classe La classe Personnel est une généralisation de la classe PersonnelAuSol Personnel Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien

Spécialisation La spécialisation permet de capturer les particularités d'un ensemble d'objets non discriminées par les classes déjà identifiées. la classe Pilote est une spécialisation de la classe PersonnelNaviguant,qui est elle même une spécialisation de la classe Personnel … Personnel Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien

Spécialisation/Généralisation CA Généralisation classe de base Relation d ’héritage CB classe dérivée Spécialisation L’héritage spécifie une relation « est une sorte de »

Héritage Une instance de la classe Pilote Possède la structure définie sur la classe Pilote Hérite de la structure définie sur la super-classe PersonnelNaviguant qui a elle-même hérité de la structure définie sur sa super-classe Personnel Personnel Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien

Héritage Les données membres de la classe de base deviennent donc données à part entière de la classe dérivée Un pilote a un nom, prénom, âge … qui lui viennent de la classe Personnel Les services rendus par la super classe le sont aussi par la classe dérivée Un pilote en tant que Personnel dispose d’un salaire qui peut être évalué sur l ’année La classe fille rajoute ses propres données membres et services Un pilote possède un nombre d’heures de vols ...

Héritage Héritage simple : dérivé d’une classe de base Héritage multiple : dérivé de plusieurs classes de base Véhicules terrestres Voiture Véhicules terrestres Véhicules marins Amphibie C# restreint l’utilisation de l’héritage multiple : une classe ne peut hériter que d’une classe, mais de plusieurs interfaces .

Héritage Hérite de Est une sorte de Compte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () Hérite de unCompteEpargne Attributs : numéro solde titulaire taux Opérations : Déposer (somme) Retirer (somme) AvoirSolde () CalculerInterêts () Est une sorte de CompteEpargne Attributs : taux Opérations : CalculerInterêts ()

C# : Héritage class CompteEpargne : Compte class Compte { { private int numero; protected decimal solde; private string titulaire; public Compte() { numero=0; solde=0.0M; titulaire=“”;} public Compte(int num) { numero=num;} public void Deposer (decimal somme) { solde += somme; } public void Retirer (decimal somme) { solde -= somme; } } class CompteEpargne : Compte { private decimal taux; public CompteEpargne() : base() { taux=0.0M;} public CompteEpargne(int num, decimal tx) :base(num) { taux =tx;} public void CalculerInterets () … } Constructeur de classe de base

Héritage : Types de visibilité Une opération d’une classe autre qu’une sous-classe n’a pas accès aux attributs et opérations privés ou protégés Une opération d’une sous-classe Ne peut pas accéder (consultation ou affectation) à l’attribut privé de sa sur-classe Peut accéder (consultation ou affectation) à l’attribut protégé de sa sur-classe Privé =« Boite noire » de la classe Protégé=« Boite noire » de la hiérarchie de classe

Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Polymorphisme En Programmation classique Si x . type = "cercle " alors x, dessinerCercle Sinon Si x . type ="rectangle "   alors x, dessinerRectangle Si x . type = "triangle "   alors x, dessinerTriangle Finsi FinSi

Polymorphisme On appelle polymorphisme (du grec signifiant « plusieurs formes ») le fait de dissimuler des traitements différents derrière la même méthode.

Polymorphisme En Programmation objet Le nom de la méthode réside dans la classe de base Les implémentations de la méthode résident dans les classes dérivées Figure Dessiner() Cercle Rectangle Triangle

Polymorphisme Évolution du logiciel : si je veux dessiner un octogone Ajout de la classe Octogone Il suffira de coder la méthode Dessiner dans la classe Octogone. Aucune autre modification ne sera nécessaire. Figure Dessiner() Cercle Rectangle Triangle Octogone

Polymorphisme C’est la propriété de donner le même nom (sélecteur dans le message) À des comportements analogues Qui vont donner lieu à des réalisations plus ou moins différentes Selon le receveur du message

C# : Implémentation de méthodes Une méthode virtuelle spécifie une implémentation possible d’une méthode qui peut être substituée par polymorphisme dans une classe dérivée Une méthode non virtuelle ne peut pas être substituée dans une classe dérivée Dans la classe de base class Figure { … public virtual void Dessiner(…) // instructions }

C# : Implémentation de méthodes Une méthode override (de substitution) spécifie une autre implémentation d’une méthode virtuelle Identique en tous points à la méthode virtuelle : - même type de retour - même nom - mêmes paramètres Peut être substituée ... Dans la classe dérivée class Cercle : Figure { … public override void Dessiner(…) // instructions }

Substitution de méthodes Compte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () CalculerInterêts() class Compte { … public void virtual CalculerInterêts() } class CompteEpargne : Compte public void override CalculerInterêts() Jamais static ni private Est une sorte de CompteEpargne Attributs : taux Opérations : CalculerInterêts () Implicitement virtuelle

Classes abstraites Ce sont des classes qui ne seront jamais instanciées. Elles ne servent qu’à modéliser l ’univers. Une bonne règle : classes terminales :concrètes classes non terminales : abstraites (qualifieur abstract en C++, Java et C#)

Classes abstraites Figure Dessiner() Cercle Rectangle Triangle Octogone La classe de base existe dans le seul but de présenter le nom de la méthode dans la hiérarchie

Classes abstraites abstract class Figure { int i; public abstract void Dessiner(); public virtual bool Effacer() { … } class Cercle():Figure public override void Dessiner() public override bool Effacer() Les classes abstraites sont utilisées pour fournir des implémentations de classes partielles, étendues dans les classes dérivées Seules les classes abstraites peuvent déclarer des méthodes abstraites Les méthodes abstraites ne peuvent pas contenir de corps de méthode Les méthodes abstraites sont virtuelles Ne peut pas être instanciée Pas de corps de méthode implicitement virtuelle

Interfaces Une interface spécifie un contrat auquel toutes les classes dérivées doivent adhérer Le nom doit commencer par la lettre I interface IConstructible { … void Dessiner(…); } Pas de corps de méthode Implicitement publique

Interfaces Une classe peut implémenter zéro (ou plusieurs) interface(s) interface IConstructible { void Dessiner(…); } interface IManipulable void Copier(…); void Coller (…); void Couper(…); class Figure :IConstructible, IManipulable …

Interfaces Toutes les méthodes déclarées dans les interfaces doivent être implémentées class Figure :IConstructible, IManipulable { public void Dessiner(…) { … } public void Copier(…) public void Coller (…) public void Couper(…) Identique en tous points à la méthode d’interface: - même type de retour - même nom - mêmes paramètres Peut être virtuelle ou non ...

Interfaces Une classe implémente une interface et étend une classe de base IConstructible Dessiner() Uniquement des opérations Interface Figure Dessiner() Classe abstraite Peut contenir une implémentation Cercle Dessiner() Doit implémenter toutes les opérations issues de l’héritage Classe concrète

Interfaces interface IConstructible { void Dessiner(); } abstract class Figure :IConstructible … public virtual void Dessiner() class Cercle : Figure public override void Dessiner()

CONCLUSION Qu’est-ce qu’un programme ? Il n’y a plus de programme au sens strict Chaque entité est conçue indépendamment D’où un gain de modularité D’où aussi la nécessité de maîtriser les interactions Permet de modéliser la réalité telle qu’elle est conceptualisée

Principes Créer des classes qui vont permettre d’instancier des objets Principe de réification Communiquer par envoi de messages Principe de délégation Utilisation de l’héritage Conception par affinage et abstraction Réification : représentation informatiquement sous la forme d’un objet.