ВУЗ:
Составители:
Рубрика:
68
В МЕСТО ЗАКЛЮЧЕНИЯ
Приведенная в настоящих методических указаниях серия задач,
следуя основной идее пособия [*], ставила своей целью показать, как,
имея определенный опыт процедурного программирования, использо-
вать его для создания классов и обобщенных алгоритмов . Разумеется,
разработку нового класса совсем необязательно каждый раз начинать с
построения соответствующей библиотеки подпрограмм. Способность
определять интерфейс класса прямо по формулировке задачи и выпол -
нять его реализацию без процедурного аналога появляется достаточно
быстро. В то же время рассмотренные здесь задачи весьма просты, и
умение их решать — это лишь первый шаг в освоении объектной тех-
нол огии.
Читатель, вероятно, уже заметил определенные аналогии между
интерфейсами классов DynamicVector и Number. Оба они содержат мет о-
ды Plus, Minus, Add, Subtract, IsEqual и Assign, объявленные схожим об-
разом . Поэтому возникает вопрос , нельзя ли сделать первый из указан-
ных классов производным от второго.
На первый взгляд эта идея противоречит правилам наследования.
Класс Number представляет абстрактное поле, а векторы образуют лишь
группу относительно сложения, не являющуюся его подтипом . Однако,
предполагая, что алгебраические операции допускают частичное опре-
деление, мы можем рассматривать любую группу или кольцо как поле.
Такой подход уже был использован нами в параграфе 4 при по-
строении класса Whole. Единственный минус здесь в том , что невоз-
можность выполнения операции обнаруживается лишь во время выпол -
нения программы, а не во время компиляции. Плюсом же является бóль-
шая универсальность созданного кода. Кроме того, у нас появляется
принципиальная возможность построения сколь угодно сложных струк-
тур данных: многочленов от нескольких переменных, матриц над кол ь -
цами многоч ленов и т . п .
Впрочем , для реализации указанной возможности необходимо
сначала разработать соответствующие клас сы-кон тейнеры . Сделать это
можно несколькими способами. Первый и самый простой — начинать
каждый новый класс практически с чистого листа, нас ледуя прямо от
класса Number. Нетрудно предсказать, однако, что уже после создания
двух-трех классов в их реализациях станет заметно значительное дубл и -
рование кода.
С самого начала эти повторы можно попытаться исключить, если
в качестве базового класса взять не Number, а DynamicVector. Но здесь
В М Е СТ О ЗА К Л Ю ЧЕ Н И Я Прив ед енная в нас т оящ их м етод ичес ких указ аниях с ерия з ад ач, с л ед уя ос нов ной ид ее пос обия [*], с т ав ил а с в оей ц ел ь ю показ ат ь , как, им ея опред ел енны й опы т проц ед урного програм м иров ания, ис пол ь з о- в ат ь его д л я с оз д ания кл ас с ов и обобщ енны х ал горит м ов . Р аз ум еет с я, раз работ ку нов огокл ас с а с ов с ем необяз ат ел ь нокажд ы й раз начинат ь с пос т роения с оот в ет с т в ующ ей библ иот еки под програм м . С пос обнос т ь опред ел ят ь инт ерфейс кл ас с а прям о поформ ул иров ке з ад ачи и в ы пол - нят ь его реал из ац ию без проц ед урного анал ога появ л яет с я д ос т аточно бы с т ро. В то же в рем я рас с м от ренны е з д ес ь з ад ачи в ес ь м а прос т ы , и ум ение их решат ь — эт ол ишь перв ы й шаг в ос в оении объект ной т ех- нол огии. Ч ит ат ел ь , в ероят но, уже з ам ет ил опред ел енны е анал огии м ежд у инт ерфейс ам и кл ас с ов DynamicVector и Number. О ба они с од ержат м ето- д ы Plus, Minus, Add, Subtract, IsEqual и Assign, объяв л енны е с хожим об- раз ом . Поэтом у в оз никает в опрос , нел ь з я л и с д ел ат ь перв ы й из указ ан- ны х кл ас с ов произ в од ны м от в торого. Н а перв ы й в з гл яд эт а ид ея прот ив оречит прав ил ам нас л ед ов ания. Кл ас с Number пред с т ав л яет абс т ракт ное пол е, а в екторы образ уют л ишь группу от нос ит ел ь нос л ожения, не яв л яющ уюс я егопод т ипом . О д нако, пред пол агая, что ал гебраичес кие операц ии д опус кают час т ичное опре- д ел ение, м ы м ожем рас с м ат рив ат ь л юбую группу ил и кол ь ц окак пол е. Т акой под ход уже бы л ис пол ь з ов ан нам и в параграфе 4 при по- с т роении кл ас с а Whole. Е д инс т в енны й м инус з д ес ь в том , что нев оз - м ожнос т ь в ы пол нения операц ии обнаружив ает с я л ишь в ов рем я в ы пол - нения програм м ы , а не в ов рем я ком пил яц ии. Пл юс ом же яв л яет с я бóл ь - шая унив ерс ал ь нос т ь с оз д анного код а. Кром е того, у нас появ л яет с я принц ипиал ь ная в оз м ожнос т ь пос т роения с кол ь угод нос л ожны х с т рук- т ур д анны х: м ногочл енов от нес кол ь ких перем енны х, м ат риц над кол ь - ц ам и м ногочл енов и т. п. Впрочем , д л я реал из ац ии указ анной в оз м ожнос т и необход им о с начал а раз работ ат ь с оот в ет с т в ующ ие кл ас с ы -конт ейнеры . С д ел ат ь это м ожно нес кол ь ким и с пос обам и. Перв ы й и с ам ы й прос той — начинат ь кажд ы й нов ы й кл ас с практ ичес ки с чис того л ис т а, нас л ед уя прям о от кл ас с а Number. Н ет руд но пред с каз ат ь , од нако, что уже пос л е с оз д ания д в ух-т рех кл ас с ов в их реал из ац иях с т анет з ам ет ноз начит ел ь ное д убл и- ров ание код а. С с ам огоначал а эт и пов торы м ожнопопы т ат ь с я ис кл ючит ь , ес л и в качес т в е баз ов ого кл ас с а в з ят ь не Number, а DynamicVector. Н о з д ес ь 68
Страницы
- « первая
- ‹ предыдущая
- …
- 66
- 67
- 68
- 69
- 70
- …
- следующая ›
- последняя »