La programmation par objets

Slides:



Advertisements
Présentations similaires
Lapproche Objet Séminaire IOS-AT Chapitre I Introduction.
Advertisements

Réflexivité et réseaux d’ information
Spécialisation/généralisation Héritage Polymorphisme.
Urbanisation de Systèmes d'Information
Conception de Programmes Evolutifs Pré Soutenance de TER Année Encadrants : Cathy Escazut et Michel Gautero Auteurs: Paul-Kenji Cahier Sylvain.
Langages objet Définitions Traduction des méthodes en C++
UML - Présentation.
Programmation Orientée Objet (POO)
Test dans les objets Andrés Farias –
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Programmation par Objets et Java
FSAB1402: Informatique 2 Techniques de Programmation Orientée Objet
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.
Mémoire de fin d’études présenté par Amine Brikci-Nigassa
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
Vers la conception objet
POO : Objets et classes (Rappels)
Modélisation orientée objet UML
Structures de données IFT-10541
IFT Structures de données
Introduction au paradigme orienté-objet (suite)
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Design Patterns Factory Method – Pattern de construction [DANT] Génie Logiciel 1.
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 :
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é.
Le diagramme de collaboration
Programmation non procédurale Le projet ECOLE 2000
Sensibilisation a la modelisation
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.
Patrons de conceptions de créations
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
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.
IFT 232 Méthodes de Conception Orientées Objets Introduction.
Le polymorphisme.
2 Processus de conception de BD
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.
Héritage Conception par Objet et programmation Java
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
Interfaces Graphiques
L T I Laboratoire de Téléinformatique 2 Projet de semestre Parseur XML basé sur la DTD : Buts –Utiliser la grammaire définissant un type de fichiers XML.
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Introduction à la Programmation Orientée Objet
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Diagrammes de comportement Présentation. Diagramme de séquence  Permet de modéliser les envois de messages entre objets chronologiquement.  Modélisation.
Transcription de la présentation:

La programmation par objets Principes et concepts Etude de Smalltalk

Smalltalk-80 – Vue générale Historique Concepts Génie logiciel Réflexivité Parallélisme MVC Langage Smalltalk-80 Environnement de programmation Java a été influencé par C / C++ pour la syntaxe Smalltalk pour plusieurs concepts et la librairie

Historique ST-72 ST-76 ST-80 LIBERTÉ !!! Simula 67 Lisp Logo FLEX objets classes héritage Lisp interprète environnement interactif Logo Syntaxe Tortue (environnement graphique) FLEX envois de messages ST-72 ST-76 ST-80 LIBERTÉ !!! Langage de programmation Environnement graphique Système d’exploitation Environnement de programmation interactif

Axiomes Tout entité du langage est un objet (uniformité) Tout objet est instance d’une classe (uniformité) L’héritage est simple La seule structure de contrôle est l’envoi de messages (uniformité) Tout est accessible / modifiable par l’usager

Concepts primitifs Objet Message Classe (héritage) Instance Méthode

Activation du comportement OBJET Objet = < variables d’instance, méthodes > nommées indexées Support de la modularité Le fonctionnement de tout objet est indépendant des détails internes des autres objets Activation du comportement Transmission de messages Séparation Le seul moyen pour assurer avantages Méthode employée par le récepteur pour la réalisation de cette intention Intention de l’émetteur Renforcer l’utilisation d’abstractions Uniformité MODULARITÉ

MESSAGES Message == OBJET (respect de A1) sélecteur arguments Exemple 1 1 + 2 sémantique 1 Sélecteur : + Argument : 2 Structures de contrôle traditionnelle  messages Exemple2 : conditionnelle x = y ifTrue: [ egalite <- ‘egal’ ] ifFalse: [ egalite <- ‘distinct’] sélecteur arguments Bloc : évaluation différée Objets + Envois de messages Tout ce qu’il faut pour construire l’environnement de programmation

CLASSES Une vision platonique des objects  abstraction Classification d’objets similaires Factorisation de descriptions des objets individuels

Factorisation des descriptions Structure Comportements Variables d’instance (état) Dictionnaire des méthodes objet objet Sélecteur Paramètres Séquence d’expressions indexées (Array) nommées Variables temporaires

Classe = objet + capacité de générer des objets instances x = 1 y = 2 i n t x y y: x = 3 y = 4 i n t x y y: FACTORISATION Structure : { x, y } Comportements : { x, y, y:, init } Classe Point

INSTANCIATION Création d’une instance Interprétation des messages Transmission de message Point new (uniformité) Interprétation des messages Lien d’instanciation Ma classe connaît mon comportement

classVariables = Dessin pool : ICONES { (Smiley,  ), (Slomo, ;-) } Tortue class initialize [[true] whileTrue: [ Time avantMidi ifTrue:[ Dessin := Slomo] ifFalse: [ Dessin := Smiley] ]] fork classVariables = Dessin Point class newInit ^self new initialize Hérite de Instance de Instance de i-v = { x, y } Point initialize x := 0. y := 0. y: unEntier y := unEntier. y ^y Hérite de i-v = { direction } Tortue initialize super initialize. direction := 270 avance: n self av: (Dessin = Slomo ifTrue: [n/2] ifFalse: [n]) av: n n>0 ifTrue: [self y: self y + 1. self av: n – 1.] newInit Création d’une instance : Tortue newInit quelle méthode initialize sera utilisée? initialize de Tortue : masquage avec réutilisation différence entre self et super Transmission d’un message à une instance : Tortue newInit avance: 10 variable d’instance et variable de classe méthode d’instance et méthode de classe x=0 y=0 direction = 270 Instance de avance: 10

Réflexivité structurelle Tout est objet (A1) Une classe est un objet Tout objet est instance d’une classe (A2) Une classe est instance d’une classe sa métaclasse Méthodes de classes (comportement de la classe) Ex: new, subclass: anonyme créée automatiquement mais, ClassTalk Architecture réflexive tout est disponible on peut modifier le fonctionnement de l’instanciation 1er type de hiérarchie : graphe d’instanciation

classVariables = Dessin pool : ICONES { (Smiley,  ), (Slomo, ;-) } Tortue class initialize [[true] whileTrue: [ Time avantMidi ifTrue:[ Dessin := Slomo] ifFalse: [ Dessin := Smiley] ]] fork classVariables = Dessin Point class newInit ^self new initialize Hérite de Instance de Instance de i-v = { x, y } Point initialize x := 0. y := 0. y: unEntier y := unEntier. y ^y Hérite de i-v = { direction } Tortue initialize super initialize. direction := 270 avance: n self av: (Dessin = Slomo ifTrue: [n/2] ifFalse: [n]) av: n n>0 ifTrue: [self y: self y + 1. self av: n – 1.] newInit x=0 y=0 direction = 270 Instance de avance: 10

Héritage Réutilisation Partage Factorisation Classification variables d’instance méthodes des descriptions de 2e type de hiérarchie : graphe d’héritage

Héritage : exemple d’utilisation Point Tortue i-v = { x, y } Méthodes = { x:, y: } i-v = { x, y, direction } Méthodes = { x:, y:, avance } Tortue == Point + epsilon

classVariables = Dessin pool : ICONES { (Smiley,  ), (Slomo, ;-) } Tortue class initialize [[true] whileTrue: [ Time avantMidi ifTrue:[ Dessin := Slomo] ifFalse: [ Dessin := Smiley] ]] fork classVariables = Dessin Point class newInit ^self new initialize Hérite de Instance de Instance de i-v = { x, y } Point initialize x := 0. y := 0. y: unEntier y := unEntier. y ^y Hérite de i-v = { direction } Tortue initialize super initialize. direction := 270 avance: n self av: (Dessin = Slomo ifTrue: [n/2] ifFalse: [n]) av: n n>0 ifTrue: [self y: self y + 1. self av: n – 1.] newInit x=0 y=0 direction = 270 Instance de avance: 10

Héritage spécialisation extension de l’environnement La superclasse doit d’abord être définie Variables d’instance méthodes aucune redéfinition ajout (extension) ajout masquage réutilisation directe Possible de modifier l’arbre d’héritage avec sans Héritage est statique calculé une seule fois à la création réutilisation Héritage est dynamique Recherche à chaque réception de messages

Auto-référence Self Super Objet qui a reçu le message Pour qu’un objet puisse invoquer ses propres méthodes Appliquer la méthode la plus spécialisée Méthodes récursives Pour qu’un objet puisse se passer en paramètre Super + modification de l’algorithme de recherche La recherche commence dans la superclasse de la classe où est utilisé “super” Raffiner la factorisation Spécialisation avec réutilisation de méthodes héritées

Les variables Variables temporaires Variables d’instance Allouées le temps d’exécution de la méthode Variables d’instance nommées ou indexées variables privées d’un objet ne sont référençables que par les méthodes de l’objet Variables de classe Partagées par Instances de la classe Instances des sous-classes Variables “pool” Globales Partagées par les instances d’un ensemble de classes Dictionnaire (clé-valeur) Clé = symbole = nom de la variable Les clés sont directement référencées dans les méthodes Variables globales Accessibles de n’importe où dans le système Ex.: noms des classes

classVariables = Dessin pool : ICONES { (Smiley,  ), (Slomo, ;-) } Tortue class initialize [[true] whileTrue: [ Time avantMidi ifTrue:[ Dessin := Slomo] ifFalse: [ Dessin := Smiley] ]] fork classVariables = Dessin Point class newInit ^self new initialize Hérite de Instance de Instance de i-v = { x, y } Point initialize x := 0. y := 0. y: unEntier y := unEntier. y ^y Hérite de i-v = { direction } Tortue initialize super initialize. direction := 270 avance: n self av: (Dessin = Slomo ifTrue: [n/2] ifFalse: [n]) av: n n>0 ifTrue: [self y: self y + 1. self av: n – 1.] newInit x=0 y=0 direction = 270 Instance de avance: 10

Model-View-Controller Fondé sur les dépendances Coordonner les activités de plusieurs objets Self changed Self myDependents update Construction d’une interface multi-fenêtres en Smalltalk Modèle (source d’information) texte Contrôleur (interaction de l’usager avec le modèle) clavier Vue (représentation visuelle du modèle) Affichage du texte

doesNotUndertstand: aMessage thisContext become: anObject Réflexivité structurelle opératoire partielle doesNotUndertstand: aMessage thisContext become: anObject perform: aMessage complète métaclasses Héritage multiple Redéfinition du traitement des messages

Conception Typage Encapsulation, interface Pas de vérification à la compilation Les erreurs sont détectées à l’exécution Extension : TypedSmalltalk Encapsulation, interface Modifications locales Pas d’accès externes à l’état d’un objet Seules les méthodes y ont accès Il faut donc définir des méthodes d’accès appropriées Pas de méthodes cachées Polymorphisme et classes abstraites Fondé sur les sélecteurs Classes abstraites Possible de déléguer aux sous-classes l’implémentation d’opérations spécialisées

classVariables = Dessin pool : ICONES { (Smiley,  ), (Slomo, ;-) } Tortue class initialize [[true] whileTrue: [ Time avantMidi ifTrue:[ Dessin := Slomo] ifFalse: [ Dessin := Smiley] ]] fork classVariables = Dessin Point class newInit ^self new initialize Hérite de Instance de Instance de i-v = { x, y } Point initialize x := 0. y := 0. y: unEntier y := unEntier. y ^y Hérite de i-v = { direction } Tortue initialize super initialize. direction := 270 avance: n self av: (Dessin = Slomo ifTrue: [n/2] ifFalse: [n]) av: n n>0 ifTrue: [self y: self y + 1. self av: n – 1.] newInit x=0 y=0 direction = 270 Instance de avance: 10