POO: obj-c (cocoa) vs java; classes, structures?

6ix6ix Membre
Bonjour,

Avant de m'initier à  cocoa et objective-c cet été, je programmais déjà  un peu en Java. Bien que ce soient deux langages POO, ils n'ont pas forcément la même approche, notamment au niveau de la façon de concevoir la hiérarchie des classes de son programme.

En Java, j'avais l'habitude de créer de nombreuses classes, de bcp hiérarchiser. Imaginons que je veuille classer des voitures, je faisais une classe Voiture, et, dans ma classe principale, je construisais un tableau contenant mes objets Voiture.

En consultant les divers tutos ou livres cocoa, j'ai l'impression qu'on utilise bcp plus les structures telles que NSDictionnary plutôt que de passer par des objets; ainsi, au lieu d'avoir un tableau contenant mes objets Voiture, j'aurais plutôt un NSDictionnary contenant les voitures.

Je trouve la 1e manière plus claire, mais apparemment pour cocoa, cette "hiérarchisation" des classes est moins poussé, et les structures comme NSDictionnary me semblent plus utillisées... J'ai même l'impression que cela facilite les choses sur plusieurs aspects, vu la manière dont Apple a construit son API.

Votre avis à  ce propos m'intéresse donc, pourquoi plutôt comme-ci, ce que permet cela, pourquoi ces différences,etc...

Réponses

  • Eddy58Eddy58 Membre
    05:31 modifié #2
    Pour reprendre ton exemple, en Objective-C tu peux faire la même chose. Tu crées ta classe modèle voiture, en sous-classant NSObject, ensuite dans un NSArray tu stockes tes objets voitures.
    L'objective-C et Cocoa te permettent de pousser trés loin la hiérarchisation de tes classes (sous-classes, catégories, héritage, protocoles), ne t'en fais pas pour ça. ;)
    Sinon, bienvenue à  toi sur OC ! Pour fêter ça, une tournée générale offerte par le nouveau venu est fortement appréciée tu sais ??  :p :p :P ;)
  • 6ix6ix Membre
    05:31 modifié #3
    Ok, tournée générale!  :p :p

    En fait, je viens de découvrir ce site... Pourtant j'en connais d'autres sur cocoa. Et y a pas à  dire, le forum est très riche, vraiment excellent!

    Pour continuer sur le sujet de départ, je sais justement qu'objective-C offre toutes les possibilités de hiérarchisation de Java, étant orienté objet.
    Ma question est donc de savoir de quelle façon faire, puisque d'une part obj-c permet tout cela- "à  la Java", alors que d'autre part, de nombreux tutos et livres utilisent des structures complexes (NSDictionnary), sans passer par moult classes.

    Je ne dis pas qu'il y ait une manière plus correcte que l'autre, mais peut-être la seconde est-elle plus appropriée à  l'environnement cocoa?
  • novembre 2005 modifié #4
    Petit conseil, évite le mot 'structure' qui a une autre signification ;)

    La principale raison pour laquelle on utilise des classes comme NSDictionary est qu'en fait leur emploi est pratique lorsqu'il s'agit uniquement de stockage de données. Par exemple si tu fais un gestionnaire de carnet d'adresse, tu pourrais faire une classe pour les fiches du carnet d'adresse, mais qui ne servira qu'à  contenir des données et ne fera pas de traitement. Donc on préfère utiliser un dictionnaire qui remplira tout aussi bien ce role (du moins pour un tutorial, pour les vraies applications, on sous-classe en général).

    Et quant au tableau, il a pas mal d'inconvénients en fait. Et surtout un manque de souplesse. Par exemple pour définir les attributs dans du texte enrichi sans dictionnaire, tu devras soit faire une méthode par attribut, soit utiliser un tableau et dire que le premier élément est la police, le second la couleur,.... Ce qui à  l'usage est très lourd.
  • mpergandmpergand Membre
    novembre 2005 modifié #5
    Salut  ;)

    Si NSDictionnary est très utilisé dans les tutos, c'est que c'est simple à  mettre en ½uvre et bien pratique pour faire un petit exemple de code comme, au hasard :), une structure de données pour NSTableView permettant de fixer une couleur pour les lignes de cette table.

    Mais en fait, NSDictionnary c'est bien pour gérer 2 ou 3 valeurs dans un fichier de préférences, mais pour une structure de données plus complexe, c'est inadapté, ça devient trop lourd et source de bugs.

    Il est donc bien plus efficace de se faire sa propre hiérarchie de classes et ceci quelque soit le langage utilisé. Quant à  l'archivage, il suffit d'implémenter le NSCoding et c'est tout.
    Simple et efficace et c'est de la bonne prog objets.

    [grilled]
    et de plus j'suis d'accord avec Renaud, incroyable  :)
  • 6ix6ix Membre
    05:31 modifié #6
    dans 1131204181:

    Petit conseil, évite le mot 'structure' qui a une autre signification ;)

    Ok, je ne savais plus trop comment définir cela.

    exemple de code comme, au hasard , une structure de données pour NSTableView permettant de fixer une couleur pour les lignes de cette table.

    Comme quoi on se retrouve partout!  :P
    Si t'es motivé, j'ai posté un autre message sur le forum de ce site... ::) Va bientôt falloir que je te paie une chtite bouteille! :p 8)

    Vos réponses clarifient les choses, merci. J'ai appris certaines choses en Java, et je m'étonnais de certaines différences de façon de faire qui à  mon avis tiennent plus du type de langage que du langage lui-même. 
  • LeChatNoirLeChatNoir Membre, Modérateur
    05:31 modifié #7
    Je connais pas bien le Java mais il me semble que les "hash tables" sont très souvent utilisées et si je ne m'abuse, une "hash table" n'est ni plus ni moins qu'un dictionnaire...
    a+
  • MalaMala Membre, Modérateur
    05:31 modifié #8
    A noter aussi que par rapport au java (ou au C++), l'Obj-C ne permet pas de faire d'héritage multiple (une classe qui hérite des propriétés de plusieurs classes en même temps). Cela peut être un peu déroutant au début.
Connectez-vous ou Inscrivez-vous pour répondre.