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

C# Discussion :

Classe, Constructeur et objet, une question toute bête


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    Game Designer
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Game Designer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Par défaut Classe, Constructeur et objet, une question toute bête
    Bonjour à tous,

    Pour situer mon soucis, j'ai des notions en programmation construites d'après de multiples cours et tutoriels trouvés ici et là via internet mais certaines des notions, élémentaires pour les développeurs, m'échappent.
    La plupart du temps, certaines de ces notions ne sont tout simplement pas expliquées ou alors expliquées arrivé au 3/4 d'un cours. Or, je suis incapable d'avancer correctement dans l'apprentissage d'un cours si je n'ai pas le contexte élémentaire clairement explicité.

    Bref, je suis en train d'apprendre le C# et surtout sa logique et je me suis rendu compte que là où j'en étais j'étais incapable de savoir et de trouver réponse à ceci :

    1. Est-ce qu'un objet est égal à TOUTE LA CLASSE dont il découle ? Donc en INCLUANT les variables et fonctions hors constructeurs.
    2. Est-ce qu'un objet est égal à TOUS LES CONSTRUCTEURS de la classe dont il découle ? Donc EXCLUANT les variables et fonctions hors constructeurs.
    3. Est-ce qu'un objet est égal à UN SEUL DES CONSTRUCTEURS de la classe dont il découle ?


    Je suis persuadé que cela doit être évident pour la plupart d'entre vous mais pas pour moi.
    Merci de ne pas répondre par du code, je cherche juste à comprendre la notion, je ne cherche pas d'exemple de code (si possible) mais juste une formulation de la règle qui est appliquée.
    Merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Par défaut
    Un objet est souvent une instance d'une classe.
    Les constructeurs, au sein d'une même classe, sont autant de moyen d'instancier le même objet.

    La classe personne est une description (couleur de peau, type de cheveux). L'instance d'une personne est unique. A chaque personne sa couleur de peau et son type de cheveux... parce que tu le vaux bien!

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    la question ne veut pas dire grand chose
    une classe c'est une description (variables, propriétés, méthodes ...)
    une instance c'est un objet en mémoire répondant à cette description
    le constructeur est la méthode appelée au moment d'instancier un objet, on peut avoir plusieurs constructeurs sur une classe, l'appelant (développeur) choisit laquelle il appelle

    après les variables et propriétés appartiennent à l'instance, chaque instance a ses propres variables
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti

    Homme Profil pro
    Game Designer
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Game Designer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Par défaut
    En effet la question n'était pas correcte, je m'en suis rendu compte en discutant avec un ami développeur. Je n'avais pas bien compris ce qu'était un constructeur.

    J'ai été trompé par le nom "constructeur" qui laisse entendre que le constructeur est en gros le "plan de construction" ou "la machine capable de créer" l'objet d'une classe.
    Or ce n'est absolument pas ça, c'est une série d'actions qui seront exécutée au moment de la construction d'un objet découlant de la classe dont le constructeur fait parti.
    Et c'est donc ce qui est HORS constructeur qui est conservé dans l'objet créé.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas trop ce que tu appelles "hors".

    Si tu parles du contexte des variables (globales et locales), que ce soit dans un constructeur ou toute autre méthode, seuls les attributs de l'objet (donc les variables définies au niveau de l'objet, ainsi que les propriétés) sont conservés en mémoire, et toutes les variables déclarées à l'intérieur de quel que bout de code que ce soit disparaît.

    C'est valable aussi bien pour les constructeurs que les méthodes, mais aussi les accesseurs de propriétés :

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    class Personne
    {
       // Propriétés, avec ou sans accesseur : une fois l'objet instancié, leurs valeurs sont conservées, tant qu'il y a un référence à l'instance.
       public string Nom;
       public string Prenom { get; set; }
       private string Civilite;
     
       public string NomComplet
       {
          get
          {
             // Variable locale : dès qu'on sort du bloc entre accolade, elle est détruite et inaccessible.
             string tmp = string.Format("{0} {1} {2}", this.Civilite, this.Prenom, this.Nom);
             return tmp;
          }
       }
     
       // Constructeur : accessible qu'au moment de la création d'une instance. N'est plus appelable une fois l'instance créée.
       public Personne(string civilite, string nom, string prenom)
       {
          this.Civilite = civilite;
          this.Nom = nom;
          this.Pernom = prenom;
       }
     
       public void ChangerNom(string nouveaunom)
       {
           // Variable détruite à la sortie de la méthode
          string old = this.Nom;
          if (old != nouveaunom)
          {
             this.Nom = nouveaunom;
          }
       }
    }

    Je sais pas si c'est plus clair comme ça.

    Après, on parle pas des private, public, protected, sealed, static, etc.

  6. #6
    Membre averti

    Homme Profil pro
    Game Designer
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Game Designer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je ne vois pas trop ce que tu appelles "hors".
    Je voulais dire ce qui est en dehors des accolades du constructeur et à l'intérieur de la classe.

    Citation Envoyé par StringBuilder Voir le message
    Je sais pas si c'est plus clair comme ça.
    Certaines choses oui, d'autres non mais c'est parce que je n'ai pas vu certains aspects que tu as utilisé. Comme l'intérêt et le fonctionnement du "this".
    Et les get et set, j'ai vu brièvement.

    Par contre, comment le développeur choisi le constructeur qu'il souhaite appeler s'ils ont tous le même nom (le même que la classe).
    Par exemple s'il y a 2 constructeurs qui prennent en paramètre une chaine de caractères ?

  7. #7
    Membre du Club
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Par défaut
    Citation Envoyé par OurPleasure Voir le message

    1. Est-ce qu'un objet est égal à TOUTE LA CLASSE dont il découle ? Donc en INCLUANT les variables et fonctions hors constructeurs.
    2. Est-ce qu'un objet est égal à TOUS LES CONSTRUCTEURS de la classe dont il découle ? Donc EXCLUANT les variables et fonctions hors constructeurs.
    3. Est-ce qu'un objet est égal à UN SEUL DES CONSTRUCTEURS de la classe dont il découle ?

    Je n'ai peut être pas saisis l'intégralité de ce que tu cherches mais je vais tenter d'expliquer selon ce que j'ai compris de ta demande.

    Tu as une classe exemple Véhicule, la classe va être en quelque sorte le patron de l'objet. Tu vas donc définir ta classe avec des attributs en private afin que seuls les fonctions de la classe puissent interagir avec.

    Le constructeur de permet d'initialiser une instance de ta classe c est à dire créer un objet. Tu vas donc pouvoir manipuler les données de ton véhicule grâce aux fonctions ce sont donc des méthodes dites d'objets.

    par exemple v1 est un objet de Vehicule v1.getPasserVitesse(); Modifiera l'attribut vitesse de ton véhicule.
    Tu as des classes static qui elles sont des méthodes de classe. Elle ne modifieront donc pas ton objet mais intéragira avec Vehicule. Vehicule.Fonction() c'est à dire que toutes fonctions qui ne sera pas static sera utilisable par ton objet.

    Dans une classe tu peux avoir "plusieurs" constructeurs on appelle sa la surcharge tu peux faire en sorte que ton Véhicule soit créer selon les données qu'il a par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Vehicule(){
        this.nom = "unknow";
    }
     
    public Vehicule( string nom) {
     this.nom = nom;
    }
    this permettant d'indique que cela concerne l'objet courant.

    Ici tu as donc deux façons de construire ton objet.

    Citation Envoyé par OurPleasure Voir le message
    A mon niveau, je t'avoue que this = confusion
    Quand tu fais de l'objet, quand tu utilises this.nom par exemple tu indiques au programme que c'est le nom de ton objet comme ca si tu prends par exemple un mutateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setNom(string nom)
    {
      this.nom = nom;
    }
    Pour toi tu es sur que tes variables correspondent bien et si quelqu'un passe derrière il n'y aura pas trop de soucis. Le this permet au compilateur de faire la diffèrence entre l'attribut de ton objet et la valeur fournie. This = objet que tu utilises

Discussions similaires

  1. Une petite question toute bête
    Par sebnantes dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/09/2010, 15h58
  2. Une question toute bête à propos de scanf
    Par Flo Flo dans le forum Débuter
    Réponses: 12
    Dernier message: 29/04/2009, 10h13
  3. Question toute bête?
    Par Martyin dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/03/2007, 10h46
  4. Question toute bête sur les formulaires
    Par pekka77 dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2005, 23h45
  5. Question toute bête sur le passage de variable
    Par pekka77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/11/2005, 12h39

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