Введение в объектно-ориентированное программирование

Разделы: Информатика, Конкурс «Презентация к уроку»


Презентация к уроку

Загрузить презентацию (1 МБ)


Цель урока. Познакомить учащихся с базовыми понятиями объектно-ориентированного программирования

Задачи урока.

  • Сформировать общее представление об объектно-ориентированном программировании
  • Рассмотреть основные понятия объектно-ориентированного подхода к программированию: инкапсуляция, наследование, полиморфизм.

Описание урока

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

Объяснение нового материала

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

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

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

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

Как уже говорилось выше, при использовании ООП основными действующими лицами являются не переменные, а объекты. Рассмотрим пример для пояснения этого термина (Слайд 1).

Пусть необходимо написать программу, которая будет рисовать на экране круг какого-либо определенного цвета. Для этого нужно знать радиус, координаты центра, а также цвет, которым он будет закрашен. Если создавать программу стандартным способом, то понадобятся такие переменные .

  • R - радиус круга:
  • X, Y - координаты центра крута;
  • Color - цвет круга.

Для того чтобы нарисовать этот круг на экране, нужна процедура, которую можно назвать Draw. Она будет изображать круг с заданными параметрами R, X. Y, Color.

Недостаток стандартного метода заключается в том, что данные в этом случае не являются взаимосвязанными. Предположим, что нужно нарисовать не один, а три круга (например, снеговика) (Слайд 2). При использовании стандартного метода программирования придется выбирать между двумя способами реализации этого примера. Первый способ (Слайд 3) - завести для каждого круга свой набор параметров R, X, Y, Color, а затем вызывать процедуру Draw с каждым из этих наборов. Недостаток данного способа очевиден: если нужно рисовать много кругов, то понадобится большое количество переменных. Это приведет к тому, что программа станет очень громоздкой.

Второй способ (Слайд 4) заключается в том, чтобы для каждого нового круга задавать в программе свои значения параметров R, X, Y, Color, но при этом значения параметров для предыдущего круга будут теряться. Недостаток способа состоит в потере значений параметров всех кругов, за исключением последнего.

Если в этой программе ограничиться изображением снеговика, то недостаток второго способа не будет иметь значения. Но когда создается значительное по размеру приложение, то программисту желательно представлять себе возможные изменения и дополнения, которые необходимо будет реализовать в будущем. В рассматриваемом примере со снеговиком возможно несколько изменений. (Слайд 5)

Предусмотреть возможность перемещения снеговика - процедура Move и сделать возможным изменение цвета для всех кругов, из которых состоит снеговик - процедура ChangeColor. Задача усложняется, соответственно добавляются новые переменные.

Теперь данный пример рассмотрим с точки зрения ООП (Слайд 6). В этом случае вместо огромного количества переменных будет несколько объектов. Вначале все круги можно представить в виде самостоятельных объектов с одинаковой структурой, которые отличаются друг от друга лишь значениями параметров. Действие процедур Draw, Move и ChangeColor, применительно к каждому их них, также является идентичным. Иначе говоря, в данном случае все круги являются объектами, которые имеют одинаковую структуру (радиус, координаты центра, цвет) и ведут себя схожим образом при выполнении любого действия (рисование, перемещение, изменение цвета), т.е. все они принадлежат одному и тому же семейству. Далее приведенные рассуждения будут рассмотрены в терминах ООП.

С точки зрения ООП все "действующие лица" программы представляют собой объекты, каждый из которых является элементом (экземпляром) какого-либо класса. Параметры объекта (радиус, цвет и т. п.) называются его свойствами, а процедуры или функции, которые он выполняет в ответ на какой-либо запрос (поменять цвет, переместиться и т. п.), называются методами. При этом метод, который должен вызываться в ответ на запрос, определяется классом, экземпляром которого является данный объект. И наоборот, если объекты принадлежат одному и тому же классу, то они должны вызывать одинаковые методы в ответ на один и тот же запрос (Слайд 7).

Итак,

Объект - структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии.

Класс - описание множества объектов и выполняемых над ними действий.

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

Вернемся к рассматриваемому примеру с рисованием снеговиков (Слайд 8). Пусть необходимо нарисовать снеговика с глазами, которые должны время от времени мигать. Все остальные свойства и методы у объектов-глаз должны быть такими же, как и у объектов-кругов, принадлежащих классу Round. Иначе говоря, глаза снеговика тоже нужно перемещать вместе с остальными кругами, а также должна оставаться возможность изменения их цвета. Для реализации этого дополнения можно создать еще один класс - Eyes (глаза), в котором будут те же свойства и методы, что и в Round, но еще будет добавлен метод Blink (мигание). Однако при этом придется для класса Eyes заново создавать все свойства и методы, которые уже были описаны для Round.

Чтобы не выполнять подобную двойную работу, в ООП существует механизм наследования. Этот механизм реализуется путем создания иерархической структуры классов. Вначале создается класс Round, для которого описываются все свойства и методы. Он располагается в основании иерархической структуры. Затем создается еще один класс под названием Eyes, в котором описывается новый метод Blink, а все остальные свойства и методы остаются без изменений, т.е. класс Eyes наследует все свойства и методы Round и. в то же время, включает в себя дополнительный метод Blink. В иерархической структуре Eyes следует за классом Round, и в этом случае говорят, что Round является предком (родительским классом) для Eyes. В свою очередь. Eyes является потомком (или дочерним классом) для Round.

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

Таким образом, применение наследования в ООП ведет к значительному уменьшению объема программы и повышению ее функциональности.

Следующее основное понятие - полиморфизм (Слайд 9). Термин полиморфизм своим происхождением обязан двум греческим словам: poly (много) и morphos (форма). Таким образом "полиморфизм" переводится как "множество форм".

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

Для реализации приведенных требований следует создать класс Rect (rectangle - прямоугольник), являющийся потомком Round, и применительно к нему X и Y - это координаты выбранной вершины прямоугольника, a R - его длина (или ширина). Но в этом случае придется описать еще одно свойство для обозначения ширины (или длины) Очевидно, что при работе с подобными классами легко может возникнуть путаница в использовании свойств, и причина этого - узкая направленность класса Round, который ориентирован на работу только с определенной геометрической фигурой.

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

  • Тор - координата верхний границы фигуры;
  • Left - координата левой границы фигуры;
  • Height - высота фигуры;
  • Width - ширина фигуры.

По этим свойствам легко можно определить недостающие координаты для любой фигуры (Слайд 11).

Теперь на основе предка Round с описанным выше новым набором свойств можно создать потомка Rect для изображения прямоугольников. Однако методика рисования в этом случае должна отличаться от той, которая использовалась при работе с кругами. Т.е. необходимо, чтобы для Rect содержимое унаследованного метода Draw отличалось от родительского, в противном случае, если вызывать Draw для объекта, принадлежащего классу Rect, то на экране все равно будет нарисован круг, а не прямоугольник (Слайд 12).

Чтобы этого избежать, необходимо для Rect описать свой метод Draw. Тогда для объекта, принадлежащего классу Round, вызов Draw будет означать изображение на экране круга, а для объекта из Rect - прямоугольника. Т.е. методы с одним и тем же именем Draw отвечают за разные действия в зависимости от того, объекту какого класса необходимо выполнить рисование. Подобная ситуация в ООП носит название полиморфизма. Полиморфизм (polymorphism, дословно - "многообразие форм") - свойство классов решать схожие задачи различными способами или, иначе говоря, возможность использовать одно имя для нескольких методов, имеющих сходное назначение.

Тест

1. Базовым понятием объектно-ориентированного программирования является

  1. метод
  2. поле
  3. ориентация
  4. объект

2. Объектно-ориентированное программирование - это :

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

3. Каждый объект является экземпляром определенного класса

  1. да
  2. нет

4. Класс может использоваться для создания

  1. одного экземпляра
  2. двух экземпляров
  3. пяти экземпляров
  4. более пяти экземпляров

5. Инкапсуляция - это :

  1. контролируемое сокрытие информации о внутренней структуре класса
  2. заключение объекта в оболочку (капсулу)
  3. свойство объекта

6. Класс - это :

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

7. Методы - это ...

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

8. Наследование - это :

  1. преемственность программ, создание программ с использованием стандартных подпрограмм
  2. порождение класса от другого класса с наследованием полей, методов и свойств своего родителя
  3. модернизация программы для новой операционной системы с сохранением возможностей и свойств

9. Полиморфизм - это :

  1. возможность объектов принимать различные формы
  2. многообразие программ
  3. свойство классов решать схожие задачи различными способами

Литература

  1. Глушкова С.В., Мельников В.В., Сурядный А.С. Программирование в среде Windows: Учебный курс / Харьков: Фолио; М.: ООО "Издательство АСТ", 2001. - 487 с.