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

Python Discussion :

Classe ? qu'est-ce ?


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut Classe ? qu'est-ce ?
    Bonjour à tous,

    En ce moment j'apprends le langage python, mais j'ai beaucoup de mal quant au concept de CLASSE. Quelqu'un aurait-il une explication moins abstraite et plus imagée pour le littéraire que je suis ?

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Bonjour,

    Tout homme est mortel.
    aristote est un homme
    donc aristote est mortel
    Homme est une classe, ie un genre/type d'objet
    Aristote est une instance de classe, <=> le genre de aristote est homme
    <=> aristote a été construit, instancié, par la classe homme

    mortel est un attribut de la classe humain (elle est commune à toutes les instances)

    le nom "aristote" est un attribut de l'instance (elle varie avec l'instance)

    En python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Homme:
        mortel = True
        def __init__(self,name): self.name= name
     
    someone= Homme("Aristote")
    someone_else = Homme("Moi-meme")
     
    Homme.mortel #-> True (Tout homme est mortel )
    isinstance(someone,Homme) # renvoie true (Aristote est un homme)
    someone.mortel # -> True (Aristote est mortel)
    Sinon, si tu connais Platon,
    L'Idée de fleur est une classe
    Une fleur en particulier est une instance de la classe Fleur

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ça ne va pas être facile d'être en même temps exact sur le plan informatique, et imagé et simplifié. Mais bon.

    Une classe est un "modèle" pour une catégorie d'objet. Elle regroupe tout ce qui concerne l'objet: ses propriétés et ses méthodes de traitement. Ce regroupement s'appelle "l'encapsulation".

    Par exemple, dans un espace de dessin, on peut définir la catégorie "point":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Point(object):
     
        def __init__(self, x, y):
            self.x = x
            self.y = y
     
        def dessine(self):
            print u"on dessine le point x=%d, y=%d" % (self.x, self.y)
    Une fois cette classe créée, on peut définir plusieurs points par "instanciation". Dans cette opération, la méthode __init__ sera exécutée, et les 2 arguments x et y seront stockés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = Point(20,30)
    B = Point(50,60)
    C = Point(70,80)
    A, B et C sont des instances de la classe Point. Et dans cette classe, les "self" sont les adresses des instances: la même classe permettra donc de définir autant de points qu'on veut, chaque point ayant ses propres attributs self.x et self.y, qu'on pourra d'ailleurs appeler de l'extérieur: A.x, A.y.

    Et une fois qu'on a défini ces 3 points, on peut leur demander de se dessiner (dessine() est une "méthode" de la classe Point):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A.dessine()
    on dessine le point x=20, y=30
     
    B.dessine()
    on dessine le point x=50, y=60
     
    C.dessine()
    on dessine le point x=70, y=80
    Ce qui est intéressant dans ces 3 instructions, c'est que la partie du programme qui demande aux points de se dessiner ne sait pas comment ils vont faire: c'est la classe Point qui sait!

    Maintenant, on veut définir un cercle, et pour ça, il faut 1 point (les coordonnées du centre) et un rayon. Ce n'est pas la peine de repartir de zéro: on va partir de la classe Point, et on va ajouter ce qui manque (le rayon): c'est l'héritage:

    Code : 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
    class Cercle(Point):
     
        def __init__(self, x, y, R):
            Point.__init__(self,x,y)
            self.R = R
     
        def dessine(self):
            print u"on dessine le cercle x=%d, y=%d, R=%d" % (self.x, self.y, self.R)
     
    D = Cercle(20,30,10)
    D.dessine()
    on dessine le cercle x=20, y=30, R=10
     
    E = Cercle(45,23,42)
    E.dessine()
    on dessine le cercle x=45, y=23, R=42
    On dit que la classe Cercle hérite de Point à 2 endroits: dans class Cercle(Point), et dans Point.__init__(self,x,y). Une fois cela fait, certaines instructions de Point, qui sont encore valables dans Cercle, ne sont pas répétées: par exemple self.x=x et self.y=y. Par contre, self.R=R manquait: on l'ajoute.

    Et, bien sûr, la méthode dessine doit être redéfinie (c'est la "surcharge") parce qu’on ne dessine pas de la même façon un point et un cercle.

    On pourrait aussi ajouter de nouvelles méthodes pour, par exemple, calculer la surface du cercle, ce qui n'aurait pas de sens pour un point.

    On peut continuer longtemps comme ça à créer tous les objets graphiques qu'on veut. Et quand on veut les dessiner, on leur envoie la même instruction (X.dessine()) et chacun des objets s'affichera en étant le seul à savoir comment il faut faire.

    Ouf... Je suis loin d'avoir tout dit, et j'ai conscience d'avoir fait des raccourcis, mais au moins, ces objets à dessiner qui se définissent les uns à partir des autres, c'est assez concret. Pour la suite, voir la doc Python ainsi que, par exemple: http://fr.wikipedia.org/wiki/Classe_%28informatique%29 et http://fr.wikipedia.org/wiki/Objet_%28informatique%29

    Bon courage!

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Hors sujet

    Dans la métaphore la plus complète n'est il pas, dans un premiers temps, plus simple de présenter une classe comme l'ADN d'un objet ?

    @+

  5. #5
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Billets dans le blog
    1
    Par défaut Moi ... je viens de comprendre ;-P
    Bonjour,

    Si l'explication fournie par VV33D (#2) est imagée, elle reste un peu ... floue au niveau des termes employés.

    Mais pour celle fournie par tyrtamos (#3), elle m'a enfin permis de comprendre ce principe des classes que j'évitais d'utiliser tellement cela me paraissait hermétique. J'ai bien lu une quantité de documentation là-dessus (en C, C++, Python), mais les termes techniques employés à tours de bras (instances, méthodes, héritage, ...) ne voient jamais leur sens expliqué simplement comme ici. Et que dire lorsque ces termes sont en anglais

    Merci pour ces efforts didactiques.

    J'espère que, comme moi, roro34570 (#1) en aura tiré autant de bénéfice.

    A+

  6. #6
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Et si on essayait l'approche "historique"?

    Il y a quelques années on écrivait par exemple un driver de joystick, avec ses différents bits hardware lisibles à une adresse précise. Ça marchait déjà bien, c'était le minimum pour écrire un jeu. Attention, ce n'est pas du C, plutôt un pseudo code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    joystickPort = 0x415;
    BIT_DROITE = 0x02
    if (*joystick & BIT_DROITE == BIT_DROITE)
       allerADroite();
    Puis on a ajouté quelques fonctions, histoire d'isoler le bit "va à droite" du bit "va à gauche" ou encore le bit "t'as appuyé sur la gâchette". Ceci afin que le programmeur dit "de haut niveau" n'ait plus qu'un booléen à traiter pour décider si le personnage va aller a droite ou à gauche. C'était merveilleux, on avait réussi à coder ce qu'on voulait, ça marchait super bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    joystickPort = 0x415;
    if (aDroiteActif(*joystickPort ))
       allerADroite();
    Et à ce moment là, y'a une andouille qui a demandé "Je peux jouer aussi?". Et voilà, les classe étaient inventées, elles nous viennent en fait de la multiplication des joysticks. On se disait "il nous faudrait un truc qui nous permette d'écrire ça:".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    joystick1= JOYSTICK(port=0x415);
    joystick2= JOYSTICK(port=0x416);
    Il faudrait aussi que les joysticks possèdent leur propres fonctions. Il y a un convention pour dire qu'une fonction ou une variable appartient à une classe, c'est le point. D'ailleurs, une autre convention, c'est de dire qu'une fonction appartenant à une classe s'appelle une méthode... Que l'on pourrait invoquer ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(joystick1.enAvantActif())
        faireAvancerMario();
    if(joystick2.enArriereActif())
        faireReculerTortue();
    En fait une classe, c'est ça: Un "modèle d'objet". Avec ses propriétés (c'est le nom d'une variable appartenant à une classe) et ses méthodes. Ce qui permet d'instancier (créer des objets suivant le modèle) à l'infini. Quasiment tous les langages intègrent ce concept de Programmation orientée objet (POO). Viennent s'y ajouter des concepts comme l'héritage: on peut fabriquer des berlines, des 4x4 ou des coupés à partir d'un objet "véhicule à 4 roues et 1 volant" en héritant de l'objet parent les propriétés et méthodes puis en en personnalisant quelque-unes.

    On peut programmer sans utiliser la POO, mais on rate quelques chose, il faut passer par des "structures", c'est beaucoup moins lisible, donc beaucoup moins compréhensible. Les exemples fourmillent. Les carnets d'adresses par exemple, où les contacts sont des instances de la classe CONTACT. les drivers, avec leurs méthodes lire et écrire, etc...

    A+

    Pfeuh

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Un grand merci à tous pour ce florilège de réponses toutes complémentaires. Je pense avoir bien saisie le concept. Il me manque plus qu'à le mettre en application (y'a plus qu'à )

    Apparement ce post n'était pas inutile et je pense qu'il servira à plus d'un

Discussions similaires

  1. La classe n'est plus ouvrable en mode design
    Par Franck2mars dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/01/2007, 08h01
  2. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02
  3. Réponses: 3
    Dernier message: 09/02/2006, 17h01
  4. <input CLASS= qu'est ce class dans un formulaire?
    Par jamesleouf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 31/08/2005, 12h36
  5. Erreur : La classe n'est pas enregistrée
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/08/2005, 12h04

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