|
5 / 5 / 2
Регистрация: 21.07.2016
Сообщений: 34
|
|||||||||||||||||||||
Доступ к дочерним классам из родительского27.07.2016, 06:14. Показов 7820. Ответов 4
Метки нет (Все метки)
Многим известно, что родительский класс ничего не должен знать о своих потомках. Упоминание дочерних классов в родительском считается плохим тоном, нарушающим принципы ООП и т.п. (в Java я знаю только один случай такого - это класс Number). Но у меня возникла ситуация, в которой задача прекрасно решается этим самым "плохим тоном". А пишу я сюда, потому что практически уверен, что имеется иной, более правильный способ, и, быть может, вы его подскажете.
Задача самая что ни на есть типичная. Имеется список объектов, который выводится в GUI-списке (неважно, будь то ListView или TreeView). Объекты разные и потому у них очень много различающихся полей. Но все они - потомки одного класса, назовем его Animal:
Как делаю я. Т.к. получить можно только родительский класс, то в него я и добавляю ссылки на всех его потомков:
0
|
|||||||||||||||||||||
| 27.07.2016, 06:14 | |
|
Ответы с готовыми решениями:
4
Доступ к классам апплета Использование родительского метода с дочерним параметром Доступ к методу родительского класса из метода свойства родительского класса |
|
Автоматизируй это!
|
||||||
| 27.07.2016, 10:51 | ||||||
|
JavaFX2, а мне понравилось твое решение, необычно!
я бы конечно сделал не в родительском классе, а в коде нечто вроде
0
|
||||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|||
| 27.07.2016, 11:29 | |||
|
JavaFX2, решение вашей задачи должно начинаться с правильно архитектуры. Такого рода задачи решаются через интерфейсы и\или абстрактные методы базового класса. Если кратко, то вам нужно определить некий интерфейс который описывает поведение объекта когда на него кликнули. Затем базовый класс должен имплементировать этот интерфейс и описать базовое поведение. Поведение дочерних классов должно описываться в дочерних классах и при надобности вызываться через абстрактные методы базового класса. Так же можно написать некий вспомогательный класс скажем ListViewPopulator, который будет работать с объектами интерфейса и будет знать как отображать каждый объект. На словах объяснить довольно сложно. Попробуйте составить архитектуру, построить диаграмму классов и выложить её сюда прежде чем начнете писать код.
0
|
|||
|
5 / 5 / 2
Регистрация: 21.07.2016
Сообщений: 34
|
|||||||||||
| 12.08.2016, 10:22 [ТС] | |||||||||||
|
Потребовалось расширить функционал программы, и заодно решил провести рефакторинг в тех местах, где он явно просится. Разумеется, вышеописанная проблема - одно из них. И честно говоря, чуть ли не единственное, требующее рефакторинга.
KEKCoGEN, я несколько раз возвращался к тому, как можно заменить явное указание дочерних классов на более-менее адекватный полиморфизм в рамках ООП. Но полностью устраивающего меня решения я так и не нашел. Наверное мне не хватило степени абстрагирования, в попытках найти решение через Единственное, что мне пришло в голову - это передавать переопределяемым (в дочерних классах) методам сам контроллер, в котором прописаны ВСЕ поля textfield, которые вообще участвуют в биндинге. И далее уже в каждом дочернем классе использовать те поля, которые этому дочернему классу необходимы:
Первое, что напрашивается - это перевести всю логику биндинга в третий отдельный класс, который и будет связывать контроллер и классы Animal (назовем для простоты Helper) - какое-никакое, но улучшение. Только вот, что писать в контроллере после Animal animal = list_view.getSelected()? Helper.bind(controller, animal)?? Не пойдет. Ведь Helper не знает заранее, какой именно Animal выделен и мы вернулись к тому, с чего начали - к проблеме определения текущего подкласса. Значит надо делать как-то иначе, а все размышления по поводу поведенческих интерфейсов и ListViewPopulator мне ничего не дали... Так что тут у меня кончились идеи и поэтому буду благодарен, если кто поделится своими.
0
|
|||||||||||
|
Автоматизируй это!
|
|
| 12.08.2016, 22:27 | |
|
JavaFX2, а не думал в родительском абстрактном классе реализовать просто все? все методы и поля прописать -хвосты, рога, плавники, этакий суперпредок всех многоклеточных
. А уже в конкретных реализациях оверрайдить нужные методы и полям что то присваивать, остальное оставляя пустым? Соответственно при выборе кого то из потомков нам не важно кто это, просто все не пустые поля выводим.
0
|
|
| 12.08.2016, 22:27 | |
|
Помогаю со студенческими работами здесь
5
Доступ к дочерним объектам TableView
CSS: доступ к классам Выборочный доступ к классам. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|