Я разрабатываю классы для технического решения чертежей. Я должен работать с геометрическими примитивами. Пример:Молчаливое изменение класса? возможно ли это в Ruby
# all specifications are left, bottom and width, height
class Circle
# +--- this is for my later question
# v
def initialize(x,y,w,h=w) # left, bottom and w=x+2*radius
...
end
end
# the Ellipse needs 4 specifications (no rotation here)
class Ellipse
def initialize(x,y,w,h) # left, bottom and w=2*a, h=2*b
...
end
end
Если кто-то будет использовать что-то вроде
primitive=Cricle.new(10,10,20,30) # note different width and height
было бы возможно вернуть Ellipse
вместо (немного как: "либеральным в том, что вы принимаете ... Jon Принцип устойчивости Postel)?
Я думаю, что просто include Ellipse
должен сделать трюк, так как кругом и Ellibse более или менее равны, я не стараюсь, но это изменило бы class.name
, и что будет происходить (в Ruby), если я могу это сделать?
Я не думаю, что это имеет смысл. Поскольку они отличаются только этими измерениями, я не верю, что есть необходимость в другом классе. Круг - это эллипс. – Ross
@ Ross: да, это, вычисляя площадь круга, думая об этом как эллипс с a = b, стоит дорого, а использование «if» прерывает OO. Я думаю, что есть причина, почему даже в SVG есть и тег –
halfbit
OK, тогда наследование - это ответ! (например, ответ Джеффри ниже) – Ross