Mål-C | |
Dato for første version | 1983 |
---|---|
Paradigme | objektorienteret , reflekterende |
Forfatter | Brad Cox og Tom Love |
Sidste version | 2.0 |
Indtastning | dynamisk , statisk , svag |
Påvirket af | C , Smalltalk |
Påvirket | TOM , Java , Swift |
Implementeringer | OpenStep , kakao , GNUstep |
Operativ system | UNIX, macOS |
Licens | Ledig |
Internet side | developer.apple.com/library/mac/navigation |
Filudvidelse | h, m, mm og C |
Objective-C er et reflekterende objektorienteret programmeringssprog . Dette er en udvidelse af ANSI C , såsom C ++ , men adskiller sig fra den ved dens dynamiske meddelelseslevering, hendes skrivning svag eller stærk, dens dynamiske typning og dynamiske indlæsning. I modsætning til C ++ tillader det ikke flere arv, men der er måder at kombinere fordelene ved C ++ og Objective-C på.
I dag bruges det hovedsageligt til driften af systemerne Apple : macOS og dets afledte iOS baseret på klassebiblioteket Cocoa, men der er også et klassebibliotek gratis GNUstep under GNU / Linux . Kakao og GNUstep er efterfølgerne til OpenStep API , der bruges i NeXTSTEP- operativsystemer (oprindeligt macOS) og dets gratis modstykke OPENSTEP .
I slutningen af 1970'erne blev C-sprogets spirende og hurtige popularitet opfundet tidligere i årtiet af Dennis Ritchie hos AT&T Bell Laboratories . Denne popularitet er drevet af en endnu større popularitet, nemlig UNIX- operativsystemet , der udelukkende er skrevet i C. Ved begyndelsen af 1970- 1980'erne er den nuværende softwareudviklingspraksis baseret på struktureret programmering . Implementeringen af struktureret programmering bruges til at opdele store programmer i mindre dele, af mindre kompleksitet og derfor lettere at programmere. Da problemløsning imidlertid bliver større og mere kompliceret, bliver struktureret programmering mindre nyttigt, da flere og flere procedurer skal skrives, hvilket fører til komplekse kontrolstrukturer og til lav genbrug af kode. På det tidspunkt så mange objektorienterede som en mulig løsning på dette problem.
Flere mennesker opretter derefter udvidelser til C for at tilføje det objektorienterede. Dette er tilfældet med Bjarne Stroustrup, der udviklede C ++ i 1979 i de samme laboratorier som dem, hvor Dennis Ritchies C blev født. Fødslen af Objective-C sker i samme sammenhæng. Brad Cox udviklede det i begyndelsen af 1980'erne. Sprog præsenteres som et overlay af C for at tillade oprettelse og manipulation af objekter ved at tage visse begreber op i Smalltalk-80- sproget .
Den kompilerede kode Objective-C kører i et eksekveringsmiljø ( runtime ) Light skrevet i C, hvilket tilføjer lidt til størrelsen på applikationen.
Det første operativsystem, der anvendte Objective-C, var NeXTSTEP (senere omdøbt til OPENSTEP ) fra NeXT- firmaet , der blev grundlagt af Steve Jobs .
Objective-C bruges i vid udstrækning på Macintosh , især til Cocoa API'erne i Mac OS X og for nylig til udvikling af iPhone- applikationer , Apple- smarttelefonen .
Der er også en gratis implementering af OpenStep- rammen , kaldet GNUstep , som er på tværs af platforme og fungerer især under GNU / Linux , Microsoft Windows og de fleste UNIX'er .
I Objective-C er alt et objekt ligesom i Smalltalk, hvorfra det er stærkt inspireret. Det er derfor et stærkt objektorienteret sprog. Enkel arv fremkalder et arvetræ med en rod: NSObject-klassen i tilfælde af kakao / NeXTSTEP eller objekt i tilfælde af GNUstep. Det er fra det, at alle klasser vil blive afledt. For eksempel stammer et objekt fra klasse NSString eller NSArray fra klasse NSObject (indirekte). NSMutableArray stammer fra NSArray-klassen, som derfor er dens superklasse. Ifølge nogle af dens brugere er det her, hvor kraften i Objective-C vises: i modsætning til C ++ eller andre sprog, der ikke inkluderer det, gør svag skrivning det lettere at manipulere data.
Faktisk i stedet for at skulle håndtere mange typer, er der kun få, for eksempel i tilfælde af kakao:
Derudover er alle klasseinstansvariabler beskyttet som standard, og klassemetoder er offentlige. Det giver derfor programmører mulighed for at have mere stringent programmering, mens de er hurtigere og respekterer begreberne OOP.
Et andet aspekt er KVC-designmodellen (Key-Value Coding), også inspireret af Smalltalk , som definerer adgang til en variabel ved navn. For eksempel i tilfælde af en Person-klasse med en Firstname-instansvariabel af typen NSString:
@interface Personne : NSObject { // variables d'instance NSString *prenom; } // methodes @property (copy) NSString *prenom; @endObjective-C tillader hurtig oprettelse af et NSString-objekt ved hjælp af "@" på samme måde som C med strenge "". NSStrings er kodet i unicode , dvs. i modsætning til C er tegn ikke begrænset til ASCII-koder. Vi kan derfor indstille værdien af efternavnsvariablen for en forekomst af en person som denne:
// On crée un pointeur vers un objet de la classe Personne, qu'on a d'abord alloué dans l'espace mémoire, et initialisé. Personne *exemple = [[Personne alloc] init]; //On envoie un message au pointeur exemple qui va le rediriger vers l'objet vers lequel il pointe, pour fixer la valeur de la clef surname. [exemple setValue:@"Paul" forKey:@"prenom"];I mål-C er ethvert metodekald fra en klasse en meddelelse, der overføres. Hvis du vil hente en besked på et objekt, skal du placere objektet i en firkantet parentes og derefter beskeden. Du kan kæde opkald meget let. Så i eksemplet returnerer metode et objekt, og på dette objekt kalder vi method2 .
// passage de message [objet methode:argument]; // chaînage de message [[objet methode:argument] methode2:argument2];
Syntaks af metoderne, lidt forvirrende ved første øjekast, er designet til at gøre det mere som menneskeligt sprog. Hvert argument er adskilt af ":" samt en kommentar.
Hver objektforekomst har en isa-markør, som er en markør til et metaklasseobjekt, der beskriver de metoder, der er tilgængelige for objektet. En klasse med en forælder, metaklassen repræsenterer et træ med hele klassens hierarki i øjeblikket i hukommelsen. Så når vi prøver at sende en besked, henter Objective-C-miljøet objektets isa-markør og krydser derefter metaklassetræet for at få markøren til den kaldte metode. Denne mekanisme er naturligvis dyr, men en cache-enhed under det første opkald gør den meget effektiv.
Objective-C ++ er en front-end for GCC , som kompilerer en kombination af C ++ og Objective-C- kode . Objective-C ++ i tillæg til C ++ udvidelser, at Mål-C-sprog tilføjer C .