<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.bht.fr/index.php?action=history&amp;feed=atom&amp;title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0</id>
	<title>Manuel d'utilisation de Data Flow Generator V0 - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bht.fr/index.php?action=history&amp;feed=atom&amp;title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0"/>
	<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;action=history"/>
	<updated>2026-08-09T07:30:01Z</updated>
	<subtitle>Historique des révisions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4940&amp;oldid=prev</id>
		<title>WikiAdmin : 1 version importée : dfg</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4940&amp;oldid=prev"/>
		<updated>2026-07-24T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;1 version importée : dfg&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 24 juillet 2026 à 17:08&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4939&amp;oldid=prev</id>
		<title>toross&gt;WikiAdmin : /* Exemple plus complexe */</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Manuel_d%27utilisation_de_Data_Flow_Generator_V0&amp;diff=4939&amp;oldid=prev"/>
		<updated>2024-02-15T22:46:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Exemple plus complexe&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'informatique met à notre disposition des outils nous permettant d'éviter des tâches répétitives et ennuyeuses. Souvent, on devient informaticien car on veut éviter tout travail répétitif. Le développeur, déjà un informaticien, lui aussi veut éviter la programmation répétitive. Data Flow Generator est un outil parmi d'autres, que tout développeur finit par écrire car il est aussi un informaticien.&lt;br /&gt;
}}&lt;br /&gt;
=== Une méthodologie plus qu'un outil ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Ces outils, tels que Data Flow Generator, qui aident à se passer du travail répétitif, finissent par s'intégrer dans une méthodologie de développement. En général un développeur commence à écrire son code avant même d'avoir réfléchi aux données que le programme va utiliser, à la structure des données, et pourquoi pas à la structure du programme même, qui lui aussi peut être pensé comme &lt;br /&gt;
une entité qui s'articulerait autour d'une architecture.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
La réflexion fut longue et axée principalement sur trois branches : la spécialisation des logiciels (bases de données, middle-wares, etc.) et la spécialisation des outils de développement (langages, modélisation, etc.) et la thésaurisation de l'expérience. &lt;br /&gt;
}}&lt;br /&gt;
==== Les données et les programmes ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Au fil des années, des logiciels se sont spécialisés dans le stockage et l'accès aux données (bases de données) ou dans le traitement de ces données, qui sont souvent des logiciels spécifiques à des besoins particuliers ou alors ces programmes sont mis dans des libraires quand ils sont réutilisables. Le langage {{m|SQL}} a été mis au point interroger ces bases de données, c'est un langage qui permet d'éviter de se préoccuper des problèmes que gèrent les base de données.  &lt;br /&gt;
}}&lt;br /&gt;
==== Les langages de programmation et la modélisation ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En même temps, des langages de programmation se sont crées pour faciliter le travail du programmeur tout en évitant les taches répétitives. Chaque langage a ses qualités et ses défauts, nous dirons que chacun est optimal pour un ensemble de besoins donnés et chaque langage continue d'évoluer en intégrant de nouveaux concepts innovants. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
La programmation orientée objet ({{m|POO}}) fut une étape importante pour commencer à modéliser la structure des données dans le code du programme même. La modélisation MERISE qui était utilisée pour modéliser les données dans les bases de données relationnelles finit par être remplacée par UML ; le diagramme de classe d'UML est un bon outil pour modéliser les classes dans langages orientées objet. C'est cette modélisation qui sera utilisée dans Data Flow Generator.&lt;br /&gt;
}}&lt;br /&gt;
==== Le design pattern ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En parallèle à toutes ces innovations, le non concepteur d'outil de développement, les utilisateurs de ces outils continuaient et continue de réfléchir.&lt;br /&gt;
Le développeur expérimenté finit par décrire ou définir des modèles ou ce qu'on appelle des {{m|patrons}} ou en anglais (pattern). Ces longues réflexions basées sur l'expérience à conduit à l'établissement du {{m|design pattern}}.  &lt;br /&gt;
}}&lt;br /&gt;
=== Pourquoi générer du code ; le développement piloté par les modèles (model-driven development) ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Toutes ces améliorations dans le monde du développement de logiciels se retrouvent forcément dans le développement piloté par les modèles ({{m|model-driven development}}).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous trouverez facilement de la documentation sur les avantages et les inconvénients du développement piloté par les modèles, qui est encore mal connu par bon nombre de développeurs. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le développement de DataFlowGenerator a été fortement inspiré, d'une manière très simplifiée, du projet {{m|FAROS}}. C'est une façon simple d'illustrer, ces méthodes; le développement piloté par les modèles ({{m|Model driven architecture}} ou {{m|model-driven development}}).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le projet FAROS a déjà écrit l'état de l'art sur cette question, si vous voulez en savoir plus consultez le chapitre 5 du document  [http://www2.lifl.fr/faros/pub/uploads/Main/RNTL-FAROS-F1-1.pdf Etat de l’art sur la contractualisation et la composition] &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le site du projet FAROS :  [http://www2.lifl.fr/faros/Main/HomePage www2.lifl.fr/faros]&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Mais retenez que cette méthodologie permet de se concentrer ce qui est essentiel, ce qui rend le nécessité de faire le développement, mis sous forme minimale, sous forme plus accessible à l'analyse et à la conception, et surtout la charge de la maintenance du code est forcément très réduits car l'action des corrections et des évolutions se limitent à une quantité d'information la plus minimale qui aussi limite les erreurs de propagation de la même information.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== La place de Data Flow Generator dans tout ça ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Data Flow Generator est un outil de développement, qui à partir d'un modèle (développement piloté par les modèles), génère du code qui permet de construire une structure de données en mémoire vive et la même structure de données sous forme persistante ou sérialisée. Il ne génère pas seulement du code déclarative comme certains éditeurs d'UML, mais aussi il génère un minimum de code pour manipuler ces données (copie, extraction, création, lecture, écriture, vérification de cardinalité, interception, etc.). &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Pour l'instant il génére du code en c++ et python. La forme persistante actuelle utilise le format {{m|XML}} ; en c++ la librairie {{m|XERCES}} est utilisée et en python le module {{m|xml.dom.minidom}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Il permet aussi de garder la cohérence entre le modèle et le code en cours de développement. En effet le modèle peut être modifié et le code régénéré sans gêner le développement manuel (classique) des traitements autour de ces données ainsi restructurées.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Cet outil a été développé en ayant à l'esprit rois exigences essentielles :&lt;br /&gt;
&lt;br /&gt;
*'''Synchronisation permanente entre le modèle et le code''' &lt;br /&gt;
:La structure des données intrinsèquement définit par le code doit être exactement la structure définit par le modèle. &lt;br /&gt;
*'''Le passage immédiat en développement manuel (classique)'''&lt;br /&gt;
:Le code généré doit ressembler à un code développé manuellement afin que celui-ci puisse être reprise.&lt;br /&gt;
*'''Pas de pollutions avec le code généré (séparation entre code généré et code écrit)'''&lt;br /&gt;
:Le code généré ne doit pas être mélangé dans le code écrit manuellement (les fichiers sont bien séparés).&lt;br /&gt;
}}&lt;br /&gt;
==== Schema ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
A ma connaissance il n'existe pas d'outil en open source  équivalent à Data Flow Generator pour générer du  c++.  Pour le monde java il en existe sûrement.&lt;br /&gt;
La grammaire utilisée pour modéliser est une forme personnalisée très simplifiée et limité de {{m|Schema}} voir http://www.w3.org/XML/Schema et http://fr.wikipedia.org/wiki/XML_Schema. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous pouvez consulter ces sites pour trouver d' éventuels outils pour générer du c++.&lt;br /&gt;
}}&lt;br /&gt;
==== Utilitié et liens ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Pour ceux qui développent en C++, Python et veulent sérialiser leurs données sous format XML (et peut être bientôt sous HDF) ou tout simplement pour tout ceux qui veulent développer en C++ et Python et veulent avoir rapidement un ensemble de classes prêt à l'emploi en mémoire interne, cet outil peut dans la plupart des cas vous générer le code pour vous.  Il n'y pas de rupture entre le modèle et le code généré; le modèle reflétera toujours la structure des données (Le modèle commande le code !). &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Vous pouvez utiliser DataFlowGenerator en ligne sur : http://dfg.bht-diffusion.com&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le manuel de référence, qui est souvent difficile à digérer, se trouve sur [http://wiki.bht-diffusion.com/index.php/Manuel_de_r%C3%A9f%C3%A9rence_de_la_grammaire_de_Data_Flow_Generator manuel de référence sur wiki.bht-diffusion.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== La structure des données est arborescente ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Les données en général sont structurées en arborescente. Par exemple le système de fichiers des système LINUX est arborescent avec une racine unique. Pour représenter des graphies il faut faire toucher certains feuilles de l'arbre par des liens.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Les modèles de Data Flow generator modélisent des données ayant une structures arborescentes à racine unique. Le modèle ne permet pas de définir des liens entre les feuilles. S'il faut décrire de graphes c'est l'utilisateur du code généré qui doit définir ces liens.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Où trouver l'outil  ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'outil est utilisable en ligne sur Internet à l'adresse http://dfg.bht.fr .&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Le work flow ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Le work flow est assez simple. Le modèle est définit dans un fichier au format XML. Ce fichier sert d'entrée à {{m|DFG}} (Data Flow Generator). Suivant le langage choisi DFG contient des modèles applicatifs ou des sortes de patron de codes. A partir de ces données DFG génère le code permettant de travailler avec la structure de ces données défini par le modèle. &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{c| {{figc|Le work flow de Data Flow Generator|DataFlowGenerator_data_flow.png|ref1|10cm}} }}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le work flow suivant montre les évolutions possibles pour étendre la liste des formats de bas niveau des fichiers de sérialisation (cadres en pointillés).&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
{{c| {{figc|Le work flow des évolutions possibles de Data Flow Generator|DataFlowGenerator_data_flow_evol.png|ref2|10cm}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== La modèlisation des données ==&lt;br /&gt;
{{parW|1=&lt;br /&gt;
La grammaire de la modélisation est définie entièrement dans [[Manuel de référence de la grammaire de Data Flow Generator]].&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Mais prenons un exemple sous sa forme la plus simple pour être comprise de façon intuitive :&lt;br /&gt;
}}&lt;br /&gt;
=== Exemple simple ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- tuto_001 from &amp;quot;tuto_001.xml&amp;quot; --&amp;gt;&lt;br /&gt;
. tuto_001 : grammar from &amp;quot;tuto_001.xml&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
     FileFormatVersion=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
. . entreprise:CEntreprise&lt;br /&gt;
. . . red:CRed&lt;br /&gt;
. . . . departement:CDepartement cardinality=&amp;quot;+&amp;quot;&lt;br /&gt;
. . . . . nom:string /&lt;br /&gt;
. . . . . agents:CAgent cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
. . . . . . prenom:string /&lt;br /&gt;
. . . . . . nom:string /&lt;br /&gt;
. . . . . . fonction:string /&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Ce modèle dit que l'enreprise possède un R&amp;amp;D. la R&amp;amp;D possède plus d'un département. Chaque département a un nom et possède des agents (de 0 à l'infini). Chaque agent possède un prénom, nom et fonction.&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
L'équivalent de ce modèle dans la grammaire de Data Flow Generator est le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;entreprise&amp;quot; type='CEntreprise' &amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;red&amp;quot; type='CRed' &amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;departement&amp;quot; type='CDepartement' cardinality=&amp;quot;1:*&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;el name=&amp;quot;nom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                &amp;lt;el name=&amp;quot;agents&amp;quot; type='CAgent' cardinality=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;prenom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;nom&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                    &amp;lt;el name=&amp;quot;fonction&amp;quot; type='string'/&amp;gt;&lt;br /&gt;
                &amp;lt;/el&amp;gt;&lt;br /&gt;
            &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le diagramme UML équivalent est le suivant :&lt;br /&gt;
{{c|&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CEntreprise {&lt;br /&gt;
} &lt;br /&gt;
CEntreprise  *--&amp;gt; &amp;quot;1&amp;quot; CRed : red &lt;br /&gt;
CRed  *--&amp;gt; &amp;quot;+&amp;quot; CDepartement : departement &lt;br /&gt;
CDepartement : string nom &lt;br /&gt;
CDepartement  *--&amp;gt; &amp;quot;*&amp;quot; CAgent : agents &lt;br /&gt;
CAgent : string prenom &lt;br /&gt;
CAgent : string nom &lt;br /&gt;
CAgent : string fonction &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Exemple plus complexe ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- tuto_002 from &amp;quot;tuto_002.xml&amp;quot; --&amp;gt;&lt;br /&gt;
. tuto_002 : grammar from &amp;quot;tuto_002.xml&amp;quot; type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&lt;br /&gt;
. . dessin:CDessin&lt;br /&gt;
. . . base:CBase  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . point:CPoint  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . x:float /&lt;br /&gt;
. . . . y:float /&lt;br /&gt;
. . . segment:CSegment  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . A:@CPoint&lt;br /&gt;
. . . . B:@CPoint&lt;br /&gt;
. . . cercle:CCercle  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&lt;br /&gt;
. . . . C:@CPoint&lt;br /&gt;
. . . . R:float /&lt;br /&gt;
. . . compound:CCompound cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&lt;br /&gt;
. . . . elements:@CBase cardinality=&amp;quot;*&amp;quot; accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce modèle décrit un dessin qui est formé d'une liste de forme géométriques combinées. Chacune de ces formes est faite par un ensemble de formes élementaires ou forme combinées.  &lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
L'équivalent de ce modèle dans la grammaire de Data Flow Generator est le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;el name=&amp;quot;dessin&amp;quot; type=&amp;quot;CDessin&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;base&amp;quot; type=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;point&amp;quot; type=&amp;quot;CPoint&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;segment&amp;quot; type=&amp;quot;CSegment&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;cercle&amp;quot; type=&amp;quot;CCercle&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;R&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;compound&amp;quot; type=&amp;quot;CCompound&amp;quot; cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;el name=&amp;quot;elements&amp;quot; type=&amp;quot;@CBase&amp;quot; cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
           accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
  &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Le diagramme UML équivalent est le suivant :&lt;br /&gt;
{{c|1=&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CDessin {&lt;br /&gt;
} &lt;br /&gt;
CDessin  *--&amp;gt; &amp;quot;1&amp;quot; CBase : base &lt;br /&gt;
CPoint  --|&amp;gt; CBase&lt;br /&gt;
CPoint : float x &lt;br /&gt;
CPoint : float y &lt;br /&gt;
CSegment  --|&amp;gt; CBase&lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : A &lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : B &lt;br /&gt;
CCercle  --|&amp;gt; CBase&lt;br /&gt;
CCercle  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : C &lt;br /&gt;
CCercle : float R &lt;br /&gt;
CCompound  --|&amp;gt; CBase&lt;br /&gt;
CCompound  *--&amp;gt; &amp;quot;*&amp;quot; CBase : elements &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
Voici un exemple de forme persistante de données défini par le modèle :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;dessin DriverName=&amp;quot;DataFlowGenerator_XML_DOM_MINIDOOM&amp;quot; DriverVersion=&amp;quot;0.22.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;compound&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;C&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;3.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/C&amp;gt;&lt;br /&gt;
            &amp;lt;R&amp;gt;4.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CSegment&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;A&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;5.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;6.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/A&amp;gt;&lt;br /&gt;
            &amp;lt;B&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;1.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;-2.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/B&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;C&amp;gt;&lt;br /&gt;
                    &amp;lt;x&amp;gt;7.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                    &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                &amp;lt;/C&amp;gt;&lt;br /&gt;
                &amp;lt;R&amp;gt;3.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
            &amp;lt;/elements&amp;gt;&lt;br /&gt;
            &amp;lt;elements dfg_classname=&amp;quot;CCompound&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;C&amp;gt;&lt;br /&gt;
                        &amp;lt;x&amp;gt;4.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                        &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
                    &amp;lt;/C&amp;gt;&lt;br /&gt;
                    &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
                &amp;lt;/elements&amp;gt;&lt;br /&gt;
            &amp;lt;/elements&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
    &amp;lt;/compound&amp;gt;&lt;br /&gt;
    &amp;lt;compound&amp;gt;&lt;br /&gt;
        &amp;lt;elements dfg_classname=&amp;quot;CCercle&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;C&amp;gt;&lt;br /&gt;
                &amp;lt;x&amp;gt;4.000000E+00&amp;lt;/x&amp;gt;&lt;br /&gt;
                &amp;lt;y&amp;gt;0.000000E+00&amp;lt;/y&amp;gt;&lt;br /&gt;
            &amp;lt;/C&amp;gt;&lt;br /&gt;
            &amp;lt;R&amp;gt;2.000000E+01&amp;lt;/R&amp;gt;&lt;br /&gt;
        &amp;lt;/elements&amp;gt;&lt;br /&gt;
    &amp;lt;/compound&amp;gt;&lt;br /&gt;
&amp;lt;/dessin&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Exemple de développement en c++ sous LINUX ==&lt;br /&gt;
Voir [[Tutoriel de Data Flow_Generator#Tuto_002_:_D.C3.A9veloppement_en_c.2B.2B_sous_LINUX|Tutoriel de Data Flow_Generator]]&lt;/div&gt;</summary>
		<author><name>toross&gt;WikiAdmin</name></author>
	</entry>
</feed>