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.Программа содержит некоторый объект, все данные объекта недоступны извне, при этом внутри объекта происходит обработка массива данных, размер этого массива заранее неизвестен, поэтому память под этот массив выделяется динамически в момент создания экземпляра объекта.


 

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

26336. Развитие естественнонаучной мысли эпохи Просвещения 12.77 KB
  Развитие естественнонаучной мысли эпохи Просвещения. В истории философской мысли 18 век обычно характеризуется как век Просвещения. Оптимизм Просвещения выражает менталитет крепнувшей буржуазии не случайно родиной Просвещения стала Англия раньше других стран вставшая на путь капиталистического развития. Развитие Просвещения в философии тесно связано с социальнополитическими идеями становлением идеологии.
26337. Английское Просвещение 33.19 KB
  Для просветителей же XVIII в. Философия Основоположник свободомыслия XVIII в. В течение всего XVIII в. Признание ощущения источником нашей мысли великая идея получившая дальнейшее развитие в материализме XVIII в.
26338. Французское Просвещение 48.01 KB
  Жан Жак Руссо Новым этапом в развитии французского Просвещения XVIII в. была деятельность Жан Жака Руссо 1712 1778 идеолога революционной мелкой буржуазии. значительное влияние на якобинцев провозгласивших Руссо своим идейным предшественником. Пройдя суровую жизненную школу Руссо с детства видел страдания народа.
26339. Американское Просвещение 40.96 KB
  Крупнейшие представители американского Просвещения: Франклин Джефферсон Пэйн и другие являются вместе с тем активными революционными деятелями руководящими фигурами в современной им политической борьбе. Представителями радикального якобинского крыла в американском деизме были Томас Пэйн и Этан Аллен. Близкий к взглядам Аллена круг идей но в более развернутом виде содержит вышедшая десять лет спустя книга Пэйна Age of reason Век разума. Томас Пэйн 1737 1809 гг.
26340. Германское Просвещение 14.68 KB
  Предметом теоретической философии по Канту должно быть не изучение самих по себе вещей природы мира человека а исследование деятельности установление законов человеческого разума и его границ. он написал тезисы Воспитание человеческого рода главная идея которых единство человеческого рода его всеохватной целостности. Но высокая оценка христианской святости по его мнению не означала что духовная эволюция человеческого рода завершается именно этой религией. Таким образом Немецкое Просвещение рассматривало движение человека к...
26341. Предпосылки и начало промышленной революции в Англии. Её экономические и социальные результаты 24.26 KB
  Предпосылки и начало промышленной революции в Англии. в Англии раньше чем в других странах начался промышленный переворот. Несомненно важным фактором стимулировавшим промышленную революцию в Англии была иностранная конкуренция. Эти капиталы и явились важным источником индустриализации Англии именно они позволили Англии ранее других стран совершить промышленную революцию.
26342. Внутренняя и внешняя политика Англии в XVIII в. Виги и тори 25.82 KB
  Внутренняя и внешняя политика Англии в XVIII в. Внешняя политика: В XVIII веке Англия после двух революций окончательно сформировавшая свой политический строй ведет планомерную политику расширения торговли и колоний. Это была политика найма друзей и натравливания их на своего главного врага каким в XVIII веке для Англии стала Франция. XVIII век время которое создало великую Английскую империю был временем ожесточенного поединка за эту империю между Францией и Англией.
26343. Политическое и социально-экономическое развитие колоний в Северной Америке в XVII – п.п. XVIII в. 15.69 KB
  Политическое и социальноэкономическое развитие колоний в Северной Америке в XVII п. Начало английским владениям на атлантическом побережье Северной Америки было положено в 1607 году когда была основана первая из колоний Виргиния. Постепенно на Атлантическом побережье из захваченных у индейцев земель образовалось 13 колоний. Эта особенность рабовладельческого хозяйства и погоня за наживой толкали плантаторов к непрерывному расширению территории колоний.
26344. Политика Англии в колониях и причины войны за независимость 24.38 KB
  Этой политике соответствовал характер развития южных колоний с их плантационным хозяйством. английский парламент нашел успехи промышленности колоний настолько угрожающими что запретил сооружать в них прокатные станы железорезальные мастерские. Экономическое развитие 13 колоний происходило значительно быстрее чем развитие французской Канады. Так население этих колоний выросло с 275 тыс.