Методологические примочки к ООП
Наблюдаю много переходов на мою довольно давнюю статью Почему объектно-ориентированное программирование провалилось? Но хотелось бы попробовать подойти к этой же теме чуть более конструктивно.
О безнадежной сложности в программировании я как раз недавно писал, но что мы можем предпринять в рамках ООП для облегчения своей участи? Этот короткий пост посвящен коллекции нескольких малоизвестных тем, методологий или подходов, так или иначе связанных с продвинутым ООП, дизайном или моделированием ПО. Если вы уже применяете в рамках вашего объектно-ориентированного программирования такие вещи как OCL, DCI и DDD — этот пост из коллекции ссылок и обучающих видео вряд ли расскажет вам что-то новое.
В противном случае — двигайте под кат.
1. DCI — хорошо забытый старый взгляд на объекты
Вот вам свежее обучающее видео по теме DCI:
ООП существует уже довольно давно. На его принципах построено огромное количество программных продуктов. Основным назначением этой парадигмы является отражение человеческих понятий в программный код. Но зачастую получается так, что объектная модель системы далека от структуры объектов реального мира. И хотя при этом используются принципы ООП, эта система не ориентируется на реальные объекты.
DCI (Data, Context and Interaction) — подход к построению объектно-ориентированных систем, который позволяет лучше сфокусироваться на проектировании объектов и уйти от класс-ориентированного программирования. В этой презентации мы постараемся максимально просто изложить этот подход и познакомить слушателей с Qi4j — фреймворком, который помогает реализовать данный подход в Java.
2. Объектный язык ограничений OCL
Это часть стандарта UML для работы с объектами, цитата ниже взята отсюда:
На наш взгляд, объектный язык ограничений (Object Constraint Language, OCL) должен знать каждый, кто занимается моделированием или кому интересна модельно-ориентированная разработка. Однако, он незаслуженно обделён вниманием в сети вообще, а, уж, в русскоязычном сегменте информации просто мизер. Что это за язык и зачем он нужен, описано в этой статье.
Статья не претендует на фундаментальность, полноту охвата, точность определений и т.п. Её задача: 1) на простых примерах познакомить с OCL тех, кто никогда не слышал об этом языке; 2), а для тех, кто о нём слышал, возможно, открыть новые способы его применения.
Основы OCL можно почитать вот здесь, ниже выкладываю вот такую вот презенташку по OCL до всей кучи.
3. Старый добрый DDD
А ещё кодеры любят всякие архитектурные штуки для разработки по-настоящему сложного ПО, и обычно эти штуки заканчиваются тоже на xDD — DDD, TDD, MDD и т.д.
Что такое DDD, если говорить максимально просто? Вот хорошее видео выступления:
Скачать это видео можно здесь (0,73 Гб). А вот и презентация к ентому докладу:
Бонус: Снова о разработке на основе предметной области (Domain-Driven Design, DDD).
4. Проблематика ООП
Возможен встречный вопрос — зачем вообще такие сложности? Тем, кто хочет хотя бы отчасти понять, для чего нужны такие мощные сопутствующие инструменты-подпорки, можно прочитать приложенные ниже (по ссылкам) тексты. Но сразу предупреждаю — они требуют определенного напряжения для понимания.
Итак, терминологическая и семантическая проблематика ООП в серии из трех частей.
Особенности моделирование предметной области при помощи ООП:
Хочу заметить, что тем, кто пользуется терминами ООП, будет очень трудно понять меня. Дело в том, что ООП подменил понятия. В ООП под классом понимается не множество, как обычно принято в математике, или лингвистике. В ООП классом называют тип объектов, как у Аристотеля. Было бы правильно в ООП вместо термина класс объектовиспользовать термин тип объекта.
Однажды, съехав с правильной терминологии, вернуться в лоно правильных терминов оказывается очень трудно. В данной статье я попробую помочь тем, кто желает разобраться с терминологической кашей, заваренной ООП. В своих рассуждениях я буду использовать термины в их первоначальном смысле, а не в смысле ООП. Термин класс будет взят из логической парадигмы моделирования предметных областей, которая, в свою очередь, заимствовала этот термин из теории множеств. Термины тип и экземпляр будет взят из теории типов, построенной на парадигме Аристотеля о существовании типов.
Адепту ООП очень трудно понять, что термин экземпляр класса в русском языке указывает на класс объектов, а не на созвучный этому термину элемент класса — объект класса. Для многих, кто изучал ООП, термины экземпляр и элемент — неразличимы. Давайте разберемся с этими терминами внимательно.
Вторая часть: Особенности концептуального моделирования предметной области:
Вывод: концептуальное моделирование в виде ER много ближе к логической парадигме, чем моделирование в виде диаграммы классов. Но ни тот ни другой метод моделирования не позволяет моделировать семантические отношения между объектами и классами объектов. Это является существенным ограничением современных моделлеров, которое необходимо устранять.
Третья часть: На тему моделирования предметной области в терминах ООП.