ВУЗ:
Составители:
Рубрика:
8
Основное назначение раздела инициализации — задание старто-
вых значений переменных (например, с помощью датчика случайных
чисел ) и размещение в памяти динамических структур данных. Раздел
финализации испол ь зуется для освобождения ресурсов , которые могли
быть заняты в процессе выполнения раздела инициализации и подпро-
грамм из раздела реализации. Т ипичными задачами являются удаление
динамически созданных переменных, закрытие файлов и т . п .
Следует учитывать, что раздел финализации может быть вызван
до завершения раздела инициализации. Такая ситуация возникает, если в
процес се выполнения последнего появляется ошибка или, говоря более
точно, необработанная исключительная ситуация.
В заключение этого параграфа приведем пример реализации би б-
лиотеки для работы с рациональными числами. Она включает определ е-
ния нового типа Rational — записи с двумя полями целого типа num и den
для хранения числителя и знаменателя — и восьми подпрограмм, рабо-
тающих с данными этого типа. Первые четыре: функции Plus, Minus, Dot
и Slash, представляют собой обычные операторы сложения, вычитания,
умножения и деления рациональных чисел . Оставшиеся процедуры реа-
лизуют так называемые операторы с присвоением. Их отл ичие состоит в
том , что рез ультат выполнения соответствующей операции сохраняется в
первом аргументе. Так, например, вызов процед уры Add:
Add(r1, r2);
эквивалентен выражению
r1 := Plus(r1, r2);
Очевидно, что использование первой инструкции эффективнее:
исчезает лишняя операция присваивания. Кроме того, в следующей час ти
мы увидим , что разрабатывать и использовать операторы с присвоением
иногда оказывается проще, чем обычные алгебраические опера ции.
Пример 1.1. Библиотека для работы с рациональными числами.
unit UnitRational;
interface
// объявление типа Rational
type
Rational = record // рациональное число
num: Integer; // числитель (numerator)
den: Integer; // знаменатель (denominator)
end;
Ос нов ное наз начение раз д ел а инициал из ации — з ад ание с т арто- в ы х з начений перем енны х (наприм ер, с пом ощь ю д ат чика с л учайны х чис ел ) и раз м ещение в пам ят и д инам ичес кихс т рукт ур д анны х. Раз д ел финал из ации ис пол ь з ует с я д л я ос в обожд ения рес урс ов , которы е м огл и бы т ь з анят ы в процес с е в ы пол нения раз д ел а инициал из ации и под про- грам м из раз д ел а реал из ации. Т ипичны м и з ад ачам и яв л яют с я уд ал ение д инам ичес ки с оз д анны хперем енны х, з акры т ие файл ов и т. п. Сл ед ует учит ы в ат ь , что раз д ел финал из ации м ожет бы т ь в ы з в ан д оз ав ерш ения раз д ел а инициал из ации. Т акая с ит уация в оз никает, ес л и в процес с е в ы пол нения пос л ед негопояв л яет с я ош ибка ил и, гов оря бол ее точно, необработ анная ис кл ючит ел ь ная с ит уация. В з акл ючение э тогопараграфа прив ед ем прим ер реал из ации биб- л иот еки д л я работ ы с рационал ь ны м и чис л ам и. Она в кл ючает опред ел е- ния нов огот ипа Rational — з апис и с д в ум я пол ям и цел огот ипа num и den д л я хранения чис л ит ел я и з нам енат ел я — и в ос ь м и под програм м , рабо- т ающихс д анны м и э тогот ипа. Перв ы е чет ы ре: функции Plus, Minus, Dot и Slash, пред с т ав л яют с обой обы чны е операторы с л ожения, в ы чит ания, ум ножения и д ел ения рационал ь ны хчис ел . Ос т ав ш иес я процед уры реа- л из уют т ак наз ы в аем ы е опе ра торы с присвое н ием. И хотл ичие с ос тоит в том , чторез ул ьт ат в ы пол нения с оотв ет с т в ующей операции с охраняет с я в перв ом аргум ент е. Т ак, наприм ер, в ы з ов процед уры Add: Add(r1, r2); э кв ив ал ент ен в ы ражению r1 := Plus(r1, r2); Очев ид но, что ис пол ь з ов ание перв ой инс т рукции э ффект ив нее: ис чез ает л иш няя операция прис в аив ания. Кром е того, в с л ед ующей час т и м ы ув ид им , чтораз рабат ы в ат ь и ис пол ь з ов ать операторы с прис в оением иногд а оказ ы в ает с я проще, чем обы чны е ал гебраичес кие операции. Пример 1.1. Б ибл иот ека д л я работ ы с рационал ь ны м и чис л ам и. unit UnitRational; interface // объявление типа Rational type Rational = record // рациональное число num: Integer; // числитель (numerator) den: Integer; // знаменатель (denominator) end; 8
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »