tag:blogger.com,1999:blog-8596733192274108952.post3208652244295444920..comments2024-03-12T06:00:18.305+02:00Comments on Programming stuff: Наследование vs Композиция vs АгрегацияSergey Teplyakovhttp://www.blogger.com/profile/14300835272589262297noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-8596733192274108952.post-46310863426230484942021-01-02T11:14:36.860+02:002021-01-02T11:14:36.860+02:00"Is a"/"является" отношение, т..."Is a"/"является" отношение, т.е. наследованиеMikhail Fludkovhttps://www.blogger.com/profile/10781083744848246495noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-9613075774054556222021-01-02T11:08:32.984+02:002021-01-02T11:08:32.984+02:00Этот комментарий был удален автором.Mikhail Fludkovhttps://www.blogger.com/profile/10781083744848246495noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-15483261969575027532020-01-02T00:13:16.829+02:002020-01-02T00:13:16.829+02:00интерфейс и его реализация какое имеют отношения?интерфейс и его реализация какое имеют отношения?ViktorJavahttps://www.blogger.com/profile/11220321028026322993noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-41112037740135223722018-04-04T05:16:17.603+03:002018-04-04T05:16:17.603+03:00По Фаулеру цитирую "Как правило, я стараюсь о...По Фаулеру цитирую "Как правило, я стараюсь обозначать при помощи ат<br />рибутов небольшие элементы, такие как даты или логические значе<br />ния, – главным образом, типы значений (стр. 101), – а ассоциации для<br />более значимых классов, таких как клиенты или заказы. " <br />ассоциация == атрибут но разные графические обозначения.Владиславhttps://www.blogger.com/profile/07365444772749962479noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-76559919526144385352016-02-05T04:57:25.378+02:002016-02-05T04:57:25.378+02:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/06061992595535893909noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-63879999622290707512014-04-26T01:30:54.971+03:002014-04-26T01:30:54.971+03:00Мне эта тема интересна см.также http://www.cyberfo...Мне эта тема интересна см.также http://www.cyberforum.ru/oop/thread1155828.html<br />Способы проектирования не однозначны. Хотелось бы понять, какие свойства информационной модели приводят к однозначному выбору агрегирования по значениям или по ссылкам.<br />Особенно по ссылкам: где в жизни востребована ситуация, когда класс собирается из объектов другого класса созданных раньше и где действительно надо чтоы эти объекты "жили" дальше после уничтожения класса-агрегата? На С++ агрегирование по ссылкам я реализую с помощью создания списка объектов- члена класса-агрегата. Важно что этот список L может заполняться как конструктором класса-агрегата, так и методом. Т.е. класс-агрегат должен иметь конструктор, оставляющий список объектов А пустым. А заполнение объектами А происходит с помощью спец.метода вызываемого уже после создания агрегата, который запихивает очередной объект А в список L класса-агрегата.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-17199250729469967782013-06-07T14:33:12.360+03:002013-06-07T14:33:12.360+03:00@toks: логически - это все еще композиция, хотя во...@toks: логически - это все еще композиция, хотя во время исполнения - уже нет. Обычно подобное поведение относится к code smell-ам, поскольку этот код подрывает инкапсуляцию класса A.<br /><br />Строгая композиция в языках с автоматическим управлением памятью вообще невозможна, поскольку "часть" не может быть удалена во время удаления "целого".<br /><br />Есть вариант, когда оба класса реализуют интерфейс IDisposable и целое вызывает Dispose своих составных частей делая их "логически" мертнвыми.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-76665102727887006662013-06-07T12:03:00.073+03:002013-06-07T12:03:00.073+03:00Все очень доступно и понятно написано, но возник в...Все очень доступно и понятно написано, но возник вопрос.<br /><br />public class Program() <br />{<br /> static void main() <br /> {<br /> A a = new A();<br /> B b = new B(); a.MakeNotComposite(b);<br />a = null; <br />/*<br />......some code......<br />*/<br /> }<br />}<br /><br /><br />public class B() <br />{<br /> public C c {get;set;}<br />}<br /><br /><br />public class C() <br />{<br /> <br />}<br /><br /><br />public class A() <br />{<br /> private readonly C c = new C();<br /> public void MakeNotComposite(B b)<br /> { <br /> b.C = c; <br /> <br /> }<br />}<br /> <br />В каком отношении находятся классы А и С. Ведь нельзя сказать что это композиция, потому что на объект класса С теперь есть ссылка из объекта класса B, и при смерти объекта класса А, объект класса С останется жить. То есть получается тип отношения между классами нельзя определить на этапе компиляции?tokshttps://www.blogger.com/profile/08592755486729786633noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-53140776276587685202013-01-31T14:36:59.359+02:002013-01-31T14:36:59.359+02:00@Артем: когда у нас появляется фабрика, то у нас в...@Артем: когда у нас появляется фабрика, то у нас в рассмотрении участвуют три класса: фабрика, создаваемые фабрикой классы и пользователь фабрики.<br /><br />Тот, кто пользуется фабрикой, ее не создает. Отношение между ним и фабрикой - агрегация.<br /><br />Но тот, кто использует фабрику, он создает объекты с помощью него, поэтому отношению между ним и создаваемым объектом - композиция.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-14911981407525887642013-01-31T08:57:40.965+02:002013-01-31T08:57:40.965+02:00Вот еще раз насчет фабрики хотелось бы уточнить......Вот еще раз насчет фабрики хотелось бы уточнить... а то не совсем понятно. Фабрика создает объект, следовательно связь композиция, так как она управляет временем жизни объекта, я правильно рассуждаю ? <br /><br /><br />По поводу статьи - наконец то я понял, то что объясняли в университете :) Подача материала грамотная.Anonymoushttps://www.blogger.com/profile/00452537531509806250noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-45067550514687155242013-01-09T21:35:12.787+02:002013-01-09T21:35:12.787+02:00Наилучшей проверкой на то, стоит ли использовать н...Наилучшей проверкой на то, стоит ли использовать наследование, является проверка на соответствие принципу Лисков. Принцип непрост для понимания, зато приводит, затем, к просветлению :-)Anonymoushttps://www.blogger.com/profile/11100959805974330465noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-75280935586198045202012-12-19T22:07:17.555+02:002012-12-19T22:07:17.555+02:00@Артем: Да, спасибо, речь идет об AbstractReposito...@Артем: Да, спасибо, речь идет об AbstractRepository.<br /><br />По поводу морали: больше агрегации, меньше композиции (о том, что наследование - не айс, это достаточно старый баян).Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-41504442326072733722012-12-19T15:48:55.066+02:002012-12-19T15:48:55.066+02:00"В данном случае мы не избавляемся от компози..."В данном случае мы не избавляемся от композиции (CustomService все еще контролирует время жизни ICustomRepository), но делает это не напрямую, а с помощью дополнительной абстракции – абстрактной фабрики." - вот тут не понял откуда взялся ICustomRepository, может AbstractRepository ? <br />Смысл вводить интерфейс тут ? <br /><br />@Alexander: "Если некий класс создаёт объект другого класса (та же фабрика), какая между ними связь? Я такое обозначаю именно как ассоциация и не временно, а на постоянной основе." А разве это не есть агрегация ? Или если он не использует этот объект, а только возвращает, то это ассоциация ? <br /><br />Мораль: меньше наследования, больше агрегации ? ) Anonymoushttps://www.blogger.com/profile/00452537531509806250noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-89297933056830461722012-12-05T22:46:29.369+02:002012-12-05T22:46:29.369+02:00@eugene: картинки я беру в Visio 2013;) там просто...@eugene: картинки я беру в Visio 2013;) там просто есть темки разные, вот они и смотрятся необычно:)Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-79010416713478792902012-12-05T22:26:01.659+02:002012-12-05T22:26:01.659+02:00Нет, ну я все-таки не пойму. Где ты такие картинки...Нет, ну я все-таки не пойму. Где ты такие картинки берешь...? Про ромбики - круто :). eugenehttps://www.blogger.com/profile/00368111825500921630noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-54450700508328528292012-12-05T20:34:45.610+02:002012-12-05T20:34:45.610+02:00@Владимир: Спасибо! UML не сложное дело, тем более...@Владимир: Спасибо! UML не сложное дело, тем более, что нужно запомнить всего-то процентов 20 нотации, не больше. А в деле дизайна помогает здорово.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-82010067470539555202012-12-05T06:44:14.383+02:002012-12-05T06:44:14.383+02:00Как всегда хорошая статья! Наконец-то запомнил UML...Как всегда хорошая статья! Наконец-то запомнил UML нотацию :)Anonymoushttps://www.blogger.com/profile/11327317591123112703noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-3104210438354022222012-12-04T10:52:02.537+02:002012-12-04T10:52:02.537+02:00Любую проблему можно решить введением дополнительн...Любую проблему можно решить введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества абстрактных слоев.Евгенийhttps://www.blogger.com/profile/10448189915149629161noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-7686419380388879902012-12-04T08:13:51.201+02:002012-12-04T08:13:51.201+02:00@Alexander: да, согласен, но в этом случае я добав...@Alexander: да, согласен, но в этом случае я добавляю уточнение над стрелкой, типа: <>, <> etc. А вот без такого уточнения - точно бывает только на ранней стадии.<br /><br />@Анатолий: спасибо!Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-61254179230378900252012-12-04T06:40:34.939+02:002012-12-04T06:40:34.939+02:00Достаточно понятная статья, раскладывает все по по...Достаточно понятная статья, раскладывает все по полочкам.Anonymoushttps://www.blogger.com/profile/08487458460734515606noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-57137691845654994142012-12-04T06:10:04.113+02:002012-12-04T06:10:04.113+02:00По поводу тезиса что ассоциация - временная связь,...По поводу тезиса что ассоциация - временная связь, пока не определились что именно надо.<br /><br />Если некий класс создаёт объект другого класса (та же фабрика), какая между ними связь? Я такое обозначаю именно как ассоциация и не временно, а на постоянной основе.<br /><br />Показать что они просто зависимы тоже не годиться, ведь создание объекта требует от "фабрики" знания как его правильно создать и "фабрика" на это завязана.Anonymoushttps://www.blogger.com/profile/11741549911373457424noreply@blogger.com