Noyau du langage de modélisation¶
Le noyau du langage de modélisation est la base de tout autre langage.
La classe Base est la racine de toutes les classes du domaine gaphor. Diagram et Presentation forment la base de tout ce que vous voyez dans un diagramme.
Tous les modèles de données de Gaphor sont générés à partir des fichiers de modèles réels de ce dernier. Cela nous permet de vous fournir de beaux diagrammes du modèle interne de Gaphor.
Le modèle de base avec les classes de présentation¶
La classe Base¶
La classe Base fournit des notifications d’événements et s’intègre au référentiel de modèles (connu en interne sous le nom de ElementFactory). Toutes les classes d’un modèle doivent dériver de cette classe. Si un modèle n’indique pas de classe de base pour un élément, il dérivera de Base. Les relations bidirectionnelles sont également possibles, de même que les relations dérivées.
Les protocoles RepositoryProtocol, et EventWatcherProtocol sont importants pour connecter le modèle au référentiel et aux mécanismes de gestion des événements.
La classe Base est le cœur du modèle de données de Gaphor.
- class gaphor.core.modeling.Base(id: str | None = None, model: RepositoryProtocol | None = None)[source]¶
Classe de base pour toutes les classes de données de modèle.
- property model: RepositoryProtocol¶
Le modèle propriétaire, génère
TypeErrorsi le modèle n’est pas défini.
- unlink() None[source]¶
Dissocier l’élément.
Toutes les références des éléments sont alors supprimées. Les éléments associés des associations composites sont également dissociés.
Le verrou de déconnexion est activé lors de la séparation des propriétés de l’élément afin d’éviter les problèmes de récursivité.
Gestion des événements¶
- handle(event: object) None[source]¶
Propager les événements entrants.
Cela ne fonctionne que si l’élément a été créé par une
ElementFactory
- watcher(default_handler: Callable[[ElementUpdated], None] | None = None) EventWatcherProtocol[source]¶
Créer un nouvel observateur pour cet élément.
Les observateurs fournissent un moyen pratique de recevoir un signal lorsqu’une propriété relative à
selfa été modifiée.Pour utiliser un observateur, l’élément doit être créé par une
ElementFactory`correctement câblée.Cet exemple est purement illustratif :
>>> element = Base() >>> watcher = element.watcher(default_handler=print) >>> watcher.watch("note") # Watch for changed on element.note
Chargement et enregistrement¶
- load(name: str, value: str | bool | int | Base | collection[Base]) None[source]¶
Charge la valeur dans le nom.
Assurez-vous que la fonction postload() est appelée après le chargement de tous les éléments.
Méthodes de type OCL¶
La classe Presentation¶
- class gaphor.core.modeling.Presentation(diagram: Diagram, id: Id | None = None)[source]¶
Un type spécial de
Basequi peut être affiché sur unDiagram.Les instances de présentation ne peuvent appartenir qu’à des diagrammes.
Les sous-types de
Presentationdoivent implémenter le protocolegaphas.item.Item.- request_update() None[source]¶
Marquer cet objet de présentation pour mise à jour.
Les mises à jour sont orchestrées par des diagrammes.
- watch(path: str, handler: Callable[[ElementUpdated], None] | None = None) Self[source]¶
Observez un certain chemin d’éléments commençant par
self.Le traitement est optionnel et sera par défaut un simple
request_update.Les surveillants doivent être définis dans le constructeur, de sorte qu’ils puissent être enregistrés et désenregistrés en une seule opération.
self.watch("subject.name")
Cette interface est fluide : elle renvoie
self.
- change_parent(new_parent: Presentation | None) None[source]¶
Modifier le parent et mettre à jour la matrice de l’élément afin que l’élément reste visuellement au même endroit.
La classe Diagram¶
- class gaphor.core.modeling.Diagram(id: str | None = None, model: RepositoryProtocol | None = None)[source]¶
Les diagrammes peuvent contenir des éléments
Presentation.Si les diagrammes doivent être propriétaires, le langage de modélisation (par exemple UML) doit subdiviser
Diagramet ajouter des relations et des règles de propriété.- create(type_: type[P], parent: Presentation | None = None, subject: Base | None = None) P[source]¶
Créez un nouvel élément de diagramme sur le diagramme.
Il est créé avec un identifiant unique et est attaché à l’élément racine du diagramme. item. Le paramètre de type est la classe d’élément à créer. Le nouvel élément peut également avoir un parent et un sujet facultatifs.
- lookup(id: str) Presentation | None[source]¶
Recherche d’un élément de présentation par son identifiant.
Retourne une présentation dans ce diagramme ou retourne
None.
- select(expression: Callable[[Presentation], bool]) Iterator[Presentation][source]¶
- select(expression: type[P]) Iterator[P]
- select(expression: None) Iterator[Presentation]
Renvoie un itérateur de tous les éléments de la toile qui correspondent à l’expression.
- request_update(item: Item) None[source]¶
Planifier la mise à jour d’un élément.
Aucune mise à jour n’est effectuée à ce stade, l’élément est seulement ajouté à l’ensemble des éléments à mettre à jour.
Cette méthode fait partie du protocole
gaphas.model.Model.
- update(dirty_items: Collection[Presentation] = ()) None[source]¶
Mettre à jour le diagramme.
Tous les éléments ayant demandé une mise à jour via
request_update()sont désormais considérés comme des mises à jour. Si un élément possède une méthodeupdate(context: UpdateContext), elle est invoquée. Les contraintes sont résolues.
Protocoles¶
- class gaphor.core.modeling.base.RepositoryProtocol(*args, **kwargs)[source]¶
-
- select(self, expression: Callable[[Base], bool]) Iterator[Base]¶
Sélectionner dans le dépôt les éléments qui répondent à l”
expression.
- select(self, type_: type[T]) Iterator[T]
Sélectionner tous les éléments du dépôt de type
type_.
- class gaphor.core.modeling.base.EventWatcherProtocol(*args, **kwargs)[source]¶