169 похожих чатов

Кажись от сути вопроса ушли в сторону, вопрос был о

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


Для пояснения, может кто не знал, межклассовые отношения:
Композиция, зависимость, наследование(наследование, интерфейсы), агрегация, ассоциация - это силы связи, различаются по жесткости. Условно A is B, A uses B, A has B, A owns B

18 ответов

45 просмотров

в моём понимании, композиция подразумевает, что класс-пользователь знаком с интерфейсом класса-утилиты. т.е. не только знает, что бывает такой класс, но и знает сигнатуру его методов и может их использовать. при чём эти утилиты следует задавать именно интерфейсами, чтобы не зависеть от конкретных реализаций. речь, например, о class User { protected ItnerfaceUtil $Util; }

SuleYman-Aliev Автор вопроса
Dmitriy
в моём понимании, композиция подразумевает, что кл...

знает сигнатуру его методов и может их использовать -

Зависимость это агрегация? Просто обычно выбирают между композицией и агрегацией, зависимость в обеих ситуациях есть

SuleYman-Aliev Автор вопроса
Sergey P
Зависимость это агрегация? Просто обычно выбирают ...

Да тут полностью согласен, но есть еще детали, которые многие упускают я так понял. Слово зависимость в контексте межклассовых отношений имеет разные уровни/силу связей. Они определены в UML нотации диаграмма классов. Ассоциация, композиция, агрегация, наследование(два типа наследование и интерфейсы), зависимость.Вот последний пункт он определен типо как в методе класса A создается return new B(), вопрос был в том как оно реализовано кодом, это такой способ связи как я понял не хранящий в сотсоянии объекта А. Так как он исключетельно известен только в методе

SuleYman Aliev
Да тут полностью согласен, но есть еще детали, кот...

Ммм, а можешь показать источник на которые ты ориентируешься? Ты ж понимаешь что это не категории, они пересекаются и т д.

SuleYman-Aliev Автор вопроса

Любой учебник по UML диаграмма классов, в поиске вбей UML диаграмма классов межклассовые отношения. Тут картинки не шлются) давай в личке продолжим

SuleYman Aliev
Да тут полностью согласен, но есть еще детали, кот...

Любое прямое использование одного класса в другом является зависимостью одного от другого. Так что весьма странно слово "зависимость" рассматривать отдельно.

SuleYman Aliev
Да тут полностью согласен, но есть еще детали, кот...

смотри. Вот у нас есть dependency: class A { public function doSomething() { return new \DateTime(); } public function somethingElse(User $user) { $user->doSomething(); } } то есть либо мы внутри ее создаем, либо она приходит извне. Но A не хранит референс а значит доступна наша зависимость только в течении вызова метода. Но жизненные циклы объектов не пересекаются. Ассоциация же подразумевает что у тебя объект хранит ссылку всегда class User { private Profile $profile }

~
Return new b это разве не композиция?🤔

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

А что это тогда за зависимость получается?)

~
А что это тогда за зависимость получается?)

зависимость это "мой класс знает про другой класс и он ему нужен". Не важно как.

SuleYman-Aliev Автор вопроса
~
Return new b это разве не композиция?🤔

Нет конечно, композицией оно станет тогда когда будет является состоянием к примеру объекта А через свойство, тоесть в жизненом цикле объекта. Тут Сергей все расписал, а у тебя еще вопрос возник))

SuleYman Aliev
Нет конечно, композицией оно станет тогда когда бу...

Ну тут больше вопрос что это за зависимость) Которая не участвует в жизненном цикле, но в то же время является зависимостью)

SuleYman-Aliev Автор вопроса
~
Ну тут больше вопрос что это за зависимость) Котор...

Хороший вопрос, который у меня тоже появился, после разбора UML )

SuleYman-Aliev Автор вопроса
~
Ну тут больше вопрос что это за зависимость) Котор...

Ну смотрел мистера Сойера, он говорит об это как использование, тоесть самое слабое зацепление. Еще же такое встретичь в абстрактной фабрике)

SuleYman-Aliev Автор вопроса
~
Ну тут больше вопрос что это за зависимость) Котор...

Хотя...., B зависит от А в таком случаи, тоесть мы рассматриваем что источник(B) зависит о цели A, пока А не вызовет метод B не появится, условно это является зависимостью. А все остальное как и было сказано уже ассоциацией разных видов(агрегация, композиция) - зависимость с жизненным циклом.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта