Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 248

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 242 243 244 245 246 247 < 248 > 249 250 251 252 253 254 .. 341 >> Следующая


l1nkl1st<employee> lemp; //"linklist<employee>"

employee emptemp: //временное хранилище объектов

char ans; //ответ пользователя Cy' или 'п')

do

{

сіп » emptemp; //получить данные от пользователя

lemp.additem(emptemp): //добавить в emptemp cout « 'ЛпПродолжать (у/п)? ": ein » ans:

} whiletans !- 'п'): //при окончании ввода lemp. dl splay О: //вывести весь связный список

cout « endl:

return 0; }

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

Введите фамилию: Рожанский Введите номер :1233 Продолжать (у/п)? у Введите фамилию: Штофф Введите номер :2344 Продолжать (у/п)? у Введите фамилию: Ершова Введите номер :3455

Продолжать (у/п)? п • " ,¦ ¦ •

Имя: Ершова Номер: 3455 Имя: Штофф Номер: 2344 Имя: Рожанский Номер: 1233 658

Глава 14. Шаблоны и исключения

Обращаем ваше внимание на то, что класс linklist не нужно никак модифицировать, чтобы он хранил объекты пользовательского типа (employee). Вот в этом — вся прелесть шаблонных классов: они работают не только с базовыми типами, но и с типами, определенными пользователями!

Что можно хранить?

Мы уже выяснили, как определить, переменные какого типа могут храниться в шаблонном классе. Для этого нужно понять, какие операции выполняются в его методах. Вот, например, можно ли хранить в связном списке (класс linklist) строки (класс string)? Методы класса используют операторы вставки («) и извлечения (»), которые в отличных взаимоотношениях со строками, так что никаких препон для хранения строк не намечается. Но если в методах есть операции, несовместимые с каким-то типом, тогда значения этого типа хранить в данном классе нельзя.

UML и шаблоны

Шаблоны (или параметризованные классы) представляются на диаграммах классов UML в виде некоторых вариаций на тему символов классов. Имена аргументов шаблонов помещены в пунктирный прямоугольник, располагающийся рядом с верхним правым углом символа класса.

На рис. 14.3 показана диаграмма классов для программы TEMPSTAK (см. раздел «Шаблоны классов» данной главы).

і-----------1

_] Тип !

Стек '""T.......1

push(Туре) pop: Туре

k 1 V
L <<bind»(long) 52


«blnd»(float) S1


Рис. 14.3. Шаблон на диаграмме классов UML

У шаблона в этой программе только один аргумент — Туре. Операции push() и рор() представлены своими типами возвращаемых значений (помните, что тип возвращаемого значения показывается после имени функции и отделяется от него двоеточием). Шаблонный аргумент обычно показывается прямо в обозначении операции, так Туре показан на рисунке рядом с push() и рор(). Исключения flMt

Диаграмма также показывает классы, реализуемые по шаблону: si, s2. Кроме шаблонов, на рис. 14.3 показаны две новые концепции UML: зависимости и стереотипы.

Зависимости в UML

Зависимостью в UML называется отношение между двумя элементами, такое, что изменения в независимом элементе могут привести к изменениям в зависимом. Зависимый элемент, как следует из его названия, зависит от независимого, то есть использует его. Поэтому такие отношения иногда называются отношениями использования. В приведенном выше примере шаблонный класс является независимым элементом, а реализуемые классы — зависимыми.

Зависимость изображается на диаграмме пунктирной линией со стрелкой, направленной на независимый элемент. На рис. 14.3 реализованные по шаблону классы si и s2 являются зависимыми от шаблонного класса Stack, потому что изменения в последнем приводят или, по крайней мере, могут привести к изменениям в первых.

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

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

Стереотипы в UML

Стереотип — это способ сообщить дополнительные детали об элементе UML. Он представляется на диаграмме словом в двойных угловых скобках.

Например, пунктирная линия на рис. 14.3 представляет собой зависимость, но ничего не говорит о том, какого она рода-племени. Стереотип «bind» сообщает нам о том, что независимый элемент (шаблонный класс) реализует зависимый элемент (si, например), используя указанные параметры, которые написаны в скобках после стереотипа. То есть в данном случае указывается, что Туре будет заменен на float.

UML определяет множество разных стереотипов как элементы языка. Каждый из них применяется к своему элементу: классу, зависимостям и т. д. Можно добавить и что-нибудь свое.

Исключения
Предыдущая << 1 .. 242 243 244 245 246 247 < 248 > 249 250 251 252 253 254 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100