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

Sabloni/Templates vs. OOP

[es] :: Art of Programming :: Sabloni/Templates vs. OOP
(TOP topic)
Strane: 1 2

[ Pregleda: 18701 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


Profil

icon Sabloni/Templates vs. OOP21.12.2002. u 23:38 - pre 5176 dana i 4h
ovo pitanje sam postavio dragom tati u temi http://www.elitesecurity.org/tema/17744 ali je on obrisao sa objasnjenjem da sacekam a zavrsi, i na kraju dodao da je ovo bolje mesto...

evo ga moj post:
---------------------

bez zelje da izazivam flame, hteo bih tehnicku raspravu (a ti
delujesh kao vise nego kompetentan za nju) o (velikim?) prednostima
sablona u odnosu na klasno/oo programiranje.

zasto se za primere sablona uvek uzimaju ovako prosti primeri. recimo
funkcija max() je mogla da bude odradjena nad baznom klasom koja ima
overloadovan "<" operator, i da vraca "veci"
od dva prosledjena parametra. onda se prostim nasledjivanjem dobije
mnogo klasa koje sve mogu da koriste isti kod za max funkciju. (uz
ovaj put neophodno kastovanje pri pozivu, ali to je samo par
karaktera vise, a i sa sablonima je nekad neophodno)

ili recimo primer za vektor. da c++ ima "root" klasu
(object, tObject ili slicno) vetkor bi mogao da radi sa tObject-ima,
a da se samo pri preuzimanju kastuju u zeljeni tip...

sta mi promice? (mislim na velike prednosti sablon programiranja).



 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


Profil

icon Re: Sabloni/Templates vs. OOP21.12.2002. u 23:39 - pre 5176 dana i 4h
a sada sam shvatio josh jednu prednost oop-a.

oop generise manji kod, tj, funkcija koja bi radila sa baznom klasom se samo jednom kompajlira i koristi za sve tipove, a sablon se kompajlira za svaki tip za koji se koristi (pomalo glupo)...

 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 15364
*.dip.t-dialin.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 00:00 - pre 5176 dana i 3h
Citat:

oop generise manji kod, tj, funkcija koja bi radila sa baznom klasom se samo jednom kompajlira i koristi za sve tipove, a sablon se kompajlira za svaki tip za koji se koristi (pomalo glupo)...


Da, ali bi ti morao da za svaku "nasledjenu" klasu pises svoju implementaciju < operatora za svaku od izvedenih klasa?


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1
Demo Videos: http://www.digicortex.net/node/17
Gallery: http://www.digicortex.net/node/25
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1792
*.client.attbi.com



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 00:15 - pre 5176 dana i 3h
Kako bi uradio vektor sa OOPom? Znaci treba mi klasa koja ce da podrzava vektor bilo cega, sa uslovom da mogu da direktno dodjem do bilo kog elementa.
Znaci kada kazem da hocu da koristim tip T, i da mi treba 100 elemenata, klasa treba da alocira niz od sizeof(T)*100 bajta. Kako to realizovati bez sablona?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..ndg-pm4-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 00:42 - pre 5176 dana i 3h
Citat:
zombie / DDG:
bez zelje da izazivam flame, hteo bih tehnicku raspravu (a ti
delujesh kao vise nego kompetentan za nju) o (velikim?) prednostima
sablona u odnosu na klasno/oo programiranje.


Odlično. Ovo je pravo mestu za takvu raspravu. Da ne bude nesporazuma, ja ne tvrdim da je generičko programiranje "zamena" za OO (ponekad jeste), već više dopuna i nadgradnja.

Citat:
zombie / DDG:
zasto se za primere sablona uvek uzimaju ovako prosti primeri.


Tekst je za totalne početnike u radu sa šablonima. Za složenije primere možeš da pogledaš npr STL ili šablone iz biblioteke Boost, a za "sladokusce" preporučujem biblioteku Loki.

Citat:
zombie / DDG:
recimo funkcija max() je mogla da bude odradjena nad baznom klasom koja ima
overloadovan "<" operator, i da vraca "veci"
od dva prosledjena parametra. onda se prostim nasledjivanjem dobije
mnogo klasa koje sve mogu da koriste isti kod za max funkciju. (uz
ovaj put neophodno kastovanje pri pozivu, ali to je samo par
karaktera vise, a i sa sablonima je nekad neophodno)


Jeste, ali tu postoje tri osnovna problema:

1. Funkcija koju si opisao radi samo sa klasama izvedenim iz te bazne klase (ili npr interfejsa) koju si pomenuo. Kako da poredimo stringove, int-ove i ostale tipove? Morali bismo da pišemo wrapper klase za tako nešto.

2. Type safety. Ako recimo u generičku funkciju max ubaciš dva različita tipa, dobićeš grešku pri kompajliranju. Ako u "objektnu" funkciju ubaciš dva različita tipa u najboljem slučaju dobićeš cast exception, a u najgorem pogrešan rezultat poređenja.

3. Performanse. Kad se radi sa nasleđivanjem i virtuelnim funkcijama, kompajler najčešće ne može da izvrši optimizacije koje bi inače mogao. Sa šablonima taj problem ne postoji, jer se tipovi određuju u trenutku kompajliranja.

Citat:
zombie / DDG:
ili recimo primer za vektor. da c++ ima "root" klasu
(object, tObject ili slicno) vetkor bi mogao da radi sa tObject-ima,
a da se samo pri preuzimanju kastuju u zeljeni tip...


Ista tri razloga koja sam naveo gore (mada razlog 1 sada važi samo za "primitivne" tipove koji nisu izvedeni iz object-a). Inače, kastovanje se među C++ "guruima" (Stroustrup, Mayers, itd) smatra znakom lošeg dizajna i namerno su uvedeni novi operatori za kastovanje sa ružnom sintaksom (npr reinterpret_cast) da bi ohrabrili programere da ih izbegavaju.


 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 00:47 - pre 5176 dana i 3h
Citat:
Ivan Dimkovic:

Da, ali bi ti morao da za svaku "nasledjenu" klasu pises svoju implementaciju < operatora za svaku od izvedenih klasa?



a sa sablonima ovo ne mora? kako?? nisam jako strucan za c++, i za sablone (nisam amater, ali se prvenstveno bavim drugim jezicima), ali mi se cini da i za max() funkciju realizovanu sablonima, (kao sto je tata rekao) mora da za svaki tip postoji overloadovan < operator...


reljam: a zar vektor ne cuva samo reference do objekata koje mu se proslede sa recimo niz.push_back(new klasa()); (ovako ga je koristio tata u svojim primerima, osim sto je dodavao int-ove)

drugo, ne znam da li c++ ima RTTI, ali recimo u javi i delphiju je i to moguce, tj moguce je kreirati objekat ciji se tip ne zna unapred, recimo sa objekat.class.newInstance().
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 01:10 - pre 5176 dana i 2h
Citat:
zombie / DDG:
a sada sam shvatio josh jednu prednost oop-a.

oop generise manji kod, tj, funkcija koja bi radila sa baznom klasom se samo jednom kompajlira i koristi za sve tipove, a sablon se kompajlira za svaki tip za koji se koristi (pomalo glupo)...


Ovo si dobro primetio. To se zove "code bloat" i ponekad može da bude nezgodno. Međutim, mislim da su u praksi zaista retke situacije u kojima bi se isplatilo da se odreknemo beneficija generičkog programiranja da bismo malo uštedeli na veličini koda.

Uostalom, izgleda da moderni C++ kompajleri imaju tehnike optimizacije kojima se ova pojava svodi na minimum.
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 01:15 - pre 5176 dana i 2h
Citat:
Dragi Tata:
1. Funkcija koju si opisao radi samo sa klasama izvedenim iz te bazne klase (ili npr interfejsa) koju si pomenuo. Kako da poredimo stringove, int-ove i ostale tipove? Morali bismo da pišemo wrapper klase za tako nešto.

ok. ovo je prvi argument koji stoji. ali primitivnih tipova ima vrlo malo, recimo desetak u javi (uzimam uvek za primer javu, jer je bolje poznajem, ali bez zelje da se pretvori u flamerski rat) i oni se svi mogu svrstati u dve grupe, tj mogu da se "odrade" sa samo dve, recimo overloadovane funkcije, jednu koja zavrsava cele, a drugu za realne tipove. a mogu uvek i da se wrapuju. btw, i string je klasa u javi (opet ja java ;)

ali sa druge strane, ovo mi se cini da i nije bash toliko cesto, narocito pricam o velikim sistemima, gde je reusabiliti koda bitna na viskom nivou, sto sigurno ne podrazumeva rad sa primitivima, vec definitivno sa klasama, interfejsima i sl.



2. ovo nije tesko ispitati u funkciji, mada se slazem da se u ovom slucaju greska ne dobije pri kompajliranju, sto je sigurno bolje...



3. stoji, mada je (cini mi se) opet razlika samo za primitivne tipove (kako moze razlicito da optimizuje kod za dve klase) a za to sam vec rekao da ja (pokusavam ;) da razmisljam na sto visem nivou, gde primitivi nisu ni na vidiku...


Citat:
Inače, kastovanje se među C++ "guruima" (Stroustrup, Mayers, itd) smatra znakom lošeg dizajna i namerno su uvedeni novi operatori za kastovanje sa ružnom sintaksom (npr reinterpret_cast) da bi ohrabrili programere da ih izbegavaju.


heh. c++ gurui obeshrabruju koriscenje neke c++ funkcije, koja ako se dobro koristi moze biti jako korisna, ali ako programer pogresi, moze dovesti do katastrofalnih posledica ;)

a svi c++ programeri napadaju javu sto je u nekim stvarima "ogranicena", tj namerno brani programerima da rade neke "potencijalno opasne) stvari... heh ;)

btw, zar c++ nema run-time proveravanje da li se kastuje dobar tip (i samo elegantno baci exception)?

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 01:21 - pre 5176 dana i 2h
Citat:
zombie / DDG:
reljam: a zar vektor ne cuva samo reference do objekata koje mu se proslede sa recimo niz.push_back(new klasa()); (ovako ga je koristio tata u svojim primerima, osim sto je dodavao int-ove)

drugo, ne znam da li c++ ima RTTI, ali recimo u javi i delphiju je i to moguce, tj moguce je kreirati objekat ciji se tip ne zna unapred, recimo sa objekat.class.newInstance().


1. vector ne mora da čuva reference, već može i objekte. Ako sam te u svojim primerima naveo da pomisliš drugačije, greška je u njima.

2. C++ ima RTTI, ali baš kao i sa kastovanjem (u stvari mnogo više nego sa kastovanjem) primena RTTI-ja najčešće pokazatelj greške u dizajnu. Dobro projektovan C++ program najčešće nema potrebe da koristi RTTI.

E sad, postavlja se pitanje kad se retko koristi, zašto je uopšte deo jezika (isto pitanje si postavio i za višestruko nasleđivanje)? Odgovor bi bio da je filozofija ljudi koji razvijaju C++ takva da nisu spremni da se odreknu nekog elementa jezika ako taj element ima dobru primenu makar i u 1% slučajeva. Pogledaj recimo privatno nasleđivanje. Koliko često bi to neko koristio? Međutim postoje slučajevi kad je privatno nasleđivanje najelegantnije rešenje za neki problem i ono je na raspolaganju programerima. Jednostavno, C++ nije zamišljen da bude jednostavan za učenje, već moćan i kompletan.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 01:28 - pre 5176 dana i 2h
OK. Da ilustrujemo priču sa malo koda:

Predlažem ti da napišeš u Javi funkciju max koja će funkcionalno da bude ekvivalentna šablon funkciji max koju sam ja naveo kao primer. Tvrdim da će se desiti jedan od ova tri slučaja

1) Pokazaću da tvoje rešenje nije funkcionalno ekvivalentno.

2) Biće funkcionalno ekvivalentno, ali će imati najmanje 5 puta više koda.

3) Kombinacija 1) i 2).

Obrati pažnju da ovde ne pominjem brzinu koda, koja ni u kom slučaju ne može da bude bolja sa OO pristupom.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 01:50 - pre 5176 dana i 2h
Dok čekamo Tomicu da napiše OO verziju funkcije max, ja da još malo "filozofiram".

Jedan od osnovnih "stubova temeljaca" OO programiranja je dinamički polimorfizam - koji se ostvaruje preko javnog nasleđivanja i virtuelnih funkcija. Generičko programiranje i šabloni omogućavaju drugačiji vid polimorfizma - statički (compile-time) polimorfizma. Oba ova vida imaju svoje prednosti:

1. Dinamički polimorfizam

a) heterogene kolekcije se prave lako i elegantno
b) kod može biti potencijalno manji (ne postoji "code bloat")
c) biblioteke mogu da se prodaju 100% u kompajliranom obliku, dakle nema potrebe da se otkriva source (nekima sa ovog foruma se ovo verovatno i neće činiti kao prednost, hehe)

2. Statički polimorfizam

a) lako je praviti kolekcije tipova koji ne moraju da budu izvedeni iz jedne klase.
b) generisani kod je potencijalno brži (ne samo za primitivne tipove, već mnogo više za klase) jer je mnogo lakše optimizovati nevirtuelne funkcije.
c) Bezbedniji je, jer se provere tipova obavljaju u vreme kompajliranja.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1792
*.client.attbi.com



Profil

icon Re: Sabloni/Templates vs. OOP22.12.2002. u 02:08 - pre 5176 dana i 1h
Citat:
zombie / DDG:
reljam: a zar vektor ne cuva samo reference do objekata koje mu se proslede sa recimo niz.push_back(new klasa()); (ovako ga je koristio tata u svojim primerima, osim sto je dodavao int-ove)

Ne, pod vektorom se uglavnom podrazumeva da cuva instance objekte, barem STLovski vektor. A u 'postavci' gore sam kao jedan od uslova stavio direktan pristup clanovima.

Ovo je upravo problem koji sada C# ima: u C# ne mozes da napravis vektor koji sadrzi instance nekog tipa (ako nije primitivni). Takodje u C# ne mozes da napravis listu ciji elementi sadrze neke objekte - oni mogu samo da sadrze pointere na instance tih objekata eg.:

class Node
{
Data data;
Node Next;
}

a to su u c#u sve pointeri. Dakle nema onoga: Data data; Node *next;

Ovo ce se promeniti u sledecoj verziji kada C# bude konacno dobio genericse, tj. templateove. Do tada, moramo da budzimo uz pomoc stvari tipa ArrayList itd.


 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.dial.InfoSky.Net

Sajt: localhost


Profil

icon Re: Sabloni/Templates vs. OOP23.12.2002. u 00:43 - pre 5175 dana i 3h
ok, naravno, kao sto sam vec rekao, max funkcija ce biti vise koda, ako treba da radi i sa primitivima. ja sam mislio, i opet pricam o primeni na klasama, interfejsima i sl, jer ako pricamo o projektovanju velikih i komplexnih sistema (recimo, red velicinie nekoliko desetina ili stotina hiljada linija koda) i recimo, (ne specijalizovani za neku oblast matematike), na visim nivoima projektovanja/dizajniranja/programiranja sistema se koriste klase, a ne primitivi.

sto se brzine tice, ne mogu da tvrdim (nemam osnova) ali mi se cini da ni ubrzajne kod sablona koji generisu kod za objekte/klase nije preterano veliko. mozda gresim, ali generalno, ovo ubrzanje ne verujem da moze da prebaci red velicine od 10-20%, a i botleneck je najcesce na drugom mestu (baza, http veza i sl) tako da u ukupnom sistemu utice manje od 5%.

malo offtopic, reljam:

zasto je bitno da li cuva reference, ili niz objekata. u cemu se razlikuje i taj drugi pristup u c#/java gde je i data u sustini referenca? sta to menja u projektovanju/izvedbi bilo kog programa?!?


i generalno, sabloni (mi) deluju kao korisna dopuna recimo za oop nacin programiranja, ali ne nesto revolucionarno, jer samo imaju malo drugaciju "filozofiju", i time dozvoljavaju malo vise kreativnosti u pisanju koda...

 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1792
*.client.attbi.com



Profil

icon Re: Sabloni/Templates vs. OOP23.12.2002. u 00:55 - pre 5175 dana i 2h
Ako skladistis malu kolicinu podataka kojih imas puno, overhead od 4 bajta puta recimo 10,000 elemenata nije uvek prihvatljiv. Pogotovu u embedded uslovima.

U ne-embedded uslovima imas ruzniji kod jer stalno moras da castujes iz object-a u odgovarajuci tip - a to je vrlo neprijatno. Pogotovu u C# koji inace ima 'cist' izgled.

Sve u svemu, niko ovde ne tvrdi da postoje stvari koje je nemoguce uraditi bez genericsa, ali postoje primene gde oni resavaju problem na vrlo elegantan nacin.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



Profil

icon Re: Sabloni/Templates vs. OOP23.12.2002. u 01:33 - pre 5175 dana i 2h
Citat:
zombie / DDG:
ok, naravno, kao sto sam vec rekao, max funkcija ce biti vise koda, ako treba da radi i sa primitivima. ja sam mislio, i opet pricam o primeni na klasama, interfejsima i sl, jer ako pricamo o projektovanju velikih i komplexnih sistema (recimo, red velicinie nekoliko desetina ili stotina hiljada linija koda) i recimo, (ne specijalizovani za neku oblast matematike), na visim nivoima projektovanja/dizajniranja/programiranja sistema se koriste klase, a ne primitivi.


Radio sam bogami razne složene projekte, ali još nisam video ni jedan gde se ne koriste primitivni tipovi, i to dosta. Uostalom, čak i klase, kao što rekoh, moraju da budu izvedene iz nekog specijalizovanog interfejsa da bi mogle da rade sa "OO" verzijama funkcija o kojima smo pričali. U idealnom svetu, naravno, bilo bi moguće isprojektovati sistem u detalje pre nego što se krene sa kodiranjem, pa to i ne bi bio neki problem. U praksi, to nikada nije slučaj.

Citat:
zombie / DDG:
sto se brzine tice, ne mogu da tvrdim (nemam osnova) ali mi se cini da ni ubrzajne kod sablona koji generisu kod za objekte/klase nije preterano veliko. mozda gresim, ali generalno, ovo ubrzanje ne verujem da moze da prebaci red velicine od 10-20%, a i botleneck je najcesce na drugom mestu (baza, http veza i sl) tako da u ukupnom sistemu utice manje od 5%.


Sve zavisi od slučaja do slučaja. Imaš slučajeve gde je tvoje rezonovanje potpuno ispravno, a imaš slučajeve gde je upravo upotreba dinamičkog polimorfizma "usko grlo". Nikakve generalizacije nisu moguće.


Citat:
zombie / DDG:
i generalno, sabloni (mi) deluju kao korisna dopuna recimo za oop nacin programiranja, ali ne nesto revolucionarno, jer samo imaju malo drugaciju "filozofiju", i time dozvoljavaju malo vise kreativnosti u pisanju koda...


Kao što sam napomenuo, šabloni ne isključuju oop, već ga lepo dopunjuju tamo gde je "slab". Međutim, grešiš kada kažeš da ti ne deluju kao nešto revolucionarno. Oni mnogo bolje nego OO paradigme omogućavaju princip "jednostavan interfejs, a složena implementacija" i uopšte, kladim se da će generičko programiranje u narednoj deceniji biti isto onako "in" kao što je OO bilo u prošloj, ili "strukturno programiranje" 80-ih. Najzad, i tvorci "čistih" OO jezika: Jave i C#-a su svesni toga i obećavaju uvođenje generics-a u naredne verzije jezika. Živi bili, pa videli.
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


Profil

icon Re: Sabloni/Templates vs. OOP23.12.2002. u 02:05 - pre 5175 dana i 1h
Citat:

Radio sam bogami razne složene projekte, ali još nisam video ni jedan gde se ne koriste primitivni tipovi, i to dosta. Uostalom, čak i klase, kao što rekoh, moraju da budu izvedene iz nekog specijalizovanog interfejsa da bi mogle da rade sa "OO" verzijama funkcija o kojima smo pričali. U idealnom svetu, naravno, bilo bi moguće isprojektovati sistem u detalje pre nego što se krene sa kodiranjem, pa to i ne bi bio neki problem. U praksi, to nikada nije slučaj.


naravno da nisam govorio da se primitivi ne koriste! to je glupost. mislio sam na "projektni" nivo (ma kako apstraktno ovo bilo, nadam se da se razumemo) u kome se koriste klase, a ne na implementaciju istih.

bash sam mislio na slucaj koji ti slikovito nazivash "jednostavan interfejs, a složena implementacija", sto je najbitnije da bude na sto visem nivou (mislim na jednostavan interfejs) sto je najbolje uraditi sa klasama... (mislim da se ovaj tvoj opis ne primenjuje cesto na primitive...)


no, dobro. nema vise potrebe da se ponavljamo, pa samo ako ima nesto novo da se kaze.

 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Sabloni/Templates vs. OOP23.12.2002. u 13:14 - pre 5174 dana i 14h
Evo jedne implementacije šablona za Javu:

http://pizzacompiler.sourceforge.net/

Ovo, koliko znam, postoji odavno - nije mi jasno zašto nije dodato jos u Javi 2...
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.ddc.dal.earthlink.net.

ICQ: 106979934


Profil

icon Re: Sabloni/Templates vs. OOP03.03.2005. u 07:25 - pre 4373 dana i 20h
Citat:
oop generise manji kod, tj, funkcija koja bi radila sa baznom klasom se samo jednom kompajlira i koristi za sve tipove, a sablon se kompajlira za svaki tip za koji se koristi (pomalo glupo)...


.NET CLR 2.0 implementira parametrični polimorfizam (aka generics) nativno, tj. čuva njihov identitet i nakon kompajliranja u MSIL. Za razliku od C++ i Jave, ovo donosi prenosti kao što su puno veći reusability već JIT-anog, binarnog koda (performanse++), negubitak identiteta generika i nakon kompajliranja, tj. moguće je poslije toga koristiti refleksiju, debuggiranje, IntelliSense (i IntelliSense čita iz metapodataka!), puno lakši interop...
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8176
*.dial.InfoSky.Net.



Profil

icon Re: Sabloni/Templates vs. OOP18.06.2005. u 15:20 - pre 4266 dana i 13h
Šabloni i nasleđivanje nisu isto i ne koriste se u istim situacijama. Konkretno, ako pravim kontejnersku klasu, onda ću koristiti šablone ako svi članovi treba da budu istog tipa T (koji se zadaje kao parametar), a nasleđivanje ako su podaci u kontejneru mešovitog tipa, pri čemu imaju neka zajednička svojstva koja treba polimorfno implementirati.

Recimo da pravim klasu za uređene nizove datog tipa. Ona treba da ima metode za dodavanje nekog elementa u niz i pristup i-tom članu niza. Niz se automatski sortira. E, tada ću da koristim šablone jer poredak < nije zajedničko svojstvo na primer celih brojeva i stringova. Poredak između celih brojeva i stringova nije definisan. Definisani su samo poredak između celih brojeva i poredak između stringova (tj. oba argumenta moraju biti istog tipa).

Da bi poredak bio zajedničko svojstvo stringova i celih brojeva, morali bi stringovi i celi brojevi da nasleđuju neku zajedničku klasu koja ima uređenje, ali bi onda taj poredak morao da bude definisan između bilo kojih objekata, moguće i različitih tipova, čije klase naleđuju tu klasu. To je zato što bi tada operator < bio deklarisan u osnovnoj klasi tako da prihvata argumente tipa osnovne klase budući da klasa ne zna koje će sve klase biti iz nje izvedene. Međutim, to kod celih brojeva i stringova nije slučaj. Zbog toga u programskim jezicima u kojima su string i ceo broj izvedeni iz neke osnovne klase, ta klasa ne može da ima uređenje.

Ukoliko pak pravim listu čiji će članovi moći da budu različitog tipa, ali pri čemu članovima liste pristupam preko nekih zajedničkih metoda, onda ću definisati apstraktnu klasu sa tim zajedničkim članovima i listu čiji su članovi tog apstraktnog tipa.

Šablone moram da koristim ako u implementaciji klase koristim neka svostva koja nisu zajednička za sve tipove koji dolaze u obzir kao parametri. C++ šabloni su malo poboljšani parametarski C makroi. Sa druge strane, nasleđivanje drastično smanjuje potrebu za pokazivačima na funkcije (preko tabele virtuelnih metoda). To su u principu različite stvari.

[Ovu poruku je menjao Nedeljko dana 18.06.2005. u 18:20 GMT+1]
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Vanja Petreski

Član broj: 315
Poruke: 1651
*.beoland.sezampro.yu.

Sajt: vanja.ws


Profil

icon Re: Sabloni/Templates vs. OOP18.06.2005. u 15:27 - pre 4266 dana i 13h
nekoriste <-> ne koriste ... i slicno.

Hm, bas cudno, sad su sa ovim poceli i ljudi od kojih to ne ocekujem.
 
Odgovor na temu

[es] :: Art of Programming :: Sabloni/Templates vs. OOP
(TOP topic)
Strane: 1 2

[ Pregleda: 18701 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

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