CH3-类与对象

1. 对象的本质

1.1 什么是对象,什么不是对象?

        就像一个人拿着锤子就喜欢把世界上所有的东西都看作是钉子一样,具有面向对象思想的开发者开始认为世界上所有的东西都是对象。这种观点有点幼稚,因为某些东西显然不是对象。比如,美和色彩这样的属性就不是对象,爱和恨这样的感情也不是对象。但是,这些东西有可能成为其他对象的属性。

        定义:“一个对象是一个具有状态、行为和标识符的实体。结构和行为类似的对象定义在他们共同的类中。“实例”和“对象”这两个术语可以互换使用。”

1.2 状态

        定义:“对象的状态包括这个对象的所有属性(通常是静态的)以及每个属性当前的值(通常是动态的)。”一个属性是一种内在或独特的特征、特点、品质或特性,使一个对象区别于别的对象。属性通常是静态的,因为这样的特征是不可更改的,是对象的根本本质。

        每个对象都有状态。这一事实意味着,每个对象都会在物理世界或计算机内存中占据一定的空间。可以说,系统中所有的对象都封装了某种状态,系统中所有的状态都由对象所封装。封装一个对象的状态指示开始,这并不足以让我们刻画出在开发过程中发现的这种抽象的全部含义。

        处于这个原因,必须考虑对象的行为。

1.3 行为

        没有对象是孤立存在的。对象与对象之间会互相操作。因此,我们可以这样说:

        定义:“行为是对象在状态改变和消息传递方面的动作和反应的方式。

        换言之,对象的行为代表了它外部可见的活动。

1.4 标识符

        定义:“标识符是一个对象的属性,它区分这个对象与其他对象。

        K和C继续注解道,“大多数程序设计语言和数据库语言使用变量名称来区分临时对象,混淆了定址能力和标识符。大多数数据库系统使用标识符主键来区分持久对象,混淆了数据值和标识符。”不能够区分对象的名称和对象本身,这导致了面向对象编程中的许多错误。——what is meaning by this?

        示例3-2:实例化一些DisplayItem类,分别是item1、item2、item3和item4。

2. 对象之间的关系

    两个对象之间的关系包括了一个对另一个所做的假定,即包括可以执行哪些操作以及将导致怎样的行为。在面向对象分析和设计中有两个对象关系特别有趣,即链接、聚合

2.1 链接(link)

    代表了具体的关联,通过这种关联,一个对象请求另一个对象的服务,或者通过这种关联从一个对象导航到另一个对象。图3-5展示了几种不同的链接。


2.2 聚合

   连接表明了一种端到端的关系或客户/服务提供者的关系,而聚合则表明了一种整体/部分层次结构,提供了从整体(也被称为聚合体)导航到它的部分的能力。例如,如图3-6所示。

 


    如果一个对象是另一个对象的一部分,就意味着它到它的聚合体有一个链接。通过这个链接,聚合体可以想他的部分发送消息。

    显然,在链接和聚合之间需要折中。有的时候聚合更好,因为它将各个部分封装为整体的秘密;有时候链接更好,因为它们允许对象之间较松的耦合。明智的工程决定需要自己权衡两方面的因素。

3. 类的本质

3.1 什么是类,什么不是类

     定义:“类是一组对象,它们拥有共同的结构、共同的行为和共同的语义。”一个对象就是类的一个实例。

        什么不是一个类?一个对象不是一个类。没有共同结构和行为对象不能够被划分为一类。

        需要注意的是:对于类进行分解是必要的。

3.2 接口和实现

        M和S指出,编程在很大程度上是一种“制定契约”:一个较大问题的不同功能通过子契约被分配给不同的设计元素,被分解成较小的问题。这种编程即契约的观点可以区分一个类的外部视图和内部视图。一个类的接口提供了它的外部视图,因此强调了抽象,隐藏了它的结构和行为的秘密。与接口不同,类的实现是它的内部视图,它包含类型为的秘密。一个类的实现主要由类接口中定义的所有操作的实现构成。

        可以进一步将类的接口分成以下4个部分:

        (1)公有  所有客户都可以访问的声明;

        (2)保护  只能由该类本身及其子类访问的声明;

        (3)私有  只能由该类自身访问的声明;

        (4)包      只能由同一个包中的类访问的声明。

        这些类型的可见性的详细语义,可能根据实现的语言而有所不同。

4. 类之间的关系  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值