• (原创)c#学习笔记08--面向对象编程简介02--OOP技术04--对象之间的关系


    8.2.4  对象之间的关系

      继承是对象之间的一种简单关系,可以让派生类完整地获得基类的特性,而派生类也可以访问基类内部的一些工作代码(通过受保护的成员)。

      对象之间还有其他一些重要关系。

      本节简要讨论下述关系:

        包含关系:一个类包含另一个类。这类似于世承关系,但包含类可以控制对被包含类的成员的访问,甚至在使用被包含类的成员前进行其他处理。

        集合关系:一个类用作另一个类的多个实例的容器。这类似于对象数组,但集合有其他功能,包括索引、排序和重新设置大小等。

      

    1. 包含关系

      用一个成员字段包含对象实例,就可以实现包含(containment)关系。这个成员字段可以是公共字段,此时与继承关系一样,容器对象的用户就可以访问它的方法和属性,但不能像继承关系那样,通过派生类访问类的内部代码。

      另外,可以让被包含的成员对象变成私有成员,如果这么做,用户就不能直接访问任何成员,即使这些成员是公共的,也不能访问。但可以使用包含类的成员前问这些私有成员。也就是说,可以完全控制被包含的类有什么成员,如果有成员,还可以在访问被包含类的成员前,在包含类的成员上进行其他处理。

      例如,Cow类包含一个Udder类,它有一个公共方法Milk()。Cow对象可以按照要求调用这个方法,作为其SupplyMilk()方法的一部分,但Cow对象的用户看不到这些细节。

      在 UML 中,被包含类可以用关联线条来表示。对于简单的包含关系,可以用带有 1 的线条说明一对一的关系(一个Cow实例包含一个Udder实例)。为清晰起见,也可以把被包含的Udder类实例表示为Cow类的私有字段,如图8-10所示。

      

    2. 集合关系

      第5章讨论了如何使用数组存储多个同类变量。这也适用于对象(前面使用的变量类型实际上是对象)。例如:

    Animal[] animals = new Animal[5];

      集合基本上是数组,集合以与其他对象相同的方式实现为类。它们通常以所存储的对象名称的复数形式来命名,例如类Animals就包含Animal对象的个集合。

      数组与集合的主要区别是,集合通常实现额外的功能,例如 Add()和 Remove()方法可添加和删除集合中的项。而集合通常有一个Item属性,它根据对象的索引返回该对象。不但如此,这个属性还允许更复杂的访问方式来实现。例如,可以设计一个Animals,让Animal对象根据其名称来访问。 

      在UML中,这用图8-11来表示。

      

      这里遗漏了成员,因为这里描述的是关系。连接线末尾的数字表示一个 Animals 对象可以包含0个或多个Animal对象。第11章将详细论述集合。

      

  • 相关阅读:
    baselines库中cmd_util.py模块对atari游戏的包装为什么要分成两部分并在中间加入flatten操作呢?
    baselines库中atari_wrappers.py中的环境包装器的顺序问题
    baselines中环境包装器EpisodicLifeEnv的分析
    【转载】 为何大厂选择减人而不是降薪?
    神经网络初始化:xavier,kaiming、ortho正交初始化在CNN网络中的使用
    嵌入式开发之linuxweb 服务器Nginx 详解
    iotop
    blktrace 编译与使用
    文件系统预读
    玩儿观赏鱼教程一:鱼缸分类
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4932536.html
Copyright © 2020-2023  润新知