ВУЗ:
Составители:
Рубрика:
26
В самом деле, любое рациональное число имеет целые числитель
и знаменатель, и необходимость хранить их именно в двух полях типа In-
teger никак не следует из объявлений новых методов . Однако явное ука-
зание скалярного (простого) типа для параметров и возвращаемых зна-
чений этих подпрограмм ог раничивает диапазон допустимых значений
числителя и знаменателя. Более правильным было бы определить свой
класс и для представления целых чисел , но тогда соответствующие про-
блемы возникли бы уже для него.
В действительности, единственным решением , позволяющим
создавать истинно абстрактные типы , является полный отказ от испол ь -
зования скалярных типов данных. Языки, реализующие данный подход ,
то есть являющиеся чисто объектно-ориентированными, существуют, од -
нако все они проигрывают языкам со смешанной моделью в плане быст-
родействия.
Завершим теперь разработку библ иотеки, реализовав методы клас -
са Rational.
Пример 2.5. Определение модуля, содержащего класс Rational.
unit UnitRational;
interface
type
Rational = class
... // здесь располагается интерфейс класса, приведенный выше
end;
implementation
uses SysUtils; // модуль включает поддержку исключений
function Rational.GetNum: Integer;
begin result:=self.num; end;
function Rational.GetDen: Integer;
begin result:=self.den; end;
procedure Rational.SetNum(value:Integer);
begin self.num:=value; end;
procedure Rational.SetDen(value:Integer);
begin
if value>0 then // знаменатель всегда должен быть положителен
self.den:=value
else // иначе возбуждается исключение с сообщением
// "Недопустимое значение знаменателя"
В с ам ом д ел е, л юбое рационал ь ное чис л оим еет цел ы е чис л ит ел ь
и з нам енат ел ь , и необход им ос т ь хранит ь ихим еннов д в ухпол яхт ипа In-
teger никак не с л ед ует из объяв л ений нов ы хм етод ов . Од накояв ное ука-
з ание с кал ярного (прос того) т ипа д л я парам ет ров и в оз в ращаем ы хз на-
чений эт их под програм м ограничив ает д иапаз он д опус т им ы х з начений
чис л ит ел я и з нам енат ел я. Б ол ее прав ил ь ны м бы л о бы опред ел ит ь с в ой
кл ас с и д л я пред с т ав л ения цел ы хчис ел , нотогд а с оот в ет с т в ующие про-
бл ем ы в оз никл и бы уже д л я него.
В д ейс т в ит ел ь нос т и, ед инс т в енны м реш ением , поз в ол яющим
с оз д ав ат ь ис т инноабс т ракт ны е т ипы , яв л яет с я пол ны й от каз от ис пол ь -
з ов ания с кал ярны хт ипов д анны х. Яз ы ки, реал из ующие д анны й под ход ,
тоес т ь яв л яющиес я чис тообъект но-ориент иров анны м и, с ущес т в уют, од -
наков с е они проигры в ают яз ы кам с ос м еш анной м од ел ь ю в пл ане бы с т -
род ейс т в ия.
Зав ерш им т еперь раз работ ку библ иот еки, реал из ов ав м етод ы кл ас -
с а Rational.
Пример 2.5. Опред ел ение м од ул я, с од ержащегокл ас с Rational.
unit UnitRational;
interface
type
Rational = class
... // здесь располагается интерфейс класса, приведенный выше
end;
implementation
uses SysUtils; // модуль включает поддержку исключений
function Rational.GetNum: Integer;
begin result:=self.num; end;
function Rational.GetDen: Integer;
begin result:=self.den; end;
procedure Rational.SetNum(value:Integer);
begin self.num:=value; end;
procedure Rational.SetDen(value:Integer);
begin
if value>0 then // знаменатель всегда должен быть положителен
self.den:=value
else // иначе возбуждается исключение с сообщением
// "Недопустимое значение знаменателя"
26
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »
