Re: частичный ответ

Date: 2004-06-05 04:01 am (UTC)
yigal_s: (0)
From: [personal profile] yigal_s
> You shouldn't subclass when you don't want a clear IsA relationship :-)

Это верно, но по какому пункту нашей дискуссии или моего ответа Вы это говорите, я не смог понять.

> If you really need this functionality, the "rectangle" class can have a constructor that creates a square.

Вы позабыли про ромбы. Они тоже могут быть квадратами. Что до утверждения, что квадраты не должны быть классами, я бы тут не согласился. Вполне себе должны. Но, увы, не могут. По крайней мере, неконстантные.

> Subclasses should not violate the contract of the superclass, this is a key requirement in OO design.

Золотые слова. Но от них в данном случае не легче.

> Numbers: I don't think real and complex numbers have a subclass-superclass relationship or vice versa. They're just separate entities

Конечно же, нет. Любое действительное число определенно может быть использовано в качестве аргумента функции комплексного аргумента.

> complex*complex can be real, but we can't tell it by checking the class, due to computational errors

Прежде всего, мы вполне можем себе позволить не озаботиться данным случаем, то есть, считать, что complex*complex => complex. И тем не менее, желать иметь вменяемую систему иерархии численных типов. Это наше законное право.
Кроме того, система типов и точность вычислений - понятия ортогональные, мы вполне можем себе позволить рассмотреть систему типов при наличии воображаемой машины, осуществляющей точные вычисления.
Кроме того, мы можем рассмотреть систему "целых" комплексных чисел
Кроме того, мы можем реализовать ТОЧНУЮ рациональную арифметику и полностью избавиться от проблемы погрешности для некоторого класса вычислений даже на обычной машине.

> OO starts to break when we consider binary operations.

А бинарные операции здесь вообще не при чем. Проблема иерархии комплексных и действительных чисел вполне проявляет себя уже на унарных операциях.

> an object of what class should "substring" return

Я полагаю, что если есть желание, можно вернуть класс substring, не нарушив при этом инвариантов базового интерфейса. Разумеется, если имплементация такова, что возращается substring. Если же и производный класс возращает String - это еще проще, разумеется.

> What about matching a subclass of String with a subclass of Regexp

Непонятный пример.

> OO just isn't universal, live with it

И это тоже. Но некоторые из проблем, что я обсуждал, в рамках ОО вполне решаемы. Но не в рамказ парадигмы обычного наследования, что включает в себя одновременно как наследование интерфейса, так и наследование имплементации.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting