Ядро мови моделювання

Мова моделювання Core є основою для будь-якої іншої мови.

Клас Base діє як корінь для всіх класів домену gaphor. Diagram та Presentation формують основу для всього, що ви бачите на діаграмі.

Усі моделі даних у Gaphor генеруються з фактичних файлів моделей Gaphor. Це дозволяє нам надати вам гарні діаграми внутрішньої моделі Gaphor.

../_images/3867dda5-7a95-11ea-a112-7f953848cf85.svg

Основна модель із презентаційними класами

Клас Базовий

Клас Base забезпечує сповіщення про події та інтегрується з репозиторієм моделі (внутрішньо відомий як ElementFactory). Всі класи в моделі повинні бути похідними від цього класу. Якщо модель не показує базовий клас для елемента, він буде похідним від Base. Можливі також двонаправлені зв’язки, а також похідні зв’язки.

Протоколи RepositoryProtocol та EventWatcherProtocol важливі для підключення моделі до сховища та механізмів обробки подій.

Клас Base є ядром моделі даних Gaphor.

class gaphor.core.modeling.Base(id: str | None = None, model: RepositoryProtocol | None = None)[source]

Базовий клас для всіх класів даних моделі.

property id: str

Ідентифікатор (тільки для читання), унікальний у моделі.

property model: RepositoryProtocol

Модель власника викликає TypeError, коли модель не встановлено.

Від’єднайте елемент.

Усі посилання на елементи знищуються. Для складених асоціацій асоційовані елементи також не пов’язані.

Блокування від’єднання отримується під час від’єднання властивостей цього елемента, щоб уникнути проблем із рекурсією.

Обробка подій

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().

postload() None[source]

Виправляйте всі обставини.

Це запускається після завантаження всіх елементів.

save(save_func: Callable[[str, str | bool | int | Base | collection[Base]], None]) None[source]

Збережіть стан, викликавши save_func(name, value).

Методи стилю OCL

isKindOf(class_: type[Base]) bool[source]

Повертає True, якщо об’єкт є екземпляром class_.

isTypeOf(other: Base) bool[source]

Повертає True, якщо об’єкт має той самий тип, що й other.

Клас Презентація

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]
create(type: type[T]) T[source]

Створіть новий елемент у сховищі.

select(self, expression: Callable[[Base], bool]) Iterator[Base]

Виберіть елементи зі сховища, які відповідають виразу.

select(self, type_: type[T]) Iterator[T]

Виберіть усі елементи зі сховища типу type_.

select(self, expression: None) Iterator[Base]

Виберіть усі елементи зі сховища.

lookup(id: str) Base | None[source]

Отримати елемент за id зі сховища.

Повертає None, якщо такого елемента не існує.

class gaphor.core.modeling.base.EventWatcherProtocol(*args, **kwargs)[source]
watch(path: str, handler: Callable[[ElementUpdated], None] | None = None) EventWatcherProtocol[source]

Додайте годинник для певного шляху. Шлях є відносно елемента, який створив об’єкт спостереження.

Повертає self, тому операції спостереження можуть бути зв’язані.

unsubscribe_all() None[source]

Його слід викликати перед видаленням спостерігача, щоб звільнити всі спостережувані шляхи.