La programmation orientée Objet

publicité
Atelier Transversal – AT11
La programmation
orientée Objet
Pierre Chauvet
[email protected]
Les langages
de programmation
http://fr.openclassrooms.com/informatique/cours/programm
ez-avec-le-langage-c/les-langages-de-programmation-6
Programmes
Les programmes sont à la base de l'informatique. Ce sont eux qui
vous permettent d'exécuter des actions avec votre ordinateur.
Exemple:
le navigateur web (Google Chrome, Mozilla, …), qui permet de
consulter des sites web ;
l'explorateur de fichiers, qui permet de gérer les fichiers sur son
ordinateur ;
le traitement de texte Microsoft Word, qui permet de rédiger des
documents.
Tous les programmes ne sont pas forcément visibles. Exemple:
programmes qui surveillent les mises à jour disponibles pour
votre ordinateur
antivirus et pare-feux
Ils tournent tous en « tâche de fond », ils n'affichent pas toujours
une fenêtre ; mais cela ne les empêche pas d'être actifs et de
travailler !
Langages de programmation
À la base, un ordinateur ne comprend qu'un langage très simple
constitué de 0 et de 1. Ainsi, un message tel que celui-ci :
1010010010100011010101001010111010100011010010
peut signifier quelque chose comme:
« Affiche une fenêtre à l'écran ».
S'il fallait écrire dans ce langage (qu'on appelle langage binaire), il
ne faudrait pas des années pour concevoir un jeu comme Starcraft
mais plutôt des millénaires...
Pour se simplifier la vie, les informaticiens ont créé des langages
intermédiaires, plus simples que le binaire. Il existe aujourd'hui des
centaines de langages de programmation. Chacun de ces langages
a des spécificités.
Liste des langages de programmation sur Wikipédia
Tous les langages de programmation ont le même but : vous
permettre de parler à l'ordinateur plus simplement qu'en binaire.
Voici comment cela fonctionne :
Vous écrivez des instructions pour l'ordinateur dans un langage
de programmation (par exemple le HTML, le Javascript, le Java,
etc.) ;
Les instructions sont traduites en binaire grâce à un programme
de « traduction » ;
L'ordinateur peut alors lire le binaire et faire ce que vous avez
demandé !
Le « programme de traduction » s'appelle en réalité le compilateur.
C'est un outil indispensable. Il vous permet de transformer votre
code, écrit dans un langage de programmation, en un vrai
programme exécutable.
Reprenons le schéma précédent et utilisons le vocabulaire de
l’informaticien:
Il existe toute une palette de langages
de bas niveau à haut niveau…Mais la
notion de niveau est relative.
Exemples
Afficher Hello World en
Langage machine pour x86:
Afficher Hello World en
Assembleur x86 pour DOS:
10111010 00010000
00000001 10110100
00001001 11001101
00100001 00110000
11100100 11001101
00010110 10111000
00000000 01001100
11001101 00100001
01001000 01100101
01101100 01101100
01101111 00100000
01010111 01101111
01110010 01101100
01100100 00100001
00100100
cseg segment
assume cs:cseg, ds:cseg
org 100h
main proc
jmp debut
mess db 'Hello World!$'
debut:
mov dx, offset mess
mov ah, 9
int 21h
ret
main endp
cseg ends
end main
Exemples
Afficher Hello World en C:
#include <stdio.h>
int main(void) {
printf("hello, World!\n");
return 0;
}
Afficher Hello World en C++:
#include<iostream>
int main() {
std::cout << "Hello, World!\n";
}
Afficher Hello World en Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Console &
Environnement fenêtrée
Le Lisa est un ordinateur personnel lancé par Apple en 1983 qui va
révolutionner le marché: c'est un des premiers ordinateurs
personnels à posséder une souris et une interface graphique. Celleci était inspirée de celle des stations de travail Xerox.
Interfaces graphiques
Construire une interface graphique pour un environnement fenêtré
nécessite de disposer:
d’une bibliothèque de composants graphiques (bouton, fenêtres,
ascenseurs, etc.)
d’un moteur de rendu graphique
d’un langage de programmation qui permette d’assembler ces
composants puis de les afficher
Exemples composants Java
(bibliothèque SWING)
JCheckBox
JCheckBox b= new JCheckBox(’’Chin’’);
b.setSelected(true);
JComboBox
String[] items = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
JComboBox b= new JComboBox(items);
b.setSelectedIndex(4);
JRadioButton
JRadioButton b= new JRadioButton(’’Pig’’);
b.setSelected(true);
JList
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("Jane Doe");
listModel.addElement("John Smith");
listModel.addElement("Kathy Green");
JList list = new JList(listModel);
JSlider
JSlider b= new JSlider(JSlider.HORIZONTAL,min,max,init);
b.setMajorTickSpacing(10);b.setMinorTickSpacing(1);
b.setPaintTicks(true); b.setPaintLabels(true);
JSpinner
JTabbedPane
JTextArea
JTextArea b= new JTextArea(10,40);
b.setText(‘’This is…’’); b.setEditable(true);
JTabbedPane b= new JTabbedPane();
b.addTab(‘’Tab 1’’,icon,panel1,’’tip text’’);
JToolBar
JToolBar b = new JToolBar();
b.add(button); b.add(separator);
JTree
JProgressBar
JProgressBar b=new JProgressBar(0,10);
b.setValue(5);
b.setStringPainted(true);
JScrollPane
panel.add(new JScrollPane(textArea),BorderLayout.CENTER);
Boîtes de dialogue SWING
JFileChooser
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(frame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
}
JOptionPane
JOptionPane.showMessageDialog(frame, "Eggs are
not supposed to be green.");
JColorChooser
Color newColor =
JColorChooser.showDialog( frame, "Choose
Background Color", initColor);
Hello World !
EDI Eclipse
Environnement de Développement Intégré (EDI) gratuit
à compléter avec des plug-in
EDI Eclipse
Liste des projets (cliquer avec
le bouton droit de la souris
pour créer un nouveau projet)
Console (affichage
des résultats de
votre programme,
par exemple: Hello
World !)
Fenêtre d’édition du code pour
le fichier java sélectionné dans
le projet courant
Votre premier programme
Vous allez écrire un premier programme Java avec
Eclipse qui affiche du texte dans la console, puis dans
une fenêtre.
Liste des tâches:
1. Créer un projet Java
2. Dans le projet, créer un fichier Java (= une classe
Java)
3. Ajouter les instructions pour afficher du texte
Création projet HelloWorld
Cliquer avec le bouton droit de la
souris sur une zone vide de la liste
des projets
Dans le menu déroulant, cliquer sur
New puis sur Java Project
La fenêtre ci-dessous apparaît… (voir
page suivante)
Création projet HelloWorld
Dans la zone de saisie
Project name, entrer le nom
du projet (sans accents)
Cliquer sur le bouton Finish
Le projet HelloWorld (si vous
avez choisi ce nom) apparaît
dans la liste des projets
Double-cliquer sur ce projet
pour le sélectionner et le
développer
Création classe HelloWorld
Cliquer avec le bouton droit de
la souris sur le sous-répertoire
src
Dans le menu
cliquer sur New
déroulant,
Dans le sous-menu, cliquer
sur Class
La fenêtre ci-dessous
apparaît…
Création classe HelloWorld
Dans la zone de saisie Name,
entrer le nom de la classe (par
exemple: HelloWorld)
Cocher la boîte public static
void main si elle est
décochée
Cliquer sur le bouton Finish
Hello World !
Votre projet avec la classe ( =
le fichier) HelloWorld.java
Ecrire sous la ligne TODO et avant
l’accolade fermante:
System.out.println("Hello World !");
Attention: respecter les
majuscules/minuscules
Hello World en action
1. Sauvegarder votre
fichier
Pour exécuter votre programme:
1. Développer le bouton run (cliquer
sur la petite flèche noire)
2. Aller sur Run As
3. Cliquer sur 1 Java Application
4. Regarder la console
Hello World fenêtré
Mettre
System.out.println("Hello World !");
en commentaires :
Commentaire: texte libre
qui n’est pas compilé (pas
transformé
en
langage
binaire). En Java, tout ce qui
vient sur la ligne après « // »
// System.out.println("Hello World !");
et écrire sous ce commentaire:
javax.swing.JOptionPane.showMessageDialog(null, "Hello world!");
Penser à sauvegarder, puis exécuter ce nouveau programme
Analyse du programme
Main
du
programme
(main=principal): ensemble des
instructions à exécuter.
- Commence par public static
void main(String[] args) {
- Se termine par accolade
fermante « } »
- Tout ce qui est entre { et }
est à exécuter
Classe HelloWorld (correspond au fichier
HelloWorld.java):
- Commence par public class suivi du
nom (ici HelloWorld) et de l’accolade
ouvrante « { »
- Se termine par accolade fermante « } »
En Java, le Main est obligatoirement
inclus dans une classe. Il ne peut y
avoir qu’un seul Main dans chaque
classe.
Conception orientée Objet
Notion de Système
Un système est une société d’objets qui coopèrent
en vue d’accomplir un objectif (sa fonction)
Approche Objet
Un logiciel est construit sous la forme d’objets
qui coopèrent
La définition d’un objet est relativement
indépendante des autres objets ET du logiciel
en cours de construction
Exemples: objets visuels dans les applications
fenêtrées (Windows, Linux, etc.)
Approches
fonctionnelle et objet
Analyse et conception de systèmes complexes :
• diviser, décomposer pour comprendre,
• composer, réunir pour construire
La représentation du système utilise un modèle qui
permet de formaliser la démarche d’analyse et de
conception
Dans l’approche fonctionnelle, on décrit le système par
une décomposition en sous-systèmes correspondant à
des fonctions plus ou moins élémentaires qui participent à
la fonction principale
La décomposition doit être stable au sens où une
évolution fonctionnelle ne doit pas provoquer des
modifications structurelles lourdes.
Des Modèles
plutôt que du Code
Un modèle est la simplification/abstraction de la
réalité
Nous construisons donc des modèles afin de
mieux comprendre les systèmes que nous
développons
Nous modélisons des systèmes complexes
parce que nous somme incapables de les
comprendre dans leur totalité
Le code ne permet pas de simplifier/abstraire la
réalité
Comment Modéliser ?
Le choix d’un modèle influence fondamentalement la
manière d’aborder un problème et de définir une solution
Tout modèle possède un « niveau de granularité » :
modèle très précis proche de la réalité / difficile à aborder
modèle simple éloigné de la réalité / simple à comprendre
Un bon modèle doit rendre compte de la réalité (validité
de l’approximation)
Un seul modèle est rarement suffisant. Les systèmes
d’une certaine complexité sont mieux approchés par
plusieurs modèles
⇒Diagrammes & Notations
Des méthodes de modélisation
L’apparition du paradigme objet à permis la
naissance
de
plusieurs
méthodes
de
modélisation (OMT, OOSE, Booch, Fusion, …)
Chacune de ces méthodes fournie une notation
graphique et des règles pour élaborer les
modèles
Certaines méthodes sont outillées
Trop de Méthodes
Entre 1989 et 1994 : le nombre de méthodes
orientées objet est passé de 10 à plus de 50
Toutes les méthodes avaient pourtant
d’énormes points communs (objets, méthode,
paramètres, …)
Au milieu des années 90, G. Booch, I.
Jacobson et J. Rumbaugh ont chacun
commencé à adopter les idées des autres. Les
3 auteurs ont souhaité créer un langage de
modélisation unifié.
Historique
Définition en cours par une
commission de révision
Soumission à l’OMG
UML 2.0
UML 1.x
UML 1.2
Standardisation par l’OMG
Soumission à l’OMG
Soumission à l’OMG
Version bêta OOPSLA’96
OOPSLA’95
Autres méthodes
Juin 1998
Novembre 1997
Septembre 1997
UML 1.1
UML 1.0
Janvier 1997
UML 0.9
Juin 1996
Méthode unifiée 0.8
Booch’93
Booch’91
1999-2002
Octobre 1995
OMT-2
OMT-1
OOSE
Partenaires
UML
(Unified Modeling Language)
UML est un langage standard pour visualiser,
spécifier, construire et documenter un logiciel…
… et plus généralement un système
UML essaie de réunir plusieurs écoles:
- Concepts de modélisation de données
- Concepts de modélisation métier (workflow)
- Concepts de modélisation objet
Il permet de transcender la notion de
contraintes d’implantation liées aux langages et
aux systèmes
Aujourd’hui
UML est le langage de modélisation orienté
objet le plus connu et le plus utilisé au monde
UML s’applique à plusieurs domaines
DOO, Déploiement, Spécifications, Organisations …
UML n’est pas une méthode
RUP
Le marché UML est important et s’accroît (UML
et RAD)
UML Pourquoi
Réfléchir
Définir la structure « gros grain »
Documenter
Guider le développement
Développer, Tester, Auditer
Une vue - Un diagramme
Diagramme de classes
Classe, Opération, Attribut, Association, …
Diagramme d’objet / Object Diagram
Diagramme de cas d’utilisation
Cas d’utilisation, Acteur, ..
Diagramme de séquence
Instance, message, relation
Diagramme de collaboration
Diagramme d’état
Diagramme d’activité
Diagramme de composant
Diagramme de déploiement
Du contemplatif au productif
Les modèles sont souvent utilisés pour
Réfléchir, Définir la structure gros grain,
documenter
Ils sont alors contemplatifs
Avec les bons outils, Ils peuvent devenir
productifs
Permettre la génération automatique de code,
de déploiement, …
Eclipse avec plug-in
UML Omondo
Respecte les standards UML (1.0 et 2.0)
Synchronisation avec le code Java (à partir des diagrammes
de classes/objets)
Gratuit !
ArgoUML
http://argouml.tigris.org
•
•
•
•
Respecte les standards UML (1.0 et 2.0)
Simplicité de l’utilisation
Génération de code
Léger et gratuit
Programmation Orientée Objet
Sources:
http://fr.openclassrooms.com/informatique/cours/concevez-votre-siteweb-avec-php-et-mysql/la-programmation-orientee-objet-6
Classe et Objet
Un objet rassemble
des données et le
code travaillant sur
ces données.
La classe est un
moule ou un plan qui
permet de créer des
objets.
La classe décrit les
objets, les objets sont
les instances de leur
classe.
Classe et Objet
Classe et Objet
La classe décrit la structure interne de l’objet:
• Données qu’il regroupe
• Actions (procédures/fonctions) opérant sur ces données
Véhicule
#NombreDeVéhicules : Entier
#Marque : Chaîne
#PuissanceFiscale : Entier
#VitesseMaximale : Entier
#VitesseCourante : Entier
+CréerVéhicule( )
+DétruireVéhicule( )
+Démarrer
+Accélérer(Taux:Entier)
+Avancer( )
+Reculer( )
Nom de la
classe
Description
des attributs
Description des
méthodes = code
associé aux
données
Attributs d’instance
Les données Marque, PuissanceFiscale,
VitesseMaximale et VitesseCourante sont
représentatives d’un véhicule particulier.
Chaque objet de type Véhicule aura sa
propre copie de ces données.
Dans ce cas, une donnée est appelée
attribut d’instance.
Attributs d’instance
Classe
Instances
Véhicule
#NombreDeVéhicules : Entier
#Marque : Chaîne
#PuissanceFiscale : Entier
#VitesseMaximale : Entier
#VitesseCourante : Entier
+CréerVéhicule( )
+DétruireVéhicule( )
+Démarrer
+Accélérer(Taux:Entier)
+Avancer( )
+Reculer( )
Marque=‘Lotus’
PuissanceFiscale=11
VitesseMaximale=230
VitesseCourante=170
Instanciation
Marque=‘Peugeot’
PuissanceFiscale=7
VitesseMaximale=160
VitesseCourante=90
Attributs d’instance
Attributs de classe
L’attribut NombreDeVéhicules est chargé de
compter le nombre de véhicules présents à un
instant donné dans la classe.
Il est incrémenté dans CréerVéhicule( ).
Il est décrémenté dans DétruireVéhicule( ).
Tous les objets partagent une copie unique de
cet attribut située au niveau de la classe.
Principes d’encapsulation
Un objet rassemble en lui-même ses données
(les attributs) et le code agissant dessus (les
méthodes)
Abstraction de données : la structure de données
de l’objet n’est pas visible de l’extérieur.
L’interface est constituée par les méthodes.
Abstraction procédurale : l’utilisateur de l’objet n’a
aucune information sur la mécanique interne mise
en œuvre dans cet objet (boîte noire)
Notion d’héritage
Un constat : le monde réel se prêtent à
merveille à une classification hiérarchique des
éléments qui le composent.
Le principe : un objet spécialisé hérite des
caractéristiques de l’objet le plus général auquel
il rajoute ses éléments propres.
Notion d’héritage
En terme de concepts objets :
Une classe de base est associée au concept le
plus général (classe à la racine de l’arbre
hiérarchique des classes).
Toute classe dérive d’une classe parent (sauf la
classe racine).
Notion d’héritage
Exemples:
une voiture est un véhicule (Voiture hérite de Vehicule) ;
un bus est un véhicule (Bus hérite de Vehicule) ;
un moineau est un oiseau (Moineau hérite d'Oiseau) ;
un corbeau est un oiseau (Corbeau hérite d'Oiseau) ;
un chirurgien est un médecin (Chirurgien hérite de
Medecin) ;
un diplodocus est un dinosaure (Diplodocus hérite de
Dinosaure) ;
Exemple 1: les objets
graphiques
ObjetGraphique
#Nombre : Entier
#Couleur : TypeCouleur
#X : Entier
#Y : Entier
#Epaisseur : Entier
+Créer( )
+Détruire( )
+getX( ) : Entier
+getY( ) : Entier
+setX(valeur : Entier )
+setY(valeur : Entier )
+DéplacerVers(dx,dy : Entier)
+Afficher( )
+Effacer( )
Classe de base :
concept général
Exemple 1: les objets
graphiques
ObjetGraphique
Ligne
#Longueur : Entier
#Angle : Réel
+Créer( )
+Détruire( )
+getLongueur( ) : Entier
+setLongueur(valeur :
Entier )
+Afficher( )
+Effacer( )
Classes dérivées :
concept spécialisé
Cercle
#Rayon : Entier
+Créer( )
+Détruire( )
+getRayon( ) : Entier
+setRayon(valeur : Entier )
+Afficher( )
+Effacer( )
Classes Abstraites
• Certains titres de classes sont en italique:
titre en italique = classe abstraite
• Classe abstraite = classe qui ne fournit pas
d’implémentation pour certaines de ses
méthodes.
• Une classe abstraite ne peut pas être
instanciée (pas d’objets).
• Il appartient à ses classes dérivées de définir
du code pour chacune des méthodes
abstraites.
→
C’est la base du polymorphisme.
Le polymorphisme
Implémentations différentes, suivant la classe, de
méthodes déclarées dans une classe ancêtre.
Exemple: la méthode Afficher( ).
ObjetGraphique
+Afficher( )
Ligne
+Afficher( )
Cercle
+Afficher( )
Méthode Ligne.Afficher( )
{ Tracer une droite;}
Méthode Cercle.Afficher( )
{ Tracer un cercle;}
Le polymorphisme
L’utilité du polymorphisme provient de la notion
sous-jacente de compatibilité descendante des
pointeurs:
un pointeur sur un objet d’une classe spécialisée
peut toujours être affecté à un pointeur d’une
classe ancêtre.
Exemple: un dessin est une liste d’objets Ligne,
Cercle, … Comment afficher le dessin ?
Le polymorphisme (exemple)
Liste
Dessin
+Afficher( )
Méthode Dessin.Afficher( ) {
déclarer objet : ObjetGraphique ;
pour i=0 à NombreObjets-1 faire {
lire objet en position i ;
appeler objet.Afficher( );
}
}
Sans le polymorphisme, il faudrait déclarer une variable locale par type
d’objet graphique, et avoir autant d’attribut liste que de type d’objet
graphique.
Exemple 2:
modélisation d’un parc de véhicules
Une entreprise possède un parc de véhicules
regroupant des voitures, des camions, des
hélicoptères et des bateaux. Elle souhaite disposer
d’un modèle de fonctionnement de son parc.
Le but est de créer une hiérarchie permettant de
factoriser le plus possible les fonctionnalités de
chaque type de véhicule.
Exemple 2:
modélisation d’un parc de véhicules
Concepts communs
: Démarrer,
Accélérer, Ralentir,
Arrêter
Véhicule
VéhiculeRoulan
t
Voiture
Camion
Hélicoptère
Bateau
Exemple 2:
modélisation d’un parc de véhicules
Une hiérarchie de classes
possible pour la modélisation
d’un parc hétérogène de
véhicules après ajout des
avions
Véhicule
VéhiculeRoulant
Voiture
Camion
VéhiculeAérien
Hélicoptère
Avion
Bateau
Avantages de l’héritage
Code de taille plus faible : factorisation des
comportements communs dans les classes les
plus générales.
Seul le code spécifique reste à écrire dans les
classes dérivées.
Modélisation naturelle – déboguage facilité.
Code des classes les plus générales très utilisé
donc très fiabilisé.
Risques de l’héritage
Une hiérarchie trop lourde: ex. dériver
VoitureJaune et VoitureRouge de la classe Voiture.
L’héritage de construction:
Feuille
2
Base
Intermed1
Feuille
1
Intermed2
Feuille
3
Les incohérences conceptuelles: hériter d’une
méthode qui n’a pas de sens dans la classe.
L’héritage multiple
Extension du modèle d’héritage simple où l’on
autorise une classe à posséder plusieurs
classes mères.
Tous les langages orientés objets ne l’autorise
pas.
Le problème est contourné dans différents
langages par la notion d’interface. Ex. Objective
C, JAVA.
L’héritage multiple
ClasseA
VéhiculeRoulant
Bateau
ClasseC
ClasseB
Hovercraft
Héritage à répétition:
ClasseD reçoit 2 copies
de sa classe ancêtre
ClasseA
ClasseD
Interfaces
Interface : « classe » sans attribut dont toutes
les méthodes sont abstraites.
Une classe implémente une interface si elle
propose une implémentation pour chacune des
méthodes décrite dans l’interface.
Chaque classe implémente autant d’interfaces
qu’elle le désire.
Interfaces
InterfaceA
ClasseB
+MethodA1( )
+MethodA2( )
+MethodB1( )
+MethodB2( )
ClasseC
ClasseC possède en
fin de compte les
méthodes:
MethodA1, MethodA2,
MethodB1, MethodB2
+MethodA1( )
+MethodA2( )
ClasseC implémente
MethodA1( ) et MethodA2( )
La relation d’association
Si l’on peut dire que toute instance de la
classe A « communique avec » ou « utilise »
des instances de la classe B, alors il y a
association entre ces deux classes:
ClasseA
ClasseB
La relation d’agrégation
L’agrégation est une association forte entre
deux classes.
Si l’on peut dire que la classe A « est
composée de » ou « possède » la classe B,
alors on a agrégation:
ClasseA
ClasseB
La relation d’agrégation
Moteur
Chassis
Roue
4
1
1
1
Voiture
1
1
Association et agrégation
Modèle 1:
Zoo
Cage
1
*
Gardien
nettoie
1 nourrit
contient 1
*
est contenu
Animal
*
est nourri par
Association et agrégation
Modèle 2:
Zoo
Cage
1
*
Gardien
nettoie
1 nourrit
contient 1
*
est contenu
Animal
*
est nourri par
Agrégation, héritage
et interfaces
Il est parfois possible de traduire en terme
d’agrégation des notions apparentées à
l’héritage multiple et à l’utilisation d’interfaces.
Exemple: on considère un système militaire
regroupant des avions et des radars. Comment
modéliser l’adjonction d’un AWACS à ce
système ?
Agrégation, héritage et interfaces
(exemple AWACS)
Solution 1: Héritage multiple
→ Dériver la classe AWACS d’avion et
radar
Radar
Avion
AWACS
Agrégation, héritage et interfaces
(exemple AWACS)
Solution 2: utilisation d’interfaces
→ 3 possibilités :
Radar
Avion
Détecte
ur
AWACS
Radar
AWACS
Machine
Volante
Avion
Détecteur Machine
Volante
AWACS
Agrégation, héritage et interfaces
(exemple AWACS)
Solution 3: Utilisation d’agrégations
→ 3 possibilités
Avion
AWACS
Radar
Radar
Radar
AWACS
Avion
Avion
AWACS
Logiciel orienté objet
Classe: composant logiciel décrivant des objets.
Objet: entité fondamentale rassemblant des données
ainsi que le code opérant sur ces données.
Message: Moyen de communication entre objets. Dans
la plupart des langages orientés objets, l’invocation de
message se traduit par l’activation d’une méthode.
Logiciel orienté objet: façon de concevoir le logiciel
orientée vers les données plutôt que sur les actions. Un
logiciel est alors vu comme une collection d’objets
communiquant par messages.
Les 3 principes fondamentaux
du paradigme objet
Encapsulation : 1) Rassemblement des données et du
code traitant ces données dans une entité appelée
objet. 2) Séparation nette entre partie publique
(méthodes) et partie privée (données, implémentation).
Héritage : principe de généralisation/spécialisation dans
les arborescences de classe.
Polymorphisme : Faculté présentée par certaines
méthodes dont le comportement est différent (malgré
une signature identique) selon l’objet auquel elles
s’appliquent.
Traitement d’un exemple :
XML et objets
Il s’agit de construire un modèle orienté objet
d’un fichier XML quelconque:
1) Quelle est la structure d’un fichier XML ?
2) Quelles classes faut-il écrire pour pouvoir
représenter cette structure en mémoire ?
3) Quels sont les attributs et méthodes
nécessaires ?
Exemple de fichier XML
<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE SIMULATION (View Source for full doctype...)> <SIMULATION name="CNSTest00">
<COMMENTS>Simulation of a two-dimensional neuron space (test num 0) without
diffusion, and a simple connectivity (square(1,1)-(3,3) toward square(5,5)(9,9))</COMMENTS>
<DURATION>5.1</DURATION> <GROUP name="fieldEquation"><MODEL class="FieldNSnoD" name="Field" timestep="0.01">
<NODES>10,10</NODES>
<BINARY>No</BINARY>
<PARAMETER name="Density" fromNode="0,0" toNode="10,10" value="0" />
<PARAMETER name="Density" fromNode="0,0" toNode="3,3" value="1" />
<PARAMETER name="Density" fromNode="5,5" toNode="9,9" value="1" />
- <VIEWER name="F">
<TIMEVIEW>0.1</TIMEVIEW>
<TYPEVIEW>Stanford</TYPEVIEW>
<WHATVIEW mean="No" minmax="No" values="Yes" />
</VIEWER>
</MODEL>
</GROUP>
- <GROUP name="models">
- <MODEL class="PreSynCleft" name="PS" timestep="0.001">
<NODES>4,4,10</NODES>
<BINARY>No</BINARY>
- <VIEWER name="viewerPS">
<TIMEVIEW>0.2</TIMEVIEW>
<TYPEVIEW>Stanford</TYPEVIEW>
<WHATVIEW mean="No" minmax="No" values="Yes" />
</VIEWER>
</MODEL>
- <MODEL class="AMPA" name="Ampa" timestep="0.001">
<NODES>4,4</NODES>
<BINARY>No</BINARY>
etc…
Exemple de fichier XML
(données pour un
simulateur de systèmes
biologiques)
Exemple de fichier XML (2)
Exemple de fichier
XML chargé dans
XMLSpy (société
Altova)
Structure d’un fichier XML
<BALISE att1=‘val1’ att2=‘val2’ … >
text
</BALISE>
Un nœud :
- nom de balise
- liste d’attributs où un attribut
= un nom + une valeur
- valeur balise
<BALISE1>
<BALISE2>
</BALISE2>
<BALISE2>
</BALISE2>
…
</BALISE1>
Un nœud :
- peut contenir d’autres noeuds
- plusieurs nœuds peuvent
avoir le même nom de balise
→ L’information contenue par le fichier XML peut être
représentée par un graphe
Diagramme de classe (XML)
TListe
1
TNoeud
balise
texte
1
*
possède>
TAttribut
nom
valeur
*
TListe: liste chaînée qui peut servir à stocker les nœuds enfants
Téléchargement