Основы программирования — второй семестр 08-09; Михалкович С.С.; VI часть — различия между версиями
Juliet (обсуждение | вклад) (Новая: == Наследование ==) |
Juliet (обсуждение | вклад) (→Наследование) |
||
Строка 1: | Строка 1: | ||
== Наследование == | == Наследование == | ||
+ | === Введение === | ||
+ | [[Изображение:Animals.png | 400px | Иерархическая классификация животных в биологии]] | ||
+ | |||
+ | '''Наследование''' в ''программировании'' возникло как ответ на реальные отношения наследования классов в реальном мире и прикладных задачах. | ||
+ | |||
+ | <span style="color: Grey">————————————</span> <br /> | ||
+ | Ввиду увеличения сложности задач в программировании, акцент переместился от ''алгоритмов'' к '''''объектам''''', содержащим алгоритмы в качестве методов. <br /> | ||
+ | При этом, понятие ''главного алгоритма'' также потеряло свою важность. В больших проектах нет главного алгоритма или он тривиален, но есть ''большое число взаимосвязанных задач''. | ||
+ | |||
+ | ''<u>Пример</u>.'' Главный алгоритм работы операционной системы. | ||
+ | * начальная инициализация | ||
+ | * цикл обработки сообщений | ||
+ | если сообщение пришло то | ||
+ | обработать сообщение | ||
+ | до сообщения «Конец» | ||
+ | * заключительные действия | ||
+ | Как видим, этот алгоритм тривиален и ничего не говорит о том, как работает ОС. <br /> | ||
+ | <span style="color: Grey">————————————</span> | ||
+ | |||
+ | Поскольку главный алгоритм сложной системы не существует или тривиален, то для программирования работы этой сложной системы мы: | ||
+ | * выявляем классы объектов, присутствующих в этой системе | ||
+ | * их свойства и методы | ||
+ | * выявляем '''''то общее, что есть в различных классах''''' | ||
+ | * выявляем различные взаимозависимости между классами и взаимодействие между объектами этих классов | ||
+ | |||
+ | ''<u>Примеры взаимозависимостей и взаимодействия</u>.'' | ||
+ | # класс содержит в качестве поля объект другого класса | ||
+ | # в методе класса параметром является объект другого класса | ||
+ | # метод класса вызывает статический метод другого класса | ||
+ | и т.д. | ||
+ | |||
+ | '''Замечание.''' <br /> | ||
+ | Взаимодействие ''классов'' устанавливается на этапе ''написания'' текста программы, <br /> | ||
+ | а взаимодействие конкретных ''объектов'' устанавливается на этапе ''выполнения'' программы | ||
+ | |||
+ | К отношениям между классами относится также то, при котором <br /> | ||
+ | '''''один из классов является разновидностью другого'''''. <br /> | ||
+ | ''<u>Пример</u>. | ||
+ | |||
+ | [[Изображение:Student senior.png | 90px | Пример наследования]] | ||
+ | |||
+ | Эти классы (<tt>Student</tt> — <tt>SeniorStudent</tt>) называют: | ||
+ | * '''базовый''' — '''производный''' | ||
+ | * '''предок''' — '''потомок''' | ||
+ | * '''надкласс''' — '''подкласс''' | ||
+ | |||
+ | Все производные классы ''наследуют'' от базового: | ||
+ | * поля | ||
+ | * методы | ||
+ | * свойства | ||
+ | а также могут ''добавлять новые'': | ||
+ | * поля | ||
+ | * свойства | ||
+ | * методы | ||
+ | и ''переопределять'' (''замещать'') | ||
+ | * некоторые методы базового класса | ||
+ | |||
+ | |||
+ | Каковы '''цели наследования'''? | ||
+ | # ''повторное'' использование кода | ||
+ | # обеспечение ''вариабельности'' и ''изменчивости'' кода | ||
+ | |||
+ | Наследование — это расширение или сужение? <br /> | ||
+ | '''Наследование''' — это расширение интерфейса класса, но сужение количества объектов (представителей) класса. | ||
+ | |||
+ | === Наследование на примере Student - SeniorStudent === | ||
+ | <xh4> Базовый класс Student </xh4> |
Версия 08:52, 2 мая 2009
Наследование
Введение
Наследование в программировании возникло как ответ на реальные отношения наследования классов в реальном мире и прикладных задачах.
————————————
Ввиду увеличения сложности задач в программировании, акцент переместился от алгоритмов к объектам, содержащим алгоритмы в качестве методов.
При этом, понятие главного алгоритма также потеряло свою важность. В больших проектах нет главного алгоритма или он тривиален, но есть большое число взаимосвязанных задач.
Пример. Главный алгоритм работы операционной системы.
* начальная инициализация * цикл обработки сообщений если сообщение пришло то обработать сообщение до сообщения «Конец» * заключительные действия
Как видим, этот алгоритм тривиален и ничего не говорит о том, как работает ОС.
————————————
Поскольку главный алгоритм сложной системы не существует или тривиален, то для программирования работы этой сложной системы мы:
- выявляем классы объектов, присутствующих в этой системе
- их свойства и методы
- выявляем то общее, что есть в различных классах
- выявляем различные взаимозависимости между классами и взаимодействие между объектами этих классов
Примеры взаимозависимостей и взаимодействия.
- класс содержит в качестве поля объект другого класса
- в методе класса параметром является объект другого класса
- метод класса вызывает статический метод другого класса
и т.д.
Замечание.
Взаимодействие классов устанавливается на этапе написания текста программы,
а взаимодействие конкретных объектов устанавливается на этапе выполнения программы
К отношениям между классами относится также то, при котором
один из классов является разновидностью другого.
Пример.
Эти классы (Student — SeniorStudent) называют:
- базовый — производный
- предок — потомок
- надкласс — подкласс
Все производные классы наследуют от базового:
- поля
- методы
- свойства
а также могут добавлять новые:
- поля
- свойства
- методы
и переопределять (замещать)
- некоторые методы базового класса
Каковы цели наследования?
- повторное использование кода
- обеспечение вариабельности и изменчивости кода
Наследование — это расширение или сужение?
Наследование — это расширение интерфейса класса, но сужение количества объектов (представителей) класса.
Наследование на примере Student - SeniorStudent
<xh4> Базовый класс Student </xh4>