Новые книги

M. УЭИТ   С. ПРАТА    Д. МАРТИН

Язык Си — руководство для начинающих

Реализация наследования

5.4.4. Реализация наследования

В языке Eiffel список наследования помещается вслед за ключевым словом inherit:

	class ITEM
	export
	  cut, move, pick, ungroup
	feature
	  cut is deferred end;
	  move (deltax, deltay: REAL) is deferred end;
	  pick (x, y: REAL): BOOLEAN is deferred end;
	  ungroup () is deferred end
	class SHAPE
	export
	  cut, draw, erase, move, pick, ungroup, write
	inherit ITEM
	feature
	* x, y: REAL;
	  cut is <body> end;
	  draw is <body> end;
	  erase is <body> end;
	  move (deltax, deltay: REAL) is <body> end;
	  pick (x, y: REAL): BOOLEAN is <body> end;
	  ungroup is <body> end;
	  write (acolor: COLOR) is deferred end;
	end
	classrBOX
	export pick, write
	inherit SHAPE redefine pick, write
	feature
	  width, height: REAL;
	  Create (x0, y0, width0, height0:*REAL) is <body> end;
	  pick (x, y: REAL): BOOLEAN is <body> end;
	  write (acolor: COLOR) is <body> end
	end
	class CIRCLE
	export pick, write
	inherit SHAPE redefine pick, write
	feature
	  radius: REAL;
	  Create (x0, y0, radius0: REAL) is <body> end;
	  pick (x, y: REAL): BOOLEAN is <body> end;
	  write (acolor: COLOR) is <body> end
	end

Для обозначения абстрактных операций используется ключевое слово deferred; такие операции должны быть реализованы во всех подклассах. Переопределение свойств класса в подклассе отмечается в разделе redefine.

В языке Smalltalk описание класса Item, его подкласса Shape, а также подклассов Box и Circle класса Shape может иметь следующий вид:

	class name Item
	superclass Object
	 
	class name Shape
	superclass Item
	instance variables
	  x
	  y
	instance methods
	  cut
	  draw
	  erase
	  move: aPoint
	  ungroup
	 
	class name Box
	superclass Shape
	instance variables
	  width
	  height
	instance methods
	  pick: aPoint
	  write: aColor
	class methods
	  createAt: aPoint width: widthSize length: lengthSize
	 
	class name Circle
	superclass Shape
	instance variables
	  radius
	instance methods
	  pick: aPoint
	  write: aColor
	class methods
	  createAt: aPoint radius: radiusSize

Все атрибуты суперкласса доступны всем его потомкам. Все методы могут быть переопределены в подклассах. Множественное наследование не поддерживается.

Назад | Содержание | Вперед