# Les choses serieuses commencent....pour OS X



## Manu (17 Octobre 2000)

Maintenant que tout le monde a installé et joué avec la beta d'OS X, il est temps de penser aux choses plus sérieuses. Donner à ce système que nous aimons tous, des applications qu'il mérite.
En effet Apple contrairement à son habitude, a mis en téléchargement sur son site developpeurs, les outils de développement pour mac os x.
Pour les obtenir, rien de plus facile, il s'uffit de s'inscrire comme developpeur online.
Depuis le temps que je vous en parle, il faut absolument que tous ceux qui n'avaient jamais eu l'occasion de développer sous mac s'y mettent car les outils de dev issus de ceux de NeXT sont absolument géants et sans concurrence.
Il y a Project Builder pour créer des applications, les compiler et les tester et Interface Builder pour créer des éléments de l'interface graphique de votre appli, et tout cela très facilement.
On peut développer en Java ou en objective C ainsi qu'en C++ pour les applis Carbon.
Pour ceux qui sont tentés par le développement objet et qui n'ont jamais osé le faire, c'est franchement le moment de s'y mettre d'autant plus que Cocoa est hyper facile et très très élégant à utiliser.
je pense d'ailleurs qu'il est plus aisé de passer du C à cocoa pour aborder l'objet que de passer par C++ qui pour moi n'est vraiment pas de l'objet.
Pour ceux qui ne savent pas comment débuter, je pourrai avec certains d'entre vous dans ce forum proposer des articles et discuter de la façon d'aborder le développement d'une appli quelle qu'elle soit.
Encore une fois n'ayez pas peur mettez vous- y et je vous assure vous serez accro à cocoa et vous admirerez sa puissance et son élégance et comprendrez pourquoi les applis NeXT étaient si différentes, si puissantes  et si rayonnantes, et pourquoi cocoa a la réputation de permettre de développer des applications UNIX et orientées objet 10 fois plus vite qu'avec n'importe quel environnement de développement.
Je compte sur vous.
On va beaucoup s'amuser je vous le promets.
A vous de jouer.

A+ 
Manu


----------



## ficelle (17 Octobre 2000)

mais concretement, comment doit on s'y prendre pour ecrire un programme ? par ou doit on commencer quand on y connait rien de rien ?
a+


----------



## Membre supprimé 2 (17 Octobre 2000)

Connais-tu un livre en français qui permet d'apprendre le C ou C++ (orienté Mac - CodeWarrior) à un novice ?

Je connais la programmation HyperCard, REALbasic et PHP. J'ai déjà essayé d'appendre le C. Sans résultat. Même les exemples fournis avec CodeWarrior ne fonctionnent pas ! (J'ai pas de chance 

------------------
http://www.c-schmidlin.com


----------



## Membre supprimé 2 (17 Octobre 2000)

ohhh le C ne devrait pas trop poser de problème si tu as déja pas mal de connaissance en PHP et d'autres langages.

je ne sais pas malgré tout s'il n'est pas préférable de commencer directement par le C++ quand on est débutant.
ça permet d'avoir un regard neuf et sans défaut (le C apporte pas mal de défaut ;-)

Une question pour Manu:
ça fait des années que j'ai décroché la programmation sur Mac, qu'en est-il de la Toolbox, des Inside Mac etc... qui étaient à l'époque indispensable pour Mac... Doit-on toujours les garder près de soi? Qu'utilises tu au quotidien, etc...


[Ce message à été édité par pierrelyon (Édité le 17 Octobre 2000).]


----------



## PowerMike (18 Octobre 2000)

Je suis hyper interessé par le développement sous OS X. La programmation sous Mac était de loin plus agréable que la programmation d'une interface sous Windows95.
Je connais le C, C++, Java et tous les langages de Script. Est-ce utile ?
J'aimerais développer un vrai client IRC et gratuit lui.
De toute façon, je pense que les programmeurs d'applications Classic ont un net avantage. Mais sinon, tout reste à faire sur OS X. C'est le moment ou jamais de développer nos logiciels.
Je suis très excité.


----------



## steg (21 Octobre 2000)

&gt;De toute façon, je pense que les programmeurs d'applications Classic ont un net avantage. Mais sinon, tout reste à faire sur OS X. C'est le moment ou jamais de développer nos logiciels.
Je suis très excité.

J'en suis pas si sur : ils programmaient (en C ou pascal voir meme C++)  des API completements differentes(toolbox) que les API cocoa (qui se programment en java ou objective-C, la difference n'est pas enorme, m'enfin bon)... ils ont l'experience va-t-on dire...


----------



## PowerMike (21 Octobre 2000)

On n'est pas obligé de programmer avec les API COCOA. On peut arriver au quasi même résultat avec les API CARBON. Donc ceux qui peuvent carboniser leurs Applis sont avantagés


----------



## Manu (22 Octobre 2000)

Salut.

J'étais sur un projet qui m'a absorbé et n'ai pas pu poursuivre cette discussion comme promis.
Je vais essayer de répondre aux différentes questions posées.
Pour commencer, je pense que la connaissance du langage C est un minimum pour se lancer. Il existe un excellent ouvrage  dont voici les références:
Le livre du C premier langage our les débutants en programmation 
ecrit par Claude Delanoy et paru chez Eyrolles en 1994.
Au risque de te décevoir PowerMike, pour le développement d'une application sous OS X, Apple recommande fortement Cocoa. Carbon sert surtout pour faciliter le portage des applis actuels.
L'avantage de cocoa par rapport à carbon c'est que :
- Carbon ce sont les apis de la Toolbox de mac os qui ont été relooker et réécrites pour certains, pour permettre aux applis 'carbonnisées' de tirer partie des technologies offertes par mac os x.
- Cocoa ce sont des apis développées dès le départ pour NeXTSTEP dont les principaux éléments du système ne sont autres que ceux  de mac os x en version avancée.
Ainsi cocoa est l'environnement naturel de développement sur mac os x.
Non content d'être le premier environnement de développement orienté objet, cocoa dispose des concepts objet d'une puissance et d'une élégance uniques.
Je vous assure que lorsque vous l'utiliserai, vous tomberez sous le charme et vous vous demanderez comment une perle pareille existe depuis près de 10 ans et demeure inconnue.
Pour démontrer la puissance de cet outil, j'ai développé en 15 minutes (j'aurai pu faire moins si je n'avais étayé ma demo par des explications), devant des copains médusés, un petit traitement de texte affichant en temps réel, le nombre total de mots et le dernier mot du texte.
Pour utiliser Cocoa, il faut:
- Connaitre le langage C
- Connaitre les concepts de l'orienté objet. Mais rassurez-vous, il est plus facile de le faire quand on est débutant que quand on est programmeur expérimenté.Cela peut paraitre bizarre mais c'est vrai.
Les gars qui ont développé Nisus Writer s'en sont d'aiileurs apperçus  puisqu'ils ont décidé, au lieu de porter leur appli sous carbon, de la réécrire complètement sous cocoa. Et croyez-moi ils ont raison et cette version sera fun. Au risque de me répéter, la grande force de Cocoa réside dans ses frameworks (ensemble d'objets) qui constituent des briques de haut niveau permettant de bâtir des applications puissantes.
Prochainement je parlerai de la façon d'aborder le développement sous cocoa. Ceux qui ont l'ADSL ou le cable peuvent télécharger les outils de développement et éventuellement les graver pour que d'autres en profitent.
Ces outils valaient il y a 4 ans près de 5000 dollars US.
Plus on est nombreux mieux c'est. 
C'est le moment ou jamais. Mac OS X est à ce jour l'OS de rêve pour un programmeur.
A+

Manu


----------



## Manu (22 Octobre 2000)

PS : Pour etayer mes propos, je vous renvoie à l'article paru dans le dernier Univers Macworld (novembre) en page 122.

Manu


----------



## Membre supprimé 2 (23 Octobre 2000)

Merci Manu pour tes explications. Tu m'as donné (et à d'autres, je suppose) envie de m'y mettre.

------------------
http://www.c-schmidlin.com


----------



## Number One (23 Octobre 2000)

Vos propos m'on vraiment donné envie de me mettre à la programation. Seulement, je n'ai jamais écris une seule ligne de code en dehors d'AppleScript  
	

	
	
		
		

		
			





. J'aimerais savoir si la seule façon de si mettre et de se plonger dans un bouquin et combien de temps cela prends pour devenir un programmeur potable  
	

	
	
		
		

		
		
	


	




 ?  

------------------
@+ Number One

++++Mac OS Forever++++
Number One on the net 
MForce, le site qui sutilisecomme un Mac !


----------



## PowerMike (24 Octobre 2000)

Juste un précision : c'est le monsieur d'Apple qui a dit qu une bonne appli carbon ne se différencierai pas trop au niveaux fonctionnalités d'une appli Cocoa.
Toujours est il c'est qu'effectivement les MacOS X Beta Tools sont vraiment top;
Au cas ou vous n seriez pas au courant ( c'est surement le cas, j'ai pour projet de porter un client IRC programmé à l'école sous Win32 vers OS X. Il faudrait, et ce sera le plus dur je pense une bonne interface graphique bien pensée.
Avis au amateurs, de l'aide serait la bienvenue ...


----------



## Membre supprimé 2 (24 Octobre 2000)

Salut,
j'ai une petite expérience en pascal avec codewarrior et je commence le java.
Là je suis interessé.
J'ai un bouquin de c en français livré avec codewarrior, je pense m'y mettre.
Par contre, dans ma contrée lointaine l'adsl c'est pas pour tout de suite bien qu'ils en parlent chez fti.
Alors si quelqu'un me rendait le grand service de m'envoyer les outils d'apple pour dévellopé sur OS X ça m'aiderait.
Mon email : ggc@mac.com


----------



## szamcha (24 Octobre 2000)

hmmm. il me semblait que le C ne servait qu'aux couches basses de MacOSX. pour l'appel de Cocoa, ce n'était pas soit en Objective C ou en java ?
Il me semble que l'utilisation du java soit plus profitable du fait d'une certaine universalité de la chose.
Qu'en est-il ? pifou G pas encore eu le temps d'aller sur ma boite développeur pour repiquer les outils de dev. faut que j'y aille ce soir.


----------



## Manu (24 Octobre 2000)

Salut,
PowerMike tu fais sans doute allusion à l'interview de Ken. En fait c'est normal qu'il le dise cependant n-oublie pas qu'il précise justement ce que j'ai dit à propos de cocoa.
Szamcha pour te rassurer sache qu'Objective-C n'est autre que le C dans une syntaxe smalltalk.
Dans cocoa la chose la plus importante n'est pas de savoir programmer mais de comprendre le concept objet. Cela vous permet de faire des prototypes et aux programmeurs d'écrire le code, c'est de loin la partie la moins difficile croyez-moi.
je vais essayer de le démontrer à travers un exemple : comment aborder le développement du jeu bien connu Puissance4.
Le jeu se présente sous la forme d'une boite carrée dans laquelle chaque joueur fait tomber une pièce dans une colonne quelconque Le jeu se jouant à 2, le joueur qui a gagné est celui qui le premier aura réussi à aligner sur une ligne, une colonne ou une diagonale 4 pièces successives.
Question : comment s'y prendre?
Rêvons un peu. supposons que l'on dispose d'un programme Puissance4 qui fait tout ça. Comment se présentra-t-il?
Supposons alors qu'il dispose d'une interface par lequel on dialogue avec lui nous llons essayer d'illstrer ce dialogue.
- On lance le programme, il affiche l'nterface et demande au 1er joueur de jouer.
- Le joueur glisse une pièce dans une colonne j.
- Puissance4 demande au second joueur de jouer.
- le second joueur fait de même.
- Au bout d'un certain temps, Puissance4 declare le joueur 2 gagnant.
Si par contre chaque joueur avait épuiser toutes ses pièces, Puissance4 déclare match nul aucun gagnant.
Pour comprendre comment fait Puissance4, on va le dissequer et voir comment il est composé et à quoi lui serve chaque élément, et quel est le rôle de chacun.
La premiere chose on s'apperçoit que Puissance4 est divisée en lignes et en colonnes. A chaque coup Puissance4 voit si le coup est gagnant c'est-à-dire qu'il y a sur une ligne, une colonne, une diagonale, 4 pièces qui se suivent. Ainsi donc Puissance4 est formée de Lignes, de Colonnes et de Diagonales. Par contre il ya 2 sortes de Diagonales celles allant de gauche à droite et de bas en haut qu'on appellera Diagonale gauche et celles allant de droite à gauche et de bas en haut que l'on appellera Diagonale droite.
Supposons qu'il existe un dialogue également entre Puissance4 et ses composants.
- Un joueur joue.
-Puissance4 demande à chaque ensemble dinserer la nouvelle pièce si elle lui appartient.
-Puissance4 demande à chaque ensemble le coup est_il gagnant?
- Le premier ensemble (une Ligne une Colonne, une Diagonale gauche ou une diagonale droite) qui s'apperçoit que le dernier joueur vient d'aligner 4 pièces répond oui.
- Puissance4 declare le joueur vainqueur.
- Aucun ensemble ne répond oui.
- Puissance4 demande à l'autre joueur de jouer...etc.

Résumons mous.

On vient de créer un objet Puissance4 qui a comme attributs un ensemble de lignes de colonnes, de diagonales droites et gauches.
On a donc un deuxième objet qu'on appelera EnsembleDuJeu qui a comme attribut son type (1 pour ligne, 2 pour colonne, 3 pour diagonale droite, 4 pour diagonale gauche), 
un objet EnsembleDeJeu répond aux messages suivants: (On suppose que la dernière pièce a été glissée en colonne j et ligne i)
- La pièce i,j t'appertient-elle?
- Insère la pièce i,j si elle t'appartient.
- il y-at-il un coup gagnant?
- quelles sont les coordonnées de ta prochaine case libre.
- combien de cases vides?
- Combien de cases occupées.
- Le joueur aux pièces rouges a-t-il un coup favorable?
....etc
On va aussi créer un objet case qui représente l'endroit recevant une pièce.
ses attributs sont :
- Ses coordonnées.
- Si elle est libre ou occupée
- Si elle est ocupée la couleur de la pièce.
Une case répondra égaleent aux messages que l'on devine aisément.
Ainsi un objet EnsembleDeJeu est composé de cases.
Amusant direz-vous?
Eh bien nous venons tout bonnement de faire ce qu'on appelle Modélisation du Jeu.
On vient donc de créer la partie Model du développement cocoa dans lequel Apple conseille fortement d'utiliser le pradigme MVC, pour Model View Controller.
Généralement c'est la démarche qui permet de créer des modèles. Il y a par ailleurs des théories entières la dessus. Quand vous entendrez parler de methode UML eh bien ça conduit à ça.
Cela vous parait simple et amusant mais croyez-moi c'est la partie qui prend le plus de temps dans le développement objet.
Une fois terminée, on décrit les objets par leurs attributs et les messages auxquels ils sont censés répondre. Cela s'appelle faire du prototypage. Ensuite au programmeur le soin d'implémenter ces objets en utilisants Project Builder.
La prochaine étape consiste à définir l'interface grapphique.
Cela se fait en utilisant Interface Builder.
Pour terminer, on définit le ou les Controller qui font le lien entre les éléments Model et l'élément View. Là également on utilise Interface Builder.
C'était long mais je voulais absolument vous le montrer. 
A+
Manu


----------



## Manu (24 Octobre 2000)

Pour PowerMike,
Si tu veux un client IRC sur OS X qui existe va sur le site www.stepwise.com/Softrak 
et tape IRC dans la zone recherche.
Par contre si tu veux le développer toi même pour t'entrainer, Envoi moi le code que t'as j'essaierai de te donner un tuyeau. L'interface graphique est en général très simple sous Interface Builder sauf si tu utilise des éléments d'interface plus sophistiqués.
Salut.


----------



## PowerMike (25 Octobre 2000)

Oui je veux en développer un pour nous les francophones qui serait beau et bien pensé ... Les sources je les ai déjà sous Win32, c'est un clien tout bête qu'on a fait en classe pour tester le serveur IRC qu'on a aussi réaliser pour un projet.
La pogrammation des sockets sous Win32 et assez similaire à la programmation des sockets sous Unix donc je pense que ce sera pas le plus dur.
Par contre il faut une interface bien pensé qui permette de masquer à l'utilisateur les commandes IRC. Donc plus simple pour lui ...
Par contre comment relier l'interface au projet .. j'en suis  pas encore là dans la doc mais tu peux surement me donner une idée.


----------



## Manu (27 Octobre 2000)

PM,

As-tu téléchargé les outils de développement. Car avec Cocoa tu peux facilement créer une interface avec Interface Builder.
Essaies et fais moi signe si tu rencontres des difficultés.

Manu


----------



## PowerMike (27 Octobre 2000)

Oui, j'ai les outils, pour l'instant je me suis mis à Obj-C juste histoire de connaitre la syntaxe ... j'ai vu ce qu'on pouvait faire avec Interface builder mais il faut que je pense vraiment à l interface. Mais je sais pas comment faire le lien entre les objets issus de mon modele et l'interface


----------



## Manu (28 Octobre 2000)

PM,

La démarche à suivre est la suivante :

Dessines sur papier ton interface. N'oublies pas que c'est par elle que les utilisateurs dialogueront avec ton appli. Pour chaque bouton, définis son action qui sera une méthode à executer. A chaque zone de saisie ou de reception de données, donne un nom.
Lance Interface Builder. Normalement tu te retrouves avec une fenêtre vide.
C'est dans cette fenêtre que tu vas reproduire ton interface en prenant des éléments dans les palettes proposées par IB.
Dans la NIB (La fenetre ou il y a le first responder) cliques sur l'onglet Classes. selectionne NSObjet puis tape 'ENTER' Remplace la classe MyObjet qui est proposée par IRCController ou ce que tu veux. Selectionnes Outlet puis fait 'Enter' remplace le nom proposé par le nom d'une zone de saisie ou d'entrée de données définie plus haut. Refais cette manip autant de fois qu'il y a de noms.
Selectionnes Actions puis fait 'ENTER' remplace le nom proposée par une des méthodes définies plus haut. Tu le fais autant de fois que tu as de méthodes.
Tu viens de créer l'objet Controleur qui fait le lien entre ton interface et ton modèle.
Selectionne le nom du controleur que tu viens de créer.
Dans le menu Classes de IB choisi instantiate. Tu verras dans la NIB (onglet instance) une brique de créer. C'est ton controleur.
En maintenant tu vas Faire le lien entre ton controleur et ton interface.
En maitenant la touche Control appuyée, tire un trait d'un bouton vers ton objet Controleur (la brique). Une fenêtre Inspecteur s'ouvre dans laquelle tu retrouves les actions que tu as définies. Choisis l'action déclenchée par ce bouton puis en bas de la même fenêtre cliques sur Connect. Fais pareil pour tous les boutons et toutes les acions.
Toujours en maitenant la touche Contol appuyée, tires le trait cette fois-ci depuis la brique jusqu'à une zone de données (outlet) pareil dans inspecteur tu as la liste des outlets que tu as définis, choisis la bonne et fais Connect. Refais autant de fois qu'il y a d'outlets.
Dans la NIB, clique sur l'onglet Classes, choisis le nom du controleur, puis dans le menu Classes selectionnes 'Create files' puis répond oui. 
Le code de ta classe est crée. En objective-c tu as le header IRCController.h et l'implementation IRCController.m.
Dans le .m tu dois définir une méthode awakeFromNib. C'est dans cette méthode que tu initialises les zones de ton interface. (zone de saisie à blanc par exemple).
N'oublies pas dans le .h de faire #import xxxx.h et dans le .m d'importer les xxx.m avec xxx les classes de ton model.
Dans Project Builder tu peux alors éditer ton code. Tu peux aller dans Interface Builder et dans le menu File tester ton interface pour voir quelle tronche elle a.
Lorsque l'application affiche l'interface, la première méhode qu'elle exécute est awakeFromNib c'est pour cela que tu y initialise les éléments de ton interface.

Bonne chance
Manu


----------



## PowerMike (28 Octobre 2000)

finalement ça a l'air assez simple. En fait je pensais qu'il fallait faire le code avant, je sais pas pourquoi j'avais ça dans la tête. C'est plus logique comme ça.
Une autre pepite question : où puis-je trouver le modèle complet des classes utilisées, toutes les classes héritant de NSObject quoi ?


----------



## PowerMike (29 Octobre 2000)

finalement ça a l'air assez simple. En fait je pensais qu'il fallait faire le code avant, je sais pas pourquoi j'avais ça dans la tête. C'est plus logique comme ça.
Une autre pepite question : où puis-je trouver le modèle complet des classes utilisées, toutes les classes héritant de NSObject quoi ?


----------



## Manu (29 Octobre 2000)

Salut PM,

Saches que Cocoa est composé de 2 Frameworks. Foundation Kit et Application Kit.
C'est dans la foundation Kit que tu trouves les classes dont tu as besoin pour définir tes classes modèles. l'Application Kit regroupe les classes décrivants le éléments d'interface. 
Ainsi quand tu utilises un éléments de la palette d'Interface builder, c'est un objet de l'Application kit que tu utilises. L'inspecteur est l'interface par laquelle tu modifies les attributs de l'objet.
Je t'assure que quand tu utilises Cocoa, tu sens que tu fais du vrai orienté objet. De plus, beaucoup d'éléments du système OS X sont impléméntés sous forme d'objets on les appelle des wrapper. Leur utilisation est d'une simplicité biblique. Par exemple Tu veux exécuter une méthode tMethode définie dans un objet tObjet et qui prend pour paramètre tParm dans un thread? rien de plus facile tu fais [NSTread detachNewThreadSelectorselector(tMethode 
	

	
	
		
		

		
			





 toTarget:[tObjet class]  withObject:tParm];
Si la methode est dans l'objet courante , tu remplace tObjet par self.
Objective-c est cent fois plus simple que C++.
Il y a des notions dans cocoa qu'il faut savoir et que je détaillerai dans un article prochainnement.

A+
Manu


----------



## PowerMike (31 Octobre 2000)

Merci, la gestion du multithread me faisait un peu peur parce que j'ai jamais vraiment utliser (saufs cas d'ecole : un processus A fait ci, il alnce 3 threads qui font ça ... blabla)
Si Obj-C est plus simple que C++,j'achète tout de suite. PArce que sur MAc je trouve que la programmation classique en C etait plus facile qu'en C++. Pour la programmation d'une interface sous Windows, j'en parle même pas tellement c'est la folie : y a du code partout, c'est pourri ...


----------



## Manu (31 Octobre 2000)

Salut,
PM, je suis content que cocoa t'interesses. En effet j'ai fortement envie de faire partager à tous ceux qui veulent développer des applications ou surtout qui ont des idées de développement et ne savent pas comment s'y prendre ou par où commencer, l'admiration que j'ai devant cocoa.
J'ai essayé de faire du C++, ça m'a découragé car je croyais fortement aux vertus de la programmation objet. Lorsque j'ai découvert les apis de NeXT (cocoa aujourd'hui) je suis tmombé à la renverse et j'ai tout de suite compris pourquoi les applications NeXT du tout petit freeware aux applis plus complexes comme Improov étaient hors du commun. Bref les gars chez NeXT avaient pris 10 ans d'avance que dis-je 20 ans peut-être.
Non content d'être une merveilleuse plate forme de développement, il est également très facile à utiliser.
Le mariage de cette techno et la facilité légendaire du Mac ah! quel rêve disais-je à l'époque. Et voilà nous y sommes.
Comme il l'avait fait en donnant au Mac sa face la plus séduisante c'est-à-dire son interface et sa facilité naive, Steve Jobs via un détour chez NeXT comme pour préparer une nouvelle révolution, revient offrir au Mac une jeunesse que dis-je une force (unix) et une élégance (aqua) qui nous montre clairement que le mac est devenu Adulte.
Et croyez-moi, il va faire très très mal. 
La réorganisation courante chez Apple me fait croire que nous allons vivre durant l'année 2001 une odysée des plus magiques depuis que nous utilisons nos macs. 
C'est la raison pour laquelle j'ai commencé à économiser pour non plus m'acheter un Power mac mais un Power Book chargé de Mac OS X pour faire le tour de France des Entreprises montrer ce que sont OS X, WebObjects, EOF, Java, Internet sur le meilleur Unix avec la meilleure interface graphique sur le meilleur portable qui soit.

A+
Manu


----------

