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