Вопрос наследования - PullRequest
       26

Вопрос наследования

0 голосов
/ 29 августа 2011

У меня есть программа для рисования, с помощью которой пользователь может нарисовать эллипс или линию, которые оба получаются из формы. Я создаю одну резинку, и в зависимости от того, что рисует пользователь, я говорю

rubberBand = new Ellipse();
//or
rubberBand = new Line();

но если я установлю резинку на линию, я не смогу получить доступ к x1 x2 и т. Д., Значит, форма не содержит определения X1. Я попытался создать Эллипс и привести его к линии, но все еще та же проблема. Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Нужно подумать о принципе замены Лискова:

http://www.objectmentor.com/resources/articles/lsp.pdf http://www.oodesign.com/liskov-s-substitution-principle.html

0 голосов
/ 29 августа 2011

Для меня это звучит как вопрос основного полиморфизма.Подумайте, что вы на самом деле пытаетесь сделать, например, линия имеет 2 точки (X1 / Y1 и X2 / Y2).Эллипс (продолговатый круг) не имеет такого свойства - у него есть ширина, может быть, и высота, и, возможно, координаты X и Y (или свойство позиции).

Я предполагаю, что вы пытаетесь настроить границы и / или местоположение фигуры, когда пользователь перетаскивает ее с помощью мыши.В этом случае операции, которые вам нужно определить для формы, зависят от того, какая это форма.Для строки вам нужно написать метод, который настраивает X2 и Y2 (или что-то еще).Для эллипса вам, вероятно, понадобится другой метод, который регулирует фигуры, которые имеют свойства width, height, left и top.Тогда вам просто нужно определить, какой из них вызывать, в зависимости от того, с какой формой вы имеете дело.

...