Mac OS X Programmierung



Ähnliche Dokumente
Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

AK Medientechnologien Hello World. Josef Kolbitsch

Einführung in Eclipse und Java

AK Medientechnologien 05 Delegation

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in Java

Objektorientierte Programmierung OOP

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung

Prinzipien Objektorientierter Programmierung

Grundlagen von Python

Objektorientierte Programmierung. Kapitel 12: Interfaces

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Vorkurs C++ Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Archiv - Berechtigungen

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

4D Server v12 64-bit Version BETA VERSION

3. Konzepte der objektorientierten Programmierung

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

5.2 Neue Projekte erstellen

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Qt-Projekte mit Visual Studio 2005

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

MetaQuotes Empfehlungen zum Gebrauch von

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Objektbasierte Entwicklung

Installation und Inbetriebnahme von Microsoft Visual C Express

Netzwerkeinstellungen unter Mac OS X

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Java Einführung Packages

Inhaltsverzeichnis. Vorwort 11. Kapitel 1 Systemaufbau und Technologie 17. Kapitel 2 Bundles, Pakete und das Dateisystem 29

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Eine Anwendung mit InstantRails 1.7

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

SEP 114. Design by Contract

5. Abstrakte Klassen

VB.net Programmierung und Beispielprogramm für GSV

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Übungen zur Softwaretechnik

Objektorientierte Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

SMART Newsletter Education Solutions April 2015

teischl.com Software Design & Services e.u. office@teischl.com

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Brainloop Dox Häufig gestellte Fragen

GRUNDLEGENDES ZUM EINRICHTEN DES LAPTOP-ABGLEICHS

Testen mit JUnit. Motivation

Arbeiten mit UMLed und Delphi

OERA OpenEdge Reference Architecture. Mike Fechner PUG Infotag 19. Mai 05 Frankfurt

Java Einführung Methoden in Klassen

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

Urlaubsregel in David

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

8 Design Patterns. Events

Robot Karol für Delphi

Verbinden. der Firma

3 Objektorientierte Konzepte in Java

Informatik 1 Tutorial

Eprog Starthilfe. 5. Oktober Einleitung 2

GeODin 7 Installationsanleitung

Kurzanleitung zu XML2DB

Strategie & Kommunikation. Trainingsunterlagen TYPO3 Version 4.3: News Stand

Kurzfassung der Studienarbeit

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

MSDE 2000 mit Service Pack 3a

Java: Vererbung. Teil 3: super()

K. Hartmann-Consulting. Schulungsunterlage Outlook 2013 Kompakt Teil 1

JetSym. Programmierung in Hochsprache ST nach IEC We automate your success.

Objektorientiertes JavaScript

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Lokale Installation von DotNetNuke 4 ohne IIS

Hilfe bei Adobe Reader. Internet Explorer 8 und 9

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Information-Design-Tool

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Guide DynDNS und Portforwarding

Hex Datei mit Atmel Studio 6 erstellen

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Dokumentieren mit Eclipse und Doxygen

Java Einführung Abstrakte Klassen und Interfaces

Visual Basic Express Debugging

ICS-Addin. Benutzerhandbuch. Version: 1.0

Visual Basic Express erstes Projekt anlegen

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

SAP NetWeaver Gateway. 2013

Konfiguration des ewon GSM Modems Kurzbeschreibung zum Aufbau einer GSM Verbindung

Transkript:

Mac OS X Programmierung Eine Einführung in Cocoa, Objective-C und Xcode Christina Zeeh Mac User Group Stuttgart 17.08.2004

Überblick Erster Teil Softwareentwicklung für Mac OS X - ein Überblick Objektorientierung in 10 Minuten Cocoa - noch ein Überblick Objective-C für Cocoa Pause Zweiter Teil Xcode Interface Builder Cocoa Konzepte Dritter Teil: Pizza :-) 2

Mac OS X Architektur Carbon Application Cocoa Environments Java BSD Application Services Core Services Core OS Core OS 3

Die Qual der Wahl Cocoa Anwendungsentwicklung für Mac OS X Optimale Einbindung in die Mac OS X Umgebung Carbon Portierung von Mac OS 9 Anwendungen Portierung von Anwendungen in prozeduralen Programmiersprachen Java Plattformunabhängige Anwendungsentwicklung BSD, X11, QT,... 4

Xcode Tools Entwicklertools für Mac OS X Neueste Version (1.5) auf http://connect.apple.com (kostenlose ADC Online-Mitgliedschaft) Wichtige Komponenten: Xcode (IDE) Interface Builder (GUI Entwicklung) Compiler (gcc) CHUD Tools (Performance, Debugging) weitere Tools (Hilfe-Index, Icons, Packages,...) 5

Objektorientierung

Objekte Objekte sind Einheiten aus Daten (Instanzvariablen) und Funktionalität Daten und Funktionalität eines Objektes können nur über eine definierte Schnittstelle (Methoden) genutzt werden Der Nutzer eines Objekts muss nur die Schnittstelle, nicht die Implementierung kennen Instanzvariablen können Zeiger auf andere Objekte sein Objekte kommunizieren untereinander über Botschaften (Methodenaufrufe) 7

Klassen Eine Klasse ist ein Bauplan für Objekte gleicher Art Liste der Instanzvariablen Methodendefintion (Schnittstelle) Methodenimplementierung (Funktionalität) Objekte sind konkrete Instanzen einer Klasse, sie benötigen für die Werte der Instanzvariablen Speicherplatz In Objective-C sind Klassen wiederum Objekte, ihre Funktionalität besteht vor allem darin, Instanzen entsprechend ihrem Bauplan erzeugen zu können 8

Vererbung Erstellung einer neuen Klasse basierend auf einer bestehenden Klasse Instanzvariablen hinzufügen Methoden hinzufügen Methoden verändern (selber Name, andere Implementierung) Alle Instanzvariablen und nicht veränderten Methoden werden aus der Oberklasse übernommen (geerbt) Polymorphismus erlaubt den Aufruf von Methoden ohne die konkrete Klasse des Empfängers zu kennen 9

Vorteile Natürlichere Abbildung der Realität Einfachere Wartung Vermeiden von Fehlern Einfachere Wiederverwendung von Programmteilen 10

Cocoa

Cocoa Java Objective-C Python Cocoa Foundation Framework Application Kit Framework 12

Objective-C für Cocoa

Objective-C Hintergrund: NeXTstep, OpenStep, Mac OS X C erweitert um Objektorientierung Definition von Klassen Instanziierung von Objekten dieser Klassen Senden von Botschaften an Objekte Syntax der objektorientierten Erweiterungen ähnelt Smalltalk Objective-C Schlüsselwörter beginnen mit @ 14

Objective-C Klassen Programmcode für eine Klasse besteht aus Schnittstellendefinition: @interface Implementierung: @implementation Üblicherweise auf zwei Dateien aufgeteilt Schnittstellendefinition: Klassenname.h Implementierung: Klassenname.m 15

Schnittstellendefinition (.h) #import Oberklasse.h @interface Klasse : Oberklasse { Instanzvariablen } + Klassenmethoden - Methoden @end #import <Cocoa/Cocoa.h> @interface Point : NSObject { } int x; int y; - init; - initwithx:(int)xvalue Y:(int)yValue; - (void)setx:(int)to; - (void)sety:(int)to; - (int)x; - (int)y; - (int)distanceto:(point *)p; @end 16

Implementierung (.m) #import Klasse.h @implementation Klasse + Klassenmethoden { } - Methoden { } @end #import Point.h @implementation Point (...) - (void)setx:(int)to { x = to; } (...) - (int)x { return x; } (...) @end 17

Variablen Variablendeklaration wie in C int x; int somenumbers[5]; char name[255]; char *description; Variablen können Zeiger auf Objekte sein NSString *name; NSArray *members; Point *apoint; 18

Methoden und Botschaften Methodendefinition - (Rückgabetyp)Methode:(Parametertyp)Parameter; - (void)setx:(int)to; - initwithx:(int)xvalue Y:(int)yValue; Definition von Klassenmethoden analog Botschaften (Methodenaufrufe) [Empfängerobjekt Methode:Parameter]; [apoint setx:10]; Für Klassenmethoden [Klassenobjekt Methode:Parameter]; [SomeClass aclassmethod:someobject]; 19

Initialisierung von Objekten Ein Objekt benötigt Speicherplatz Klassenmethode alloc reserviert den Speicher init... initialisiert die Instanzvariablen Erzeugen einer Instanz apoint der Klasse Point: apoint = [[Point alloc] init]; oder apoint = [[Point alloc] initwithx:10 Y:15]; Mehrere Initialsierungsmethoden sind möglich...... eine davon ist der designated initializer, sie wird von den anderen Initialisierungsmethoden verwendet (i.d.r. diejenige mit den meisten Parametern). 20

Designated Initializer - initwithx:(int)xvalue Y:(int)yValue { self = [super init]; } x = xvalue; y = yvalue; return self; - init { return [self initwithx:0 Y:0]; } Nur der designated initializer ruft die Initialisierungsmethode von super auf! Abgeleitete Klassen müssen den designated initializer aufrufen, hier also initwithx:y: - initwithx:(int)xvalue Y:(int)yValue Z:(int)zValue { self = [super initwithx:xvalue Y:yValue]; z = zvalue; return self; } 21

Speicherverwaltung Der reservierte Speicherplatz muss freigegeben werden, wenn das Objekt nicht mehr benötigt wird: [myobject dealloc]; Aber: In der OO Programmierung wird ein Objekt oft von mehreren anderen Objekten verwendet Problem: Woher weiß man, dass das Objekt von niemandem mehr benötigt wird? Lösung: Referenzzähler 22

Referenzzähler Mit jedem Objekt ist ein Referenzzähler (retain count) verbunden Ein mit [[Class alloc] init] instanziiertes Objekt hat einen retain count von 1 dealloc wird nicht mehr direkt aufgerufen (!!!) Stattdessen: release (und das Gegenstück retain) release vermindert den retain count um 1 retain erhöht den retain count um 1 Ist der retain count 0, wird dealloc automatisch aufgerufen 23

Regeln 1. Wenn man ein Objekt mittels einer Methode mit alloc oder copy im Namen erhalten hat, muss es mit release freigegeben werden, wenn es nicht mehr benötigt wird. 2. Gleiches gilt, wenn man einem Objekt eine retain- Botschaft geschickt hat. 3. Hat man ein Objekt auf andere Weise erhalten und will man es nach Verlassen der aktuellen Methode weiterverwenden, muss man eine retain-botschaft schicken. 24

Autorelease Problem: Erzeugung eines temporären Objektes, um es an ein anderes Objekt weiterzureichen: - (NSString *)xasstring { NSString *s = [[NSString alloc] initwithformat:@ %i,x]; return s; } Widerspricht Regel Nr. 1 - unser Objekt ist für release verantwortlich! Aber: Kein release möglich, da s deallokiert werden würde, bevor das Empfängerobjekt die Chance zum retain hat Lösung: autorelease statt release 25

Regeln v2.0 1. Wenn man ein Objekt mittels einer Methode mit alloc oder copy im Namen erhalten hat, muss es mit release oder autorelease freigegeben werden, wenn es nicht mehr benötigt wird. 2. Gleiches gilt, wenn man einem Objekt eine retain- Botschaft geschickt hat. 3. Hat man ein Objekt auf andere Weise erhalten und will man es nach Verlassen der aktuellen Methode weiterverwenden, muss man eine retain-botschaft schicken. 26

Pause :-)

Xcode

Xcode Groups & Files Build Products Targets Editor Entwicklerdokumentation Compiler Run Log Debugger 29

Interface Builder

Cocoa Konzepte

Model-View-Controller Controller View Model Document Window Punkt schwarzerpunkt schwarzerpunkt schwarzerpunkt x=7 x=7 x=7 y=11 y=11 y=11 X-Wert: 7 Y-Wert: 11 Ändern 32

Target-Action und Outlets Punkt X-Wert: 7 Y-Wert: 11 Ändern Outlets Action Target 33

Hello, World!

Vorgehensweise Neues Projekt Cocoa Application anlegen MainMenu.nib im Interface Builder öffnen Benutzeroberflächen-Objekte einfügen MyController Unterklasse von NSObject erstellen Outlets und Actions definieren Instanz von MyController erzeugen Outlets und Actions verbinden Quellcode-Dateien für MyController Klasse erstellen Code schreiben 35

Hello, World! Randomized

Webbrowser

Delegation delegateobject - delegatemethod Delegation überlässt die Kontrolle über Teil der Oberfläche informelles Protokoll Data Source überlässt Kontrolle über Daten 38

Noch ein paar Hinweise... Development/Deployment Build Style CVS/SVN Integration Human Interface Guidelines Internationalisierung Hilfe Preferences Document-Based Applications Bindings Read the source :-) 39

Weiterführende Informationen

Weiterführende Informationen Apple Developer Connection (ADC) http://developer.apple.com CocoaDev Wiki http://cocoadev.com StepWise http://www.stepwise.com/startingpoint/cocoa.html OmniGroup (Frameworks, Mailinglisten) http://www.omnigroup.com/developer/ MacDevCenter (o Reilly) http://www.macdevcenter.com IRC: #macdev auf irc.freenode.net 41

Literatur Cocoa Programming for Mac OS X (2nd Edition) Aaron Hillegass ISBN 0-321-21314-9 Cocoa Programming Scott Anguish, Erik M. Buck, Donald A. Yacktman ISBN 0-672-32230-7 The C Programming Language Brian W. Kernighan, Dennis M. Ritchie ISBN 0-13-110362-8 Design Patterns Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ISBN 0-201-63361-2 42

Fragen