#0
by Ненавижу 1С
Известный прием удаление циклических связей классов - это выделение у одного из классов родительского. Пример Слева циклические связи, справа - после преобразования. В связи с чем у меня два вопроса: 1. Всегда ли любую схему классов можно избавить от циклических связей? 2. В данном примере выделен супер-класс "справа", понятно, что в данном абстрактном примере разницы нет никакой, но в реальных ситуациях, какие критерии выделения "слева или справа" или даже у обоих?
#0
by Ненавижу 1С
Известный прием удаление циклических связей классов - это выделение у одного из классов родительского. Пример Слева циклические связи, справа - после преобразования. В связи с чем у меня два вопроса: 1. Всегда ли любую схему классов можно избавить от циклических связей? 2. В данном примере выделен супер-класс "справа", понятно, что в данном абстрактном примере разницы нет никакой, но в реальных ситуациях, какие критерии выделения "слева или справа" или даже у обоих?
#4
by Avganec
Не надо так говорить... мы не злые... 1. нет ничего невозможного 2. все по логике проектированием занимаются все, кто кода-нибудь разрабатывал с нуля
#7
by Ненавижу 1С
пример. Учитель сообщает ученику задание (учитель знает об ученике), ученик решает задание и говорит его ни кому нибудь, а именно своему учителю (ученик знает, кому надо сообщить)
#11
by izekia
ссылка на учителя в задании, между учителем и учеником вообще не должно быть ссылок, у ученика есть коллекция заданий
#12
by izekia
у учителя есть ссылка на курсы, которые он ведет, у групп есть ссылки на курсы, у ученика есть ссылка на группу
#13
by Ненавижу 1С
ок, тогда Задание ссылается на Учителя Учитель имеет понятие, какое Задание он выдает и связь тоже есть В итоге снова цикл
#15
by HeroShima
а это глобально, или укажи язык, в пределах которого танцевать. IRL циклические зависимости везде!
#17
by izekia
пример копропроектирования, если так проектировать, то конечно надо задумываться над темами типа
#22
by izekia
еще раз повторюсь, у ученика не должно быть ссылки на учителя, в лучшем случае на задание, но она может быть пустой, соответственно у нас тут нет проблемы циклических ссылок, чистим задание и можем удалять, опять же у учителя ссылка на ученика может быть пустой в идеале, есть учитель, есть ученик и есть задание которое содержит ссылки на них обоих, это для целей учета заданий
#26
by HeroShima
дело в том, что мы хотим адекватно представить предметную область и не нарваться при этом на грабли системы реализации. в циклических связях самих по себе ничего вредного нет
#31
by Ненавижу 1С
ссылка это не только поле/свойство класса, это осведомленность класса о другом классе class Teacher { Job* CreateJob; //учитель осведомлен о заданиях } class Job { Teacher* teacher; //задание знает, кто его выдал }
#34
by izekia
одна из сылок лишняя, вся проблема в том, что ты проектируешь исходя из какого-то абстрактного представления, что кто про кого должен знать. А надо просто отталкиваться от необходимой функциональности и исходя из этого проектировать, иначе можно много всего напроектировать
#38
by toypaul
есть учитель есть ученик есть задача есть задача_выданная_учителем_ученику - это отдельный класс
#39
by izekia
первый вариант: к примеру учителю надо раздать и собрать задания, в таком случае целесообразно хранить ссылки на задания у учителя, и методы раздать и собрать будут работать с приватными коллекциями
#47
by izekia
второй вариант, ученик получает задание и сдает его учителю в этом случае оптимально хранить ссылку на учителя в задании, а коллекцию заданий в классе ученик
#50
by izekia
задача, и задача_выданная_учителем_ученику ... это что такое? либо избыточная иерархия, вообще не нужная для данной задачи, либо путаем класс и его инстанс)
#55
by Ненавижу 1С
вот решение согласно схемы в сделаем супер-класс для учителя - супервайзер учитель оповещает ученика о задании и передает ссылку на себя ученику как ссылка на супервайзера ученик не знает ничего про учителя, но осведомлен о некоем супервайзере, сообщает ему о выполненном задании
#57
by toypaul
чот не похоже. какую-то ахинею несешь. в мы выделяем объекты = это ученик, учитель, задача. и отношения. учитель выдал ученику задачу. это отношение, которое мы выделяем в отдельный класс в терминах С++.
#58
by ЗлобнийМальчик
есть учитель есть ученик есть задача есть задача_выданная_учителем_ученику - это отдельный класс добаляем класс - синглтон Менеджер задач - и вуаля. Учителю надо выдать ученику задачу - опращаемся в менеджер и тот создает инстанс класса задача_выданная_учителем_ученику Ученик хочет сдать задачу - обращается в менеджер и сдает устраивает?
#60
by izekia
угу, офигенно классно, а чтобы знать какому супервайзеру сообщить о задаче мы еще один класс создадим в чем выигрыш?
#65
by izekia
мне не нравится такой подход к проектированию, так как в данном случае нет реального объекта соответствующего отношению, и будет некая проблема с распределением функциональности ... с точки проектирования бд может это и хорошо, но с точки зрения ООП мне вообще такое не нравится
#69
by ЗлобнийМальчик
к тому же вопрос о том есть такой объект как отношение или нету - я для себя не решил. Может кто извеликих на эту тему высказывался?
#73
by izekia
да как решение с точки построения бд, оно вполне изящно, просто классы не обязательно должны копировать структуру бд
#75
by orefkov
Вы пипец какие-то. Неужели циклические ссылки кому-то мешают жить? Они ведь везде и всегда. Сын папу что, через его любовницу должен только знать? В схеме вообще непонятно что нарисовано - какие-то классы, хотя ссылки могут быть не у классов, а у объектов друг на друга. Никаких проблем нет с циклическими ссылками. сборщик мусора нормальный или sharedptr/weakedptr.
#76
by ЗлобнийМальчик
лисп - это для меня слишком сложно... да и денех за него не плотют вроде... не должны. Но часто копируют. Это же удобно базу то мы проектируем исходя из реальных объектов - вполне логичненько перенести эту структуру на слой бизнес логики
#78
by ЗлобнийМальчик
мы тут извращаемся в рамках поставленной автором задачи я вот лично не представляю себе зачем в реальности мне бы понадобилось от них избавляться и заморачиваться по их поводу на этапе проектирования
#80
by ЗлобнийМальчик
это скорее мой прием как одноэснега бывшего по проектированию классов: сначала представь как бы ты хранил данные системы в таблицах. А потом преобразуй таблички в классы. Но вы совершенно правы - в описании задачи нет никакого указания на базу данных
#84
by izekia
да речь о том, что хирашима хотел решать поставленную абстрактную задачу про классы на лиспе, предварительно еще пихнув ссылку на обджектив си зачем-то
#87
by izekia
пример класса кружка на лиспе можно? три метода: Добавить, Отлить, ПолучитьОбъемЖидкости
#88
by Ненавижу 1С
это уже синтаксический сахар пошел, а если посмотреть как он реализуется внутри, то примерно схему с добавленными классами и получим
#93
by izekia
ну ты почему не хочешь понять, что я уже давно написал ... ты привел пример трех объектов из реальной жизни, на самом деле у них может быть столько функциональности, которой их можно напичкать, и которая в рамках конкретной задачи вообще не будет нужна, нужно исходить из необходимой функциональности и проектировать соответственно
#96
by izekia
я смеюсь во весь голос скорее, видимо что означает данная аббревиатура, Вы так же хорошо знаете можно пример такого класса на классическом лиспе?
#98
by izekia
на самом деле для расширения кругозора, а не для заработков, я бы порекомендовал поизучать какой-нибудь функциональный язык, хотя я в свое время выбрал хаскелл
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Удаление помеченных на удаление документов
- Удаление помученных на удаление элементов справочников
- Как запретить удаление документа (или пометку на удаление) ?
- Роль: удаление и интерактивное удаление
- Проектирование: С точки зрения ООП объектов в 1С Нет!
- Удаление помеченных на удаление
- Удаление помеченных на удаление с имеющимися ссылками на них
В этой группе 1С
- Нарушение прав при выполнении ПользователиИнформационнойБазы.НайтиПоИмени
- 23 апреля региональный выходной (не праздник) как это отразить в ЗУП
- Где в Зупе заводяться вычеты на детей?
- Удаление помеченных объектов - как узнать кто использовал?
- v7: Пропали тарифы страховых взносов при обновлении БУ 4.5 539 рел
- Оформление колонки ресурсов в СКД
- 8.2 СКД Неправильно рассчитывает начальный/конечный остатки
- Как определить на клиенте 1с8.2 IP
- Задвоились(затроились) начисления при переносе в 1С8:ЗБУ
- зависание при обновление кофигурации базы данных
- УПП. Переоценка и краснота на 62.21
- Полная реструктуризация базы 1С8
- Из внешней обработки обратиться к процедуре в Модуле объекта
- Проблема с очисткой табличной части через com-соединение
- Удаление элемента справочника Организации
- УТ 11 - 1970 год на печтаных формах
- Обмен УТ 10.3 - БП 2.0, распроводятся счет-фактуры
- Как получить пользователей домена из 1С используя LDAP
- Диграмма Ганта
- Почему в БП при закрытии месяца сторнируется 43 счет?