Nesto za OOP.

8 отговора 492 прегледа
#1

Nesto za OOP.

Hi,
Az sum sravnitelno nacinaest programist. Ima edin vapros, koito oste
ne mi e dosal na glavata, obace mnogo me interesuva.
Stava vupros za dynamicno construirane na obekti. Da si predstavim
slednoto:
Imam nekakwa baza danni. V nekoi poleta e zapisana informacia
w surow (binary raw) vid. Kak moje ot ot neia da se construirat
obekti, ciito classove sa definirani w prilojenieto.
Znam, ce tozi vapros e dosta slojen, i ne ocakwam prostorni
otgovori. Prosto mi se iska da cuia nekoi mnenia, i eventualno dobri
cetiwa (naj-dobre elektronni), ot koito principno da se hvanat nestata.
W momenta aktiwno uca ednowremenno MS VCPP i CPP Builder.

Blagodaria predvaritelno za mnenia i preporaki.

Отговор
в отговор на Pavel #2

Re: Nesto za OOP.

C++ sam po sebe si ne predlaga takiva vyzmojnosti.
Shte tryabva da polzvash razni extri, kato napr. CORBA (sigurno i COM ima takiva neshta) i implementation repository. Shte ti tryabva i kompilator po vreme na izpylnenie na prilojenieto, razbira se.

Java predlaga - vj. java.lang.reflect.* (kakto i nyakoy neshta ot java.lang.*) i toz proekt: [линк].

Pyk v drugi ezici kato Lisp i Prolog (ne te nyamat mnogo obshto s OOP :-) tezi neshta sa osnoven (i chesto - edinstven :-) pohvat.

Редактирано от Potencialen emigrant на

Отговор
в отговор на Pavel #3

Сигурно ще кажа глупост,...

...щото хич не отбирам от DB, ама не можеш ли просто да сложиш данните в някакъв буфер, да насочиш поинтер от съответния клас към него и да си действаш?


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на Pavel #4

Re: Nesto za OOP.

eto ti 2 buzzwords
reflection, serialization - viz implementaciata v .NET tam izglezda po dobre ot JAVA/CORBA pone ot moia opit. Daze moze da si napravish class on the fly. Moze da poziapash i source, ako si motiviran. Za .NET tyrsi ROTOR project.

Отговор
в отговор на Pavel #5

Re: Nesto za OOP.

class Creten
{
public:
int I;
char S[256];
};
void SaveCretenToDB(Creten*Cr)
{
/*
V DB si imas pole BLOB za clasa i pole koeto kazva kakav e klasa
I kato triabva da zapazis klasa zapazvas celia klas(v BLOB poleto) a v poleto za tip na klasa zapazvas tipa
*/
}

Creten*CreateCretenFromDB()
{
Creten*Ret;=NULL
ReadFromDb(&Ret,sizeof(Creten));
// Prochita celia clas ot BLOB poleto v DB ako tam se sadarza class Creten, kato predi tova alokira pamet
//AKo ne e ot tip Creten ne pravi nisto

return Ret;
}

void NewCreten()
{
Creten*Cr=CreateCretenFromDB();
if(!Cr)Cr=new Creten;
//Ili creatvash Creten ot BD ili dtno - kakto dojde;
}

Отговор
в отговор на bira_more #6

Hm?

Ne sum go probal kum momenta. Ama kak li stoi waprosa s
memeber functions? Inace to si e wse edno da rabotis ne
sus CLASSS a sus STRUCT.

Hi

Отговор
в отговор на Pavel #7

Re: Hm?

Ako triabva dyrzim nestata grubo ne professinalni i leko hakerski. Znachi nomera sys &ptrMyClass, size(MyClass) ste vyrvi dokato niamash nito edna virtualna funkcia ili member ot typ pointer v tozy class i vsickite mu roditeli.
Ako prodylzim v systia duh ste vyrvi i ako izpolzvash
CPBaseObj //p kato pavel :) vyv inheritance canonical form i sled tova samo single inheritance & no pointer members. I kogato pishesh ili chetesh ste si otmestvash pointera sys sizeof (CPBase) i namaliavash broia na chetenite bytes - da ne mazesh vtable.
Edno nivo nagore e da si definirash CPSerial sys virtualni funcii za Read & Write.

Sedvastot nivo e da definirash IPSerial - interface - sys Write&Read func i da si go implementtrash vseki class koito triabva da se pishe/chete.

Ako iskash da vsicko da e kakto trebe - vseki uvazasht sebesi framework ima support na serialization.

Отговор
в отговор на Pavel #8

Ще уточна нещо

Благодаря ви за съветите. Ще ми се да нправя някои уточнения,
защото не е правилно човек да открива топлата вода, след като
вече някой я използува.
Представям си следната задача. В База Данни са записани в полета
названия на класове (може и други описания), а в суров вид е запсана
информация необходим за конструирането им динамично. След това
приложенията имат за здача да ги конструират, без да знаят с
подробности какво е бъде поведението на тези класове. Тези класове
няма да съдържат виртуални член функции, нито пък статични.
Такава задача е примерно следната:
В Базата Данни е записана информация за различни машини и техните
детайли ( идруги неща). Тези машини една-с-една не си приличат.
Поради това няма как да се структурират номрмално таблици.
За да покажа на потребителя данни, и да ги актуализирвам, мога
да си послужа с обекти, конструирани чрез Данни от Базата. В тези
класове има методи обслужващи преставяне/въвеждане/актуализация
на доста различни по конструктивните си данни машини и изделия.

Моля да кажете, на какво ви прилича тази постановка. Сигурно
има други подходи, но този ми изглежда интересен.

Поздрави.

Отговор
в отговор на Pavel #9

XML ...

... is the answer of your prayers. kakto kazvat nazapad.
Nali ideiata beshe da imash dinamichni strykturi deto niama pravila ili pravilata sa razmiti. Lesno se pishe/chete, formata e text.
Moze da si slozish dori code kato VB/Jscript takche da neznaesh predvaritelno kakvo ste praviat tesi strukturi. Moze bi minimalni ogranichenia kato naprimer vsiaka da ima Start i Stop metod. Oranicheniata moze da si napishe vyv schema taka che parsera da gi proveriava....

Отговор