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(); } }
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(); } }
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(); } }
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; }
所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
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!