前言

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

  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类中。

转载于:https://www.cnblogs.com/Khadron/p/OOP_Class_Relationship.html

类与类之间关系,用C#和JavaScript体现相关推荐

  1. python类与类的关系_python 类与类之间的关系

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

  2. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  3. 40)类与类之间的关系(has use is)

    1)类与类之间的关系  一般就是三类: ①has--A ②use--A ③is-----A ①has--A  包含关系,用以描述一个类由多个"部件构成".实现has--A关系用类成 ...

  4. 类与类之间的交互关系

    类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...

  5. Java中基本数据类型和Object之间的关系

    1.基本数据类型和Object之间是没有关系的 2.基本数据类型的包装类 例如int 的包装类Integer的父类则是Object 输入:12 解释:在赋值的过程中进行自动装箱

  6. 类与类之间关系的表示方式

    类与类之间关系的表示方式 关联关系 关联关系是对象之间的一种引用关系, 用于表示一类对象与另一类对象之间的联系,如老师和学生.师傅和徒弟.丈夫和妻子等. 关联关系是类与类之间最常用的一种关系,分为一般 ...

  7. python:类的空间问题 类与类之间的关系

    1.类的空间问题 1.1何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = ...

  8. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  9. c++类与类之间关系

    类与类之间关系 类与类之间关系 UML表示和代码表示 类与类之间关系 类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下. 类与类之间存在以下关 ...

  10. 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

     常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...

最新文章

  1. P1080 国王游戏(贪心+大数乘除)
  2. 如何运行react创项目
  3. mysql M/S配置小记
  4. Python-可视化Evoked数据
  5. Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用
  6. 成都Uber优步司机奖励政策(3月17日)
  7. 页面用ajax实现简单的连接数据库
  8. RocketMQ之事务消息
  9. matlab里的scalar,scalar_scalar与vector之间的区别
  10. BZOJ2007 NOI2010 海拔 网络流+最短路
  11. 微信公众号测试账号获取授权须关注
  12. JavaScript中Array类型方法总结
  13. alpha shapes提取平面点云边界点
  14. iOS开发之Tom猫
  15. 网络基础知识:10M、50M、100M宽带下载速率一般是多少?
  16. 用计算机打字英语单词,计算机基本英语词汇
  17. 智能合约升级原理01---起源
  18. 2023 诚通网盘在线解析无广告高速下载网站源码
  19. QT开发中常用的快捷键(Windows+QT)
  20. 用bat批量启动多个软件/程序

热门文章

  1. 学Java编程选择Java面授教学最有效
  2. Serekh塞拉赫资源包背后的创作过程
  3. 使用Unity引擎打造赛博朋克之城!CIGA Game Jam 2019 48小时独立游戏开发挑战
  4. ubuntu下无法在目录下创建文件夹,权限不足解决办法
  5. 2021年互联网企业软件测试面试题(超实用)
  6. day12装饰器进阶
  7. Java super和this
  8. 【面试经历】再惠网络、远景能源、东软集团
  9. Asp.Net Core(.net内核)
  10. MainService流程