Ziel c

Ziel c
Datum der ersten Version 1983
Paradigma objektorientiert , reflektierend
Autor Brad Cox und Tom Love
Letzte Version 2.0
Tippen dynamisch , statisch , schwach
Beeinflusst von C , Smalltalk
Beeinflusst TOM , Java , Swift
Implementierungen OpenStep , Cocoa , GNUstep
Betriebssystem UNIX, macOS
Lizenz Kostenlos
Webseite developer.apple.com/library/mac/navigation
Dateierweiterung h, m, mm und C.

Objective-C ist eine reflektierende objektorientierte Programmiersprache . Dies ist eine Erweiterung von ANSI C , wieBeispiel C ++ , unterscheidetaber von ihm durch seine dynamische Nachrichtenübermittlung, ihre Eingabe schwach oder stark, seine dynamische Typisierung und dynamische Belastung. Im Gegensatz zu C ++ ist keine Mehrfachvererbung zulässig, es gibt jedoch Möglichkeiten, die Vorteile von C ++ und Objective-C zu kombinieren.

Heute wird es hauptsächlich für den Betrieb von Apple- Systemen verwendet  : macOS und sein abgeleitetes iOS basierend auf der Klassenbibliothek Cocoa, aber es gibt auch eine Klassenbibliothek ohne GNUstep unter GNU / Linux . Cocoa und GNUstep sind die Nachfolger der OpenStep- API , die in NeXTSTEP- Betriebssystemen (ursprünglich macOS) und ihrem kostenlosen Gegenstück OPENSTEP verwendet wird .

Historisch

Das Ende der 1970er Jahre war geprägt von der wachsenden und schnellen Popularität der C-Sprache, die Dennis Ritchie Anfang des Jahrzehnts bei AT & T Bell Laboratories erfunden hatte . Diese Popularität wird durch eine noch größere Popularität angetrieben, die des vollständig in C geschriebenen UNIX- Betriebssystems . Um die Wende der 1970er bis 1980er Jahre basiert die derzeitige Praxis der Softwareentwicklung auf strukturierter Programmierung . Die Implementierung der strukturierten Programmierung dient dazu, große Programme in kleinere Teile aufzuteilen, die weniger komplex und daher einfacher zu programmieren sind. Wenn die Problemlösung jedoch größer und komplizierter wird, wird die strukturierte Programmierung weniger nützlich, da immer mehr Prozeduren geschrieben werden müssen, was zu komplexen Kontrollstrukturen und zu einer geringen Wiederverwendung von Code führt. Zu dieser Zeit sahen viele objektorientiert als mögliche Lösung für dieses Problem.

Mehrere Personen erstellen dann Erweiterungen für C, um die objektorientierten hinzuzufügen. Dies ist der Fall von Bjarne Stroustrup , die C ++ in entwickelten 1979 , wie sie in den gleichen Laboratorien , in denen Dennis Ritchie C geboren wurde. Die Geburt von Objective-C erfolgt im selben Kontext. Brad Cox hat es in den frühen 1980er Jahren entwickelt. Die Sprache wird als Überlagerung von C dargestellt, um die Erstellung und Manipulation von Objekten zu ermöglichen, indem bestimmte Konzepte der Smalltalk-80- Sprache aufgegriffen werden .

Der kompilierte Code Objective-C wird in einer Ausführungsumgebung ( Laufzeit ) ausgeführt. Light ist in C geschrieben, was die Größe der Anwendung nur wenig erhöht.

Das erste Betriebssystem zu verwenden , Objective-C war Nextstep (später umbenannt in OPEN ), von den NeXT Unternehmen , gegründet von Steve Jobs .

Objective-C wird auf dem Macintosh häufig verwendet , insbesondere für die Cocoa- APIs von Mac OS X und in jüngerer Zeit für die Entwicklung von iPhone- Anwendungen , dem Apple- Smartphone .

Es gibt auch eine kostenlose Implementierung des OpenStep- Frameworks namens GNUstep , das plattformübergreifend ist und insbesondere unter GNU / Linux , Microsoft Windows und den meisten UNIXs funktioniert .

Sprachbeschreibung

In Objective-C ist alles ein Objekt wie in Smalltalk, von dem es stark inspiriert ist. Es ist daher eine stark objektorientierte Sprache. Einfache Vererbung induziert einen Vererbungsbaum mit einer Wurzel: die NSObject-Klasse im Fall von Cocoa / NeXTSTEP oder Object im Fall von GNUstep. Daraus werden alle Klassen abgeleitet. Beispielsweise leitet sich ein Objekt der Klasse NSString oder NSArray (indirekt) von der Klasse NSObject ab. NSMutableArray leitet sich von der NSArray-Klasse ab, die daher ihre Oberklasse ist. Nach Ansicht einiger Benutzer zeigt sich hier die Leistungsfähigkeit von Objective-C: Im Gegensatz zu C ++ oder anderen Sprachen, in denen es nicht enthalten ist, erleichtert eine schwache Eingabe die Bearbeitung von Daten.

Anstatt mit vielen Arten umgehen zu müssen, gibt es nur wenige, zum Beispiel im Fall von Kakao:

Darüber hinaus sind alle Klasseninstanzvariablen standardmäßig geschützt und Klassenmethoden sind öffentlich. Dies ermöglicht es Programmierern, strenger zu programmieren, schneller zu sein und die Konzepte von OOP zu respektieren.

Ein weiterer Aspekt ist das des KVC-Entwurfsmodells (Key-Value Coding), das ebenfalls von Smalltalk inspiriert wurde und den Zugriff auf eine Variable anhand des Namens definiert. Beispiel: Im Fall einer Person-Klasse mit einer Firstname-Instanzvariablen vom Typ NSString:

@interface Personne : NSObject { // variables d'instance NSString *prenom; } // methodes @property (copy) NSString *prenom; @end

Objective-C ermöglicht die schnelle Erstellung eines NSString-Objekts mit dem "@", genau wie C mit Zeichenfolgen "". NSStrings sind in Unicode codiert , dh im Gegensatz zu C sind Zeichen nicht auf ASCII-Codes beschränkt. Wir können daher den Wert der Nachnamenvariablen einer Instanz von Person wie folgt festlegen:

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

Mitteilungen

In Objective-C ist jeder Methodenaufruf einer Klasse eine Nachrichtenübergabe. Um eine Nachricht für ein Objekt aufzurufen, platzieren Sie das Objekt in einer eckigen Klammer und dann die Nachricht. Sie können Anrufe sehr einfach verketten. Im Beispiel gibt method ein Objekt zurück und für dieses Objekt rufen wir method2 auf .

// passage de message [objet methode:argument]; // chaînage de message [[objet methode:argument] methode2:argument2];


Die auf den ersten Blick etwas verwirrende Syntax der Methoden ähnelt eher der menschlichen Sprache. Jedes Argument wird durch ":" sowie einen Kommentar getrennt.

// 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];


Jede Objektinstanz verfügt über einen isa-Zeiger, der ein Zeiger auf ein Metaklassenobjekt ist, das die Methoden beschreibt, auf die das Objekt zugreifen kann. Bei einer Klasse mit einem übergeordneten Element repräsentiert die Metaklasse einen Baum mit der gesamten Hierarchie der derzeit im Speicher befindlichen Klassen. Wenn wir also versuchen, eine Nachricht zu übergeben, ruft die Objective-C-Umgebung den isa-Zeiger des Objekts ab und durchläuft dann den Metaklassenbaum, um den Zeiger der aufgerufenen Methode zu erhalten. Dieser Mechanismus ist offensichtlich teuer, aber ein Caching-Gerät beim ersten Aufruf macht ihn sehr effizient.

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

Sprachvarianten

Objective-C ++

Objective-C ++ ist ein Front-End für GCC , das eine Kombination aus C ++ und Objective-C- Code kompiliert . Objective-C ++ zusätzlich zu den C ++ - Erweiterungen, die die Objective-C-Sprache C hinzufügt .

Anmerkungen und Referenzen

  1. „  https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html  “ (Zugriff am 2. September 2019 )
  2. (in) James Duncan Davidson und Apple Computer Learning Cocoa mit Objective-C , O'reilly,2002382  p. ( ISBN  978-0-596-00301-2 , online lesen ) , p.  1
  3. James Duncan Davidson, op. cit.

Siehe auch

Zum Thema passende Artikel

Externe Links

Literaturverzeichnis

  • Gaël Durand und Abdelhalim Rafrafi, Objective-C Erstellen Sie Ihre iPhone- und iPad-Anwendungen (Mac 0S, Linux, Windows) , Saint-Herblain, ENI, coll.  "Epsilon / Technische IT",2011578  p. ( ISBN  978-2-7460-6064-7 )
  • Andrew M. Duncan ( übersetzt  aus dem Englischen von Guillaume Merck), Objective-C , Paris, O'reilly, Slg .  "Präzise & prägnant / Grundlagen der Sprache",2003135  p. ( ISBN  2-84177-257-8 )
  • (en) Die Programmiersprache Objective-C , Cupertino, Apple,19. Oktober 2009137  p. ( online lesen )
  • (en) Brad J. Cox und Andrew J. Novobilski, Objektorientierte Programmierung, Ein evolutionärer Ansatz , Lesen, Messe, Addison-Wesley ,1991, 2 nd  ed. 270  p. ( ISBN  978-0-201-54834-1 , OCLC  22767291 )
  • (de) James Duncan Davidson & Apple Computer, Kakao lernen mit Objective-C , Sebastopol, Kalifornien, O'reilly,2002, 2 nd  ed. 382  p. ( ISBN  978-0-596-00301-2 , OCLC  50762798 , online lesen )
  • (en) Stephen G. Kochan, Programmierung in Objective-C , Sams Publishing,3. Dezember 2003, 6 th  ed. 576  p. ( ISBN  978-0-321-96760-2 )
  • (de) Stephen G. Kochan, Programmierung in Objective-C 2.0 , Upper Saddle River, New Jersey, Addison Wesley Professional, Slg.  "Entwicklerbibliothek",2003( Repr.  2004), 2 th  ed. 576  p. ( ISBN  978-0-672-32586-1 und 9780321647719 , OCLC  276930376 )