0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 95
1

Проектирование ООП, ссылки друг на друга

14.01.2019, 12:35. Показов 3592. Ответов 9

Author24 — интернет-сервис помощи студентам
Всем привет! Недавно решил углубить знания в ООП. Надоело костыли писать, которые к тому же потом не расширить((
Придумал небольшой пример и на этапе проектирования зашел в тупик.

Система договоров. Имеет стороны - между кем заключается договор. Также имеет "условия" договора - задачи сторон.
Например. Есть электрик(физ. лицо) и магазин(юр. лицо). Магазин заключает договор с электриком на установку розетки(задача). Электрик должен выполнить работу, а магазин должен ее оплатить.

Проектирование ООП, ссылки друг на друга


Так вот. Как по правильному сделать, что-бы классы ссылались друг на друга. Лицо должно знать о своих Договорах. Так же как Договор должен знать о Лицах, подписавших его. Что-бы Электрик знал.. через договор.. Магазин со сломанной розеткой.
У договора может быть от двух и больше сторон. У лиц так же может быть много разных договоров.

Что это за связь? через что она реализуется? Или может у меня структура не верная?

С точки зрения ООП.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2019, 12:35
Ответы с готовыми решениями:

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
<?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла...

Можно ли на сайтах с такими IP устанавливать друг на друга ссылки?
Вопрос в заголовке. Вот IP: 85.221.148.34 85.221.149.130 85.221.150.238 Ну и т.д. Думаю...

Проектирование ООП программы
Привет, начал писать большие программы, без планирования, в итоге , приходится переписывать по 100...

Наложение друг на друга
Добрый день форумчане у меня происходит вот такое с чем это может быть связано?

9
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
14.01.2019, 12:50 2
Цитата Сообщение от GSerge Посмотреть сообщение
С точки зрения ООП.
В этих делах нужно смотреть с точки зрения теории принятия решений. Т.е. решения принимает тот объект который имеет всю полноту данных необходимых для принятия решений. Ну и соответсвенно ссылки должны быть на всех с кого он эти данные должен получить и кого о своих решениях оповестить. В общем то на этом все паттерны и построены.
Цитата Сообщение от GSerge Посмотреть сообщение
Что это за связь? через что она реализуется? Или может у меня структура не верная?
В общем то так или иначе что то в духе обсервера. Вообще современные иерархии в основном вокруг композит+обсервер+лигтвеигхт крутятся.
Так что двунаправленные связи скорее норма чем странность. Странность обычно если их нет. К примеру искоробочные фреймверки дельфы полностью на таких двунаправленных взаимосвязях живут
А реализуется в зависимости от языка, но как бы в любом наборе это указатель на другого в каждом из классов и механизм установки и разрыва взаимосвязи. В примитивных языках уровня Симулы (Java, С#, Delphi и т.п.) оный механизм взаимосвязей обычно пишется вручную вручную для каждой конкретной двунаправленной связи. В современных в духе С++ можно и автоматику для этого дела соорудить.
1
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
14.01.2019, 13:20 3
Цитата Сообщение от GSerge Посмотреть сообщение
Как по правильному сделать, что-бы классы ссылались друг на друга. Лицо должно знать о своих Договорах. Так же как Договор должен знать о Лицах, подписавших его.
В класс Договор добавляете свойство "Список лиц (стороны)". В класс Лицо добавляете свойство "Список договоров".

Добавлено через 4 минуты
Цитата Сообщение от GSerge Посмотреть сообщение
У договора может быть от двух и больше сторон. У лиц так же может быть много разных договоров.
Что это за связь? через что она реализуется?
Если данные хранятся в реляционной базе данных, то связь "многие ко многим" реализуется с помощью дополнительной таблицы с двумя полями - "ид договора" и "ид лица".

Добавлено через 5 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В примитивных языках уровня Симулы (Java, С#, Delphi и т.п.) оный механизм взаимосвязей обычно пишется вручную вручную для каждой конкретной двунаправленной связи.
В "примитивных" языках обычно используются ORM.
1
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 95
14.01.2019, 14:11  [ТС] 4
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
композит+обсервер+лигтвеигхт
Спасибо большое. Новые интересные слова, не знал о них((

Вот думаешь что умеешь программировать (это я о себе). Делаешь разные проекты. И все вроде бы хорошо) До момента расширения функционала))

Как же много того, чего я еще не знаю) Пишу на C#. Надеюсь мне это поможет с двунаправленной связью)

Чем больше знаешь - тем больше понимаешь, что ничего не знаешь)) Спасибо)
0
54 / 45 / 18
Регистрация: 09.02.2015
Сообщений: 165
15.01.2019, 06:05 5
Не давно читал о таком приеме.
Есть два вида такого отношения, агрегирование и композиция.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
15.01.2019, 12:10 6
Цитата Сообщение от zoom59rus Посмотреть сообщение
Не давно читал о таком приеме.
Есть два вида такого отношения, агрегирование и композиция.
Агрегация и композиция не имеют отношения к теме.
0
35 / 30 / 6
Регистрация: 21.08.2015
Сообщений: 121
18.01.2019, 16:43 7
Привет!
Цитата Сообщение от GSerge Посмотреть сообщение
С точки зрения ООП
Есть такое ООП
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
решения принимает тот объект который имеет всю полноту данных
А есть такое
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
18.01.2019, 17:23 8
Цитата Сообщение от tmash Посмотреть сообщение
А есть такое
И чем оно противоречит утверждению что решение должен принимать тот объект который имеет для этого всю полноту данных?
Это как раз тот принцип который позволяет упростить построение иерархии следующей этим принципам. Т.е. по факту упорядочить механизмы взаимодействия объектов и четко разделить между ними зоны ответственности.
0
35 / 30 / 6
Регистрация: 21.08.2015
Сообщений: 121
06.02.2019, 17:01 9
Привет!
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
объект который имеет для этого всю полноту данных
Смотрю на Ваш профиль ... сильно! Не то что я.
Вы реально не знали, что в ООП не нужны "главные", "всё знающие" объекты? И это отличает его от процедурного стиля разработки?
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
08.02.2019, 00:31 10
Цитата Сообщение от tmash Посмотреть сообщение
Вы реально не знали, что в ООП не нужны "главные", "всё знающие" объекты? И это отличает его от процедурного стиля разработки?
А кто говорит про все знающие? Речь идет как раз про то что для полиморфных типов многие решения может принимать только подчиненный, потому что главный даже типа его точного не знает. Но об этих решениях он должен так или иначе сообщать главному. Отсюда и необходимость в обратных связях.
0
08.02.2019, 00:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2019, 00:31
Помогаю со студенческими работами здесь

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

div наползают друг на друга
Здравствуйте, скажите пожалуйста как решить проблему с наложением блоков друг на друга есть 2...

Папки накладываются друг на друга
помагите пожалуйста!открываю мой компьютер далее любой диск и папки а папка с моим компьютером и...

Таблицы ссылаются друг на друга
Добрый день возник вопрос, как правильно организовать привязку таблиц между собой. Есть таблица...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru