Objective-C Ina Carine Aarvig 16.10.2011
Innhold 1 Objective-Cs historie 4 1.1 NeXT og Steve Jobs........................ 4 1.2 Apple................................ 4 2 Xcode 5 3 Objective-C 6 3.1 Objekter, klasser og metoder................... 6 3.1.1 Objekter.......................... 6 3.1.2 Klasser........................... 6 3.1.3 Metoder........................... 7 3.2 Arv, kategorier og interface.................... 7 3.2.1 Arv............................. 7 3.2.2 Kategorier.......................... 7 3.2.3 Interface........................... 7 3.3 Model-View-Controller....................... 7 3.4 Minnehåndtering.......................... 8 4 Utprøvninger 9 4.1 Enkle tester............................. 9 4.2 Color Swapper........................... 9 4.3 TicTacToe.............................. 10 5 Avsluttning 11 5.1 Ressurser.............................. 11 Bibliografi 12 2
Innledning Bruken av smarttelefoner og nettbrett har vokst kraftig de siste årene, og dermed har det også blitt et bredt utvalg av applikasjoner. Spesielt nettbrettet har vokst mye etter at Apple kom ut med sin første ipad, og nå også ipad 2. I Apples App Store kan en finne et bredt utvalg av applikasjoner, og det finnes så mange som over 500 000 stykker. Alt fra for eksempel spill, musikk, skole og helse kan man finne applikasjoner om. Og det er nettopp i disse applikasjonene hvor Objective-C brukes for å kunne utvikle dem. 3
Objective-Cs historie Objective-C, ble først laget tidlig på 1980- tallet av Brad Cox og Tom Love, og har hatt en lang historie [2]. Programmeringsspråket stammer fra C, som er et ikke objektorientert språk. Et objektorientert språk går ut på å bruke/lage objekter som inneholder klart definert kode som kan fungere selvstendig, men også i større komplekse systemer hvor det er flere objekter som snakker sammen. Smaltalk var et av de første objektorientere programmeringsspråkene, og det er dette språket Objective-C bruker elementer fra. Objective-C er et lite men kraftfullt tillegg til C.[1] 1.1 NeXT og Steve Jobs I slutten av 1980- tallet fikk NeXT og Steve Jobs rettighetene til Objective-C, hvor de fortsatte å utvide språket til å være ett av hovedspråkene i operativsystemet deres kalt NeXTStep [2]. Dette operativsystemet er det som har lagt grunnlaget for Apples Mac OS X, og dermed tatt med seg bruken av Objective- C videre. Senere har det også blitt tilpasset til et mobilt operativsystem kalt ios som i dag blir brukt på både iphone, ipad og ipod. [3] 1.2 Apple Steve Jobs var med på å grunnlegge Apple men ble etterhvert dyttet ut av selskapet. Etter at han forlot Apple startet han bedriften NeXT, som etterhvert utviklet operativsystemet NeXTStep. På 1990- tallet hadde Apple problemer med å utvikle et nytt operativsystem for å erstatte MacOS, som begynte å bli for utdatert. Apple slet også en del på markedet i denne perioden. Etter en del mislykkede forsøk, ble de nødt til å få tak i en bedrift som allerede hadde et operativsystem. Det var I 1997 hvor Apple fikk tak i NeXT og operativsystemet deres, og igjen så var Steve Jobs tilbake i Apple. [3] 4
Xcode En av de vanligste utviklingspakkene for Objective-C er Xcode. Dette er Apples egen pakke som inneholder alt en trenger for å sette i gang for å utvikle applikasjoner til både Mac OS X og ios. Noe av det den inneholder er en simulator som viser hvordan applikasjonene vil se ut og fungere, og en interface builder hvor man kan sette opp et grafiskgrensesnitt. Den nyeste versjonen av Xcode kan nå lastes ned gratis uten at man behøver å være medlem av Apples utvikler program. Men for å kunne teste ut sine applikasjoner på en ipad/iphone, er man nødt til å bli medlem. Dette koster rundt 570 kroner i året (99 dollar), hvor man i tillegg vil få muligheten til å legge ut sine applikasjoner på App Store. Figur 2.1: Dette bildet viser hvordan brukergrensesnittet til Xcode kan se ut. 5
Objective-C Objetive-C et objektorientert programmeringsspråk, som vil si at man bruker flere objekter som inneholder metoder og datastrukturer. Disse objektene kan opptre selvstendig eller være del av et større og kompleks system. For å kommunisere med andre bruker de noe som kalles for metoder. Disse kan endre eller utlevere data om objektet etter hva man ønsker å gjøre. Det som definerer hvordan et objekt skal se ut er det som kalles for klasser. Klassene beskriver hvordan objektet skal oppføre seg og hvilke egenskaper de skal ha. 3.1 Objekter, klasser og metoder 3.1.1 Objekter Et objekt inneholder strukturert data (instans variabler) og metoder som kan bruke eller endre objektets data. Et objekt kan sees på som en fullstendig og selvstendig programmeringsenhet. Den inneholder alle de delene den trenger for å være hel og er ikke avhengig av andre. For at andre skal få innformasjon om et objekt, må det være en metode som gir denne innformasjonen. [1] Feks - Et rektangel objekt vil ha en metode som sier noe om størrelsen. Et objekt har bare tilgang til sine egne metoder og kan ikke bruke metodene til andre objekter. Det gjemmer sine instans variabler og metoder i seg selv, akkurat som en funksjon som gjemmer sine lokale variabler fra resten av programmet. [1] 3.1.2 Klasser En klasse er en arbeidstegning for et objekt. Den forteller hva slags egenskaper og hvordan det skal oppføre seg. Endrer man på klassen vil alle dens instanser av objekter endre seg. Endrer man derimot på en av instansene, vil ikke dette ha noen effekt på de andre objektene. I Objective-C består en klasse av to filer, en header fil (.h) og en main fil (.m). Header fila er den som definerer og setter egenskapene på de metodene og variablene som skal implementeres i main fila. Det er også i denne filen hvor man bestemmer om klassen skal arve eller være en kategori til en annen klasse. 6
3.1.3 Metoder Metoder er det som blir brukt for å kommunisere i mellom flere objekter, og det å endre et objekts data eller å hente det ut. Det å sende en beskjed til et objekt, skrives ofte slik [mottaker beskjed]. Her er mottakeren det objektet som skal få beskjed om å gjøre noe, altså utføre en metode som det blir kalt på (beskjeden). Når man skal kalle på en metode som har flere parametere skrives det ofte slik: [mittobjekt leggsammentallet:4 medtallet:5]. Det er også mulig at et parameter kan ta imot flere parametere. Ved å gjøre dette skiller man de med et komma. Disse parameterne vil ikke være en del av navnet på metoden, og det er heller ikke nødvendig å sende inn argumenter for disse utenom det første. De er valgfrie å ha med. Videre kan man også sende inn ett nytt metode kall som et argument for et parameter, et eksempel på dette er: [mittobjekt settfargentil: [mittandresobjekt farge]] Det er mulig for variabler og metoder å ha et likt navn. [1] 3.2 Arv, kategorier og interface 3.2.1 Arv Klasser kan arve fra andre klasser, slik at de får deres egenskaper og metoder. En klasse kan bare arve fra en annen klasse, men en klasse kan ha flere forskjellige klasser som arver fra den. Klassen som arver i fra en annen klasse kalles for underklasse, mens den det arves i fra kalles for en superklasse/foreldreklasse. Arv kan sees på som strukturer eller hierarkier av klasser som deler noen egenskaper. Måten dette skrives på i Objective-C er følgende: @interface TicTacToe : NS- Object. Det som skjer her er at klassen TicTacToe skal arve fra en annen klasse som heter NSObject. På denne måten vil TicTacToe klassen få alle egenskapene og metodene til NSObject. Men det betyr ikke at TicTacToe klassen ikke kan endre på metodene eller egenskapene den arver. En underklasse kan legge til sine egne metoder, men også endre på de den arver. 3.2.2 Kategorier 3.2.3 Interface Et interface sier noe om hvordan det brukeren ser skal se ut og inneholde. Det kan implementeres av flere klasser, men en klasse kan bare ha et interface. Klassen som implementerer et interface må da også implementere de metodene interfacet inneholder. 3.3 Model-View-Controller Model-View-Controller (MVC) går ut på å separere et View fra en Modell, og hvor man bruker en Controller for å kommunisere mellom disse. Et View er det som består av de UI elementene som skal vises og har en fil endelse på.xib. Modellen er den som inneholder de dataene og den innformasjonen som skal brukes. Noen eksempler på dette kan for eksempel være en database, en klasse eller en strukturert XML fil. Controlleren er en klasse som håndterer 7
hvordan et View og en Model skal snakke sammen, og har dermed jobben med å oppdatere modellen og viewet. Når man opperetter en controller klasse er det vanlig å ha med ordet ViewController som en del av klassenavnet. 3.4 Minnehåndtering I ios versjonene som er tidligere enn versjon 5, må man administrere minnet selv da det ikke finnes noen garbage collection. Det som er vanlig å gjøre er at hver gang man kaller metoden alloc på et objekt, må man også kalle på metoden release. Metoden alloc ber om å få frigjort nok minne til oppretting av objektet det kalles på. Release metoden fungerer da på motsatt måte, at den fjerner objektet fra minnet slik at det ikke skal skje noen minnelekkasjer. 8
Utprøvninger Dette kapittelet tar for seg de testene som har blitt gjort underveis i fordypningen i Objective-C. Isteden for at all kode står her, ligger de i en mappe ved siden av som det er lenket til på hovedsiden. De neste underkapitlene inneholder beskrivelse på hva testene går ut på og hva det er som skjer, med forklaring av kodeeksempler. 4.1 Enkle tester Fleste av de enkle testene som ble gjort gikk ut på å plassere ut grensesnitt objekter grafisk, men også ved å bruke bare kode. Det var også forskjellige typer av Hello World programmet som er vanlig gjennomføre i de fleste programmeringsspråk. 4.2 Color Swapper Denne applikasjonen går ut på å koble seg opp mot Bonjour ved å bruke URL n til en Mac. Det den så gjør, ved hjelp av linken som inneholder en RGB kode, er å bytte farge i vinduet til en applikasjon som heter Kameleon. Det grafiske grensesnittet i Color Swapper er satt opp slik at den har et tekstfelt for å motta en URL, og tre knapper som hver har sin egen farge. Koden som er under viser noe av det som skjer når brukeren sender inn sin URL etter å trykke på en av knappene. NSURL *url = [[NSURL alloc] initwithstring:stringurl]; NSURLRequest *urlrequest = [[NSURLRequest alloc] initwithurl:url]; NSURLConnection *urlconnection = [[NSURLConnection alloc] initwithrequest:urlrequest delegate:self startimmediately:yes]; Det som skjer her, er at det først blir opprettet et URL med en tekststreng. Tekststrengen er den som brukeren skrev inn. Deretter blir det opprettet et URLRequest objekt med URL objektet, og så til slutt en URLConnection med forespørselobjektet. Det er URLConnection objektet som blir brukt videre for å sette opp tilkoblingen som sender forespørselen om å endre farge i Kameleon applikasjonen. Denne Color Swapper applikasjonen er enkel men ga en god trening på det å bruke en URL og sette opp en forbindelse. 9
4.3 TicTacToe Denne applikasjonen ble gjort ved å følge et av tutorialene til Wibit.net, og er rett å slett en enkel versjon av tre på rad spillet. Den går ut på at det er to spillere som spiller på den samme iphonen, eller at en spiller kan spille mot en kunstig spiller. Figur 4.1: Dette bildet viser hvordan TicTacToe appen ser ut, og hvordan simulatoren fungerer. Det første som ble gjort var å opprette den klassen som tar for seg reglene og hvordan brettet skal fungere i spillet. Eksempel på en kode bit her, er hvordan man finner ut av hvem sin tur det er. - (char) whoseturn { if(_movecount % 2) { return O ; } return X ; } Det som skjer her er at vi har en metode som heter whoseturn, som skal returnere en karakter (char). Karakteren vil representere hvilken spiller det er. X er for den spilleren som starter og O er spiller nummer to. Det metoden gjør er å kjøre en if-test på om variabelen _movecount blir et oddetall når man tar modulus to. Er den det vil det være spiller to sin tur og O returneres. Hvis det er partall er det X som returneres. 10
Avsluttning Det å ha en forståelse av objektorientert programmering fra før av har hjulpet veldig med å forstå Objective-C. Men likevel har det vært vanskelig, da det er noe annerledes enn for eksempel Java. Det som har vært vanskelig er hvordan syntaksen i språket er, men også det å vite hva som er tilgjengelig av metoder og objekter. Og selvsagt, er det å måtte håndtere minnet selv en av de største utfordringene. Men det er noe som er viktig å kunne selv om det nå i ios 5 finnes en enklere måte å gjøre dette på. Forståelsen for Objective-C har helt klart blitt bedre, men det er likevel mye som gjenstår å lære seg. I denne fordypningen ble det sett på det grunnleggende, og ikke så veldig dypt inn på hvert enkelt tema. 5.1 Ressurser Her er de ressursene som ble brukt underveis for å lære Objective-C. Den ressursen som har vært veldig lærerik er et tutorial som består av flere videoer som tar for seg det meste innenfor Objective-C. Denne siden heter Wibit.net og her er det en link rett til Wibit.nets Objective-C tutorial En annen side som har hjulpet litt, men ikke like mye som forrige, er en blogg som inneholder mange tutorials for nybegynnere og de med litt mer erfaring. Denne siden er ikke like oppdatert på de siste versjonene av Objective-C, men har likevel vært nyttig. Icecodeblog.com tutorial 11
Bibliografi [1] Apple Inc. The objective-c programming language, 2011. URL http://developer.apple.com/library/mac/#documentation/cocoa/ Conceptual/ObjectiveC/Introduction/introObjectiveC.html. [2] Apple Inc. Object-oriented programming with objective-c, 2011. URL https://developer.apple.com/library/ios/#documentation/cocoa/ Conceptual/OOP_ObjC/Introduction/Introduction.html. [3] Neil Smyth. The history of objective-c, 2011. URL http://www. techotopia.com/index.php/the_history_of_objective-c. 12