Subtypes and Supertypes Setting the Scene


Закладывая основу нашего исследования наследования типов


В этом месяце мы начинаем еще одну минисерию статей, которая посвящается понятиям подтипов, супертипов и наследования типов. Как я упоминал в своей заметке в ноябре 1998 г., эта тема оказалась удивительно сложной -- несмотря на тот факт, что основная идея очень проста. (Как это часто случается, черт скрывается в деталях.) Основную идею можно пояснить с помощью примера. Предположим, что имеются два типа ELLIPSE (эллипс) и CIRCLE (окружность) с очевидным смыслом. Тогда можно сказать, что тип CIRCLE является подтипом типа ELLIPSE (эквивалентно, тип ELLIPSE является супертипом типа CIRCLE), что понимается следующим образом:

  • Каждая окружность является эллипсом, но обратное неверно. (Некоторые эллипсы не являются окружностями.)
  • Следовательно, любая операция, применимая к эллипсам, вообще говоря, применима и к окружностям (поскольку окружности являются эллипсами), но обратное неверно. Например, операция THE_CTR (центр) применима к эллипсам и тем самым к окружностям, но операция THE_R (радиус) применима только к окружностям.
  • Более того, ограничение типа, применимое к эллипсам, вообще говоря, применимо и к окружностям (снова потому, что окружности являются эллипсами), но обратное неверно. Например, если к эллипсу применимо ограничение a >= b (где a и b - большая и меньшая полуоси эллипса соответственно), то окружности должны удовлетворять тому же ограничению. Конечно, для окружностей a и b совпадают с радиусом r, и это ограничение удовлетворяется тривиально; в действительности, к окружностям, но не ко всем эллипсам, в точности применимо ограничение a = b.

Таким образом, тип CIRCLE наследует операции и ограничения от типа ELLIPSE (свободно выражаясь), но имеет также собственные операции и ограничения, не применимые к типу ELLIPSE. Замечание: Здесь и во всей этой серии я буду использовать неуточненный термин "ограничение" в конкретном смысле ограничения типа, а в противном случае явно оговаривать другой смысл. Чтобы напомнить, ограничение типа (называемое также ограничением домена) - специфицирует просто допустимые значения данного типа.

Кстати, в этом месте новички иногда впадают в заблуждение: а именно, подтип обладает подмножеством значений, но супермножеством свойств. (Я использую термин "свойства" в качестве удобного сокращения для "операций и ограничений".) Например, тип CIRCLE содержит подмножество значений типа ELLIPSE, но индивидуальная окружность обладает всеми свойствами эллипса, а также и другими.




Начало    Вперед