Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Теоретические вопросы по ООП

Автор: LOVE133 10.01.2007 16:43

Бодрое утро!Завтра намечается экзамен по Объектно-ориентированному программированию.Существует несколько вопросов, неосвещенных ни в нашем чудесном учебном заведении , ни в волшебном FAQ-e... хотелось бы кое -что прояснить, для себя, и для зачетки.
вот список вопросов:
1) чем принципиально отличается конструктор (constructor ) среды паскаль от конструктора в среде делфи.Методы вызова в этих средах( мне на пальцах можно...представление обо всем этом я имею, просто вот конкретно ответить на эти вопросы не могу )
2) Self-параметры в паскале.Когда необхадим.Принцип действия.
3)Чем отличаются виртуальные методы от динамических?
4)Механизмы позднего и раннего связывания.ВОт тут можно поподробнее...
5)Событийное управление.Методы реализации.

Если кто-то обладает данной информацией и способен в доступной форме выразить все это, буду признательна.Может ссылки какие есть пользительные по этому вопросу? а то нам объясняли последний раз что self-параметр это что-то типа шасси в самолете, которое содержит этот самолет...конечно я все понимаю...но blink.gif

Автор: volvo 10.01.2007 17:11

По порядку:

Цитата(LOVE133 @ 10.01.2007 11:43)
1) чем принципиально отличается конструктор (constructor ) среды паскаль от конструктора в среде делфи.
Имеется в виду КАКОЙ Паскаль? Не Object? Тогда, наверное, различием можно считать то, что в классическом Паскале конструктор не может быть виртуальным, а в Object Pascal - может...
Цитата(LOVE133 @ 10.01.2007 11:43)
2) Self-параметры в паскале. Когда необхадим. Принцип действия.
Необходим для разрешения конфликтов (имен, в частности)... Классический пример:
Type
Rec = Record
A, B: Integer;
End;

Obj = Object
A, B: Integer;
Constructor Init(R: Rec);
End;

Constructor Obj.Init(R: Rec);
Begin
With R Do Begin
self.A := A; { <--- Без self компилятор не разберется, о каком первом A речь }
self.B := B;
End;
End;
Принцип действия... Хм... В каждый метод объекта кроме фактических параметров, передается невидимый параметр Self, указывающий, какому объекту принадлежит метод... Явно обычно Self не обрабатывается, с этим прекрасно справляется компилятор (один из немногочисленных случаев, когда применение Self оправдано я привел выше)... Но совсем забывать про Self тоже нельзя, ибо:
Цитата(Глава 9. Объектно-ориентированное программирование)
... параметр Self является частью физического кадра стека при всех вызовах методов. Методы, используемые как внешние на языке Ассемблера, должны учитывать Self при получении доступа к параметрам метода в стеке.

Цитата(LOVE133 @ 10.01.2007 11:43)
3)Чем отличаются виртуальные методы от динамических?
В принципе - ничем, хотя...
Цитата(www.interface.ru)
По смыслу динамические и виртуальные методы идентичны. Различие состоит только в механизме их вызова. Методы, объявленные с директивой virtual, вызываются максимально быстро, но платой за это является большой размер системных таблиц, с помощью которых определяются их адреса. Размер этих таблиц начинает сказываться с увеличением числа классов в иерархии. Методы, объявленные с директивой dynamic вызываются несколько дольше, но при этом таблицы с адресами методов имеют более компактный вид, что способствует экономии памяти. Таким образом, программисту предоставляются два способа оптимизации объектов: по скорости работы (virtual) или по объему памяти (dynamic).


Пока все, о связывании сейчас найду ссылку, было очень хорошо написано...

Автор: LOVE133 10.01.2007 17:27

а-ха....по первому вопросу я не так сформулировала наверное...Чем отличается конструктор в Object Pascal от конструктора в Делфе? я даже и сама-то не знаю что от нас хотят...детальное изучение работы языков программирования? ...ню-ню..
еще хотелось бы узнать про виртуальную таблицу...VMT вроде

Автор: Ozzя 10.01.2007 18:16

Цитата
еще хотелось бы узнать про виртуальную таблицу...VMT вроде

http://zeus.sai.msu.ru:7000/programming/bp70_lr/lr21.shtml#44

Автор: LOVE133 10.01.2007 18:28

читаю...осваиваю...кто еще что предложит? cool.gif

Автор: мисс_граффити 10.01.2007 18:52

Цитата
Чем отличается конструктор в Object Pascal от конструктора в Делфе?

Ты ничего не путаешь? Делфи - это не язык...
Может быть, речь про реализацию конструктора в двух таких случаях:
1.
TA=object...

2.
TA=class...
?

Автор: Ozzя 10.01.2007 18:54

Цитата(мисс_граффити @ 10.01.2007 15:52) *

Ты ничего не путаешь? Делфи - это не язык...


Начиная с версии 7, язык. Если Борланд нам не врет. rolleyes.gif

Автор: LOVE133 10.01.2007 19:06

ну млин )))) наверно я все путаю..но ) я помню, что "делфи - это тот же паскаль но под Винду и немножко другой" как мне объяснили тут недавно...так вот в досовском паскаел турбо №7 видимо конструктор немножко другой , чем в делфЕ...так вот нас и попросили узнать, в чем разница ...
а насчет 2 вариантов, так это просто по разному реализуется это в делфи и в паскале, зоветс япо разному. а работает одинаково ведь, так?

Автор: мисс_граффити 10.01.2007 19:18

Не совсем одинаково.
Поищи по разделу Делфи, была тема, где это обсуждалось...
Разница проявляется при замещении методов.

Про конструкторы в принципе volvo ответил. Турбо - это тот самый "классический".
Немножко добавлю...
В википедии нашла вот что:

Цитата
В Object Pascal вы используете специальное ключевое слово constructor и можете дать конструктору любое имя. Хотя Borland в Delphi 4 добавила поддержку перегрузки методов, программисты всё ещё дают разным конструкторам разные имена. В Object Pascal у каждого класса по умолчанию есть конструктор Create (наследуемый от TObject), если вы не перегрузите его конструктором с тем же именем и, возможно, другими параметрами. Этот конструктор, как мы увидим позднее, просто наследуется от общего базового класса ;)


Автор: LOVE133 10.01.2007 20:09


Begin
With R Do Begin
self.A := A; { <--- Без self компилятор не разберется, о каком первом A речь }
self.B := B;
End


а какая буква тут принадлежит записи, а какая объекту, то есть что чему присваивается ?


так ничего и не нашла по раннему и позднему связыванию...как насчет ссылки? smile.gif

Автор: volvo 10.01.2007 21:38

Если есть Self - то это поле объекта... У записи нет Self ... То есть, здесь полю объекта присваивается значение поля записи, т.е.:

Self {Объект} .A <- R.A;
Self {Объект} .B <- R.B;

Автор: Bokul 11.01.2007 4:27

Вот эта ссылка мне очень сильно помогла в понимании механизма объектов - http://zeus.sai.msu.ru:7000/programming/bp70_ug/bp70ug_091.shtml#6

Self также можно использовать, когда надо передать объект своему же методу как параметр. В общем когда тебе понадобится его использовать, ты это поймёшь.. smile.gif