Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
1

Отсутствие множественного наследования

17.02.2015, 12:11. Показов 698. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! У меня есть интерфейс GeometryObject, описывающий геометрические фигуры. От него наследуются такие классы как: Point и Line, и они имеют различные, свойственные для них методы. Теперь мне нужно создать расширенные классы геометрических фигур, с которыми работало бы графическое окно. То есть появляются новые классы, расширяющие функциональность прежних, а так же имеющие методы, одинаковые для всех GraphicsGeomObj (к примеру, смена цвета). GraphicsGeomObj не может быть абстрактным, а если его сделать интерфейсом, то придётся у всех потомков создавать одинаковые методы типа setColor, что опять же неправильно, так как будет дублирование кода.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2015, 12:11
Ответы с готовыми решениями:

Использование интерфейсов вместо множественного наследования
У меня есть несколько свинговских форм, все они наследуют JFrame, т.е. наследовать больше я ничего...

Делема множественного наследования
Все перерыл, уже начинаю думать, что это косяк С#. есть 3 интерфейса A B C и 2 класса 1 класс...

ООП без множественного наследования
Доброго времени! Нужно посчитать поля от станции в точках. Расчёт может производиться как...

Иерархия множественного наследования и шаблон
Имеется абстрактный класс Playerpublic abstract class Player {...}от него наследую 2 класса: User и...

13
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.02.2015, 12:34 2
приведите конкретный пример проблемы в иерархии.
Например у вас есть GeometryObject --> Point --> ???
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
17.02.2015, 12:53  [ТС] 3
Не силён в UML. На рисунке схема при доступном множественном наследовании.
Миниатюры
Отсутствие множественного наследования  
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.02.2015, 16:07 4
Java
1
2
3
4
5
6
7
public interface GeometryObj
 
public abstract class GraphicsGeomObj implements GeometryObj
 
pubic class Point extends GraphicsGeomObj 
 
public class GraphicsPoint extends Point
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
17.02.2015, 18:05  [ТС] 5
KEKCoGEN, по моей задумке класс Point не должен ничего знать о классе GraphicsGeomObj и тем более наследоваться от него. Этот класс является реализацией двумерного вектора и ему не нужно знать о том, что его могут где-нибудь отображать. А вот класс GraphicsPoint, помимо унаследованных от Point методов, умеет так же отображать себя на экране.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
17.02.2015, 20:45 6
по вашей задумке неясно как себя ведет GraphicsGeomObj. Если например он наследует от круга и линии, то у него должны быть методы получения радиуса и вектора направления например? Это неправильно.
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
18.02.2015, 14:48  [ТС] 7
GraphicsGeomObj объединяет такие классы как GraphicsPoint и GraphicsLine, а так же содержит поля и реализованные методы, одинаковые для этих классов. Получается у экземпляра класса GraphicsPoint я могу вызывать методы как класса Point (так как Point его предок)(например метод move(), который по-разному реализован у Point и у Line), так и методы класса GraphicsGeomObj (например setColor(), который одинаков для GraphicsPoint и для GraphicsLine)

Добавлено через 17 часов 17 минут
Что-то тема тонет.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.02.2015, 18:17 8
Мне ваша структура кажется неверной. Может кто-нибудь ещё варианты предложит
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
18.02.2015, 18:54  [ТС] 9
Ну я и не говирил, что она верна, просто показал какой хочу результат. Но всё равно спасибо что поучаствовали)
0
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
18.02.2015, 20:48 10
x_Alex_x, Можно попробовать выделить все методы GraphicsGeomObj в интерфейс, реализовать его, в классе GraphicsGeomObj и GraphicsPoint. Инкапсулировать объект GraphicsGeomObj в классе GraphicsPoint и делегировать ему управление.
0
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
18.02.2015, 21:52  [ТС] 11
Kochmarik, поправьте если я неправильно понял: нужно методы, общие для графических элементов вынести в отдельный класс и в каждом объекте типа GraphicsPoint хранить экземпляр такого класса? Таким образом становится достопным вызов:
Java
1
2
3
GraphicsPoint gp = new GraphicsPoint();
gp.move();
gp.graphicsGeom.getColor();
Хоть вызов метода идёт не напрямую, зато пропадает дублированный код.
0
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
18.02.2015, 22:20 12
x_Alex_x, Я немного другое имел в виду, но так, кажется, даже лучше

Добавлено через 19 минут
Я говорил о реализации интерфейса таким образом
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface Graphics
{
    public Color getColor();
}
class GraphicsGeomObj implements Graphics
{
    @Override
    public Color getColor()
    {
        return ...
    }
    
}
class GraphicsPoint implements Graphics
{
    private GraphicsGeomObj graphicsGeom;
    public Color getColor()
    {
        return graphicsGeom.getColor();
    }
}
Но, если для вас объем кода, показатель критический, тогда да.
1
20 / 20 / 3
Регистрация: 07.02.2014
Сообщений: 233
18.02.2015, 22:34  [ТС] 13
Kochmarik, для меня главное организация правильной структуры с точки зрения ООП.
0
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
18.02.2015, 22:42 14
x_Alex_x, ну тогда мой вариант, единственный мной известный способ подражания множественному наследованию. Если бы у вас класс GraphicsGeomObj не инкапсулировал поля, можно было бы воспользоваться дефолтными методами в интерфейсе.
0
18.02.2015, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2015, 22:42
Помогаю со студенческими работами здесь

оказывается в с# нет множественного наследования
я как-бы новичок в программировании, возможно неправильно спланировал программу. но смысл в том...

Две игры на принципах множественного наследования
Нужно создать две игры, используя общую иерархию классов. Игра (крестики-нолики) должна быть с...

Из этой программы нужно: разработать алгоритм и создать программу с применением множественного наследования
Из этой программы нужно: разработать алгоритм и создать программу с применением множественного...

На основе указанных классов создать набор классов с использованием множественного наследования
Создать базовый класс «Транспорт» и производные от него классы «Автомобиль», «Поезд», «Самолет»....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru