1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Теоретические вопросы по ООП, ответы на конкретные вопросы
Бодрое утро!Завтра намечается экзамен по Объектно-ориентированному программированию.Существует несколько вопросов, неосвещенных ни в нашем чудесном учебном заведении , ни в волшебном FAQ-e... хотелось бы кое -что прояснить, для себя, и для зачетки. вот список вопросов: 1) чем принципиально отличается конструктор (constructor ) среды паскаль от конструктора в среде делфи.Методы вызова в этих средах( мне на пальцах можно...представление обо всем этом я имею, просто вот конкретно ответить на эти вопросы не могу ) 2) Self-параметры в паскале.Когда необхадим.Принцип действия. 3)Чем отличаются виртуальные методы от динамических? 4)Механизмы позднего и раннего связывания.ВОт тут можно поподробнее... 5)Событийное управление.Методы реализации.
Если кто-то обладает данной информацией и способен в доступной форме выразить все это, буду признательна.Может ссылки какие есть пользительные по этому вопросу? а то нам объясняли последний раз что self-параметр это что-то типа шасси в самолете, которое содержит этот самолет...конечно я все понимаю...но
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).
Пока все, о связывании сейчас найду ссылку, было очень хорошо написано...
а-ха....по первому вопросу я не так сформулировала наверное...Чем отличается конструктор в Object Pascal от конструктора в Делфе? я даже и сама-то не знаю что от нас хотят...детальное изучение работы языков программирования? ...ню-ню.. еще хотелось бы узнать про виртуальную таблицу...VMT вроде
Чем отличается конструктор в Object Pascal от конструктора в Делфе?
Ты ничего не путаешь? Делфи - это не язык... Может быть, речь про реализацию конструктора в двух таких случаях: 1.
TA=object...
2.
TA=class...
?
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
ну млин )))) наверно я все путаю..но ) я помню, что "делфи - это тот же паскаль но под Винду и немножко другой" как мне объяснили тут недавно...так вот в досовском паскаел турбо №7 видимо конструктор немножко другой , чем в делфЕ...так вот нас и попросили узнать, в чем разница ... а насчет 2 вариантов, так это просто по разному реализуется это в делфи и в паскале, зоветс япо разному. а работает одинаково ведь, так?
Не совсем одинаково. Поищи по разделу Делфи, была тема, где это обсуждалось... Разница проявляется при замещении методов.
Про конструкторы в принципе volvo ответил. Турбо - это тот самый "классический". Немножко добавлю... В википедии нашла вот что:
Цитата
В Object Pascal вы используете специальное ключевое слово constructor и можете дать конструктору любое имя. Хотя Borland в Delphi 4 добавила поддержку перегрузки методов, программисты всё ещё дают разным конструкторам разные имена. В Object Pascal у каждого класса по умолчанию есть конструктор Create (наследуемый от TObject), если вы не перегрузите его конструктором с тем же именем и, возможно, другими параметрами. Этот конструктор, как мы увидим позднее, просто наследуется от общего базового класса ;)
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
Self также можно использовать, когда надо передать объект своему же методу как параметр. В общем когда тебе понадобится его использовать, ты это поймёшь..
Сообщение отредактировано: Bokul -
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.