et objektorienteret sprog er et computerprogrammeringssprog, der drejer sig om begrebet et objekt. Objektorienterede sprog blev udvikletfor at gøre det lettere at udvikle, debug, genbruge og vedligeholde programmer, end det er muligt med tidligere sprog. Forståelse af objekter og objektorienterede sprog kræver viden om udviklingen af computerprogrammeringssprog og datastrukturer.
udvikling af computerprogrammeringssprog
computerprogrammeringssprog har udviklet sig løbende gennem årene. Denne udvikling er detaljeret i de følgende eksempler.
samlingssprog.
de første computerprogrammer blev skrevet på samlingssprog. Dette er en primitiv type sprog, hvor hver sætning svarer til en enkelt maskininstruktion; det er den mest basale computeroperation, der er mulig. At udføre noget nyttigt kræver mange maskininstruktioner. Samlingssprog er specifikt for en bestemt type computer; at flytte programmet til en anden type computer kræver at skrive et helt nyt program. Assembly sprogprogrammer er vanskelige at skrive, debug og vedligeholde. Selvom andre sprog nu bruges til de fleste computerapplikationer, bruges samlingssprog stadig i dag som det første sprog, når en ny chip udvikles.
Højordenssprog.
efter samlingssprog blev der udviklet højere ordenssprog; blandt de tidlige var FORTRAN og BASIC. En sætning i et højordenssprog svarer til en sætning på engelsk. Et program kaldet en compiler læser udsagnene fra en kildefil og genererer en fil, der indeholder maskininstruktioner, som kaldes en objektfil. Objektfilen kan derefter indlæses og udføres af computeren. Et højordenssprog er mere bærbart end et samlingssprogprogram; den samme kildefil kan kompileres til enhver computer, så længe der findes en passende kompilator.
tidlige højordenssprog er kun tilladt for enkle datatyper som heltal, flydende punktnummer eller streng (en række bogstaver). Den eneste tilgængelige datastruktur var arrayet. Et array er en liste over elementer, der alle er af samme datatype; for eksempel en liste over tal eller en liste over strenge. En database blev oprettet ved hjælp af en gruppe arrays. For eksempel kan en produktdatabase indeholde tre arrays kaldet produktnummer, Produktbeskrivelse og Produktpris. Det var op til programmøren at holde arrays justeret; for eksempel for at sikre, at det tredje element i hvert array svarede til det samme produkt.
strukturerede sprog.
det næste trin i udviklingen af computerprogrammeringssprog var udviklingen af strukturerede sprog, som C og PASCAL, og introduktionen af datastrukturer. En datastruktur er en samling af enklere datatyper i en enkelt post. For eksempel kan en produktdatabase konstrueres som en række produktposter, hvor hver post indeholder produktnummer, Produktbeskrivelse og produktprisfelter. Nu kan en post indeholde alle nødvendige oplysninger om en enkelt vare. Strukturer blev også mere defineret i den proceduremæssige del af sproget. En funktion eller procedure er en lille del af et større program, der kan skrives for at give nogle grundlæggende handlinger på en datastruktur, såsom en post.
objektorienterede sprog.
det næste trin i udviklingen af computerprogrammeringssprog, objektorientering, blev introduceret i Smalltalk-sproget. Objektorientering tager begreberne struktureret programmeringet skridt videre. I stedet for datastrukturer og separate programstrukturer kombineres både data-og programelementer i en struktur kaldet et objekt. Objektdataelementerne kaldes attributter, mens objektprogramelementerne kaldes metoder. Samlet kaldes attributter og metoder objektets medlemmer. Normalt er et objekts metoder de eneste programmer, der kan fungere på objektets attributter.
med objektorientering kom en grundlæggende ændring i den måde, programmer ses på. Den tidligere opfattelse var, at data skal manipuleres på en eller anden måde for at opnå et endeligt resultat, og et program blev betragtet som et sekventielt middel til at udføre manipulationerne. Fra et objektorienteringsperspektiv ses et program som en gruppe objekter, der reagerer på meddelelser fra brugeren, andre programmer eller andre objekter. Denne opfattelse førte til ideen om begivenhedsdrevet programmering; dvs. når begivenhed a sker, udfører dette objekt handling B. En meddelelse sendes til et objekt ved at kalde en af dets metoder.
egenskaber ved objektorienteret programmering
nøgleegenskaber ved objektorienteret programmering inkluderer indkapsling og data skjul, arv og polymorfisme.
indkapsling og data Skjul.
den centrale ide i objektorienteret programmering (OOP) er, at objektattributterne og metoderne, der fungerer på attributterne, er bundet sammen eller indkapslet i objektet. Objektets metoder giver de eneste grænseflader mellem objektet og andre dele af programmet. Dette er forskelligt fra tidligere sprog, hvor enhver del af et program kan fungere på ethvert stykke data til enhver tid. Selvom dette virker restriktivt, resulterer begrænsningerne i et mere modulopbygget program, der er lettere at udvikle og mindre tilbøjelige til at indeholde fejl. Det betyder også, at det er lettere at flytte et objekt til et andet miljø og stadig have det til at fungere korrekt.
et programobjekt er noget der ligner et fysisk objekt. For eksempel kan en motor bruges til at drive en bil. Det har interne komponenter, der svarer til attributter, men man behøver ikke at være bekymret for, hvad de er, eller hvordan de fungerer. Motoren skal interface med gashåndtaget, brændstofsystemet, transmission, indtag og udstødningsmanifolder, som alle svarer til metoder. Det er utænkeligt, at brændstof ville komme ind i motoren på nogen anden måde end ved hjælp af brændstofsystemet. Så længe de korrekte grænseflader opretholdes, fungerer motoren. Sådan er det med objekter. Objektattributterne er skjult udefra. Objektet interagerer med sit miljø gennem dets metoder.
arv.
et andet vigtigt koncept til objektorienteret programmering er arv. En objektklasse er defineret i et hierarki og siges at arve dets forfædres opførsel (disse objekter over det i hierarkiet). For eksempel kan et tegningsprogram omfatte tre objektklasser: Form, Rektangel og cirkel. De kunne defineres således, at rektangel og cirkel er begge efterkommere af form.
figur indeholder attributter, der er fælles for enhver figur, f.eks. placeringen af figuren på en tegningsoverflade. Shape giver også metoder til at manipulere disse attributter. For eksempel vil en flytningsmetode ændre figurens placering. Derudover ville det give en definition for metoder, som alle figurer skal kunne reagere på, for eksempel en tegnemetode til at vise figuren på en tegningsoverflade. Tegnemetoden i dette tilfælde siges at være abstrakt; det gør ikke andet end at skabe et krav om, at efterkommerklasser skal implementere det.
da rektangel er en efterkommer af figur, arver det attributter (placering) og metoder (flytte) fra Figur. Det giver de ekstra attributter, den har brug for (bredde og højde) og nye metoder, der manipulerer disse attributter (setbredde, setHeight). Rektangel skal også give en tegning metode, der maler et rektangel på tegningen overflade, fordi hver efterkommer af form skal gennemføre en tegning metode. Ligeledes giver Circle en ny attribut (radius), metoder til manipulation af den (setRadius) og en egen tegnemetode.
med denne form for arrangement ville tegnehåndteringsprogrammet have en liste over figurer på tegningsoverfladen. For at flytte et objekt ville det kalde objektets flytningsmetode. For at tegne et objekt kalder manageren objektets tegnemetode. Lederen hverken ved eller bekymrer sig om, hvordan objektet bevæger sig eller trækker sig selv, så længe jobbet bliver gjort. Faktisk kan det ikke engang vide, hvilken slags form et bestemt objekt virkelig er. Det kan være et rektangel, en cirkel eller ethvert andet objekt, der stammer fra form. Det behøver kun at vide, at det er efterkommer fra figur, så det kan sende til det enhver meddelelse, som en figur kan modtage.
arvskapaciteten for et objektorienteret sprog tilføjede en helt ny dimension til programmeringen. At lære et tidligere højordenssprog var hovedsageligt involveret i at lære sprogsyntaksen (hvordan sprogudtalelserne er konstrueret), hvilket ikke er så svært. På et objektorienteret sprog er det stadig nødvendigt at lære syntaksen, men at blive fortrolig med standardklassehierarkierne—som kan omfatte tusinder af klasser, hver klasse med sine egne metoder—er en meget større opgave. Det er dog værd, fordi et objekt arver dets forældres attributter og opførsel. En programmør kan undgå unødvendigt arbejde ved at finde et eksisterende objekt, der allerede gør det meste af det, der er nødvendigt. Derefter kan ny kapacitet tilføjes trinvist. Resultatet er lavere omkostninger, programmer af højere kvalitet.
denne egenskab førte også til inkludering af automatiske dokumentationsfunktioner på flere objektorienterede sprog. På tidligere sprog blev dokumentation—hvis den overhovedet blev genereret-udført separat, næsten som en eftertanke. Nu kan dokumentationsoplysninger inkluderes i objektkildekoden og bruges til automatisk at generere et HTML-dokument (hypertekst Markup Language), komplet med hyperlinks op og ned i klassehierarkierne, som kan ses med en internetsøgemaskine. Dette gør det meget lettere at opretholde nøjagtig, opdateret dokumentation.
polymorfisme.
det næste vigtige kendetegn ved objektorienteret sprog er polymorfisme, hvilket betyder, at et efterkommende objekt ikke behøver at svare på en meddelelse nøjagtigt som dets forfader gør. Et nyt objekt kan tilsidesætte dets overordnede metoder, hvilket får det nye objekt til at reagere forskelligt på en meddelelse. For eksempel er en fælles klasse i et vinduessystem en komponent, som repræsenterer et synligt objekt. En komponent er en forfaderklasse for hvert synligt objekt på skærmen: ikoner, knapper, menuer, glidebjælker, afkrydsningsfelter, radioknapper, lige vinduer. Alle disse efterkommere klasser tilsidesætter nogle af komponentens metoder til at ændre adfærd. For eksempel skal et Ikonobjekt vise sig som et lille billede. Ikon tilsidesætter komponent tegning metode til at vise billedet.
almindelige objektorienterede sprog
almindelige objektorienterede sprog inkluderer Smalltalk, C, Java og andre sprog som BASIC og PASCAL.
Smalltalk.
Smalltalk var det oprindelige objektorienterede sprog, udviklet i begyndelsen af 1970 ‘ erne. Siden da er der indført flere variationer. Det bruges stadig, men udbredt accept er blevet hæmmet af manglen på en universel standard.
C++.
C+ + er en udvidelse af C-sproget, der leverede OOP-funktioner. Det er sandsynligvis det mest udbredte objektorienterede sprog, der i øjeblikket er i brug. C er et hybridsprog, fordi det kompilerer standard C-Programmer; det kræver ikke brug af objekter. Dette gør det muligt at drage fordel af eksisterende C-programmer, mens du bruger objektorientering til nye programmer. C styres af ANSI-standarder.
Java.
Java er det mest accepterede rene objektorienterede sprog. Det blev udviklet af Sun Microsystems oprindeligt som et kontrolsprog til små apparater. Det viste sig dog ideelt til brug med internettet. En Java-applet kan indlejres på en hjemmeside. Når en bro. ser indlæser hjemmesiden, indlæser og viser den også appleten. Sun opretholder stadig streng kontrol med sprogstandarden.
for at lette cross-platform funktionsdygtighed (arbejder på helt forskellige computertyper uden genkompilering) implementeres Java i to dele. Kompilatoren producerer en objektfil, der kun kan udføres af en Java Virtual Machine (JVM). En separat JVM er tilgængelig for hvert understøttet operativsystem (f.eks. Dette gør Java-programmer i stand til at køre på et af disse systemer uden genkompilering.
andre sprog.
de fleste sprog, der almindeligvis anvendes i dag, tillader en form for objektorientering. BASIC har udviklet sig til objektorienteret Visual BASIC; PASCAL til objektorienteret DELPHI. Generelt er disse hybridsprog, som C, der understøtter objektorientering uden at kræve det.
se også compilere; mus; proceduremæssige sprog.
Donald M. McIver
bibliografi
Deitel, Harvey M. og Paul J. Deitel. Java: Sådan programmeres, 2. udgave. Upper Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Objektorienteret Programmering, En Introduktion. Osborne Mcgrav-Hill, 1991.