Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Вниз

Ключевое слово "object"   Найти похожие ветки 

 
Servelat ©   (2007-03-03 17:04) [0]

В первую очередь пошел искать в хелпе, не нашел (хотя узнал много интересного ^^), в яндексе тоже глухо. В книжках по делфи, которые мне попадались о сабже тоже нет упоминаний. Итак, что же делает ключевое слово "object"? Ссылки на документацию приветствуются, но и ответом "своими словами" не побрезгую.

ЗЫ В общем-то, какой-то конкретной цели не преследую, просто для повышения образованности.


 
Desdechado ©   (2007-03-03 17:06) [1]

Это устаревший способ работы с самодельными объектами. Теперь гораздо целесообразнее использовать class


 
Servelat ©   (2007-03-03 17:11) [2]

> Это устаревший способ работы с самодельными объектами


Моё любопытсво все еще не удовлетворено :). Чем object отличается от class, что именно устарело. Попадался мне как то код с этим волшебным словом, так что хотелось бы понять что это из себя представляет.


 
alien1769 ©   (2007-03-03 17:13) [3]

Идеальное слово для описания всего.

Даже для искуственного интелекта.


 
PEAKTOP ©   (2007-03-03 17:14) [4]

> Desdechado ©   (03.03.07 17:06) [1]
> Это устаревший способ работы с самодельными объектами. Теперь гораздо целесообразнее использовать class


В Делфях классом считается все, что прождено от TObject. Но проблема в том, что нужно было объявить сам TObject в юните "system.pas", для чего и использовали ключевое слово языка Паскаль object. Ключевое слово class не является зарезервированным словом языка Паскаль, хотя поддерживается и зарезервировано сейчас почти всеми компиляторами (Delpi, FPC, Lazarus, Kylix, TNT).


 
DrPass ©   (2007-03-03 17:17) [5]


> Чем object отличается от class, что именно устарело

object в общем-то позволяет создать статический объект. Подробнее о нем ты лучше прочитай в любом руководстве по Турбо-Паскалю 5.5-7.0, с тех пор ничего не изменилось. В Delphi object только для совместимости и поддерживается


 
Servelat ©   (2007-03-03 17:19) [6]

> [5] DrPass ©   (03.03.07 17:17)


Руководство щас погуглю.
А  под статическим объектом понимается объект, все методы которого статические? А конструктор с деструктором присутствуют? (=


 
default ©   (2007-03-03 17:22) [7]

Servelat ©   (03.03.07 17:19) [6]
нет просто память под такой объект выделяется статически, то есть при загрузке программы в память, а не когда программист соизволит


 
Ketmar ©   (2007-03-03 17:34) [8]

> PEAKTOP ©   (03.03.07 17:14) [4]
 TObject = class;
 TClass = class of TObject;

купи "твикс". жуй. молчи. заодно почитай материалы по Object Pascal (тому, из которого упёрли концепцию обёектов в Turbo Pascal 5.5).


 
Servelat ©   (2007-03-03 17:41) [9]

Собственно, вопрос закрыт; нашел у себя на винте UserGuide по BP70 (что прям удивительно, на русском), где тема полностью раскрыта, просвещаюсь. Всем спасибо за ответы.


 
TUser ©   (2007-03-03 18:43) [10]

Удобен тем, что содержит в себе идеи ООП (наследование) и не требует лишней работы и памяти. Посмотри, сколько всего делается и создается в конструкторе TObject! Если мне нужно будет использовать сотню-другую тысяч объектов, то выбор будет за object"ами, а не за классами, наверное.


 
Loginov Dmitry ©   (2007-03-03 18:58) [11]

> Если мне нужно будет использовать сотню-другую тысяч объектов,
> то выбор будет за object"ами, а не за классами, наверное.


Так и до record"a дойти не долго :))


 
PEAKTOP ©   (2007-03-03 19:03) [12]

> Ketmar ©   (03.03.07 17:34) [8]

Ты не прав.


 
TUser ©   (2007-03-03 19:11) [13]

> Loginov Dmitry ©   (03.03.07 18:58) [11]

Структурное программирование рулит. Я серьезно.


 
tesseract ©   (2007-03-03 20:52) [14]


>  Посмотри, сколько всего делается и создается в конструкторе
> TObject! Если мне нужно будет использовать сотню-другую
> тысяч объектов, то выбор будет за object"ами, а не за классами,
>  наверное.


Гм. Наверное наооборот :-)  class как раз под такие случаи и заточен :-)


 
TUser ©   (2007-03-03 21:04) [15]

> tesseract ©   (03.03.07 20:52) [14]

На пустых объектах/классах поэкспериментировал, 100000000 TObject"ов создано за 19 секунд и использовано 720 метров памяти, столько просто обджектов - за ноль секунд и использовано памяти метр с копейками. Если объекты буду содержать какие-то данные и выполнять какие-то действия, то и на сотне разницу почуствуем.


 
Loginov Dmitry ©   (2007-03-03 21:10) [16]

> использовано памяти метр с копейками


Сами-то в это верите?


 
Loginov Dmitry ©   (2007-03-03 21:11) [17]

> Если объекты буду содержать какие-то данные и выполнять
> какие-то действия, то и на сотне разницу почуствуем.


Или эта разница просто-напросто исчезнет.


 
TUser ©   (2007-03-03 21:24) [18]

> Сами-то в это верите?

Четырехзначная цифирь, начинается на один ...


 
vuk ©   (2007-03-03 22:13) [19]

to PEAKTOP ©   (03.03.07 17:14) [4]:
Что за трава? Или это были грибы? :)))

to TUser ©   (03.03.07 21:04) [15]:
>На пустых объектах/классах поэкспериментировал
Угу, а производительность будем на "Hello, World!" мерять. :)
Пустой object занимает 0 байт, в отличие от наследника TObject, который занимает 4 минимум байта.

>Если объекты буду содержать какие-то данные и выполнять какие-то
>действия, то и на сотне разницу почуствуем.
Фиг. Если в object будет поле, допустим integer, вес уравняется. Преимуществ не будет почти никаких. При одинаковом количестве полей будут те самые 400 байт на сотне.

И вообще, что-то цифры подозрительные. Что там в коде-то?


 
Игорь Шевченко ©   (2007-03-04 00:06) [20]

TUser ©   (03.03.07 21:04) [15]

Тут такой момент - пустые объекты, как и пустые классы никому не нужны. Давай ты полные насоздаешь ?


 
TUser ©   (2007-03-04 04:27) [21]

33 секунды для объектов vs минута думанья и Out of memory в случае классов :) Объекты и классы содержали по два поля типа integer + то, что от TObject. Говорю же - объекты (те, которые экземпляры классов) память любят кушать. Больше, чем объекты, которые просто, т.е. типа record с наследованием.


 
Loginov Dmitry ©   (2007-03-04 08:56) [22]

> Говорю же - объекты (те, которые экземпляры классов) память
> любят кушать. Больше, чем объекты, которые просто, т.е.
> типа record с наследованием.


Ай-ай! Какая беда! 100000000 объектов всю память скушали!
Только нюансик один: что вообще в принципе можно делать с таким количеством объектов? Их же надо где-то индексировать (в массиве там, или в списке), это еще 400 метров памяти надо. Нужен метод доступа, поиска и т.п., что при таком количестве объектов (будь то object или class) будет выполняться катастрофически долго.
То есть пример со 100000000 объектов выглядет очень уж надуманным.


 
vuk ©   (2007-03-04 10:57) [23]

to TUser ©   (04.03.07 04:27) [21]:
>Говорю же - объекты (те, которые экземпляры классов) память любят
>кушать. Больше, чем объекты, которые просто, т.е. типа record с
>наследованием.
А вот мои подсчеты говорят, что памяти в результате понадобится одинаковое количество. Догадываетесь, почему? А времени, тут да, создание экземпляра класса требует чуть больше, т.к. экземпляру класса требуется инициализация, а у object её по-умолчанию нет, но это опять же, до тех пор пока там данных в нормальном количестве нет.

Поэтому еще раз говорю, что-то там не то с методикой. Код в студию.


 
vuk ©   (2007-03-04 11:17) [24]

Чтобы вопросов не возникало:


program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 Windows;

type
 Cls = class
   a,b: integer;
 end;

 PObj = ^Obj;
 Obj = object
 private
   a,b: integer;
 end;
 

procedure AllocCls(count: integer);
var
 i: integer;
begin
 for i := 0 to Count - 1 do
   Cls.Create;
end;  

procedure AllocObj(count: integer);
var
 i: integer;
 o: PObj;
begin
 for i := 0 to Count - 1 do
   new(o);
end;  

var
 T1, T2, T3: Cardinal;
 S1, S2, S3: Cardinal;
begin
 T1 := GetTickCount;
 S1 := GetHeapStatus.TotalAllocated;
 AllocCls(10000000);
 S2 := GetHeapStatus.TotalAllocated;
 T2 := GetTickCount;
 AllocObj(10000000);
 S3 := GetHeapStatus.TotalAllocated;
 T3 := GetTickCount;
 writeln(Format("%d  %d", [T2-T1, S2-S1]));
 writeln(Format("%d  %d", [T3-T2, S3-S2]));  
 readln;
end.


Результат (CoreDuo 6600 2.4 ГГц, RAM 2ГБ):
500  120000000
109  120000000

Памяти требуют оба варианта, что естественно для данного случая, одинаково, несмотря на разницу в размерах экземпляров. А чем разница во времени обусловлена - см. выше.


 
Olivetti   (2007-03-04 12:23) [25]

Но проблема в том, что нужно было объявить сам TObject в юните "system.pas", для чего и использовали ключевое слово языка Паскаль object

О как. Оказывается, object использовали для создания class. Вот так и возникают религии. Хвала всевышнему, объект придумавшему, ибо класс и экземпляр класса - суть порождение его. Во имя object, class и instance его! Аминь.


 
Virgo_Style ©   (2007-03-04 12:29) [26]

Я, наверное, еретик... бо у меня возник вопрос, откуда же в таком случае взялся сам object :0)

и если от record"а, то откуда взялся record? и так далее... )


 
vuk ©   (2007-03-04 12:37) [27]

to Virgo_Style ©   (04.03.07 12:29) [26]:
>откуда взялся record?
record был всегда :)


 
Virgo_Style ©   (2007-03-04 12:50) [28]

vuk ©   (04.03.07 12:37) [27]
Аминь %-)


 
Palladin ©   (2007-03-04 13:25) [29]

record придумал Вирт, а Вирта придумали мама с папой... выводы очевидны :)


 
default ©   (2007-03-04 13:46) [30]

хех
неужто настолько делать нефига  людям что ещё не влом думать о такой архаике как object:)


 
Ketmar ©   (2007-03-04 14:03) [31]

> PEAKTOP ©   (03.03.07 19:03) [12]
расслабься. приведённый мной код -- цитата из system.pas. советую перед тем, как вещать, таки читать генофонд. ну и -- да, язык, о котором вещаешь, тоже выучить бы не помешало.


 
просто так   (2007-03-04 14:07) [32]

>>неужто настолько делать нефига  людям что ещё не влом думать о такой архаике как object:)
что за наезды на обжект? фундаментальная штука. это класс придумка борланда, насколько помню в стандарте паскаля нет такого словечка:)


 
_uw_   (2007-03-04 14:08) [33]

object - это отнюдь не архаика.

Во-первых, без слова object затруднительно определить callback типа

type
 TForProgressBar = procedure(Current, Total: Integer) of object;

Это, ясное дело, очень мощное и "современное" средство, не реализованное, к примеру, в С++. Там аналог убогий.

Во-вторых, object позволяет создавать "интеллектуальные записи" (с методами), которые к тому же обладают свойством наследования. В некоторых диалектах С я встречал это свойство "наследования" с применением анонимных структур.


 
Ketmar ©   (2007-03-04 14:10) [34]

> просто так   (04.03.07 14:07) [32]
я-таки скажу откровение: в том стандарте и object ни разу нет.


 
просто так   (2007-03-04 14:15) [35]


> я-таки скажу откровение: в том стандарте и object ни разу
> нет

да, точно ))), но класс развитие обжекта, причем не всегда удобное, и объявлять обжект устаревшим неправильно, для небольших структур данных он подходит гораздо больше чем класс


 
default ©   (2007-03-04 14:16) [36]

_uw_   (04.03.07 14:08) [33]
ну я не про все применения ключевого слова object, а именно про то применение которое оставлено для совместимости

в .NET структуры наделённые свойствами ООП юзаются порой в качестве "легковесных" объектов ибо для них в стеке память выделяется(то есть быстро) и освобождается быстро(а не когда GC соизволит)
в каком-то таком же смысле использования object-объектов возможно и может быть оправдано



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.195 c
15-1172881656
masy
2007-03-03 03:27
2007.03.25
Во сколько оценить


15-1172581034
Rare
2007-02-27 15:57
2007.03.25
Что такое поиск в ширину в фазовом пространстве?


11-1151018833
DevilDevil
2006-06-23 03:27
2007.03.25
Smart-Linking


2-1173000973
GeLLeR
2007-03-04 12:36
2007.03.25
Разрешение монитора


15-1172653890
Elen
2007-02-28 12:11
2007.03.25
Вопрос про кривые OCX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский