IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement OS X Discussion :

id et typage dynamique


Sujet :

Développement OS X

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut id et typage dynamique
    Bonjour.
    Je suis débutant en POO et j'ai commencé avec Objective-C, connaissant déjà le C et pour des raisons pratiques (environnement de développement MacOS X).

    J'ai un peu de mal avec le type abstrait 'id' et plus généralement avec le typage dynamique.

    Quelle est la différence entre ces deux déclarations :
    et
    puisque dans tous les cas, j'ai l'impression qu'il faut (afin de pouvoir utiliser l'objet) lui envoyer un message de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myObject=[[MyClass alloc] init];
    Y a t-il encore une différence entre les deux myObject, l'un défini explicitement, l'autre avec 'id' une fois qu'on a executé cette ligne d'initialisation ?

    Deuxième question, de principe: A quoi sert vraiment le typage dynamique ?
    D'après ma première impression de la POO, il faut que le programme soit très bien structuré où il vaut mieux savoir à chaque instant qui on est en train de manipuler. Quel est alors l'interet de définir les objets implicitement si on sait ce qu'on va en faire.

    Merci d'avance.
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Deuxième question, de principe: A quoi sert vraiment le typage dynamique ?
    Rendre dynamique permet d'allouer et de libérer de la mémoire au cours d'un programme lorsque cela s'avère utile. Alors qu'en statique, la zone mémoire sera toujours allouée après compilation quelque soit si tu t'en sers ou non. Si tu as une grande capacité mémoire, ok, sinon faut jouer avec le côté dynamique.

    D'après ma première impression de la POO, il faut que le programme soit très bien structuré où il vaut mieux savoir à chaque instant qui on est en train de manipuler. Quel est alors l'interet de définir les objets implicitement si on sait ce qu'on va en faire.
    La POO demande en effet un programme très structuré. L'intérêt majeur est de pouvoir rendre portable chaque classe que tu crées. Ainsi tu peux définir des classes spécifiques pour remplir un rôle déterminé et elles peuvent être réutilsable facilement dans un autre projet. Par exemple, une classe CCalcul pour réaliser l'ensemble des calculs, une classe CFichier pour traiter l'ouverture, fermeture, enregistrement de fichier etc...
    Ensuite, pour utiliser les fonctions et variables de la classe que tu viens de créer ou d'importer, tu dois instancier un objet de la classe de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyClass myObject("paramètres ou non"); // statique
    ou
    MyClass *myObject; //dynamique
    myObject = new MyClass("paramètres ou on)); //appel du constructeur avec ou sans paramètres

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par homeostasie
    Rendre dynamique permet d'allouer et de libérer de la mémoire au cours d'un programme lorsque cela s'avère utile.
    Omfraax parlait du typage dynamique, pas de memoire dynamique -- ce sont des notions completement differentes. Voir ici pour une bonne presentation et discussion du concept de typage dynamique en Objective-C.

    Citation Envoyé par Omfraax
    Quel est alors l'interet de définir les objets implicitement si on sait ce qu'on va en faire.
    id signifie que le type de l'objet ne sera connu qu'a l'execution. Tu sembles demander pourquoi donner un type, alors que je pourrais mettre id partout et laisser le runtime se debrouiller ? C'est par soucis de clarte : l'utilisation de l'objet n'est pas surprenante, le compilateur peut faire des verifications supplementaires (voir si un message est implemente par l'objet, par exemple) et emettre moins de warnings inutiles.

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    D'accord c'est bien ce qui me semblait.
    Si on sait ce qu'on va faire de l'objet, autant directement le déclarer explicitement.

    Les objets à déclarer sous id seraient plutôt des sortes d'outils dont on aurait besoin occasionellement, des auxiliaires ?

    Merci.
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Omfraax
    Les objets à déclarer sous id seraient plutôt des sortes d'outils dont on aurait besoin occasionellement, des auxiliaires ?
    L'usage le plus 'propre' de id est la programmation generique, c'est a dire lorsqu'on ne sait pas de quel type sera l'objet manipule. Par exemple, pour definir une fonction qui prend un objet en argument et retourne un objet, on ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id my_function(id arg)
    { 
      ...
    }

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    D'accord.

    Merci bien pour tes réponses Da Zumba.
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2009, 15h53
  2. type statique ou typage dynamique
    Par flotteman dans le forum Langages de programmation
    Réponses: 18
    Dernier message: 15/03/2008, 16h08
  3. VBA, typage dynamique, références
    Par raboliot dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2007, 11h24
  4. Réponses: 36
    Dernier message: 09/09/2006, 03h06
  5. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo