|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
|
Как правильно составить иерархию классов\интерфейсов?22.02.2015, 21:43. Показов 3166. Ответов 10
Метки нет (Все метки)
Сразу же просьба к модераторам не ругать за такой заголовок. Просто у меня не получается в двух словах описать суть проблемы.
Итак, на изображении моя первая попытка использования интерфейсов. А место где я застрял - класс MG_DrawingRenderable. Для начала опишу идею подробней: есть класс MG_Drawing, позволяющий работать с группой элементов, реализующих MG_I_DrawingElement. А так же есть класс MG_DrawingRenderable, который должен расширять MG_Drawing и уметь отображать на Graphics2D себя (свои элементы, реализующие MG_I_DRElement, дословно - элемент чертежа отображаемый ). Следовательно, элементы MG_I_DRElement это те же MG_I_DrawingElement только ещё с методом рисования. А класс MG_DrawingRenderable - тот же MG_Drawing, но так же с методом render(). Проблема в том, что класс MG_DrawingRenderable работает с расширенными версиями элементов MG_I_DrawingElement, с которыми работает класс MG_Drawing и если я наследую MG_DrawingRenderable от MG_Drawing, то нужно как-то указать это. Иначе в MG_DrawingRenderable наследуются методы, принимающие некорректные для этого класса объекты. А просто переопределить метод с изменением типа входных параметров нельзя.А для тех, кто знает решение бонус: найдите ошибки в организации программы. На самом деле я просто хочу, чтобы кто-то проверил правильность структуры так как понятия не имею как используются интерфейсы и делал наугад ))
0
|
|
| 22.02.2015, 21:43 | |
|
Ответы с готовыми решениями:
10
Java SE - Правильно ли я понимаю применение интерфейсов и абстрактных классов ?
|
|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
||||||||||||
| 25.02.2015, 10:46 [ТС] | ||||||||||||
|
А тут ничего сложного:
Что-то тону... Добавлено через 21 час 44 минуты Что, нет идей? Добавлено через 31 минуту Без интерфейсов всё работало почти идеально, а когда я решил их добавить, пришлось переделывать практически всю программу. При этом возникла такая путаница, что я сильно пожалел об этом. А всего-то нужно было в единственном классе использовать множественное наследование.Добавлено через 3 часа 26 минут Понятия не имею что произошло.Добавлено через 13 часов 2 минуты В общем, я рано радовался. Программа хоть и заработала, но остались дыры, про которые я говоил выше. Написал демку, чтобы проблема была ещё понятней. Прошу дописать закомментированный класс.
0
|
||||||||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 26.02.2015, 09:34 | |
|
Лучше опишите вашу задачу так, как она была вам поставлена. Построенная вами иерархия может быть совершенно верна, а может быть в корне неправильная. Без постановки задачи не понятно.
Когда что-то отрисовывается на ум сразу приходит множественная диспетчеризация.
0
|
|
|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
|
| 26.02.2015, 10:07 [ТС] | |
|
lemegeton, класс Drawing(чертёж) позволяет работать с группой объектов DrawingElement(точка, отрезок...) класс DrawingRenderable добавляет возможность этот чертёж отображать посредством отрисовывания расширенных (DRElement) элементов DrawingElement, умеющих теперь отрисовывать самих себя.
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||||||||||||||||||||||||||||||||
| 26.02.2015, 11:26 | ||||||||||||||||||||||||||||||||||||
Сообщение было отмечено x_Alex_x как решение
Решение
Да, похоже, что речь про диспетчеризацию. Чертеж должен всех отрисовывать.
Классическая задача. В приложении изображение диаграммы классов. На словах: Есть интерфейс Drawable, общий для всех отрисовываемых фигур. Есть интерфейс Canvas (полотно), умеющий отрисовывать каждую реализацию Drawable. Есть SimpleTextOutputCanvas, который является реализацией канваса и реализовывает отрисовку конкретных фигур. Есть Point и Line, которые позволяют отрисовывать себя через канвас. Есть Drawing (чертеж), который содержит коллекцию Drawable и один Canvas, на котором это все отрисовывается. Магия в том, что Point и Line отдают управление отрисовкой себя в Canvas. Код: Абстракции: Drawable (отрисовываемое)
Canvas (полотно, на котором отрисовывается)
Реализации: Point (точка)
Line (линия)
SimpleTextOutputCanvas (простое полотно, выводящее фигуры текстом)
Чертеж, собирающий воедино отрисовывоемое и отрисовывающего (можно сделать более гибко): Drawing
Пример использования: Launcher
1
|
||||||||||||||||||||||||||||||||||||
|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
|
| 26.02.2015, 12:17 [ТС] | |
|
lemegeton, у меня пара вопросов:
Ваш Drawing это что-то типа моего DrawingRenderable, то есть это чертёж, который может отрисовываться. Но чертёж же не обязательно должен это уметь и где-то должен быть чертёж, который отвечает только за работу с элементами, которые опять же не Drawable. И ещё: в классе SimpleTextOutputCanvas метод draw реализуется для каждого элемента. А если будут добавляться новые элементы, придётся добавлять и новую реализацию draw в никак не связанный с этим элементом SimpleTextOutputCanvas. А в чём вы диаграмму составляли? Она составлена на основе кода?
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||
| 26.02.2015, 15:28 | |||||
|
Приведенный мной метод стар как само программирование. Называется "двойная диспетчеризация" или "множественная диспетчеризация".
Она нужна если вы собрались делать несколько реализаций выводов. Например, вывод на принтер, на экран и в файл.
1
|
|||||
|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
|||
| 26.02.2015, 15:51 [ТС] | |||
|
0
|
|||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 27.02.2015, 18:14 | |
|
Как-то непонятно, какая от этого польза. Усложняете же. Тогда нужно сделать наследника для каждого элемента геометрии, который будет имплементить Drawable.
1
|
|
|
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
|
|
| 28.02.2015, 19:32 [ТС] | |
|
lemegeton, согласен, что усложняю, но я как-то сразу не додумался до этого.
0
|
|
| 28.02.2015, 19:32 | |
|
Помогаю со студенческими работами здесь
11
Как сделать иерархию классов? Как лучше построить иерархию классов Как лучше сделать иерархию классов? Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов Подскажите как лучше всего реализовать иерархию классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|