Ядро мови моделювання¶
Мова моделювання Core є основою для будь-якої іншої мови.
Клас Base діє як корінь для всіх класів домену gaphor. Diagram та Presentation формують основу для всього, що ви бачите на діаграмі.
Усі моделі даних у Gaphor генеруються з фактичних файлів моделей Gaphor. Це дозволяє нам надати вам гарні діаграми внутрішньої моделі Gaphor.
Основна модель із презентаційними класами¶
Клас Базовий¶
Клас Base забезпечує сповіщення про події та інтегрується з репозиторієм моделі (внутрішньо відомий як ElementFactory). Всі класи в моделі повинні бути похідними від цього класу. Якщо модель не показує базовий клас для елемента, він буде похідним від Base. Можливі також двонаправлені зв’язки, а також похідні зв’язки.
Протоколи RepositoryProtocol та EventWatcherProtocol важливі для підключення моделі до сховища та механізмів обробки подій.
Клас Base є ядром моделі даних Gaphor.
- class gaphor.core.modeling.Base(id: str | None = None, model: RepositoryProtocol | None = None)[source]¶
Базовий клас для всіх класів даних моделі.
- property model: RepositoryProtocol¶
Модель власника викликає
TypeError, коли модель не встановлено.
- unlink() None[source]¶
Від’єднайте елемент.
Усі посилання на елементи знищуються. Для складених асоціацій асоційовані елементи також не пов’язані.
Блокування від’єднання отримується під час від’єднання властивостей цього елемента, щоб уникнути проблем із рекурсією.
Обробка подій¶
- handle(event: object) None[source]¶
Поширювати вхідні події.
Це працює, лише якщо елемент було створено
ElementFactory
- watcher(default_handler: Callable[[ElementUpdated], None] | None = None) EventWatcherProtocol[source]¶
Створіть новий спостерігач для цього елемента.
Спостерігачі забезпечують зручний спосіб отримати сигнал, коли властивість відносно
selfбула змінена.Щоб використовувати спостерігач, елемент має бути створений належним чином підключеним
ElementFactory`.Цей приклад є суто ілюстративним:
>>> element = Base() >>> watcher = element.watcher(default_handler=print) >>> watcher.watch("note") # Watch for changed on element.note
Завантаження та збереження¶
- load(name: str, value: str | bool | int | Base | collection[Base]) None[source]¶
Завантажує значення в назві.
Переконайтеся, що після завантаження всіх елементів слід викликати postload().
Методи стилю OCL¶
Клас Презентація¶
- class gaphor.core.modeling.Presentation(diagram: Diagram, id: Id | None = None)[source]¶
Спеціальний тип
Base, який можна відобразити наDiagram.Примірниками презентації можуть володіти лише діаграми.
Підтипи
Presentationмають реалізовувати протоколgaphas.item.Item.- request_update() None[source]¶
Позначити цей об’єкт презентації для оновлення.
Оновлення організовано за допомогою діаграм.
- watch(path: str, handler: Callable[[ElementUpdated], None] | None = None) Self[source]¶
Слідкуйте за певним шляхом елементів, починаючи з
self.Обробник є необов’язковим і за умовчанням використовуватиме простий
request_update.Годинники повинні бути встановлені в конструкторі, щоб їх можна було реєструвати і знімати одним пострілом.
self.watch("subject.name")
Цей інтерфейс вільний: повертає
self.
- change_parent(new_parent: Presentation | None) None[source]¶
Змініть батьківський елемент і оновіть матрицю елемента, щоб елемент візуально залишався на тому самому місці.
Клас Діаграма¶
- class gaphor.core.modeling.Diagram(id: str | None = None, model: RepositoryProtocol | None = None)[source]¶
Діаграми можуть містити елементи
Presentation.Якщо потрібно володіти діаграмами, мова моделювання (наприклад, UML) має створити підклас «Діаграма» та додати відносини власності та правила.
- create(type_: type[P], parent: Presentation | None = None, subject: Base | None = None) P[source]¶
Створіть новий елемент діаграми на діаграмі.
Він створюється з унікальним ідентифікатором і додається до кореневого елемента діаграми. Параметр типу - це клас елемента, який потрібно створити. Новий елемент також має необов’язковий батьківський елемент і тему.
- lookup(id: str) Presentation | None[source]¶
Знайдіть елемент презентації за ідентифікатором.
Повертає презентацію на цій діаграмі або повертає
Немає.
- select(expression: Callable[[Presentation], bool]) Iterator[Presentation][source]¶
- select(expression: type[P]) Iterator[P]
- select(expression: None) Iterator[Presentation]
Повертає ітератор усіх елементів полотна, які відповідають виразу.
- request_update(item: Item) None[source]¶
Заплануйте оновлення елемента.
На цьому етапі оновлення не виконується, воно лише додається до набору елементів, які потрібно оновити.
Цей метод є частиною протоколу
gaphas.model.Model.
- update(dirty_items: Collection[Presentation] = ()) None[source]¶
Оновіть діаграму.
Усі елементи, які запитували оновлення через
request_update(), тепер є оновленнями. Якщо елемент має методupdate(context: UpdateContext), він викликається. Обмеження вирішено.
Протоколи¶
- class gaphor.core.modeling.base.RepositoryProtocol(*args, **kwargs)[source]¶
-
- select(self, expression: Callable[[Base], bool]) Iterator[Base]¶
Виберіть елементи зі сховища, які відповідають
виразу.
- select(self, type_: type[T]) Iterator[T]
Виберіть усі елементи зі сховища типу
type_.
- class gaphor.core.modeling.base.EventWatcherProtocol(*args, **kwargs)[source]¶