ООП. Удаление циклической связанности #608387


#0 by Ненавижу 1С
Известный прием удаление циклических связей классов - это выделение у одного из классов родительского. Пример Слева циклические связи, справа - после преобразования. В связи с чем у меня два вопроса: 1. Всегда ли любую схему классов можно избавить от циклических связей? 2. В данном примере выделен супер-класс "справа", понятно, что в данном абстрактном примере разницы нет никакой, но в реальных ситуациях, какие критерии выделения "слева или справа" или даже у обоих?
#0 by Ненавижу 1С
Известный прием удаление циклических связей классов - это выделение у одного из классов родительского. Пример Слева циклические связи, справа - после преобразования. В связи с чем у меня два вопроса: 1. Всегда ли любую схему классов можно избавить от циклических связей? 2. В данном примере выделен супер-класс "справа", понятно, что в данном абстрактном примере разницы нет никакой, но в реальных ситуациях, какие критерии выделения "слева или справа" или даже у обоих?
#1 by Ненавижу 1С
кто нибудь занимается проектированием классов?
#2 by Ненавижу 1С
злые..
#3 by Джинн
Тут все одноэсники. Вы ошиблись форумом.
#4 by Avganec
Не надо так говорить... мы не злые... 1. нет ничего невозможного 2. все по логике проектированием занимаются все, кто кода-нибудь разрабатывал с нуля
#5 by HeroShima
неугомонный: всё ресурсоконтекстнозависимо
#6 by izekia
а почему бы сразу без циклических ссылок не спроектировать?
#7 by Ненавижу 1С
пример. Учитель сообщает ученику задание (учитель знает об ученике), ученик решает задание и говорит его ни кому нибудь, а именно своему учителю (ученик знает, кому надо сообщить)
#8 by HeroShima
тут не о сабже
#9 by HeroShima
тишина... асинхронная обработка сообщений решит все ваши проблемы...
#10 by Ненавижу 1С
а это тут зачем?
#11 by izekia
ссылка на учителя в задании, между учителем и учеником вообще не должно быть ссылок, у ученика есть коллекция заданий
#12 by izekia
у учителя есть ссылка на курсы, которые он ведет, у групп есть ссылки на курсы, у ученика есть ссылка на группу
#13 by Ненавижу 1С
ок, тогда Задание ссылается на Учителя Учитель имеет понятие, какое Задание он выдает и связь тоже есть В итоге снова цикл
#14 by Ненавижу 1С
ты не фантазируй, я тебе пример привел, разруливай
#15 by HeroShima
а это глобально, или укажи язык, в пределах которого танцевать. IRL циклические зависимости везде!
#16 by Ненавижу 1С
язык?можно любой из следующих: Delphi, C++, C#
#17 by izekia
пример копропроектирования, если так проектировать, то конечно надо задумываться над темами типа
#18 by izekia
а что у нас ооп, сильно различается в контексте этой задачи в разных языках?
#19 by HeroShima
внекоторых случаях сильно
#20 by Ненавижу 1С
я прошу спроектировать решение для или
#21 by HeroShima
+ опять же, я говорю обо всех языках, в том числе о ещё не спроектированных
#22 by izekia
еще раз повторюсь, у ученика не должно быть ссылки на учителя, в лучшем случае на задание, но она может быть пустой, соответственно у нас тут нет проблемы циклических ссылок, чистим задание и можем удалять, опять же у учителя ссылка на ученика может быть пустой в идеале, есть учитель, есть ученик и есть задание которое содержит ссылки на них обоих, это для целей учета заданий
#23 by Ненавижу 1С
твой концепт сильнее моего ))
#24 by HeroShima
;)
#25 by izekia
конкретный пример различий можно?
#26 by HeroShima
дело в том, что мы хотим адекватно представить предметную область и не нарваться при этом на грабли системы реализации. в циклических связях самих по себе ничего вредного нет
#27 by ЗлобнийМальчик
а почему надо избавлятся от циклических ссылок?
#28 by Ненавижу 1С
ну это такой пунктик, как с неопределено и NULL
#29 by izekia
это к ненавижу, он видимо не только 1С ненавидит)
#30 by HeroShima
#31 by Ненавижу 1С
ссылка это не только поле/свойство класса, это осведомленность класса о другом классе class Teacher { Job* CreateJob; //учитель осведомлен о заданиях } class Job { Teacher* teacher; //задание знает, кто его выдал }
#32 by ЗлобнийМальчик
ну придумайте класс менеджер и вынесите всю логику туда
#33 by izekia
я попросил конкретный пример различия в контексте данной задачи, а не ссылку на вики
#34 by izekia
одна из сылок лишняя, вся проблема в том, что ты проектируешь исходя из какого-то абстрактного представления, что кто про кого должен знать. А надо просто отталкиваться от необходимой функциональности и исходя из этого проектировать, иначе можно много всего напроектировать
#35 by izekia
ссылок*
#36 by Ненавижу 1С
показывай как надо
#37 by HeroShima
на C++ и Lisp данную "задачу" можно обыграть очень по-разному
#38 by toypaul
есть учитель есть ученик есть задача есть задача_выданная_учителем_ученику - это отдельный класс
#39 by izekia
первый вариант: к примеру учителю надо раздать и собрать задания, в таком случае целесообразно хранить ссылки на задания у учителя, и методы раздать и собрать будут работать с приватными коллекциями
#40 by Ненавижу 1С
хорошо начал
#41 by izekia
простите, но класс с объектом не надо путать
#42 by izekia
казалось бы причем тут лисп и ооп?
#43 by Ненавижу 1С
он пока не путает ничего, имхо
#44 by toypaul
а кто путает
#45 by ЗлобнийМальчик
мммм?????
#46 by HeroShima
почему?
#47 by izekia
второй вариант, ученик получает задание и сдает его учителю в этом случае оптимально хранить ссылку на учителя в задании, а коллекцию заданий в классе ученик
#48 by HeroShima
угадай! )
#49 by Ненавижу 1С
все равно циклы
#50 by izekia
задача, и задача_выданная_учителем_ученику ... это что такое? либо избыточная иерархия, вообще не нужная для данной задачи, либо путаем класс и его инстанс)
#51 by YV
ClassBX is a ClassCX, так что все эти манипуляции не имеют смысла.
#52 by toypaul
izekia у тебя в институте логику преподавали?
#53 by izekia
ммм, где ты увидел, покажи?
#54 by izekia
да, все кроме программирования
#55 by Ненавижу 1С
вот решение согласно схемы в сделаем супер-класс для учителя - супервайзер учитель оповещает ученика о задании и передает ссылку на себя ученику как ссылка на супервайзера ученик не знает ничего про учителя, но осведомлен о некоем супервайзере, сообщает ему о выполненном задании
#56 by Ненавижу 1С
ну да
#57 by toypaul
чот не похоже. какую-то ахинею несешь. в мы выделяем объекты = это ученик, учитель, задача. и отношения. учитель выдал ученику задачу. это отношение, которое мы выделяем в отдельный класс в терминах С++.
#58 by ЗлобнийМальчик
есть учитель есть ученик есть задача есть задача_выданная_учителем_ученику - это отдельный класс добаляем класс - синглтон Менеджер задач  - и вуаля. Учителю надо выдать ученику задачу - опращаемся в менеджер и тот создает инстанс класса задача_выданная_учителем_ученику Ученик хочет сдать задачу - обращается в менеджер и сдает устраивает?
#59 by ЗлобнийМальчик
а почему супервайзер  - это суперкласс учителя а не ученика?
#60 by izekia
угу, офигенно классно, а чтобы знать какому супервайзеру сообщить о задаче мы еще один класс создадим в чем выигрыш?
#61 by ЗлобнийМальчик
НЕТ ЦИКЛИЧЕСКИМ ССЫЛКАМ!!!! я так понимаю
#62 by izekia
то есть отношение просто хранит три ссылки?
#63 by ЗлобнийМальчик
ну типа того. Прямой перенос таблицы отношений на структуру классов
#64 by toypaul
угу
#65 by izekia
мне не нравится такой подход к проектированию, так как в данном случае нет реального объекта соответствующего отношению, и будет некая проблема с распределением функциональности ... с точки проектирования бд может это и хорошо, но с точки зрения ООП мне вообще такое не нравится
#66 by izekia
=> нет такого объекта, как отношение
#67 by ЗлобнийМальчик
зато парсер писать не надо....
#68 by HeroShima
есть. у него ещё и тонна свойств может быть
#69 by ЗлобнийМальчик
к тому же вопрос о том есть такой объект как отношение или нету - я для себя не решил. Может кто извеликих на эту тему высказывался?
#70 by izekia
в Лиспе?)
#71 by ЗлобнийМальчик
в C# например
#72 by Aprobator
ну какой ты 1С ник?
#73 by izekia
да как решение с точки построения бд, оно вполне изящно, просто классы не обязательно должны копировать структуру бд
#74 by izekia
нене, надо в Лиспе)
#75 by orefkov
Вы пипец какие-то. Неужели циклические ссылки кому-то мешают жить? Они ведь везде и всегда. Сын папу что, через его любовницу должен только знать? В схеме вообще непонятно что нарисовано - какие-то классы, хотя ссылки могут быть не у классов, а у объектов друг на друга. Никаких проблем нет с циклическими ссылками. сборщик мусора нормальный или sharedptr/weakedptr.
#76 by ЗлобнийМальчик
лисп - это для меня слишком сложно... да и денех за него не плотют вроде... не должны. Но часто копируют. Это же удобно базу то мы проектируем исходя из реальных объектов - вполне логичненько перенести эту структуру на слой бизнес логики
#77 by izekia
а где в твоем рассуждении структура бд?
#78 by ЗлобнийМальчик
мы тут извращаемся в рамках поставленной автором задачи я вот лично не представляю себе зачем в реальности мне бы понадобилось от них избавляться и заморачиваться по их поводу на этапе проектирования
#79 by izekia
лисп и ооп лежат в разных плоскостях
#80 by ЗлобнийМальчик
это скорее мой прием как одноэснега бывшего по проектированию классов: сначала представь как бы ты хранил данные системы в таблицах. А потом преобразуй таблички в классы. Но вы совершенно правы - в описании задачи нет никакого указания на базу данных
#81 by ЗлобнийМальчик
ок. Не знаю и ничего не желаю знать про лисп
#82 by HeroShima
лисп - метаязык. он лежит более в области ооп чем С++, это уж точно
#83 by Ненавижу 1С
как это зачем? а классика? модель не должна ничего знать о представлении и т.д.
#84 by izekia
да речь о том, что хирашима хотел решать поставленную абстрактную задачу про классы на лиспе, предварительно еще пихнув ссылку на обджектив си зачем-то
#85 by HeroShima
её можно решать хоть на асме
#86 by ЗлобнийМальчик
event спасет отца русской демократии. Это если вы про MVC
#87 by izekia
пример класса кружка на лиспе можно? три метода: Добавить, Отлить, ПолучитьОбъемЖидкости
#88 by Ненавижу 1С
это уже синтаксический сахар пошел, а если посмотреть как он реализуется внутри, то примерно схему с добавленными классами и получим
#89 by izekia
не надоело еще чушь нести?
#90 by ЗлобнийМальчик
наверное... я так глубоко не интересовался....
#91 by HeroShima
ты ничерта не понимаешь в ООП
#92 by ЗлобнийМальчик
а что, это сложно???? я совершенно искренне спрашиваю...
#93 by izekia
ну ты почему не хочешь понять, что я уже давно написал ... ты привел пример трех объектов из реальной жизни, на самом деле у них может быть столько функциональности, которой их можно напичкать, и которая в рамках конкретной задачи вообще не будет нужна, нужно исходить из необходимой функциональности и проектировать соответственно
#94 by izekia
лол
#95 by HeroShima
"и он ещё улыбается")
#96 by izekia
я смеюсь во весь голос скорее, видимо что означает данная аббревиатура, Вы так же хорошо знаете можно пример такого класса на классическом лиспе?
#97 by izekia
первых двух абзацев должно хватить для понимания того о чем речь
#98 by izekia
на самом деле для расширения кругозора, а не для заработков, я бы порекомендовал поизучать какой-нибудь функциональный язык, хотя я в свое время выбрал хаскелл
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С