Objektorienteret programmering: Forskelle mellem versioner

Content deleted Content added
Redigeret en del i afsnittet om Princippet (lagt de tre følgende afsnit ind som underafsnit)
Linje 2:
 
== Princippet ==
Idéen bag objektorienteret [[programmering]] er at opdele programkoden i [[objektklasse (datalogi)|objekterklasser]], der afspejlerhar delelementerhver afsit programmetsvelafgrænsede "ansvarsområde" i programmet. Ved en god afgrænsning kan en klasse genbruges i andre programmer. Man anvender en klasse ved at oprette én eller flere forekomster (''instanser'') af klassen, og en sådan forekomst kaldes et [[objekt (datalogi)|''objekt'']].
 
Der findes tre grundprincipper i objektorienteret programmering:
:1. Indkapsling
:2. Nedarvning
:3. Polymorfi
 
=== Indkapsling ===
Et objekt indkapsler nogle data og noget funktionalitet (adfærd/opførsel). Objektet skal stille en [[Grænseflade (datalogi)|grænseflade]] (eng. ''interface'') til rådighed for andre objekter, der så gennem grænsefladen kan få objektet til at udføre en bestemt opgave. Andre dele af programmet skal kun have kendskab til, hvilken opgave objektet udfører, men ikke, hvordan opgaven udføres, eller hvordan eventuelle data repræsenteres i klassen.
Et objekt indkapsler nogle data og noget opførsel
== Nedarvning ==
Et objekt kan nedarve data og opførsel fra et andet objekt.
 
Eksempelvis kan en klasse <tt>Begivenhed</tt> indeholde data om et ''tidspunkt''. I grænsefladen defineres, hvordan andre objekter kan manipulere med dette tidspunkt, f.eks. flytte en given <tt>Begivenhed</tt> en uge frem, uden at kende til, hvordan tidspunktet er repræsenteret internt i klassen.
Eksempelvis kan man have et objekt af typen "Køretøj".
 
=== Nedarvning ===
Dette objekt vil have data som hjul, farve osv.
Et objekt kan arve data og funktionalitet fra et andet objekt og udvide dem med ekstra data og funktionalitet. Eksempelvis kan en klasse <tt>Fødsel</tt> nedarve ''tidspunkt'' fra <tt>Begivenhed</tt>, men herudover udvides med oplysninger om ''person'' eller ''sted'' samt en grænseflade, der kan manipulere med disse ekstra data. Et objekt af typen <tt>Fødsel</tt> vil således samtidig være af typen <tt>Begivenhed</tt>. I dette tilfælde siges <tt>Begivenhed</tt> at være "superklasse" for <tt>Fødsel</tt>.
 
Et andet eksempel kan være et objekt af typen <tt>Køretøj</tt> med data som ''hjul'', ''farve'' mm. og funktionalitet som ''kør'' og ''brems''. Objekter af typen <tt>Bil</tt> eller <tt>Cykel</tt> kan begge være en nedarvning af <tt>Køretøj</tt> og arve dennes egenskaber.
Det vil have en opførsel som eks. "kør" eller "brems".
 
=== Polymorfi ===
En bil er en nedarvning af et køretøj, det har hjul og en farve.
I objektorientering betyder polymorfi, at to klasser kan have samme grænseflade defineret via nedarvning, men udføre dem forskelligt. En <tt>Cykel</tt> kan arve funktionaliteten ''brems'' fra <tt>Køretøj</tt>, dvs. udføre opgaven, sådan som den er defineret i superklassen, men kan også have defineret sin egen måde at udføre opgaven på. Herved siges <tt>Bil</tt> at "overskrive" <tt>Køretøj</tt> mht. denne funktionalitet.
Desuden kan den køre og bremse
 
Ligeledes kan man have et køretøj som er en cykel.
 
== PolymorfiDesignmønstre ==
I objektorientering vil det, via polymorfi, være muligt at behandle en bil eller en cykel som et køretøj, eller som det det egentlig er.
 
Før objektorienteret programmering fungerede et [[program]] på den måde, at en række [[kommando]]er blev udført i den rækkefølge [[programmør]]en havde indsat dem. Med objektorienteret programmering bryder man programmet op i objekter, så de enkelte dele af programmet kan isoleres fra hinanden (indkapsling), og hermed nemmere udskiftes eller redigeres. Desuden kan objekterne genbruges i flere forskellige sammenhænge (instantiering).
 
== Design Patterns ==
En meget vigtig del af objektorientering er at forstå, at den problemstilling man står overfor er der sikkert andre, der har prøvet før.