К.т.н.Ахметжанова Ш.Е., Тулебаева М.А.

Таразский государственный университет имени М.Х.Дулати, СШ №3 имени Н.К.Крупской, Казахстан, Тараз

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

 

Объектно-ориентированное программирование стало доминирующим стилем программирования как в индустрии программного обеспечения, так и в образовании за последние несколько  десятилетий. Большинство средних и университетских курсов по программированию перешли от Pascal или C к объектно-ориентированным языкам, таким как C++, Java и C#. Основные причины этой тенденции связаны с такими преимуществами объектно-ориентированного программирования, как: абстракция, наследование, полиморфизм и инкапсуляция.

Однако переход от старого императивного процедурного стиля программирования к объектно-ориентированному стилю все еще остается сложной задачей. Потому что объектная ориентация требует смены парадигмы как для педагогов так и, в большинстве случаев, для студентов. Известно, что обучение объектно-ориентированному программированию сложнее после опыта  процедурного программирования. Согласно наблюдениям, для среднего студента требуется определенный срок, чтобы переключиться с процедурного на объектно-ориентированный подход [1]. Традиционные языки императивного программирования в основном основаны на архитектуре фон Неймана. Их изучение строится на последовательности, выборе и итерации. В результате, обучение популярным языкам, таким как Pascal и C, основывается на  разработке и реализации общих алгоритмов и структур данных, где основное внимание уделяется обучению студентов программированию с помощью алгоритмических методов. Эта образовательная модель требует, в основном, обучения синтаксису и базовым управляющим структурам языка.

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

Рассмотрим наиболее важные вопросы в этом контексте:

• Какой объектно-ориентированный язык следует использовать?

• Каким должен быть порядок обучения объектно-ориентированным концепциям?

• Какая должна быть учебная среда?

• Когда и насколько глубоко должны быть включены элементы моделирования и объектно-ориентированного проектирования?

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

Объектно-ориентированное программирование требует некоторой проектной работы до начала реального кодирования. Потому что обнаружение объектов и принятие решения о распределении задач между ними не является заданием программирования. Работа на этом этапе должна быть сосредоточена на поиске ответов на вопросы, такие как:

• Что будет делать программа, когда она будет завершена?

• Какие классы и объекты понадобятся?

• Каково будет назначение классов и объектов?

• Каким будет информационное содержание и функциональные возможности каждого объекта?

• Как объекты будут выполнять свои функции?

• Как будут взаимодействовать объекты?

Хорошо зарекомендовавшим себя подходом в этом отношении является «Объекты сначала с шаблонами проектирования» [3]. Основными составляющими  этого подхода являются идентификация объектов, моделирование объектов и дизайн объектов. Дальнейшее кодирование должно основываться на реализации этого этапа. Объектно-ориентированное моделирование и дизайн могут быть реализованы  с помощью простых интегрированных графических средств. Подмножество унифицированного языка моделирования (UML) или простые графические нотации могут оказать существенную  помощь. Использование моделирования и дизайна с самого начала обучения и кодирование на основе проектов в настоящее время являются предпочтительными в обучении объектно-ориентированному программированию [4].

Объектно-ориентированное программирование - это не только стиль программирования, но и методология, которая позволяет из общих понятий вырабатывать  специальные и из специальных о вырабатывать общие понятия. В данной работе  обсуждается методика, используемая для обучения курсу «Технологии программирования», предполагаемого в 3 семестре специальности "Информационные системы". Курс направлен на обучение студентов программированию на языке С++. Цели курса перечислены ниже:

1. Четко формулировать принципы и преимущества объектно-ориентированного подхода при решении задач с помощью программирования на С ++.

2. Писать программы на C ++, используя базовые конструкции программирования и структуры данных.

3. Применять концепции класса, метода, конструктора, экземпляра, абстракции данных, абстракции функций для реализации функций инкапсуляции в программах на C++.

4. Писать модульные, безопасные и многоразовые коды на C++, чтобы демонстрировать особенности наследования, полиморфизма и общего программирования.

Методика обучения

Класс является основой программирования на C ++. Поэтому процесс обучения должен начинаться с изучения реальных примеров из жизни для формирования понятия класса, чтобы формировать  объектно-ориентированное мышление у студентов [4].

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

Кодирование в объектно-ориентированном программировании основано, как было сказано выше, на  объектах. При взаимодействии объектов друг с другом происходит событие. Предположим, мы хотим создать  программу, в которой человек садится в машину и едет из пункта А в пункт Б. Для этого необходимо начать с описания объектов, таких как человек и автомобиль,  а затем   включить следующие методы: человек умеет управлять автомобилем  и автомобиль может двигаться под управлением человека. Таким образом, имея класс объектов и методов можно осуществить движение машины под управлением человека.

Введение конструктора и деструктора

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

Абстракция и инкапсуляция

Для объяснения понятий абстракции и инкапсуляции допустим, что для функционирования машины необходимо топливо, которое приводит в действие двигатель. В этом случае метод(функция) старта машины имеет два свойства: топливо и мотор. Топливо может использоваться любыми машинами, поэтому это свойство относится к свойству "public", а двигатель - к свойству "private", потому что конструкция двигателя  является собственностью компании-производителя автомашины.

Инкапсуляция помогает ограничить  доступ  пользователя к  методу. Класс автомобиля имеет некоторые из его собственных методов(функций), таких как запуск двигателя, остановка двигателя, ускорение, изменение положения редуктора и т. д. Это функции, к которым пользователь может получить доступ, т.е. эти функции определены  как "public". Также автомобиль может иметь функции определения уровня топлива и состояния положения коробки передач для запуска двигателя и т.д., которые обрабатываются внутренними механизмами автомобиля, поэтому они были установлены как частные - "private". Следовательно,  пользователю автомашины не обязательно знать принципы   функционирования двигателя, т.е. эта часть машины должна быть скрыты  от водителей, можно сказать: процесс запуска автомобиля «инкапсулирован». Точно так же, колесо автомобиля и его движение инкапсулируются, поскольку процесс вращения колеса скрыт.

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

Предположим, что компания владеет моделью автомобиля C1, а через несколько лет выпущена новая версия C2. Этот новый класс автомобилей «наследует» большинство характеристик старого, «расширяет» старый,  решая некоторые проблемы, существующие в более ранних версиях. Важно отметить, что класс старых C1 наследует характеристики от более универсального класса с именем "Машина". Это понятие получило название «множественного наследования».

Полиморфизм

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

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

 

Литература:

1. Stroustrup, B. The Design and Evolution of C++. Addison-Wesley, 1994.

2. Kölling, M. The problem of teaching Object-Oriented Programming, Part 1: Languages. Journal of Object-Oriented Programming, 1(8), 1999.

3. Docks, van D., Steegmans, E. A new pedagogy for Programming. Sixth Workshop on Pedagogies and Tools for Learning Object Oriented Concepts, ECOOP, Malaga Spain,  2002.

4. Ventura, P.R., et. Al. : Teaching OOD and OOP through Java and UML in CS1 and CS2.OOPSLA,Umea,Sweden, 2001.