4914

Конструкторы и деструкторы

Лекция

Информатика, кибернетика и программирование

Конструкторы и деструкторы Специальные методы объекта, которые предназначены для выполнения настроечных действий в момент создания каждого экземпляра объекта. В концепции ООП конструктор должен активизироваться автоматически, т.е....

Русский

2012-11-29

17.73 KB

16 чел.

Конструкторы и деструкторы

Конструкторы

Специальные методы объекта, которые предназначены для выполнения настроечных действий в момент создания каждого экземпляра объекта. В концепции ООП  конструктор должен активизироваться автоматически, т.е. если экземпляр объекта объявляется как простые переменные , объектов должно происходить уже в момент объявления, однако , язык паскаль изначально не был рассчитан на создание объектов. Первые объекты были введены в паскаль, начиная с версии 5.5. Использование объектов было сильно ограничено (только базовые возможности). В частности активизация конструкторов должна производиться явно, то есть перед началом использования объекта первой командой должна быть команда вызова конструктора. Любой объект может иметь только 1 конструктор. Конструктор может быть без параметра, может быть с параметрами.

Деструкторы.

Выполняются в момент уничтожения экземпляра объекта. По концепции ООП должны срабатывать автоматически, однако в паскале их необходимо вызывать явно. Смысл деструктора это подготовить объект к уничтожению( очистить динамически-выделенную память, сохранить данные и т.д.)

Описание конструкторов и деструкторов.

В языке СИ конструктор и деструктор имеют такое же имя что и сам объект. В паскале для определения конструктора и деструктора необходимо использовать ключевые слова : constructor, destructor. Обычно в паскале конструктору дают имя init, а деструктору- destroy.

Пример:

Type

MyObj=object

Public

Constructor init;

Destructor destroy;

И конструктор и деструктор вызываются из вне объекта, поэтому они должны быть всегда в разделе public.  Далее конструктор и деструктор необходимо описать так же как и все остальные методы объекта.

Constructor MyObj.Init;

Begin

End;

Destructor MyObj.destroy;

Begin

End;

Далее в основной части программы экземпляр такого объекта может быть объявлен обычным способом:  

x1: my.Obj;

Begin

 X1.Init;

 

 …

 X1.destroy;

 End.

Если конструктор предполагается с параметрами, то они определяются точно так же как у любой процедуры:

Constructor MyObj.Init (a,b:integer);

Begin

End;

Деструкторы параметров иметь не должны.

Перегрузка методов.

Одной из концепций ООП является полиморфизм, то есть многообразие. Полиморфизм может быть реализован различными способами: виртуальными методами, динамическими и статическими методами и т.д. В том числе одним из проявлений полиморфизма является перегрузка методов.

Пример:

Предположим, что нам требуется объект, в котором присутствует метод print. Этот метод выводит что-либо на экран- например приветствие пользователя – дополнительно в нашем объекте должен быть метод , который тоже называется print и получает 2 параметра- a и b, вычисляет сумму этих чисел и печатает результат на экране. Через некоторое время нам потребовалось добавить в объект ещё 1 метод и тоже с название print, который получает 3 параметра (a,b,c), находит среди них максимум и печатает его на экране. Таким образом мы получили объект, который содержит 3 метода, но все эти методы имеют имя print. Вопрос: Каким образом программа будет определять, какой из методов требуется использовать. Ответ: Все методы с одинаковым именем должны отличаться количеством параметров, либо типом параметров.

При вызове:  x1.print(2,8) будет загружен и выполнен 2ой метод. При x1.print(2,7,8) -будет выполнен 3й. Данный механизм называется перегрузкой методов объекта.

Очень важное замечание!!!

В языке СИ++ данный механизм подразумевается изначально. В языке pascal изначально такой механизм разработан не был. Даже в полной версии турбо паскаля попытка использования 2х методов с одинаковым именем выдаст ошибку двойного определения. Только начиная с delphy 4й версии и выше в паскаль добавили поддержку перегрузки методов. Но чтобы не переписывать весь компилятор было решено добавить ещё 1 ключевое слово- overload. Описание осуществляется следующим образом:

Myobj= object

Procedure print; overload;

Procedure print(a,b: integer); overload;

Procedure print(a,b,c: integer); overload;

1.Программа содержит объект, который  имеет метод, вычисляющий по 2м параметрам  площадь треугольника. Дополнительно имеет метод pause для задержки и снабжен конструктором, который обнуляет внутренние данные и деструктором, который ничего не делает, а только пишет на экране, что работает деструктор.

2.Программа содержит некоторый объект, все данные объекта недоступны извне, при этом внутри объекта происходит обработка массива данных, размер этого массива заранее неизвестен, поэтому память под этот массив выделяется динамически в момент создания экземпляра объекта.


 

А также другие работы, которые могут Вас заинтересовать

79523. Объединение Русских земель Москвы (14-первая половина 16 веков) 21.07 KB
  Объединение Руси начавшийся в XIV XV веках процесс объединения раздробленных русских земель вокруг нескольких новых политических центров приведший в конечном итоге к образованию централизованного Русского государства и его последующему возобладанию над внешними политическими конкурентами за земли Руси. Объединение Северовосточной Руси завершилось в правление Ивана III присоединение Новгорода 1478 Твери 1485 ликвидация формальной автономии Пскова 1510 и Рязани 1521. Он принял титул государя всея Руси...
79524. Начало эпохи великих географических открытий и первые колониальные захваты. Новое время как особая фаза всемирно исторического процесса 22.1 KB
  Новое время или новая история период в истории человечества находящийся между Средневековьем и Новейшим временем. Критерием определения нового времени его новизны по сравнению с предшествующей эпохой был с точки зрения гуманистов расцвет в период Ренессанса светской науки и культуры то есть не социальноэкономический а духовнокультурный фактор. Однако этот период довольно противоречив по своему содержанию: Высокое Возрождение Реформация и гуманизм соседствовали с массовым всплеском иррационализма развитием демонологии...
79525. Реформация и ее экономические, политические и социокультурные причины. Религиозные войны в Европе 21.7 KB
  С одной стороны католический мир который объединял все народы Западной Европы под духовным руководством папы римского прекратил существование. С другой стороны национальные церкви способствовали росту национального сознания народов Европы. При этом существенно повысился культурный и образовательный уровень жителей Северной Европы которая до этого была как бы окраиной Христианского Мира необходимость изучения Библии приводила к росту как начальных учебных заведений в основном в форме церковноприходских школ так и высших что...
79526. Государство и общество стран Западной Европы в 17 веке 21.34 KB
  Их концептуальным выражением и итогом стали теории естественного права и общественного договора основанные на рационализме. Теория естественного права явилась классическим воплощением нового мировоззрения. Теория естественного права основана на признании всех людей равными от природы и наделенными природой же естественными страстями стремлениями разумом. Законы природы определяют предписания естественного права которому должно соответствовать положительное позитивное волеустановленное право.
79527. Внутренняя и внешняя политика Ивана 4 Грозного 20.85 KB
  Иван IV стал великим князем в 1533 г. в 3 года. Регентшей была его мать Елена Глинская, а после ее смерти в 1538 г. началось боярское правление, сопровождавшееся борьбой боярских группировок. В 1547 г. Иван IV венчался на царство.
79528. Россия в годы смуты (конец 16-начало 17 веков) 21.68 KB
  Шурин Фёдора Борис Годунов фактически правил при недееспособном Фёдоре Ивановиче организовал свое избрание царём на Земском соборе. Но бояре были недовольны незнатным царём крестьяне отменой Юрьева дня казаки репрессиями властей дворяне тяжелой службой. Годунов умер и Лжедмитрий стал царём. Земский собор избрал царём Михаила Романова.
79529. Воцарение в России Романовых. Развитие страны в 17 веке. Особенности сословно-представительной монархии в России 20.84 KB
  Кандидатура Михаила Федоровича устроила представителей всех сословий и политических сил: аристократы были довольны тем что новый царь будет представителем древнего рода Романовых сторонники легитимной монархии были довольны тем что Михаил Федорович имеет родство с Иваном Грозным а пострадавшие от террора и хаоса смуты были довольны тем что Романов не причастен к опричнине казаки же были довольны что отцом юного царя был митрополит Филарет.
79530. Россия в конце 17-первой четверти 18 веков 21.76 KB
  Россия по Вечному миру с Польшей закрепила за собою Киев и вступила в антитурецкую коалицию. по Ништадтскому миру Россия получила за крупную сумму Эстонию Латвию и почти всю Карелию. Россия заключила союз с Австрией.
79531. Международные отношения и внешняя политика России при Петре 1 23.79 KB
  Образование Российской 1Пётр I предпринял целый ряд реформ. После возвращения из Великого посольства Пётр I повёл борьбу с внешними проявлениями устаревшего образа жизни но не менее обращал внимание на приобщение дворянства к образованию и светской европеизированной культуре. Успех по службе Пётр поставил для дворян в зависимость от образования. Всего в посольство вошло до 250 человек среди которых под именем урядника Преображенского полка Петра Михайлова находился сам царь Пётр I.