Débutant Cocoa perdu, totalement perdu!

Publié : 20.04.2005 - 13h46 par Jilam

Bonjour,

Je m'adresse à tous les Pros de Cocoa présents ici (les autres aussi hein, il ne faut pas être sectaire): :lol:

Je suis en train de faire switcher (puisque c'est là le mot "officiel"!) mon entreprise, mais pour cela je dois réaliser une application permettant de gérer nos devis/commandes/clients...

Donc, plein de bonne volonté (il faut dire que je suis à l'origine de cette décision de migrer vers OSX), j'installe les outils de développement et j'essaie d'en faire quelque chose…
Seulement, j'ai beaucoup de mal à comprendre la "philosophie" du couple XCode/InterfaceBuilder : je développais jusqu'à présent avec Delphi où il fallait juste choisir un élément graphique et le déposer sur une nouvelle fenêtre puis régler ses propriétés dans l'inspecteur d'objets : pour un bouton par exemple, on défini sa propriété "text" à 'Quitter', on double-clique sur le bouton, Delphi nous prépare la procédure "Bouton1.Click" avec sa déclaration en début de fichier, on tape 'Application.Terminate;', et au lancement de l'appli, cliquer sur le bouton 'Quitter', quitte l'appli! Et je n'arrive pas à faire l'analogie avec XCode/IB : dans IB, je Drag&Drop le bouton, lui donne un texte "parlant", et après???

Là est mon premier problème, le deuxième étant que toutes les documentations que j'ai pu trouver partent du principe que le lecteur connaît le C/C+/C++, bien que l'on lise souvent que cela n'est pas nécessaire, voire déconseillé (pour le C face à l'ObjectiveC qui est orienté objet).
De plus, j'ai fais l'acquisition de 2 livres :
- "Langage C - Norme ANSI" de Kernighan & Ritchie
- "Programmation Cocoa pour MacOSX" de A. Hillegass
Donc des références dans leur domaine (le premier par les "inventeurs" du langage, le second par le premier formateur des dévelopeurs d'Apple!), mais cela ne m'aide pas, surtout pour un habitué à Delphi et au Pascal car j'ai l'impression qu'il me manque la passerelle entre ces deux livres…

J'avoue être très déçu à cause de ces problèmes, moi qui me réjouissais de développer sur un système qui m'avais conquis (malgré -ou peut-être à cause de!- 15 ans sur PC/ Windows) et dont on vante la simplicité et le côté "user-friendly". Je ne néglige pas l'aspect humain dans l'histoire, en l'occurrence moi, mais je n'ai eu aucun mal à appréhender et approfondir Delphi en n'ayant jamais programmé auparavant et en ne me servant que de l'aide intégrée et de quelque recherches sur Internet pour des problèmes particuliers; et je ne cherche qu'a refaire sur Mac ce que j'ai déjà réalisé sous Windows…

Mon troisième problème est que je n'ai aucune idée quant à la façon de me connecter à une base de données style mySQL et que je n'arrive pas à trouver d'information à ce sujet (mes recherches sur Google me donnent des liens pour installer un serveur de base de données sur mon Mac et surtout, rien sur le site d'Apple!): comment remplir un élément graphique (ComboBox, ListView…) avec des données en provenance d'une base?

Mon quatrième problème … sera pour un autre jour! :D J'ai déjà l'impression de vous assommer littéralement avec mes questions, alors j'espère que vous me pardonnerez pour ce mini-roman!

A savoir que je consulte depuis quelques mois des sites comme Project:Omega, Objective-Cocoa.org, Nixen.net et que leur lecture ne m'a pas vraiment avancé…


Aussi, si vous aviez moyen de m'aider en m'expliquant comment faire, en me recommandant un livre, un site (de préférence francophone, cela est toujours plus évident à comprendre)… je vous en serais très reconnaissant!


Vous remerciant par avance pour votre patience (il en faut pour me lire jusque là!) et pour toute piste que vous pourriez me communiquer,
Cordialement,
Jlm.


Publié : 20.04.2005 - 14h40 par GIL

Hum... Cela fait beaucoup !

Je pense qu'il vaut mieux prendre l'habitude avec le langage C, avant d'entreprendre des choses complexes comme les "data binding". Autant écrire des exemples "jetables" mais simples.

Le livre d'Aaron Hillgrass est le mieux que je connais, afin de comprendre les finesses d'Objective-C.

J'ai un excellent livre à la maison sur le langage C, mais faut-il trouver le titre et je ne sais même pas si c'est encore disponible en libraire.


Publié : 20.04.2005 - 14h55 par Fabien

Pour comprendre le fonctionnement de IB il faut être au clair sur le concept orienté-objet.

Dans IB tu crées des instances de classes (des boutons, des fenêtres, etc...) que tu dois alors relier entre elles.

La meilleure manière de comprendre tout ça c'est de suivre le tutoriel fournit par Apple sur ton disque:

/Developer/ADC Reference Library/documentation/Cocoa/Conceptual/ObjCTutorial

ou

/Developer/ADC Reference Library/documentation/Cocoa/Conceptual/JavaTutorial

si tu veux programmer en Java.

Ce qui me permet de répondre à ta troisième question, à savoir considérer d'utiliser Java plutôt que Objective-C. Pour l'utilisateur cela ne changera absolument rien, pour toi cela peut te simplifier la vie dans le mesure où toutes les fonctions d'accès à des bases MySQL existent déjà en Java. Un tutoriel pour une application Cocoa-Java se connectant à une base MySQL se trouve là en français:

http://cappuccino.devue.be/tutoriels.htm

Pour ma part je trouve que Java est plus simple à apprendre que Obj-C, raison pour laquelle toutes mes applications sont programmées en Cocoa-Java, tu peux y jeter un oeil là:

http://www.iconus.ch/fabien/content.php?zone=mac

Sinon, j'avais fait une petite approche par la pratique du concept orienté-objet en Cocoa dans cet article (sans une seule ligne de code !):

http://www.cuk.ch/articles.php?unique=30

Commence par là, et surtout, commence par faire des petites applications pour te faire la main, il n'y a rien de tel pour apprendre.


Publié : 20.04.2005 - 17h05 par JCP

Stop!

Tu vas pas programmer ça "à la main" tout seul ???

1. Il existe sûrement déjà des applications qui le font .Je sais que Blu Real (http://www.blureal.ch) et son "Director Assistant" n'a pas super bonne presse ici, mais ça prouve que ça existe.

2. C'est typiquement le genre de truc que tu crées avec 4D ou FileMaker (je te laisse animer le débat...).

C'est fait pour ça!


Publié : 21.04.2005 - 9h22 par Jilam

Bonjour et merci de vous être penché sur mon cas!

En vrac, voici mes réponses à vos réactions:

- Tout d'abord, SI, j'ai bien l'intention de programmer tout cela à la main, n'ayant pas trouvé ce qu'il me faut en Open-Source et natif Cocoa avec des fonctionnalités que je sais ne pas trouver car trop dépendant de notre métier : il y a par exemple une partie du programme (déjà existante en Delphi, je tente actuellement de la refaire en Cocoa) qui permet de calculer des tarifs et de remplir des bordereaux déclaratifs qui doit être liée avec ma solution de gestion aussi bien du point de vue des données que de l'interface (il faut permettre un va-et-vient entre les clients, les travaux exécutés pour eux, leurs déclarations…).
- MAIS, si vous avez des propositions dans cette catégorie de logiciels (seulement cela existe-t-il pour OSX?), je suis preneur.
- Et oui, je pense aussi que c'est exactement le type de boulot à développer avec un SGBD, mais il ne me permettra pas d'implémenter des fonctionnalités spécifiques: j'ai l'intention à l'avenir de porter sous OSX nos applications métier, et je sais sans le moindre doute que cela n'existe pas!

- Du point de vue documentation, je suis persuadé d'avoir en ma possession parmi ce qu'il se fait de mieux dans ce domaine, ce sont des livre plébiscités par nombre d'internautes, et je n'en ai fait l'acquisition qu'après avoir consulté les milieux bien informés :lol: .
- Mais j'ai tout de même l'impression qu'il me manque quelque chose entre les deux ("Langage C" et "Cocoa par la Pratique").

- Je pense être au point vis à vis de la programmation orientée objet, Delphi implémentant du Pascal-Objet, bien qu'il ne m'ai jamais été nécessaire de me plonger dans les entrailles du système pour parvenir à mes fins, c'est justement cette facilité que je regrette , surtout vu que j'ai déjà commencé mon application avec lui sans rencontrer les difficultés auxquelles je fais face actuellement!
- Merci Fabien pour ton article sur Cuk, je l'avais lu il y a quelque temps et avais beaucoup apprécié l'analogie avec la classe "voiture"!
- Par contre, je n'ai pas envie de me mettre à Java, j'avais déjà tenté sur Pc avec Eclipse et n'avais pas du tout été emballé par la chose…
- En réalité, je regrette que XCode/IB (tout comme Eclipse) ne soit pas aussi intuitifs que Delphi, ce dont je doute, c'est pourquoi je vous demandais de l'aide quant à la "philosophie" du développement sous OSX.

- En ce qui concerne la connexion à des bases de données SQL, j'ai bien trouvé un Framework "MySQL Classes" sur Objective-Cocoa.org, mais je ne sais pas vraiment comment l'utiliser pour remplir mon interface. J'avoue ne rien comprendre à un code source en ObjectiveC alors qu'un code pas trop alambiqué en Pascal/Delphi est pour moi totalement transparent! Serais-je réfractaire au C?
- Je suis allé faire un tour sur cappuccino.devue.be mais tout est axé sur Java, ce qui ne m'arrange pas. Je pense qu'il me faudrait plutôt quelque chose pour très grand débutant, étant très à l'aise avec Delphi, j'ai peut-être visé trop haut pour un début? C'est en tout cas ce qu'il me semble à vous lire… :?

- Au niveau de la connexion à MySQL, j'ai trouvé cette nuit "easyDB Framework" sur macosguru.de, gratuit pour un usage non-commercial (ce qui est le cas de mon application qui ne sortira pas de mon entreprise) et livré avec une application-exemple: tout pour me plaire! Je me penche sérieusement dessus aujourd'hui et vous en donne des nouvelles… (le problème étant que je suis bloqué par des travaux à mon domicile et que je n'ai donc pas accès à mes serveurs… [Pourquoi la connexion à un VPN coupe-t-elle tout autre connexion, pourquoi ne puis-je pas être en même temps sur mon réseau professionnel et bénéficier de ma liaison ADSL pour surfer en parallèle???])

- Fabien, tu me conseille de commencer par me faire la main sur des petites applis, c'est bien ce que je tente de faire, mais je n'arrive même pas à faire un petit "machin" pour saisir et stocker mes horaires de travail! Je trouve qu'il y a très peu de composants graphiques dans Interface Builder (toujours comparé à Delphi, qui offre une large palette de composants: un exemple:
Je pose l'icône de 'ADOConnexion' sur ma fenêtre, double-clique dessus, un dialogue m'invite à construire la chaîne de connexion à ma base de données en renseignant adresse du serveur, nom d'utilisateur, mot de passe…; puis je pose l'icône de 'ADOTable', lui dis que le connexion à utiliser est celle de 'ADOConnexion', pose un 'DataSource', lui dis que sa source est 'ADOTable'. Lorsque je mets un composant d'accès à ma base (navigateur, tableau, cas à cocher…), tout ce qu'il y a à faire est de renseigner sa propriété 'DataSource'! Cela a peut-être l'air compliqué, mais c'est très rapide, et tout est indépendant, si je remplace mon serveur, il suffira de changer les propriétés de 'ADOConnexion', si une table change de nom, de modifier 'ADOTable', sans que cela ne remette en question le reste de mon application!
Je ne fais pas l'apologie de Dephi, il n'est pas exempt de défauts (déjà, c'est sous Windows :roll: ), mais il permet un développement rapide sans se poser trop de question tout en offrant un code propre et assez facile à maintenir (avec un minimum de commentaires bien sûr): dans l'exemple donné plus haut, je n'ai pas entré une seule ligne de code et mon appli va me permettre de naviguer dans une base de données immédiatement!)

C'est cette relative facilité que je n'arrive pas à retrouver, le petit "machin" dont je parle plus haut ne me prendrais pas une heure à faire avec une belle interface bien peaufinée et sans bogue (normal vu la taille de l'appli, il est facile de tout contrôler!). Le pire est que je reste persuadé que je ne devrais pas avoir de difficulté à réaliser cela avec XCode, je trouve Interface Builder assez génial (rien que les pointillés bleus pour placer correctement les composants au sein de la fenêtre représentent un gain de temps appréciable), mais il y a quelque chose que je n'arrive pas à identifier qui bloque!

Bon, je crois que je vais arrêter là mon discours et attendre vos réponses car je sens que j'abuse de votre temps…

En m'excusant de la longueur (non, je n'essaye pas de battre un record!) et dans l'attente impatiente de vos réponses,
Bien cordialement,
Jlm.


Publié : 21.04.2005 - 9h35 par Fabien

Jilam a écrit :- En réalité, je regrette que XCode/IB (tout comme Eclipse) ne soit pas aussi intuitifs que Delphi, ce dont je doute, c'est pourquoi je vous demandais de l'aide quant à la "philosophie" du développement sous OSX.


Apple le dit lui-même, IB n'est pas trivial. Il faut tatonner un peu jusqu'a ce qu'arrive le "Aha !!" qui symbolise la compréhension du "truc".

Mais une fois ce "Aha !!" passé, IB devient d'une puissance et d'une facilité d'utilisation hosr du commun.

Je me répète: commence par le tutoriel d'Apple. En ne faisant pas que recopier bêtement, mais en cherchant à comprendre à fond chaque étape.

C'est ce que j'ai fait. Je ne connaissais rien à l'orienté-objet, rien à IB, rien à Java ni à Obj-C. J'ai lu un bouqin sur la théori OO, fait le tutoriel à fond et soudain... Aha !!. Et à partir de là, j'ai fait tout plein de petites applications pour m'entraîner.


Publié : 21.04.2005 - 9h45 par Jilam

Merci Fabien, quelle rapidité!

D'accord, je t'écoute et me lance sur le tutoriel.
Je vous tiens au courant, mais n'hésitez pas à me dire ce que vous pensez de mon roman (à par qu'il est LONG!).


Jlm.


Publié : 21.04.2005 - 10h49 par Jerome

Personnellement, je te conseillerais de jeter un oeil à Qt de Trolltech.

C'est une bibliothèque de développement multiplateforme qui tourne sur mac. Langage : C++ (moi non plus, je ne comprend rien à l'objective C). Créer une interface est d'une simplicité enfantine, en particulier tu verras qu'il existe plusieurs classe (QDataTable) pour se connecter à une base de données (SQLite, MySQL, et plein d'autres, ma faveur étant pour SQLite, un petit bijoux de base de données 100% gratuite, légère, fiable et rapide).

Il existe quelques bons livres sur Qt pour t'aider à apprendre, mais franchement, ce framework est très bien fait : assez complet, orienté-objet, avec des interfaces cohérentes....un collègue est passé de Delphi à Qt sans grand problèmes.

Le défaut de Qt, c'est qu'il est parfois pas facile d'obtenir sur Mac un comportement de l'interface graphique qui soit parfaitement correcte en rapport au recommandations d'Apple (on sent qu'ils sont avant tout préoccupés de Windows et Linux), mais avec Qt4 qui va bientôt sortir, ça s'améliore (possibilité de faire des tiroirs, etc.).

Si tu veux plus d'infos, n'hésite pas, mais je pense que dans ton cas, ce serait une très bonne alternative.

Jérôme


Publié : 21.04.2005 - 11h00 par Jerome

J'ai oublié de préciser que Qt est gratuit pour une application non-commerciale.

http://www.trolltech.com

Jérôme


Publié : 21.04.2005 - 11h05 par Jilam

Merci, je suis en train de le télécharger et je vais l'essayer dès que j'aurais le temps de finir le tutoriel d'Apple!

Par contre, est-il interfaçable à XCode?


Jlm.


Publié : 21.04.2005 - 15h04 par Jerome

Par contre, est-il interfaçable à XCode?


Oui, Qt3 l'est. Il faut pour ça faire une commande avec le Terminal (que tu auras de toute façon dû utiliser pour l'installer). Cette commande ne coule pas de source et n'est pas documentée, donc tu pourras me demander lorsque tu en auras besoin.

En fait, avec Qt, tu crées un fichier de description de projet (.PRO) qui recense tes fichiers source ainsi que les bibliothèques externes auxquelles il faut se linker, puis à partir de ce fichier, un makefile est créé que tu peux compiler avec 'make' en mode terminal. Sinon, pour utiliser XCode, tu peux générer un projet XCode à partir du fichier *.PRO.

Il te faudra je pense un peu de temps pour acquérir la philosophie Qt, mais, à mon avis, le jeu en vaut la chandelle !


Jérôme


Publié : 21.04.2005 - 15h05 par Jerome

J'oublie de dire qu'avec Qt4 par-contre, cette possibilité de générer un projet XCode ne sera pas forcément fournie avec la version opensource. En tous cas, les version betas de Qt4 ne le permettent pas (et c'est très chiant). Trolltech n'a pas encore pris une décision définitive sur ce point.

Jérôme


Publié : 24.04.2005 - 13h35 par GIL

GIL a écrit :J'ai un excellent livre à la maison sur le langage C, mais faut-il trouver le titre et je ne sais même pas si c'est encore disponible en libraire.

Je l'ai exhumé, et cela a pour titre :

Programmation C++ par la pratique
Auteur : Steve Oualline
Editions O'Reilly

http://www.oreilly.fr/catalogue/pcpp.html

Reste à voir si c'est toujours disponible à la vente .... !