apprentissages et fondamentaux

sl1200mk2sl1200mk2 Membre
15:52 modifié dans API AppKit #1
bonjour à  tous et à  toutes,
j'ai développé une application pour le théâtre http://www.nicole-banana.com en C et Tcl/Tk pour l'interface graphique.
Le soft fonctionne sur les plateformes Mac et Pc, et j'aimerai le traduire en Cocoa.
Ce faisant, j'aimerai vous poser quelques questions préalables.

- le coeur du soft est composé de structures déclarées en C.
puis-je les conserver ou est-ce-que je dois les traduire en cocoa?

- est-ce que je peux continuer à  utiliser mes pointeurs avec leur mécanismes d'allocation et de destruction?

- est-ce que le type casting est important en cocoa?


maintenant, pour la partie graphique:

- en Tcl/Tk, les composants comme les labels ou boutons ont des tags (cf identifiants) qui permettent à  des fonctions de modifier le comportement ou contenu des composants.
est-ce que ce principe existe en cocoa?

- en cocoa, est-ce que les composants graphiques peuvent être crées à  la volée, ou doivent-ils être crées au préalable avec InterfaceBuilder?

- Je programme en C et pas en C++, donc je suis peu familier des classes.
si je veux créer par exemple 10 boutons, est-ce que je dois écrire une classe pour 1 boutons, et l'utiliser pour créer les autres?

merci par avance pour vos éclairages,
nicolas

Réponses

  • Philippe49Philippe49 Membre
    juillet 2008 modifié #2
    dans 1216209869:

    - le coeur du soft est composé de structures déclarées en C.
    puis-je les conserver ou est-ce-que je dois les traduire en cocoa?

    Cocoa est un framework, le langage utilisé c'est Objective C.
    Objective C est un langage objet, basé sur le C, et qui accepte qu'on insère du code en C.
    Si par un exemple une de tes fonctions résout un algorithme assez conséquent, tu peux l'utiliser telle quelle.

    dans 1216209869:

    - est-ce que je peux continuer à  utiliser mes pointeurs avec leur mécanismes d'allocation et de destruction?

    Oui, mais pour les objets créés, tu seras amené à  utiliser le mécanisme de gestion de mémoire spécifique. Si tu veux suivre l'esprit Objective C, tu seras sans doute amené à  repenser au moins en partie l'architecture de ton programme.

    dans 1216209869:

    - est-ce que le type casting est important en cocoa?

    Pour ce qui est du C que tu peux inclure dans un programme Objective C, oui
    Pour ce qui est objet, Objective C utilise le typage dynamique, qui est beaucoup plus souple.


    dans 1216209869:

    maintenant, pour la partie graphique:

    - en Tcl/Tk, les composants comme les labels ou boutons ont des tags (cf identifiants) qui permettent à  des fonctions de modifier le comportement ou contenu des composants.
    est-ce que ce principe existe en cocoa?

    oui

    dans 1216209869:

    - en cocoa, est-ce que les composants graphiques peuvent être crées à  la volée, ou doivent-ils être crées au préalable avec InterfaceBuilder?

    Les deux sont possibles

    dans 1216209869:

    - Je programme en C et pas en C++, donc je suis peu familier des classes.
    si je veux créer par exemple 10 boutons, est-ce que je dois écrire une classe pour 1 boutons, et l'utiliser pour créer les autres?

    Un certain nombre de boutons sont prédéfinis.
    Si tes boutons requièrent des caractéristiques spécifiques, on prend un bouton existant dans le catalogue, et on lui rajoute les fonctionnalités voulues, en créant une sous-classe. Tes 10 boutons pourront alors être des instances de cette sous-classe.

    dans 1216209869:

    merci par avance pour vos éclairages,

    Compte-tenu de ce que fait ton appli, je considère cette dernière phrase comme de la provocation  ;)


    Bienvenu sur ce site
  • sl1200mk2sl1200mk2 Membre
    15:52 modifié #3
    merci philippe pour ces précisions,
    je regarde les guides et tutoriaux et je reviens à  la charge

    ++
  • sl1200mk2sl1200mk2 Membre
    15:52 modifié #4
    ci-joint un début de projet.
    le principe étant de cliquer sur le texte et de scroller à  la souris.
    ça foire car les deux Text Filed font référence à  une variable slection.level

    Or je ne sais pas comment déclarer plusieurs bind...

    aussi, coment fait-on pour pour récupérer un tag?
    par exemple, le premier joystick aurait le tag 0, ce qui me permettrait d'accéder à  l'index 0 d'un pointeur, et ainsi de suite.

    merci par avance
    A+
  • Philippe49Philippe49 Membre
    juillet 2008 modifié #5
    dans 1216250035:

    ci-joint un début de projet.
    le principe étant de cliquer sur le texte et de scroller à  la souris.
    ça foire car les deux Text Filed font référence à  une variable slection.level
    Or je ne sais pas comment déclarer plusieurs bind...

    L'existence de bindings multiples est normalement gérée par cette technologie, ce qui veut dire que si on déclare correctement les bindings entre Obj1, Obj2, Obj3, le changement de Obj1 se synchronise directement sur Obj2 et Obj3.
    Voir ce tuto (un peu vieillot maintenant)

    dans 1216250035:

    aussi, coment fait-on pour pour récupérer un tag?

    Une action envoyée par un NSControl se fait par une IBAction déclarée ainsi:
    -(IBAction) myAction:(id) sender
    On récupère alors le tag par [sender tag]
    Ceci dit, tes deux vues n'ont pas de tag , elles sont définies comme des NSView (de simples zones de dessins) et non comme des NSControl (NSButton, NSTextField, NSTextView, NSMatrix, ...) dont le tag peut-être défini dans IB.
    Rien ne t'empêches de rajouter un champ tag à  ta classe StickJoy, mais pour l'instant cette classe se parle à  elle-même par la gestion des événements.

    Autres remarques:

    Les noms de variables et de méthode  commencent par une minuscule
    Les noms de classe par une majuscule.


    - (void)setNilValueForKey:(NSString *)key{
        [self setValue:[NSDecimalNumber zero] forKey:key];
    }
    Obective-C fournit NSNull une classe bien utile pour encapsuler nil (voir la doc)

    Pour récupérer un scroll de souris, on dispose de la méthode scrollWheel


    Quit : tu as dû déconnecter l'option de menu 
  • Philippe49Philippe49 Membre
    juillet 2008 modifié #6
    Les bindings sont des raccourcis simplificateurs pour programmer en Objective-C. En tant que tel, cela masque le fonctionnement et cela risque d'obscurcir la compréhension du langage. Je ne pense pas que cela soit par là  qu'il faille commencer pour bien comprendre.

    La base de l'objective C, c'est l'envoi de messages entre les objets à  travers différents mécanismes :
    -envoi direct de message [unObjet faitTelleChoseAvec:..]
    -mécanisme target-action dans l'interface graphique
    -mécanisme des notifications-observateurs dont les bindings sont une version simplifiée.
    - ...
     
    Pour Objective-C et AppKit, on conseille "Cocoa Par la Pratique" d'Aaron Hillegass pour débroussailler rapidement les bases . Une nouvelle édition est disponible en Anglais.

  • AntilogAntilog Membre
    15:52 modifié #7
    dans 1216279476:

    []
    Pour Objective-C et AppKit, on conseille "Cocoa Par la Pratique" d'Aaron Hillegass pour débroussailler rapidement les bases . Une nouvelle édition est disponible en Anglais.


    Comprendre:
    La version française date un peu (beaucoup...)
    :'(
  • Philippe49Philippe49 Membre
    juillet 2008 modifié #8
    dans 1216322841:

    Comprendre:
    La version française date un peu (beaucoup...)
    :'(


    A ma connaissance, en Français, faute de livre plus récent, cela reste une référence de qualité pour une première lecture approfondie et permettant de se lancer dans la doc & tutos. J'ai bien aimé le livre plus récent de Vauterin, mais il parle d'autre chose.
  • Paisible.frPaisible.fr Membre
    15:52 modifié #9
    A mon avis :

    1) Le Vauterin est excellent pour se faire une idée des différentes technologies et outils pour programmez sous MacOS et jouer un peu avec chacune d'entre elles. Cela permet de se faire une bonne culture générale de la programmation sous macOS. Il a l'avantage d'être en français, de couvrir un panel relativemetn exhaustif des differentes maniére de programmer sous mac os, et d'être prise en main facilement

    2) Le Hillegass est vraiment la référence pour programmer sous mac OS en Obj-C/Cocoa. L'ouvrage couvre 80% des utilisations courantes de Cocoa. Son gros avantage est de permettre de comprendre les fondamentaux du framework cocoa. Par contre c'est un ouvrage qui demande un certain investissement. Pour en profiter il faut non seulement le lire, le re-lire, faire les exemples et surtout tenter de résoudre les "challenges".
    La version FR commence effectivement à¡ dater, mais elle reste d'actualité, le gros défaut de cette version FR est finalement qu'elle parle de XCode 2 et IB 2.0. Cela peut etre déroutant pour les débutants.
  • Philippe49Philippe49 Membre
    15:52 modifié #10
    dans 1216361542:

    La version FR commence effectivement à¡ dater, mais elle reste d'actualité, le gros défaut de cette version FR est finalement qu'elle parle de XCode 2 et IB 2.0. Cela peut etre déroutant pour les débutants.


    La nouvelle version présente des diagrammes et images tirées de XCode 3.1
  • Paisible.frPaisible.fr Membre
    15:52 modifié #11
    dans 1216469709:

    dans 1216361542:

    La version FR commence effectivement à¡ dater, mais elle reste d'actualité, le gros défaut de cette version FR est finalement qu'elle parle de XCode 2 et IB 2.0. Cela peut etre déroutant pour les débutants.


    La nouvelle version présente des diagrammes et images tirées de XCode 3.1

    Si tu parle de la version originale (Edition 3) c'est effectivement le cas. Je l'ai sous les yeux et je confirme.

    Par contre à  ma connaissance là  traduction française n'à  connue qu'une seule édition et les copies d'ecrans sont celles des vielles versions de xcode/interface builder.
  • Philippe49Philippe49 Membre
    15:52 modifié #12
    [philippe postNotificationName:@Tout a fait d'accord object:self userInfo:nil];
Connectez-vous ou Inscrivez-vous pour répondre.