Gå til innhold

Hvorfor benytte seg av abstract og interface i oop ?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Ernie
Lenke til kommentar

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 av Jonas
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...