Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Klase Kada i kako?

[es] :: .NET :: Klase Kada i kako?

[ Pregleda: 5080 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Boolean

Član broj: 23068
Poruke: 42
*.net.vip.hr



Profil

icon Klase Kada i kako?09.06.2004. u 12:47 - pre 241 meseci
Ajde ako netko ima malo vremena da malo pojasni te klase, koristim taj .NET kao zadnji amater!
U VB6 mi to nije bilo potrebno i sad se uopče ne koristim tom prednošču što imam OOP jezik. Znači zanima me sljedeće, ok imam recimo nekakvog radnika, skužio sam napravit njegove property-e(ime, prezime...), ali bilo bi zgodno da mi može napraviti radnik.spremi i on lijepo sve njegove podatke spremi u bazu. Da li to pišem u samoj klasi radnik ili imam posebnu klasu koja opet radi sa bazom?
Koja je prednost da idem učiti OOP pošto sam u VB6 uspio sve napravit i bez toga. Koja je uopče svrha tih klasa? Ako imate malo primjera, nekih jednostavnih (koji rade sa bazom po mogučnosti da malo shvatim to!)
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Klase Kada i kako?09.06.2004. u 13:52 - pre 241 meseci
Probaj prvo da potrazis neku literaturu o OOP-u i da je BAS razumes. Posle ce sve vec biti lakse. Sa ovim "daj mi primer", "pokazi mi samo to", po mom misljenju, ne dobija se nista osim loseg programera. Uvek postoji ono nesto ispod haube za sta je ipak potrebno malo zagrejati stolicu i procitati. Prosvrljaj malo po netu, ima toga dosta...

Inace, da, metod Spremi bi, recimo, pisao u klasi Radnik...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Klase Kada i kako?09.06.2004. u 14:05 - pre 241 meseci
Grešiš malo u startu što u upoznavanje OOPa ubacuješ priču sa bazom. Imaš tri osnovne prednosti koje ti OOP donosi: nasleđivanje, enkapsulacija i polimorfizam

1. Nasleđivanje, ovo je najrazumljiviji deo OOPa, potiče iz zdravorazumske logike da razni objekti u prirodi dele neke zajedničke atribute. Npr. taj radnik kojeg si ti napravio, je osnovna klasa za sve radnike u firmi, nosi ime, prezime, ima npr. metode Zaposli, Otpusti, DajGodisnji, property-e BrojRadnihSati, itd. E sad, u jednoj firmi radnici nisu svi isti, imaš sekretaricu, čistačicu, programera, itd koji pored osnovnih atributa imaju i neke svoje spcifične (sekretarica: BrzinaKucanja, programer: VBNetIskustvo, itd). E sad da ne bi za svaku kateogriju radnika pisao iste atribute i kod za osnovne stvari, samo naslediš klasu radnik i dodaš specifičnosti, štediš vreme

2. enkapsulacija iliti skrivanje pojedinosti. svaka klasa ima neko svoje interno funkcionisanje, u principu time možeš da sakriješ detalje izrade, i da kad nekome daš svoju klasu kažeš: ovaj metod radi to i to, a kako radi šta vas briga... Ima ovde još detalja ali da ne tupim mnogo, ovo ionako nema neke svrhe kad sam radiš sve klase.

3. E, najlepša stvar, polimorfizam. Omogućava objektu neke klase da se predstavlja kao da je objekat nasleđene(ih) klase(a) a da pri tome zadrži svoju funkcionalnost. Npr. imaš iterativnu funkciju koja obračunava ukupan broj radnih sati koje firma odradi, kao ulazni parametar prima objekat tipa radnik, i iterativno u statičkoj varijabli sumira vrednosti BrojRadnihSati propertija za sve prosleđene radnike. Kao stvari parametar, ti možeš da pošalješ i sekretaricu i čistačicu i programera, funkcija će ih videti kao da su samo "radnik". Ovo si skontao nadam se.
E sad, ako klasa programer koja je nasledila klasu radnik, nadjača (override, ne znam šta je gore original ili prevod) property BrojRadnihSati i umesto 8 vraća realnih 12 i ako objekat programer proslediš u pomenutu funkciju, bez obzira što funkcija vidi samo klasu "radnik", BrojRadnihSati će vratiti 12. Ovo je vrlo moćan koncpet ali će ti trebati neko vreme da skontaš praktičnu primenu.
Evo ti primer iz .net-a, kad otvoriš handler za click na dugme, vs.net ti napravi npr.

Code:
private void btnAdd_Click(object sender, System.EventArgs e)


iako će objekat sender uvek biti "Button", on je ovde deklarisan kao "object" koji on nasleđuje. Zamisli sad da imaš još jednu kotrolu, recimo linkbutton, i hoćeš da ima istu funkcionalnost, umesto da pišeš hovi nandler za novu kontrolu, samo onClick nove kontrole povežeš sa postojećim handlerom. Iako su obe kontrole (objekti) različitog tipa (Button i LinkButton), obe nasleđuju object i ova konstrukcija radi savršeno.

E sad, baza. postoje razne metode da se objekti "pretoče" u bazu, ali one najviše zavise od toga kako je baza projektovana. Najčistiji način je da i snimanje/učitavanje obavljaš hijerarhijski, dakle, imaš Save metod koji uvek override-uješ i koji pozove nasleđeni Save i onda "dosnimi" svoje specifične podatke. Ako si bazu projektovao kao i objekte, tj. da postoje tabele radnik, sekretarica, cistacica i programer koje su relaciono povezane, to ti je najlakši i najčistiji način. A samo upisivanje podataka, to možeš ili 1-tier (instanciraš datalayer klasu kojoj proslediš podatke pa ih ona snimi) ili 2-tier (proslediš ih nekoj biznis klasi koja prvo obavi neke analize i provere pa onda ako je sve u redu ona sama pozove data layer), u principu izbegavaj da direktno koristiš bazu iz Save metoda, tu se uvek podkrade neki bag.

Moj iskren savet ti je da nadješ neku dobru knjigu o OOPu u VB.NETu, obratiš dužnu pažnju na gornje tri stavke (ima tu još stvari, ovo su samo osnovne) i za početak zaboraviš bazu, posle kad to savladaš imaćeš dovoljno znanja za neku knjigu tipa "višeslojno programiranje" gde ćeš sigurno imati konkretne primere ali ćeš moći da ih razumeš.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Boolean

Član broj: 23068
Poruke: 42
*.net.vip.hr



Profil

icon Re: Klase Kada i kako?09.06.2004. u 14:10 - pre 241 meseci
Citat:
havramm:Sa ovim "daj mi primer", "pokazi mi samo to", po mom misljenju, ne dobija se nista osim loseg programera.


Da imaš pravo, tako to obično bude kad želiš nešto na brzinu! A ništa idem ugrabiti neki dobar tutorial i baciti se na to, ako je netko prošao neku razumljivu literaturu o klasama neka stavi linkove!

I mmix hvala na objašnjenju, malo jasnije, ali mislim da me čeka puno učenja prije nego što shvatim sve što si mi rekao , ali probat ću se držati uputstava o učenju, pogotovo što se tiće baze jer sam uvijek u napasti da prvo skužim kako to sve funkcionira sa bazom.

[Ovu poruku je menjao Boolean dana 09.06.2004. u 16:27 GMT]
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Klase Kada i kako?09.06.2004. u 14:25 - pre 241 meseci
Citat:
Imaš tri osnovne prednosti koje ti OOP donosi: nasleđivanje, enkapsulacija i polimorfizam


Pravilnije je 4:

1. Kreiranje apstraktnih tipova podataka
2. Enkapsulacija
3. Nasledjivanje i
4. Polimorfizam

Ovo je po knjizi OOP na C++-u od Dragana Miliceva

ali, to je u sustini to...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Klase Kada i kako?09.06.2004. u 14:58 - pre 241 meseci
Citat:
havramm:Pravilnije je 4:
1. Kreiranje apstraktnih tipova podataka
2. Enkapsulacija
3. Nasledjivanje i
4. Polimorfizam
Ovo je po knjizi OOP na C++-u od Dragana Miliceva


A kako bi ti definisao tačku 1. a da ne bude "postoji tip koji se definiše sa class" i da ne bude neko nepraktično bulažnjenje
Imam ja tu knjigu, kupio sam je greškom još dok sam bio na ETFu, taman mi pravi lep prelaz na polici sa plavih na žute knjige Ako ćete se obučavati na resavskoj školi beogradskog univerziteta imajte u vidu da naš akademski kadar uglavnom piše knjige "količinski" (vidi moja knjiga je deblja od svih ostalih), tako da te uglavnom zaspu gomilom neupotrebljivog prevedenog teksta proširenog sa ja-znam-najbolji-prevod-za-ovaj-termin™ srpskom terminologijom i nekim njihovim teorijskim izmišljotinama koje posle moraš da spremaš za ispit, čuo sam da je kod Ćirića na FONu bilo još gorih gluposti. Iz ovoga naravno izuzimam legendu Lasla Krausa koji je pisao kratke ali surovo dobre knjige, ne znam da li je skoro nešto izdavao.
Držite se bolje engleskih knjiga koje su pisali inženjeri sa iskustvom u proizvodnji, šta god da naučite pre ili kasnije ćete doći do kompleksnije literature koja je uvek na engleskom i zaterbaće vam MSDN koji siguno neće biti prevođen na srpski (od same zamisli me prošli žmarci ) pa ako već znate "običan" engleski bolje odmah startujte na engleskom
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.beotel.net



Profil

icon Re: Klase Kada i kako?10.06.2004. u 01:54 - pre 241 meseci
Citat:
Da li to pišem u samoj klasi radnik ili imam posebnu klasu koja opet radi sa bazom?

Najmanji je problem da cak i sa forme za unos podataka te podatke prosledis u bazu. Medjutim, to ti predlazem da uradis samo kada budes hteo da probas kako se radi sa bazom, I NIKAD VISE!!!

Inace tvoja klasa radnik je nesto sto se zove "domenski objekat" i sto ne bi smelo da komunicira sa bazom.
Domenski objekti su objekti koji se mogu materijalizovati i dematerijalizovati, sto ce reci da oni sluze da prihvate podatke iz baze koji ce biti prikazni na formi, ili obrnuto da prihvate podatke sa forme koji treba da budu sacuvani u bazi. E, sad, tu komunikaciju izmedju forme, baze i domenskih objekata vrsi nova klasa koja se obicno naziva "kontrolor", u kome ce biti smestena, ranije pomenuta "poslovna logika". Taj kontrolor treba da "zna" kako ce podatke snimiti u bazu ili kako ce ih prihvatiti iz iste...

Postoje takodje i drugi pristupi. Meni drag pristup je da se kreira i posebna klasa, tzv "Broker" koji ce raditi sa bazom i kome ce kontrolor prosledjivati "domenske objekte", koje ce ovaj, u zavisnosti od zahteva puniti, ili snimati...
Drugi pristup je bolji sto cu ti objasniti banalnim primerom...
Recimo da ti se javi potreba da pored radnika vodis evidenciju i o voznom parku. Tada ces imati novi domenski objekat Vozilo, a broker ce znati kako ce i taj objekat snimati u bazu ili ga povlaciti iz iste...
Naravno, ovde ce se koristiti tzv "jak polimorfizam", sto samo potvrdjuje mmix-ovu tvrdnju da treba prvo treba da posvetis paznju OOP-u pa tek onda da razmisljas o radu sa bazom...
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Klase Kada i kako?10.06.2004. u 07:37 - pre 241 meseci
Citat:
mmix:A kako bi ti definisao tačku 1. a da ne bude "postoji tip koji se definiše sa class" i da ne bude neko nepraktično bulažnjenje


Nemam ideje kako bi to "slikovito" definisao. Evo prepustam tebi da sam smislis definiciju

Citat:
Imam ja tu knjigu, kupio sam je greškom još dok sam bio na ETFu, taman mi pravi lep prelaz na polici sa plavih na žute knjige Ako ćete se obučavati na resavskoj školi beogradskog univerziteta imajte u vidu da naš akademski kadar uglavnom piše knjige "količinski" (vidi moja knjiga je deblja od svih ostalih), tako da te uglavnom zaspu gomilom neupotrebljivog prevedenog teksta proširenog sa ja-znam-najbolji-prevod-za-ovaj-termin™ srpskom terminologijom i nekim njihovim teorijskim izmišljotinama koje posle moraš da spremaš za ispit, čuo sam da je kod Ćirića na FONu bilo još gorih gluposti. Iz ovoga naravno izuzimam legendu Lasla Krausa koji je pisao kratke ali surovo dobre knjige, ne znam da li je skoro nešto izdavao.


Nisam mislio da se kao pijan plota uhvatim necije knjige i da je propovedam kao Sveto pismo, vec sam to cisto naveo kao primer. Neznam kakva su tvoja iskustva sa BU, ali nevidim zasto ocrneti neke ljude ako nezas zasigurno kakvi su. Naime, znam celu katedru RTI na ETF-u i jos dosta profesora sa FON-a. Ako cemo vec tako, FON-ovci su najveci prodavaci magle, na ETF-u bar mozes da naucis nesto prakticno, a ne kako uspesno crncima u sahari prodati sneg . Konkretno, kod navedenog autora sam slusao c++ i osnove oop-a i mogu reci da je odlicno preneo znanje, sto bas ne mogu da kazem za sve profe sa FON-a da su u stanju. Odosmo predaleko od teme. Ako nekom smeta napisano, slobodno neka brise...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
*.as54.bi.bih.net.ba.



Profil

icon Re: Klase Kada i kako?10.06.2004. u 08:11 - pre 241 meseci
Najmanji je problem da cak i sa forme za unos podataka te podatke prosledis u bazu. Medjutim, to ti predlazem da uradis samo kada budes hteo da probas kako se radi sa bazom, I NIKAD VISE!!!


Da li ovo o cemu si ti govorio u svom postu, te mmix, znaci da nema nista od koristenja databindinga, datagrid i sl. zavrzlama s kojim se najcesce radi iz windows forms kada se koriste baze? Jasno mi je da se dobiva na cistoci i lakoci odrzavanja koda, ali cini mi se da u tom slucaju pravljenje UI za uredjivanje i prikaz podataka postaje smarajuce.
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.beotel.net



Profil

icon Re: Klase Kada i kako?10.06.2004. u 20:11 - pre 241 meseci
Ne razumem zasto ne bi mogao da se koristi DataGrid, ili bilo koja druga kontrola... samo sto ces ih puniti iz domenskih objekata, ili obrnuto iz kontrola ces puniti domenske oblekte uz, naravno,
posredovanje kontrolora...
Citat:

ali cini mi se da u tom slucaju pravljenje UI za uredjivanje i prikaz podataka postaje smarajuce

Da, ukoliko zelis da kreiras, recimo aplikaciju koja ce ti sluziti kao adresar, ili podsetnik i slicno
i koja ce podatke cuvati u bazi, tu mozda i nema smisla da se maltretiras i da projektujes dodatni "sloj"...
i takve aplikacije mogu biti dvoslojne... Uopsteno gledano svaka aplikacija koja se tokom svog "zivotnog veka" nece
bitno menjati i koja ce se relativno malo odrzavati moze da bude dvoslojna, gde ce se neka poslovna logika
nalaziti u prezentacionom sloju, a gde ce skladiste podataka biti taj drugi sloj...
Medjutim, ukoliko je rec o slozenijoj aplikaciji, kakve su danasnje poslovne aplikacije, tada je
neophodno da se izmedju prezentacionog sloja (klijenta) i sloja baze podataka ubaci sloj koji ce sadrzati
poslovnu logiku, cime se dobija Tronivojska arhitektura sistema, ciju sam strukturu u prethodnom postu
pokusao grubo da objasnim...
Ovakva, troslojna arhitektura (ili uopsteno receno N-slojna) omogucuje da sa razdvoji klijent od poslovne
logike, i da pri tome nijednom nije bitno gde se ovaj drugi nalazi (sto ce reci da poslovna logka i baza mogu da se nalaze na serveru
a prezentacioni sloj ce biti na klijentima)...

E sad da potkrepimo primerima ovu pricu o N-slojnoj arhitekturi:

1) ZNACAJ RAZDVAJANJA PREZENTACIONOG SLOJA OD SLOJA POSLOVNE LOGIKE - recimo da imas aplikaciju
u firmi na vecem broju racunara (npr rad sa racunima), i recimo da si je projektovao tako da se poslovna logika nalazi u prezentacionom sloju,
i pretpostavimo da imas popust 10% na proizvode koji se placaju gotovinom, i taj popust si ubacio negde u kodu kao neku konstantu
(sto je u startu greska ali cemo je zanemariti)... nakon nekog vremena firma je odlucila da smanji popust na 5%, i sta se dogadja... dogadja se to
da ces morati da trcis od racunara do racunara da to sve menjas... Medjutim, ukoliko se ta konstanta nalazi u poslovnoj logici (koja se nalazi na serveru),
ti ces to moci da promenis samo na jednom mestu, i sistem ce funkcionisati...

2) ZNACAJ KREIRANJA BROKERA - pretpostavimo da tvoja aplikacija kao skladiste podataka ima SQL server, i to radi neko vreme a firma odluci
da se sa SQL servera predje, recimo, na ORACLE... I taj problem se resava na jednom mestu i to jednostavno, napravices novog brokera kojim ces zameniti stari.
Ali, ako imas slucaj da se broker nalazi u okviru kontrolora, ili (ne daj boze) u okviru prezentacionog sloja (ukoliko je rec o dvoslojnoj arhitekturi)
tada ces na svojoj kozi osetiti njegov znacaj...

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Klase Kada i kako?11.06.2004. u 12:48 - pre 241 meseci
Citat:
eonDa li ovo o cemu si ti govorio u svom postu, te mmix, znaci da nema nista od koristenja databindinga, datagrid i sl. zavrzlama s kojim se najcesce radi iz windows forms kada se koriste baze?


Ok, uzmi prost i realan primer, uradi se aplikacija srednje veličine, radi se za MSSQL. Na kraju projekta, faza 2, klijent neće da plaća MSSQL jer su već nabavili Oracle, prebaciti aplikaciju na Oracle, kao što je Radudzoni pomenuo Ako si napravio datalayer, i tog famoznog brokera koji svi pominju i uradio to kako valja (pristup preko interfejsa a ne tipiziranih klasa), promena baze se svodi na copy/paste starog data layer-a i modifikacija novih klasa. Pošto gornji layeri rade preko interfejsa, što se njih tiče NIŠTA se ne menja samo se instancira drugi broker. U suprotnom, dok ti pretreseš sve aspx strane,...
Da ti odgovorim na repliku, databinding se i dalje koristi iz code-behind-a ali se dataset ne učitava iz samog code-behind-a nego se dobija kao rezultat poziva data-layer metode.

Citat:
havramm Neznam kakva su tvoja iskustva sa BU, ali nevidim zasto ocrneti neke ljude ako nezas zasigurno kakvi su.


Problem je baš u tome što ih znam kakvi su, bilo je već ovih diskusija, pa da skratim samo u jedan zaključak: Oni su mnogo mnogo stručni i FONovci i ETFovci, ali su skoro SVI sebični do maksimuma, i njihova stručnost je isključivo rezervisana za uzak krug ljudi koji će to znanje dobiti samo ako budu radili u njihovim agencijama/firmama/projektima. Ono što raja dobija je tona suve i beskorisne teorije (zbog čega se tebi i čini da su fonovci maglaši, iako, ako ćeš mi verovati, su mnogo stručniji od ETFovaca, kad se izuzme poznavanje hardvera) i ta raja izlazi sa faksa praktično neupotrebljiva za industrijsku proizvodnju, što akademskom kadru još pride odgovara jer smanjuje sebi konkurenciju na ionako uskom tržištu. Vidim da ti imaš znanje i da si aktivan ovde u forumu pa sam reci, jesi sve to što znaš naučio na faksu ili si lepo kao i mi ostali spoznao da od njih nema leba za bilo šta sem osnovnih stvari i sam pribavio literaturu i samoobrazovao se

Citat:
havramm Nemam ideje kako bi to "slikovito" definisao. Evo prepustam tebi da sam smislis definiciju


Pa nemam je ni ja, to je i bila moja poenta, da je to samo suludo teoretisanje koje više može da ti odmogne nego pomogne, zato ga nisam ni pomenuo. Sećam se da sam OOP počeo da bistrim 1991 i da mi polimorfizam nikako nije išao u glavu dok nisam uhvatio TPW debager i dok nisam u asembleru provalio kako funkcioniše vTable i kako ladnjaka u običnom C-u možeš da napraviš klasu i proslediš je u C++ ili OOPascal Eh to su bili dani... Ozbiljno, kome polimorfizam ne ide u glavu, nek nađe literaturu u kojoj je detaljno objašnjen vTable i kako funkcioniše, prosvetljujuće je...


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Klase Kada i kako?12.06.2004. u 00:25 - pre 241 meseci
Citat:
ali su skoro SVI sebični do maksimuma
Sa ovim se u potpunosti slazem, mada se provuce i neki dobrica...

Citat:
jesi sve to što znaš naučio na faksu ili si lepo kao i mi ostali spoznao da od njih nema leba za bilo šta sem osnovnih stvari i sam pribavio literaturu i samoobrazovao se
Naravno da je samoobrazovanje majka sveg znanja, ali opet, mislim da je ipak bolje ako ti neko da barem kakve takve smernice.

Svako dobro...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

Radudzoni
Radoslav Jovanovic
Beograd

Član broj: 8384
Poruke: 133
*.beotel.net



Profil

icon Re: Klase Kada i kako?12.06.2004. u 00:36 - pre 241 meseci
A evo i jednog primercica polimorfizma i late bindinga iliti kasnog povezivanja...


Code:

using System;

namespace Polimorfizam
{
    class Class1
    {
        void PrikaziPoruku(IZivoBice zb1)
        {
            zb1.Prikazi();
        }

        [STAThread]
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            IZivoBice zb;
            Covek _Covek = new Covek();
            Zivotinja _Zivotinja = new Zivotinja();
            zb = _Covek;
            c1.PrikaziPoruku(zb);
            zb = _Zivotinja;
            c1.PrikaziPoruku(zb);
        }
    }

    public interface IZivoBice
    {
        void Prikazi();
    }

    public class Covek: IZivoBice
    {
        public Covek()
        {
        }
        public void Prikazi()
        {
            Console.WriteLine("Ja sam klasa Covek!!!");
        }
    }

    public class Zivotinja:IZivoBice
    {
        public Zivotinja()
        {
        }
        public void Prikazi()
        {
            Console.WriteLine("Ja sam klasa Zivotinja!!!");
        }
    }
}


znaci za vreme kompajliranja ne znamo cija ce metoda Prikazi biti pozvana, i ona se povezuje tek u vreme izvrsenja (zato se i zove kasno povezivanje)....
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Klase Kada i kako?12.06.2004. u 13:04 - pre 240 meseci
Citat:
havramm:Naravno da je samoobrazovanje majka sveg znanja, ali opet, mislim da je ipak bolje ako ti neko da barem kakve takve smernice.
Svako dobro... 8)


Suva istina, pa shodno tome i prethodnim porukama, da dođemo do nekog zaključka, ako vam profa sa BU nije kućni prijatelj, bolje poslušajte nekog ispraksiranog inženjera 8)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Klase Kada i kako?12.06.2004. u 15:29 - pre 240 meseci
Citat:
Radudzoni:A evo i jednog primercica polimorfizma i late bindinga iliti kasnog povezivanja...
...
znaci za vreme kompajliranja ne znamo cija ce metoda Prikazi biti pozvana, i ona se povezuje tek u vreme izvrsenja (zato se i zove kasno povezivanje)....


Nažalost, tvoj primer ne koristi late binding a ni polimorfizam nije baš na mestu :) Sad ću malo da se raspišem, ionako sam dokon.

Istina je da se za vreme kompajliranja ne zna koji će tačno metod biti pozvan, ali se još za vreme kompajliranja zna da se poziva prvi metod interfejsa IZivoBice i zna se potpis (raspored i tipovi formalnih parametara) tog metoda, pa se poziv obavlja preko vTable-a (callvirt), kao i bilo kog drugog metoda:

Code:
.method private hidebysig instance void  PrikaziPoruku(class Polimorfizam.IZivoBice zb1) cil managed
{
  // Code size       7 (0x7)
  .maxstack  1
  IL_0000:  ldarg.1
  IL_0001:  callvirt   instance void Polimorfizam.IZivoBice::Prikazi()
  IL_0006:  ret
} // end of method Class1::PrikaziPoruku


Ako bi rekao da je ovo late binding onda bi značilo i da je ovaj poziv late bound, a on to sigurno nije:
Code:
C#:
c1.PrikaziPoruku(zb);

IL:
  IL_0014:  ldloc.0
  IL_0015:  ldloc.1
  IL_0016:  callvirt   instance void Polimorfizam.Class1::PrikaziPoruku(class Polimorfizam.IZivoBice)


Dok god ti od trenutka kreiranja objekta do njegovog kraja nosiš informaciju o tipu nema govora o late binding-u. Tek ako si kreirao/dobio objekat nepoznatog tipa ili si usput izgubio informaciju o tipu, možeš da očekuješ late binding. U slučaju late bindinga koristi se IDispatch (COM) ili .NET Reflection (NET) da se na osnovu reference tj instance objekta dinamički odredi njen tip, da se locira i pozove metod po imenu i potpisu. E sad, C# ne podržava implicitni late binding (ako neko zna kako može i ja bih voleo da znam), ali VB.NET podržava pa mogu da dam primer da se vidi razlika, novi projekat kao DLL sa sledećim kodom:

Code:
Namespace Polimorfizam
    Public Class Class2
        Public Sub PozoviLate(ByVal zb2 As Object)
            zb2.Prikazi()
        End Sub
    End Class
End Namespace


Kao što se vidi, formalni parametar je tipa object, znači da se gube apsolutno sve informacije o pozivnom tipu, pa vb.net kompajler u ovom i samo ovom slučaju (poziv metode nad object tipom) aktivira late binding pozivanje što se vidi u ILu:

Code:
.method public instance void  PozoviLate(object zb2) cil managed
{
    // Code size       24 (0x18)
   .maxstack  8
   IL_0000:  nop
   IL_0001:  ldarg.1
   IL_0002:  ldnull
   IL_0003:  ldstr      "Prikazi"
   IL_0008:  ldc.i4.0
   IL_0009:  newarr     [mscorlib]System.Object
   IL_000e:  ldnull
   IL_000f:  ldnull
   IL_0010:  call       void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.LateBinding::LateCall(object, class [mscorlib]System.Type, string, object[], string[], bool[])
   IL_0015:  nop
   IL_0016:  nop
   IL_0017:  ret
} // end of method Class2::PozoviLate


Kad bi sad ušli u LateCall metod koji se ovde poziva videli bi da on koristeći refleksiju locira metod sa imenom "Prikazi" i poziva ga sa Invoke metodom, kao što je to nekad COM radio preko IDispatch interfejsa.
Da bih do kraja dokazao da onaj primer nije late binding, uradi sledeće, napravi treću klasu, npr. Ptica, koja ima metod Prikazi() ali NE implemetira interfejs IZivoBice, i probaj da ga proslediš njenu instancu u Class1.PrikaziPoruku i videćeš da će pući pri kompajliranju, a ne pri runtime-u, dok će instanca Ptica-e savršeno funkcionisati ako je proslediš u Class2.PozoviLate

E sad, zašto nije pravi polimorfizam. Ovo će biti malo teže dokazati a da ne tupim mnogo teorijski, polimorfizam je uvek vertikalan i ide po nasledstvu "ako klasa B nasleđuje klasu A onda instanca klase B može da se tretira kao instanca klase A uz zadržavanje sopstvene funkcionalnosti". Intefejsi su sa druge strane posledica COM filozofije u kojoj ne postoji nasleđivanje klasa, pa predstavljaju jedini metod uspostavljanja srodstva između objekata (što se u OOPu implicitno dešava nasleđivanjem), ali je to na kraju izazvalo hrpu problema (ogromne nezgrapne objekte sa preko 30 različitih interfejsa koji su se gomilali vremenom). U OOPu interfejsi imaju samo jednu realnu ulogu, onu osnovnu, da predstavljaju "ugovor" o tome šta objekat mora da ispunjava, bazirati polimorfnu funckionalnost na njima nije baš dobro i na duže staze izazvaće iste problem koje je COM imao. To što se interfejsi ponašaju polimorfno je čisto posledica toga što interfejs u osnovi radi kao vTable, što opet ne znači da ga treba stavljati svuda :)




Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: Klase Kada i kako?

[ Pregleda: 5080 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.