Понятия ООП: инкапсуляция, наследования, полиморфизм. Объекты, классы, домены, отношения между ними - Painted-Black/BMSTU-OOP GitHub Wiki

Основные принципы ООП:

  • Инкапсуляция - свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом.
  • Наследование – позволяет создать новый класс на основе уже существующего, частично или полностью заимствуя его функциональность. Наследование есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.

Принцип наследования решает проблему модификации свойств объекта и придает ООП в целом исключительную гибкость.

  • Полиморфизм – использование объектов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Дает возможность работать с несколькими типами так, будто это один и тот же тип. При этом поведение объектов будет разным в зависимости от типа, к которому они принадлежат.

Основные понятия ООП

Объект - конкретная реализация абстрактного понятия, обладающая характеристиками состояния, поведения, индивидуальности.

В программе в виде объектов могут представляться:

  • Физические объекты
  • Элементы интерфейса
  • Структуры данных
  • Группы людей
  • Хранилища данных
  • Пользовательские типы данных
  • Участники компьютерных игр и т. д.

Категории объектов:

  • Реально существующие в физическом мире
  • Роли - абстракция цели или назначения объекта. Один объект может выступать в разных ролях.
  • Инцидент - абстракция чего-то произошедшего (наводнение)
  • Взаимодействия - объекты, получаемые из взаимоотношений между другими объектами (перекресток, взятка)
  • Спецификации - объекты, используемые для предоставления правил (правила дорожного движения)

Объект находится в таком же отношении к своему классу, в каком переменная находится по отношению к своему типу. Объект является экземпляром класса.

Состояние - один из возможных вариантов существования объекта.

Поведение - описание объекта в терминах изменения его состояний и передачи сообщений (данных) под воздействием других объектов. Поведение - это некоторая реакция объекта в ответ на внешнее воздействие.

Индивидуальность - сущность объекта, отличающая его от других объектов.

Действие – деятельность или операция, которые должны быть выполнены над объектом.

Модель Мура:

  • Множество состояний, которые может принимать объект. Каждое состояние представляет стадию в жизненном цикле типичного экземпляра.
  • Множество событий, на которые реагирует объект, в результате которых объект меняет свое состояние
  • Правила перехода определяют, какое новое состояние получает в следствие какого-нибудь события (событие может и не изменять объект)
  • Действие состояний - деятельность или операция который должен быть выполнены над объектом чтобы он мог достичь состояния (каждому действию соответствует состояние).

Отношения между объектами:

  • Отношения использования (старшинства)
    • объекты воздействия (активные) - воздействуют на другие объекты, но сами никогда не подвержены воздействию
    • исполнители (пассивные) - только подвержены воздействию других объектов
    • посредники (активные + пассивные)
  • Отношения включения

Класс - такая абстракция множества предметов реального мира, что все предметы этого множества (объекты) имеют одни и те же характеристики, все экземпляры подчинены и согласованы с одним и тем же поведением.

Класс является своего рода формой, определяющей, какие данные и функции будут включены в объект класса. При объявлении класса не создаются никакие объекты этого класса. Класс является описанием совокупности сходных между собой объектов.

Отношения классов:

  • Наследование - один класс может использовать другой. На основе одного класса, мы строим новый класс, путем добавления новых характеристик и методов
  • Использование – один класс вызывает методы другого класса
  • Наполнение - класс в классе
  • Метакласс - класс, существующий для создания других классов (современные языки не поддерживают).

Домен - отдельный реальный мир, населенный отчетливым набором объектов, которые ведут себя в соответствии с характерными правилами поведения. Отдельный, реальный, гипотетически и абстрактный мир, населенный отчетливым набором объектов, которые ведут себя в соответствии с предусмотренным доменом правилами. Каждый домен образует отдельное и связное единое целое.

Класс определяется в одном домене.

Отношения доменов:

  • Клиенты
  • Сервера

Домены:

  • Прикладной - основная задача
  • Архитектурный - задает архитектуру системы
  • Сервисные домены - набор сервисных функций для работы прикладного домена
  • Домен реализации - функционал, который предоставляет какой-то низкий уровень/ОС.

Если классов в домене становится слишком много, домен разбивают на подсистемы (по минимуму связей).