![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП - помогите разобраться. [D7]
parovoZZ © (2006-06-30 03:11:00)Здарова
Вот никак не могу разобраться в этом лесу.
В исходниках вижу
MyClass.Ceate;
и
MyClass := TMyClass.Create;
В чём разница?
_silver (2006-07-10 13:52:00) [1]> конецформыначалоформы>MyClass.Create;
MyClass.Create;
_silver (2006-07-10 13:52:00) [2]Что касается
конецформыначалоформы>MyClass.Create;
вспомним про КОЛ и про то, что там используется старая обьектная модель
TMyClass = object
...
Всё гораздо проще:)
Игорь Шевченко (2006-07-10 10:39:00) [3]Не все прямые дороги ведут к цели. То, что нельзя сделать шилом, можно штопором.
Пусик (2006-07-10 03:06:00) [4]Если говорить в общем, то конечно конструкция TMyClass.Create ни к чему хорошему не приведет.
Просто о такой возможности надо знать, а не скрывать от новичков.
PS
А есть еще интерфейсы, COM.
И там это высказывание не только не будет абсолютно, но вообще верным.
Пусик (2006-07-10 02:49:00) [5]
> А ведь я просил пример, в котором ссылка не была бы нигде
> сохранена.
А не надо просить того, что не существует.
Еще раз внимательно прочитай [10], начало ветки.
Обрати также внимание на конструкциюTMyClass.Create, которая не сохраняет ссылку на объект.
Разговора о том, что ссылка не будет сохранена вообще, не было. Поэтому не надо безосновательных претензий.
Шпиён (2006-07-10 02:38:00) [6]
> Zeqfreed © (10.07.06 02:25) [34]
Пример - завершение процесса -) Шутка
> Zeqfreed © (10.07.06 02:25) [34]
> Пусик © (10.07.06 02:19) [33]
Вам не кажется, что это уже просто флейм? -)
Zeqfreed (2006-07-10 02:25:00) [7]> [33] Пусик © (10.07.06 02:19)
> Только избавь меня от дальнейших бесполезных придирок?
Ни за что на свете. Как же можно отказать женщине? Позвольте поинтересоваться, как возможно получить доступ к тому, чего нет? А ведь я просил пример, в котором ссылка не была бы нигде сохранена. И вы утверждаете, что данный код удовлетворяет этому малюсенькому условию. Так скажите же, как у вас получилось получить то, чего быть не должно? Наверное, виной всему природная женская магия… Ну что же, придется признать свое поражение.
Пусик (2006-07-10 02:19:00) [8]
> Не пожскажете код, который бы уничтожал объект, ссылка
> на который не была сохранена?
Подскажу. И даже пример приведу. Только избавь меня от дальнейших бесполезных придирок?
Тот же самый класс, указанный выше. И к нему:
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Form1.ComponentCount-1 do
begin
if (Form1.Components[i] is TMyLabel) then Form1.Components[i].Free;
end;
end;
Zeqfreed (2006-07-10 02:09:00) [9]
> [31] Пусик © (10.07.06 01:53)
> [11] Пусик © (09.07.06 18:22)
> destructor TMyObj.Destroy;
> begin
> MessageBox(Application.Handle,'Однако, меня кто-то уничтожил!
> ','Хм...!',MB_OK);
> inherited;
> end;
Однако, этот кто-то и есть тот, кто сохранил ссылку. Истина где-то рядом. Как-то так, да?
В [10] сказано, что не сохранив ссылку на экземпляр класса, нельзя будет его уничтожить вручную. Вы же говорите, что это «необязательно». Не пожскажете код, который бы уничтожал объект, ссылка на который не была сохранена?
Пусик (2006-07-10 01:53:00) [10]
> Zeqfreed © (10.07.06 01:50) [30]
>В [10] про
> такие случаи ничего не сказано, а сказано лишь про случаи,
> когда ссылка на объект не сохраняется.
А где ж ты увидел сохранение ссылки?
Разговор идет про конструкцию видаTMyClass.Create;
Именно такой пример и приведен. Разве не так?
Zeqfreed (2006-07-10 01:50:00) [11]> [29] Пусик © (10.07.06 01:43)
> Возвращаясь к Утверждение в [10] абсолютно верно., добавлю,
> что раз есть примеры, расширяющие утверждение, то это утверждение
> уже не абсолютно верно, а лишь частично. Для абсолютной
> верности ему не хватает верности во всех случаях.
Придется повториться: в ваших примерах ссылка на объект сохраняется. В [10] про такие случаи ничего не сказано, а сказано лишь про случаи, когда ссылка на объект не сохраняется.
Пусик (2006-07-10 01:43:00) [12]
> Zeqfreed © (10.07.06 00:52) [28]
> > [27] Пусик © (10.07.06 00:02)Утверждение в [10] абсолютно
> верно. В ваших примерах, ссылка на объект, хотя и не явно,
> но сохраняется во внутреннем поле другого объекта. То,
> что вы демонстрируете является лишь удобной оберткой, предусмотренной
> разработчиками VCL. Разве не так?
По пунктам:
Утверждение в [10] абсолютно верно.
Но не в полной мере. Почему? - см. [19].
В ваших примерах, ссылка на объект, хотя и не явно, но сохраняется во внутреннем поле другого объекта.
Почему бы ссылке не быть сохраненной?
Любой класс может включать в себя любые другие классы, ссылки на объекты дргого типа, поля любого типа.
Хочешь ввести ограничения?
То, что вы демонстрируете является лишь удобной оберткой, предусмотренной разработчиками VCL. Разве не так?
Все классы, возможные в ООП, есть удобные обертки для процедур, функций, переменных различного типа. И о чем это говорит?
-----------
Возвращаясь к Утверждение в [10] абсолютно верно., добавлю, что раз есть примеры, расширяющие утверждение, то это утверждение уже не абсолютно верно, а лишь частично. Для абсолютной верности ему не хватает верности во всех случаях.
Zeqfreed (2006-07-10 00:52:00) [13]> [27] Пусик © (10.07.06 00:02)
Утверждение в [10] абсолютно верно. В ваших примерах, ссылка на объект, хотя и не явно, но сохраняется во внутреннем поле другого объекта. То, что вы демонстрируете является лишь удобной оберткой, предусмотренной разработчиками VCL. Разве не так?
Пусик (2006-07-10 00:02:00) [14]
> tesseract © (10.07.06 00:00) [26]
> > Требовалось показать, что высказывание "Если ты не укажешь
> > переменную, то класс "повиснет" в памяти - его нельзя
> будет > использовать или освободить "вручную"." не совсем
> верно.Оно верно абсолютно - ваши примеры - частные вырожденные
> случаи.
Ну да, ну да. Вся рота идет не в ногу, один tesseract в ногу.
Счастливо оставаться в благостном (и воинственном) заблуждении.
tesseract (2006-07-10 00:00:00) [15]> Требовалось показать, что высказывание "Если ты не укажешь
> переменную, то класс "повиснет" в памяти - его нельзя будет
> использовать или освободить "вручную"." не совсем верно.
Оно верно абсолютно - ваши примеры - частные вырожденные случаи.
Пусик (2006-07-09 23:51:00) [16]
> Приведено два примера не общего порядка. Покажи где тут
> однозначно указано что указано что используется TWinControl.
> И где в Create значения передаются?
Про "общий порядок" - не поняла, что это такое.
Покажи где тут однозначно указано что используется TWinControl.
Это к чему? Причем здесь TWinControl? Ну передавай TObject, приведи к TWinControl, если угодно.
И где в Create значения передаются?
Например, здесь: TMyObj.Create( Form1,Form1);
> Т.е конструктор ещё для чего-то нужен бывает, кроме создяния
> объекта?
Конечно. Еще конструкор используется для инициализации полей, установки параметров при необходимости(в зависимолсти от различных условий).
> Продемонстрируй у Tobject свойство parent.
Зачем? Но если так хочется - пожалуйста:
TMyClass=class
private
FParent: TObject;
public
property Parent: TObject read FParent write FParent;
end;
> Про пример с TThread - вообще аут.
Про это высказывание я бы пожестче сказала - бред.
Требовалось показать, что высказывание " Если ты не укажешь переменную, то класс "повиснет" в памяти - его нельзя будет использовать или освободить "вручную"." не совсем верно. И пример это демонстрирует в полной мере.
PS.
И все-таки, ответь: компонент, это объект или нет?
tesseract (2006-07-09 23:33:00) [17]> тебе приведено 2 примера, прекрасно дополняющих твой ответ.
> Имей силы принять поправки и не спорить против очевидного.
Приведено два примера не общего порядка. Покажи где тут однозначно указано что указано что используется TWinControl. И где в Create значения передаются?
> Но существуют и другие объекты, управление которыми не требуется
> дополнительно. Пару примеров ты видел.
Как-раз таки это сделано, для поддержки визуального редактирования.
> Ясно ведь, что, как правило, конструктор используется для
> создания объекта
Т.е конструктор ещё для чего-то нужен бывает, кроме создяния объекта?
> имеет явный запах сказки.
Продемонстрируй у Tobject свойство parent. Оно есть только у TwinControl и ниже.
Про пример с TThread - вообще аут.
Пусик (2006-07-09 22:15:00) [18]
> DrPass © (09.07.06 22:13) [22]
> > Пусик © (09.07.06 22:12) [21] ОК. Ты, кстати, на меня
> не обижайся - я живой человек и тоже могу вспылить :) Но
> поспорить люблю
Нет проблем. ;)
DrPass (2006-07-09 22:13:00) [19]
> Пусик © (09.07.06 22:12) [21]
ОК. Ты, кстати, на меня не обижайся - я живой человек и тоже могу вспылить :) Но поспорить люблю
Пусик (2006-07-09 22:12:00) [20]
> DrPass © (09.07.06 22:08) [20]
К нашим баранам в ветке в основной конференции мы еще вернемся. Вот только с работой немного посвободнее будет.