Maison Java javaDidacticiel Explication détaillée des différences entre les dépendances, les associations, les agrégations et les combinaisons en Java

Explication détaillée des différences entre les dépendances, les associations, les agrégations et les combinaisons en Java

Aug 10, 2017 pm 01:48 PM
java 组合 聚合

Cet article présente principalement la différence entre la dépendance-association-agrégation-combinaison Java. La dépendance est plus facile à distinguer. Ce qui suit est une introduction très détaillée pour ceux qui sont intéressés. regardez ensemble

Tout d'abord, jetez un œil aux définitions de ces quatre relations dans le livre :

  •  La relation de dépendance est le lien entre les classes. Une relation de dépendance indique qu'une classe dépend de la définition d'une autre classe. Par exemple, une personne (Person) peut acheter une voiture (car) et une maison (House). La classe Person dépend de la définition des classes Car et House, car la classe Person fait référence à Car et House. Contrairement à l'association, il n'y a pas d'attributs de type Car et House dans la classe Person. Les instances de Car et House sont passées dans la méthode buy() en tant que paramètres. De manière générale, les dépendances se reflètent dans le langage Java sous forme de variables locales, de paramètres formels de méthodes ou d'appels à des méthodes statiques.

  •  La relation d'association (Association) est une connexion entre les classes, qui permet à une classe de connaître les attributs et les méthodes d'une autre classe. Les associations peuvent être bidirectionnelles ou unidirectionnelles. Dans le langage Java, les relations d'association sont généralement implémentées à l'aide de variables membres.

  •  La relation d'agrégation est un type de relation d'association et est une relation d'association forte. L'agrégation est la relation entre un tout et un individu. Par exemple, la relation entre la catégorie automobile et la catégorie moteur, la catégorie pneu et d’autres catégories de pièces est la relation entre le tout et l’individu. Comme les relations d'association, les relations d'agrégation sont également implémentées via des variables d'instance. Or, les deux classes impliquées dans la relation d'association sont au même niveau, tandis que dans la relation d'agrégation, les deux classes sont à des niveaux inégaux, l'une représentant le tout et l'autre représentant la partie.

  •  La relation de composition est un type de relation d'association et est une relation plus forte que la relation d'agrégation. Cela nécessite que l'objet représentant le tout dans une relation d'agrégation ordinaire soit responsable de représenter le cycle de vie d'une partie de l'objet, et la relation de combinaison ne peut pas être partagée. L'objet représentant le tout doit être responsable du maintien en vie de l'objet partiel et, dans certains cas, de l'anéantissement de l'objet responsable de la partie. Un objet représentant un tout peut transmettre un objet représentant une partie à un autre objet, qui est responsable du cycle de vie de cet objet. Autrement dit, l'objet représentant la pièce ne peut être combiné qu'avec un seul objet à chaque instant, et ce dernier est exclusivement responsable du cycle de vie. Les pièces ont le même cycle de vie que l’ensemble.

- Extrait de "Programmation orientée objet Java"

Le degré de couplage des relations ci-dessus augmente en séquence (le concept de degré de couplage sera discuté en détail plus tard , vous pouvez le comprendre temporairement ici. C'est le degré d'impact sur les autres classes lorsqu'une classe change. Plus l'impact est faible, plus le couplage est faible. Plus l'impact est grand, plus le couplage est fort.) Nous savons déjà grâce à la définition que la dépendance est en fait une association relativement faible, l'agrégation est une association relativement forte et la combinaison est une association plus forte, donc si nous les distinguons en général, en fait, ces quatre relations sont toutes des relations liées.

La dépendance est facile à distinguer. C'est le couplage le plus faible. En Java, elle s'exprime sous forme de variables locales, de paramètres formels de méthodes, ou d'appels à des méthodes statiques, comme dans l'exemple suivant : Le Driver. La classe dépend de la classe Car et les trois méthodes de Driver démontrent trois formes différentes de dépendance.


class Car { 
  public static void run(){ 
    System.out.println("汽车在奔跑"); 
  } 
} 
class Driver { 
  //使用形参方式发生依赖关系 
  public void drive1(Car car){ 
    car.run(); 
  } 
  //使用局部变量发生依赖关系 
  public void drive2(){ 
    Car car = new Car(); 
    car.run(); 
  } 
  //使用静态变量发生依赖关系 
  public void drive3(){ 
    Car.run(); 
  } 
}
Copier après la connexion

Les relations d'association sont généralement implémentées en Java à l'aide de variables membres, et parfois sous la forme de paramètres de méthode. Toujours en utilisant les exemples Driver et Car, le formulaire de paramètre de méthode peut être utilisé pour exprimer des dépendances ou des associations. Après tout, nous ne pouvons pas exprimer la sémantique de manière trop précise dans le programme. Dans cet exemple, les variables membres sont utilisées pour exprimer ce sens : la voiture est ma propre voiture, et je "possède" cette voiture. Utilisez les paramètres de la méthode pour exprimer : la voiture n’est pas à moi, je suis juste un conducteur, je conduis la voiture que les autres me donnent et j’utilise cette voiture.


class Driver { 
  //使用成员变量形式实现关联 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
  ... 
  //使用方法参数形式实现关联 
  public void drive(Car car){ 
    car.run(); 
  } 
}
Copier après la connexion

La relation d'agrégation est une relation d'association relativement forte, qui est généralement implémentée sous la forme de variables membres en Java. Il existe une relation entre le tout et les parties entre les objets. Par exemple, dans l'exemple ci-dessus


class Driver { 
  //使用成员变量形式实现聚合关系 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
}
Copier après la connexion

Si la sémantique suivante est donnée au code ci-dessus : la voiture est une voiture privée et fait partie de la propriété du conducteur. Le même code représente alors une relation d’agrégation. Les relations d'agrégation utilisent généralement la méthode setter pour attribuer des valeurs aux variables membres.

Supposons que la sémantique suivante soit donnée : une voiture est une propriété indispensable pour un conducteur. Pour devenir conducteur, vous devez d'abord avoir une voiture. Si la voiture a disparu, le conducteur ne le fera pas. veux vivre. Et si le conducteur cesse d’être conducteur, la voiture sera détruite et personne d’autre ne pourra l’utiliser. Cela signifie une relation combinée. De manière générale, afin d'exprimer la relation de combinaison, les constructeurs sont souvent utilisés pour atteindre l'objectif d'initialisation. Par exemple, dans l'exemple ci-dessus, un constructeur avec Car comme paramètre est ajouté


<🎜. >

public Driver(Car car){ 
  mycar = car; 
}
Copier après la connexion

        所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles