Subtypes and Supertypes Setting the Scene

Почему наследование типов?


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

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

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

Однако, несмотря на потенциальные преимущества, все еще ощущается небольшое согласие относительно формальной, строгой и абстрактной модели наследования типов -- хотя существуют языки и продукты, в которых поддерживается некоторая разновидность наследования типов (и уже в течение некоторого времени) и в течение многих лет в книгах, статьях и презентациях обсуждается наследование типов. Цитируя Эндрю Тайвалсаари (Andrew Taivalsaari), "Основная идея наследования весьма проста … [несмотря на] ее центральную роль в современных … системах, наследование все еще представляет собой противоречивый механизм … [Какое-либо] исчерпывающее представление о наследовании все еще отсутствует."

Вот еще несколько цитат, иллюстрирующих тот же самый общий аспект:

  • Малькольм Аткинсон (Malcolm Atkinson) и др.: "Имеется по крайней мере четыре типа наследования: наследование подстановкой, наследование включением, наследование ограничением и наследование специализацией…В разной степени эти четыре типа наследования обеспечиваются в существующих системах и прототипах, и мы не предписываем конкретный стиль наследования." [2]
  • Дж.
    Крейг Кливленд говорит, что "[наследование может] основываться на [множестве] различных критериев, и отсутствует общепринятое стандартное определение" [3], и он переходит к изложению восьми различных интерпретаций. (Бертран Мейер [Bertrand Meyer] приводит 12 интерпретаций [4].)
  • Кеннет Баклавски (Kennet Baclavski) и Бипин Индуркхиа (Bipin Indurkhia) говорят: "Язык программирования [всего лишь] обеспечивает набор механизмов [наследования]. Хотя эти механизмы ограничивают возможные действия в этом языке и то, какие представления о наследовании могут быть реализованы … они сами по себе не узаконивают то или иное представление о наследовании. Классы, специализации, обобщения и наследования - это всего лишь концепции и … они не обладают универсальным объективным смыслом … Из этого [факта] следует, что способ внедрения наследования в конкретную систему возлагается на разработчиков [этой] системы, и это является политическим решением, реализуемым на основе доступных механизмов." [5] Другими словами, просто отсутствует модель!

    Другие люди предлагают модели наследования, которые обладают противоречивыми, неинтуитивными и другими нежелательными свойствами. Например, текущие предложения SQL3 допускают такие вещи, как "неквадратные квадраты" [6] (т.е. значения типа SQUARE, стороны которого имеют разную длину) -- с тем результатом, что SQL3 трудно считать "хорошей моделью реальности". В действительности SQL3 даже не дает возможности устанавливать ограничения типа (вроде того, что у значений типа SQUARE стороны должны иметь одинаковую длину), не позволяет поддерживать их без посторонней помощи -- это, безусловно, неудовлетворительное положение дел. Что еще хуже, SQL3 не дает возможности устанавливать и поддерживать такие ограничения даже при отсутствии поддержки наследования, вероятно, при том предположении, что такая поддержка появится когда-то в будущем.

    Однако в нашей книги The Third Manifesto мы с Хью Дарвеном предлагаем модель наследования, которая, как мы полагаем, является хорошей "моделью реальности" и не страдает такими недостатками [7].Конечно, данная серия основывается на этой модели; по существу, она представляет собой легкое введение (не слишком глубокое) в наиболее важные идеи этой модели. Поэтому позвольте мне немедленно со стыдом сознаться, что одной из моих целей является реклама. Мы хотели бы, чтобы большая индустрия обратила серьезное внимание на наши идеи, потому что мы полагаем, что они могли бы служить основанием общепринятой модели, отсутствие которой так остро ощущается в настоящее время.

    Прежде, чем двигаться дальше, мне, вероятно, следует предупредить вас, что приведенные ранее в этом разделе цитаты показывают, что некоторые авторы доказывают существование многих видов наследования, которые разным образом перекрываются, но все отличны друг от друга. Конечно, можно найти в литературе определения терминов "наследование" и "подтип", но они отличаются от наших.


    Содержание раздела