К.т.н.Ахметжанова
Ш.Е., Тулебаева М.А.
Таразский
государственный университет имени М.Х.Дулати, СШ №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.