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 og interface........................... 7 3.2.1 Arv............................. 7 3.2.2 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 Anvendelsen av smarttelefoner og nettbrett har vokst kraftig de siste årene. Spesielt nettbrettet har vokst mye etter at Apple annonserte sin ipad. På grunn av den kraftige veksten tilbys det også et bredt utvalg applikasjoner. Apples App Store er verdens største samling med mobilapplikasjoner, hvor det finnes over 500 000 stykker. Det finnes applikasjoner for hva som helst, slik som musikk, video, spill, helse, utdanning og mer. Programmeringsspråket som blir anvendt for å utvikle applikasjonene er Objective-C. 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.[1] 1.1 NeXT og Steve Jobs I slutten av 1980- tallet kjøpte NeXT og Steve Jobs rettighetene til Objective- C, og fortsatte å utvide språket til å bli ett av hovedspråkene i operativsystemet NeXTStep [2]. Dette operativsystemet ble lagt til grunn 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 anvendt på både iphone, ipad og ipod. [3] 1.2 Apple Steve Jobs var en av grunnleggerne av Apple men ble etterhvert dyttet ut av selskapet. Etter Apple, startet han bedriften NeXT, som utviklet operativsystemet NeXTStep. På 1990- tallet hadde Apple problemer med å utvikle et nytt operativsystem for å erstatte MacOS, som begynte å bli utdatert. Etter en del mislykkede forsøk, var de nødt til å komme fram til en løsning. Det var I 1997 hvor Apple kjøpte opp NeXT og operativsystemet deres, og som førte til at Steve Jobs kom tilbake til Apple. [3] 4
Xcode Xcode er en utviklingspakke for Objective-C. Den er utviklet av Apple og inneholder alt en trenger for å utvikle applikasjoner til både Mac OS X og ios. Den inneholder en simulator som viser hvordan applikasjonene vil fungere og se ut, og en interface builder for å sette opp et brukergrensesnitt grafisk. Den nyeste versjonen av Xcode kan lastes ned gratis uten at man behøver å være medlem av Apples utvikler program. For å kunne teste ut applikasjonene på en ipad/iphone, kreves det derimot et medlemsskap. Utviklingsprogrammet koster 99 dollar i året, 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 objekter 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 et objekt 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 eller hente ut et objekts data. Det å sende en beskjed til et objekt, skrives ofte slik [mottaker beskjed]. Mottakeren er 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. For å gjøre dette separerer man de med et komma. Parameterne vil ikke være en del av navnet på metoden, og det er heller ikke nødvendig å sende inn argumenter for utenom det første. De er valgfrie å ha med. Videre kan man også sende inn ett nytt metode kall som argument for et parameter. Et eksempel på dette er: [mittobjekt settfargentil: [mittandresobjekt farge]]. Variabler og metoder kan ha samme navn. [1] 3.2 Arv og interface 3.2.1 Arv Klasser kan arve fra andre klasser, slik at de får egenskapene og metodene fra klassen det arves fra. 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 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å en Modell kan for eksempel være en database, en klasse eller en strukturert XML fil. Controlleren er en klasse som håndterer hvordan et View og en Modell skal snakke sammen, og har dermed jobben med å oppdatere modellen og viewet. Når man oppretter en controller klasse er det vanlig å ha med ordet ViewController som en del av klassenavnet. 7
3.4 Minnehåndtering I ios versjonene som er før 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. Isteden for at all kode står her, ligger de i en mappe ved siden av som det er linket 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 versjoner 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 å ha trykket 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 det er 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