logo
билеты ГОС

2 22 2.Принципы объектно-ориентированного программирования. Наследование и агрегирование как способы создания новых классов.

Основные идеи объектно-ориентированного подхода опираются на следующие положения:

1. Программа представляет собой модель некоторого реального процесса, части реального мира.

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

3. Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.

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

5. Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.

Суть объектно-ориентированного программирования заключается в трех принципах:

наследовании, инкапсуляции и полиморфизме.

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

Инкапсуляция подразумевает наличие границы между внешним интерфейсом класса и деталями его внутренней реализации.

Преимущество для разработчика в том, что он может открыть те члены класса, которые будут оставаться статичными, или неизменяемыми. Инкапсуляция достигается путем назначения каждому члену класса своего модификатора доступа — public, private или protected.

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

Достоинства

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

- старый код может использовать новый код.

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

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

Наследование выполняет в ООП несколько важных функций:

- моделирует концептуальную структуру предметной области;

- экономит описания, позволяя использовать их многократно для задания разных классов;

- обеспечивает пошаговое программирование больших систем путем многократной конкретизации классов.

Java – это объектно-ориентированный язык программирования, поддерживающий простое наследование.

Агрегирование - методика создания нового класса из уже существующих классов. Об агрегировании часто говорят как об "отношении принадлежности" по принципу у "у машины есть корпус, колеса и двигатель".

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

Различия между наследованием и агрегированием:

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

2. Наследование модифицирует класс-предок, непосредственно добавляя, "вливая" в него новые свойства (атрибуты, методы, реализацию методов). Агрегирование никак не затрагивает агрегат, и у последнего могут быть свои собственные методы и атрибуты. В случае агрегирования части не "растворяются" в целом, оставаясь отдельными частями в его составе.