Бодрое утро!Завтра намечается экзамен по Объектно-ориентированному программированию.Существует несколько вопросов, неосвещенных ни в нашем чудесном учебном заведении , ни в волшебном FAQ-e... хотелось бы кое -что прояснить, для себя, и для зачетки. вот список вопросов: 1) чем принципиально отличается конструктор (constructor ) среды паскаль от конструктора в среде делфи.Методы вызова в этих средах( мне на пальцах можно...представление обо всем этом я имею, просто вот конкретно ответить на эти вопросы не могу ) 2) Self-параметры в паскале.Когда необхадим.Принцип действия. 3)Чем отличаются виртуальные методы от динамических? 4)Механизмы позднего и раннего связывания.ВОт тут можно поподробнее... 5)Событийное управление.Методы реализации.
Если кто-то обладает данной информацией и способен в доступной форме выразить все это, буду признательна.Может ссылки какие есть пользительные по этому вопросу? а то нам объясняли последний раз что self-параметр это что-то типа шасси в самолете, которое содержит этот самолет...конечно я все понимаю...но
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 тоже нельзя, ибо:
... параметр 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 вроде
Чем отличается конструктор в Object Pascal от конструктора в Делфе?
Ты ничего не путаешь? Делфи - это не язык... Может быть, речь про реализацию конструктора в двух таких случаях: 1.
TA=object...
2.
TA=class...
?
Ozzя
10.01.2007 18:54
Цитата(мисс_граффити @ 10.01.2007 15:52)
Ты ничего не путаешь? Делфи - это не язык...
Начиная с версии 7, язык. Если Борланд нам не врет.
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
а какая буква тут принадлежит записи, а какая объекту, то есть что чему присваивается ?
так ничего и не нашла по раннему и позднему связыванию...как насчет ссылки?
volvo
10.01.2007 21:38
Если есть Self - то это поле объекта... У записи нет Self ... То есть, здесь полю объекта присваивается значение поля записи, т.е.:
Self также можно использовать, когда надо передать объект своему же методу как параметр. В общем когда тебе понадобится его использовать, ты это поймёшь..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.