Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Философия ООП.docx
Скачиваний:
53
Добавлен:
10.04.2015
Размер:
107.89 Кб
Скачать

Иерархия объектов с наследованием свойств и поведения – второй принцип ооп

Мы можем рассматривать почту как некоторое средство связи. Объединим в средства связи все, что позволяет связываться. Эта операция является вторым принципом ООП:

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

Рисунок 1 – Весь мир - это объекты, которые передают друг другу сообщения

О почте Вы знаете, больше, чем то, что нужно, чтобы сделать запрос. Вы знаете, что у Вас попросят деньги, что Вам выдадут квитанцию. Все это справедливо и для магазинов, ресторанов. Поскольку категория Post более узкая, чем Service, то любое знание, которым Вы обладаете для категории Service будет справедливо и для Post.

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

Классы могут быть организованы в иерархическую структуру с наследованием свойств. Дочерний класс (или подкласс) наследует атрибуты родительского класса (или надкласса), расположенного выше в иерархическом дереве.

Рисунок 2 – Иерархическое дерево

Утконос представляет проблему для структуры на рисунке 2. Утконос млекопитающее, но откладывает яйца, следовательно, необходимо переопределить способ рождения. Таким образом, необходимо разрешать переопределять информацию, наследуемую из родительских классов. Для поиска метода, подходящего для обработки сообщения, используется следующее правило:

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

Наследуемое поведение объекта может быть изменено – третий принцип ооп

Тот факт, что Ваш друг студент и оператор почты будет реагировать по разному на просьбу поздравить родственников, является признаком полиморфизма.

Борьба со сложностью

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

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

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

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

  1. Экспортировать определение типа данных.

  2. Делать доступным набор операций, использующихся для манипулирования экземплярами типа данных.

  3. Защищать данные, связанные с типом данных, чтобы с ними можно было работать только через указанные подпрограммы.

  4. Создавать несколько экземпляров абстрактного типа данных.

Объекты - это почти абстрактный тип данных, но дополненный некоторыми новшествами.

ООП добавляет идеи к абстрактному типу данных. Главная из них – пересылка сообщений. Действие инициируется по запросу, обращенному к конкретному объекту, а не через вызов функции. К пересылке сообщения добавляется переопределение имен и совместного/многократного использования кода. Интерпретация сообщений меняется для различных объектов. Добавляется механизмы наследования и полиморфизма. Наследование позволяет различным типам данных совместно использовать один и тот же код, приводя к уменьшению его размера и повышению функциональности. Полиморфизм обеспечивает, чтобы общий код удовлетворял конкретным особенностям отдельных типов данных. Люди строят дома, машины, самолеты, собирая из отдельных деталей, не изготовляя заново для каждого отдельного случая.

Можно ли сконструировать ПО таким же образом?

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