next up previous contents
След.: Полиморфизм Выше: Объектно-ориентированное программирование Пред.: Введение   Содержание

Наследование

Концепция наследования в Фортране реализована через расширение типа. Здесь следует отметить «психологический момент». С одной стороны, термин «расширение» оправдан, поскольку расширенный тип содержит дополнительную информацию и реализует дополнительное поведение в виде методов: например, класс квадратных матриц имеет всю функциональность матриц, но также способен вычислять определитель, след и спектр матрицы. С другой же, описание дополнительных свойств реального объекта сужает класс: так, квадратные матрицы являются подклассом матриц, а симметричные -- подклассом квадратных, тогда как естественно строить иерархию матриц «наоборот», расширяя базовый класс матриц до класса квадратных матриц, а тот -- до симметричных.

После ключевого слова TYPE через запятую указывается слово EXTENDS и расширяемый тип в скобках. Пример [26]:

TYPE SHAPE

INTEGER :: COLOR

LOGICAL :: FILLED

INTEGER :: X

INTEGER :: Y

END TYPE SHAPE

TYPE, EXTENDS (SHAPE) :: RECT

INTEGER :: LENGTH

INTEGER :: WIDTH

END TYPE RECT

TYPE, EXTENDS (RECT) :: SQUARE

END TYPE SQUARE

Здесь определяется три типа: фигура, прямоугольник и квадрат, последовательно расширяемые. Расширенный тип имеет все те де поля, что и предок, и может добавлять свои (а может и не добавлять, как SQUARE). Если объект объявлен как TYPE(SQUARE):: SQ, то допустимы все три обращения:

SQ%COLOR, SQ%COLOR%RECT%COLOR и SQ%COLOR%RECT%SHAPE%COLOR

Иными словами, в расширенном типе есть скрытое поле того же типа и с тем же именем, что и родитель. Расширенный тип совместим по типу с предком, но не наоборот. Здесь и далее под родителем типа понимаем тип, который расширяем данным, а предок -- это родитель или предок родителя. Аналогично, дочерний тип -- это тип, который расширяет данный, а потомок -- это дочерний типа или потомок дочернего типа.

Существует порядок полей, отличных от поля-родителя: сначала идут поля родителя в этом порядке, а затем -- новые поля. Порядок важен при применении конструктора структур и при вводе/выводе.



Ilya A. Chernov 2012-12-19
X