Citat:
Rapaic Rajko:
Ne znam kako vi, ali meni licno je ignorisanje "virtual-override" keywords veliki minus za javu. To cak narusava koncept OOP-a, rekao bih, a i opterecuje procesor (ili rasterecuje? to je ona prica sa VMT tabelama... hmmm). Programer mora imati mogucnost izbora virtual ili ne (moje misljenje, svakako).
Nepostojanje non-virtual metoda je veliki plus za javu! Virtuelne metode su srz polimofrizma. i to ne samo da ne narusava koncept OOP vec sprecava korisnika da narusi koncepte OOPa. Dacu primer na dnu posta.
Moje misljenje je da je veliki minus kod C++ i C# sto su metode non-virtual.
Citat:
Java Beograd:
Kad kreneš da zarađuješ programirajući u Javi, sve ćeš to posmatrati drugačije. Onda teoretisanje tipa tiger animal mamal i ko šta kaže brzo padne u vodu.
thumbs up!
Citat:
Shadowed:
Da se moze samo sa virtuelnim funkcijama - moze se. Da me neko pita da li bih voleo da u programskom jeziku koji koristim postoje samo virtuelne ili da postoji mogucnost i non-virtual, pa, ipak bih odabrao postojanje i non-virtual. Ne moz' da skodi a moglo bi da koristi :)
Moze da skodi jer iz koda neces znati da li je metoda vezana za klasu ili za instancu. Non-virtuelne metode su vezane za klasu a to iz koda neces znati. Zato je bolje napraviti static metodu koja ce da prima objekat te klase kao parametar.
Ako u javi imamo
Code:
public class ClassB extends ClassA {
@Override
public void trci() {
}
}
i objekat
Code:
ClassA obj=new ClassB();
Ako pozoves obj.trci() kako ces iz koda da znas da li ce to da postuje pravila polimorfizma ili ce da zove metodu koja je vezana za klasu ClassA? Non-virtuelne metode narusavaju principe OOP.
Sa druge strane znamo da su staticne metode vezane za klasu pa ako hoces da zoves metodu koja je vezana za klasu ClassA mozes da definises metod:
Code:
public static trci(ClassA obj)
i da je pozoves sa
Code:
ClassA.trci(obj);
Tako ces iz koda znati da li zoves metodu koja je polimorfna ili je vezana za klasu i za koju klasu.
Pozz.