类与类之间关系,用C#和JavaScript体现
前言
在面向对象中,类之间的关系有六种,分别是:
- 关联关系(Association)
- 泛化关系(Generalization)
- 依赖(Dependency)
- 聚合(Aggregation)
- 组合(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体现相关推荐
- python类与类的关系_python 类与类之间的关系
一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字. ...
- Day-16 面向对象03 类与类之间的关系
一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...
- 40)类与类之间的关系(has use is)
1)类与类之间的关系 一般就是三类: ①has--A ②use--A ③is-----A ①has--A 包含关系,用以描述一个类由多个"部件构成".实现has--A关系用类成 ...
- 类与类之间的交互关系
类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...
- Java中基本数据类型和Object之间的关系
1.基本数据类型和Object之间是没有关系的 2.基本数据类型的包装类 例如int 的包装类Integer的父类则是Object 输入:12 解释:在赋值的过程中进行自动装箱
- 类与类之间关系的表示方式
类与类之间关系的表示方式 关联关系 关联关系是对象之间的一种引用关系, 用于表示一类对象与另一类对象之间的联系,如老师和学生.师傅和徒弟.丈夫和妻子等. 关联关系是类与类之间最常用的一种关系,分为一般 ...
- python:类的空间问题 类与类之间的关系
1.类的空间问题 1.1何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = ...
- 浅谈UML类图中类之间的5种关系
什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...
- c++类与类之间关系
类与类之间关系 类与类之间关系 UML表示和代码表示 类与类之间关系 类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下. 类与类之间存在以下关 ...
- 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类
常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...
最新文章
- P1080 国王游戏(贪心+大数乘除)
- 如何运行react创项目
- mysql M/S配置小记
- Python-可视化Evoked数据
- Atitit.获取主板与bios序列号获取硬件设备信息 Wmi wmic 的作用
- 成都Uber优步司机奖励政策(3月17日)
- 页面用ajax实现简单的连接数据库
- RocketMQ之事务消息
- matlab里的scalar,scalar_scalar与vector之间的区别
- BZOJ2007 NOI2010 海拔 网络流+最短路
- 微信公众号测试账号获取授权须关注
- JavaScript中Array类型方法总结
- alpha shapes提取平面点云边界点
- iOS开发之Tom猫
- 网络基础知识:10M、50M、100M宽带下载速率一般是多少?
- 用计算机打字英语单词,计算机基本英语词汇
- 智能合约升级原理01---起源
- 2023 诚通网盘在线解析无广告高速下载网站源码
- QT开发中常用的快捷键(Windows+QT)
- 用bat批量启动多个软件/程序