Automatisierung und Anwendungsentwicklung auf dem Mac – Einführungen PDF

Objective-C, auch kurz ObjC genannt, erweitert die Programmiersprache C um Sprachmittel automatisierung und Anwendungsentwicklung auf dem Mac – Einführungen PDF objektorientierten Programmierung. Die Syntax und Konzeption der objektorientierten Erweiterungen ist an Smalltalk angelehnt und von der gewöhnlichen prozeduralen C-Syntax strikt getrennt. Unter den im TIOBE-Index erfassten Sprachen konnte Objective-C in den Jahren 2011 und 2012 den größten Zuwachs verzeichnen und erhielt deshalb zweimal in Folge den Titel Sprache des Jahres.


Författare: Amin Negm-Awad.
Dieses Buch zeigt Ihnen, wie Sie mit Hilfe von Automator und AppleScript direkt von der Betriebssystemoberfläche aus Arbeitsabläufe entwickeln und Anwendungen steuern. Mit Xcode und REALbasic schnuppern Sie in die Programmierung hinein. Datenbankanwendungen entwickeln Sie mit Bento und FileMaker Pro.
Alle Kurse in diesem Buch setzen nicht mehr voraus, als Interesse und einen Mac. Wer bisher noch nicht wusste, was Programmierung bedeutet, kann mit diesem Buch erste Erfolge erzielen. Für die Vertiefung werden in jedem Kapitel Hinweise gegeben.
Wer nicht von heute auf morgen zum Programmierer mutieren will, bekommt trotzdem hilfreiche Informationen über das Automatisieren von Abläufen (Automator) und das problemlose Verwalten unterschiedlichster Informationen (Bento).
Über die Zielgruppe: Anwender, die sich die Arbeit auf dem Mac erleichtern wollen. Interessierte Anwender, die auch vor der Programmierung nicht gleich zurückschrecken und Umsteiger vom PC, die wissen möchten, mit welchen Werkzeugen man auf dem Mac programmiert.
Vorraussetzungen: Keine, abgesehen von einem Mac, der zur Verfügung stehen muss und Grundkenntnisse in der Bedienung desselben.

Dieser Versionssprung wurde begründet mit zahlreichen tiefgreifenden Verbesserungen, u. Einer der Leitgedanken beim Entwurf von Objective-C war es, sich der Flexibilität von Smalltalk anzunähern, jedoch auf das zu verzichten, was das Laufzeitverhalten verschlechtern könnte. Der offensichtlichste Verzicht gegenüber Smalltalk ist das Fehlen von Blöcken. Viele Konzepte sind gar nicht in der Sprachdefinition selbst festgelegt, sondern werden erst durch das Framework, also etwa Cocoa oder GNUStep, ermöglicht.

Insbesondere ist das gesamte Laufzeitsystem nicht im Compiler implementiert, sondern besteht aus C-Funktionen. Daher ist eine Darstellung ohne das entsprechende Laufzeitsystem kaum denkbar und nicht sinnvoll. Eine bemerkenswerte Eigenschaft von Objective-C ist das dynamische Binden von Methoden. Polymorphie ist im Gegensatz zu Sprachen, die auf Simula-67 basieren, nicht nur innerhalb einer Klassenhierarchie möglich, sondern auch darüber hinaus.

Es ist daher für den Absender nicht notwendig, die Klasse des Empfängers zu kennen. Vielmehr existiert ein Typ id, der für jedes Instanzobjekt jeder Klasse stehen kann. Analoges gilt für den Versand von Nachrichten an Klassenobjekte durch die Typisierung Class. Dabei sei aber erwähnt, dass zwar der Zeiger auf ein Instanzobjekt nicht typisiert ist, um spätes Binden zu ermöglichen.

In Objective-C gibt es eine strikte Trennung von Nachrichten und Methoden. Man spricht daher eigentlich in Objective-C gar nicht von Methodenaufrufen. Allein der Receiver entscheidet anhand der Nachricht, welche Methode ausgeführt wird. Dabei wird zunächst versucht, eine gleichnamige Methode zu finden. Hieraus ergibt sich die Möglichkeit, in einer IDE ganze Objektgraphen und Bedienungsoberflächen zu gestalten und zu verbinden, ohne dass die Eingabe von Sourcecode durch den Programmierer oder durch die IDE selbst erforderlich ist. Vorgehen des Dispatchers, sodass kein Aufsatz hierfür erforderlich ist und der Programmierer jederzeit die Kontrolle über die Ausführung jeder Methode behält. Kategorien sind Erweiterungen bereits bestehender Klassen um weitere Methoden.

Hervorzuheben ist hierbei, dass die in den Kategorien enthaltenen Methoden auch Instanzen erweitern, die von fremdem Code erzeugt werden. Dies gilt auch dann, wenn der fremde Code die Kategorie gar nicht kennt. Darüber hinaus verhält es sich so, dass diese Kategorie auch Instanzen hinzugefügt wird, die aus bestehendem Code stammen und daher die nachträglich hinzugefügte Kategorie gar nicht kennen. Wird also etwa in einem Framework, welches vor Jahren entwickelt wurde und dessen Sourcecode nicht vorliegt, eine Instanz von NSNumber erzeugt, so hat diese ebenfalls die vorgenannte Methode. Damit ist es möglich, vollständig fremden Klassen Methoden hinzuzufügen. Java mit Interfaces lassen sich in Objective-C Sätze von Methoden in Protokollen zusammenfassen. Zur Laufzeit wird zu jedem Objekt, mittels RTTI, ein Verweis auf seinen Typ, also die Klasse, mitgeführt.

Die Klasse enthält darüber hinaus eine Beschreibung aller Instanzvariablen und implementierten Methoden. Hieran entscheidet der Dispatcher im Receiver, welche Methode er der Nachricht zuordnet. Umgekehrt kann der Absender erfragen, welche Methoden implementiert sind. Klassenobjekte können jedoch keine Member-Variablen enthalten und sind stets Singletons. Bemerkenswert ist in diesem Zusammenhang die Eigenschaft, dass es für diese Klassenobjekte einen self-Zeiger gibt, der der Polymorphie zugänglich ist.

Die Syntax von Objective-C erweitert die C-Syntax um objektorientierte Elemente. Diese Syntaxerweiterungen lehnen sich jedoch nicht an die C-Syntax an, sondern an die der Programmiersprache Smalltalk. Um seine eigene Art von Objekten zu erstellen, muss man sie in einer Klasse beschreiben. Die Bezeichner folgen den C-Regeln, dürfen also insbesondere keine Umlaute enthalten. Durch einen Doppelpunkt getrennt wird sodann die Basisklasse angegeben. Schließlich können in spitzen Klammern Protokolle angegeben werden, deren Implementierung versprochen wird. Es folgt in geschweiften Klammern die Liste der Instanzvariablen.

Diese werden für jede Instanz angelegt. Die Attribute lassen sich hinsichtlich des Schreibschutzes, des Referenzmodelles und der Atomarität unterscheiden. Zugriff auf die Eigenschaft für Singlethread-Nutzung optimiert. Wird jedoch der Code mit Referenzzählung als Speichermodell übersetzt und soll eine Eigenschaft mittels assign nur zugewiesen werden, so muss dies, obwohl voreingestellt, explizit angegeben werden. Es bietet sich generell an, bei Instanzenzeigern explizit das Referenzmodell anzugeben, während es bei C-Typen überflüssig ist, da nur assign sinnvoll ist.

Hiernach folgt in Klammern der Typ des Rückgabewertes, wobei wie in C void als Schlüsselwort für keinen Rückgabewert steht. Anschließend folgt der Methodenname, wobei wieder die Regeln für C-Bezeichner gelten. Soll die Methode einen Parameter enthalten, so folgt als Teil des Bezeichners die äußere Beschreibung des ersten Parameters, darauf ein Doppelpunkt, in Klammern der Typ und sodann ein Bezeichner. Abgeschlossen wird die Deklaration mit einem Semikolon. Die Implementierung steht üblicherweise in einer weiteren Datei, die standardmäßig auf . Es sei darauf hingewiesen, dass die Bezeichner der formalen Parameter nicht denen aus der Methodendeklaration entsprechen müssen.

Es werden dann Zugriffsmethoden für die im Interface angegebenen Attribute erzeugt. Standardmäßig verwendet der Compiler dabei gleichnamige Instanzvariablen. In diesem Falle überprüft der Compiler nicht mehr das Vorhandensein in der Implementierung. Da Objective-C zwischen Nachricht und Methode unterscheidet, wird für das Versenden von Nachrichten keine an den C-Funktionsaufruf angelehnte Syntax verwendet. Wie ersichtlich, werden dabei die Parameter eingesetzt und mittels Leerzeichen, nicht Komma, getrennt.