Citat:
[...] al' nisam za virtual f-je i njihovu primenu
Kada ti neko na primer kaže da sedneš, to se obično kaže komandom glasom:
Code:
Sedi // <--- ili prevedeno na jezik računara, metodom: Sedi()
Zanimljivo je da uvek ZNAŠ ge ćeš da sedneš kad primiš tu komandu:
1) ako si u učionici - sedneš na školski stolicu (nećeš sesti niti na pod niti na sto)
2) ako si na izletu, sedneš na travu (nećeš sesti nikome na glavu ;) )
3) ako si na stepeništu u nekoj zgradi - sešćeš na neku stepenicu (nećeš tražiti stolicu)
4) ako si u bioskopu, nećeš sesti na stepenice nego na sedište
itd...
Ma koliko ovo delovalo logično, trivijalno i beznačajno, ipak GENIJALNO je to što primiš
samo jednu ISTU kratku komadu (Sedi), a odreaguješ u svakom kontekstu
DRUGAČIJE,
tj. sedneš na drugi objekat !
Sad, za trenutak zamisli da ovakav 'koncept' ne postoji kod ljudi u sporazumevanju,
nego je potrebno ići na neki drugačiji sistem komunikacije.
Iste komade, shodno prethodnim primerima da bi bile JEDNOZNAČNE, morao bi da kažeš
recimo ovako /karikirano/:
1) sedi_na_stolicu_koja_se_nalazi_gradu_x_skoli_y_spratu_z_ucionici_q_pozicija_X_pozicija_Y()
itd...
Sad zamisli kad bi za svaku sitnicu koja postoji na svetu morao da pamtiš i/ili izgovaraš ovako
dugačke komande. Odmah ti je jasno da bi to bilo glupo, maltene neizvodljivo.
---
E sad, recimo ovo gore ti je jasno, i dobiješ zadatak da napraviš program za crtanje geometrijskih
oblika. Mogao bi odmah da počneš da praviš prototipove funkcija za crtanje oblika:
Code:
CrtajTrougao()
CrtajKvadrat()
CrtajKrug()
...
CrtajKoZnaSta()
Dakle, morao bi da za svaki izmišljeni geometrijski oblik na zemlji napraviš POSEBNU funkciju za njega. Što
je najgore, za svaki novoizmišljeni oblik, morali bi BAŠ TEBE da zovu da ga dodaju u spisak funkcija. Takođe,
ni jedan tvoj IZUM koji si smislio za recimo brzo iscrtavanje oblika ne bi bio dostupan budućim projektantima.
Ovo očigledno liči na ono rešenje sa dugačkim nazivom funkcija i sa beskonačno mnogo takvih funkcija.
OOP nudi rešenje za to u vidu virtuelnih funkcija i izvođenja (što je drugi koncept, ali se koriste sinhronizovano).
Npr, bolje je da smisliš šta je to ZAJEDNIČKO za sve geometrijske oblike, tj. koje su operacije zajedničke. Na primer,
sve oblike možeš da nacrtaš, odštampaš i izračunaš površinu. Da ne idemo dalje u analizu...
Code:
klasa GeometrijskiOblik
{
Crtaj();
Povrsina();
Stampaj();
// ...
}
... a posle samo ređaš poznate geometrijske oblike redom, i onu logiku koja je različita - sam treba da
implemetiraš:
Code:
klasa Krug : izvedena iz GeometrijskiOblik
{
// <--- OVDE DODAŠ ŠTA JE SPECIFIČNO ZA KRUG
}
Krug::Crtaj()
{
// ...
}
Code:
klasa Kvadrat : izvedena iz GeometrijskiOblik
{
// <--- OVDE DODAŠ ŠTA JE SPECIFIČNO ZA KVADRAT
}
Kvadrat::Crtaj()
{
// ...
}
Primeti da se funkcija uvek zove ISTO a izvršavaće se RAZLIČIT KOD, u zavisnosti koji je tip objekta.
Kasnije, u upotrebi:
Code:
ObjekatTipaKrug->Crtaj()
ObjekatTipaKvadrat->Crtaj()
ObjekatTipaTrougao->Crtaj()
Uvek će se nacrtati oblik u kontekstu objekta koji se koristi, dakle:
Code:
ŠkolskaKlupa->Sedi()
Stepenište->Sedi()
Trava->Sedi()
Ovakav koncept nudi:
1. laku raspodelu koda i posla (timski rad)
2. lakše održavanje
3. itd...
A sad, knjigu u ruke, sve piše, ovo je samo uvod.
[Ovu poruku je menjao X Files dana 30.01.2007. u 20:36 GMT+1]