-7
Tags:
.net
Skrevet af
Bruger #285
@ 23.01.2007
Interfaces kan godt være en lidt underlig nød at knække. I starten kan navnet godt virke ret usigende og meget abstrakt, men når man først lige får en idé om, hvad interfaces egentlig er, finder man ud af at navnet måske er meget godt valgt.
Lidt naivt sagt, kan interfacet jo så absolut intet. Det implementerer intet. Det dikterer kun. Og i den objektorienterede verden er det jo også ganske godt at få lagt nogle rammer fast, så når vi kommer over det naive stadie, viser interfaces sig at være meget anvendelige. Det er en vigtig sidebemærkning lige at få med, at man jo skal huske på at klasser maksimalt kan være nedarvet fra én anden klasse. En klasse kan altså maksimalt have én superklasse! Og det er her interfaces kommer ind i billedet. Vi ønsker jo måske at vide at visse klasser har noget til fælles/tilbyder samme funtioner - dette kaldes at implementere et interface. En sidebemærkning er, at man plejer (og jvf. Microsofts navnekonvention) at starte et navn på et interface med stort I (på tilsvarende måde som specialiserede exceptions gerne skal slutte på Exception).
Når man ved at en klasse implementerer et interface, ved man altså at denne klasse nødvendigvis har de egenskaber interfacet beskriver (members, properties osv.). Derved kan man lave polymorfi over klasser, der ikke har samme superklasse. Slet ikke så dumt endda!
For lige at eksemplificere det lidt, kan vi prøve at kombinere lidt interfaces og lidt generics:
interface IValidable
{
bool IsValid();
}
class SomeItemList<T>: IValidable where T: IValidable
{
private List<T> list = new List<T>();
public bool IsValid()
{
foreach (IValidable i in this.list)
{
if (!i.IsValid())
return false;
}
return true;
}
}
Her lader vi både den generiske klass SomeItemList implementere IValidable og kræver at typen T implementerer interfacet. Derved ved vi, at objekterne i list har en funktion, der hedder IsValid, og den kan vi gøre brug af i SomeItemLists implementation af IValidable! Smart!
Så altså en kort opsummering på interfacet må været noget i retning af: med interfacet kan man vide noget om hvad klasser stiller til rådighed, og kan på den måde lave endnu bedre indkapsling og mere sofistikeret og avanceret polymorfi.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (6)
Hej. Jeg kan se mine nye artikler bliver stemt til 1 og 2. Det er selvfølgelig helt okay, men I må hjertens gerne lige knytte en kommentar til hvorfor, således jeg har mulighed for at ændre det i fremtiden. Hvis I vil være anonyme, kan I bare sende det til KasperTSW og sige det, så kan han vidregive det til mig uden jeres navn. Men altså: jeg har intet imod lave bedømmelser, jeg vil bare gerne have en mulighed for at kunne gøre det bedre fremover.
Først vil jeg lige sige at jeg ikke er vild stiv i C#, tilgengæld er jeg ganske fair til java, der også har interfaces, og vil basere min faglige kritik på det.
med udgangspunkt i overskriften der siger "Interfaces og deres anvendelighed". du får defineret hvad et interface er på en meget lidt god måde, men hoved pointen kommer dog hjem. Dette kan godt forklares mere simpelt. Jeg kan dog godt lide at du får gjort opmærksom på at man kun har et skud i bøssen når man skal arve fra en anden klasse, og dette ikke gælder for interfaces. Og det med navnekonventionen er også fint.
så kommer vi til eksemplet, Interfacet du definerer er såmænd fint, det er (næsten) så småt som det overhovedet kan være. Klassen der implementerer skidtet er dog en hel anden sag, den er alt for kompleks, det tog mig flere minutter at gennemskue hvad meningen egentlig var med det, og hvad tror du ikke en nytilkommen fatter?
herudover mangler du at beskrive notationen for når en klasse inplememterer et interface, og evt. regler herfor.
resten artiklen er det rene gøjl, pånær sidste sætning.
ok, så har dækket hvorfor artiklen næsten kan leve til ordet "interfaces" i overskriften.
Det med anvendeligheden kommer du slet ikke ind på.
Artiklen er en anelse rodet i sin formidling, Eksemplet er elendigt, og der burde have været flere eksempler, navnligt hvad angår anvendeligheden. Artiklen er for kort til et begreb som interfaces, men det løser sig, af sig selv hvis det med anvendeligheden kom med. Evt. suppler op med noget UML, det kan hurtigt og visuelt give en god ide om hvorfor det her er en god ide. Polymorfi ville heller ikke være en skidt at komme ind på...
Jeg fatter det ikke, du har før skrevet nogen udemærkede artikler, Hvad sker der lige for det her?
Mange tak for den rigtige gode feed-back, Troels! Det har jeg så afgjort taget til mig. Jeg ved ikke hvad den egentlige grund til den noget rodet og manglende artikel er; måske fordi den er skrevet umiddelbart efter jeg fik min "åbenbaring" omkring interfaces, og derfor mangler der en masse. Men som sagt, tak for den gode kommentar; det er dejligt du gad bruge din tid til det; jeg håber jeg kan få strikket en bedre en sammen i den nærmeste fremtid.
Jeg vil anbefale dig at købe bogen "Programming .NET Components" af Juwal Löwy (THE .NET guru..) fra O'Reilly.
Interfaces er MEGET MEGET MEGET mere end det din artikel lægger op til, HVIS du da ikke lige have haft ordene "indkapsling" og "polymorfi" med.
Det er rigtig godt at du skriver en masse artikler, bliv endelig ved med det. Men prøv at logge på Udviklerens IRC kanal (#udvikleren.dk @ quakenet.org) så vil der være flere (mig selv og sikkert også Troels) der vil være villige til at yde lidt "censur" hjælp.
Jeg kan godt lide den måde, du formulerer dig på. Virker meget intellektuel
Du forklarer vist interfaces meget godt (har ikke en sk*d forstand på det), men som nybegynder finder jeg det irriterende, at du ikke forklarer din kode mere.
Hvad gør <T> ved klassen?
Du nævner polymorphi ... Hvad er det?
Jeg ved godt, jeg kan få svar på de to andre steder, og at det ikke var din artikels primære emne, men når den er så kort er det ingen undskyldning for ikke at uddybe de to ting. Og jo, ratet 'Nybegynder'
Kevin og Thomas: Først tak for kommentarerne. Jeg vil give jer ret i, at artiklerne er lidt tynde - ikke kun denne, men faktisk de fire sidste. Dette beklager jeg naturligvis, og det er klart at alt derfor ikke er forklaret hverken i dybden eller vidden. Så jeg er skam helt enige med jer :-) Jeg har vist været lidt for sjusket :-(
Du skal være
logget ind for at skrive en kommentar.