misle.ru страница 1
скачать файл
Лабораторная работа №3.

Изучение принципа полиморфизма.


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

В ОО – языках программирования полиморфизм является естественным следствием следующих их свойств:



  • Отношения «быть экземпляром»;

  • Механизма пересылки сообщений;

  • Наследования;

  • Принципа подстановки.

Одно из важнейших достоинств ОО – подхода состоит в возможности комбинирования этих свойств.


Полиморфные функции.

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

Другая форма полиморфизма называется перегрузкой и заключается в наличии множества различных функций, т. е., кодов, с одним и тем же именем. Между этими полюсами находятся переопределяемые и отложенные методы.
Полиморфные переменные.

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

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

Построение связного списка объектов требует, чтобы каждый объект содержал указатель на следующий объект, присутствующий в списке. Непосредственное включение указателя в объявление класса не является самым удачным решением, поскольку требует перекомпиляции исходного кода, что противоречит принципам объектно-ориентированного программирования. Решение, которое не требует внесения изменений в уже существующие классы, заключается в создании нового класса, не зависящего от уже существующих. Такой класс может представлять собой, например, связный список структур, каждая из которых состоит всего из двух полей: указателя на следующий элемент списка и указателя на некоторый объект. Здесь необходимо обязательно учитывать принцип подстановки, в соответствии с которым указатель должен указывать на некоторый базовый объект, класс которого имеет дочерние классы. Очевидно, что такой указатель представляет собой пример полиморфной переменной. Классы – списки такого сорта принято называть контейнерами, или контейнерными классами. Все современные объектно-ориентированные системы программирования включают в себя различные контейнерные классы, например, ListBox. Структура контейнерного класса в виде связного списка, включающего в себя два объекта, представлена на рис.1




Рис. 1 Пример структуры контейнерного класса.


Содержание работы. В процессе выполнения данной работы необходимо разработать контейнерный класс, в который можно включать произвольное количество объектов, принадлежащих классам из предыдущего задания. Этот контейнерный класс должен включать в себя структуру данных, состоящую из указателя на следующий элемент списка и указателя на объект базового класса «позиция точки на экране», а также следующие методы:

  • Конструктор;

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

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

  • Деструктор, уничтожающий объект – контейнер, т. е., собственно список и все объекты, на которые он указывает.

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

Содержание отчета: Отчет должен содержать структуры разработанных классов, листинги приложений в части их реализации с комментариями и краткие выводы по проделанной работе.
скачать файл


Смотрите также: