ВУЗ:
Составители:
Рубрика:
30
Требуемая операция произведена: sum адрес ует объект, представляющий
собой сумму чисел r1, r2 и r3. Но что произошло с объ ектом temp? Ниче-
го. Он по-прежнему существует где-то в памяти, но адрес его пот е рян .
Таким образом , программист вынужден выбирать: либо не ис -
пользовать совершенно естественные сцепки операторов , либо мириться
с постоянной утечкой памяти. Некоторым компромиссом может служить
модифицированная версия оператора с присвоением , представляющая
собой функцию, возвращающую ад рес левого операнда:
function Rational.Add(r:Rational): Rational;
var _num,_den:Integer;
begin
_num:=self.num*r.den;
_den:=self.den*r.num;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
result:=self; // в качестве результата возвращается
// текущий объект
end;
В этом случае вместо приведенной выше инструкции можно ис -
пользовать выражение
sum.Add(r1).Add(r2).Add(r3);
последовательно добавляющее числа r1, r2 и r3 к sum. Здесь, однако, объ -
ект sum должен быть заранее размещен в памяти и инициализирован ну-
лем , что также не увеличивает читабельности программы.
После всего сказанного у читателя может сложиться впечатление,
что утечка памяти является неотъемлемой чертой объектного програм -
мирования. Это не так: существуют алгоритмы, позволяющие автомат и-
чески удалять объекты, в которых больше нет необходимости (этот п р о-
цесс называется «сборкой мусора» ). Подобный алгоритм реализован, на-
пример, в языке Java.
2.5. Конструкторы и деструкторы
Наряду с описанными выше способами для создания и уничтож е -
ния объектов могут использоваться специальные методы: конструкт о -
ры и деструкторы. Синтаксически они определяются так же, как и
обычные методы-процедуры , только зарезервированное слово procedure
заменяется на constructor или destructor. В частности, конструкторы и
деструкторы могут иметь любой набор формальных параметров .
К роме выделения и освобождения памяти, занимаемой объектом ,
Т ребуем ая операция произ в ед ена: sum ад рес ует объект, пред с т ав л яющий
с обой с ум м у чис ел r1, r2 и r3. Н очтопроиз ош л ос объектом temp? Н иче-
го. Он по-прежнем у с ущес т в ует гд е-тов пам ят и, ноад рес егопот ерян.
Т аким образ ом , програм м ис т в ы нужд ен в ы бират ь : л ибо не ис -
пол ь з ов ат ь с ов ерш енноес т ес т в енны е с цепки операторов , л ибом ирит ь с я
с пос тоянной ут ечкой пам ят и. Н екоторы м ком пром ис с ом м ожет с л ужит ь
м од ифициров анная в ерс ия оператора с прис в оением , пред с т ав л яющая
с обой функцию, в оз в ращающую ад рес л ев огооперанд а:
function Rational.Add(r:Rational): Rational;
var _num,_den:Integer;
begin
_num:=self.num*r.den;
_den:=self.den*r.num;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
result:=self; // в качестве результата возвращается
// текущий объект
end;
В этом с л учае в м ес то прив ед енной в ы ш е инс т рукции м ожно ис -
пол ь з ов ат ь в ы ражение
sum.Add(r1).Add(r2).Add(r3);
пос л ед ов ат ел ь нод обав л яющее чис л а r1, r2 и r3 к sum. Зд ес ь , од нако, объ-
ект sum д ол жен бы т ь з аранее раз м ещен в пам ят и и инициал из иров ан ну-
л ем , чтот акже не ув ел ичив ает чит абел ь нос т и програм м ы .
Пос л е в с егос каз анногоу чит ат ел я м ожет с л ожит ь с я в печатл ение,
что ут ечка пам ят и яв л яет с я неот ъем л ем ой чертой объект ного програм -
м иров ания. Э тоне т ак: с ущес т в уют ал горит м ы , поз в ол яющие ав том ат и-
чес ки уд ал ят ь объект ы , в которы хбол ь ш е нет необход им ос т и (этот про-
цес с наз ы в ает с я «с боркой м ус ора» ). Под обны й ал горит м реал из ов ан, на-
прим ер, в яз ы ке Java.
2.5. К о нструкто ры и деструкто ры
Н аряд у с опис анны м и в ы ш е с пос обам и д л я с оз д ания и уничтоже-
ния объектов м огут ис пол ь з ов ат ь с я с пециал ь ны е м етод ы : кон структо-
ры и де структоры. Синт акс ичес ки они опред ел яют с я т ак же, как и
обы чны е м етод ы -процед уры , тол ь коз арез ерв иров анное с л ов оprocedure
з ам еняет с я на constructor ил и destructor. В час т нос т и, конс т рукторы и
д ес т рукторы м огут им ет ь л юбой набор форм ал ь ны хпарам ет ров .
Кром е в ы д ел ения и ос в обожд ения пам ят и, з аним аем ой объектом ,
30
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »
