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 :

La notion d'objet


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut La notion d'objet
    Bonjour,

    je débute en C# et en programmation OO.
    J'ai du mal a comprendre pourquoi une fonction doit être membre d'une classe et l’intérêt d'en faire un objet !

    Quelqu'un saurait il me montrer un exemple ou il est utile de faire un objet d'une fonction ?

    Merci =) =) = )

  2. #2
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Bonjour,

    je débute depuis quelques années ( c'est long ...) donc j'espère ne pas dire de bétises :

    D'abord, toutes les fonctions ne font pas forcemment des objets. Ensuite une classe, c'est principalement pour faire du rangement. Dans ta classe tu vas avoir une fonction ( ou plusieurs ) comportant le nom de ta classe qui va te permettre de créer des objets, c'est le constructeur. Ces objets possèdent un ensemble d'attributs et vont pouvoir manipuler un ensemble de fonction qui leurs sont propres et qui sont déclarées dans leurs classes. Par exemple un objet clavier et un objet avion n'ont pas les mêmes attributs ni les mêmes fonctions.

    L'exemple le plus récurrent quand tu apprends la POO c'est la classe personne.

    Voilà un exemple sur msdn Class Kid

    Pour leur utilité, à force de pratiquer ça viendra tout seul, mais si tu veux un exemple qui j'espère est parlant : c'est plus facile de gérer un objet personne, plutôt que ses jambes, bras, pieds et le reste indépendament.

  3. #3
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Bonjour,

    A mon avis, le meilleur moyen est de lire des tutos et de s'exercer.

    En voici un, pour du vb.net mais les concepts de bases restent assez similaires :
    Lien

    Sinon, je te laisse un peu chercher, le web est rempli de tutos, d'exemples...

  4. #4
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Constructor:
        public Kid(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
    Merci pour ton exemple il est très clair ! Cependant je me demande à quoi sert le constructeur, je suis en train de suivre le bouquin C# pour les nuls ( ) et je n'ai pas eu besoin de créer un construtor pour créer mes objets à partir d'une classe.

    Vu le code en exemple j'aurais tendance à penser que cela vient du faite que les variables de la classe sont en private et que la classe n'est pas public ? . Pouvez vous me le confirmer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private int age;
        private string name;

    Merci encore pour votre aide !

  5. #5
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    La POO n'est qu'une vision des choses. La conception donne la vision du développeur. Mais sa vision est fortement dirigée par le langage.
    Par exemple, en C, sans POO donc, tu va créer des structures pour agréger des données qui vont ensembles, puis tu va créer tout une panoplie de fonctions pour manipuler ces structures.
    Les fonctions auront en paramètre des instances de ces structures et ne pourront donc travailler avec rien d'autre.
    Au final, tu te retrouve avec un groupe de fonction travaillant sur un type de structure, tu multiplie ca par le nombre de type de structure que tu vas être amener à créer. Résultat, tu as tout un tas de fonctions hétérogènes, sans aucun liens entre-elles, tout dans le même sac.

    Avec la POO tu considère que tout est objet. Et un objet il a des propriétés visibles (genre un stylo il a une couleur, une dimension, etc...), d'autre non visibles (la composition chimique de l'encre par exemple).
    Certaines peuvent être changées (certains stylos peuvent avoir une encre rechargeable, ou bien le cas des stylos 4 couleurs), d'autres non (on ne peut pas changer la taille du stylo).
    Toutes les fonctionnalités du stylos sont embarquées dans le stylo lui-même.
    Ce qui parait logique, si tu part de l'autre coté du monde avec ton stylo, il continuera de fonctionner.

    La POO isole donc les objets qui deviennent complètement indépendants et peuvent être réutilisés n'importe où.

    Après pour être plus précis ou expliquer d'autres intérêts, il faut rentrer dans des concepts très techniques du genre le polymorphisme. Je m'abstiens donc.

    Pour faire simple, toute fonction qui manipule un objet devrait être une méthode de l'objet en question.

  6. #6
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Salut,
    La POO n'est qu'une vision des choses. La conception donne la vision du développeur. Mais sa vision est fortement dirigée par le langage.
    Par exemple, en C, sans POO donc, tu va créer des structures pour agréger des données qui vont ensembles, puis tu va créer tout une panoplie de fonctions pour manipuler ces structures.
    Les fonctions auront en paramètre des instances de ces structures et ne pourront donc travailler avec rien d'autre.
    Au final, tu te retrouve avec un groupe de fonction travaillant sur un type de structure, tu multiplie ca par le nombre de type de structure que tu vas être amener à créer. Résultat, tu as tout un tas de fonctions hétérogènes, sans aucun liens entre-elles, tout dans le même sac.

    Avec la POO tu considère que tout est objet. Et un objet il a des propriétés visibles (genre un stylo il a une couleur, une dimension, etc...), d'autre non visibles (la composition chimique de l'encre par exemple).
    Certaines peuvent être changées (certains stylos peuvent avoir une encre rechargeable, ou bien le cas des stylos 4 couleurs), d'autres non (on ne peut pas changer la taille du stylo).
    Toutes les fonctionnalités du stylos sont embarquées dans le stylo lui-même.
    Ce qui parait logique, si tu part de l'autre coté du monde avec ton stylo, il continuera de fonctionner.

    La POO isole donc les objets qui deviennent complètement indépendants et peuvent être réutilisés n'importe où.

    Après pour être plus précis ou expliquer d'autres intérêts, il faut rentrer dans des concepts très techniques du genre le polymorphisme. Je m'abstiens donc.

    Pour faire simple, toute fonction qui manipule un objet devrait être une méthode de l'objet en question.
    En gros au lieux d'utiliser une fonction à part pour tous les objets d'une même classe on l'intègre directement dans la classe.

    C'est plus une facon de ranger la fonction en faite, et on l'appel une méthode c'est ca ?

  7. #7
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Citation Envoyé par jujulips Voir le message
    Cependant je me demande à quoi sert le constructeur, je suis en train de suivre le bouquin C# pour les nuls ( ) et je n'ai pas eu besoin de créer un construtor pour créer mes objets à partir d'une classe.

    Vu le code en exemple j'aurais tendance à penser que cela vient du faite que les variables de la classe sont en private et que la classe n'est pas public ? . Pouvez vous me le confirmer ?
    C'est un peu l'histoire de mes propriétés du stylo que je ne peux pas changer.
    Quand je construit un stylo, je décide de ses dimensions, une fois construit, ses dimensions ne peuvent plus être changées.

    Je traduit ca par code :
    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
     
    public class Stylo
    {
        private int _Taille;
     
        public Stylo(int Taille)
        {
            _Taille = Taille;
        }
    }
     
     
     
    // Pour construire une stylo :
    Stylo s = new Stylo(8); // Voila, un stylo de taille 8, plus rien ne peut changer cette taille.

    Un constructeur sert a construire l'objet en initialisant les propriétés à ses valeurs d'usine.
    Certaines pourronts changer ensuite, d'autres non, mais à la sortie d'usine, une voiture a des pneus, une couleur, etc..., ils ne te donnent la donnent pas en kit, elle est pré-montée/paramétrées, rien ne t'empêche ensuite de la modifier.

  8. #8
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Citation Envoyé par jujulips Voir le message
    En gros au lieux d'utiliser une fonction à part pour tous les objets d'une même classe on l'intègre directement dans la classe.

    C'est plus une facon de ranger la fonction en faite, et on l'appel une méthode c'est ca ?
    Disons qu'en apparence c'est un simple rangement, mais les implications de ce rangement va bien plus loin.

  9. #9
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Ca me parait beaucoup plus clair du coup, merci à tous !

    du coup j'ai une dernière petite question ;

    Imaginons une Classe voiture, le programme créé

    BMW M3 450 CH 3 Portes
    Citroen C4 90 CH 5 Portes
    Ford Focus 115CH 3 Portes

    J'ai créé une classe avec mes variables, mon constructeur, et une fonction d'affichage nommé Affiche().

    Il serait intéssant d'afficher tous les Objets de classe Voiture même si on ne connais pas leur nom !

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (string element in Voiture)
    {
    element.Affiche();
    }
    Mais a prioris je n'ai pas le droit d'utiliser ma classe en tant que variable dans ma boucle foreach !

    Comment faire ?

    Merci encore de votre patience !

  10. #10
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Il faut que tu passes par exemple par une liste de voitures, List<Voiture> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Tu construis ta liste de voitures
    List<Voiture> voitures = new List<Voiture>();
    voitures.Add(new Voiture("BMW", ...));
    voitures.Add(new Voiture("Citroen", ...));
    voitures.Add(new Voiture("Ford", ...));
     
    // Et tu boucles sur ta liste
    foreach (var voiture in voitures) {
        voiture.Affiche();
    }

  11. #11
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par _Max_ Voir le message
    Salut.

    Il faut que tu passes par exemple par une liste de voitures, List<Voiture> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Tu construis ta liste de voitures
    List<Voiture> voitures = new List<Voiture>();
    voitures.Add(new Voiture("BMW", ...));
    voitures.Add(new Voiture("Citroen", ...));
    voitures.Add(new Voiture("Ford", ...));
     
    // Et tu boucles sur ta liste
    foreach (var voiture in voitures) {
        voiture.Affiche();
    }
    Si je comprend bien, au lieu de créer un object on l'ajout dans une liste avant de le creer , c'est ca ?

  12. #12
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    euh non, il a écrit en une ligne donc il utilise la pile comme zone tampon, mais il y bien deux étapes.
    1 - new Voiture("...") => Création d'un objet Voiture, comme il n'y a pas d'affectation, l'objet est mis sur la pile
    2 - voitures.Add( ) => Place la voiture fraichement créée dans la liste.

  13. #13
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    euh non, il a écrit en une ligne donc il utilise la pile comme zone tampon, mais il y bien deux étapes.
    1 - new Voiture("...") => Création d'un objet Voiture, comme il n'y a pas d'affectation, l'objet est mis sur la pile
    2 - voitures.Add( ) => Place la voiture fraichement créée dans la liste.
    Okay je pense avoir pijé le truc ! C# créé l'object et enregistre le nom l'object dans un liste ... c'est ca ?

  14. #14
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Pas tout a fait, il ne met pas le nom de l'objet dans la liste, il met l'objet en lui même.
    Comme dans la réalité, tu ne met pas dans ta trousse un bout de papier sur lequel est écrit le nom de ton crayon. Tu met directement le crayon dans la trousse.
    Rappelles-toi : tout est objet.

    En C tu passe à tes fonctions des valeurs identifants les objets (les handles), la fonction retrouve les données associées parce que la valeur passée est un pointeur ou un identifiant permettant la recherche dans un tableau/une liste.

    En objet, on s'embête pas, on passe directement l'objet. Exactement comme si je te prêtait mon crayon : pour ca je suis bien obliger de te le donner, je ne peux pas me contenter de te dire comme il s'appel.

  15. #15
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Je profite de cette discussion fort intéressante pour poser une question

    Dans la liste, il stocke l'objet ou sa référence ?

  16. #16
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Pas tout a fait, il ne met pas le nom de l'objet dans la liste, il met l'objet en lui même.
    Comme dans la réalité, tu ne met pas dans ta trousse un bout de papier sur lequel est écrit le nom de ton crayon. Tu met directement le crayon dans la trousse.
    Rappelles-toi : tout est objet.

    En C tu passe à tes fonctions des valeurs identifants les objets (les handles), la fonction retrouve les données associées parce que la valeur passée est un pointeur ou un identifiant permettant la recherche dans un tableau/une liste.

    En objet, on s'embête pas, on passe directement l'objet. Exactement comme si je te prêtait mon crayon : pour ca je suis bien obliger de te le donner, je ne peux pas me contenter de te dire comme il s'appel.
    Ce qui me parait étonnant dans la facon de fonctionner avec la liste c'est qu'on ne donne pas de nom aux objets.

    Pour créé mon objet j'aurais eu tendance a faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Voiture  BMW1 = new Voiture("BMW",...)
    Du coup pour récupérer envoyer cet object vers une fonction j'aurais pu simplement faire BMW1.affiche();

    Alors que la avec cette facon de fonction je ne vois pas quell nom aurait mon object ormis Voiture[0].

    Du coup j’imagine bien qu on puisse faire un Voitures BMW1 = Voiture[0]
    mais l'objet est alors dupliqué non ?

  17. #17
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par Gurdil le nain Voir le message
    Je profite de cette discussion fort intéressante pour poser une question

    Dans la liste, il stocke l'objet ou sa référence ?
    D'après la réponse de ctxnop : l'objet lui même !

  18. #18
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Gurdil le nain Voir le message
    Dans la liste, il stocke l'objet ou sa référence ?
    En .Net, on ne manipule que les references pour les types references (class) et les valeurs pour les types ... value (struct).

    Le concept de déréférencer un type reférence n'existe pas en C#

  19. #19
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par jujulips Voir le message
    D'après la réponse de ctxnop : l'objet lui même !
    Non.

  20. #20
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Non.
    J'ai mal compris sa réponse?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. La notion d'objet sous PowerShell, par laurent Dardenne
    Par Laurent Dardenne dans le forum Articles
    Réponses: 1
    Dernier message: 08/08/2013, 12h56
  2. Notion d'objet (Protected)
    Par Adel13 dans le forum Langage
    Réponses: 8
    Dernier message: 03/01/2011, 11h31
  3. Notion d'objet - Application à un exemple
    Par Tata_Monique dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 07/10/2008, 13h24
  4. Debutant -Notions Prog Objet java
    Par jeremypd dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 10/03/2008, 11h52

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