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

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

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


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

18 ответов

52 просмотра

в моём понимании, композиция подразумевает, что класс-пользователь знаком с интерфейсом класса-утилиты. т.е. не только знает, что бывает такой класс, но и знает сигнатуру его методов и может их использовать. при чём эти утилиты следует задавать именно интерфейсами, чтобы не зависеть от конкретных реализаций. речь, например, о 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 не появится, условно это является зависимостью. А все остальное как и было сказано уже ассоциацией разных видов(агрегация, композиция) - зависимость с жизненным циклом.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта