Основы программирования — второй семестр 08-09; Михалкович С.С.; VI часть — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Новая: == Наследование ==)
 
(Наследование)
Строка 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

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

Введение

Иерархическая классификация животных в биологии

Наследование в программировании возникло как ответ на реальные отношения наследования классов в реальном мире и прикладных задачах.

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

Пример. Главный алгоритм работы операционной системы.

* начальная инициализация
* цикл обработки сообщений
    если сообщение пришло то 
      обработать сообщение 
    до сообщения «Конец»
* заключительные действия

Как видим, этот алгоритм тривиален и ничего не говорит о том, как работает ОС.
————————————

Поскольку главный алгоритм сложной системы не существует или тривиален, то для программирования работы этой сложной системы мы:

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

Примеры взаимозависимостей и взаимодействия.

  1. класс содержит в качестве поля объект другого класса
  2. в методе класса параметром является объект другого класса
  3. метод класса вызывает статический метод другого класса

и т.д.

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

К отношениям между классами относится также то, при котором
один из классов является разновидностью другого.
Пример.

Пример наследования

Эти классы (StudentSeniorStudent) называют:

  • базовыйпроизводный
  • предокпотомок
  • надклассподкласс

Все производные классы наследуют от базового:

  • поля
  • методы
  • свойства

а также могут добавлять новые:

  • поля
  • свойства
  • методы

и переопределять (замещать)

  • некоторые методы базового класса


Каковы цели наследования?

  1. повторное использование кода
  2. обеспечение вариабельности и изменчивости кода

Наследование — это расширение или сужение?
Наследование — это расширение интерфейса класса, но сужение количества объектов (представителей) класса.

Наследование на примере Student - SeniorStudent

<xh4> Базовый класс Student </xh4>