Hvor fikk Object Oriented Programmering få navnet sitt?
Objekt orientert er ikke bare et tilfeldig buzzword du hører i programmeringssirkler. Det er en grunn bak navnet - men hva? Bli med meg da jeg undersøker noen av grunnleggende for programmeringskonsepter og forklarer hvorfor hvorfor objektorientert programmering driver teknologien bak noen moderne programvare og kontrasterer den til prosedyre- og logikkbasert programmering.
Historie Prosedyreprogrammering
Når datamaskiner ble oppfunnet, måtte de programmeres eksplisitt med enkle instruksjoner - og “programvare” var bare en samling av disse ekstremt enkle kommandoene spenet sammen som ville løpe i rekkefølge.
I utgangspunktet krever disse nødvendige maskinkoden - flytt dette “bit” fra dette minnet til denne plasseringen, og utfør en logisk “og” operasjon på den med denne biten, osv. - men snart nok ble disse abstraheres til et høyere nivå ved hjelp av BASIC.
Jeg mistenker at de fleste av dere har kommet over BASIC (Beginners All Purpose Symbolic Instruction Code) i skolen. Det er et perfekt eksempel på et prosessivt programmeringsspråk. Selv min første programmeringsforay brukte BASIC på en Amstrad CPC-64. Hver linje begynner med et linjenummer, etterfulgt av en enkel instruksjon i menneskelig lesbart språk.
Siden prosessoriske språk følger kommandoene etter hverandre, er det generelt enkelt for mennesker å følge med på hva som foregår i programmet. Det er imidlertid også vanskelig å gjøre noe utover en enkel læringsøvelse - noe som bringer oss videre til etableringen av objektorientert programmering.
Objekt orientert?
Med objektorientert programmering er ideen å gruppere sammen relaterte variabler og funksjonalitet til ett objekt, noe som representerer en slags kompleks datastruktur. Det objektet kan da gjenbrukes flere ganger, eller utvidet til å være noe enda mer komplekst.
For eksempel kan et spill ha et spillerobjekt. Hver spillerobjekt i spillet representerer en enkelt, unik sannspillingsspiller i vårt imaginære multiplayer online spill. Hvert spillerobjekt har et kallenavn, en gjeldende plassering, en beholdning og en bevegelseshastighet. Selv om hver spiller er unik, vil vi fortsatt at de skal dele samme grunnnivåfunksjonalitet. Hver spiller kan ha en bevege seg funksjon, som får spilleren til å bevege seg fremover X antall kvadrater. Hver spiller kan ha en annen flyttehastighet, men når vi forteller spilleren å bevege seg i en kommando, vil den vite hvordan man skal reagere i henhold til sin egen internettmekanikk.
Hvorfor er dette nyttig? Ta et mer virkelige eksempel - fordi moderne grafiske brukergrensesnitt ville være umulig uten objekter - alle operativsystemer gir et Window-objekt. Det er derfor lett å få en ny “vindu” komplett med lukkede og fullskjerm knapper, og evnen til å bli flyttet rundt - uten å måtte programmere det selv. Alt du trenger å gjøre er å si lag et vindu.
Faktisk består moderne programvare av tusenvis av tusen objekter - ikke bare vinduer, men også knapper og skjemafelt, og varslingsbokser (som selv er en spesiell type vinduobjekt) - og det er bare slik de er ordnet og logikken av samspillet mellom dem som gjør denne programvaren forskjellig fra andre. Det betyr at programmører og programvareutviklere er fri til å konsentrere seg om å lage kjernemekanikken i programmet uten å måtte oppfinne hjulet hver gang.
En annen fordel å objektorientert design er at funksjonaliteten er skilt ut og usynlig for hverandre. Så når spilleren trykker fremover-tasten i spillet vårt, gjør det det samtaler de flytte funksjon i spillerobjekt. Hvis vi gjør en liten forandring til hvordan denne bevegelsen utføres nøyaktig innenfor spillerobjektet - som å hoppe i stedet for å gå - så trenger vi ikke å justere tastaturlytteren. Det ringer fortsatt “bevege seg” uavhengig av hva som skjer internt i spillerobjektet - slik at vi kan endre funksjonalitet uten å bryte alt annet.
Det samme gjelder i operativsystemer - hvis brukeren plutselig bestemmer seg for å endre vinduets farge til rød, så trenger du ikke å oppdage det og gjør vinduet rødt også - det er alt innebygd i vinduobjektet.
Arv
Når vi har objekter, kan vi også utvide og arve dem for å produsere mer nyttige objekter med forskjellig oppførsel eller tilleggsfunksjonalitet. Du kan Oppdag hjulet - hvis du vil. I vårt spillereksempel kan vi kanskje lage en “superman” gjenstand. Superman er fortsatt en spiller, det samme som alle andre - han vil også ha et kallenavn, og ønsker å bli oppført på samme spillelederbrett - men i stedet for standardflytaksjonen som går spillerobjektet X-rom fremover, ønsker vi ham å fly i stedet - flytte 10 rutene om gangen over toppen av objekter i veien. Ved å utvide den grunnleggende spillerobjekt vi kan “arve” Alt dette nyttig funksjonalitet uten å måtte omskrive alt igjen - men vi kan fortsatt “overstyring” flyttefunksjonen med vår spesielle supermann flyr flytte!
Objektorientert programmering er en absolutt åpenbaring hvis du bare noen gang hadde opplevd prosedyreprogrammering, og jeg synes personlig det er synd at det ikke er en enkel type OOP-språk undervist i ungdomsskolen.
En siste ting: Logisk-baserte programmeringsspråk
Disse er av særlig interesse for meg, da de er generelt mest nyttige for alt relatert til kunstig intelligens. Logikkbaserte programmeringsspråk, for eksempel Prolog, bruker ikke kommandoer og instruksjoner i tradisjonell forstand. I stedet vil de løse et problem gitt et sett med regler og forhold.
Tenk på et middagsfest du er vert for familien din. Tanten din kan ikke sitte ved siden av onkelen din fordi de vil argumentere; du vil ikke ha to barn som sitter sammen fordi de blir små rascals; du vil absolutt ikke sitte mellom to barn. Det er det akkurat der - det er ditt Prolog-program skrevet. Nå bare gi den en liste over barn og voksne som kommer til festen, og det vil utgjøre en liste over mulige sitteplasser forslag!
Jeg håper du likte denne nybegynnernivå introduksjon til programmeringskonsepter. Jeg beklager at jeg ikke kunne gå inn i mer detalj og selvfølgelig er det en million ting jeg ikke har rørt på. Hvis du vil vite mer, gi meg beskjed i kommentarene. Kanskje vi kunne gjøre en serie med nybegynnereobjektorientert programmeringsopplæring for ulike språk hvis det er nok interesse? Pass på å sjekke ut våre programmeringsrelaterte arkiver også, med ulike verktøy og programmeringswebsteder.
Bildekreditt: ShutterStock
Utforsk mer om: Programmering.