Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООП зависимости / 17 сообщений из 17, страница 1 из 1
25.12.2009, 21:55:15
    #36387482
Gerasim1988
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
Ребят, объясните пожалуйста, в чем прнцмпиальная разница между агрегацией, кооперированием и внутренними классами?? и кооперирование и коопеерация это одно и то же или отличаются друг от друга?
...
Рейтинг: 0 / 0
25.12.2009, 22:55:38
    #36387552
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
Внутренний класс, это класс объявленный в пространстве имён другого класса.
При определённых условиях его можно использовать за пределами класса. На связях объектов это никак не сказывается.

Кооперация определяет порядок взаимодействия объектов в рамках реализации какой либо функции. Сами объекты вообще говоря могут быть не связаны между собой (объект может быть аргументом функции).

Агрегация определяет связи объектов и управление временем их жизни. Агрегация указывает на то, что один из объектов связи является частью другого, но не ограничен временем его жизни. Например автомобиль состоит из кузова, мотора и колёс, но все эти объекты после разрушения автомобиля могут продолжать свое независимое существование.

Более сильной связью является встраивание объекта. Встроеный объект не может существовать без объекта-контейнера. Если оболочка воздушного шара рвётся, газ внутри него уходит в атмосферу прекращая своё существование в форме газового шара.
...
Рейтинг: 0 / 0
28.12.2009, 10:37:43
    #36389311
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mcureenab пишет:

> Внутренний класс, это класс объявленный в пространстве имён другого класса.
> При определённых условиях его можно использовать за пределами класса. На
> связях объектов это никак не сказывается.

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.12.2009, 15:08:34
    #36390026
mriadus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mcureenabВнутренний класс, это класс объявленный в пространстве имён другого класса.
При определённых условиях его можно использовать за пределами класса. На связях объектов это никак не сказывается.

Кооперация определяет порядок взаимодействия объектов в рамках реализации какой либо функции. Сами объекты вообще говоря могут быть не связаны между собой (объект может быть аргументом функции).

Агрегация определяет связи объектов и управление временем их жизни. Агрегация указывает на то, что один из объектов связи является частью другого, но не ограничен временем его жизни. Например автомобиль состоит из кузова, мотора и колёс, но все эти объекты после разрушения автомобиля могут продолжать свое независимое существование.

Более сильной связью является встраивание объекта. Встроеный объект не может существовать без объекта-контейнера. Если оболочка воздушного шара рвётся, газ внутри него уходит в атмосферу прекращая своё существование в форме газового шара.
Про агрегацию написано так абстрактно, что проще застрелиться. Давайте примеры кода на С++ (можно без кода, а просто "объект такого-то класса является членом другого класса" и т.п.)
...
Рейтинг: 0 / 0
28.12.2009, 15:10:03
    #36390029
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
MasterZiv

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


В UML такое понятие есть.
...
Рейтинг: 0 / 0
28.12.2009, 15:30:41
    #36390094
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mriadus
Про агрегацию написано так абстрактно, что проще застрелиться. Давайте примеры кода на С++ (можно без кода, а просто "объект такого-то класса является членом другого класса" и т.п.)

Как вариант ассоциации в общем виде:

class PeerA {....};

class PeerB { PeerA *peer; ... };

Тут мы предполагаем, что между классами PeerA и PeerB нет зависимости целое-часть. В противном случае следует говорить не об ассоциации вообще, а о её более сильных видах.


Как вариант агрегаци:

class Part;

class Whole { Part ∂ ... };

Тут объект типа Part на который ссылается Whole::part может продолжить существование после удаления объекта Whole. Естественно, в деструкторе можно прописать безусловное удаление этого объекта, но тогда связь усилится до встраивания или композиции.

Точно так же можно написать:

class Part;

class Whole { Part *part; ... };

Т.е. в C++ глядя на переменную (ссылку или указатель) член класса нельзя однозначно сказать, что данная ассоциация является агрегацией. Нужно смотреть ещё и деструктор класса.


Как вариант встраивания или композиции:

class Part {....};

class Whole { Part part; ... };

Тут объект Whole::part будет неизбежно удалён вместе со своим контейнером типа Whole.

Если книжка написана невнятно, это не повод для суецида с применением огнестрельного оружия. Поищи другую книжку. Если строгие формулировки тебя не пугают, почитай метамодель UML и стандарт UML целиком.
...
Рейтинг: 0 / 0
28.12.2009, 17:49:17
    #36390516
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mcureenabВстроеный объект не может существовать без объекта-контейнера. Если оболочка воздушного шара рвётся, газ внутри него уходит в атмосферу прекращая своё существование в форме газового шара.
Красиво сказал. Тебе-бы книжки писать...
...
Рейтинг: 0 / 0
28.12.2009, 17:52:21
    #36390526
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mcureenabMasterZiv

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


В UML такое понятие есть.
В C# пошли еще дальше. Там ввели такую сущность как partial class.
На мой взгляд нововведение довольно бесполезное.
...
Рейтинг: 0 / 0
28.12.2009, 19:02:58
    #36390682
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
maytonКрасиво сказал. Тебе-бы книжки писать...

Долго думал. :)
Можно ещё такую аналогию композиции. Текст, буквы, картинки на листе бумаге сгорают вместе с бумагой. Без бумаги они существовать не могут.
...
Рейтинг: 0 / 0
28.12.2009, 19:11:28
    #36390690
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
maytonВ C# пошли еще дальше. Там ввели такую сущность как partial class.
На мой взгляд нововведение довольно бесполезное.

C# не читал. Но в других областях очень хорошо, когда язык или система программирования поддерживает конструкции языка моделирования взаимно-однозначно, без костылей и потери проектной информации.

Даже в наиболее продвинутой области - моделирование баз данных - не всё гладко.

Так что пусть делают новые языки.
...
Рейтинг: 0 / 0
29.12.2009, 09:40:38
    #36391210
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
Вообще, про агрегацию с композицией пишут, что это одно и тоже, а нюансы в принципе по барабану. Но в некоторых источниках их разделяют по принципу времени существования. То есть в одном случае разрушение происходит одновременно с объектом в котором используется этот объект, в другом нет. Поскольку в разных книгах этот момент описывается по разному, предлагаю считать что это "те же яйца только в профиль", с небольшими нюансами, которые в прочем можно использовать по своему усмотрению. Заморачиваться не имеет смысла, поскольку даже мэтры на это забили.
...
Рейтинг: 0 / 0
30.12.2009, 19:27:16
    #36394523
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
XDiaBLo,

видимо так пишут люди, которые не поняли что это такое, или эти термины не входят в круг их понятий, как например в C++ агрегация трудноотличима от простой ассоциации. Однако агрегация и композиция явно отличаются, если не мудрить. Опять же в C++ можно получить указатель как на агрегированный так и на встроенный объект, тогда как в CУБД Оракл на встроеннй объект ссылаться нельзя.

Понимание этих тонкостей позволит ещё на этапе проектирования исключить утечки памяти в программах.
...
Рейтинг: 0 / 0
31.12.2009, 06:33:53
    #36394808
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mayton,
partial классы служат для отделения сгенеренного интсрументами кода от кода, который пишется вручную
...
Рейтинг: 0 / 0
31.12.2009, 08:45:40
    #36394851
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
mcureenabXDiaBLo,

видимо так пишут люди, которые не поняли что это такое, или эти термины не входят в круг их понятий , как например в C++ агрегация трудноотличима от простой ассоциации. Однако агрегация и композиция явно отличаются, если не мудрить. Опять же в C++ можно получить указатель как на агрегированный так и на встроенный объект, тогда как в CУБД Оракл на встроеннй объект ссылаться нельзя.

Понимание этих тонкостей позволит ещё на этапе проектирования исключить утечки памяти в программах.
Я не помню, то-ли у Фаулера в книге по UML, то-ли в GOF это было. Ну в общем не на форумах, а в какой-то знатной книге. Я потом перерыл кучу источников, и понял, что каждый понимает эти агрегации с композициями в меру своей испорченности. Короче читая книгу, главное важно понять, что автор думает про эти термины. Я лично понимаю, в чём их разница, но знаю что всегда следует ожидать подвоха даже от именитых авторов.
...
Рейтинг: 0 / 0
31.12.2009, 10:48:25
    #36394960
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
beluginmayton,
partial классы служат для отделения сгенеренного интсрументами кода от кода, который пишется вручную
Это принципиально важно? Какие от этого benefits?
...
Рейтинг: 0 / 0
31.12.2009, 10:48:57
    #36394962
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
maytonbeluginmayton,
partial классы служат для отделения сгенеренного интсрументами кода от кода, который пишется вручную
Это принципиально важно? Какие от этого benefits?
Генерированный код может быть перегенерирован...
...
Рейтинг: 0 / 0
31.12.2009, 17:39:24
    #36395277
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП зависимости
XDiaBLo
Я не помню, то-ли у Фаулера в книге по UML, то-ли в GOF это было. ...

Стандарт UML надо читать. Там это чётко прописано. Только из стандарта не ясно, зачем это нужно.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООП зависимости / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]