![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую!
Вот пример: есть три способности: firstability, secondability and thirdability. Нужно запрограммировать несколько классов с различным набором этих способностей. Среди способностей нет никаких конфликтов (с т.з. программирования). Самый простой и понятный способ запрограммировать эти классы - создать 3 класса: firstable, secondable и thirdable. После чего наследовать все остальные (искомые) классы от комбинации этих трех. Но, видимо, в языке Java there is no multiple inheritance. Как такая и эквивалентные этой задаче решаются на языке Java? Обратите внимание, что способностей может быть гораздо больше трех. Премного благодарен. Сув. neutrino. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Это решается через интерфейсы - интерфейсов может быть наследовано сколько угодно.
Внутри этого сложного класса создаешь три объекта и внутри интерфейсного методы вызываешь метод уже нужного объекта. |
|||
|
||||
| djGri |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 21.2.2005 Репутация: 1 Всего: 3 |
Можно, но обрати внимание:
Если хочешь сделать это грамотно, то пользуйся паттерном. Для твоего случая нужен Decorator Это сообщение отредактировал(а) djGri - 27.6.2005, 20:31 |
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Зачем, если не секрет? -------------------- |
|||
|
||||
| djGri |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 21.2.2005 Репутация: 1 Всего: 3 |
Это классический случай для Decorator'a |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Применять или не применять паттерн для решения задачи зависит от условия здачи прежде всего. Если идет речь о способностях и о том, чтобы наделить ими некие классы, самым естественным решением будет создать несколько интерфейсов и унаследовать от них. Тем самым мы выигрываем полиморфизм. Недаром на интерфейсах держится вся Java - возьмем JButton : она наследует от Accessible, ImageObserver, ItemSelectable, MenuContainer, Serializable, SwingConstants - любой баттон будет обладать соответствующими свойствами.
Декоратор же нужен для наделения некими свойствами отдельных объектов, а не всего класса. -------------------- |
|||
|
||||
| djGri |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 21.2.2005 Репутация: 1 Всего: 3 |
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Так классов же. Т.е. все объекты класса будут обладать этими способностями.
-------------------- |
|||
|
||||
| djGri |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 21.2.2005 Репутация: 1 Всего: 3 |
Да, ты прав Но это когда не думают о паттернах |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Спасибо всем за ответы.
Однако, если использовать интерфейсы, то их реализацию придется осуществлять в каждом классе? Т.е. по сути интерфейс - абстрактный класс. Если мне потребуется сделать, например, FirstableAndSecondableClass и SecondableAndThirdableClass; допустим интерфейсы у меня есть, тогда:
Но в таком случае я реализовываю интерфейс Secondable два раза. В моей задаче мне может потребоваться реализация одного и того же интерфейса 10 раз. Реализация каждого интерфейса в любом классе одинаковая. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| djGri |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 21.2.2005 Репутация: 1 Всего: 3 |
Почитай про Decorator
|
|||
|
||||
| AntonSaburov |
|
||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Зачем два раза.
Есть у тебя интерфейсы A и B
Например у тебя уже есть реализация интерфейса A и B в виде классов ClassA и ClassB. Дальше делаем так:
Т.е. надо сделать только обертки. Кстати такие обертки можно сделать с помощью IDE - надо только внутрь вызовы поставить для объектов. Работы на 5 минут. |
||||
|
|||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
AntonSaburov, такое решение не есть удобное, т.к. в реализации способностей (интерфейсов) должны изменяться некоторые параметры самого класса (в твоем случае - АВ).
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Ну тут уже кому как и что надо. Просто если есть класс, который уже все что надо умеет - пользуем его. Если же надо что-то еще добавить, то добавляем. Я же не полную реализацию показывал, а идею. Если же говорить о множественном наследовании, то он существует только в С++. В остальных языках делают все через интерфейсы. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
AntonSaburov Спасибо!
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |