Skip to content

ООП Лекция 02. Основные понятия ООП.

Vladislav Mansurov edited this page Apr 16, 2022 · 8 revisions

В один момент времени люди устали использовать процедурное программирование и увидели проблемы структурного метода программирования.

Совместное использование записей (Хоар):

Один крутой мужик, Чарльз Хоар, в 1966 провёл лекции по совместному использованию записей, выделив, таким образом, базовые понятия ООП:

  1. Если в программе меняется данное, то в структурном подходе мы вынуждены выявить все места, где оно используется и внести изменения в написанный код. Вот прикиньте, какой это объем работы? В ООП мы выносим действие над данным! Это не связка с другими данными! Эта идея называется инкапсуляцией. **Инкапсуляция** - объединение данных и действий над данными. Работа с данными идет только через действие. Пример: работа со структурой File в Qt и других программах. Поля разные, а функции одинаковые.

image

  1. Изменение кода - понижение надежности. Для модификации программных сущностей использовать при возможности надстройку над существующими сущностями. Это наследование - надстройка над тем, что существует (возможность сокрытия/добавления полей/функций). Хоар не выделял это как требование, оно утвердилось позже. Безразличие к тому, что представляет функционал - полиморфизм. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

image

Формирование понятия: данные + действия. Возможность изменения как самих данных, так и надстройки без изменения самих данных.

  1. Перенос взаимодействия из физического мира в программу. Синхронное (accessорное) взаимодействие или асинхронное (событийное) взаимодействие. Синхронное взаимодействие - вызов метода (если объект), функции. Асинхронное взаимодействие - событие произошло, изменение объекта или его состояния произойдут со временем, на уровне ЯП реализовать невозможно. Поддержка должна быть на другом уровне.

Сначала начали реализовывать операционные оболочки. Сейчас это поддерживается на уровне ОС.

Преимущества ООП

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

Недостатки ООП

  • Невозможность совмещения этапов проектирования, кодирования, тестирования. Сначала нужно построить начальную модель, потом рекурсивный дизайн. - -
  • Программист и проектировщик, и кодировщик. Другие требования к квалификации.
  • Гораздо больше времени тратится на проектирование.
  • Размер кода резко возрастает - резко увеличивается время выполнения. В структурном подходе лавинный вызов метода.
  • Возникновение "мертвого кода" при модификации. Это занимает место, висит в памяти. Борьба с мертвым кодом - компилируется только тот код, который вызывается.

Понятия ООП и объекта:

Три слона, на которых держится наша плоская планета:

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

Понятие объекта

Объект - реализация абстрактного понятия, обладающего:

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

Модель Мура - жизненный цикл объекта??.

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

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

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

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

1.Отношение использования (старшинства) - каждый объект включается в такие отношения. Может играть 3 роли.

  • Воздействие - объект только воздействует на другие объекты, но сами воздействия не подтверждаются - Активные объекты.
  • Исполнение - объект подвержен воздействию другого объекта, но сам ни на кого не влияет. Пассивные объекты.
  • Посредничество - объект может и воздействовать и исполнять.

2.Отношение включения - один объект может включать другие объекты (делает объекты более зависимыми друг от друга).

Классы

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

Отношения между классами

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

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

Clone this wiki locally