
1. Основные понятия объектно-ориентированного подхода
Объектно-ориентированный подход основан на систематическом использовании моделей для языково-независимой разработки программной системы, на основе из ее прагматики.
Последний термин нуждается в пояснении. Прагматикаопределяется целью разработки программной системы: для обслуживания клиентов банка, для управления работой аэропорта, для обслуживания чемпионата мира по футболу и т.п. В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к разрабатываемой программной системе (см. рисунок 1.1). При объектно-ориентированном подходе эти предметы и понятия заменяются их моделями, т.е. определенными формальными конструкциями, представляющими их в программной системе.
Рис. 1.1. Семантика (смысл программы с точки зрения выполняющего ее компьютера) и прагматика (смысл программы с точки зрения ее пользователей)
Модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой программной системы. Тем самым модель "беднее", а, следовательно, проще представляемого ею предмета (понятия). Но главное даже не в этом, а в том, что модель есть формальная конструкция: формальный характер моделей позволяет определить формальные зависимости между ними и формальные операции над ними. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. В частности, формальный характер моделей позволяет получить формальную модель разрабатываемой программной системы как композицию формальных моделей ее компонентов.
Таким образом, объектно-ориентированный подход помогает справиться с такими сложными проблемами, как
уменьшение сложности программного обеспечения;
повышение надежности программного обеспечения;
обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;
обеспечение возможности повторного использования отдельных компонентов программного обеспечения.
Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
ООП - это не просто набор некоторых свойств, добавленных в уже существующие языки. Это новый шаг в осмыслениизадач и разработки ПО. Программы - это совокупность взаимодействующих объектов. Каждый объект отвечает за конкретную задачу. Вычисление осуществляется посредством взаимодействия объектов. Объект получается в результате инкапсуляции состояния (данных) и поведения (операций), во многом аналогично абстрактному типу данных - АТД. Поведение объекта диктуется классом. Данные и поведение представлены в виде классов, экземпляры которых - объекты. Все экземпляры одного класса будут вести себя одинаковым образом в ответ на одинаковые запросы.
Объект проявляет свое поведение путем вызова метода в ответ на сообщение. Интерпретация сообщения зависит от объекта и может быть различной для различных классов объектов. Для удобства создания нового типа из уже существующих типов, определенных пользователем используется механизм наследования. Классы могут быть организованы в виде иерархического дерева наследования. С помощью уменьшения взаимозависимости ООП позволяет разрабатывать системы, пригодные для многократного использования. ООП - это взгляд на программирование, сосредоточенный на данных; в котором данные и поведение жестко связаны. Для этого необходимо, чтобы объекты определялись вместе с сообщениями, на которые они могут реагировать.
Объектно-ориентированная парадигма предлагает новый подход к разработке программного обеспечения. Фундаментальная концепция объектно-ориентированной парадигмы состоит в передаче сообщений объектам. Таким образом, Объектно-ориентированный язык должен обладать свойствамиабстракции,инкапсуляции, наследования и полиморфизма.
Инкапсуляция с сокрытием данных - способность отличать внутреннее состояние объекта и поведение от его внешнего состояния и поведения
Абстракция - расширяемость типов - способность добавлять типы, определяемые пользователем для того, чтобы дополнить ими встроенные типы. Один из принципов ООП заключается в том, чтобы типы, определяемые пользователем, должны обладать теми же привилегиями, что и встроенные типы.
Наследование - способность создавать новые типы, повторно используя, описание существующих типов.
Полиморфизм с динамическим (поздним) связыванием - способность объектов быть ответственными за интерпретацию вызова функции
Принципы Объектно-ориентированного подхода:
Действие в объектно-ориентированном программировании инициируется посредством передачи сообщений объекту. Сообщение содержит запрос на осуществление действия. В качестве реакции на сообщение получатель запустит некоторый метод, чтобы удовлетворить принятый запрос.
Все объекты являются экземплярами, классов. Все объекты одного класса используют одни и те же методы в ответ на одинаковые сообщения.
Принцип наследования. Классы могут быть организованы в иерархическую структуру с наследованием свойств. Дочерний класс наследует атрибуты родительского класса.
Принцип полиморфизма. Объекты реагируют на одно и тоже сообщение строго специфичным для них образом.
! Основная идея ООП – размещение внутри одного объекта структуры данных и функций обработки этих данных:
Объект = структура данных + функций обработки этих данных;
Объект – определение Ивари Якобсона: "Объект – сущность, способная сохранять свое состояние и обеспечивающая набор операций для проверки и изменения состояния".
В С++:
Новое понятие class – служит для определения новых типов объектов.
(подобно структуре struct TStudent, которая служит для определения нового сложного типа данных.
Объектом в С++ называют конкретный экземпляр реализации класса.
(Как переменная типа TStruct является экземпляром структуры, который наполняется реальными данными)
class включает поля и функции / свойства и методы / атрибуты и операции – эти пары терминов, по терминологии процедурного программирования, относятся к данным и функциям обработки этих данных.
class имеет разделы:
private и protected – защищенные, недоступные снаружи, и
public – доступный, реализующий интерфейс класса, т.е. способы работы с ним.
Принципы, составляющие суть ООП.
Рассмотрим три:
Инкапсуляция (Encapsulation – сокрытие, герметизация внутри) – объединение данных и кода + защита от внешнего вмешательства и неверного использования. Реализация класса может быть скрыта в защищенной области (private, protected), доступ к которой осуществляется через интерфейсные поля/функции публичной (public) области.
Наследование (Inheritance) - создание нового класса как потомка уже существующего добавлением новых полей и методов, при этом возможно перекрытие(переопределение) полей и методов класса-предка. Создается иерархия классов.
Полиморфизм (Polymorphism) – множественность форм – это свойство, которое позволяет одно и то же имя использовать для решения технически разных задач. Таким образом реализован, например, механизм перекрытия функций.
Д.З. Павловская. Часть II. ООП (стр. 173). Основные идеи, принципы ООП.