Разработка классов на языке Object Pascal. Соколов Е.В. - 14 стр.

UptoLike

Составители: 

14
const Dim = n; // вместо n необходимо указать конкретное целое число
3. Каждый объект класса IVector представляет собой самостоя-
тельный вектор , компоненты которого должны храниться в полях данно-
го объекта. Соображения, приведенные в решении задачи 1.1, показ ы -
вают, что для этой цели достаточно одного поля, являющегося одномер-
ным массивом ц е лых чисел размерности Dim. Это поле назовем comp:
comp: array[1..Dim] of Integer;
4. Введенное поле не является указателем , поэтому при уничт о-
жении объекта занимаемая этим полем память будет полностью освоб о-
ждена компилятором . Хотя мы и не реализовали методы, но, учитывая
с емантику класса, разум но предположить, что в ходе их работы не будут
захватываться никакие ресурсы. Следовательно, переопределять унасле-
дованный деструктор не нужно. Так как явное размещение поля в пам я-
ти и его инициализация определенными значениями не требуются, соб-
ственный конструктор также не является необходимым.
Отметим , что все сказанное выше относительно автоматического
управ ления выделением и освобождением памяти касается только поля
comp. Объекты класса IVector, как и любые объекты любых других клас-
сов , необходимо создавать и удалять явным образом .
5. Реализация методов класса IVector может быть легко получена
из реализации подпрограмм задачи 1.1. Для этого достаточно лишь при-
нять во внимание следующее:
а) при реализации имя метода должно быть квалифицировано им е-
нем кл асса;
б) если раньше все параметры описывались в заголовке подпро-
граммы, то теперь один из них передается неявно и доступен внутри
метода под именем self;
в ) вместо выражения v[i] для обращения к i-й компоненте вектора v
внутри реализации класса (и только здесь) следует использовать выра-
жение v.comp[i], задающее i-й элемент поля-массива comp объекта v;
г) если результатом функции является вектор , т. е. объект класса
IVector, его необходимо явным образом разместить в памяти путем в ы -
зова конструктора Create.
После внесения всех изменений мы получаем следующий код
( все добавления и изменения отмечены подчеркиванием ).
Пример 2.1.1. Реализация методов класса IVector.
function IVector.Plus(v: IVector): IVector;
var i: Integer;
const Dim = n; // вместо n необходимо указать конкретное целое число
         3. Кажд ы й объект кл ас с а IVector пред с т ав л яет с обой с ам ос тоя-
т ел ь ны й в ектор, ком понент ы которогод ол жны хранит ь с я в пол ях д анно-
го объект а. С оображения, прив ед енны е в решении з ад ачи 1.1, показ ы -
в ают, чтод л я этой ц ел и д ос т аточноод ногопол я, яв л яющ егос я од ном ер-
ны м м ас с ив ом ц ел ы х чис ел раз м ернос т и Dim. Э топол е наз ов ем comp:
comp: array[1..Dim] of Integer;
         4. Вв ед енное пол е не яв л яет с я указ ат ел ем , поэтом у при уничто-
жении объект а з аним аем ая эт им пол ем пам ят ь буд ет пол нос т ь ю ос в обо-
жд ена ком пил ятором . Х отя м ы и не реал из ов ал и м етод ы , но, учит ы в ая
с ем ант ику кл ас с а, раз ум нопред пол ожит ь , чтов ход е их работ ы не буд ут
з ахв ат ы в ат ь с я никакие рес урс ы . С л ед ов ат ел ь но, переопред ел ят ь унас л е-
д ов анны й д ес т руктор не нужно. Т ак как яв ное раз м ещ ение пол я в пам я-
т и и егоиниц иал из ац ия опред ел енны м и з начениям и не т ребуют с я, с об-
с т в енны й конс т руктор т акже не яв л яет с я необход им ы м .
         О т м ет им , чтов с е с каз анное в ы ше от нос ит ел ь ноав том ат ичес кого
управ л ения в ы д ел ением и ос в обожд ением пам ят и кас ает с я тол ь копол я
comp. О бъект ы кл ас с а IVector, как и л юбы е объект ы л юбы х д ругих кл ас -
с ов , необход им ос оз д ав ат ь и уд ал ят ь яв ны м образ ом .
          5. Реал из ац ия м етод ов кл ас с а IVector м ожет бы т ь л егкопол учена
из реал из ац ии под програм м з ад ачи 1.1. Дл я этогод ос т аточнол ишь при-
нят ь в ов ним ание с л ед ующ ее:
     а) при реал из ац ии им я м етод а д ол жно бы т ь кв ал ифиц иров аноим е-
нем кл ас с а;
     б) ес л и рань ше в с е парам ет ры опис ы в ал ис ь в з агол ов ке под про-
грам м ы , то т еперь од ин из них перед ает с я неяв но и д ос т упен в нут ри
м етод а под им енем self;
     в ) в м ес тов ы ражения v[i] д л я обращ ения к i-й ком понент е в ектора v
в нут ри реал из ац ии кл ас с а (и тол ь ко з д ес ь ) с л ед ует ис пол ь з ов ат ь в ы ра-
жение v.comp[i], з ад ающ ее i-й эл ем ент пол я-м ас с ив а comp объект а v;
     г) ес л и рез ул ьт атом функц ии яв л яет с я в ектор, т. е. объект кл ас с а
IVector, егонеобход им о яв ны м образ ом раз м ес т ит ь в пам ят и пут ем в ы -
з ов а конс т руктора Create.
          Пос л е в нес ения в с ех из м енений м ы пол учаем с л ед ующ ий код
(в с е д обав л ения и из м енения от м ечены под черкив анием ).

Пример2.1.1. Реал из ац ия м етод ов кл ас с а IVector.

function IVector.Plus(v: IVector): IVector;
var i: Integer;


                                            14