Objective-C
Objective-C är en objektorienterad påbyggnad på vanliga C. Det går därför att blanda C och Objective-C relativt obehindrat i samma källkod. Till skillnad mot till exempel C++ kan man skicka meddelanden på ett liknande sätt som i Smalltalk.
Idag används Objective-C framförallt i Apples Mac OS, iOS och GNUstep, två miljöer som baseras på OpenStep-standarden. Det är också det i huvudsak använda programmeringsspråket i NeXTSTEP, OPENSTEP och Cocoa-ramverket. Dessa bibliotek är inga krav för att skriva ett program i Objective-C, vilket visas i exempel nedan. Ett sådant program kan kompileras på alla operativsystem som har tillgång till gcc, som har en modul för Objective-C. Det gör man genom att vid kompilering tillföra flaggan -lobjc.
Syntax
[redigera | redigera wikitext]Interface och implementation
[redigera | redigera wikitext]En klass i Objective-C har en interface- och en implementation-del som är två skilda block av kod. Normalt placeras interface-delen i en header-fil, med filändelsen .h. Implementationsdelen i en kodfil, med filändelsen .m, men de kan lika gärna vara i samma fil och filändelsen kan variera.
Interfacedelen fungerar så här:
@interface klass : superklass {
// instansvariabler
}
+ klassMetod1;
+ (retur_typ)klassMetod2;
+ (retur_typ)klassMetod3:(param1_typ)param1_varNamn;
- (retur_typ)instansMetod1:(param1_typ)param1_varNamn:
(param2_typ)param2_varNamn;
- (retur_typ)instansMetod2MedParamter:
(param1_typ)param1_varNamn ochAnnanParameter:(param2_typ)param2_varNamn;
@end
Implementationsdelen fungerar så här:
@implementation klass
+ (retur_typ)klassMetod {
// implementation
}
- (retur_typ)instansMetod {
// implementation
}
@end
Meddelanden och metoder
[redigera | redigera wikitext]I Objective-C skickar man till skillnad mot Simula-modellen meddelanden till objekten. I Objective-C anropar man inte metoder, man skickar meddelanden. Ett objekt vid namn mottagare kan ha en metod som heter metodnamn, den anropas i så fall på följande sätt:
[mottagare metodnamn];
Ett meddelande kan skickas till ett objekt även om objektet inte kan svara på det. Det möjliggör bland annat för mottagaren att skicka meddelandet vidare i en kedja, t.ex. en länkad lista till dess det kommer fram till någon som kan svara på det.
Man kan även skicka med argument i ett meddelande. Om metoden metodnamn även kan ta emot ett objekt av typen id kan det se ut så här:
id enId = [[Klass alloc] init];
[mottagare metodnamn: enId];
Då skulle motsvarande metodsignatur kunna se ut så här:
- (void)metodnamn:(id)objekt;
Som man kan se i metodsignaturen skrivs objektets typ inom parenteser. Det inledande void betyder vad för typ av objekt metoden skickar tillbaka. I det här fallet är det void vilket betyder att inget returneras.
Man kan skicka flera argument. Lägger vi till ett argument av typen int kan det se ut så här:
id enId = [[Klass alloc] init];
int enInt = 7;
[mottagare metodnamn:enId medInt:enInt];
Då skulle motsvarande metodsignatur kunna se ut så här:
- (void)metodnamn:(id)objekt medInt:(int)enInt;
Exempel
[redigera | redigera wikitext]Ett exempel på ett program som skriver ut texten "hello, World!".
/* Kompilera med t ex: gcc hello.m -lobjc -o hello */
#import <stdio.h>
#import <objc/Object.h>
@interface MyClass : Object {
}
- (void)world;
@end
@implementation MyClass
- (void)world {
printf("hello, World!\n");
}
@end
int main() {
id hello = [[MyClass alloc] init];
[hello world];
return 0;
}
Se även
[redigera | redigera wikitext]Externa länkar
[redigera | redigera wikitext]
|