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

前言

类之间的关系有六种,分别是:

  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类中。
时间: 2024-10-14 00:47:10

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

类与类之间的几种关系

一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性.  二.实现关系      实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系.在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性.在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现

UML 类与类之间的四大关系的一些图标及代码含义

UML 类与类之间的四大关系的一些图标及代码含义 另一个版本: 关联:连接模型元素及链接实例,用一条实线来表示: 依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示: 聚合:表示整体与部分的关系,用一条实线加空心菱形来表示: 组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示: 泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示: 实现:表示类与接口的关系,用一条虚线加空心箭头来表示:类与类之间存在以下关系:(1)泛化(Generalization)(2)关

什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

今天最主要的就是掌握了类与类之间的关系

今天编写出了表达式计算器的第一版程序,主要还是更加熟悉了类与类之间的关系.第一版程序有个问题,就是它任何情况下都执行右结合律,比如正常输入8-9+1,程序处理成8-(9+1).明天学习改进的方法. 今天整理了一下类与类之间各种关系的区别.如下文 http://www.cnblogs.com/mingdimowang-lyw/p/6598184.html 今天的学习是比较痛苦的,一度想让自己放弃. 后来冷静了一下,思考一下为什么会想放弃.其实是因为自己试图去完全靠自己编写程序,但是自己距离这个程度

学习笔记:类与类之间的关系

转自:http://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html(谢谢楼主分享) 一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字 extends明确标识,在设计时一般没有争议性.在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口. 二.实现关系      实现

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

类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(association) 聚合关系(aggregation) 合成关系 (compostion) 依赖关系 (dependency) 1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系.一般化的关系是从子类指向父类的,与继承或实现的方法相反.

【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象之间的关系

类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分. 对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位.一个对象由一组属性和对这组属性进行操作的一组服务组成.从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用:它是一组属性和有权对这

类与类之间的关系

一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识4Q QW  ,在设计时一般没有争议性.在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口. 二.实现关系      实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系.在Java中此类关系通过关键字implemen

类与类之间的关系-----转载

类与类之间的几种关系 一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性.在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口. 二.实现关系      实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系.在Java中此类关系通过关键字impl

PHP类和对象之间的关系

类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: --对象的状态(属性):当施加操作时对象如何反应,例如,电视机的外形.尺寸.颜色等: 例子: 根据一份配置单组装六十台电脑,配置单里每增加一项配置,60台电脑各增加一厢配置. 1.配置单就是要创建的"类": 2.60台电脑就是创建的对象: 3.60台电脑间没有连系: 二.如何抽象一个类 1.