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

Вниз

Вопрос по ООП   Найти похожие ветки 

 
EG   (2006-10-10 21:45) [0]

Здравствуйте, не могли бы Вы мне ответить на такой вопрос:

есть что-то вроде

type
 TClass1 = class (Tobject)
   first: string;
   A: THHHHObject;
  end;

Некоторая функция в некотором месте программы возвращает А.
Вопрос: как, зная А, получить доступ к другим полям экземпляра класса TClass1?

Прим.: A.parent возвращяет не экземпляр класса TClass1, а другой объект.

Заранее благодарен за помощь.


 
Ketmar ©   (2006-10-10 21:48) [1]

бр-р-р. сам-то понял, что спросил?


 
Leonid Troyanovsky ©   (2006-10-10 21:50) [2]


> EG   (10.10.06 21:45)  

> Вопрос: как, зная А, получить доступ к другим полям экземпляра
> класса TClass1?


Никак.

--
Regards, LVT.


 
Kolan ©   (2006-10-10 21:52) [3]


> А, получить доступ к другим полям экземпляра класса TClass1?

Никак.
Экземпляр THHHHObject - А просто поле класса TClass1. Те жто композиция.
При такой структуре экземпляр THHHHObject ничего знать не может о TClass1. Его просто используют.


> Прим.: A.parent возвращяет не экземпляр класса TClass1,
> а другой объект.


Это я не понял..


 
EG   (2006-10-10 21:52) [4]

Если у объекта Y полем является объект X, можно ли, зная X, получить доступ ко всем остальням полям, методам, свойствам Y?


 
Джо ©   (2006-10-10 21:56) [5]

> [4] EG   (10.10.06 21:52)
> Если у объекта Y полем является объект X, можно ли, зная
> X, получить доступ ко всем остальням полям, методам, свойствам
> Y?

Для этого в объекте Х должно быть заведено поле или свойство, содержащее ссылку на объект Y.


 
EG   (2006-10-10 21:58) [6]

Этого я и боялся.
Дело в том, что я использую THHHHObject для визуализации экземпляра класса Tclass1, поскольку сам он типа абстрактный, невизуальный.

Как быть, если соприкосновение с миром программы экземпляра Tclass1 идет через его поле THHHHObject.

К примеру: У THHHHObject возникает какое-либо событие, в случае которого должны измениться поля экземпляра Tclass1. Как-то обойти парадигму невозможности можно?


 
EG   (2006-10-10 22:01) [7]


> Для этого в объекте Х должно быть заведено поле или свойство,
>  содержащее ссылку на объект Y.


Как? класс переписывать? THHHHObject - не я писал, а разработчики дельфи


 
Джо ©   (2006-10-10 22:02) [8]

> [6] EG   (10.10.06 21:58)
> Этого я и боялся.
> Дело в том, что я использую THHHHObject для визуализации
> экземпляра класса Tclass1, поскольку сам он типа абстрактный,
> невизуальный.

>
> Как быть, если соприкосновение с миром программы экземпляра
> Tclass1 идет через его поле THHHHObject.
>
> К примеру: У THHHHObject возникает какое-либо событие, в
> случае которого должны измениться поля экземпляра Tclass1.
> Как-то обойти парадигму невозможности можно?

Можно еще проще? Без неверного употребления незнакомых терминов?


 
Kolan ©   (2006-10-10 22:03) [9]


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

Архитектура не верная. Если THHHHObject(дурацкое название) визуализирует экзепрляр Tclass1, то он делжен знать о Tclass1, а Tclass1 о нем знать не должен.

Те в THHHHObject должен быть метод(вариантоа много, это 1 из них) тапа такого:

THHHHObject.VisualiseClass1(A: Tclass1);


 
Leonid Troyanovsky ©   (2006-10-10 22:03) [10]


> EG   (10.10.06 21:58) [6]

> К примеру: У THHHHObject возникает какое-либо событие, в
> случае которого должны измениться поля экземпляра Tclass1.
>  Как-то обойти парадигму невозможности можно?


Пуркуа па?

В обработчике события изменяем поля Tclass1.
Вот, собс-но, и все.

--
Regards, LVT.


 
Kolan ©   (2006-10-10 22:04) [11]


> класс переписывать? THHHHObject

Вообщето есть наследование и др механизмы...


 
Zeqfreed ©   (2006-10-10 22:09) [12]

Каким интересно THHHHObject, написанным разработчиками Delphi, ты визуализируешь свой класс.


 
EG   (2006-10-10 22:12) [13]


> Каким интересно THHHHObject, написанным разработчиками Delphi,
>  ты визуализируешь свой класс.


Да любым. THHHHObject - для неконкретности взято.


 
Kolan ©   (2006-10-10 22:13) [14]


>
> Да любым. THHHHObject - для неконкретности взято.
>

Так что не помогли мы тебе что-ли...


 
EG   (2006-10-10 22:15) [15]


> В обработчике события изменяем поля Tclass1.

Переписать хотя бы частично класс THHHHObject не могу.


> Архитектура не верная. Если THHHHObject(дурацкое название)
> визуализирует экзепрляр Tclass1, то он делжен знать о Tclass1,
>  а Tclass1 о нем знать не должен.

Можно поподробнее как это сделать, если я не могу переписать THHHHObject?

Я новичок и с перекрытием методов, свойств и пр. мне не справиться...:(


 
Leonid Troyanovsky ©   (2006-10-10 22:17) [16]


> Kolan ©   (10.10.06 22:13) [14]

> > Да любым. THHHHObject - для неконкретности взято.

> Так что не помогли мы тебе что-ли...


Сомнения здесь неуместны.

--
Regards, LVT.


 
Джо ©   (2006-10-10 22:17) [17]

> [13] EG   (10.10.06 22:12)
>
> > Каким интересно THHHHObject, написанным разработчиками
> Delphi,
> >  ты визуализируешь свой класс.
>
>
> Да любым. THHHHObject - для неконкретности взято.

Похоже, в данном случае, конкретность не помешает.


 
Kolan ©   (2006-10-10 22:18) [18]


> Я новичок и с перекрытием методов, свойств и пр. мне не
> справиться...:(

Ну ....

Давай реальный(классы, что нужно...) пример может есть элементарное решение.


 
Zeqfreed ©   (2006-10-10 22:19) [19]

> [15] EG   (10.10.06 22:15)

Может все-таки приоткроешь завесу тайны и признаешься что за секретный THHHHObject используешь? Иначе, тебе надо произвести HHHH над HHHH и ещё HHHH с inheritance.


 
Ketmar ©   (2006-10-10 22:21) [20]

ага. и будет полный HHHH до самого HHHH. и да здравствует великий HHHH!
%-)


 
Kolan ©   (2006-10-10 22:28) [21]


> HHHH

Зто сокрашенное название класса TЗаборObject на котором и надо визуальзировать TClass1 :)


 
EG   (2006-10-10 22:30) [22]


> ага. и будет полный HHHH до самого HHHH. и да здравствует
> великий HHHH!
> %-)

С юморком. Это хорошо.

Окей! Выкладываю начисто, так как помочь мне уже некому кроме вас.
Дислокация: Delphi+GLScene.

Код:

type
   TegActor = class (TObject)
     IDname: string;
     Model: TActor;
     Weapons: array of TegWeapon;
     ActiveWeapon: integer;
     constructor Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id:string);
     destructor Free;
     procedure LoadWeapon(cadencer:TGLCadencer;modfn,texfn:string;sc:real);
     procedure ChangeWeapon(number:integer);
     procedure DoIt(action: string; Speed: integer);
     procedure Stand(sender:Tobject);
   end;

И:

constructor TegActor.Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id: string);
begin

 Model:=TActor(cadencer.Scene.Objects.AddNewChild(TActor));
 With Model do
   begin
     LoadFromFile(modfn);
     Scale.Scale(sc);
     Position.X:=x;
     Position.Y:=y;
     Position.Z:=z;
     Material.Texture.Image.LoadFromFile(texfn);
     Material.Texture.Enabled:=true;
     Animations.LoadFromFile(animfn);
     AnimationMode:=aamNone;
     OnEndFrameReached:=Stand;

   end;
 
 IDname:=id;
end;

Этим я хотел расширить класс TActor.
Далее:

procedure TVForm.SceneViewerMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
 var
pickedObject : TGLBaseSceneObject;
begin
pickedObject:=SceneViewer.Buffer.GetPickedObject(x, y);

if pickedObject<>nil then
// if(pickedObject.ClassNameIs("TActor"))then
  VForm.Caption:= pickedObject.GetParentComponent.ClassName
  else  VForm.Caption:="";
if Shift<>[] then
     Camera1.MoveAroundTarget(mdy-y, mdx-x);
mdx:=x; mdy:=y;

end;

В pickedObject возвращается имя объекта под курсором. Надо показать на экране (или изменить) поле IDName у экземпляра TegActor.


 
EG   (2006-10-10 22:32) [23]

VForm.Caption:= pickedObject.GetParentComponent.ClassName - байда, не обращайте внимания. Но в этом месте и загвоздка.


 
Kolan ©   (2006-10-10 22:36) [24]

А нельзя ли сделать "Менеджер" который бы знал о TegActor, о pickedObject и TVForm. И управлял бы прорисовками по событию?

Или я не понял код...


 
EG   (2006-10-10 22:40) [25]

Возвращается TActor, а мне надо получить объект, чьим полем он является...


 
EG   (2006-10-10 22:44) [26]

ау, скажите хоть что-нить, а то у меня паника скоро начнется


 
Джо ©   (2006-10-10 22:50) [27]

Что-то, ИМХО, тут перемудрено, ну да ладно.

TMyActor = class (TActor)
private
 FEgActor: TegActor;
public
 property EgActor: TegActor read FEActor;
end;

...

constructor TegActor.Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id:  string);
begin

Model:=TActor(cadencer.Scene.Objects.AddNewChild(TActor));
With Model do
  begin
    ...
    FEgActor := Self;
  end;

IDname:=id;
end;

Идея понятна?


 
Джо ©   (2006-10-10 22:52) [28]

Кстати, почему бы не сделать TegActor наследником TActor"а?


 
EG   (2006-10-10 22:54) [29]


> Джо ©   (10.10.06 22:50) [27]


Практически нет.
По-моему так перемудрим еще больше.


 
EG   (2006-10-10 22:58) [30]


> Джо ©   (10.10.06 22:52) [28]
>
> Кстати, почему бы не сделать TegActor наследником TActor"а?
>

Не раз приходило в голову но... КАК? Начинает ругаться, что я перекрываю методы, или чего-то в этом духе....

Мне по идее к TActor"у надо добавить-то пару полей и методов...но...:(

Я считал, что мой вариант проще...иерархия по полям прозрачна ....только сверху вниз, а вот вверх - жопа...


 
Джо ©   (2006-10-10 23:02) [31]

> [30] EG   (10.10.06 22:58)
> Не раз приходило в голову но... КАК?

Вооружившись учебником.


 
EG   (2006-10-10 23:05) [32]


> Джо ©   (10.10.06 23:02) [31]
>
> > [30] EG   (10.10.06 22:58)
> > Не раз приходило в голову но... КАК?
>
> Вооружившись учебником.

это перевернет не только архитектуру программы, но и моего мировоззрения. но и на том спасибо.


 
Amoeba ©   (2006-10-11 11:49) [33]


> это перевернет не только архитектуру программы, но и моего
> мировоззрения

Вот и хорошо. Твое мировоззрение следует поставить с головы на ноги.



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

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

Наверх




Память: 0.54 MB
Время: 0.041 c
15-1160409437
Kerk
2006-10-09 19:57
2006.10.29
ВЛАДИМИР ПУТИН: СЕМЬ ЛЕТ У ВЛАСТИ


2-1160668978
redlord
2006-10-12 20:02
2006.10.29
в каком потоке работает ServerSocket1ClientRead


1-1158908490
Василий Блаженный
2006-09-22 11:01
2006.10.29
TTrayIcon &amp; baloon tips


15-1160100204
vidiv
2006-10-06 06:03
2006.10.29
Интерактивность в PDF


2-1161064765
DevilDevil
2006-10-17 09:59
2006.10.29
Как правильно работать с Битмапом?





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