Introductie in het ontwikkelen van iPhone apps

1 Reactie

Misschien had je in mijn eerste blog post al gelezen dat ik als 15 jarig jongetje al een beetje geobsedeerd was met het apparaat, de iPhone. Ik heb ondertussen het ontwikkelen van de programma’s er voor een beetje onder de knie. Hieronder staan een aantal links naar sites die ik gebruikt heb voor het leren ontwikkelen. Mijn uitwerkingen staan er in sommige gevallen ook bij. En natuurlijk een korte introductie.

cocoa |ˈkōkō|
zelfstandig naamwoord
een object-georiënteerde API, geschreven in Objective-C.

Cocoa Touch is de programmer omgeving die gebruikt word om iPhone applicaties mee te ontwikkelen.
Code word geschreven in Objectiv-C. Dit is een specifieke schrijfwijze van code. Veel programmeurs die Objective-C code voor het eerst zien schrikken een beetje omdat er in de syntax veel blokhaakjes voorkomen.

NSObject * nieuwObject = [[NSObject alloc] initWithObject:[self delegate]];

Zoals je zien komen er in een toewijzing van een nieuwe pointer een aantal blokhaakjes voor. Bij deze toewijzing word een stukje werkgeheugen vrijgemaakt om er vervolgens de waarde van het object delegate in te stoppen. En vervolgens wordt er een referentie gegeven naar dit stukje geheugen. Deze referentie noemen we een pointer.

Gericht op objecten
Als je aan het programmeren bent met Cocoa werk je vrijwel alleen maar met objecten. Dit word object-georienteerd programmeren genoemd. Objectiv-C is op C gebouwd en ondersteunt alle C code. Er kan dus ook procedure gericht worden geprogrammerd.
De term object is opzichzelf natuurlijk ietwat nietszeggend. En dat is een object in Cocoa eigenlijk ook. Je kan pas echt een object berijpen als je de blauwdruk van het object kent. De blauwdruk word een class genoemd.
Bij deze een voorbeeld van een class:

@interface Persoon : NSObject {
string voornaam;
string achternaam;
int leeftijd;
}
@end

In dit geval is de class naam Persoon. En het object persoon kan een voornaam, achternaam en leeftijd bevatten. Voornaam en achternaam zijn strings omdat er als waarde een stuk tekst toegewezen moet worden. Leeftijd is een interger omdat de er als waarde een geheel getal toegewezen moet worden.
Op dit moment kan er echter nog niets worden toegewezen worden. Hiervoor moeten zogenaamde methods aangemaakt worden. Methods lijken heel erg op functies in het procedure gericht programmeren.

@interface Persoon : NSObject {
string voornaam;
string achternaam;
int leeftijd;
}
@end

@implementation Persoon

-(void)setVoornaam:(string)aVoornaam andAchternaam:(string)aAchternaam {
voornaam = aVoornaam;
achternaam = aAchternaam;
}

-(BOOL)setLeeftijd:(int)aLeeftijd {
if(aLeeftijd < 0) { return NO; }
else if (aLeeftijd > 150) {
return NO;
}
else {
leeftijd = aLeeftijd;
return YES;
}
}

@end

Nu zijn er 2 functies aangemaakt. Met eentje kan de voor- en achternaam toegewezen worden. En met de andere kan dit zelfde gebeuren met de leeftijd. De eerste method stuurt geen resultaat terug, dit word aangegeven met void. Daarin tegen doet de tweede method dit wel. De tweede method stuurt namelijk een boolean terug. Een boolean is een variabele die een waarde kan aannemen van 1 of 0. Cocoa staat echter ook toe om YES en NO te gebruiken. In andere programmertalen is het gebruikelijk om TRUE en FALSE te gebruiken voor booleans.

De tweede method zal ook checken of de persoon geen negatieve leeftijd heeft of dat de persoon niet ouder is dan 150. Dit gebeurt met een if-else structuur. Als een conditie waar is zal de code tussen de accolades uitgevoerd worden. Dus in dit geval als iemand jonger is dan nul word de code tussen de accolades van de eerste if uitgevoerd. Als de conditie echter niet waar is dan zal door worden gegaan met de else if conditie. En als die weer niet waar is zal de code tussen de accolades achter else worden uitgevoerd.

Om nu een nieuwe persoon aan te maken zal de volgende code uitgevoerd moeten worden. Dit is waar de hoekhaakjes weer terug komen.

Persoon *thijs = [[Persoon alloc] init];
[thijs setVoornaam: @”Thijs” andAchternaam: @”Scheepers”];
[thijs setLeeftijd:18];

In de eerste regel code word het object thijs aangemaakt. En in de overige code word er informatie aan het object toegevoerd.

Hiërarchische verdeling van objecten
In het voorbeeld van het toewijzen van een class stond de volgende regel code:

@interface Persoon : NSObject {

In deze regel staat dat de class Persoon alle eigenschappen erft van de class NSObject. In dit geval is NSObject de super-class van Persoon. NSObject staat in Cocoa altijd boven aan de hiërarchie.
NSObject zorgt er bijvoorbeeld voor dat de alloc en init methods uitgevoerd kunnen worden op elk willekeurig object.
Hier volgt een voorbeeld dat het nut van een hierarchische verdeling zal laten zien. Wij maken een nieuwe class aan getiteld Nederlander.

@interface Nederlander : Persoon {
int burgerServiceNummer;
}
@end

Nu kan er nog steeds een voornaam, achternaam en leeftijd worden toegewezen aan een object met de class Nederlander. Maar een Nederlander heeft een burgerServiceNummer maar dat heeft een Persoon niet.

Stanford CS193p

In de lente van 2009 is op Stanford University in de VS college gegeven over het bouwen van iPhone apps. Het college werd begeleid door werknemers van Apple en gefilmd voor de hele wereld. Je kan de films zien op iTunes U. Les informatie is hier te vinden. Ik heb een aantal van deze opdrachten uitgewerkt.

OpenGL ES