program mat ion cocoa

Upload: michele-domina

Post on 11-Jul-2015

308 views

Category:

Documents


0 download

TRANSCRIPT

Rfrence

Programmation

Cocoasous Mac OS XAaron Hillegass

Rseaux et tlcom Programmation

Gnie logiciel

Scurit Systme dexploitation

3e dition

Cocoa3e dition

Aaron Hillegass

Pearson Education France a apport le plus grand soin la ralisation de ce livre an de vous fournir une information complte et able. Cependant, Pearson Education France nassume de responsabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces personnes qui pourraient rsulter de cette utilisation. Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle. Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudices ou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou programmes. Tous les noms de produits ou marques cits dans ce livre sont des marques dposes par leurs propritaires respectifs.

Publi par Pearson Education France 47 bis, rue des Vinaigriers 75010 PARIS Tl. : 01 72 74 90 00 www.pearson.fr Mise en pages : TyPAO ISBN : 978-2-7440-4093-1 Copyright 2009 Pearson Education France Tous droits rservs

Titre original : Cocoa Programming for Mac OS X, 3th edition Traduit de lamricain par Herv Soulard Relecture technique : Fabien Schwob ISBN original : 978-0-321-50361-9 Copyright 2008 Pearson Education, Inc. All rights reserved

Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de la proprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sans le respect des modalits prvues larticle L. 122-10 dudit code. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Table des matiresPrface ............................................................................................................................... Remerciements .................................................................................................................. 1 Prsentation de Cocoa ................................................................................................. Historique ................................................................................................................... Outils .......................................................................................................................... Langage ...................................................................................................................... Objets, classes, mthodes et messages ....................................................................... Frameworks ................................................................................................................ Comment lire cet ouvrage .......................................................................................... Conventions typographiques ...................................................................................... Erreurs classiques ....................................................................................................... Comment apprendre ................................................................................................... 2 Premiers pas ................................................................................................................. Dans Xcode ................................................................................................................ Crer un nouveau projet .................................................................................. La fonction main ............................................................................................. Dans Interface Builder ................................................................................................ La fentre Library ........................................................................................... La fentre vierge .............................................................................................. Agencer linterface .......................................................................................... La fentre du chier nib .................................................................................. Crer une classe ............................................................................................... Crer une instance ........................................................................................... tablir les connexions ..................................................................................... Retour dans Xcode ..................................................................................................... Types et constantes en Objective-C ................................................................. Le chier den-tte .......................................................................................... Modier le chier dimplmentation .............................................................. Compiler et excuter ....................................................................................... La mthode awakeFromNib ............................................................................ Documentation ........................................................................................................... Travail ralis ............................................................................................................. XIII XIV 1 1 4 5 5 6 7 8 8 9 11 12 12 15 16 16 17 17 19 19 21 22 24 25 26 27 28 30 31 31

IV

Table des matires

3 Objective-C .................................................................................................................. Crer et utiliser des instances ..................................................................................... Utiliser les classes existantes ...................................................................................... Envoyer des messages nil ............................................................................. NSObject, NSArray, NSMutableArray et NSString ......................................... "Hrite de", "Utilise" et "Connat" .................................................................. Crer ses propres classes ............................................................................................ Crer la classe LotteryEntry ............................................................................ Modier lottery.m ............................................................................................ Implmenter une mthode description ............................................................ Mthodes dinitialisation ................................................................................. Mthodes dinitialisation avec arguments ....................................................... Le dbogueur .............................................................................................................. Travail ralis ............................................................................................................. Pour les plus curieux : mcanisme des messages ....................................................... Exercice ...................................................................................................................... 4 Gestion de la mmoire ................................................................................................. Activer et dsactiver le ramasse-miettes ..................................................................... Programmer avec le ramasse-miettes ......................................................................... Programmer avec les compteurs de rfrences ........................................................... Implmenter dealloc ........................................................................................ Crer des objets libration automatique ....................................................... Mthodes accesseurs ....................................................................................... Travail ralis ............................................................................................................. 5 Cible et action .............................................................................................................. Principales sous-classes de NSControl ....................................................................... NSButton ......................................................................................................... NSSlider ........................................................................................................... NSTextField ..................................................................................................... Dbuter lexemple SpeakLine .................................................................................... Organiser le chier nib ............................................................................................... tablir des connexions dans Interface Builder ................................................ Outlet initialFirstResponder de NSWindow .................................................... Implmenter la classe AppController ......................................................................... Pour les plus curieux : xer la cible par programmation ............................................ Exercice ...................................................................................................................... Conseils de dbogage ................................................................................................. 6 Objets assistants .......................................................................................................... Dlgation ................................................................................................................... NSTableView et sa source de donnes ........................................................................

35 36 37 42 43 48 48 49 51 52 57 58 60 64 64 66 67 69 70 71 73 74 76 79 81 84 84 85 85 87 88 89 90 91 92 92 93 97 98 101

Table des matires

V

Agencer linterface utilisateur .................................................................................... tablir des connexions ................................................................................................ Modier AppController.m ........................................................................................... Erreurs classiques dans limplmentation dun dlgu ................................. Dlgus dobjets ............................................................................................ Pour les plus curieux : fonctionnement de la dlgation ............................................ Exercice : crer un dlgu ......................................................................................... Exercice : crer une source de donnes ...................................................................... 7 Modles de conception KVC et KVO ........................................................................ KVC .......................................................................................................................... Liaisons ....................................................................................................................... KVO .......................................................................................................................... Crer des cls observables .......................................................................................... Proprits et leurs attributs ......................................................................................... @property et @synthesize ............................................................................... Attributs dune proprit ................................................................................. Pour les plus curieux : chemin de cl ......................................................................... Pour les plus curieux : KVO ....................................................................................... 8 NSArrayController ...................................................................................................... Dbuter lapplication RaiseMan ................................................................................. Dans Xcode ..................................................................................................... Dans Interface Builder .................................................................................... Codage cl-valeur et nil .............................................................................................. Ajouter le tri ............................................................................................................... Pour les plus curieux : trier sans NSArrayController ................................................. Exercice 1 ................................................................................................................... Exercice 2 ................................................................................................................... 9 NSUndoManager ......................................................................................................... NSInvocation .............................................................................................................. Fonctionnement de NSUndoManager ........................................................................ Ajouter lannulation RaiseMan ................................................................................ Observation cl-valeur ................................................................................................ Annuler les modications ........................................................................................... Commencer la modication lors de lajout ................................................................ Pour les plus curieux : fentres et gestionnaire dannulation ..................................... 10 Archivage .................................................................................................................... NSCoder et NSCoding ................................................................................................ Encoder ........................................................................................................... Dcoder ...........................................................................................................

104 105 106 108 108 109 110 111 113 114 116 117 118 120 120 121 122 123 125 126 127 129 133 134 135 136 136 139 139 140 142 146 146 149 151 153 154 155 156

VI

Table des matires

Larchitecture de document ........................................................................................ Info.plist et NSDocumentController ................................................................ NSDocument .................................................................................................... NSWindowController ...................................................................................... Enregistrer et NSKeyedArchiver ................................................................................ Charger et NSKeyedUnarchiver .................................................................................. Affecter une extension et une icne au type de chier ............................................... Pour les plus curieux : empcher les boucles innies ................................................ Pour les plus curieux : crer un protocole .................................................................. Pour les plus curieux : applications bases sur des documents sans annulation ........ Identiants de type universel ...................................................................................... 11 Bases de Core Data .................................................................................................... NSManagedObjectModel ............................................................................................ Interface ...................................................................................................................... Crer et congurer des vues ............................................................................ Connexions et liaisons ..................................................................................... Fonctionnement de Core Data .................................................................................... 12 Fichiers nib et NSWindowController ...................................................................... NSPanel ...................................................................................................................... Ajouter un panneau lapplication ............................................................................. Dnir lentre de menu .................................................................................. AppController.m .............................................................................................. Preferences.nib ................................................................................................ PreferenceController.m ................................................................................... Pour les plus curieux : NSBundle ............................................................................... Exercice ...................................................................................................................... 13 Valeurs par dfaut de lutilisateur ........................................................................... NSDictionary et NSMutableDictionary ...................................................................... NSDictionary ................................................................................................... NSMutableDictionary ..................................................................................... NSUserDefaults .......................................................................................................... Priorit des diffrentes valeurs par dfaut ....................................................... Fixer lidentiant de lapplication .............................................................................. Crer des cls pour les valeurs par dfaut .................................................................. Inscrire les valeurs par dfaut ..................................................................................... Laisser lutilisateur modier les valeurs par dfaut ....................................................

157 158 158 161 161 162 163 166 167 168 168 171 171 174 174 177 181 183 184 184 186 188 189 193 195 196 197 198 199 200 200 202 202 202 203 204

Table des matires

VII

Utiliser les valeurs par dfaut ..................................................................................... Supprimer la cration des documents sans titre .............................................. Fixer la couleur darrire-plan de la vue tableau ............................................. Pour les plus curieux : NSUserDefaultsController ..................................................... Pour les plus curieux : lire et crire les valeurs par dfaut partir de la ligne de commande ................................................................................ Exercice ...................................................................................................................... 14 Noti cations ............................................................................................................... Ce que sont les notications ....................................................................................... Ce que ne sont pas les notications ............................................................................ NSNotication et NSNoticationCenter ..................................................................... Poster une notication ................................................................................................ Inscrire un observateur ............................................................................................... Traiter la notication .................................................................................................. Le dictionnaire userInfo ............................................................................................. Pour les plus curieux : dlgus et notications ......................................................... Exercice ...................................................................................................................... 15 Panneaux dalerte ...................................................................................................... Conrmer une suppression ......................................................................................... Exercice ...................................................................................................................... 16 Localisation ................................................................................................................ Localiser un chier nib ............................................................................................... Tables de chanes ........................................................................................................ Crer des tables de chanes ............................................................................. Utiliser la table de chanes .............................................................................. Pour les plus curieux : ibtool ...................................................................................... Pour les plus curieux : ordre explicite des options dans les chanes de format .......... 17 Vues personnalises ................................................................................................... La hirarchie des vues ................................................................................................ Dessiner une vue ......................................................................................................... Crer une instance dune sous-classe de vue .................................................. Inspecteur Size ................................................................................................. drawRect: ........................................................................................................ Dessiner avec NSBezierPath ....................................................................................... NSScrollView .............................................................................................................. Crer des vues par programmation ............................................................................. Pour les plus curieux : cellules ................................................................................... Pour les plus curieux : isFlipped ................................................................................ Exercice ......................................................................................................................

205 205 206 207 207 208 209 209 210 210 213 213 214 214 215 216 217 218 220 221 222 224 225 226 227 228 229 230 231 232 233 234 236 238 240 240 242 243

VIII

Table des matires

18 Images et vnements de la souris ............................................................................ NSResponder .............................................................................................................. NSEvent ...................................................................................................................... Recevoir les vnements de la souris ......................................................................... Utiliser NSOpenPanel ................................................................................................. Modier le chier nib ...................................................................................... Modier le code .............................................................................................. Intgrer une image dans la vue ................................................................................... Systme de coordonnes dune vue ............................................................................ Autodlement ........................................................................................................... Pour les plus curieux : NSImage ................................................................................. Exercice ...................................................................................................................... 19 vnements du clavier .............................................................................................. NSResponder .............................................................................................................. NSEvent ...................................................................................................................... Nouveau projet avec une vue personnalise ............................................................... Agencer linterface .......................................................................................... tablir les connexions ..................................................................................... crire le code ................................................................................................... Pour les plus curieux : effets de survol ....................................................................... La bote bleue oue .................................................................................................... 20 Attributs de texte ....................................................................................................... NSFont ........................................................................................................................ NSAttributedString ..................................................................................................... Afcher des chanes et des chanes avec attributs ...................................................... Afcher les lettres ....................................................................................................... Gnrer des donnes PDF partir de la vue ............................................................... Pour les plus curieux : NSFontManager ..................................................................... Exercice 1 ................................................................................................................... Exercice 2 ................................................................................................................... 21 Presse-papiers et actions sur nil ............................................................................... NSPasteboard ............................................................................................................. Ajouter le couper, copier et coller BigLetterView .................................................... Actions sur nil ............................................................................................................. Analyser la chane des rpondeurs .................................................................. Examiner le chier nib .................................................................................... Pour les plus curieux : quel objet envoie le message daction ? ................................. Pour les plus curieux : copie paresseuse ..................................................................... Exercice 1 ................................................................................................................... Exercice 2 ...................................................................................................................

245 245 246 247 248 249 252 253 254 257 257 258 259 261 261 262 262 263 266 270 271 273 274 274 277 277 279 281 281 282 283 284 285 286 287 288 289 289 291 291

Table des matires

IX

22 Catgories ................................................................................................................... Ajouter une mthode NSString ................................................................................ Pour les plus curieux : dclarer des mthodes prives ............................................... Pour les plus curieux : dclarer des protocoles informels .......................................... 23 Glisser-dposer ........................................................................................................... BigLetterView en tant que source ............................................................................... BigLetterView en tant que destination ........................................................................ registerForDraggedTypes ................................................................................ Ajouter la mise en exergue .............................................................................. Implmenter les mthodes dune destination .................................................. Tester ............................................................................................................ Pour les plus curieux : masque des oprations ........................................................... 24 NSTimer ..................................................................................................................... Agencer linterface ..................................................................................................... tablir les connexions ................................................................................................. Implmenter AppController ........................................................................................ Pour les plus curieux : NSRunLoop ............................................................................ Exercice ...................................................................................................................... 25 Feuilles ........................................................................................................................ Ajouter une feuille ...................................................................................................... Ajouter les outlets et les actions ...................................................................... Agencer linterface .......................................................................................... Ajouter le code ................................................................................................ Pour les plus curieux : contextInfo ............................................................................. Pour les plus curieux : fentres modales .................................................................... 26 NSFormatter .............................................................................................................. Formateur de base ....................................................................................................... Crer ColorFormatter.h ................................................................................... Modier le chier nib ...................................................................................... NSColorList ..................................................................................................... Rechercher des sous-chanes dans des chanes ............................................... Implmenter les mthodes ............................................................................... Le dlgu de NSControl ............................................................................................ Vrier des chanes partielles ..................................................................................... Formateurs qui retournent des chanes avec attributs ................................................. 27 Impression .................................................................................................................. Grer la pagination ..................................................................................................... Pour les plus curieux : suis-je en train de dessiner lcran ? ................................... Exercice ......................................................................................................................

293 293 295 296 297 298 301 302 302 303 304 305 307 309 311 312 314 314 315 316 317 318 321 322 323 325 327 327 328 330 330 331 333 334 336 337 338 342 342

X

Table des matires

28 Services web ............................................................................................................... AmaZone .................................................................................................................... Agencer linterface ..................................................................................................... crire le code .............................................................................................................. Exercice : ajouter une vue web ................................................................................... 29 change de vues ......................................................................................................... Conception .................................................................................................................. Crer les bases ................................................................................................. Crer la classe ManagingViewController ........................................................ Crer les contrleurs de vues et leur chier nib .............................................. Ajouter lchange de vues dans MyDocument ................................................ Redimensionner la fentre .......................................................................................... 30 Relations Core Data .................................................................................................. Modier le modle ..................................................................................................... Crer des classes NSManagedObject personnalises ................................................. Employee ......................................................................................................... Department ...................................................................................................... Agencer linterface ..................................................................................................... DepartmentView.nib ........................................................................................ EmployeeView.nib ............................................................................................ vnements et nextResponder .................................................................................... 31 Ramasse-miettes ........................................................................................................ Types de donnes non objets ...................................................................................... Types primitifs de C ........................................................................................ Core Foundation .............................................................................................. Exemple ...................................................................................................................... Instruments ................................................................................................................. Pour les plus curieux : rfrences faibles ................................................................... Exercice : faire des btises .......................................................................................... 32 Bases de lanimation .................................................................................................. Crer un CALayer ....................................................................................................... Utiliser CALayer et CAAnimation .............................................................................. Supprimer des polynmes ............................................................................... Dplacer plusieurs calques simultanment ..................................................... Redimensionner et redessiner les calques ....................................................... CALayer ..........................................................................................................

343 344 345 347 351 353 354 354 355 356 358 360 363 364 365 365 366 367 367 369 371 373 374 374 375 375 381 383 383 385 386 389 390 391 392 392

Table des matires

XI

33 Application Cocoa/OpenGL simple ........................................................................... Utiliser NSOpenGLView ............................................................................................. crire lapplication ..................................................................................................... Agencer linterface .......................................................................................... crire le code ................................................................................................... 34 NSTask ........................................................................................................................ Multithread et multitraitement .................................................................................... ZIPspector .................................................................................................................. Lectures asynchrones .................................................................................................. iPing .......................................................................................................................... Exercice : chiers .tar et .tgz ...................................................................................... 35 Final ............................................................................................................................ Exercice ...................................................................................................................... Index ..................................................................................................................................

395 395 396 397 400 403 404 404 409 410 414 415 416 417

PrfaceSi vous dveloppez des applications pour Mac, ou que vous souhaitiez le faire, cet ouvrage va vous apporter laide que vous recherchez. Sil ne couvre pas lintgralit du dveloppement sur Mac, vous y trouverez au moins 80 % des informations indispensables. Les 20 % restants, qui vous sont propres, existent dans la documentation disponible en ligne sur le site web dApple. Ce livre constitue donc une base. Il prsente le langage Objective-C et les principaux modles de conception de Cocoa. Il vous permettra de dbuter avec les trois outils de dveloppement les plus employs : Xcode, Interface Builder et Instruments. Aprs avoir lu ces pages, vous serez en mesure de comprendre et dexploiter la documentation en ligne fournie par Apple. travers les nombreux exemples de code, vous dcouvrirez les idiomes de la communaut Cocoa. En prsentant ces exemples de code, nous esprons que vous deviendrez non seulement un dveloppeur Cocoa, mais galement un dveloppeur qui a de la classe. Cette troisime dition se fonde sur les technologies apportes par Mac OS X 10.4 et 10.5, incluant notamment Xcode 3, Objective-C 2, Core Data, le ramasse-miettes et CoreAnimation. Cet ouvrage est destin aux programmeurs qui possdent dj quelques connaissances en programmation C et objet. Vous ntes pas suppos avoir une exprience du dveloppement sur Mac. Vous devez avoir accs un systme Mac OS X et aux outils du dveloppeur. Ces outils sont gratuits. Si vous avez achet un exemplaire de Mac OS X, ils sont disponibles sur le DVD-ROM. Vous les trouverez galement en tlchargement sur le site web Apple Developer Connection ladresse http://developer.apple.com/. Jai tent de rendre ce livre le plus utile possible, dfaut dtre indispensable. Si vous avez des suggestions damliorations, nhsitez pas me les transmettre.Aaron Hillegass [email protected]

RemerciementsDe nombreuses personnes se sont impliques dans lcriture de cet ouvrage. Je veux les remercier pour leur aide. Leurs contributions ont permis darriver un niveau de qualit quil maurait t impossible datteindre seul. Tout dabord, je souhaite remercier les tudiants qui ont suivi les cours de programmation Cocoa au Big Nerd Ranch. Ils mont aid retirer des exercices et des explications toutes les aberrations que javais pu introduire. Leur curiosit ma incit complter le contenu et leur patience la rendu possible. En maidant enseigner et dvelopper du contenu au Ranch, Chris Campbell et Mark Fenoglio ont jou un rle important pour cette dition. Ils ont apport des nouveauts et ont dtect mes erreurs monumentales. Jai eu le grand honneur de travailler pendant plusieurs annes avec Kai Christiansen. Il ma appris de nombreuses choses sur Cocoa et lenseignement. Ensemble, nous avons rdig plusieurs cours sur OpenStep et WebObjects. Lcriture de cet ouvrage a t pour moi une suite toute naturelle ce travail. Si mes mains taient sur le clavier, la voix de Kai tait souvent lorigine du contenu de la page. Addison-Wesley a pris mon manuscrit et en a fait un livre. Cette maison ddition la mis dans des camions et a convaincu les libraires de le placer sur leurs tagres. Sans son aide, il ne serait encore quune pile de feuilles de papier sur mon bureau. Enn, mes remerciements vont ma famille. Une grande part des attentions qui auraient d aller ma femme, Michele, a t consacre la rdaction de cet ouvrage. Je me dois galement de remercier mes ls, Walden et Otto, pour leur patience et leur comprhension.

1Prsentation de CocoaAu sommaire de ce chapitre Historique Outils Langage Objets, classes, mthodes et messages Frameworks Comment lire cet ouvrage Conventions typographiques Erreurs classiques Comment apprendre

HistoriqueLhistoire de Cocoa dbute de manire cocasse. Deux copains, prnomms tous deux Steve, crent une socit appele Apple Computer dans leur garage. Cette entreprise grandit rapidement, tel point quun cadre expriment, John Sculley, est embauch pour en devenir le directeur gnral. Suite quelques conits, John Sculley place Steve Jobs un poste qui lui retire tout contrle sur la socit. Steve Jobs quitte alors Apple pour crer une autre socit, NeXT Computer. NeXT recrute une petite quipe dingnieurs brillants. Elle cre un ordinateur, un systme dexploitation, une imprimante, une usine et un ensemble doutils de dveloppement. Tous ces lments ont plusieurs annes davance sur les technologies concurrentes. La foule est bahie et enthousiaste. Malheureusement, cette mme foule nachte pas lordinateur ou limprimante. En 1993, lusine est ferme et NeXT Computer, Inc., devient NeXT Software, Inc.

2

Cocoa

Le systme dexploitation et les outils de dveloppement restent en vente sous le nom NeXTSTEP. Si lutilisateur lambda na jamais entendu parler de NeXTSTEP, ce dernier est en revanche trs connu chez les scientiques, dans les banques dinvestissement et les services de renseignement. Ces socits dveloppent chaque semaine de nouvelles applications et voient en NeXTSTEP une solution qui leur permet dimplmenter leurs ides plus rapidement que nimporte quelle autre technologie. Quel est donc ce systme dexploitation ? NeXT a choisi dutiliser Unix comme base pour NeXTSTEP, en partant du code source dun Unix BSD provenant de luniversit de Berkeley, en Californie. Pourquoi Unix ? Ce systme est moins sujet aux dysfonctionnements que Microsoft Windows ou Mac OS et dispose de fonctions rseau plus labores et plus ables. Sous le nom de Darwin, Apple a rendu disponible le code source de la partie Unix de Mac OS X. Une communaut de dveloppeurs poursuit le travail damlioration de Darwin. Pour en savoir plus, allez sur le site http://macosforge.org/. NeXT a galement conu un serveur de fentres pour le systme dexploitation. Un serveur de fentres rcupre les vnements gnrs par lutilisateur et les dirige vers les applications. Une application renvoie ensuite des ordres de dessin vers le serveur de fentres an quil actualise ce que lutilisateur voit. Le serveur de fentres de NeXT prsente plusieurs aspects intressants, notamment celui dutiliser le mme code de trac pour les applications et limprimante. Ainsi, le programmeur ncrit le code de dessin quune seule fois et lutilise ensuite pour lafchage lcran ou limpression. lpoque de NeXTSTEP, les programmeurs crivaient du code qui gnrait du PostScript. Avec Mac OS X, les programmeurs crivent du code qui utilise le framework CoreGraphics (galement appel Quartz). Quartz peut gnrer ces graphiques lcran, les envoyer limprimante ou produire des donnes au format PDF (Portable Document Format). PDF est un standard ouvert cr par Adobe Corporation pour les graphiques vectoriels. Si vous avez dj utilis des machines Unix, vous connaissez certainement le serveur de fentres X Window (ou serveur X). Le serveur de fentres de Mac OS X est totalement diffrent, mais remplit la mme fonction que le serveur X : il rcupre les vnements de lutilisateur, les redirige vers les applications et place sur lcran les donnes produites par les applications. Le protocole X ne gre pas trs bien les polices de caractres avec anticrnelage ni la transparence. Cest lune des raisons pour lesquelles le serveur de fentres de Mac OS X parat bien meilleur quun serveur X Window. NeXTSTEP fournit un ensemble de bibliothques et doutils qui permettent aux programmeurs dexploiter le gestionnaire de fentres de manire trs lgante.

Chapitre 1

Prsentation de Cocoa

3

Ces bibliothques sont appeles frameworks. En 1993, les frameworks et les outils ont volu. Ils ont chang de nom, pour devenir OpenStep, puis Cocoa. La Figure 1.1 montre que le serveur de fentres et les applications sont des processus Unix. Cocoa permet aux applications de recevoir les vnements issus du serveur de fentres et deffectuer le trac lcran.Figure 1.1Utilisation de Cocoa.vnements Serveur de fentres

trac

Cocoa Application

UNIX BSD 4.4 Micronoyau Mach

La programmation avec les frameworks se fait laide du langage Objective-C. Comme C++, Objective-C drive du langage de programmation C, pour en faire un langage orient objet. Contrairement C++, Objective-C est faiblement typ et extrmement puissant. Cependant, puissance rime avec responsabilit. Objective-C permet aux programmeurs dintroduire des erreurs ridicules. Ce langage est une extension trs simple de C et vous constaterez quil est trs facile apprendre. Les programmeurs ont apprci OpenStep. Il leur permettait de tester facilement de nouvelles ides. titre dexemple, Tim Berners-Lee a dvelopp les premiers navigateur et serveur web sur NeXTSTEP. Les analystes pouvaient crire du code et tester de nouveaux modles nanciers bien plus rapidement. Les scientiques pouvaient dvelopper les applications qui leur permettaient deffectuer leurs recherches. Ce quen faisaient les services de renseignement reste un mystre, mais ils ont achet des milliers dexemplaires dOpenStep. Les outils de dveloppement OpenStep taient tellement commodes quils ont t ports sur Solaris et Windows NT. Le systme dexploitation NeXTSTEP a t install sur pratiquement tous les processeurs rpandus : Intel, Motorola, PA-RISC de Hewlett-Packard et SPARC. Assez bizarrement, OpenStep ne fonctionnait pas sur Mac, jusqu la premire version de Mac OS X Server, appele Rhapsody et sortie en 1999. Pendant de nombreuses annes, Apple Computer a travaill au dveloppement dun systme dexploitation dont les caractristiques taient semblables celles de NeXTSTEP. Ce projet, connu sous le nom de Copland, tranait en longueur et Apple a nalement dcid de larrter, pour trouver la version suivante de Mac OS auprs dune autre socit. Aprs avoir tudi les systmes dexploitation existants, Apple a choisi

4

Cocoa

NeXTSTEP. La socit NeXT tant petite, Apple la simplement rachete en dcembre 1996. Quelle est ma place dans cette histoire ? Jcrivais du code pour les ordinateurs NeXT Wall Street, jusquau jour o NeXT ma embauch pour enseigner la programmation OpenStep dautres dveloppeurs. Jtais employ chez NeXT lorsque la socit a fusionn avec Apple. Jai donc form de nombreux ingnieurs dApple au dveloppement dapplications pour Mac OS X. Je ne travaille plus pour Apple et enseigne prsent la programmation Cocoa pour Big Nerd Ranch, Inc. NeXTSTEP est devenu Mac OS X. Il se fonde sur Unix. Vous disposez de tous les programmes Unix standard, comme le serveur web Apache, sur Mac OS X, qui est plus stable que Windows et Mac OS 9. Linterface utilisateur est spectaculaire. En tant que dveloppeur, vous allez apprcier Mac OS X car Cocoa vous permettra dcrire des applications compltes de manire trs efcace et lgante.

OutilsVous apprcierez Cocoa, mais peut-tre pas immdiatement. Tout dabord, vous devez apprendre les bases. Commenons par les outils que nous utiliserons. Tous les outils ncessaires au dveloppement avec Cocoa font partie des Mac OS X Developer Tools, qui sont fournis gratuitement avec Mac OS X. Si ces outils du dveloppeur ajoutent une dizaine dapplications pratiques votre systme, vous en utiliserez principalement deux : Xcode et Interface Builder. Le compilateur C de GNU (gcc) sert compiler le code, tandis que le dbogueur de GNU (gdb) vous aidera trouver vos erreurs. Xcode gre toutes les ressources qui composent une application : code, image, son, etc. Lcriture du code se fait dans Xcode, qui peut compiler et lancer votre application. Depuis Xcode, il est galement possible dinvoquer et de contrler le dbogueur. Interface Builder est un concepteur dinterfaces graphiques. Il vous permet dagencer des fentres et de leur ajouter des widgets. Cependant, ses possibilits ne sarrtent pas l. Interface Builder permet au dveloppeur de crer des objets et de modier leurs attributs. La plupart de ces objets sont des lments dinterfaces graphiques, comme des boutons et des champs de saisie, mais certains seront des instances des classes que vous aurez cres.

Chapitre 1

Prsentation de Cocoa

5

LangageTous les exemples de ce livre sont crits en Objective-C. Ce langage est une extension simple et lgante de C. Si vous connaissez dj le langage C et un langage orient objet, comme Java ou C++, sa matrise ne vous prendra quenviron deux heures. Il est possible de dvelopper des applications Cocoa en Ruby ou Python. Cet ouvrage ne sintressera pas ces techniques, mais vous trouverez toutes les informations ncessaires sur le Web. Cependant, pour les comprendre, vous devez avoir une connaissance minimale dObjective-C. Objective-C a rcemment fait lobjet dune rvision majeure. Tout le code prsent dans ce livre se fonde sur Objective-C 2. Dans Objective-C 2.0, Apple a ajout un ramasse-miettes que vous pouvez choisir dactiver ou non. Le code propos fonctionne avec ou sans le ramasse-miettes. Le code Objective-C est compil par gcc, le compilateur C de GNU. Ce compilateur vous permet de mlanger librement du code C, du code C++ et du code Objective-C dans le mme chier. Le dbogueur de GNU, gdb, servira dnir des points darrt et examiner les variables pendant lexcution. Objective-C laisse une grande libert au programmeur, qui peut donc introduire de nombreuses erreurs et sera heureux de disposer dun dbogueur performant.

Objets, classes, mthodes et messagesLe dveloppement avec Cocoa se fait en utilisant des techniques orientes objet. Cette section revient rapidement sur les termes employs dans la programmation oriente objet. Si vous navez aucune connaissance dans ce domaine, commencez par lire louvrage The Objective-C Language, dont le chier PDF est disponible sur le site web dApple (http://developer.apple.com/documentation/Cocoa/Conceptual/ ObjectiveC/ObjC.pdf). Un objet peut tre compar une structure C : il occupe de la mmoire et contient des variables. Les variables dun objet sont appeles variables dinstance. Voici donc les premires questions que lon se pose gnralement concernant la manipulation des objets : comment allouer de lespace pour un objet ? Quelles sont les variables dinstance dun objet ? Comment dtruire un objet lorsquil est devenu inutile ? Certaines variables dinstance dun objet sont des pointeurs vers dautres objets. Ces pointeurs permettent lobjet de "connatre" un autre objet.

6

Cocoa

Les classes sont des structures qui crent des objets. Elles prcisent les variables dtenues par les objets et sont responsables de lallocation de la mmoire pour les objets. Nous disons quun objet est une instance de la classe qui le cre (voir Figure 1.2).Figure 1.2Cration dinstances partir de classes.La classe joue le rle dune fabrique qui cre des instances de cette classe.

Toto

Toto

Toto

Un objet est plus labor quune structure, car des fonctions peuvent y tre associes. Ces fonctions sont appeles mthodes. Pour invoquer une mthode, il faut envoyer un message lobjet (voir Figure 1.3).Figure 1.3Invocation de mthodes par des messages.Lenvoi d'un message dclenche linvocation dune mthode dans l'objet qui le reoit.

Toto

FrameworksUn framework est un ensemble de classes prvues pour tre utilises ensemble. Autrement dit, les classes sont compiles et runies dans une bibliothque de code rutilisable. Toutes les ressources associes sont places dans un rpertoire avec la bibliothque. Le nom de ce rpertoire possde lextension .framework. Les frameworks intgrs votre systme se trouvent dans le rpertoire /System/Library/ Frameworks. Cocoa est constitu de trois frameworks : 1. Foundation. Chaque langage de programmation oriente objet a besoin de classes standard. Les classes implmentant les chanes, les dates, les listes, les threads et les minuteries se trouvent dans le framework Foundation.

Chapitre 1

Prsentation de Cocoa

7

2. AppKit. Tout ce qui se rapporte linterface utilisateur est fourni par le framework AppKit. Les classes implmentant les fentres, les boutons, les champs de saisie, les vnements et les dessins se trouvent dans AppKit. Ce framework est galement appel ApplicationKit. 3. Core Data. Core Data facilite lenregistrement des objets dans un chier, puis leur chargement en mmoire. Il sagit donc dun framework de persistance. Dautres frameworks se chargent de diffrents aspects, comme le chiffrement, QuickTime ou la gravure de CD, mais ce livre se concentre sur Foundation, AppKit et Core Data car ils sont les plus employs. Lorsque vous les matriserez, les autres frameworks seront plus accessibles. Vous pouvez galement crer vos propres frameworks partir de vos classes. En gnral, lorsque plusieurs classes sont utilises dans diffrentes applications, elles sont converties en un framework.

Comment lire cet ouvrageEn crivant ce livre, je me suis imagin en train de guider un ami parmi toutes les tapes qui lui permettraient de comprendre la programmation Cocoa. Cet ouvrage joue le rle de guide pour ces activits. Trs souvent, je vous demanderai de raliser quelque chose, puis jexpliquerai les dtails et la thorie. Si vous vous sentez perdu, poursuivez votre lecture. Normalement, laide recherche se trouvera un ou deux paragraphes plus loin. Si vous tes toujours bloqu, vous pouvez obtenir de laide sur le site web consacr ce livre : www.bignerdranch.com/products/. Vous y trouverez galement des errata, des conseils, des exemples, ainsi que les solutions des exercices. Chaque chapitre sera un guide qui vous accompagnera tout au long du processus de dveloppement dune application. Cependant, il ne sagit pas dun livre de recettes. Cet ouvrage enseigne des ides, tandis que les exercices montrent comment les mettre en uvre. Nhsitez pas exprimenter. Les frameworks Cocoa contiennent environ trois cents classes. Elles sont toutes documentes dans la rfrence en ligne (accessible par lintermdiaire du menu Help de Xcode). Les programmeurs Cocoa passent beaucoup de temps parcourir ces pages. Cependant, sans un minimum de connaissances sur Cocoa, il est difcile de trouver les rponses ses questions. Lorsquune nouvelle classe sera prsente dans cet ouvrage, recherchez-la dans la documentation de rfrence. Vous ne comprendrez peut-tre pas toutes les informations qui sy trouvent, mais cela vous permettra dapprcier la richesse des

8

Cocoa

frameworks. Lorsque vous aurez termin la lecture de ce livre, la rfrence deviendra votre guide. En gnral, Cocoa tient ses promesses : les choses classiques sont simples, les choses rares sont possibles. Si vous crivez de nombreuses lignes de code pour raliser une tche somme toute ordinaire, vous avez probablement emprunt la mauvaise voie.

Conventions typographiquesVoici les conventions typographiques utilises pour faciliter la lecture du contenu de cet ouvrage. Les noms des classes commencent toujours par une majuscule, dans une police chasse constante. Les noms des mthodes commencent par une minuscule et sont galement dans une police chasse constante tout comme les autres littraux, y compris les noms des variables dinstance et les noms de chiers. Par exemple, vous pourriez rencontrer les phrases "La classe NSObject dnit la mthode dealloc" ou "Dans MaClasse.m, xez la variable couleurPreferee nil".

Erreurs classiquesPour avoir regard de nombreuses personnes travailler avec ce contenu, je sais que les mmes erreurs se rptent des centaines de fois. Plus prcisment, les erreurs demploi des majuscules et les connexions oublies sont les plus frquentes. Les erreurs demploi des majuscules se produisent car les langages C et Objective-C sont sensibles la casse. Le compilateur voit dans Toto et toto deux choses diffrentes. Si votre code ne compile pas, vriez que toutes les lettres majuscules et minuscules sont correctes. Lors de la cration dune application, vous utiliserez Interface Builder pour connecter des objets entre eux. Si vous oubliez des connexions, votre application pourra certainement tre compile, mais son comportement sera aberrant. Dans ce cas, revenez dans Interface Builder et vriez les connexions. Il est trs facile de passer ct de certains avertissements lors de la premire compilation dun chier. Puisque Xcode effectue des compilations incrmentales, vous ne les verrez peut-tre plus, jusqu ce que vous nettoyiez et recompiliez lintgralit du projet. Si vous tes bloqu, tentez un nettoyage et une recompilation.

Chapitre 1

Prsentation de Cocoa

9

Comment apprendreDans mes cours, jaccueille toutes sortes de personnes : brillantes et moins doues, motives et plus fainantes, exprimentes et novices. Invitablement, celles qui prote le mieux le cours prsentent la mme caractristique : elles restent concentres sur le sujet trait. Pour rester concentr, il faut commencer par dormir sufsamment. Je vous suggre dix heures de sommeil par nuit lorsque vous devez assimiler de nouvelles ides. Avant de repousser ce conseil, faites le test. Vous vous rveillerez frais et dispos pour apprendre. La cafine ne remplace pas le sommeil. Le deuxime point important est darrter de rchir sur soi-mme. Lorsquils travaillent sur de nouvelles choses, de nombreux tudiants ont tendance penser que "cest difcile pour moi, je dois vraiment tre stupide". Puisque la stupidit est une chose absolument terrible dans nos cultures, les tudiants passent des heures dvelopper des arguments justiant pourquoi ils sont intelligents malgr leurs difcults. Si vous empruntez cette voie, vous allez vous disperser. Jai eu un chef qui se nommait Rock. Rock tait titulaire dun diplme en astrophysique de Cal Tech et navait jamais eu un poste dans lequel il utilisait ses connaissances du ciel. Un jour, je lui ai demand sil regrettait ce diplme. "En ralit, mon diplme en astrophysique prouve que jai une grande valeur, a-t-il rpondu. Dans ce monde, certaines choses sont simplement difciles. Lorsque je me bats contre quelque chose, je pense parfois que cest difcile pour moi, je dois vraiment tre stupide ; puis je me souviens que je suis titulaire dun diplme en astrophysique de Cal Tech. Je ne dois donc pas tre si stupide." Avant de poursuivre, dites-vous que vous ntes pas stupide et que certaines choses sont difciles. Convaincu de cela et bien dispos, vous tes prt conqurir Cocoa.

2Premiers pasAu sommaire de ce chapitre Dans Xcode Dans Interface Builder Retour dans Xcode Documentation

De nombreux ouvrages dbutent par des aspects philosophiques. Si nous commencions ainsi, du papier prcieux serait gaspill. la place, ce chapitre va vous guider tout au long de lcriture de votre premire application Cocoa. Une fois celle-ci termine, vous serez enthousiasm et confus, mais prt pour la philosophie. Le premier projet est une application qui fait ofce de gnrateur de nombres alatoires. Elle possde deux boutons : Initialiser le gnrateur avec lheure et Gnrer un nombre alatoire. Une zone de texte afche le nombre gnr. Pour ce simple exemple, nous devrons dterminer le bouton sur lequel lutilisateur clique et gnrer une sortie. Il est possible que les explications des manipulations demandes, ainsi que leurs raisons dtre, vous semblent un tantinet vagues, voire brutales. Ne vous inquitez pas. Tous les dtails arriveront point nomm. Pour le moment, nous allons simplement jouer un peu. La Figure 2.1 prsente lapplication termine.Figure 2.1Lapplication termine.

12

Cocoa

Dans XcodeSi les outils du dveloppeur ont t installs, vous trouverez Xcode dans le rpertoire /Developer/Applications/. Faites glisser lapplication sur le Dock, car vous allez devoir la lancer trs souvent. Lancez Xcode. Nous lavons mentionn prcdemment, Xcode conserve toutes les ressources qui composent votre application. Elles sont places dans le rpertoire du projet. La premire tape du dveloppement dune nouvelle application consiste crer un nouveau rpertoire de projet, avec le squelette par dfaut dune application. Crer un nouveau projet Dans le menu File, choisissez New Project. Dans la fentre qui apparat (voir Figure 2.2), choisissez le type de projet que vous souhaitez crer : Cocoa Application. Vous noterez que bien dautres types de projets sont galement disponibles.Figure 2.2Choisir le type du projet.

Voici les principaux types de projets que nous utiliserons dans cet ouvrage :m m

Application. Ce programme cre des fentres. Tool. Un programme qui ne possde pas dinterface utilisateur graphique. En gnral, un outil est un utilitaire en ligne de commande ou un dmon qui sexcute en arrire-plan.

Chapitre 2

Premiers pas

13

m

Bundle ou framework. Il sagit dun rpertoire de ressources qui peuvent tre utilises dans une application ou un outil. Un bundle, galement appel plug-in, est charg dynamiquement au moment de lexcution. En gnral, une application se lie un framework au moment de la compilation.

Pour le nom du projet, saisissez RandomApp (voir Figure 2.3). En gnral, chaque mot qui compose le nom dune application commence par une lettre majuscule. Vous pouvez galement indiquer o sera cr le rpertoire du projet. Par dfaut, il sagit de votre dossier de dpart. Cliquez sur le bouton Finish.Figure 2.3Nommer le projet.

Le rpertoire du projet, contenant le squelette dune application, est cr automatiquement. partir de ce squelette, nous allons crer le code source dune application complte, puis compiler ce code source en application oprationnelle. En examinant le nouveau projet dans Xcode, nous en obtenons une vue gnrale sur le ct gauche de la fentre. Chaque lment de cette vue reprsente un type dinformation utile au programmeur. Certains lments sont des chiers, dautres, des messages, comme les erreurs du compilateur ou les rsultats dune recherche. Nous allons modier certains chiers. Slectionnez RandomApp pour obtenir la liste des chiers qui seront compils an de crer une application. Le squelette du projet qui a t cr peut tre compil et excut. Lapplication rsultante est constitue dun menu et dune fentre. Pour compiler et excuter le projet, cliquez sur licne de la barre doutils qui reprsente un marteau et un cercle vert (voir Figure 2.4).

14

Cocoa

Figure 2.4Squelette dun projet.

Cliquer sur Build and Go

Pendant que lapplication se lance, une icne sautille dans le Dock. Le nom de lapplication apparat dans le menu. Cela signie quelle est active. Sa fentre peut tre masque par celle dune autre application. Si vous ne la voyez pas, choisissez Hide Others dans le menu RandomApp. Vous devez obtenir une fentre vide (voir Figure 2.5).Figure 2.5Excuter le projet.

Chapitre 2

Premiers pas

15

Bien quelle ne fasse pas grand-chose, il sagit dj dune application parfaitement oprationnelle. Mme limpression fonctionne. Lapplication ne contient quune seule ligne de code. Examinons-la. Quittez RandomApp et revenez dans Xcode. La fonction main Slectionnez main.m en cliquant simplement dessus. Si vous double-cliquez sur le nom du chier, il souvrira dans une nouvelle fentre. En raison du grand nombre de chiers manipuls dans une journe, toutes ces fentres qui souvrent peuvent devenir rapidement pnibles. Il est parfois prfrable de travailler dans une seule fentre. Cliquez sur licne Editor an de dcomposer la fentre et de crer une vue ddition qui afche le code (voir Figure 2.6).Figure 2.6La fonction main().Cliquer sur Editor pour afficher le code

En rgle gnrale, nous ne modions pas le chier main.m dans un projet de type Application. La fonction main() par dfaut appelle simplement NSApplicationMain(), qui, son tour, charge les objets de linterface utilisateur prsents dans un chier nib. Les chiers nib sont crs avec Interface Builder. (Info : NIB signie NeXT Interface Builder, et NS est le diminutif de NeXTSTEP.) Aprs avoir charg le chier nib, lapplication attend simplement les actions de lutilisateur. Lorsquil clique ou tape sur le clavier, notre code est appel automatiquement. Si vous navez jamais crit dapplication avec une interface utilisateur graphique, cela vous tonne peut-tre : lutilisateur a le contrle et votre code ragit simplement ses actions.

16

Cocoa

Dans Interface BuilderDans la vue gnrale, sous Resources, nous voyons un chier nib nomm MainMenu.nib. Double-cliquez dessus pour louvrir dans Interface Builder (voir Figure 2.7). De nombreuses fentres vont apparatre, cest donc le bon moment de masquer les autres applications. Dans le menu Interface Builder, vous trouverez la commande Hide Others.Figure 2.7MainMenu.nib.Menu de l'application Fentre de la bibliothque

Fentre de l'application

Fentre du fichier nib

Interface Builder permet de crer et de modier les objets de linterface utilisateur, comme les fentres et les boutons, et de les enregistrer dans un chier. Nous pouvons galement crer des instances de nos propres classes et tablir des connexions entre ces instances et les objets standard de linterface utilisateur. Lorsquun utilisateur interagit avec les objets de linterface, les connexions dnies entre ces objets et nos classes dclenchent lexcution de notre code. La fentre Library Cest dans la fentre Library que se trouvent les widgets que nous pouvons dposer dans notre interface utilisateur. Par exemple, si nous souhaitons un bouton, il suft de le faire glisser depuis la fentre Library.

Chapitre 2

Premiers pas

17

La fentre vierge La fentre vierge reprsente une instance de la classe NSWindow prsente dans notre chier nib. Lorsque nous dposons dans cette fentre des objets provenant de la bibliothque, ils sont ajouts au chier nib. Aprs avoir cr des instances de ces objets et modi leurs attributs, lenregistrement dun chier nib revient lyophiliser les objets dans le chier. Lors de lexcution de lapplication, le chier nib est lu et les objets sont ranims. Mais les informaticiens disent que "les objets sont archivs dans le chier nib par Interface Builder et sont dsarchivs au moment de lexcution de lapplication". Agencer linterface Nous allons la prsenter pas pas, mais noubliez pas que lobjectif est de crer une interface utilisateur semblable celle illustre la Figure 2.8.Figure 2.8Linterface termine.

Faites glisser un bouton depuis la fentre Library (voir Figure 2.9) vers la fentre vierge. Pour que cela soit plus facile, vous pouvez slectionner le groupe Cocoa > Views & Cells dans la partie suprieure de la fentre Library.Figure 2.9Faire glisser un bouton.

18

Cocoa

Double-cliquez sur le bouton pour xer son intitul Initialiser le gnrateur avec lheure. Copiez et collez le bouton. Fixez lintitul du nouveau bouton Gnrer un nombre alatoire. Faites glisser le champ de texte Label (voir Figure 2.10) et dposez-le sur la fentre.Figure 2.10Faire glisser un champ de texte.

Pour que le champ de texte soit aussi large que les boutons, faites glisser ses bords gauche et droit vers les cts de la fentre. Notez les lignes bleues qui apparaissent lorsque vous approchez du bord de la fentre. Ces guides vous aident respecter les rgles des interfaces graphiques utilisateur dApple.Figure 2.11Centrer le contenu du champ de texte.Cliquer pour centrer le texte

Chapitre 2

Premiers pas

19

Diminuez la taille de la fentre. Pour que le contenu du champ de texte soit centr, vous devez utiliser linspecteur. Slectionnez le champ de texte et choisissez Attributes Inspector dans le menu Tools. Cliquez sur le bouton de centrage (voir Figure 2.11). Conseil de travail : le matin, jouvre la fentre de linspecteur et ne la ferme plus de la journe. La fentre du chier nib Dans le chier nib, certains objets, comme les boutons, sont visibles tandis que dautres, comme nos propres objets contrleurs, sont invisibles. Les icnes qui reprsentent les objets invisibles apparaissent dans la fentre du chier nib. Dans cette fentre, intitule MainMenu.nib, nous voyons les icnes qui reprsentent le menu principal et la fentre principale. First Responder est un objet ctif, mais dont le rle est essentiel. Nous y reviendrons au Chapitre 21. Dans ce chier nib, Files Owner correspond lobjet NSApplication de lapplication. Cet objet prend des vnements dans la le dattente des vnements et les dirige vers la fentre approprie. Nous dtaillerons Files Owner au Chapitre 12. Crer une classe En Objective-C, chaque classe est dnie par deux chiers : un chier den-tte et un chier dimplmentation. Le chier den-tte, galement appel chier dinterface, dclare les variables dinstance et les mthodes de la classe. Le chier dimplmentation dnit le rle de ces mthodes. Revenez dans Xcode et slectionnez File > New File pour crer une nouvelle classe Objective-C (choisissez Cocoa > Objective-C class). Nommez le chier Foo.m (voir Figure 2.12).Figure 2.12Crer une nouvelle classe.

20

Cocoa

Les chiers Foo.h et Foo.m sont ajouts notre projet. Sils napparaissent pas dans le groupe Classes, faites-les y glisser (voir Figure 2.13).Figure 2.13Placer Foo.h et Foo.m dans le groupe Classes.

Dans Foo.h, nous allons ajouter les variables dinstance et les mthodes de la classe. Les variables dinstance, qui sont des pointeurs vers dautres objets, sont appeles outlets. Les mthodes, dont linvocation peut tre dclenche par des objets de linterface utilisateur, sont appeles actions. Modiez Foo.h de la manire suivante :#import @interface Foo: NSObject { IBOutlet NSTextField *textField; } - (IBAction)seed:(id)sender; - (IBAction)generate:(id)sender; @end

partir de ce chier, un programmeur Objective-C dduira les trois points suivants : 1. Foo est une sous-classe de NSObject. 2. Foo possde une variable dinstance, textField, qui est un pointeur sur une instance de la classe NSTextField. 3. Foo possde deux mthodes, seed: et generate:, qui sont des mthodes daction.

Chapitre 2

Premiers pas

21

Par convention, les noms des mthodes et des variables dinstance commencent par une lettre minuscule. Si le nom est compos de plusieurs mots, chaque mot commence par une lettre majuscule, par exemple couleurFavorite. De mme, par convention, les noms de classes commencent par une majuscule, par exemple Foo. Enregistrez Foo.h. Crer une instance Nous allons prsent crer une instance de la classe Foo dans le chier nib. Retournez dans Interface Builder. partir de la fentre Library, faites glisser un Object bleu (sous Cocoa > Objects & Controllers) pour le dposer dans la fentre du chier nib (voir Figure 2.14).Figure 2.14Squelette dun projet.

Dans linspecteur Identity, xez sa classe Foo (voir Figure 2.15). Nos actions et nos outlets doivent apparatre dans linspecteur. Si ce nest pas le cas, vriez Foo.h. Vous avez d faire une erreur ou ne lavez pas enregistr.

22

Cocoa

Figure 2.15Dnir la classe.

Identit

tablir les connexions La programmation oriente objet met laccent sur les rapports entre les objets. Nous allons prsenter les objets les uns aux autres. Les programmeurs Cocoa diraient : "Nous allons prsent dnir les outlets de nos objets." Pour prsenter un objet un autre, il suft de faire glisser, tout en maintenant enfonce la touche Contrle, le second (celui qui va connatre lautre) vers le premier (celui qui est prsent). La Figure 2.16 montre un diagramme qui illustre les connexions entre les objets de notre exemple.Figure 2.16Graphe dobjets.

Chapitre 2

Premiers pas

23

La variable dinstance textField de Foo doit pointer sur lobjet NSTextField de la fentre qui afche actuellement Label. Cliquez du bouton droit (ou faites un Contrle-clic si votre souris na quun bouton) sur le symbole qui reprsente linstance de Foo pour le champ de texte. Le panneau de linspecteur apparat. Faites glisser le cercle ct de textField vers le champ de texte qui afche Label (voir Figure 2.17).Figure 2.17Fixer loutlet textField.

Cette opration suft pour les pointeurs : vous devez simplement xer le pointeur textField de lobjet Foo de manire le faire pointer sur le champ de texte. Nous allons prsent xer loutlet target du bouton Initialiser pour quil pointe sur linstance de Foo. Par ailleurs, le bouton doit dclencher linvocation de la mthode seed: de Foo. Faites glisser, en maintenant la touche Contrle enfonce, le bouton Initialiser vers linstance de Foo. Lorsque le panneau apparat, choisissez seed: (voir Figure 2.18). Nous devons galement xer la variable dinstance target du bouton Gnrer pour quil pointe sur linstance de Foo et quil dclenche linvocation de la mthode generate:. Faites glisser, en maintenant la touche Contrle enfonce, le bouton Gnrer vers linstance de Foo. Choisissez generate: dans le panneau Received Actions (voir Figure 2.19).

24

Cocoa

Figure 2.18Fixer la cible et laction du bouton Initialiser.

Figure 2.19Fixer la cible et laction du bouton Gnrer.

Nous en avons termin avec Interface Builder. Enregistrez le chier, masquez lapplication, puis retournez dans Xcode.

Retour dans XcodeSil sagit de votre premier contact avec du code Objective-C, vous serez sans doute tonn de dcouvrir quil est assez diffrent dun code C++ ou Java. La syntaxe est peut-tre diffrente, mais les concepts sous-jacents sont identiques.

Chapitre 2

Premiers pas

25

Par exemple, voici comment dclarer une classe en Java :import com.masociete.Tata; import com.masociete.Titi; public class Toto extends Tata implements Titi { ...mthodes et variables dinstance... }

Ce code indique que la classe Toto hrite de la classe Tata et implmente les mthodes dclares dans linterface Titi. Voici la dclaration de la classe quivalente en Objective-C :#import #import @interface Toto: Tata { ...variables dinstance... } ...mthodes... @end

Si vous connaissez Java, Objective-C nest en ralit pas si trange. Comme Java, Objective-C autorise seulement lhritage simple. Autrement dit, une classe ne possde quune seule classe mre (ou superclasse). Types et constantes en Objective-C Les programmeurs Objective-C utilisent quelques types qui nexistent pas dans le monde C.m m m m m

id est un pointeur vers nimporte quel type dobjet. BOOL est identique char, mais il est utilis comme une valeur boolenne. YES vaut 1. NO vaut 0. IBOutlet est une macro dont lvaluation ne donne rien. Vous pouvez lignorer. Elle sert dindication Interface Builder lorsquil lit la dclaration dune classe dans un chier .h. IBAction quivaut void et sert dindication Interface Builder. nil est identique NULL. Nous utilisons nil la place de NULL pour les pointeurs vers des objets.

m m

26

Cocoa

Le chier den-tte Cliquez sur Foo.h. Examinez-le pendant un moment. Il dclare que Foo est une classe lle (ou sous-classe) de NSObject. Des variables dinstance sont dclares entre les accolades.#import @interface Foo: NSObject { IBOutlet NSTextField *textField; } - (IBAction)generate:(id)sender; - (IBAction)seed:(id)sender; @end

#import quivaut la directive #include du prprocesseur C. Cependant, #import sassure que le chier nest inclus quune seule fois. est import car il contient la dclaration de NSObject, qui est la superclasse de Foo.

La dclaration de la classe commence par @interface. Le caractre @ nest pas utilis dans le langage C. Pour rduire les conits entre le code C et le code Objective-C, les mots cls dObjective-C commencent par @. Voici quelques autres mots cls reconnus dans Objective-C : @end, @implementation, @class, @selector, @protocol, @property et @synthesize. En gnral, il est plus facile de saisir du code lorsque lindentation en fonction de la syntaxe est active. Dans les prfrences de Xcode, ouvrez le panneau Indentation et cochez la case intitule Syntax-aware indenting (voir Figure 2.20).Figure 2.20Activer lindentation en fonction de la syntaxe.

Chapitre 2

Premiers pas

27

Modier le chier dimplmentation Examinons prsent Foo.m. Il contient limplmentation des mthodes. En C++ ou Java, voici comment une mthode serait implmente :public void incrementer(Object source) { compteur++; champTexte.setIntValue(compteur); }

En clair, cela signie "incrementer est une mthode dinstance publique qui prend un objet en seul argument. La mthode ne retourne aucune valeur. Elle incrmente la variable dinstance compteur et envoie ensuite le message setIntValue() lobjet champTexte en lui passant compteur en argument". Voici la mthode quivalente en Objective-C :- (void)incrementer:(id)source { compteur++; [champTexte setIntValue:compteur]; }

Objective-C est un langage trs simple. Les spcicateurs de visibilit nexistent pas : toutes les mthodes sont publiques et toutes les variables dinstance sont protges. En ralit, il existe des spcicateurs de visibilit pour les variables dinstance, mais ils sont rarement utiliss. Par dfaut, ces variables sont protges et cela fonctionne parfaitement. Au Chapitre 3, nous reviendrons en dtail sur Objective-C. Pour le moment, copiez simplement les mthodes suivantes :#import "Foo.h" @implementation Foo - (IBAction)generate:(id)sender { // Gnrer un nombre entre 1 et 100. int generated; generated = (random() % 100) + 1; NSLog(@"Nombre gnr = %d", generated); // Demander au champ de texte de modifier son contenu. [textField setIntValue:generated]; } - (IBAction)seed:(id)sender { // Initialiser le gnrateur de nombres alatoires avec lheure. srandom(time(NULL)); [textField setStringValue:@"Gnrateur initialis"]; } @end

28

Cocoa

Puisque IBAction quivaut void, aucune de ces mthodes ne retourne une valeur. Objective-C est une extension du langage C et, ce titre, nous permet dappeler les fonctions, comme random() et srandom(), fournies par les bibliothques C et Unix standard. Avant de compiler et dexcuter des applications, nous allons modier les prfrences de Xcode. Tout dabord, il existe un journal, habituellement appel la console, o toutes les erreurs dexcution du code apparaissent. Ensuite, au cours dune journe, vous basculerez plusieurs centaines de fois entre le chier .h et le chier .m correspondant. Le raccourci clavier quivalant cette opration est Commande-Option-Flche vers le haut. Vous souhaitez que les deux chiers apparaissent dans la mme fentre (voir Figure 2.21).Figure 2.21Fichiers connexes dans la mme fentre, et effacement du journal.

Activer

Compiler et excuter Lapplication est prsent termine. Cliquez sur Build and Go. Si lapplication est dj en cours dexcution, une bote de dialogue vous demande si elle doit tre stoppe. Conrmez larrt. Si le code contient une erreur, le compilateur gnre un message qui signale un problme. Une indication derreur apparat dans le coin infrieur droit de la fentre. Cliquez sur le lien Failed pour ouvrir la fentre Build Results, qui dtaille les problmes. Cliquez sur les diffrentes erreurs pour slectionner la ligne de code en cause dans la partie infrieure de la fentre. Dans lexemple illustr la Figure 2.22, le programmeur a oubli un point-virgule. Lancez lapplication. Cliquez sur les boutons pour constater la gnration des nombres alatoires. Flicitations, vous venez de crer une application Cocoa oprationnelle !

Chapitre 2

Premiers pas

29

Figure 2.22Compiler lapplication.

Avez-vous vu des messages de journalisation sur la console ? Lorsque les choses se passent mal, les classes Cocoa envoient des messages sur la console. Vous devez donc la surveiller pendant les tests de lapplication. Pour lafcher, vous trouverez une commande dans le menu Run, mais il est sans doute prfrable de la conserver en permanence. Dans les prfrences de Xcode, activez lafchage de la console ds le lancement dune application (voir Figure 2.23).Figure 2.23Afcher la console lors du dmarrage dune application.

Toujours afficher la console

30

Cocoa

La mthode awakeFromNib Lapplication prsente un lger dfaut. Lorsquelle dmarre, le mot Label apparat dans le champ de texte la place de toute autre information intressante. Corrigeons ce problme. Nous allons faire en sorte que le champ de texte afche lheure et la date au moment du lancement de lapplication. Le chier nib est une collection dobjets qui ont t archivs. Lorsque le programme est dmarr, les objets reprennent vie avant que lapplication ne prenne en charge les vnements de lutilisateur. Ce mcanisme est un peu inhabituel. La plupart des concepteurs dinterface graphique gnrent un code source qui agence les lments de linterface. Au lieu de cela, Interface Builder permet au dveloppeur de modier ltat des objets de linterface et de lenregistrer dans un chier. Aprs avoir t ressuscits, mais avant le traitement des vnements, tous les objets reoivent automatiquement le message awakeFromNib. Nous allons ajouter une mthode awakeFromNib qui initialisera la valeur du champ de texte. Ajoutez la mthode awakeFromNib dans le chier Foo.m. Pour le moment, saisissez simplement son code. Vous le comprendrez plus tard. En bref, il cre une instance de NSCalendarDate qui reprsente lheure actuelle. Ensuite, il demande au champ de texte de xer sa valeur daprs le nouvel objet reprsentant la date :- (void)awakeFromNib { NSCalendarDate *now; now = [NSCalendarDate calendarDate]; [textField setObjectValue:now]; }

Lordre dapparition des mthodes dans le chier na pas dimportance. Assurez-vous simplement de les ajouter aprs @implementation et avant @end. Vous naurez jamais appeler awakeFromNib ; cette mthode est invoque automatiquement. Compilez et excutez nouveau votre application. Vous devriez voir apparatre la date et lheure (voir Figure 2.24).Figure 2.24Lapplication termine.

En Cocoa, de nombreuses choses, comme awakeFromNib, sont appeles automatiquement. La confusion que vous pourriez ressentir en lisant ce livre peut provenir de ces

Chapitre 2

Premiers pas

31

invocations automatiques. Il nest pas toujours vident de savoir si des mthodes doivent tre appeles explicitement ou si elles le sont automatiquement. Jessaierai de faire une distinction claire.

DocumentationAvant de clore ce chapitre, vous devez savoir trouver la documentation, car elle vous sera trs utile si vous bloquez lors dun exercice. Pour accder la documentation, le plus simple est de choisir Documentation dans le menu Help de Xcode (voir Figure 2.25).Figure 2.25La documentation.

Si tout en maintenant la touche Option enfonce vous double-cliquez sur le nom dune mthode, dune classe ou dune fonction, Xcode recherche automatiquement ce terme dans la documentation.

Travail ralisNous venons de raliser toutes les tapes de cration dune application Cocoa simple :m m m m m

crer un nouveau projet ; agencer une interface ; crer des classes personnalises ; connecter linterface aux classes personnalises ; ajouter du code aux classes personnalises ;

32

Cocoa

m m

compiler ; tester.

Examinons brivement la chronologie dune application. Lorsque le processus dmarre, il excute la fonction NSApplicationMain, qui cre une instance de NSApplication. Lobjet dapplication lit le chier nib principal et extrait les objets quil contient. Tous ces objets reoivent le message awakeFromNib. Ensuite, lobjet dapplication vrie la prsence dvnements. Le droulement de ces oprations est illustr la Figure 2.26.Figure 2.26Chronologie dune application.Lapplication dmarre Le fichier nib est charg

Pour chaque objet du fichier nib : La classe reoit alloc afin de crer une instance La nouvelle instance reoit init Les valeurs des variables d'instance sont fixes

Chaque objet du fichier nib reoit awakeFromNib

Le code dans lobjet personnalis est dclench Les vues sont actualises si ncessaire

La boucle principale de gestion des vnements dbute Un vnement est lu depuis la file dattente des vnements

Lapplication se termine

Le code de lvnement dans une vue (comme un bouton) est dclench

Lorsquil reoit un vnement de type clavier ou souris, le serveur de fentres place les donnes correspondantes dans la le dattente des vnements, destination de lapplication concerne (voir Figure 2.27). Lobjet dapplication lit les donnes dun vnement partir de sa le dattente et les transmet un objet dinterface utilisateur, comme un bouton. Linvocation de notre code est alors dclenche. Si le code modie les donnes dune vue, celle-ci est nouveau afche. Ensuite, lobjet dapplication vrie si un nouvel vnement est prsent dans sa le dattente. Ce processus de vrication de larrive dvnements et de raction leur prsence constitue la boucle principale de gestion des vnements.

Chapitre 2

Premiers pas

33

Figure 2.27Le rle du serveur de fentres.

Lorsque lutilisateur clique sur Quitter dans le menu, NSApp reoit le message terminate:. Cela termine le processus et tous les objets sont dtruits. tes-vous perplexe, troubl ? Poursuivez votre lecture avec le chapitre suivant an dobtenir des rponses vos interrogations.

3Objective-CAu sommaire de ce chapitre Crer et utiliser des instances Utiliser les classes existantes Crer ses propres classes Le dbogueur Travail ralis Pour les plus curieux : mcanisme des messages

Il tait une fois un homme, nomm Brad Cox, qui avait dcid que le monde devait passer un style de programmation plus modulaire. Le langage C tait rpandu et puissant. Smalltalk tait un langage orient objet, non typ et lgant. Brad Cox a introduit dans C les mcanismes de classes et denvoi de messages de Smalltalk. Le rsultat, Objective-C, est une extension trs simple du langage C. En ralit, Objective-C tait lorigine un simple prprocesseur C et une bibliothque. Objective-C nest pas un langage propritaire. Il sagit dun standard ouvert qui existe depuis des annes dans le compilateur GNU C (gcc) de la FSF (Free Software Foundation). Cocoa a t dvelopp en utilisant Objective-C, et la programmation Cocoa se fait gnralement en Objective-C. Pour enseigner le langage C et les concepts de base de lorient objet, il faudrait un livre complet. Au lieu dcrire ce livre, ce chapitre suppose que vous avez dj quelques notions de C et de la programmation oriente objet et prsente les bases dObjective-C. Si vous correspondez ce prol, vous constaterez que lapprentissage dObjective-C est facile. Dans le cas contraire, louvrage The Objective-C Language dApple sera une bonne introduction.

36

Cocoa

Crer et utiliser des instancesAu Chapitre 1, nous avons mentionn que les classes servaient crer des objets, que les objets avaient des mthodes et quil tait possible denvoyer des messages aux objets pour dclencher linvocation des mthodes. Dans cette section, vous allez apprendre crer un objet, lui envoyer des messages et le dtruire lorsquil est devenu inutile. Nous allons prendre en exemple la classe NSMutableArray. Pour c