fezken Skrevet 7. januar 2009 Del Skrevet 7. januar 2009 Hei! En stund siden jeg har kodet skikkelig nå, og tenkte å begynne opp igjen. I den sammenheng skal jeg sette meg mer inn i oop for php 5 . Da er spørsmålet mitt det samme som emnetittelen: Hva godt gjør det å benytte seg av abstract og interface klasser ? Takk for all hjelp Lenke til kommentar
Jonas Skrevet 7. januar 2009 Del Skrevet 7. januar 2009 Et interface forteller egentlig bare hvordan en implementasjon skal se ut og har derfor ingen praktisk betydning for selve applikasjonens funksjonalitet. Man kan fint unngå å noen gang skrive et interface og fortsatt oppnå samme resultat. Det gjør det derimot veldig mye lettere å utvikle, spesielt hvis man er flere utviklere og ikke helt kjenner til alle dependencies osv. En abstract klasse er lik på mange måter, bortsett fra at den kan inneholde implementasjoner og at prefiksen abstract må brukes overalt. Se litt her for flere forskjeller mellom abstract vs. interface. Lenke til kommentar
fezken Skrevet 7. januar 2009 Forfatter Del Skrevet 7. januar 2009 Takk for svar Stusset litt på en annen ting også. Hva er forskjellen på class2 extends class1 og class2 implements class1 ? Lenke til kommentar
Ernie Skrevet 7. januar 2009 Del Skrevet 7. januar 2009 (endret) Vel, både interface og abstrakte klasser gir tilsynelatende lite mening i et såpass dynamisk språk som PHP. Det er ikke like åpenbart som i litt mer statiske språk som Java, C/C++ etc. hvor man har typedefinisjoner osv. Uannsett, dette brukes til å sikre en felles struktur og et kjent grunnlag man kan jobbe ut fra. Hvis man drar inn litt analogier fra den virkelig verden kan man f.eks tenke på hunder. En hund kan være så mangt, men de har visse ting felles. Det gjør at når noen sier hund veit du sånn cirka hva det er snakk om uten at du egentlig veit hvilken type hund det er. Det kan tross alt være alt fra en puddel til en St. Bernhard, og det er tross alt store forskjeller mellom de (f.eks størrelsen). Dog, på tross av forskjellene er begge deler hunder, og det er åpenbart fordi hunder har visse fellestrekk. De har f.eks 4 bein, pels og kan bjeffe. Hvis man nå overfører dette til programmering så blir hund et interface eller abstrakt klasse og f.eks bjeffing en funksjon i interfacet eller den abstrakte klassen. Deretter får du puddel og St. Bernhard som to klasser som implementerer hund med hver sin versjon av bjeffing. Det vil altså si: Interface og abstrakte klasser lar deg som programmerer jobbe med noe abstrakt som har felles egenskaper og funskjoner (i betydningen funksjonsdefinisjon) uten å kjenne spesifikt til hva tingene faktisk er. Du har f.eks en database, men du veit ingenting om hva slags database det er snakk om, og du har heller ikke bruk for å vite det. Det eneste du veit er at det er en database, og da tar den imot SQL-spørringer på det og det viset. Dermed kan det fort hende at du på din maskin programmerer mot en MySQL-database mens noen andre bruker en PostgreSQL-database på sin maskin, alt dette uten at ting krøller seg til, for alle jobber jo tross alt mot en database. Forskjellen interface vs. abstract er dog langt mindre, men som Jonas sier, abstract kan inneholde en faktisk implementasjon av noe som vil være tilgjengelig i alle klasser som arver fra den. Takk for svar Stusset litt på en annen ting også. Hva er forskjellen på class2 extends class1 og class2 implements class1 ? extends hentyder arv/utvidelse av en klasse (også abstrakte) mens implements betyr at man implementerer et interface. Endret 7. januar 2009 av Ernie Lenke til kommentar
Jonas Skrevet 7. januar 2009 Del Skrevet 7. januar 2009 (endret) Du kan extende fra en klasse, mens du må implementere et interface. interface Foo {} class Bar extends Foo {} // Not valid abstract class Foo {} class Bar implements Foo {} // Not valid Edit: Slått på målstreken .. Endret 7. januar 2009 av Jonas Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå