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

> ВНИМАНИЕ!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Агрегирование, что такое?
сообщение
Сообщение #1


Пионер
**

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

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


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


Гость






Это одно из понятий ООП... Смотри, в чем дело: между объектами может существовать несколько видов отношений...

1) является: отношение предок-потомок. То есть Окружность является Фигурой, Волк является Животным, ... Это отношение определяется наследованием:
Type
TFigure = class
...
end;
TCircle = class(TFigure)
...
end;

Type
TAnimal = class
...
end;
TWolf = class(TAnimal)
...
end;

2) содержит: Стек содержит Массив (то есть, стек НЕ является некоторым видом массива, а СОДЕРЖИТ массив внутри себя). Вот это - Агрегирование:
Type
TMyArray = class
// Тут - некоторая реализация работы с массивом
end;
TStack = class
arr: TMyArray; // Экземпляр типа Массив содержится в Стеке
...
end;
Что конкретно тебя интересует по этой теме?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


У меня такая задача,произвести агрегирование классов...И мне как бы нужно знать основы,как всё это происходит...Мне бы литературы по этому вопросу,но ничего найти не могу wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


А мне кто-нить может помочь по этому вопросу,какой-нить простой примерчик,мне больше и не надо unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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


Пионер
**

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

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


Не смог я разобраться в коде wink.gif нет у меня ещё такого опята, мне бы сначала Delphi обуздать.Мне тут рассказали про агрегирование так,что к примеру имеется у нас несколько классов наследуемых др. от др. с одинаковыми методами...мы создаём для них один общий класс и создаём массив этих классов,для каждого элемента которого запускается метод....
Но вот это всё на словах и не факт,что правильно....Прошу привести мне простенький пример...Просто мне курсач писать,и агрегирование обязательно вставить надо,поэтому не зная агрегирования,я не могу продумать весь алгоритм,а время уже поджимает,прошу помочь....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

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

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-дереве, и что? Нет у него таких методов, будешь переписывать все программы? Нет, для этого и существует ИНТЕРФЕЙС класса. Если ты работаешь только через ИНТЕРФЕЙС, предоставляемый тебе классом - тебе нечего беспокоиться о внутреннем представлении данных, оно СКРЫТО от тебя...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


Код

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


Если я тебя правильно понял,то сначала идёт добавление эл-та во множество,а потом мы добавляем элемент данного множества в список?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
Если я тебя правильно понял,то сначала идёт добавление эл-та во множество,а потом мы добавляем элемент данного множества в список?

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

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Оффтоп - неужели паскальный множественный тип сделанный по подобной схеме?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


Для чего же тогда нужна данная процедура:
Цитата
procedure tmyset.include(s: string);

Я так считаю,что она добавляет элемент в множество....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Vardes, я больше ничего тебе объяснять не буду... ты не ЧИТАЕШЬ моих объяснений, а просто бегло их просматриваешь! mad.gif А я их не для того пишу. Понятно? Ответ на твой вопрос - в посте №7 (причем я ЗАРАНЕЕ, до того, как ты его задашь ответил тебе)...

Цитата
Я так считаю,что она добавляет элемент в множество....
Она НЕ ДОБАВЛЯЕТ !!! Она ВЫЗЫВАЕТСЯ ДЛЯ ДОБАВЛЕНИЯ элемента во множество. А уж что именно ДОБАВЛЯЕТ - это Append...

Ты слово Interface понимаешь? Если я напишу реализацию хранения данных в своей супер-пупер структуре, и для того, чтобы добавить элемент во множество, ты должен будешь делать так:
my_set.add_to_the_struct(allocate_additional_space(my_set.type_of_set_node), s, __TO_TAIL__);
, ты станешь пользоваться таким множеством? Я бы не стал... Посторяю последний раз: Include - СКРЫВАЕТ от тебя деталь внутренней реализации, она вызывается для того, чтобы ВНУТРИ НЕЕ сделать такой вызов, который будет эффективным В ЗАВИСИМОСТИ от внутреннего представления, тогда как НЕ ЗАВИСИМО от внутреннего представления данных пользователь (если он тебя вообще интересует) должен вызывать Include...

Учи матчасть, а? Иди, почитай что-нибудь про ООП, сокрытие информации, интерфейс класса, ОСНОВЫ объектно-ориентированного ПРОЕКТИРОВАНИЯ, а потом придешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

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

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


Ты что думаешь,так легко с обычного Pascal'я (не изучая объектную часть) сразу за неделю перейти на объекты в Delphi (я основы только изучил,не представлял даже себе всякие процедуры Include и Exclude),времени больше нет,проект надо свой делать..Не виноват я,что у меня нехватка времени,не могу я всё время программированием заниматься,др. дел полно...так что не сердчайте молодой человек...всё равно вам спасибо за ваши труды smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

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

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


blink.gif

Сообщение отредактировано: Vardes -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.11.2020 6:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name