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

Вниз

Использование object   Найти похожие ветки 

 
euru   (2003-01-22 20:15) [0]

Чем чревато использование типов, созданных на основе object?


 
Nick_N_A   (2003-01-23 05:41) [1]

У них
-вырублен RTTI интерфейс,
-отсутствует поддержка сохранения/загрузки свойств
-Нет ничего похожего на координаты


 
Думкин   (2003-01-23 06:52) [2]

Ничем - если с головой дружишь.


 
Reindeer Moss Eater   (2003-01-23 08:36) [3]

А что такое у тебя object ?


 
euru   (2003-01-23 09:07) [4]

Начался новый рабочий день...

>Nick_N_A ©
Что ты подразумеваешь под координатами?

>Думкин ©
Идея есть: использовать object вместо record - в разумных, конечно, пределах.

>Reindeer Moss Eater
object - это ключевое слово


 
Думкин   (2003-01-23 09:10) [5]


> >Reindeer Moss Eater
> object - это ключевое слово

Речь все-таки, видимо, о TObject?


> >Думкин ©
> Идея есть: использовать object вместо record - в разумных,
> конечно, пределах.

Если разумны не только пределы, то мысль разумная.


 
euru   (2003-01-23 09:18) [6]

> Думкин ©
> Речь все-таки, видимо, о TObject?

Да нет, TObject - это class, а я говорю про старый, еще TurboPascal"евский, object.

Если переменную типа object объявлять статически, то она практически ничем не отличается от record, только у object еще могут быть методы, удобные для работы с переменной


 
Reindeer Moss Eater   (2003-01-23 09:23) [7]

использование типов, созданных на основе object?

А научи ка нас создать тип, наследованый от Object


 
euru   (2003-01-23 09:33) [8]

> Reindeer Moss Eater
> А научи ка нас создать тип, наследованый от Object

Вообще-то, я про наследование от object ничего не говорил, а типы создаются просто:


type
a = object
m1: ...
m2: ...
end;


И можно даже так:


type
b = object(a)
m3: ...
m4: ...
end;


Плюс ко всему конструкторы, деструктор, методы и т.д.


 
Думкин   (2003-01-23 09:36) [9]

Object types are supported for backward compatibility only. Their use is not recommended.


 
Reindeer Moss Eater   (2003-01-23 09:40) [10]

Тогда простой и внятный ответ из документации:

Object types are supported for backward compatibility only. Their use is not recommended.


 
Anatoly Podgoretsky   (2003-01-23 09:44) [11]

И только этим и надо руководствоваться и ничем другим.


 
euru   (2003-01-23 09:46) [12]

>Думкин ©
>Object types are supported for backward compatibility only. Their use is not recommended.

Это пишется еще с D1. Уже сменилось 7 версий. В шести из них object поддерживается. D7 я не видел, но думаю, что и там он есть. Что-то подозрительно долго держится эта обратная совместимость...


 
Reindeer Moss Eater   (2003-01-23 09:49) [13]

Чем чревато использование типов, созданных на основе object?
Тем, что когда-нибудь backward compatibility может внезапно кончиться


 
Думкин   (2003-01-23 09:57) [14]

Все верно, такие вещи могут более десяти лет продолжать поддерживаться - а потом кирдык, и все.


 
euru   (2003-01-23 10:20) [15]

1. Что-то я навскидку не могу припомнить ни одного неожиданного и бесповоротного кирдыка.
2. Хоть я и не сторонник KOL, но там object с успехом применяют - и не первый год.
3. Так как не было возражений, я так понимаю в D7 все-таки object еще есть. Значит, пока время кирдыка не настало.

Но меня больше всего интересовала чреватость использования object в текущих версиях Delphi.


 
Reindeer Moss Eater   (2003-01-23 10:25) [16]

При такой постановке вопроса ничего чреватого (чреватнее чем использование любых других поддерживаемых типов) нет.


 
uw   (2003-01-23 10:34) [17]

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


 
REA   (2003-01-23 10:44) [18]

А жаль кстати - классы VCL тяжеловаты и от них (неупакованных ресурсов, RTTI и т.п.) пучит exe.


 
Calm   (2003-01-23 11:08) [19]


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

Если не ошибаюсь, свойства можно использовать и в object.
А методы класса... Вы часто ими пользуетесь?


> А жаль кстати - классы VCL тяжеловаты и от них (неупакованных
> ресурсов, RTTI и т.п.) пучит exe.

В Delphi сложновато совсем не использовать классы. Выполнение некоторых типов на основе object практические не уменьшит разрмер exe. А если использовать object везде - прямая дорога к KOL.


 
euru   (2003-01-23 11:09) [20]

>uw ©
Пример:

program Project1;

uses
SysUtils;

type
TA = object
private
F1: Integer;
F2: Integer;
procedure setF2(Value: Integer);
public
constructor create(a1, a2: Integer);
class function mc(): String;
property P1: Integer read F1;
property P2: Integer read F2 write setF2;
end;

constructor TA.create(a1, a2: Integer);
begin
F1 := a1; F2 := a2;
end;

procedure TA.setF2(Value: Integer);
begin
if Value > 0 then F2 := Value
else raise Exception.Create("Error");
end;

class function TA.mc(): String;
begin
Result := "TA";
end;

var
a: TA;

begin
a.create(1, 2);
a.P2 := a.P1 + 5;
writeln(a.mc, a.P1, a.p2);
end.


Работает. Правда TA.mc() не проходит, но я изначально object рассматривал не как альтернативу class, а как расширение record


 
Игорь Шевченко   (2003-01-23 11:22) [21]

А смысл откатываться во вчерашний день и использовать object ?
Если только Кладову в копилку копеечку положить ?


 
Anatoly Podgoretsky   (2003-01-23 11:33) [22]

euru (23.01.03 10:20)
Освежим твою память: Interrupt, inline, port, mem список можно продолжить, просто больше по памяти не помню.


 
euru   (2003-01-23 11:53) [23]

>Игорь Шевченко ©
>А смысл откатываться во вчерашний день и использовать object ?
>Если только Кладову в копилку копеечку положить ?

Еще раз. object - это расширение record, а не замена class.
Пример:

TExRect = object
private
FA, FB: TPoint;
public
constructor Create(L, T, Rt, B: Integer); overload;
constructor Create(const LT, BR: TPoint); overload;
constructor Create(const R: TRect); overload;
constructor Create(const ExR: TExRect); overload;
procedure Move(Delta: TPoint);
...
property Left: Integer ...
property Top: Integer ...
...
property LeftTop: TPoint ...
property RightBotton: TPoint ...
property R: TRect ...
property Width: Integer ...
property Heigth: Integer ...
...
end;


Смысл:
1. Объявление переменной такого типа (не указателя) автоматически выделит память под ее поля. => Если локально объявлять в процедурах, то при выходе из них память автоматически освобождается - деструктор использовать необязательно (он нужен только в случае, если объект сам использует динамические ресурсы).
2. Отпадает необходимость писать внешние процедуры для инициализации объекта и получения от него дополнительной информации - это возложено на сам объект.
3. Появляется инкапсуляция, наследование и полиморфизм, чего не хватает типам на основе record.


 
euru   (2003-01-23 12:01) [24]

>Anatoly Podgoretsky ©
>Освежим твою память: Interrupt, inline, port, mem список можно продолжить, просто больше по памяти не помню.

Ну, не надо утрировать. Хотя от inline в том виде, в каком он есть в C++, я бы не отказался


 
Игорь Шевченко   (2003-01-23 12:17) [25]

euru (23.01.03 11:53)

Наследовать от record"a в общем случае не получится, так как в начало объекта добавится поле VMT.

С локальными переменными - ведь не очень трудно сначала создать объект от TObject, а по finally удалить его.
Зато выигрыш от использования class гораздо больше.


 
euru   (2003-01-23 12:43) [26]

> Игорь Шевченко ©

> Наследовать от record"a в общем случае не получится, так как в начало объекта добавится поле VMT.

От record"а ни в каком случае наследования не получится - синтаксис не позволит. А разве в VMT добавляется информация, если не использовать виртуальные методы?

> .. не очень трудно сначала создать объект от TObject, а по finally удалить его

Такая возможность остается и при использовании object (особенно если создавать его динамически). Однако при статическом объявлении программы этого делать необязательно (если в объекте не используются динамические ресурсы). => Увеличение скорости работы программы (нет динамического выделения память, не используется обработка исключительных ситуаций), возможное уменьшение размера программы (по тем же причинам + object менее ресурсоемок, чем class), да и исходники в размерах могут уменьшится (хотя это некритично)


 
Игорь Шевченко   (2003-01-23 12:55) [27]


> Увеличение скорости работы программы (нет динамического
> выделения память, не используется обработка исключительных
> ситуаций)


Это тем более некритично. Разница в несколько команд...Не станешь же ты создавать и уничтожать объект в цикле из 1000000 итераций.


> От record"а ни в каком случае наследования не получится
> - синтаксис не позволит


Почему же?

type
A = record
...
end;

B = object
AA : A;
end;

Можно методы добавлять...


 
Думкин   (2003-01-23 13:06) [28]

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


 
euru   (2003-01-23 13:17) [29]

> Игорь Шевченко ©

> Это тем более некритично. Разница в несколько команд...Не станешь же ты создавать и уничтожать объект в цикле из 1000000 итераций.

А если необходим массив из большого количества этих объектов? Тогда все равно нужны будут циклы для создания и уничтожения этих объектов.

> Почему же?

Наверно, B тоже record, иначе почему A не object. Но в любом случае это не наследование, а, если я не ошибаюсь, агрегация со всеми вытекающими отсюда последствиями.



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

Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.151 c
1-4874
trotski
2003-01-24 22:12
2003.02.03
RichEdit


8-5089
MiS
2002-10-22 10:02
2003.02.03
Tcolor


14-5213
Opryshok
2003-01-15 18:52
2003.02.03
Репорты в HTML-формате. Проблемы. Помогите.


1-4832
qwerty2
2003-01-24 12:28
2003.02.03
Как узнать текущий формат системной даты?


1-4957
Сава
2003-01-26 19:21
2003.02.03
Использование dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский