Mål-C

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 .

Historisk

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 .

Sprogbeskrivelse

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; @end

Objective-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"];

Beskeder

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.

// déclaration d'une méthode - (void)mangeAvec:(NSString*)name etParleDe:(NSString*)subject; // exemple d'appel de la méthode sur un objet [Paul mangeAvec:@"Pauline" etParleDe:theSubject];


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.

// définition du type id qui contient le pointeur isa typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id;

Sprogvarianter

Objective-C ++

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 .

Noter og referencer

  1. “  https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html  ” (Adgang til 2. september 2019 )
  2. (i) James Duncan Davidson og Apple Computer Learning Kakao med Objective-C , O'Reilly,2002, 382  s. ( ISBN  978-0-596-00301-2 , læs online ) , s.  1
  3. James Duncan Davidson, op. cit.

Se også

Relaterede artikler

eksterne links

Bibliografi

  • Gaël Durand og Abdelhalim Rafrafi, Objective-C Opret dine iPhone- og iPad-applikationer (Mac 0S, Linux, Windows) , Saint-Herblain, ENI, coll.  "Epsilon / teknisk IT",2011, 578  s. ( ISBN  978-2-7460-6064-7 )
  • Andrew M. Duncan ( oversat  fra engelsk af Guillaume Merck), Objective-C , Paris, O'reilly, coll.  "Præcis og kortfattet / Grundlæggende sprog",2003, 135  s. ( ISBN  2-84177-257-8 )
  • (da) Objective-C programmeringssprog , Cupertino, Apple,19. oktober 2009, 137  s. ( læs online )
  • (en) Brad J. Cox og Andrew J. Novobilski, objektorienteret programmering, en evolutionær tilgang , læsning, masse, Addison-Wesley ,1991, 2 nd  ed. , 270  s. ( ISBN  978-0-201-54834-1 , OCLC  22767291 )
  • (da) James Duncan Davidson & Apple Computer, Learning Cocoa with Objective-C , Sebastopol, Calif., O'reilly,2002, 2 nd  ed. , 382  s. ( ISBN  978-0-596-00301-2 , OCLC  50762798 , læs online )
  • (en) Stephen G. Kochan, Programmering i Objective-C , Sams Publishing,3. december 2003, 6. th  ed. , 576  s. ( ISBN  978-0-321-96760-2 )
  • (en) Stephen G. Kochan, Programmering i Objective-C 2.0 , Upper Saddle River, NJ, Addison Wesley Professional, koll.  "Udviklerens bibliotek",2003( Repr.  2004), 2 th  ed. , 576  s. ( ISBN  978-0-672-32586-1 og 9780321647719 , OCLC  276930376 )