前言

在面向对象中,类之间的关系有六种,分别是:

  1. 关联关系(Association)
  2. 泛化关系(Generalization)
  3. 依赖(Dependency)
  4. 聚合(Aggregation)
  5. 组合(Composite)

类与类之间关系

关联(Association)

两个相对独立的对象,当一个对象的实例与另一个对象的实例存在固定关系时,这两个对象之间就存在关联关系,关联体现的是一种强关联关系,关联关系形式有四种:单向关联、双向关联、自身关联和多维关联。

单向关联
场景:订单和商品,订单中包含商品,但是商品并不知道订单的存在。
UML类图:

代码体现:

C#

 public class Order
{
public List<Product> products; public Order()
{
products = new List<Product>();
} public void AddProduct(Product product)
{
products.Add(product);
} public void Print()
{
foreach (var product in products)
{
Console.WriteLine(product.Name);
}
}
} public class Product
{
public string Name { get; set; }
}

JavaScript

   var Order = function () {
var products = [];
this.addProduct = function (product) {
products.push(product);
}; this.Print = function () {
for (var i = 0; i < products.length; i++) {
console.log(products[i].Name);
}
}
}; var Product = function (name) {
this.Name = name;
}

双向关联
场景:订单和客户,订单属于客户,客户拥有一些订单

UML类图:

代码体现:

C#

public class Order
{
public User GetUserByOrderId(string orderId)
{
return new User();
}
}
 public class User
{
public List<Order> GetOrders()
{
return new List<Order>();
}
}

JavaScript

        var User = function (name) {
this.Name = name; this.getOrder = function () {
console.log("getOrder");
};
};
var Order = function () { this.getUserByOrderId = function (id) {
console.log("getUserByOrderId:" + id);
};
}

自身关联
同一个对象之间的关联

UML类图:

多维关联

多个对象之间存在联系

场景:公司雇佣员工,同时公司需要字符工资给员工

依赖(Dependency)

类A要完成某个功能必须引用类B,则A和B存在依赖关系,依赖关系是弱关联关系。

场景:司机和汽车

UML类图:

代码体现:

  public class Driver
{
public void Drive(Car car)
{
car.Run();
}
} public class Car
{
public void Run()
{
Console.WriteLine("跑起来了");
}
}

JavaScript

        var Driver = function () {
this.dirve = function (car) {
if (car instanceof Car) {
car.run();
} else {
throw new Error("参数异常,必须是Car类型");
}
}
}; var Car = function () {
this.run = function () {
console.log("跑起来了");
}
}

泛化(Generalization)
泛化就是类与类的的继承关系,类与接口的实现关系。

场景:狗是一个动物;鸟会飞

UML类图:

代码体现:

C#

   public abstract class Animal
{ } public class Dog
{
}

JavaScript

        function Animal() { }

        function Dog() { }

        Dog.prototype = new Animal();
Dog.prototype.constructor = Dog; var dog = new Dog();
console.log(dog.constructor);
console.log(dog instanceof Dog);

聚合(Aggregation)
当对象A被加入到对象B中,称为对象B的一部分时,对象A和B就存在聚合关系。聚合关系是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。

场景:大雁与雁群

UML类图:

代码体现

C#

public class GooseGroup
{
public Goose goose; public GooseGroup(Goose g)
{
goose = g;
} } public class Goose
{
}

JavaScript

 var Goose = function() {

        };

        var GooseGroup = function(goose) {
var _goose = goose;
console.log(_goose);
};

组合(Composition)
对象A包含对象B,对象B离开对象A就没有存在的意义,是一种更强的关联关系。

场景:大雁和翅膀

UML类图:

代码体现

C#

  public class Goose
{
public Wing wing; public Goose()
{
wing = new Wing();
} } public class Wing
{
}

JavaScript

    var Goose = function() {

            var wing = new Wing();
}; var Wing = function() {};

区别

关联和依赖区别:

  • 从代码的角度看,依赖关系中依赖是作为方法的参数或返回值,或者方法的变量形式体现的;关联关系则是作为一个类的属性体现的,相比依赖,关联是更加固定,更为持久的持有的关系。
  • 从生命周期来看,依赖关系则是随着类的方法被调用时而产生,伴随着方法的结束而结束;关联关系则是当类实例化的时候即产生,当类的销毁时而结束,相比依赖,关联的生命周期更长。

聚合和组合区别:

  • 构造函数不同,聚合类的构造函数参数是另一个类的实例;组合类的构造函数包含另一个类的实例化。
  • 信息的封装性不同,聚合关系中,GooseGroup类和Goose类是独立的,客户端都可以访问到;组合关系中,客户端只能访问到Goose类,Wing类则访问不到,因为它被封装在Goose类中。

类与类之间关系,用C#和JavaScript体现的更多相关文章

  1. 2.java面向对象类与类/类与对象之间关系详解

    继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...

  2. 初识UML类图--类之间关系

    前言 最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这 ...

  3. PHP类和对象之间的关系

    类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...

  4. UML类图画法及其之间关系

    1.泛化又名继承(Generalization),带空心箭头的实线表示,箭头指向父类 2.实现(Realization),带空心的虚线表示 3.关联(Association),类与类之间的关联,它使一 ...

  5. 图解UML类与类之间的六中关系

    大话设计模式上的一个图,我用EA画出来的:  UML中的6大关系相关英文及音标:  依赖关系 dependency [di'pendənsi]  关联关系 association  [ə,səuʃi' ...

  6. 从零开始学C++之RTTI、dynamic_cast、typeid、类与类之间的关系uml

    一.RTTI Run-time type information (RTTI) is a mechanism that allows the type of an object to be deter ...

  7. java 类与类之间的关系 及uml图

    类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(associ ...

  8. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  9. Java多线程访问共享资源类及类之间关系设计

    1.涉及的类 多线程类.共享资源存储类 2.类之间的关系 (1)共享资源存储类作为线程类的全局成员变量,在线程初始化时,通过setter或者构造注入(当然此处是同一个共享资源类对象),实现多个线程共享 ...

  10. python 类与类之间的关系

    一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字. ...

随机推荐

  1. 对象内部属性[[Class]]

    1.概述 所有的typeof返回值为‘object’的对象都包含一个内部属性[[Class]],我们将它可以看做内部的分类,而非传统面向对象意义的分类.这个属性无法直接访问,一般通过Object.pr ...

  2. POJ 3221 Diamond Puzzle(BFS)

    Description A diamond puzzle is played on a tessellated hexagon like the one shown in Figure 1 below ...

  3. Spring 配置dataSource和sessionFactory

    记得导入dbcp和pool的jar包.   <?xml version="1.0" encoding="UTF-8"?> <beans xml ...

  4. 使用JDK自带jvisualvm监控tomcat(收藏)

    发表于2年前(2013-08-27 16:28)   阅读(11467) | 评论(14) 326人收藏此文章, 我要收藏 赞9 阿里云携手开源中国众包平台发布百万悬赏项目 »   jvisualvm ...

  5. ohasd failed to start: Inappropriate ioctl for device

    今天同事在安装GI的时候出现故障.让我帮忙看一下. 以下记录例如以下: 问题现象: 在安装gi的时候运行root.sh报例如以下错误: Finished running generic part of ...

  6. C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间

    先来看下面的例子: #include <stdlib.h> #include <string.h> #include <stdio.h> #pragma warni ...

  7. C# AppDomain 类

    /*** AppDomain 表示应用程序域,它是一个应用程序在其中执行的独立环境.无法继承此类. 应用程序域(由 AppDomain 对象表示)为执行托管代码提供隔离.卸载和安全边界. 使用应用程序 ...

  8. java包命名规则

    package indi/onem.发起者名.项目名.模块名... package pers.个人名.项目名.模块名... package priv.个人名.项目名.模块名... package te ...

  9. iOS 学习笔记一【屏幕截图,并显示当前View】

    // 直接上代码: // // ViewController.h // 屏幕截图测试 // // Created by 博爱之家 on 15/11/11. // Copyright © 2015年 博 ...

  10. G - Harmonic Number (II) 找规律--> 给定一个数n,求n除以1~n这n个数的和。n达到2^31 - 1;

    /** 题目:G - Harmonic Number (II) 链接:https://vjudge.net/contest/154246#problem/G 题意:给定一个数n,求n除以1~n这n个数 ...