Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (Основные понятия).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 27.04.2023

Просмотров: 214

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Раздел 2. Полиморфизм объектно-ориентированного программирования

В объектно-ориентированном программировании полиморфизм характеризуется как взаимозаменяемость объектов с одинаковым интерфейсом. Это можно объяснить так: класс-потомок наследует экземпляры методов класса-родителя, но выполнение этих методов может происходить другим образом, соответствующим специфике класса-потомка, то есть модифицированным.

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

На сайте представлена частичная теория объектно-ориентированного программирования для начинающих и ООП примеры решения задач. ООП уроки сайта представляют собой подробные алгоритмы выполнения поставленной задачи. На основе выполнения данных лабораторных работ учащийся сможет в дальнейшем самостоятельно решать другие аналогичные задачи.

Раздел 3. Инкапсуляция

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

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

Другим немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую. Можно сказать, что ООП «провоцирует» разработку библиотек объектов, таких как Turbo Vision.


ГЛАВА 3. ШАБЛОНЫ ПРОЕКТИРОВАНИЯ

Раздел 1. Основная информация

В сравнении с полностью самостоятельным проектированием, шаблоны обладают рядом преимуществ. Основная польза от использования шаблонов состоит в снижении сложности разработки за счёт готовых абстракций для решения целого класса проблем. Шаблон даёт решению своё имя, что облегчает коммуникацию между разработчиками, позволяя ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация деталей решений: модулей, элементов проекта, — снижается количество ошибок.

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

Хотя легкое изменение кода под известный шаблон может упростить понимание кода, по мнению Стива Макконнелла, с применением шаблонов могут быть связаны две сложности. Во-первых, слепое следование некоторому выбранному шаблону может привести к усложнению программы. Во-вторых, у разработчика может возникнуть желание попробовать некоторый шаблон в деле без особых оснований.

Многие шаблоны проектирования в объектно-ориентированном проектировании можно рассматривать как идиоматическое воспроизведение элементов функциональных языков. Питер Норвиг утверждает, что 16 из 23 шаблонов, описанных в книге «Банды четырёх», в динамически-типизируемых языках реализуются существенно проще, чем в С++, либо оказываются незаметны. Пол Грэхэм считает саму идею шаблонов проектирования — антипаттерном, сигналом о том, что система не обладает достаточным уровнем абстракции, и необходима её тщательная переработка. Нетрудно видеть, что само определение шаблона как «готового решения, но не прямого обращения к библиотеке» по сути означает отказ от повторного использования в пользу дублирования. Это, очевидно, может быть неизбежным для сложных систем при использовании языков, не поддерживающих комбинаторы и полиморфизм типов, и это в принципе может быть исключено в языках, обладающих свойством гомоиконичности (хотя и не обязательно эффективно), так как любой шаблон может быть реализован в виде исполнимого кода.


Раздел 2. Типы шаблонов проектирования

На текущий момент существует великое множество шаблонов проектирования. Рассмотрим чуть более подробно несколько из них.

Итак, для начала кратко ознакомимся с классификацией шаблонов по типам:

  1. Основные шаблоны:

1.1 Шаблон делегирования: Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту.

1.2 Шаблон функционального дизайна: Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы.

1.3 Неизменяемый интерфейс: Создание неизменяемого объекта.

1.4 Интерфейс: Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять.

1.5 Интерфейс-маркер: В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого могут применяться атрибуты или аннотации.

1.6 Контейнер свойств: Позволяет добавлять дополнительные свойства для класса в контейнер (внутри класса), вместо расширения класса новыми свойствами.

1.7 Канал событий: Расширяет шаблон Publish/Subscribe, создавая централизованный канал для событий. Использует объект-представитель для подписки и объект-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одного объекта, даже если он зарегистрирован только на одном канале.

  1. Порождающие шаблоны. Шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту:

2.1 Абстрактная фабрика: Класс, который представляет собой интерфейс для создания компонентов системы.

2.2 Строитель: Класс, который представляет собой интерфейс для создания сложного объекта.

2.3 Фабричный метод: Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.


2.4 Отложенная инициализация: Объект, инициализируемый во время первого обращения к нему.

2.5 Мультитон: Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним.

2.6 Объектный пул: Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов.

2.7 Прототип: Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор.

2.8 Одиночка: Класс, который может иметь только один экземпляр.

  1. Структурные шаблоны. Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу:

3.1 Адаптер: Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.

3.2 Мост: Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.

3.3 Компоновщик: Объект, который объединяет в себе объекты, подобные ему самому.

3.4 Декоратор: Класс, расширяющий функциональность другого класса без использования наследования.

3.5 Фасад: Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.

3.6 Единая точка входа: Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы.

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

3.8 Заместитель: Объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.

  1. Поведенческие шаблоны: определяют взаимодействие между объектами, увеличивая таким образом его гибкость:

4.1 Цепочка обязанностей: Предназначен для организации в системе уровней ответственности.

4.2 Команда: Представляет действие. Объект команды заключает в себе само действие и его параметры.

4.3 Интерпретатор: Решает часто встречающуюся, но подверженную изменениям, задачу.

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

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


4.6 Хранитель: Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях.

4.7 Наблюдатель: Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

4.8 Слуга: Используется для обеспечения общей функциональности группе классов.

4.9 Спецификация: Служит для связывания бизнес-логики.

4.10 Состояние: Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

4.11 Стратегия: Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.

4.12 Шаблонный метод: Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

4.13 Посетитель: Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.

4.14 Одноразовый посетитель: Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется.

4.15 Иерархический посетитель: Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной).

Как видим, шаблонов проектирования достаточно большое количество. Но, чтобы увидеть их применение на практике, приведу пример использования шаблона Одиночка.

Цель шаблона: У класса есть только один экземпляр, и он предоставляет к нему глобальную точку доступа. При попытке создания данного объекта он создаётся только в том случае, если ещё не существует, в противном случае возвращается ссылка на уже существующий экземпляр и нового выделения памяти не происходит. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность. Например, к описанным компонентам класса можно обращаться через интерфейс, если такая возможность поддерживается языком.

Глобальный «одинокий» объект — именно объект (log().put("Test");), а не набор процедур, не привязанных ни к какому объекту (logPut("Test");) — бывает нужен:

  • если используется существующая объектно-ориентированная библиотека и ей нужен объект, унаследованный от определённого класса/интерфейса;
  • если есть шансы, что один объект когда-нибудь превратится в несколько;
  • если интерфейс объекта (например, игрового мира) слишком сложен и не стоит засорять основное пространство имён большим количеством функций;
  • если, в зависимости от каких-нибудь условий и настроек, создаётся один из нескольких объектов. Например, в зависимости от того, ведётся лог или нет, создаётся настоящий объект, пишущий в файл, или «заглушка», ничего не делающая.