Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_IGME.doc
Скачиваний:
9
Добавлен:
01.05.2025
Размер:
3.64 Mб
Скачать

3. Наследовние

Наследование (inheritance) - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов (hierarchical classification). Применение иерархии классов делает управляемыми большие потоки информации. Например, подумайте об описании жилого дома. Дом - это часть общего класса, называемого строением. С другой стороны, строение - это часть более общего класса - конструкции, который является частью ещё более общего класса объектов, который можно назвать созданием рук человека. В каждом случае порождённый класс наследует все, связанные с родителем, качества и добавляет к ним свои собственные определяющие характеристики. Без использования иерархии классов, для каждого объекта пришлось бы задать все характеристики, которые бы исчерпывающи его определяли. Однако при использовании наследования можно описать объект путём определения того общего класса (или классов), к которому он относится, с теми специальными чертами, которые делают объект уникальным. Наследование играет очень важную роль в OOP.

Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.

Устойчивость и управляемость системы обеспечивается за счёт чёткого разделения ответственности объектов (за каждое действие отвечает определённый объект), однозначного определения интерфейсов межобъектного взаимодействия и полной изолированности внутренней структуры объекта от внешней среды (инкапсуляции).

  1. Объекты, определение, типы абстракций, используемые при построении объекта, категории объектов, интерфейс объекта.

Объект - это структура, содержащая данные и процедуры для их обработки.

Объект состоит из трёх частей:

  • имя объекта

  • состояние объекта – перечень всех свойств данного объекта

  • методы (операции)

Свойства объекта - атрибуты объекта (характеристики объекта), отражающие его поведение.

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

Объекты моделируют свойства и поведение компонентов мира, в котором мы живем. Они являются и конечной абстракцией данных. Объекты связывают в единое целое свои свойства и поведение и обладают спецификой целого. Яблоко может быть разломлено, но после этого оно перестает быть яблоком. Отношения частей к целому и к другим частям более ясны, когда все связано вместе в одной оболочке. Это называется инкапсуляцией и представляет собой очень важное явление. Объекты - части мира, они же и конечные абстракции в ООП. Объектно-ориентированный подход предлагает описывать реальность в виде взаимодействия объектов (например, «клиент Иванов», «банкомат Агробанка», «счет № 1111», « корабль Геркулес», «автомобиль Петрова»).  Хотя из приведенных примеров интуитивно ясно, что такое объект, дать его четкое и приемлемое для всех определение достаточно сложно. Например, Гради Буч дает такое определение: «объект – это что-то, с чем можно оперировать. У объекта есть состояние, поведение и возможность отличить его от других объектов». Якобсон пишет: « Объект – это сущность, способная сохранять свое состояние (информацию) и обеспечивающая набор операций для проверки и изменения этого состояния». 

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

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

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

Интерфейсы позволяют наладить множественное наследование объектов и в то же время избавиться от ромбовидного наследования.

  • Методы интерфейса. В описании интерфейса определяются имена и сигнатуры входящих в него методов, то есть процедур или функций класса.

Использование интерфейсов возможно двумя способами:

  • Класс может реализовывать интерфейс. Реализация интерфейса заключается в том, что в описании класса данный интерфейс указывается как реализуемый, а в коде класса обязательно определяются все методы, которые описаны в интерфейсе, в полном соответствии с сигнатурами из описания этого интерфейса. То есть, если класс реализует интерфейс, для любого экземпляра этого класса существуют и могут быть вызваны все описанные в интерфейсе методы. Один класс может реализовать несколько интерфейсов одновременно.

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

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

Можно заметить, что интерфейс, с точки зрения реализации, — это просто чистый абстрактный класс, то есть класс, в котором не определено ничего, кроме абстрактных методов. Если язык программирования поддерживает множественное наследование и абстрактные методы (как, например, C++), то необходимости во введении в синтаксис языка отдельного понятия «интерфейс» не возникает. Данные сущности описываются с помощью абстрактных классов и наследуются классами для реализации абстрактных методов.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]