Med objektorienteret systemudviklings start som programmeringssprog introduceredes de grundlæggende objektorienterede koncepter som senere også har fundet anvendelse i forbindelse med system analyse og design.
Objektorienteret programmering kan ses som en videreudvikling og formalisering af struktureret progammerings abstrakte data typer i form af objekter som selvstændige enheder der omfatter såvel data/datatyper som processer. Objekter giver muligheder for bedre opdeling af programmer i mindre enheder og gruppering af relaterede data/datatyper og processer.
Bindingerne mellem forskellige programdele mindskes igennem specifikation af objekternes eksterne interface og indkapsling af implementeringsdetaljer og mindsker dermed kompleksiteten i det samlede system. Endeligt giver objektklasser og nedarvning af egenskaber fra disse mulighed for samlet beskrivelse af fælles, generelle egenskaber ved forskellige "ting"/fænomener samt specialisering af disses særlige egenskaber. Dette kan ligeledes medvirke til at mindske kompleksiteten i det samlede system.
(Anvendelse af objektorienterede koncepter i programmeringssprog er dog ikke nogen garanti for mindsket/bedre håndtering af kompleksistet i systemet. Dårlig implementering af objektorienterede koncepter i de enkelte progammeringssprog og anvendelse af disse kan tværtimod medvirke til væsentlig øget kompleksitet. For eksempel i form af løst specificerede eksterne interfaces og "overriding" af nedarvede metoder der kan resultere i uigennemskuelige bindinger mellem forskellige objektklasser.)
De samme objekterorienterede koncepter anvendes ligeledes i forbindelse med analyse og design og produkterne af disse aktiviteter er ligeledes objekt modeller med specifikation af objekter og disses egenskaber i form af "attributter" og "metoder". Der er således ingen principiel/grundlæggende forskel på objektorienteret analyse, design og programmering. Det hele handler om objekter.
De forskellige objektorienterede aktiviteter fokuserer blot på forskellige aspekter ved de i princippet samme objekter. Analyse identificerer objekter og disses egenskaber samt relationer mellem objekterne. Design strukturerer objekterne i objektklasse hierarkier og specifierer objekternes eksterne grænseflader. Programmering implementerer objekterne som konkrete datatyper/-strukturer og algoritmer/fuktioner/procedurer. De forskellige aktiviteter er således ideelt set blot trinvis forfining af de samme objekter.
I praksis holder enhedsmodelleringen igennem objektorienteret analyse, design og programmering dog ikke helt, idet de enkelte aktiviter eventuelt må arbejde med separate og måske meget forskellige objekt modeller. Objekterne ved analyse er fænomener/begreber i "den virkelige verden" - eventuelt med uformaliserede egenskaber. Objekterne ved design er computerrelaterede konstruktioner - eventuelt uden direkte relation til fænomener/begreber i "den virkelige verden". Objekterne ved programmering er konkrete implementeringer udfra bestemte programmeringssprogs konkrete måske begrænsede implementering af de objektorienterede koncepter - eventuelt uden direkte en-til-en relation til de abstrakte design konstruktioner.
Muligheden for objektorienteret systemudvikling som et tæt gensidigt sammenspil mellem analyse, design og programmering begrænses dermed, i det omfang der arbejdes med forskellige modeller hvis elementer ikke er direkte relaterede, da det kræver (manuel) opdatering af de forskellige modeller for at sikre konsistens imellem dem. Dette trækker således i retning af et traditionelt, ensrettet systemudviklingsforløb.
En vigtig kvalitet ved objektorientering er at objekter hævdes at være "naturlige" i forhold til "den virkelige verden" for såvel brugere/kunder som systemudviklere. Dette kan dog diskuteres, og det er i hvert fald ikke altid tilfældet. For eksempel er det ikke umiddelbart "naturligt" på hvilke(t) objekt(er) metoder skal placeres i forbindelse med processer der involverer flere, ligeværdige objekter uden ét objekt der er naturligt styrende. I forbindelse med objektorienteret analyse er identificeringen af objekter heller ikke altid umiddelbart naturlig, og der er givet meget forskellige, mere konkrete forslag til identificering af de "rigtige" objekter som for eksempel fysiske artifakter i "den virkelige verden" og problemmønstre.
På trods af disse problemer er objektorienterings forenende koncepter interessante, og problemerne er ikke ældre og større end at der stadig er håb om løsninger/forbedringer.
|