Objective-C

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

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 Mac OS X 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.

Innehåll

Syntax

Interface och implementation

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 och implementationsdelen i en kodfil. Men de kan lika gärna vara i samma fil.

Interfacedelen fungerar så här:

@interface klass : superklass
{
    instansvariabel
    instansvariabel
}
+ klassmetod
+ klassmetod
- instansmetod
- instansmetod
@end

Implementationsdelen fungerar så här:

@implementation klass
+ klassmetod
{
    kod
}

- instansmetod
{
    kod
}
@end

Meddelanden och metoder

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 new];
[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 new];
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

Ett exempel på ett program som skriver ut texten "hello, World!".

/* Kmpilera med t ex: gcc hello.m -lobjc -o hello */

#include <stdio.h>
#include <objc/Object.h>

@interface MyClass : Object
{
}
- (void)world;
int main();
@end

@implementation MyClass
- (void)world
{
    printf("hello, World!\n");
}

int main()
{
    id hello = [MyClass new];
    [hello world];
    return 0;
}
@end

Se även

Externa länkar


Personliga verktyg