ett objektorienterat språk är ett datorprogrammeringsspråk som kretsar kring begreppet ett objekt. Objektorienterade språk utveckladesför att göra det lättare att utveckla, felsöka, återanvända och underhålla programvara än vad som är möjligt med tidigare språk. Att förstå objekt och objektorienterade språk kräver kunskap om utvecklingen av datorprogrammeringsspråk och datastrukturer.
utveckling av datorprogrammeringsspråk
datorprogrammeringsspråk har utvecklats kontinuerligt under åren. Denna utveckling beskrivs i följande exempel.
monteringsspråk.
de första datorprogrammen skrevs på monteringsspråk. Detta är en primitiv typ av språk där varje uttalande motsvarar en enda maskininstruktion; det är den mest grundläggande datoroperationen som är möjlig. Att utföra något användbart tar många maskininstruktioner. Monteringsspråk är specifikt för en viss typ av dator; att flytta programmet till en annan typ av dator kräver att man skriver ett helt nytt program. Monteringsspråksprogram är svåra att skriva, felsöka och underhålla. Även om andra språk nu används för de flesta datorapplikationer, används monteringsspråk fortfarande idag som första språk när ett nytt chip utvecklas.
Högordningsspråk.
efter monteringsspråk utvecklades högre ordningsspråk; bland de tidiga var FORTRAN och BASIC. Ett uttalande på ett högt ordningsspråk motsvarar en mening på engelska. Ett program som heter en kompilator läser uttalandena från en källfil och genererar en fil som innehåller maskininstruktioner, som kallas en objektfil. Objektfilen kan sedan laddas och köras av datorn. Ett högt ordningsspråk är mer bärbart än ett monteringsspråksprogram; samma källfil kan sammanställas för vilken dator som helst så länge en lämplig kompilator finns.
tidiga högordningsspråk tillåts endast för enkla datatyper som heltal, flyttal eller sträng (en bokstavssekvens). Den enda tillgängliga datastrukturen var matrisen. En matris är en lista över element som alla har samma datatyp; till exempel en lista med siffror eller en lista med strängar. En databas skapades med en grupp arrayer. Till exempel kan en produktdatabas innehålla tre matriser som kallas produktnummer, Produktbeskrivning och produktpris. Det var upp till programmeraren att hålla arrayerna inriktade; till exempel för att se till att det tredje elementet i varje array motsvarade samma produkt.
strukturerade språk.
nästa steg i utvecklingen av datorprogrammeringsspråk var utvecklingen av strukturerade språk, som C och PASCAL, och införandet av datastrukturer. En datastruktur är en sammansättning av enklare datatyper i en enda post. Till exempel kan en produktdatabas konstrueras som en rad produktposter, varje post som innehåller produktnummer, produktbeskrivning och Produktprisfält. Nu kan en post innehålla all nödvändig information om ett enda objekt. Strukturer blev också mer definierade i språkets processuella del. En funktion eller procedur är en liten del av ett större program som kan skrivas för att ge en grundläggande operation på en datastruktur som en post.
objektorienterade språk.
nästa steg i utvecklingen av datorprogrammeringsspråk, objektorientering, introducerades på Smalltalk-språket. Objektorientering tar begreppen strukturerad programmeringett steg längre. Nu, istället för datastrukturer och separata programstrukturer, kombineras både data och programelement till en struktur som kallas ett objekt. Objektdataelementen kallas attribut, medan objektprogramelementen kallas metoder. Sammantaget kallas attribut och metoder objektets medlemmar. Vanligtvis är ett objekts metoder de enda program som kan fungera på objektets attribut.
med objektorientering kom en grundläggande förändring i hur programmen ses. Den tidigare uppfattningen var att data måste manipuleras på något sätt för att uppnå ett slutresultat, och ett program betraktades som ett sekventiellt sätt att utföra manipulationerna. Från ett objektorienteringsperspektiv ses ett program som en grupp objekt som reagerar på meddelanden från användaren, andra program eller andra objekt. Denna uppfattning ledde till tanken på händelsestyrd programmering; dvs. när händelse a inträffar utför detta objekt åtgärd B. Ett meddelande skickas till ett objekt genom att anropa en av dess metoder.
egenskaper för objektorienterad programmering
viktiga egenskaper för objektorienterad programmering inkluderar inkapsling och dataskydd, arv och polymorfism.
inkapsling och data gömmer sig.
den centrala tanken i objektorienterad programmering (OOP) är att objektattributen och metoderna som fungerar på attributen är bundna ihop eller inkapslade i objektet. Objektets metoder ger de enda gränssnitten mellan objektet och andra delar av programmet. Detta skiljer sig från tidigare språk, där någon del av ett program kan fungera på vilken data som helst när som helst. Även om detta verkar restriktivt resulterar begränsningarna i ett mer modulärt program som är lättare att utveckla och mindre benägna att innehålla fel. Det betyder också att det är lättare att flytta ett objekt till en annan miljö och ändå få det att fungera korrekt.
ett mjukvaruobjekt liknar något ett fysiskt objekt. Till exempel kan en motor användas för att driva en bil. Den har interna komponenter som motsvarar attribut, men man behöver inte vara oroad över vad de är eller hur de fungerar. Motorn måste samverka med gasreglaget, bränslesystemet, transmissions -, insugnings-och avgasgrenrören, som alla motsvarar metoder. Det är otänkbart att bränsle skulle komma in i motorn på något annat sätt än genom bränslesystemet. Så länge de korrekta gränssnitten bibehålls fungerar motorn. Så är det med föremål. Objektattributen är dolda från utsidan. Objektet interagerar med sin miljö genom sina metoder.
arv.
ett annat viktigt begrepp för objektorienterad programmering är arv. En objektklass definieras i en hierarki och sägs ärva beteendet hos sina förfäder (dessa objekt ovanför den i hierarkin). Ett ritprogram kan till exempel innehålla tre objektklasser: Form, Rektangel och cirkel. De kan definieras så att rektangel och cirkel är båda ättlingar till form.
form innehåller attribut som är gemensamma för vilken form som helst, till exempel placeringen av formen på en rityta. Shape ger också metoder för att manipulera dessa attribut. Till exempel skulle en move-metod ändra formens plats. Dessutom skulle det ge en definition för metoder som alla former måste kunna svara på, till exempel en dragningsmetod för att visa formen på en rityta. Dragningsmetoden i detta fall sägs vara abstrakt; det gör inget annat än att skapa ett krav på att efterkommande klasser måste genomföra det.
eftersom rektangel är en ättling till form, ärver den attribut (plats) och metoder (flytta) från Form. Det ger de ytterligare attribut den behöver (bredd och höjd) och nya metoder som manipulerar dessa attribut (setWidth, setHeight). Rektangel måste också ge en rita metod som målar en rektangel på ritningen ytan, eftersom varje ättling till form måste genomföra en rita metod. På samma sätt ger Circle ett nytt attribut (radie), metoder för att manipulera det (setRadius) och en egen dragningsmetod.
Med denna typ av arrangemang skulle ritningshanteringsprogrammet ha en lista med former på ritytan. För att flytta ett objekt skulle det kalla objektets flyttmetod. För att rita ett objekt anropar chefen objektets dragningsmetod. Chefen varken vet eller bryr sig om hur objektet rör sig eller drar sig, så länge jobbet blir gjort. Faktum är att det kanske inte ens vet vilken typ av Form ett visst objekt verkligen är. Det kan vara en rektangel, en cirkel eller något annat objekt som kommer från Form. Det behöver bara veta att det är ättling från Shape, så det kan skicka till det något meddelande som en Shape kan ta emot.
arvskapaciteten hos ett objektorienterat språk lade till en helt ny dimension i programmeringen. Att lära sig ett tidigare högordningsspråk var främst involverat i att lära sig språksyntaxen (hur språkuttalandena är konstruerade), vilket inte är så svårt. På ett objektorienterat språk är det fortfarande nödvändigt att lära sig syntaxen, men att bli bekant med standardklasshierarkierna—som kan innehålla tusentals klasser, varje klass med sina egna metoder—är en mycket större uppgift. Det är dock värt, eftersom ett objekt ärver attributen och beteendet hos sin förälder. En programmerare kan undvika onödigt arbete genom att hitta ett befintligt objekt som redan gör det mesta av det som behövs. Då kan ny kapacitet läggas stegvis. Resultatet är lägre kostnad, programvara av högre kvalitet.
denna egenskap ledde också till att automatiska dokumentationsfunktioner inkluderades på flera objektorienterade språk. På tidigare språk gjordes dokumentation—om den genererades alls-separat, nästan som en eftertanke. Nu dokumentationsinformation kan ingå i objektkällkoden och används för att generera en Hypertext Markup Language (HTML) dokument automatiskt, komplett med hyperlänkar upp och ner klasshierarkier, som kan ses med en webbläsare. Detta gör det mycket lättare att upprätthålla korrekt, uppdaterad dokumentation.
polymorfism.
nästa viktiga egenskap hos objektorienterat språk är polymorfism, vilket innebär att ett efterkommande objekt inte behöver svara på ett meddelande precis som dess förfader gör. Ett nytt objekt kan åsidosätta föräldrarnas metoder, vilket gör att det nya objektet reagerar på ett meddelande annorlunda. Till exempel är en gemensam klass i ett fönstersystem en komponent som representerar ett synligt objekt. En komponent är en förfader klass för varje synligt objekt på skärmen: ikoner, knappar, menyer, skjutreglage, kryssrutor, radioknappar, även fönster. Alla dessa efterkommande klasser åsidosätter några av komponentens metoder för att ändra beteende. Till exempel måste ett Ikonobjekt visa sig som en liten bild. Ikonen åsidosätter komponentens ritningsmetod för att visa bilden.
vanliga objektorienterade språk
vanliga objektorienterade språk inkluderar Smalltalk, C, Java och andra språk som BASIC och PASCAL.
Smalltalk.
Smalltalk var det ursprungliga objektorienterade språket, utvecklat i början av 1970-talet av Xerox. Sedan dess har flera variationer införts. Det används fortfarande, men utbredd acceptans har hindrats av bristen på en universell standard.
C+ +.
C + + är en förlängning av C-språket som gav OOP-funktioner. Det är förmodligen det mest utbredda objektorienterade språket som för närvarande används. C är ett hybridspråk eftersom det sammanställer standard C-Program; det kräver inte användning av objekt. Detta gör det möjligt att dra nytta av befintlig C-programvara, medan du använder objektorientering för ny programvara. C styrs av ANSI-standarder.
Java.
Java är det mest accepterade rena objektorienterade språket. Det utvecklades av Sun Microsystems ursprungligen som ett kontrollspråk för små apparater. Det visade sig dock vara idealiskt för användning med Internet. En Java-applet kan bäddas in på en webbsida. När en webbläsare laddar webbsidan laddas den också och visar appleten. Sun upprätthåller fortfarande strikt kontroll över språkstandarden.
För att underlätta plattformsoperabilitet (arbetar på helt olika datortyper utan omkompilering) implementeras Java i två delar. Kompilatorn producerar en objektfil som bara kan köras av en Java Virtual Machine (JVM). En separat JVM är tillgänglig för varje operativsystem som stöds (Windows, Unix/Linux eller Solaris). Detta gör att Java-program kan köras på något av dessa system utan att kompilera om.
andra språk.
de flesta språk som vanligtvis används idag tillåter någon form av objektorientering. BASIC har utvecklats till objektorienterad Visual BASIC; PASCAL till objektorienterad DELPHI. Generellt är dessa hybridspråk, som C, som stöder objektorientering utan att kräva det.
Se även kompilatorer; mus; procedurspråk.
Donald M. McIver
bibliografi
Deitel, Harvey M. och Paul J. Deitel. Java: hur man programmerar, 2: a upplagan. Övre Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Objektorienterad Programmering, En Introduktion. New York: Osborne McGraw-Hill, 1991.