Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Mac
Mac Avant de poster: Lire La FAQ Mac; Voir la page Outils; Voir les tutoriels.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/08/2006, 13h24   #1
Membre habitué
 
Étudiant
Inscription : février 2004
Messages : 125
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 125
Points : 114
Points : 114
Envoyer un message via AIM à Omfraax Envoyer un message via MSN à Omfraax
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 :
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.
Omfraax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 14h27   #2
Membre émérite
 
Avatar de homeostasie
 
Homme
Inscription : mai 2005
Messages : 939
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations forums :
Inscription : mai 2005
Messages : 939
Points : 811
Points : 811
Citation:
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.

Citation:
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 :
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
homeostasie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 14h56   #3
Membre Expert
 
Inscription : décembre 2004
Messages : 1 480
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 480
Points : 1 629
Points : 1 629
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.
DaZumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 12h44   #4
Membre habitué
 
Étudiant
Inscription : février 2004
Messages : 125
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 125
Points : 114
Points : 114
Envoyer un message via AIM à Omfraax Envoyer un message via MSN à Omfraax
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.
Omfraax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 14h50   #5
Membre Expert
 
Inscription : décembre 2004
Messages : 1 480
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 480
Points : 1 629
Points : 1 629
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 :
1
2
3
4
5
id my_function(id arg)
{ 
  ...
}
DaZumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 19h13   #6
Membre habitué
 
Étudiant
Inscription : février 2004
Messages : 125
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 125
Points : 114
Points : 114
Envoyer un message via AIM à Omfraax Envoyer un message via MSN à Omfraax
D'accord.

Merci bien pour tes réponses Da Zumba.
Omfraax est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h42.


 
 
 
 
Partenaires

Hébergement Web