ВУЗ:
Составители:
Рубрика:
40
3.2. Совместимость классов и ее особенности
При построении производного класса в предыдущем параграфе мы
не внесли никаких изменений в список методов , осуществляющих ариф-
метические операции, и такое положение дел вряд ли можно считать удо-
влетворительным. Поскольку множество p-ичных дробей замкнуто отно-
сительно сложения, вычитания и произведения, вполне естественно было
бы иметь в новом классе операторы , принимающие и возвращающие в
качестве значений p-ичные дроби , то есть объекты класса PAryFraction.
На первый взгляд имеются два решения этой проблемы: либо п е -
реопределить уже имеющиеся методы следующим образом:
function Plus(r: PAryFraction): PAryFraction;
procedure Add(r: PAryFraction);
...
либо просто добавить новые операторы , подобрав для них подходящие
имена. И то, и другое неудачно: в первом случае мы теряем возможность
смешивать в вычислениях p - ичные дроби и произвольные рациональные
числа, во втором — осложняем работу пользователя, наполняя интер-
фейс класса методами, реализующими почти одинаковые операции.
В действительности имеется и третий вариант. Требуемого э ф -
фекта позволяет добиться простое переопределение существующих опе-
раторов без какого-либо изменения их заголовков . Такая возможность
появляется благодаря тому, что объекты клас са-потом ка совме стимы в
отношении операции присваивания с объ ектами клас са-пред ка.
Здесь необходимо вспом нить, что тип A называется совместимым
(assignment-compatible) с типом B , если:
1) переменной типа B может быть присвоено значение типа A;
2) в подпрограмму, формальный параметр которой имеет тип B, м о-
жет быть передано значение типа A.
Осуществляться совместимость может двумя различными спос о-
бами, которые мы будем называть преобразованием и приведением типов .
При преобразовании машинное (битовое ) представление перед а -
ваемого значения подвергается некоторому реальному изменению, на-
пример, увеличению занимаемого им объема памяти с заполнением сво-
бодного пространства нулями или единицами. Такие операции харак-
терны для переходов между целочисленными и вещественными пред -
ставлениями чисел различной точности.
Приведение типа никак не изменяет машинную форму данных,
поэтому его можно назвать также реинтерпретацией имеющейся ин-
3.2. Совместимо сть классов и ее о со б енно сти
При пос т роении произ в од ногокл ас с а в пред ы д ущем параграфе м ы
не в нес л и никакихиз м енений в с пис ок м етод ов , ос ущес т в л яющихариф-
м ет ичес кие операции, и т акое пол ожение д ел в ряд л и м ожнос чит ат ь уд о-
в л ет в орит ел ь ны м . Пос кол ь ку м ножес т в оp-ичны хд робей з ам кнутоот но-
с ит ел ь нос л ожения, в ы чит анияи произ в ед ения, в пол не ес т ес тв еннобы л о
бы им еть в нов ом кл ас с е операторы , приним ающие и в оз в ращающие в
качес тв е з начений p-ичны е д роби, тоес т ь объекты кл ас с а PAryFraction.
Н а перв ы й в з гл яд им еют с я д в а реш ения э той пробл ем ы : л ибопе-
реопред ел ит ь уже им еющиес я м етод ы с л ед ующим образ ом :
function Plus(r: PAryFraction): PAryFraction;
procedure Add(r: PAryFraction);
...
л ибо прос то д обав ит ь нов ы е операторы , под обрав д л я нихпод ход ящие
им ена. И то, и д ругое неуд ачно: в перв ом с л учае м ы т еряем в оз м ожнос т ь
с м еш ив ат ь в в ы чис л енияхp-ичны е д роби и произ в ол ь ны е рационал ь ны е
чис л а, в о в тором — ос л ожняем работ у пол ь з ов ат ел я, напол няя инт ер-
фейс кл ас с а м етод ам и, реал из ующим и почт и од инаков ы е операции.
В д ейс т в ит ел ь нос т и им еет с я и т рет ий в ариант. Т ребуем ого эф-
фект а поз в ол яет д обит ь с я прос тое переопред ел ение с ущес т в ующихопе-
раторов без какого-л ибо из м енения их з агол ов ков . Т акая в оз м ожнос т ь
появ л яет с я бл агод аря том у, что объект ы кл ас с а-потом ка совме стимы в
отн ош е н ии опе ра ции присва ива н ия с объект ам и кл ас с а-пред ка.
Зд ес ь необход им ов с пом нит ь , чтот ип A наз ы в ает с я с ов м ес т им ы м
(assignment-compatible) с т ипом B, ес л и:
1) перем енной т ипа B м ожет бы т ь прис в оеноз начение т ипа A;
2) в под програм м у, форм ал ь ны й парам ет р которой им еет т ип B, м о-
жет бы т ь перед аноз начение т ипа A.
Ос ущес т в л ят ь с я с ов м ес т им ос ть м ожет д в ум я раз л ичны м и с пос о-
бам и, которы е м ы буд ем наз ы в ать преобра зова н ием и приведе н ием т ипов .
При преобраз ов ании м аш инное (битов ое) пред с т ав л ение перед а-
в аем ого з начения под в ергает с я некотором у реал ь ном у из м енению, на-
прим ер, ув ел ичению з аним аем огоим объем а пам ят и с з апол нением с в о-
бод ного прос т ранс т в а нул ям и ил и ед иницам и. Т акие операции харак-
т ерны д л я переход ов м ежд у цел очис л енны м и и в ещес т в енны м и пред -
с т ав л ениям и чис ел раз л ичной точнос т и.
Прив ед ение т ипа никак не из м еняет м аш инную форм у д анны х,
поэ том у его м ожно наз в ат ь т акже ре ин те рпре та цие й им еющейс я ин-
40
Страницы
- « первая
- ‹ предыдущая
- …
- 38
- 39
- 40
- 41
- 42
- …
- следующая ›
- последняя »
