Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Основные средства разработки классов




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

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

Если непосредственный родитель единственный, то наследование называется простым, а, если таких классов несколько - то множественным. При этом класс родитель (или классы родители) и класс потомок образуют иерархию

Рис.6. Иерархия классов при различных видах наследования

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

.

Рис. 7. Вид и параметры окна на экране

Проектируемый класс должен содержать поля для сохранения параметров окна: x1, y1, x2, y2 - координаты верхнего левого и нижнего правого углов и Color – цвет.

Тогда класс будет иметь следующую структуру:

Класс Окно:

поля X1,Y1,X2,Y2, Color

метод Инициализировать(aX1,aY1,aX2,aY2,acolor)

метод Изобразить

Конец описания.

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

Класс Окно_меняющее_цвет – родитель: класс Окно:

метод изменить_цвет(acolor);

Конец описания.

Класс Окно_меняющее_цвет содержит все поля родительского класса и все его методы. Дополнительно объекты типа Окно_меняющее_цвет могут менять цвет окна на указанный в сообщении «Изменить_цвет» (рис. 8).

Рис 8. Иерархия классов Окно и Окно_меняющее_цвет

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

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

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

Простой полиморфизм.

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

Различают несколько терминов, связанных с конкретными механизмами реализации полиморфизма для различных случаев:

1) чистый полиморфизм - используется для обозначения того, что один код функции может по-разному интерпретироваться в зависимости от типа аргументов; используется в языках высокого уровня абстракции, например, в языке Lisp или Smalltalk;

2) перегрузка (полиморфные имена функций) - используется, когда определяется несколько функций с одним именем - одно и то же имя функции может много кратно использоваться в разных местах программы; выбор нужной функции может определяется типами аргументов, областью видимости (внутри модуля, файла, класса и т.д.); если выбор определяется типом аргументов, то перегрузка называется параметрической; например, язык С++ позволяет разработчику выполнять параметрическую перегрузку функций вне классов;

переопределение - используется в ООП при необходимости задания различных реализаций одноименных методов в иерархии классов; различают:

а) простой полиморфизм – конкретный метод определяется типом объекта при компиляции программы (раннее связывание); одноименные методы при использовании простого полиморфизма называются статическими полиморфными;

б) сложный полиморфизм (полиморфные объекты) – конкретный метод определяется типом объекта при выполнении программы (позднее связывание); одноименные методы при использовании сложного полиморфизма называются виртуальными полиморфными;

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

Приведем пример простого полиморфизма (класс Окно_с_текстом)

Пусть необходимо разработать на базе класса Окно класс Окно_с_текстом. Для этого к полям класса Окно необходимо добавить специальные поля для определения координат первой буквы текста - Xt, Yt и поле, содержащее сам текст - Text. Кроме этого, понадобится специальный метод, который будет обрабатывать сообщение «Нарисовать». Однако у нас уже существует родительский метод Изобразить (!), который обрабатывает это сообщение. Следовательно, необходимо заменить родительский метод методом потомка. Механизм полиморфизма позволяет для класса-потомка Окно_с_текстом предусмотреть собственный метод Изобразить (рис. 10).

Рис. 10. Иерархия классов Окно и Окно_с_текстом

Метод Инициализировать также должен быть переопределен, так как он должен инициализировать дополнительные поля класса.

Класс Окно_с_текстом – родитель: класс Окно:

поля Xt, Yt, Text

метод Инициировать(aX1,aY1,aX2,aY2,aColor,aXt, aYt, aText)

метод Изобразить

Конец описания.

 





Поделиться с друзьями:


Дата добавления: 2017-03-18; Мы поможем в написании ваших работ!; просмотров: 624 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Есть только один способ избежать критики: ничего не делайте, ничего не говорите и будьте никем. © Аристотель
==> читать все изречения...

2250 - | 2202 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.014 с.