@MultiGramen

Что такое событие в ООП?

Недавно начал глубже изучать язык PHP и понять принципы ООП. В целом всё несложно и понятно, но одна тема всё-таки вызывает вопросы — это события.
Я составил вот такую картинку. Для меня она просто описывает что такое класс, объект, свойства и методы. Но что такое события?

Нарушение п.3.8 Регламента. Скриншоты фрагментов кода запрещены.

Странно: люди неплохо описывают что такое свойства и методы, но почему-то всегда опускают вопрос событий, хотя на картинке они находятся на одной линии.

Если есть возможность, прошу показать на примере кода как выглядит событие для меня это будет понятнее.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 3
Stalker_RED
@Stalker_RED
Возьмем к примеру сущность "пользователь". Придумаем ему несколько свойств, методов и событий.
Свойства: имя, возраст, адрес, баланс.
Методы: установить имя, прочитать имя, установить адрес, прочитать адрес...
События: имя изменилось, баланс изменился, аватарка изменилась, пользователь заказал пиццу, или что там у вас за бизнес-логика.

Вы можете придумать свои события, которые подходят под ваши процессы.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
В первоначальном варианте ООП Аллана Кея было событие. Грубо говоря Кей считал объекты акторами.
И от этого рисовал своё видение разработок. Но его кунг-фу не полетело в свое время. Слишком рано
было.

В современном классическом ООП в его реализации С++ и Страуструпа
нет никаких событий. Нету ключевых слов. И нету среды которая-бы обеспечивала путешествие
этих события вне объектов.

Событие может появляться например как абстракция прикладного уровня в библиотеках типа MFC
которы должны были работать с UI и регистрировать мышко-клики и прочее. Но там была ОС которая
обеспечивала буфер событий. Отдельный life cycle для каждого из них. Вот. А языс Microsoft Visual C++ / MFC
предоставляли как-бы фреймворк который регистрировал хендлеры и там соотв. эти события ловил и обрабатывал. Но это было сами понимаете никакое ни ООП. А это была очередная абстракция от Microsoft
которая по их задумке должна была упрощать процесс разработки графического софта.

В Borland C++ тоже есть свои абстракции для событий. Но они тоже лежат как-бы отдельно от языка. Скорее
во фреймворке или в библиотеках.

Откуда в PHP-OOP вдруг появляется событие? В ключевых словах PHP есть class, trait, function, abstract, extends.

Но никаких event нету. Осталось задать вопрос. Кто вообще дает такую информацию? Что за курсы? Что
за книга? Что за преподаватель?
Ответ написан
Maksclub
@Maksclub
maksfedorov.ru
Пример:
User имеет поведение:
- changeName(newName) — меняем имя
- activate() — активируем (меняется статус с првоеркой, не заблокрирвоан ли к примеру или еще что-то)
- changeEmail(newEmail)

Синопсис:
Все изменения можем смотреть у объекта (например геттеры) — вызывать состояние объекта и сравнивать со старым, предварительно зная старый

Но можем испускать события — User копит таковые в некотором внутрнеем массиве domainEvents, все важные изменения там и пишутся
Потом просто выше по коду попросить у объекта "дай-ка события, которые есть,
Например методом raiseEvents() мы получим события об изменении состояний/активации/смены имени/смена токенов

Архитектурно это может быть не метод raiseEvents(), а какой-нибудь observable (если у нас реактивная модель) и просто подписку повесить с обработчиком стрима, а можем просто вызвать метод получения
далее с этими событиями работать

Чтобы в коде не явно все состояния отслеживать, а отслеживать динамически через одну точку испускания событий и в приложении навешивать обработчики (например для генерации отчетов, логов изменений, навесить логику постобработки)

События могут быть не доменные (не как выше пример с доменным объектом), а события приложения/сервисной службы... Например есть юзкейс о регистрации, в приложении у вас есть эвент-дисптечер, при регистрации пользователя после корректного завершения через диспетчер кидаете событие и приложение как-то его обрабатывает внутри, вызывая обработчики события — это позволяет понизить связаность в системе: вам не нужно явно вызывать логику по месту регистрации пользователя, а просто зарегистрировать обработчик (указать, на какие события ему реагировать)

Есть событие, есть обработчик, нужно новое поведение навесить — регистрируете еще обработчик и делаете в ней логику, которая нужна, сам код регистрации пользователя остется не тронутым (вспоминанем вясокую связанность, так вот — мы не завязаны на код этой самой регистрации)

События в этом случае являются средством управления IoC (инверсия контроля кода)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Xiran
События могут пригодится при написании, например, фреймворка для управления задачами. Вот статья на этот счет: https://habr.com/ru/companies/jugru/articles/446562/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы