Om du har gjort någon nybörjare programmering, eller till och med börjat titta på olika språk, har du förmodligen stött på frasen "objektorienterad programmering" (eller "OOP").
Det finns alla slags tekniska förklaringar om vad det är, men idag ska vi titta på att definiera objektorienterad programmering på ett enkelt sätt.
Innan vi börjar: Procedurella språk
För att förstå vad ett objektorienterat programmeringsspråk är, måste du förstå vad det ersätter. Tidiga programmeringsspråk var processuella så kallade eftersom programmeraren skulle definiera en mycket specifik uppsättning procedurer som datorn skulle åta sig.
På de tidigaste dagarna skrevs procedurer på stämpelkort. Dessa steg tog in data, utförde en sekvens av åtgärder på den dataen och matar sedan ut nya data.
Procedurella språk fungerade bra för en tid (och vissa är fortfarande i bruk). Men när du vill programmera något bortom en grundläggande stegsekvens kan processuella språk bli svåra att hantera. Det är där objektorienterad programmering kommer in.
Objektet med objektorienterad programmering
Så då, vad är objektorienterad programmering?
Det första objektorienterade språket (allmänt överens om att vara Simula) introducerade idén om objekt . Objekt är samlingar av information som behandlas som en enskild enhet.
Vi dyker djupare in i vad som faktiskt betyder i ett sekund med ett exempel, men först måste vi prata om klasser . Klasser är sorts som pre-objekt. De innehåller en lista över attribut som, när de definieras, blir ett objekt.
Låt oss ta ett exempel på att programmera ett schackspel. Vi kanske har en klass som heter Piece. Inom Piece har vi en lista över attribut:
- Färg
- Höjd
- Form
- Rörelse tillåten
Ett objekt definierar helt enkelt en viss förekomst av en sak som tillhör den klassen.
Så vi kunde ha ett objekt som heter WhiteQueen. Det objektet skulle ha definitioner för alla fyra attributen (vit, lång, cylindrisk med krenelleringar, vilket antal utrymmen som helst). Det kan också ha metoder eller funktioner.
Vad gör detta så mycket bättre än procedurinriktningen?
Kort sagt, objektorienterade programmeringsspråk (som Java) gör det enklare att organisera data och kod på ett sätt som är mer mångsidigt för större projekt.
För att diskutera det i lite mer detalj, talar vi om de fyra grunderna i objektorienterad programmering.
Objektorienterad programmering: Abstraktion
Bara för att du vill använda något betyder inte att du behöver veta hur det fungerar. En espressomaskin är till exempel komplex. Men du behöver inte veta hur det fungerar. Du behöver bara veta att när du slår "På" kommer du att få espresso.
Detsamma gäller för objekt i objektorienterad programmering. I vårt schackexempel kan vi ha en move () -metod. Den metoden kan kräva mycket data och andra metoder. Det kan behöva initialposition och slutpositionsvariabler. Det kan använda en annan metod för att bestämma om det är fångat en bit.
Men du behöver inte veta det. Allt du behöver veta är att när du berättar att biten ska röra sig rör den sig. Det är abstraktion.
Objektorienterad programmering: Encapsulation
Encapsulation är ett av de sätt som objektorienterad programmering skapar abstraktion. Varje objekt är en samling av data som behandlas som en enda enhet. Och inom dessa objekt är data-både variabler och metoder.
Variablerna inom ett objekt hålls generellt privata, vilket innebär att andra objekt och metoder inte kan komma åt dem. Objekt kan endast påverkas genom att använda deras metoder.
Ett biskopobjekt kan innehålla flera bitar av information. Det kan till exempel ha en variabel som heter "position". Den variabeln är nödvändig för att använda metoden move (). Och det har naturligtvis en färg.
Genom att göra positionsvariabeln privat och flytten () -metoden offentlig, skyddar en programmerare flyttningsvariabeln från att påverkas av något annat. Och om färgen är en privat variabel, finns det inget sätt för ett annat objekt att ändra det om det inte finns en metod som tillåter ändringen. (Som du förmodligen inte skulle ha, eftersom färgen på stycket borde vara konstant.)
Dessa variabler och metoder hålls inom biskopobjektet. Eftersom de är inkapslade kan en programmerare göra en förändring av objektets struktur eller innehåll utan att oroa sig för det offentliga gränssnittet.
Objektorienterad programmering: arv
Förutom klasser har objektorienterade programmeringsspråk också underklasser. Dessa innehåller alla attribut från föräldraklassen, men de kan också innehålla andra attribut.
I vårt schackspel behöver bänkstyckena en metod som kan göra dem till andra bitar om de gör det till slutet av brädet. Vi kallar det transformPiece () -metoden.
Inte varje bit behöver transformPiece () -metoden. Så vi skulle inte vilja sätta det i Piece-klassen. Istället kan vi skapa en underklass som heter Pawn. Eftersom det är en underklass, ärver det alla attribut från Piece. Så en förekomst av underklassen Pawn innehåller en färg, höjd, form och rörelse tillåtet.
Men det innehåller också metoden transformPiece (). Nu behöver vi aldrig oroa oss för att oavsiktligt använda den funktionen på ett rök. Här är en teknisk förklaring:
Att skapa underklasser sparar också mycket tid. Istället för att skapa nya klasser för allt kan programmerare skapa en basklass och sedan utvidga den till nya underklasser när de behöver. (Det är dock värt att notera att överförlitlighet på arv är dåligt. 10 Grundläggande programmeringsprinciper Varje programmerare måste följa 10 grundläggande programmeringsprinciper Varje programmerare måste följa Skriv alltid kod som kan upprätthållas av alla som kanske slutar arbeta med din programvara. slutet, här är flera programmeringsprinciper som hjälper dig att städa upp din handling. Läs mer.)
Objektorienterad programmering: Polymorfism
Polymorfism är ett resultat av arv. Full förståelse för polymorfismen tar viss programmeringskunskap, så vi ska bara hålla fast vid grunderna här. Kort sagt tillåter polymorfism programmerare att använda metoder med samma namn men med olika föremål .
Till exempel kan vår Piece-klass ha en move () -metod som flyttar ett stycke ett utrymme i vilken riktning som helst. Det fungerar för kungstycket, men inte för något annat. För att åtgärda detta problem kan vi definiera nya move () -metoden i underklassen Rook som definierar rörelsen som ett obegränsat antal mellanslag framåt, bakåt, vänster eller höger.
Nu när en programmerare påbereder sig move () -metoden och använder ett stycke som argumentet, kommer programmet att veta exakt hur biten ska röra sig. Detta sparar lite tid över att försöka lista ut vilka av många olika metoder du ska använda.
Objektorienterad programmering i ett nötskal
Om ditt huvud spinner lite efter de sista fyra definitionerna, oroa dig inte för mycket. Här är de viktigaste sakerna du behöver komma ihåg:
- Objektorienterad programmering samlar information i enskilda enheter som heter objekt.
- Varje objekt är en enda förekomst av en klass.
- Abstraktion döljer ett objekts inre verkningar när det inte är nödvändigt att se dem.
- Inkapsling lagrar relaterade variabler och metoder inom objekt och skyddar dem.
- Arv tillåter underklasser att använda attribut från föräldraklasser.
- Polymorfism tillåter objekt och metoder att hantera flera olika situationer med ett enda gränssnitt.
Om du kan komma ihåg de punkterna har du ett bra handhav på vilken objektorienterad programmering som helst. De fyra grunderna i objektorienterad programmering, som jag nämnde, kan vara lite svårt att ta hand om. Men när du börjar programmera blir de tydligare.
Kom ihåg att vi bara har diskuterat generaliteter i den här artikeln. Olika objektorienterade språk kommer att ha egna egenskaper och sätt att få saker att hända. När du väl valt rätt språk för dig Letar du efter de bästa programmeringsspråk? Börja här! Letar du efter de bästa programmeringsspråk? Börja här! Oavsett om du är helt ny på programmeringsspråk eller vill hoppa till en ny typ av programmering, är ett av de viktigaste frågorna att fråga: "Vilket programmeringsspråk är rätt för mig?" Läs mer, du börjar lära dig hur det sätter OOP-principer i praktiken.