Форум программистов, компьютерный форум, киберфорум
Наши страницы
ООП и паттерны
Войти
Регистрация
Восстановить пароль
 
GSerge
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 84
1

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

14.01.2019, 12:35. Просмотров 494. Ответов 9

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

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

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


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

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

С точки зрения ООП.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2019, 12:35
Ответы с готовыми решениями:

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

Проектирование сложных систем - ООП. Покритикуйте код, пожалуйста! Заключение (надеюсь)
Доработал программу. Постарался учесть замечания 0x10, на счёт запутанности и глобальных...

Как в 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
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,241
Завершенные тесты: 3
14.01.2019, 12:50 2
Цитата Сообщение от GSerge Посмотреть сообщение
С точки зрения ООП.
В этих делах нужно смотреть с точки зрения теории принятия решений. Т.е. решения принимает тот объект который имеет всю полноту данных необходимых для принятия решений. Ну и соответсвенно ссылки должны быть на всех с кого он эти данные должен получить и кого о своих решениях оповестить. В общем то на этом все паттерны и построены.
Цитата Сообщение от GSerge Посмотреть сообщение
Что это за связь? через что она реализуется? Или может у меня структура не верная?
В общем то так или иначе что то в духе обсервера. Вообще современные иерархии в основном вокруг композит+обсервер+лигтвеигхт крутятся.
Так что двунаправленные связи скорее норма чем странность. Странность обычно если их нет. К примеру искоробочные фреймверки дельфы полностью на таких двунаправленных взаимосвязях живут
А реализуется в зависимости от языка, но как бы в любом наборе это указатель на другого в каждом из классов и механизм установки и разрыва взаимосвязи. В примитивных языках уровня Симулы (Java, С#, Delphi и т.п.) оный механизм взаимосвязей обычно пишется вручную вручную для каждой конкретной двунаправленной связи. В современных в духе С++ можно и автоматику для этого дела соорудить.
1
Shamil1
Модератор
2257 / 1540 / 351
Регистрация: 26.03.2015
Сообщений: 5,504
14.01.2019, 13:20 3
Цитата Сообщение от GSerge Посмотреть сообщение
Как по правильному сделать, что-бы классы ссылались друг на друга. Лицо должно знать о своих Договорах. Так же как Договор должен знать о Лицах, подписавших его.
В класс Договор добавляете свойство "Список лиц (стороны)". В класс Лицо добавляете свойство "Список договоров".

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

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

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

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

Чем больше знаешь - тем больше понимаешь, что ничего не знаешь)) Спасибо)
0
zoom59rus
6 / 6 / 6
Регистрация: 09.02.2015
Сообщений: 51
Завершенные тесты: 1
15.01.2019, 06:05 5
Не давно читал о таком приеме.
Есть два вида такого отношения, агрегирование и композиция.
0
Shamil1
Модератор
2257 / 1540 / 351
Регистрация: 26.03.2015
Сообщений: 5,504
15.01.2019, 12:10 6
Цитата Сообщение от zoom59rus Посмотреть сообщение
Не давно читал о таком приеме.
Есть два вида такого отношения, агрегирование и композиция.
Агрегация и композиция не имеют отношения к теме.
0
tmash
9 / 9 / 1
Регистрация: 21.08.2015
Сообщений: 35
18.01.2019, 16:43 7
Привет!
Цитата Сообщение от GSerge Посмотреть сообщение
С точки зрения ООП
Есть такое ООП
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
решения принимает тот объект который имеет всю полноту данных
А есть такое
0
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,241
Завершенные тесты: 3
18.01.2019, 17:23 8
Цитата Сообщение от tmash Посмотреть сообщение
А есть такое
И чем оно противоречит утверждению что решение должен принимать тот объект который имеет для этого всю полноту данных?
Это как раз тот принцип который позволяет упростить построение иерархии следующей этим принципам. Т.е. по факту упорядочить механизмы взаимодействия объектов и четко разделить между ними зоны ответственности.
0
tmash
9 / 9 / 1
Регистрация: 21.08.2015
Сообщений: 35
06.02.2019, 17:01 9
Привет!
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
объект который имеет для этого всю полноту данных
Смотрю на Ваш профиль ... сильно! Не то что я.
Вы реально не знали, что в ООП не нужны "главные", "всё знающие" объекты? И это отличает его от процедурного стиля разработки?
0
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,241
Завершенные тесты: 3
08.02.2019, 00:31 10
Цитата Сообщение от tmash Посмотреть сообщение
Вы реально не знали, что в ООП не нужны "главные", "всё знающие" объекты? И это отличает его от процедурного стиля разработки?
А кто говорит про все знающие? Речь идет как раз про то что для полиморфных типов многие решения может принимать только подчиненный, потому что главный даже типа его точного не знает. Но об этих решениях он должен так или иначе сообщать главному. Отсюда и необходимость в обратных связях.
0
08.02.2019, 00:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2019, 00:31

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

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

Наложение изображения друг на друга
Допустим есть Image1. Хочу реализовать следующее: - загружаю еще картинку которую я могу...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru