IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Агрегирование, что такое?
Vardes
сообщение 23.11.2006 19:32
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Ну вот,возьму ка я на себя ответственность и открою 701-ую тему в данной тематике.Этот топик хотелось бы посвятить такой терминалогии как Агрегирование.Узнать для чего это надо и с чем это едят,т.к. в учебниках я не нашёл чёткого описания,а в инете мало,что говорится об этом wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 24.11.2006 23:20
Сообщение #2


Гость






То, что ты написал - больше напоминает как раз наследование, а не агрегацию... Я же написал, что подразумевается (то, что лежит по ссылке, и ты этого не понял):

Есть у тебя задача: реализовать множество... Только не обычное (оно как-то уже реализовано), а множество, хранящее строки... Что будешь делать? Предлагаю: хранить слова, которые "содержатся" в нашем "множестве" в виде линейного списка (если тебе не особо важна скорость), или в виде дерева (если скорость более важна), а может быть - хеш-таблица, или еще что-нибудь... Не столь важно, ты просил пример. Для примера берем список... Вот что-то подобное делаем (вообще-то уже есть реализованные списки, но в целях обучения сделаем свой):

type
plist = ^tlist;
tlist = object
first, last: plist
procedure append(s: string); // Добавить строку в список
procedure remove(s: string); // Удалить строку из списка
function exists(s: string): boolean; // проверить, есть ли строка в списке
end;


Реализация этих методов уже приводилась на форуме, в разделе FAQ -> ООП, поэтому еще раз я этого делать не буду, покажу, что именно подразумевает агрегирование: когда ты работаешь с множествами, есть функции In/Include/Exclude, которые проверяют наличие/добавляют/удаляют элемент из множества соответственно, правда? Так вот, чтобы с новым "множеством" можно было работать с использованием таких же функций, сделаем такой объект:
type
tmyset = object

// А вот тут - внимание !!!
// Вот она - АГРЕГАЦИЯ: экземпляр объекта внедрен в твой класс !!! ...
set_instance: tlist;
// ...

function in_set(s: string): boolean;
procedure include(s: stiring);
procedure exclude(s: string);

procedure print; // Вывод "множества" куда-нибудь ...

// ... остальные методы
end;

// ... инициализация set_instance и прочая лабуда

function tmyset.in_set(s: string): boolean;
begin result := set_instance.exists(s) end;

procedure tmyset.include(s: stiring);
begin set_instance.append(s) end;

procedure tmyset.exclude(s: string);
begin set_instance.remove(s) end;


Теперь ясно, что значит "экземпляр одного класса содержится в другом"? Именно содержится, ибо Множество - не вид Связного Списка, оно РЕАЛИЗОВАНО С ПОМОЩЬЮ связного списка...

Чтобы у тебя не возникло вопроса, а зачем, собственно, делать методы include/exclude, а не пользоваться существующими методами списка напрямую, я сразу тебе скажу: для сокрытия внутренней реализации объекта... Тебя, как пользователя, не должно интересовать, КАК реализовано хранение информации во "множестве". Завтра программист решит, что лучше всего хранить данные в AVL-дереве, и что? Нет у него таких методов, будешь переписывать все программы? Нет, для этого и существует ИНТЕРФЕЙС класса. Если ты работаешь только через ИНТЕРФЕЙС, предоставляемый тебе классом - тебе нечего беспокоиться о внутреннем представлении данных, оно СКРЫТО от тебя...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 30.07.2025 2:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"