Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ооп экзамент.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
235.52 Кб
Скачать
  1. Концепции ооп. Наследование

В последнее время принято считать, что объектно-ориентированный подход базируется на трех китах: инкапсуляции, наследовании и полиморфизме

Наследование свойств. Наследование есть свойство классов порождать своих потомков и наследовать свойства (атрибуты и операции) своих родителей. Класс-потомок автоматически наследует от родителя все атрибуты и операции, а также может вводить новые атрибуты и операции и даже заменять (переопределять) операции родительского класса. Наследование в ООП позволяет адекватно отражать родственные отношения между объектами предметной области. Если класс В обладает всеми свойствами класса А и еще имеет дополнительные свойства, то класс А называется базовым (предком, родительским классом), а класс В – подклассом (наследником, производным классом) класса А. Процесс построения иерархии классов очень напоминает процесс построения генеалогических деревьев в реальном мире. Наследование свойств только одного базового класса называется одиночным (простым) наследованием, а параллельное наследование свойств сразу нескольких базовых классов называется множественным (кратным) наследованием. В С++ возможны оба варианта наследования классов, а в Java и C# – только одиночное наследование, для реализации множественного наследования там применяется другой механизм. Механизм наследования упрощает процесс построения иерархии классов, что сокращает затраты на написание новых классов на основе существующих и обеспечивает исключительную гибкость системы классов. Программист обычно определяет базовый класс, обладающий наиболее общими свойствами, а затем создает последовательность потомков, которые обладают своими специфическими свойствами. В результате получается иерархия наследования свойств классов. Базовые классы, или корни подобных деревьев, часто обладают такими абстрактными свойствами, что сами в программах не используются (например, класс фигура), они необходимы лишь для порождения требуемых классов. Правильный выбор корня обеспечивает удобство «выращивания дерева», т.е. простоту построения библиотеки классов. Применение правила ООП «наследуй и изменяй свойства классов» хорошо согласуется с поэтапным подходом к разработке и созданию больших программных систем. Пример иерархии классов: фигура -> точка -> круг ->цилиндр.

  1. Концепции ооп. Полиморфизм

В последнее время принято считать, что объектно-ориентированный подход базируется на трех китах: инкапсуляции, наследовании и полиморфизме

Полиморфизм поведенческих свойств объектов. Свойство какого-либо имени программы одновременно обозначать различные сущности называется полиморфизмом этого имени. В буквальном переводе с греческого это слово означает "много форм". Понятие полиморфизма в языках программирования является одним из основополагающих, и совсем необязательно связывать его только с именами. Правомерно говорить о полиморфных знаках операций — встроенных и/или определяемых. К примеру, в операции "a + b" в зависимости от типов a и b знак операции «+» может обозначать операцию сложения целых, сложения вещественных, объединения множеств или сцепления строк (при желании можно считать, что их имя — знак "+"). Полиморфизм проявляется и в связи с локализацией имен: одно и то же имя из разных контекстов обозначает разные сущности, а неоднозначность понимания имени ликвидируется языковыми правилами соотнесения имени с контекстом ( в различных языках возможны различные правила). Полиморфны элементы интерфейса программ – как технические ( к примеру, клавиша мыши в зависимости от позиционирования ее курсора имеет разный смысл), так и программируемые (в частности, одинаковые световые кнопки на разных панелях обозначают различные действия). Если в определении полиморфизма отказаться от одновременности, то можно считать полиморфным понятие переменной, поскольку в разные моменты выполнения программы она содержит (обозначает) различные значения. Пользуясь понятием полиморфизма, всегда нужно четко представлять механизмы благодаря которым разрешается неоднозначность связывания имени или иного обозначения с обозначаемыми сущностями. Полиморфизм переменной разрешается временем обращения к ней, полиморфизм знака операции или имени процедуры — типами параметров, контекстный полиморфизм имен при локализации — правилами экранирования имен. Объектно-ориентированные языки наряду с традиционными видами полиморфизма предлагают принципиально новые возможности такого рода. В них полиморфизм часто также определяют как способность объектов-родственников по разному осуществлять однотипные действия, т.е. однотипные действия у множества классов, связанных отношением иерархии, имеют разные формы проявления. Например, метод «нарисовать на экране» должен реализовываться по-разному для классов «точка», «круг» и «цилиндр». В ООП действия или поведение объекта определяются набором методов. Изменяя алгоритм метода в потомках класса, программист придает наследникам специфические поведенческие свойства. С понятием полиморфизма тесно связана проблема времени связывания имени операции с ее телом. Если можно определить на этапе компиляции программы, какая операция с данным именем вызывается в данной точке программы, то имеет место раннее, или статическое, связывание. Если же можно сопоставить имени операции конкретную операцию только на этапе выполнения программы, то имеет место позднее, или динамическое, связывание. Например, если мы имеем массив фигур и в цикле по этому массиву вызываем метод «нарисовать на экране», то только в процессе выполнения программы может быть установлено, какая именно фигура является данным элементом массива и, следовательно, какой метод ее рисования должен быть применен. Позднее связывание имен операций с их телами является одним из существенных свойств ООП.