powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Иерархия наследований
15 сообщений из 15, страница 1 из 1
Иерархия наследований
    #36687733
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый !

Вот есть такая задачка. Есть цепочка наследований Custom->Class1->Class2.
В одном из методов класса Class2 есть необходимость проверить принадлежность передаваемого
параметра к одному из классов (Class1 или Class2). Все было бы ничего и ParentClass помог бы, только
вот в цепочке наследований уже три класса Custom->Class1->Class2->Class3. Как в этом случае можно
узнать принадлежность передаваемого параметра к одному из базовых классов (не зная их имен
естественно).
...
Рейтинг: 0 / 0
Иерархия наследований
    #36687774
Eugenkru10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_usa__83_День добрый !

Вот есть такая задачка. Есть цепочка наследований Custom->Class1->Class2.
В одном из методов класса Class2 есть необходимость проверить принадлежность передаваемого
параметра к одному из классов (Class1 или Class2). Все было бы ничего и ParentClass помог бы, только
вот в цепочке наследований уже три класса Custom->Class1->Class2->Class3. Как в этом случае можно
узнать принадлежность передаваемого параметра к одному из базовых классов (не зная их имен
естественно).
Классу может принадлежать Объект.
Что значит "принадлежность Параметра Классу"?
Что за дебильный вопрос из usa ?
...
Рейтинг: 0 / 0
Иерархия наследований
    #36687786
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
loObj1 = CreateObject("tt1")
loObj2 = CreateObject("tt2")

loObj1.showBaseClass()
loObj2.showBaseClass()

Return 
Define Class tt2 as tt1

EndDefine


Define Class tt1 as ttt

EndDefine


Define Class ttt as Custom
	Procedure showBaseClass
	 ? this.BaseClass	 

EndDefine

Return 
...
Рейтинг: 0 / 0
Иерархия наследований
    #36687822
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак в этом случае можно
узнать принадлежность передаваемого параметра к одному из базовых классов (не зная их имен
естественно).

т.е. у объекта можно щупать св-во BaseClass - это и будет
тот класс базовый - фоксовый, на основании котор. создан наследник,
независимо через сколько цепочек и т.д. ...

ТП, - можно дать ответ применительно к Вашей задаче,
если Вы нарисуете маленький пример.
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688349
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugenkru10,

Дебильный или нет, но, если Вы знакомы с наследованием, то наверняка представляете себе
следующую схему (в FoxPro нет множественного наследования p.s.). К примеру:
Custom->Пользовательский класс1->Пользовательский класс2->Пользовательский
класс3->...->Пользовательский классN (Надеюсь не очень утруднил Вас обобщенным описанием). Так
вот, задача состоит в том, чтобы некоторый метод (член-функция) принадлежащая классу
Пользовательский классN, получающая в качестве параметра некоторую переменную (как известно
язык в FoxPro не является строго типизированным) могла определить следующее: является ли данный
параметр экземпляром (по-науке) какого-нибудь из классов из перечня Пользовательский класс1->...
Пользовательский классN, напрямую не сравнивая имя класса получаемого из Имя_Параметра.Class с
представленным списком.

Пасиба... Надеюсь на этот раз мой вопрос не показался "деб...", в других языках это решается
известным образом...
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688374
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,

Ну конкретней, Class1 наследует Custom, Class2 наследует класс Class1, Class3 наследует класс Class2.
В моем случае, Class1 содержит информацию о таблице БД (поля, связи, ключи), Class2 представляет собой представление (в фоксовом понимании) (по сути вещей - интерфейс, аля понятие в ява), Class3 представляет собой описание как на основе псевдонимов (набора псевдонимов) таблиц образующих топологию "звезда", собрать представление (в фоксовом понимании) создать это представление в БД и связать с ним экземпляр класса Class1, так как класс Class1 содержит информацию о произвольной таблице в БД... Приводить листинг достаточно громоздко.....
Так что вот в чем собственно вопрос... Пусть есть метод Init - Class3, он описывает набор параметров,
а именно centraltable (центральная таблица в топологии звезда) и beamtables (массив таблиц являющихся родительскими по отношению к centraltable в топологии звезда)....
Этот init хочет "проверить" является ли каждый из экземпляров centraltable или beamtables[i] экземпляром какого нибудь из классов class1,..class2,class3. Чтобы быть уверенным в том, что имеет дело с наследником class1 (как уже было сказанно выше хранящем информацию о полях, связях и ключах таблицы)...
Вот в кратце
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688381
Eugenkru10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_usa__83_ ...является ли данный параметр экземпляром (по-науке) какого-нибудь из классов...
Вот эту фразу пытаемся понять ))))))))
Как может Параметр являться Экземпляром класса???
Если ты в качестве параметра передаёшь переменную типа объект, тогда она может быть экземпляром класса, а может и не быть. А если ты хрен знает что передаёшь, то оно является простым аргументом функции (по науке :)) ).
Мы твои америкосовские зафаканые мысли типа FUCK usa читать не умеем )))))))))))
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688395
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_usa__83_Этот init хочет "проверить" является ли каждый из экземпляров centraltable или beamtables[i] экземпляром какого нибудь из классов class1,..class2,class3. Чтобы быть уверенным в том, что имеет дело с наследником class1 (как уже было сказанно выше хранящем информацию о полях, связях и ключах таблицы)...
Вот в кратце

я ведь показал пример, и показал что св-во бейзкласс достаточно для определения
самого базового класса фокспро, на основании котор. создан наследник.

если этого недостаточно и есть
какие-то подобъемы в объемах общих наследников от общих классов,
то наделите такие подобъемы классов своими уникальными признаками-свойствами
и анализируйте их наличие(соответствие) где-то.

если моих объяснений недостаточно, то
дайте конкретный пример -я покажу

не спорте с троллем
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688424
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция GetPem() может принимать в качестве параметра не только ссылку на объект, но имя класса. Как следствие, можно получить иерархию класса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
loObj = CreateObject("tt3")

lcParentClass = GetPem(loObj,"ParentClass")
lcBaseClass = GetPem(loObj,"BaseClass")
Do while Empty(lcParentClass) = .F. && как вариант lcParentClass <> lcBaseClass
	?lcParentClass
	lcParentClass = GetPem(m.lcParentClass,"ParentClass")
enddo

?"userBaseClass = ", loObj.userBaseClass

Return 

* Класс  3 
Define Class tt3 as tt2
EndDefine

* Класс  2 
Define Class tt2 as tt1
EndDefine

* Класс  1 
Define Class tt1 as ttt
EndDefine

* Класс  0 
Define Class ttt as Custom
	userBaseClass = "ttt"
EndDefine

Return

Хотя, как мне кажется, что-то в постановке задачи не правильное.

Например, в описанном Вами примере я бы просто в Class1 добавил еще одно свойство, вроде UserBaseClass и записал бы в нем имя этого самого Class1. Т.е. указал бы явно базовый пользовательский класс. Базовый для требуемой иерархии классов.
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688432
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо,

Пнятна, пасибо, хотя и достаточно очевидно, зашить в свойствах помимо существующих ParentClass и BaseClass еще и Class1 в данном случае именно это важно... Другой вопрос нельзя ли каким-то иным способом узнать является ли переменная экземпляром класса наследника от Class1, что-т вроде сравнения указателя на базовый класс в Java (простите но привык к более строгим языкам), ведь там
разрешается эта ситуация
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688440
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugenkru10,

Очень и очень буйный товарищ (в отношении национальной принадлежности (эт кстати инициалы - читай по буквам - 3 штуки))... Если Вам, не понятна разница между фактическими и формальными параметрами, объявляемыми в сигнатуре метода (читай - функции) то что ж, очень жаль.... И тут ни при чем происхождение Ника (написал транслитерацией дабы опять не быть подверженным ксенофобству)...
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688445
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_usa__83_,

Да видимо не верно изначально написал "к базовому классу", интересует именно к Class1, от Custom требовалась минимальная функциональность - только "Контейнерность"
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688453
Eugenkru10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_usa__83_,

Дада заепись ник! Мне тож нравится )))))))
Засунь его себе в Жопу! )))))))))))
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688465
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_usa__83_Да видимо не верно изначально написал "к базовому классу", интересует именно к Class1, от Custom требовалась минимальная функциональность - только "Контейнерность"
Так я же показал основной принцип. Крутим в цикле GetPem() со ссылкой на класс-родитель, пока имя класса родителя не станет равно базовому классу

Ну, если не понятна идея, то вот код в чистом виде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
clear
loObj = CreateObject("tt3")

lcParentClass = GetPem(loObj,"ParentClass")
lcBaseClass = GetPem(loObj,"BaseClass")

* На случай, если класс-родитель - это уже базовый класс
lcUserBaseClass = lcParentClass

* Спускаемся по иерархии классов-наследников до базового класса
Do while lcParentClass <> lcBaseClass
	lcUserBaseClass = lcParentClass
	lcParentClass = GetPem(m.lcParentClass,"ParentClass")
enddo

* Первый наследник от базового класса
?"userBaseClass = ", lcUserBaseClass

Return 

* Класс  3 
Define Class tt3 as tt2
EndDefine

* Класс  2 
Define Class tt2 as tt1
EndDefine

* Класс  1 
Define Class tt1 as ttt
EndDefine

* Класс  0 
Define Class ttt as Custom
EndDefine

Return 
...
Рейтинг: 0 / 0
Иерархия наследований
    #36688471
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Угу, пасиба, понял...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Иерархия наследований
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]