|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
|||||||||||||||||||||
Помощь в проектировании ООП решения21.11.2016, 17:15. Показов 1571. Ответов 16
Доброго времени суток комрады!
Пожалуйста помогите подобрать паттерн(если таковой вообще существует) или элегантное ООПшное решение для следующей ситуации: есть массив фигур, ну для простоты
есть абстрактный класс Shape
И всё это ставит меня в тупик...посему у меня к вам пару главных вопросов: 1)Как правильнее выстроить объектную модель (иерархию наследований или композиций \ агрегаций) ? 2)Как сделать удобный интерфейс у них? чтобы всё это было удобно и расширяемо, ну можно было добавлять новые меры или математические операции не изменняя ранее написанный код...
0
|
|||||||||||||||||||||
| 21.11.2016, 17:15 | |
|
Ответы с готовыми решениями:
16
Нужны задачи и решения с использованием концепций ООП Пример решения типичной ООП задачи на языке Haskell Написать программу решения квадратного уравнения с помощью ООП |
|
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
|
||||||
| 21.11.2016, 19:59 | ||||||
0
|
||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
||
| 21.11.2016, 21:21 [ТС] | ||
|
Да ты просто "гений" только вот вопрос не зря стоит в ОО Проектировании решения и\или применении паттернов(кстати модератор мне кажется ты зря переименовал тему)
а не в том как проверить является ли Shape одним из частных случаев реализации конкретной фигуры, с таким подходом ты быстро скатишься в большое кол-во IF'ов...*facepalm* не говоря про то что твой код вообще не учитывает это:
0
|
||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 21.11.2016, 21:59 | |
|
Че-то плохо понимаю, что ты делаешь.
Почему нельзя сделать два класса Shape2D и Shape3D например?
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|||||||||||||||||
| 21.11.2016, 22:00 | |||||||||||||||||
|
Не уверен что верно понял что требуется. Вот решение той проблемы которую я понял. Когда определяется класс-наследник от Shape, он должен декларировать те Measures которые он поддерживает. Удобнее всего через конструктор базового объекта. Пример для Rectange
В вызывающем классе, нам сначала надо отфильтровать те формы, которые поддерживают данный Measure
Таким образом чтобы добавить новую фигуру, достаточно добавить её класс и определить какие меры она поддерживает. Это так же по желанию можно вынести в некий MeasuresManager который будет декларировать какая фигура что поддерживает.
1
|
|||||||||||||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
||
| 21.11.2016, 23:56 [ТС] | ||
|
Должен произойти "гамотный пропуск" суть задания в том что нужно найти итого мер фигур в коллекции т.е. если я задаю знак умножения то перемножаются все меры фигур в коллекции и итого содержит произведения всех мер фигур для которых была справедлива эта мера и насколько я понимаю если для фигуры не справедлива эта мера мы её пропускаем и применяем математический оператор только ктем к которым справедлива мера математический оператор применяется к каждому элементу массива(или коллекции - не важно) содержащему произвольную фигуру (они все разные могут быть какими угодно) и задаётся любая произвольная мера и те фигуры которые поддерживают эту меру вычисляют эту меру по той формуле которая справедлива для этой конкретной фигуры И к этой вычесленной мере применяется математический оператор иии всё это должно быть расширяемым чтобы возможно было бы дописывать к коду новые математические операторы или меры без изменения уже существующего кода....
0
|
||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 22.11.2016, 00:08 | |
|
iwk, выше решение, отвещающее этим критериям.
0
|
|
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
||
| 22.11.2016, 00:20 [ТС] | ||
|
0
|
||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 22.11.2016, 00:28 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
|||||||||||||
| 22.11.2016, 01:01 [ТС] | |||||||||||||
Просто сильно смущает что для КАЖДОЙ фигуры это нужно будет делать вручную....хотя если подумать то другого выхода наверное просто и не существует..
0
|
|||||||||||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||||||||||||
| 22.11.2016, 09:59 | ||||||||||||
|
iwk,
1
|
||||||||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
||||||
| 26.11.2016, 23:26 [ТС] | ||||||
|
KEKCoGEN,
Долго ломал голову, решение подсказали за что большое спасибо, но как то по мне оно слишком прямолинейное слишком мне кажется топорное...заходить в элемент коллекции там прогонять внутренний массив элемента на соответствие заданной мере... мне кажеться не совсем "стиль ООП"... Хотелось бы чтобы была какая то хитрая иерархия наследований благодаря которой с помощью полиморфизма выбирались из коллекции те классы которые поддерживают конкретную меру и в зависимости и от меры и от фигуры(а у фигуры может быть много мер) для каждой фигуры посвоему рассчитывалась эта мера , ну хоть что то отдалённое есь в паттерне стратегия:(но мне нужно что то покруче) код упрощён для наглядности
0
|
||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
|
| 01.12.2016, 23:11 [ТС] | |
|
вопрос всё ещё актуален
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|||||||||||||||||||||||||||||||
| 02.12.2016, 01:52 | |||||||||||||||||||||||||||||||
|
iwk, если не ошибаюсь, в таких случаях используют паттерн Visitor. А так, мультиметоды бы подошли, в Clojure они есть, например.
Добавлено через 59 минут Навскидку (просто в лоб, не знаком с Visitor вообще):
1
|
|||||||||||||||||||||||||||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
||
| 04.12.2016, 13:13 [ТС] | ||
|
korvin_, спасибо за труды, буду разбираться
скажите по вашему замыслу тут должен быть в HashSet<> String ?
0
|
||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
||||||||
| 04.12.2016, 18:29 | ||||||||
1
|
||||||||
|
2 / 2 / 1
Регистрация: 14.11.2014
Сообщений: 38
|
|||||||||||||
| 04.12.2016, 23:05 [ТС] | |||||||||||||
ахренеть ...даа... ![]()
0
|
|||||||||||||
| 04.12.2016, 23:05 | |
|
Помогаю со студенческими работами здесь
17
Нужны советы в поиске способов решения курсовой по ООП Нужна помощь в реализации методов решения задачи. Помощь решении задачи по Теории принятия решения Хочу подарить молодому человеку игровой компьютер, нужна помощь в выборе готового решения О проектировании светодиодной гирлянды... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|