Abstraktni razredi vs. Interfaces - uporaba

Na internetu je ogromno člankov, kar se tiče abstraktnih razredov in pa vmesnikov. Zanima me, kaj vse uporabljate v svojih rešitvah in kako se odločate med tema dvema podobnima, a popolnoma različnima pojmoma?
[Poll]
Avtor: bojanv, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

spirit1
spirit1 - sreda, 04. oktober 2006

to je ze res. vendar bi bilo kul ce ne bi bilo treba "implementirati" :)za tiste funkcije bi se pa ze skompajler zbunil.

AndrejT
AndrejT - torek, 03. oktober 2006

Kaj takega verjetno lahko implementiraš s hierarhijo [vmesnikov *ali* razredov]. En problem, ki se pojavi ob dedovanju večih razredov, so gotovo metode (in ostalo) z istom podpisom (isto ime, isto število in tip parametrov), ki se pojavljajo v teh osnovnih razredih.

spirit1
spirit1 - torek, 03. oktober 2006

najboljsi kompromis po moje bi bil ta bi lahko mel multiple class inheritance amapk samo ce class ima implemetiran interface.Torej bi mel IMojInterface1 -> MojClass1 (ki implementira IMojInterface1)...IMojInterfaceM -> MojClassN (ki implementira IMojInterfaceN) in potem bi lahko mel MojGlavniClass : MojClass1, ... MojClassN. tako da ne bi bilo treba vsakega interfacea implementirat v vsakem classu

MihaM
MihaM - petek, 29. september 2006

spirit1: najvecja stvar ki mene moti je da ni multiplega inheritanca. to je blo super.interface-i so bli popolnoma nepotrebni :) Sama sreča, da ni tega čudesa, ker potem se zelo čudne stvari dogajajo in vse skupaj postane ena neregledna pašta.

spirit1
spirit1 - petek, 29. september 2006

najvecja stvar ki mene moti je da ni multiplega inheritanca. to je blo super.interface-i so bli popolnoma nepotrebni :)

AndrejT
AndrejT - torek, 26. september 2006

Nedvomno je za bazo bolje uporabit abstraktni razred, ki da razredu "vsebino" oz. določi njegov spol, errr., tip. Vmesniki so za npr. dodatek, s katerim določiš "obnašanje" razreda. Zato je tudi priporočljivo, da se vmesniki poimenujejo po tem "obnašanju", npr., IDisposable, ICloneable, IEnumerable, ... Za večino ostalih vmesnikov v .NET FX pa je Microsoft itak priznal, da bi bilo bolje, če bi namesto njih uporabili abstraktne razrede.Zato ja, vedno pride v poštev neka mešanica obojega.

bojanv
bojanv - torek, 26. september 2006

Kolkr sm si prebral na MS strani ( njihova priporočila ), naj bi blo pametno uporabit za večje logične enote abstraktni razred, pri manjših pa interface. Jz mislim, da ni finta samo v tem, da je naenostavneje nardit abstrakten razreda, ampak je za moje pojme dost boljše kot vmesnik. Ok, z vmesnikom že predpišeš, kako katere metode mora imeti implementiratni razred, samo si pa omejen s tem, da morajo bit public. Da ne omenjam, da morš, če imaš veliko razredov, ki imajo en interface, spreminjal k mona ( še posebej, če refactoring zataji), če dodaš novo metodo v vmesnik. Na koncu je pa spet potreben cast, da prides do metode. Kar mi pa zelo všeč, je da lahko en razred implementira več inteface-ov, samo isto lahko dosežemo z abstraktnim razredom pa da lahko povežem nek nabor razredov v eno logično enoto.Prednosti, ki so mi zelo všeč pri abstraktnem class-u, so:ni direktnega cast-alahko implementiramo privatne metode, konstruktorje,...lahko "simuliraš" interface delovanje, če že rabiš Seveda najboljše od tega je hybrid. Mešanica vsega tega...

MihaM
MihaM - torek, 26. september 2006

Mogoče je najboljša kombinacija - tako lahko uporabiš abstraktni razred, lahko pa sam implementeriš vse preko vmesnika.Najenostavneje je pa abstraktni razred, kar so tudi pri MSju ugotovili (npr. vsi tisti plugini za asp.net 2.0)..