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 :

Qu'est-ce qu'un objet composite?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut Qu'est-ce qu'un objet composite?
    Bonjour à tous


    depuis quelque temps je m'intéresse au langage python qui (parait-il) est le plus facile à appréhender pour pratiquer la programmation orienté objet

    le concept de programmation objet est acquis (objet méthode attributs)
    néanmoins je sèche sur le concept "d'objet composite" ou objet composé d'objet

    un exemple:

    class Rectangle :
    "définition d'une classe de rectangles"
    boite= rectangle ( )
    boite largeur =50,0
    boite hauteur =35,0


    jusqu'ici ça va! par contre

    boite.coin=Point( )
    boite.coin.x=12.0
    boite.coin.y=27


    je vous donne mon interprétation (bancale bien sur), on crée une instance ou un objet à partir de la classe point qui est égal à l'attribut coin de l'objet boite

    là je sèche je sais pas s'il existe une barrière ou un fossé qui m'empeche de comprendre ces lignes mais franchement je galère

    Pouvez-vous m'aider ???
    où est ce que j'ai loupé un virage ??

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un objet est un ensemble de données (attributs) et de traitements sur ces données (méthodes).

    Si on décortique ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class Rectangle :
        "définition d'une classe de rectangles"
    Ici, tu définis une classe Rectangle vide. Cette classe te permet d'instancier des objets : c'est un plan à partir desquels des objets vont être construits.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boite = Rectangle()
    Ceci est une instanciation de la classe Rectangle. Boite est donc une instance de Rectangle : un objet issu du plan qu'est Rectangle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boite.largeur = 50.0
    boite.hauteur= 35.0
    Ici, tu injectes à la volée dans ton objet des attributs : des données spécifiques à l'objet (en l'ocurrence, la largeur et la hauteur).
    Ces données sont des types simple (des nombres).
    Mais tu peux aussi avoir comme attributs d'objets d'autres objets. Dans ton exemple, tu considère que ton rectangle est composé d'une largeur et d'une hauteur, mais aussi de coins. Et les coins sont des points. Donc tu injectes en attribut de ton instance un objets représentant un coin de ton rectangle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boite.coin = Point()
    Tu notes que boite.coin est une instance de la classe qu'est Point.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boite.coin.x = 12.0
    boite.coin.y = 27
    Ici tu rajoutes dans boite.coin (dans l'objet coin de l'objet boite) des attributs x et y, les coordonnées du coin. Exactement comme tu l'as fait avec la largeur et la hauteur de ton rectangle.

    J'espère être clair.

    Pour aller plus loin, il est déconseillé d'injecter des attributs dans un objet instancié. Il vaut mieux passer par un constructeur.
    Pour apprendre le python, je ne peux que tu recommander la lecture de Gérard Swinnen qui est très pédagogue : son cours est disponible en livre mais aussi libre à télécharger :
    http://python.developpez.com/cours/apprendre-python3/

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut
    non j'arrive pas
    par exemple

    P1 =Point ( )

    là ça ne pose aucun problème je crée un objet P1 à partir de la classe Point

    par contre

    boite.coin= Point ( )

    j'arrive pas à interpréter cette ligne (alors qu'il se passe la meme chose)
    créer un objet "coin" à partir de la classe Point,
    ou créer un objet à partir de la classe Point contenu dans un attribut de l'objet boite


    en fait j'arrive pas à "rapprocher" P1 et boite.coin


    et justement j'ai le livre de Gérard Swinnen et je bloque sur ce paragraphe

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK.
    Et si on sépare cette instruction en 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monCoin = Point()
    boite.coin = monCoin
    Dans un premier temps, tu crée un coin à partir d'un point. (Tu as compris cette étape d'après ce que tu me dis).
    Et dans un deuxième temps, tu le déclare comme attribut de boite (exactement comme tu l'as fait avec hauteur).

    Quand tu fais
    tu ajoutes hauteur comme attribut de boite. Comme tu ajoutes hauteur (un nombre) en attribut de ton rectangle, tu peux aussi ajouter coin (un point) en attribut de ton rectangle.

    Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monCoin = Point()
    monCoin.x = 12
    monCoin.y = 23
    boite.coin = monCoin
    est équivalent à celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boite.coin = Point()
    boite.coin.x = 12
    boite.coin.y = 23

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Par défaut
    je commence à voir la lumière (du moins je l'espère!!!)


    boite.coin= Point ( )

    à partir de la class "point" je crée
    un objet "coin"
    attribut de l'objet "boite"



    es-ce que c'est bon au niveau interprétation ??

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Est-ce-que ceci:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    # -*- coding: utf-8 -*-
     
    class Rectangle(object):
        def __init__(self, x, y, largeur, hauteur):
            self.x = x
            self.y = y
            self.largeur = largeur
            self.hauteur = hauteur
            self.coins = self.get_coins()
            self.cotes = self.get_cotes()
     
        def get_coins(self):
            coins = {1: Point(self.x, self.y, 'haut_gauche'),
                    2: Point(self.x + self.largeur, self.y, 'haut_droit'),
                    3: Point(self.x + self.largeur, self.y + self.hauteur, 'bas_droit'),
                    4: Point(self.x, self.y + self.hauteur, 'bas_gauche')}
            return coins
     
        def get_cotes(self):
            cotes = {1: Ligne(self.coins[1], self.coins[2], 'haut'),
                    2: Ligne(self.coins[2], self.coins[3], 'droit'),
                    3: Ligne(self.coins[3], self.coins[4], 'bas'),
                    4: Ligne(self.coins[4], self.coins[1], 'gauche')}
            return cotes
     
     
    class Point(object):
        def __init__(self, x, y, name=None):
            self.x = x
            self.y = y
            self.name = name
     
     
    class Ligne(object):
        def __init__(self, debut, fin, name=None):
            self.debut = debut
            self.fin = fin
            self.name = name
     
    rect = Rectangle(10, 25, 60, 90)
    print u"Le coté droit du rectange commence à: <%s:%s> finit à: <%s:%s> et s'appelle: '%s'" \
            % (rect.cotes[2].debut.x, rect.cotes[2].debut.y, rect.cotes[2].fin.x, 
                rect.cotes[2].fin.y, rect.cotes[2].name)
    ça aide ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bladejo95 Voir le message
    je commence à voir la lumière (du moins je l'espère!!!)


    boite.coin= Point ( )

    à partir de la class "point" je crée
    un objet "coin"
    attribut de l'objet "boite"



    es-ce que c'est bon au niveau interprétation ??
    C'est exactement ça.

    Le code posté par VinsS utilise des concepts de la POO que tu n'as pas encore du voir (notamment l'utilisation des constructeurs et des méthodes). Mais quand tu auras avancé, je te conseille de revenir le voir, ça te permettra de valider quelques connaissances.

    Bonne chance Et n'hésites pas à revenir vers nous

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bladejo95 Voir le message
    je commence à voir la lumière (du moins je l'espère!!!)


    boite.coin= Point ( )

    à partir de la class "point" je crée
    un objet "coin"
    attribut de l'objet "boite"



    es-ce que c'est bon au niveau interprétation ??
    Salut
    Exactement.
    Tu comprends bien que si tu écrivais boite.coin=12 cela signifie que tu stockerais l'entier "12" dans l'élément "coin" de ta boite. Ben de même que tu stockes un entier, tu peux stocker ce que tu veux (pourvu que ce "ce que tu veux" existe)
    Exemple
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    boite.couleur="rouge"          # Ici tu stockes une chaine
    boite.cote=6                      # Ici un entier
    boite.voisin=[]                    # Ici un tableau vide mais qui pourra ensuite être rempli (probablement avec la liste des boites voisines)
    boite.coin=Point()               # Ici un objet "Point" probablement défini plus haut
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Qu'est ce qu'un objet ?
    Par tabouet dans le forum Débuter
    Réponses: 13
    Dernier message: 12/11/2007, 15h42
  2. [WEB][Architecture] Qu'est-ce qu'un objet TIO ?
    Par nighma dans le forum Général Java
    Réponses: 6
    Dernier message: 07/09/2005, 09h00

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