Агрегирование, что такое? |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Агрегирование, что такое? |
Vardes |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Ну вот,возьму ка я на себя ответственность и открою 701-ую тему в данной тематике.Этот топик хотелось бы посвятить такой терминалогии как Агрегирование.Узнать для чего это надо и с чем это едят,т.к. в учебниках я не нашёл чёткого описания,а в инете мало,что говорится об этом
|
volvo |
Сообщение
#2
|
Гость |
Это одно из понятий ООП... Смотри, в чем дело: между объектами может существовать несколько видов отношений...
1) является: отношение предок-потомок. То есть Окружность является Фигурой, Волк является Животным, ... Это отношение определяется наследованием: Type 2) содержит: Стек содержит Массив (то есть, стек НЕ является некоторым видом массива, а СОДЕРЖИТ массив внутри себя). Вот это - Агрегирование: TypeЧто конкретно тебя интересует по этой теме? |
Vardes |
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
У меня такая задача,произвести агрегирование классов...И мне как бы нужно знать основы,как всё это происходит...Мне бы литературы по этому вопросу,но ничего найти не могу
|
Vardes |
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
А мне кто-нить может помочь по этому вопросу,какой-нить простой примерчик,мне больше и не надо
|
volvo |
Сообщение
#5
|
Гость |
Вот тут был приведен пример агрегирования: Реализовать в виде класса абстрактный тип данных ...
(правда, реализация - на С++, но посмотри саму идею, что это такое, и как оно используется...) |
Vardes |
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Не смог я разобраться в коде нет у меня ещё такого опята, мне бы сначала Delphi обуздать.Мне тут рассказали про агрегирование так,что к примеру имеется у нас несколько классов наследуемых др. от др. с одинаковыми методами...мы создаём для них один общий класс и создаём массив этих классов,для каждого элемента которого запускается метод....
Но вот это всё на словах и не факт,что правильно....Прошу привести мне простенький пример...Просто мне курсач писать,и агрегирование обязательно вставить надо,поэтому не зная агрегирования,я не могу продумать весь алгоритм,а время уже поджимает,прошу помочь.... |
volvo |
Сообщение
#7
|
Гость |
То, что ты написал - больше напоминает как раз наследование, а не агрегацию... Я же написал, что подразумевается (то, что лежит по ссылке, и ты этого не понял):
Есть у тебя задача: реализовать множество... Только не обычное (оно как-то уже реализовано), а множество, хранящее строки... Что будешь делать? Предлагаю: хранить слова, которые "содержатся" в нашем "множестве" в виде линейного списка (если тебе не особо важна скорость), или в виде дерева (если скорость более важна), а может быть - хеш-таблица, или еще что-нибудь... Не столь важно, ты просил пример. Для примера берем список... Вот что-то подобное делаем (вообще-то уже есть реализованные списки, но в целях обучения сделаем свой): type Реализация этих методов уже приводилась на форуме, в разделе FAQ -> ООП, поэтому еще раз я этого делать не буду, покажу, что именно подразумевает агрегирование: когда ты работаешь с множествами, есть функции In/Include/Exclude, которые проверяют наличие/добавляют/удаляют элемент из множества соответственно, правда? Так вот, чтобы с новым "множеством" можно было работать с использованием таких же функций, сделаем такой объект: type Теперь ясно, что значит "экземпляр одного класса содержится в другом"? Именно содержится, ибо Множество - не вид Связного Списка, оно РЕАЛИЗОВАНО С ПОМОЩЬЮ связного списка... Чтобы у тебя не возникло вопроса, а зачем, собственно, делать методы include/exclude, а не пользоваться существующими методами списка напрямую, я сразу тебе скажу: для сокрытия внутренней реализации объекта... Тебя, как пользователя, не должно интересовать, КАК реализовано хранение информации во "множестве". Завтра программист решит, что лучше всего хранить данные в AVL-дереве, и что? Нет у него таких методов, будешь переписывать все программы? Нет, для этого и существует ИНТЕРФЕЙС класса. Если ты работаешь только через ИНТЕРФЕЙС, предоставляемый тебе классом - тебе нечего беспокоиться о внутреннем представлении данных, оно СКРЫТО от тебя... |
Vardes |
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Код procedure tmyset.include(s: string); begin set_instance.append(s) end; Если я тебя правильно понял,то сначала идёт добавление эл-та во множество,а потом мы добавляем элемент данного множества в список? |
Bokul |
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Цитата Если я тебя правильно понял,то сначала идёт добавление эл-та во множество,а потом мы добавляем элемент данного множества в список? Если я правильно понял, то реализованное volvo множество - это тот же список + несколько новых методов. Т.е. множеству некуда сохранять как только в свой список, а значит добавления идет сразу в список. Сообщение отредактировано: Bokul - -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Bokul |
Сообщение
#10
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Оффтоп - неужели паскальный множественный тип сделанный по подобной схеме?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Vardes |
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Для чего же тогда нужна данная процедура:
Цитата procedure tmyset.include(s: string); Я так считаю,что она добавляет элемент в множество.... |
volvo |
Сообщение
#12
|
Гость |
Vardes, я больше ничего тебе объяснять не буду... ты не ЧИТАЕШЬ моих объяснений, а просто бегло их просматриваешь! А я их не для того пишу. Понятно? Ответ на твой вопрос - в посте №7 (причем я ЗАРАНЕЕ, до того, как ты его задашь ответил тебе)...
Цитата Я так считаю,что она добавляет элемент в множество.... Она НЕ ДОБАВЛЯЕТ !!! Она ВЫЗЫВАЕТСЯ ДЛЯ ДОБАВЛЕНИЯ элемента во множество. А уж что именно ДОБАВЛЯЕТ - это Append...Ты слово Interface понимаешь? Если я напишу реализацию хранения данных в своей супер-пупер структуре, и для того, чтобы добавить элемент во множество, ты должен будешь делать так: my_set.add_to_the_struct(allocate_additional_space(my_set.type_of_set_node), s, __TO_TAIL__);, ты станешь пользоваться таким множеством? Я бы не стал... Посторяю последний раз: Include - СКРЫВАЕТ от тебя деталь внутренней реализации, она вызывается для того, чтобы ВНУТРИ НЕЕ сделать такой вызов, который будет эффективным В ЗАВИСИМОСТИ от внутреннего представления, тогда как НЕ ЗАВИСИМО от внутреннего представления данных пользователь (если он тебя вообще интересует) должен вызывать Include... Учи матчасть, а? Иди, почитай что-нибудь про ООП, сокрытие информации, интерфейс класса, ОСНОВЫ объектно-ориентированного ПРОЕКТИРОВАНИЯ, а потом придешь... |
Vardes |
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Ты что думаешь,так легко с обычного Pascal'я (не изучая объектную часть) сразу за неделю перейти на объекты в Delphi (я основы только изучил,не представлял даже себе всякие процедуры Include и Exclude),времени больше нет,проект надо свой делать..Не виноват я,что у меня нехватка времени,не могу я всё время программированием заниматься,др. дел полно...так что не сердчайте молодой человек...всё равно вам спасибо за ваши труды
|
Vardes |
Сообщение
#14
|
Пионер Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: 0 |
Сообщение отредактировано: Vardes - |
Текстовая версия | 15.09.2024 21:39 |