Quel livre pour apprendre cocoa ?

A

Anonyme

Invité
Salut à tous,

Je vais essayer de me remettre à nouveau à cocoa, j'ai du temps en ce moment.
J'avais acheté le livre "Cocoa par la pratique" puisqu'il est en Français il y a quelques temps, mais j'avoue que j'ai eu du mal, même avec les bonnes notion de C que je possède.

Je compte investir dans un autre livre mais il y en a pas mal en Anglais.
Cocoa for dummies
Cocoa in a nutshell
Learning cocoa with objective-c
Cocoa recipes

Bref, je ne sais lequel prendre pour un niveau le plus débutant possible... Si vous avez acheter ces livres, dites le moi.
Merci.
 
J'ai bien aimé Cocoa par la pratique même si j'avoue ne pas avoir tout compris à fond (Je l'ai lu 3 ou 4 fois, une cinquième devrait faire l'affaire, avec du recul !).
Mais c'est le livre qui m'a le plus aidé. J'avais essayé Learning Cocoa de O'Reilly, que j'ai trouvé trop théorique et peu explicatif dans les exemples, surtout lorsqu'ils se compliquent, c'est le comble ! J'attends qu'un nouveau livre sorte car, depuis Panther, Cocoa a vu arriver, entre autres, les Object Controller qui permettent d'économiser du code. Donc les "anciens" guides risquent d'être dépassés pour la nouvelle philosophie de Cocoa. Mais je ne suis pas pressé.
Es-tu allé sur le site de ProjectOmega, qui propose pas mal d'exemples traduits en français ?
 
Ah les coquins, le forum MacGé et le forum Project:Omega ne font qu'un. Donc tu connais forcément ProjectOmega...
love.gif
 
Oui, je connais ProjectOmega. =)
J'ai fait les 2-3 premiers tuts pratiques pour Cocoa. Merci à eux pour ces traductions.

Je vais réessayer de m'atteler à "Cocoa par la pratique" mais c'est vrai que j'avais explosé au bout de 50 pages la dernière fois... même quand on relis des paragraphes 2 fois... c'ets hard.
 
Je pense que le mieux pour apprendre, c'est de se fixer un petit projet (sans être trop ambitieux).

Tu commences ta petite application et à chaque blocage tu fais une recherche. Après tu te replonges dans ton bouquin et ça te paraîtras plus clair
smile.gif
 
Je ne connais aucuns des titres que tu cites, mais je doute que la seule lecture de l'un d'entre-eux te permette d'acquérir la maîtrise immédiate de Cocoa.

Apprendre à programmer en Cocoa est un processus long et difficile, cette framework est vraiment particulière et ne ressemble en rien à ce que l'on peut rencontrer dans d'autre environnement (OS 9 , Windows, etc)
L'autre problème est que la doc Apple est loin d'être un modèle du genre
frown.gif


Le meilleur moyen de progresser en programmation, c'est la pratique: s'exercer encore et encore, et plusieurs mois seront certainement nécessaires avant de te sentir à l'aise.

Et puis ne pas griller les étapes, débuter par des choses simples: commencer par bidouiller les différents boutons et objets graphiques dans interfaceBuilder, et comprendre comment interagir avec eux. Et petit à petit le brouillard devrait s'éclaicir
smile.gif



Ne pas oublier qu'il existe une alternative à Objectivec: c'est Java. Beaucoup pensent qu'il est incongru d'utiliser Java en cocoa, mais c'est juste un autre moyen (outil) de faire les choses, pas la finalité.
Java permet juste de faire une appli Cocoa deux fois plus rapidement qu'en ObjectiveC (on parle ici de programmation en amateur, bien sûr), alors 'just have a try !'


Voilà, courage et persévérance devraient te permettre d'arriver à tes fins
wink.gif
 
Effectivement, dans Cocoa par la pratique, il ne faut pas s'arrêter au bout de 50 pages. Commence par le tutoriel de la page 83. Il permet de construire une application simple au départ, qui s'étoffe au fil des chapitres en utilisant les principes de base de Cocoa. Une fois que tu vois ton appli fonctionner, avec les différents "objets" qui communiquent entre eux, tu peux revenir régulièrement à la théorie (classes instances messages) des 82 premières pages.
Ne va pas trop vite ; à la fin de chaque chapitre, j'essaye de refaire l'application sans regarder le livre pour voir si j'ai compris les principes. L'écriture du code ne me parait pas très complexe, bien que je n'ai jamais fait de C. Le moins évident pour moi est de bien appréhender les différents objets qui vont être utiles, et les communications entre eux. Les diagrammes d'objets proposés par Cocoa par la pratique ne me sont pas très parlants, bien que je sois convaincu qu'il faille utiliser quelque chose comme ça.

Le manuel idéal serait interactif, proposant un projet à construire, avec des choix à faire (type d'application, controleur de l'appli, classes à créer, à utiliser, etc). Si on répond à côté, le guide explique pourquoi. Et on avance ainsi, petit à petit.

Enfin, si tu bloques à la page 85, fais-moi signe !
 
Déjà, merci de votre accueil.
wink.gif


Ludopac : oui, c'ets une bonne idée un petit projet. De toute façon, pour programmer il faut passer son temps à fouiner dans les docs... :) Mais je crois qu'une fois les principes "majeurs" compris (OO, messages, receivers, héritage...etc), ça doit aller, il faut juste chercher la syntaxe de tel ou tel langage... ici cocoa. J'ai fait beaucoup de php (mais pratiquement pas d'objet) alors je rame pour apprendre tous ces concepts, mais ça va finir pas rentrer j'espère.

mpergrand : je passe directement sur objectiveC, bien que java soit un "grand langage", car c'est le langage natif OS X (je t'apprends rien), alors quitte à apprendre un langage pour le Mac, j'essaie celui-là vu que j'en ai entendu et lu tant de bien :)

Tiff : merci, je vais m'y atteler ! Et je te ferai signe si je patine. C'est clair qu'il faut refaire les exercices sans le bouquin, bonne idée.
 
Si tu comprends l'anglais je te conseille aussi l'excellent http://www.cocoadev.com/ qui complète bien la doc d'Apple.

Comme bouquin j'utilise aussi Objective-C précis & concis de chez O'REILLY, attention ce n'est pas un bouquin pour apprendre cocoa mais juste une synthèse du langage Objective-C (syntaxe, gestion de la mémoire,etc).
 
Bon, j'ai fait les 6 premiers tutorials project-omega (jusqu'au colorimètre), et je me replonge dans Cocoa par la pratique.

Et je commence à piger plein de choses. :) Joie.
vive cocoa.
 
J'ai fini le tut sur la gestion des employés dans cocoa par la pratique (à vrai dire je n'ai compris que la moitié du code), ça compile, pas d'erreurs. Mais lorsque j'ajoute un employé, rien ne se passe... :-(

Tu as eu un Pb similaire Tiff ?
 
Pas de problème pour l'appli de gestion des employés du chapitre 4.
Au démarrage de l'appli, une fenêtre s'ouvre avec écrit :
Employé 1 sur 1
Nouvel employé
0,00 %

SI je clique sur Créer employé, j'obtiens :
Employé 2 sur 2
Nouvel employé
0,00 %
et les boutons Employé précédent et Supprimer employé deviennent actifs.

Les champs Nom et augmentation ne changent pas, car, par défaut, tous les employés créés s'appellent Nouvel employé et ont un taux de 0,00% (code écrit dans la méthode init de la classe modèle Person, et que tu peux modifier comme tu veux).

remarque : l'interface utilisateur de cette première appli n'est pas très performante, mais ce n'est qu'un début

Quel est ton problème exactement ? Si tu changes le nom et l'augmentation et que tu cliques sur Créer employé, que se passe-t-il ? Vraiment rien ? Le bouton est-il bien relié à File's Owner ?

Pour m'écrire directement : [email protected]
 
Je ne répèterai jamais assez ceci :
Pour bien programmer en Cocoa il faut bien comprendre le concept MVC. Pour cela une démarche toute bête. dès que t'as une idée de dev, commence par dessiner sur un bout de papier ton interface graphique ou du moins comment tu l'imagines.
Ensuite tu donnes des noms à des éléments de ton interface. Par exemple un bouton valider_saisie, un champ NOM un autre PRENOM etc...
Ensuite tu dessines sur une autre feuille un objet sous forme de 'patate' dans lequel les noms et prenom sont ce qu'on appelle des IBOUTLET (pour zone de Interface Buider d'alimentation des champs), et au nom des boutons tu associes des actions ou IBACTION. Ex : valider_saisie.

Le dessin de ton interface c'est la pertie VIEW, ta patate c'est ta partie CONTROLLER.
Si tes donnée proviennent de fichiers ou autres chose, tu dois décrire sa structure par exemple
Employe : nom, prenom, adresse ...
et tu défini donc un objet EMPLOYE. Ce sera ton MODELE.
Le controller fait la liaison entre ton modèle et ton interface.
Une fois que t'as saisi ce concept, les concepts fondamentaux à connaitre sont la délégation et la Notification.
Pour mieux comprendre le concept objet, ne te casse pas la tête. Dès que t'as un problème à résoudre, dis toi que tu veux un objet qui peut le résoudre. Ensuite tu liste toutes les actions que cet objet est censé accomplir. Tu appliques le concept MVC. C'est assez rudimentaire mais croies moi c'est bête et efficace. J'ai plein de copains qui sont devenus des dieux de cocoa en appliquant ces règles qui sont primaires certes mais te permette de vite assimiler le concept fonadamental et te permet de t'instruire ensuite par les lectures ou mieux en lisant bien les détails des objets des Frameworks Fondation Kit et Application Kit. Le premier contient tous les objets que tu utilises dans ton programme en codant le CONTROLLER, le second contient en fait le détail des objets que tu utilises dans Interface Builder.
Un exercice qui te permet d'appliquer tout ce que je viens de dire :
Une petite appli avec une interface comprenant une zone de saisie texte (texteView), deux zones d'affichage.
Le but de l'appli :
Au fur et à mesure que l'on saisie du texte dans la première zone, la seconde affiche le nombre de mots que tapés et la troisième le dernier mot tapé.
Cet exercice réuni la plupart des notions à connaitre sur Cocoa.
 
Merci manu.
J'ai lu plein de fois ce fameux terme MVC appelé paradigme je crois.

Je suis en train de faire le premier exercice de cocoa par la pratique :
- 1 zone de saisie
- 1 bouton
- 1 zone qui affiche le nombre de lettres du mot entré dans la zone de saisie.

Cet exercice se rapproche du tient. Mais je patine...
rose.gif

(J'ai demandé de l'aide à Tiff par mail)


Toutefois, si j'avais à faire le tient, voilà ce que je ferai :

- 3 outlets pour les 3 champs (text saisi, comptage mots, dernier mot)
- 2 actions
- je crée une classe appelée "Counter", je l'instancie.
- je relis mes oultets (instances vers outlets, puis connect)



Dans xtools, je me retrouve avec mon fichier Counter.h ou sont déclarés mes outlets, et mes actions.
Maintenant, je vais dans Counter.m pour développer mon contrôleur.
Et là, je pige pas des trucs.

Dans ma première action, je dois compter le nombre de mots de la phrase par une méthode cocoa.
Deuxième action : prendre le dernier mot de la phrase.
Et ensuite envoyer ça à mes outlets, par exemple : afficheNbWord et afficheLastWord comme ça :
[afficheNbWord setIntValue:compteur];

Bon, ya des trucs flous ds ma tête. Les actions sont des types de méthodes particuliers. Seulement, est ce qu'il faut appeler une méthode pour compter le nombre de mots depuis cette action, méthode qui peut être définie par un void, ou bien est ce qu'on fait tout à l'intèrieur de l'action (si c possible) ?

Par exemple, pour compter les lettres d'un mot,on te dit d'utiliser cette méthode : -(int) length;
Est-ce qu'on doit se servir de ça dans l'action ou à part ?

Je viens du php, et en php on écrirait :
$compteur_lettres=méthode($ma_var);

là je voudrais écrire un truc de ce genre :
[nb_lettres length: textSaisi];

 
<blockquote><font class="small"> izostar:</font><hr />J'ai testé ça marche. :)

[/QUOTE]
La syntaxe générale pour les messages ObjC:
(rv =) [obj methode:)param1 (puis:param2) etc)];

Ce qui correspond à l'appel de fonction suivant:
(rv =) imp(self = obj, _cmd, param1, param2, etc);
avec _cmd = @selector(methode:puis:etc:)
et imp = l'implémentation de la méthode pour la classe en question...

Allez, au boulot!
up.gif

Hésite pas à poser des questions.
Bon courage...
wink.gif
 
la tortue a dit:
Allez, au boulot!
up.gif

Hésite pas à poser des questions.
Bon courage...
wink.gif

Merci.
T'inquiètes, des questions je vais en avoir des tas... :)

Par exemple, je comprends pas ce qu'est un "selecteur".
 
<blockquote><font class="small"> izostar:</font><hr />Par exemple, je comprends pas ce qu'est un "selecteur".

[/QUOTE]
En gros selector = nom de methode.
Par exemple: [obj methode:param];
est équivalent à: [obj performSelector:mad:selector(methode:) withObject:param];
et encore à: objc_msg_send(obj, @selector(methode:), param);

En fait quand tu écris : [obj methode:param]
le compilateur génère le code suivant: objc_msg_send(obj, @selector(methode:), param);

C'est à peine plus compliqué si la méthode renvoie une valeur de type structure.
Ici "selector" est un identifiant de méthode (int) correspondant au nom de la méthode.

Voir aussi les fonctions NSStringFromSelector() et NSSelectorFromString()...
wink.gif