Характеристики ооп
Всё является объектом.
Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщения — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
Каждый объект имеет независимую память, которая может включать другие объекты.
Каждый объект является представителем класса. Класс описывает общие свойства объектов.
В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанные с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
Вычисление и моделирование
Традиционная модель, описывающая выполнение программы на компьютере, базируется на дуализме — процесс-состояние. С этой точки зрения компьютер является администратором данных, следующим некоторому набору инструкций. В рамках ООП мы никогда не упоминаем адреса ячеек памяти, переменные, присваивания.
Вместо процессора, который перемалывает биты и управляется со структурами данных, мы получаем вселенную благовоспитанных объектов, которые любезно просят друг друга о выполнении тех или иных своих желаний.
При ООП мы считаем, что вычисление есть моделирование.
Конечно, объекты не могут во всех случаях реагировать на сообщение только тем, что вежливо обращаются друг к другу с просьбой выполнить некоторое действие. Это приведёт к бесконечному циклу запросов, аналогично тому, как два джентльмена так и не вошли в дверь, уступая друг другу дорогу. На некоторой стадии объекты должны выполнять некоторые действия перед пересылкой запросов другим объектам.
Добавляется механизмы наследования и полиморфизма. Наследование позволяет различным типам данных совместно использовать один и тот же код, приводя к уменьшению его размера и повышению функциональности. Полиморфизм обеспечивает, чтобы общий код удовлетворял конкретным особенностям отдельных типов данных.
Люди строят дома, машины, самолёты, собирая из отдельных деталей, не изготовляя заново для каждого отдельного случая. Можно ли сконструировать ПО таким же образом?
Многократное использование — это цель, к которой все стремятся, но редко достигают. ООП обеспечивает механизм для отделения существенной информации от специализированной (например, конкретный формат данных).
Резюме
ООП — это не просто набор некоторых свойств, добавленных в уже существующие языки. Это новый шаг в осмыслении задач и разработки ПО.
Программы — это совокупность взаимодействующих объектов. Каждый объект отвечает за конкретную задачу. Вычисление осуществляется посредством взаимодействия объектов. Объект получается в результате инкапсуляции состояния (данных) и поведения (операций), во многом аналогично абстрактному типу данных — АТД. Поведение объекта диктуется классом. Данные и поведение представлены в виде классов, экземпляры которых — объекты. Все экземпляры одного класса будут вести себя одинаковым образом в ответ на одинаковые запросы.
Объект проявляет своё поведение путём вызова метода в ответ на сообщение. Интерпретация сообщения зависит от объекта и может быть различной для различных классов объектов.
Для удобства создания нового типа из уже существующих типов, определённых пользователем, используется механизм наследования. Классы могут быть организованы в виде иерархического дерева наследования.
С помощью уменьшения взаимозависимости ООП позволяет разрабатывать системы, пригодные для многократного использования.
ООП — это взгляд на программирование, сосредоточенный на данных; в котором данные и поведение жёстко связаны. Для этого необходимо, чтобы объекты определялись вместе с сообщениями, на которые они могут реагировать.
Объектно-ориентированная парадигма предлагает новый подход к разработке программного обеспечения. Фундаментальная концепция объектно-ориентированной парадигмы состоит в передаче сообщений объектам.
Таким образом, объектно-ориентированный язык должен обладать свойствами абстракции, инкапсуляции, наследования и полиморфизма.
Инкапсуляция с сокрытием данных — данные объекта скрыты для внешнего наблюдателя; доступ к ним может быть получен только при помощи методов (процедур, описанных в классе).
Абстракция — расширяемость типов — способность добавлять типы, определяемые пользователем для того, чтобы дополнить ими встроенные типы. Один из принципов ООП заключается в том, чтобы типы, определяемые пользователем, должны обладать теми же привилегиями, что и встроенные типы.
Наследование — способность создавать новые типы, повторно используя описание существующих типов.
Полиморфизм с динамическим (поздним) связыванием — способность объектов быть ответственными за интерпретацию вызова функции
Принципы Объектно-ориентированного подхода:
Действие в объектно-ориентированном программировании инициируется посредством передачи сообщений объекту. Сообщение содержит запрос на осуществление действия. В качестве реакции на сообщение получатель запустит некоторый метод, чтобы удовлетворить принятый запрос.
Все объекты являются экземплярами, классов. Все объекты одного класса используют одни и те же методы в ответ на одинаковые сообщения.
Принцип наследования. Классы могут быть организованы в иерархическую структуру с наследованием свойств. Дочерний класс наследует атрибуты родительского класса.
Принцип полиморфизма. Объекты реагируют на одно и тоже сообщение строго специфичным для них образом.
