OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 16 Июнь, 2025 02:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: OBJECT и CLASS
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 14:43 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Здравствуйте.

Скажите пожалуйста, где можно почитать об особенностях реализации ООП в Delphi/Free pascal
Интересует какой подход более эффективен (по быстродействию, по объёму кода и т.п.)
Как я понимаю, сейчас есть две ветки ООП
Код:
pMyObject = ^tMyObject
tMyObject = OBJECT
    CONSTRUCTOR Init ();
    PROCEDURE Foo (); VIRTUAL;
    DESTRUCTOR Done ();
END;
...
VAR
    pObj : pMyObject;
    tObj : tMyObject;
...
BEGIN
   pObj := NEW (pMyObject, Init ());
   tObj.Init ();
   ...
   pObj^.Foo ();
   tObj.Foo ();
   ...
   tObj.Done ();
   DISPOSE (pObj, Done ());


и второй
Код:
    tMyClass = CLASS
        CONSTRUCTOR Init ();
        PROCEDURE Foo ();
        DESTRUCTOR Done ();
    END;
...
VAR
    MyClass : tMyClass;
...
BEGIN
    MyClass := tMyClass.Init ();
    MyClass.Foo ();
    MyClass.Done ();
...


Как писать правильно ? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 14:55 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Слэши ставить правильно в закрывающих тегах code - поправил сообщение, чтобы отображалось нормально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 15:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Несколько замечаний:
- ключевое слово property поддерживается только для class'ов;
- аналогично с interface'ами;
- про поддержку конструкторов и деструкторов не помню;
- все class'ы явно или неявно унаследованы от типа TObject, для object'ов общего предка нет. Посмотрите методы TObject, увидите там базовую поддержку COM.
По сути, object сильно похож на Обероновские расширяемые записи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Воскресенье, 12 Декабрь, 2010 22:08 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
На сколько я знаю, первый вариант - это для обратной совместимости, так было раньше. Сейчас Class, как правильно сказали наследник от TObject. Для создания используется конструктор: MyObj:= TMyObj.Create(), который можно переопределить. В качестве деструктора переопределяют Destroy, но прямо его не вызывают, а вызывают всегда TMyObj.free
Код:
TMyObj = class(TObject)
    constructor Create();
    function Foo: boolean;
    destructor Destroy; override;
  end;
  ...
  MyObj:= TMyObj.Create();
  if MyObj.Foo then ...
  MyObj.Free;

На счет похожести на записи оберона, не согласен, и синтаксис другой и значительно более громоздкий и живут только в динамике.
Насчет почитать, даже не знаю много всего, для начала наверно Архангельский подойдет. Много самых разных материалов на "Корелевстве Делфи" http://delphikingdom.com/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 11:21 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Классы - это такая фиготень, которая располагается только в heap-е, обладает счетчиком ссылок, обнуление которого и есть причина для удаления. Которое происходит сразу же, без раздумья
В общем, ref-counting, вместо сборки мусора. Классы в локальных переменных отслеживаются корректно - уничтожаются (в смысле - уменьшается счетчик ссылок) по выходу. Даже если мимо пролетает исключение (за возможность которого ты ни сном ни духом) - перехватит, и обработает (та еще история, между прочим...)

У объекта - нифига такого нет. Просто синтаксически обагащенная структура данных (не ну vmt у нее конечно есть...). Все на ответственность программиста. Чтобы не расслаблялись :)

Александр Ильин писал(а):
ключевое слово property поддерживается только для class'ов
Неправда Ваша.
Весь KOL собран на Object, а уж сколько там property - и не сосчитаешь. Собственно, использовние property - ключевая фишка в KOL.
Установил какой-нибудь Align := caLeft - и к обработчику сообщений пристегивается килобайтный хэндлер (скажем AlignChildrenProc). Что значит пристегивается - это труд обработчика property для объекта TControl, определенного в KOL.
Ну и если никогда в твоем коде нет установок этого свойства - твой код будет на килобайт легче (магическое слово AlignChildrenProc нигде твоим кодом не цепляется)
Это главный смысл KOL-а. Реализованный на объектах у который куча всяких property :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 11:48 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Galkov писал(а):
Классы - это такая фиготень, которая располагается только в heap-е, обладает счетчиком ссылок, обнуление которого и есть причина для удаления. Которое происходит сразу же, без раздумья
В общем, ref-counting, вместо сборки мусора. Классы в локальных переменных отслеживаются корректно - уничтожаются (в смысле - уменьшается счетчик ссылок) по выходу. Даже если мимо пролетает исключение (за возможность которого ты ни сном ни духом) - перехватит, и обработает (та еще история, между прочим...)
В какой это версии Delphi вдруг классы обзавелись счётчиками ссылок?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 12:01 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Не помню.
В четвертой - уже точно есть.
И массивы, и строки, и интерфейсы - тоже не помню когда обзавелись.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 12:35 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2461
Откуда: Россия, Томск
Galkov писал(а):
В четвертой - уже точно есть.
Ничего подобного. В Delphi 7 cтроки - со счётчиками, интерфейсы тоже, но не классы. Экземпляры class'ов надо удалять вручную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 13:02 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да-да, я тоже помню, что это только для классов, которые реализуют интерфейсы. Т.е. COM-классов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Понедельник, 13 Декабрь, 2010 13:23 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
Счётчики ссылок только в строках и динамических массивах, для которых реализовано свойство copy-on-write. Вся остальная память управляется вручную. Главное отличие классов от объектов - экземпляры классы всегда динамические, поддержка Run-Time-Type-Information (что-то вроде мета-данных). Объекты помечены как устаревшие и у них отсутствует ряд полезных для Delphi вещей, таких как свойства. Про остальное вроде бы сказали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Четверг, 16 Декабрь, 2010 11:09 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Александр Ильин писал(а):
Ничего подобного. В Delphi 7 cтроки - со счётчиками, интерфейсы тоже, но не классы
Вынужден согласиться :shock:
ВЫ ПРАВЫ. Два для подсматривал, не мог поверить... Никаких намеков на "барьер записи"
Бред какой-то. Теперь я полностью потерял веру в разум разработчиков от Бормана
Были структуры данных. И обогатили фишками ООП и получился OBJECT. Вот и славненько, казалось бы.

Но вот Вам новое продвижение - вводятся новые исключительно динамические сущности. И на тебе, прикол - одна из них (класс) не имеет барьера записи.
За каким хреном тогда сущность по фамилии класс нужна - я полностью перестал понимать.
Ибо, я тешу себя надеждой, что у нас нет противоречий на счет того, что у объекта "чего-то там нет".
Все у него есть: и свойства, и наследование, и виртуалы...

Ну да, чуток отличается (скажем, магическое слово override не катит, но по факту - override) от аналогичных механизмов в классах. Но вот на фига ради не очень понятных отличий городить такого монстра - понимание исчезло напрочь.
Да еще и документировал бы кто эти "отличия" по человечески....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Пятница, 17 Декабрь, 2010 22:58 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Поддерживаю, ибо тоже не понимаю.
Раньше писал себе OBJECT и всё было хорошо.
Теперь надо писать CLASS. А вчём отличия (кроме размещения естественно) --- непонятно. Я и OBJECT мог по факту разместить в динамической памяти, через ссылку на объект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 10:53 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Это обычные косметические "улучшения" языка. Object был добавлен в ТурбрПаскаль, дай бог памяти, еще в версию 4. Это 80-е годы - когда С++ еще не был настолько популярен.
С ростом популярности С++ решили в Делфях добавить более "современную" конструкцию class - под влиянием моды на С++.
Аналогичные вещи происходят и в других местах. Например, в C# были generics, а потом под влиянием моды добавили template. О контейнерах я уж и не говорю - были одни контейнеры, потом добавили другие - с той же функциональностью.
Так что не заморачивайтесь, а просто используйте то, что привычно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 11:01 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Самую малость про "устаревшее" и "теперь надо" :D
В какой последовательности в Дельфи появлялось это - не застал и не помню.
А вот FPC начинался почти полного игнорирования объектов - типа устаревшие...
У нас даже две версии KOL-а были - родной, сделанный на объектах, и портированный, сделанный на классах для FPC (v1.93, кажется)
А вот далее уже начали в FPC включать поддержку объектов по полной программе. И авторский KOL уже начал компилироваться.

Так что, кто из них "устаревший" - дискуссионный вопрос :)
Как минимум, концепция "устаревшести объектов" не прошла испытание временем в FPC


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 11:08 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Валерий Лаптев писал(а):
Так что не заморачивайтесь, а просто используйте то, что привычно
+1 :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 11:21 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Galkov писал(а):
Так что, кто из них "устаревший" - дискуссионный вопрос :)
Как минимум, концепция "устаревшести объектов" не прошла испытание временем в FPC

Они просто добивались полной обратной совместимости с делфи. Не поддержав Object этого не добиться, вот и всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 11:25 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
И все равно не добились :)
А на результирующий код смотреть (сравнить с дельфячим) без слез невозможно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 11:34 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Galkov писал(а):
И все равно не добились :)
А на результирующий код смотреть (сравнить с дельфячим) без слез невозможно

В смысле?
Помнится портировал я одну утилитку с делфи на лазарус. Собственно не портировал а пересобирал. Только контролы немного съехали, пришлось их мышкой поперетаскивать на места. Проблем небыло никаких.

Т.о. код дельфячий ничем не отличался от кода fpc'ного :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 15:55 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Валерий Лаптев писал(а):
Например, в C# были generics, а потом под влиянием моды добавили template.
Это только в Вашей голове добавили.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OBJECT и CLASS
СообщениеДобавлено: Суббота, 18 Декабрь, 2010 17:08 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Alexey Veselovsky писал(а):
В смысле?
По мелочам, в общем-то... Но когда наступаешь, мало никогда не кажется :)
Предполагается бинарная совместимость в режиме -MDelphi. И она на 99% есть. А вот передача контекста во вложенных процедурах - уже не так... На асм-вставках глючит (опять же - на 1-ом проценте).
Какого хрена было вообще иной регистровый интерфейс делаешь, если ставишь задачу замены - тайна сия велика есть.
Ну есть еще какие-то страшные встроенные COM-слова в Дельфях, которые FPC не понимает в упор... Хотя давно не следил уже.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB