Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Python et POO: Différence entre relation dîtes "d'association" et de "dépendance".

+4 votes

Bonjour à tous,

n'ayant pas trouver de réponse sur googleuh je pose la question ici.
Je suis actuellement en train de lire le bouquin "Programmation Orientée objet" de Hugues Bersini. Et là on me parle de relation entre deux objets dîtes d'association et de dépendance:

J'attend juste qu'on me dise si ce que je pense est juste ou faux.

Donc si j'ai bien compris:
-Une relation d'association c'est (On va nommer nos deux objets "Bidule" et "Machin"):
Un objet qui instancie un autre objet en tant qu'un de ses propres attribut comme ce qui suit?

class Machin:
    def __init__(self):
        pass

class Bidule:
    def __init__(self):
        self.attribut = Machin()

MonInstance = Bidule()

-Et enfin une relation dîtes de dépendance, c'est lorsque qu'un objet instancie un autre objet par le biais d'une méthode comme ce qui suit?

class Machin:
    def __init__(self):
        pass

class Bidule:
    def __init__(self):
         pass
    def ma_fonction(self):
        self.attribut = Machin()

MonInstance = Bidule()

La seule différence entre entre ces deux méthodes, c'est qu'à la première, l'instance de Machin arrive avec l'instanciation de Bidule et disparaît avec celle-ci. et à la deuxième, une nouvelle instance de Machin sera crée à chaque appel de la méthode "ma_fonction"?

J'ai bon ou je suis complètement à côté de la plaque?

Edit:
Bon j'ai l'impression que je me suis planté et que ça concerne plus les moyens de communications entre deux objets(Ils auraient pu mettre le mot "relation" en gras et en majuscule j'y aurai p'tet prêté attention):

Donc normalement en vrai, une relation d'association entre deux objets ça ressemble plus à ça:

class Machin:
    def __init__(self):
        pass

 class Bidule:
    def __init__(self, valeur):
        self.attribut = valeur

 MonInstance = Bidule(Machin())

Et une relation de type "dépendance" ressemble plus à ça?

class Machin:
    def __init__(self):
        pass

class Bidule:
    def __init__(self):
        pass
    def ma_fonction(self, valeur):
        pass

InstanceDeBidule = Bidule()

InstanceDeMachin_1 = Machin()
InstanceDeBidule.ma_fonction(InstanceDeMachin_1)

InstanceDeMachin_2 = Machin()
InstanceDeBidule.ma_fonction(InstanceDeMachin_2)

InstanceDeMachin_etc = Machin()
InstanceDeBidule.ma_fonction(InstanceDeMachin_etc)

Bon je crois que je suis dans le droit chemin là.

demandé 28-Jun-2016 par daimebag (196 points)

2 Réponses

+3 votes
 
Meilleure réponse

Je connaissais pas le bouquin ni le vocabulaire mais après lecture du chapitre concerné, il me semble clair que ta deuxième version est correcte.

Pour compléter un peu tes exemples, dans la ligne du livre d'origine, on pourrait les tourner comme cela:

La classe Machin

class Machin:
    def machiner(self):
        pass

Bidule en association avec Machin:

# relation d'association
class Bidule:
    def __init__(self, valeur):
        self.mon_machin = valeur
    def biduler(self):
        return self.mon_machin.machiner()

Bidule en dépendance avec Machin

# relation de dépendance
class Bidule:
    def biduler(self, un_machin):
        return self.un_machin.machiner()

Ce que l'auteur souligne c'est la différence de durée du lien entre un bidule et un machin.

répondu 28-Jun-2016 par bubulle (2,256 points)
sélectionné 10-Jul-2016 par daimebag

En + de 10 ans de dev, je n'ai jamais entendu ou lu ces termes. A mon avis, l'auteur a soit inventé sa nomenclature, soit il a utilisé quelque chose d'obsolète ou d'obscure. Du coup ta réponse est de loin la meilleure : lire le livre et analyser ce qu'il veut dire.

@Sam: Ce sont des notions classiques en modélisation UML, bien expliquées ici par exemple. Mais peut-être trouves tu UML obsolète et obscur ;)

Salut! Désolé pour le retard!
En tout cas ça confirme bien ce que je pensais.

Merci d'avoir pris le temps de répondre!

–2 votes

Je le comprends de manière différente. J'ai utilisé plusieurs langages objets.

Moi "association" je le comprends comme "composition"
et "dépendance", je le comprends comme "héritage".

Mais je comprends peut-être mal ;)

répondu 29-Jun-2016 par DoubleNain (1,718 points)

alors oui "l'association" proposée passe par de la composition mais non la "dépendance" de l'auteur n'a rien à voir avec de l'héritage.

@bubulle: Il ne s'agit pas ici de composition (ni même d’agrégation) au sens UML, vu que le sujet n'est pas de dire ici qui est subordonné à qui, mais simplement d'exprimer des liens logiques entre différentes classes.

@yoch: je te fais confiance, je ne maitrise vraiment pas l'UML.

...