4 | 类和对象

作者: 不一样的卡梅利多 | 来源:发表于2020-04-17 15:55 被阅读0次

面向对象系统的基本构建块为 :对象和类

对象本质

从人类认知(真实世界)的角度看:
1、可以触摸的实体,展示良好的行为。
2、可以看的见或者摸得着的东西,在智力上面可以理解的东西,可以指导思考或者行动的东西。

从软件角度看:
1、用于模拟真实世界的某个东西。
2、对象不仅仅是真实世界的对象,还可能是我们创建出的一些概念
3、一个对象代表了单个可以识别的项,单元、实体,可以是真实的,也可以是抽象的。在问题域中承担良好的角色。

定义

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

状态

定义:包括这个对象的所有属性(通常是静态的),以及每个属性的当前值(通常是动态的)。

每个对象都有状态意味着,每个对象都会在物理世界或者计算机内存中占据一定的空间,系统中的所有状态都由对象封装,工程实践,封装状态比暴露状态更
比如 代码中字段用 public 暴露(全局数据),还是用get方法暴露。直接暴露字段违反了封装的特性,这样的坏处,任何地方都可以修改这个字段(实际为面向过程编程),没法进行统一管理,出了问题排查会非常困难,不利于对象内部的调整,将实现与抽象混合到一起。也违反了面向对象设计思想。

行为

是对象状态改变和消息传递方面的动作和反映方式。在编程语言中对应 方法

标识符

区别与其他对象的唯一标识,对应程序中对象变量的名称。

对象间关系

1、链接:两个对象物理上或者概念上面的联系,两个对象之间的消息可以通过对象之间的连接传递 (端到端的关系)

控制器(客户端):“这个对象可以操作其他对象,但不会被其他对象操作”。
服务器:“这个对象只能被操作,不能操作其他对象”。
代理 :“这个对象可以操作其他对象,也可以被其他对象操作。创建代理通常是为了表示问题域中一个真实的对象”

2、聚合:整体/部分的关系,可以为物理上面的包含,也可以不是物理上面的包含关系有时候 聚合更好,将部分封装到整体中,有时候链接更好,使得对象之间的可以松耦合。

定义

类是一组对象,他们拥有共同的结构,共同的行为和共同的语义,一个对象是一个类的实例

接口和实现

1、编程很大程度上面是一种 “制定契约”:大问题被分解为小问题,大契约分解成小契约。类设计能很好的体现这种思想。类记录了对象共同的结果和行为,建立起了抽象和客户之间的协议。通过类型检测,看是否违反了协议

2、编程即契约,可以区分类的外部视图和内部视图,接口提供了外部视图强调抽象,隐藏了他的结构和行为秘密。

3、类实现接口,提供内部实现,接口为外部视图

类之间的关系

1、类型共享:是一种,玫瑰是一种花
2、整体部分:组成部分,花瓣是化的组成部分
3、关联 :语义上面的依赖,瓢虫和化之间有关联(单向,双向), 1 对1 ,1对多,多对多

1、继承

一般与特殊,继承的一种代替方法是 “委托” 避免类的层次太深。从代码角度看 ,属性共享,行为复用。减少冗余
1、单继承,2、多态- 一个名字可能代表了许多类的不同实例,只要他们有共同的超类。有了多态继承的用处才能最大化
2、多继承

2、聚合

当且仅当两个对象之间有整体部分关系,他们对应的类之间才有聚合关系

3、依赖

一个元素发生变化,会影响另一个元素

4、关联

最弱关系

高品质的类与对象

1、系统应该利用一组最少不会变好的部分进行构建,这些部分应该尽可能通用,系统所有部分应该被放入一个统一的框架。框架由系统机制来提供。

2、类和对象的设计是一个增量,迭代的过。最初的的抽象,需要确定他的概念边界。这样才能在后续更好的迭代。

判断抽象品质

1、耦合
是一个来自于结构化设计的概念。一个模块与另一个模块之间关联的强度测量,关联强度大,它就难以独立的被理解,变化和修正。通过设计使得模块间的耦合降到最低,可以降低复杂性。继承是强耦合,但是它帮助我们处理了抽象之间的共性。 怎么取舍 ,依据实际场景取舍,但是低耦合优先,可以使用组合替换继承来折中处理

2、内聚
是一个来自于结构化设计的概念。测量单个模块(单个类或者对象)各个元素之间的联系程度,最不系统出现的内聚是偶然性的,将完全无关的抽象赛到一个类或者模块中

3、充分性
类和模块应该记录某个抽象的足够多的特征,意味有最小的接口

4、完整性
类或者模块应该记录某个抽象的全部有意义的特征,功能足够通用,可以被任何客户使用

5、基础性
只有访问该抽象的底层表现形式才能有效的实现的那些操作,1次 add ,4 次 add。add 是一个基础操作,4次add 不为一个基础操作

面向对象分析设计过程

1、关键抽象

问题域的词汇表中确定类,分析功能需求,找到共性和稳定性的东西 如何进行关键抽象,后续介绍。

2、类接口(行为,方法)设计,精细化类,对设计的类进行功能验证,可能需要 扩展或者修改类的接口

满足功能语义,所有操作都保持基础性,分离方法。将一个行为提取为一个方法还是多个方法取舍,将一个行为塞进一个方法中将导致更简单的接口,但是方法会更大更复杂、将一个行为分散到多个方法中,将导致接口复杂,但是方法会更简单。折中,如何控制方法的个数,如何将方法分配到合适的类中去:
1、可复用性 :这种行为可以在多种上下文中使用吗
2、复杂性:实现这个行为的难度有多大
3、适用性:方法与类的相关程度如何
4、实现知识 :这个行为的实现依赖类的内部细节吗? 优化时间语义(执行时间),空间语义(存储空间)。

3、 类关系优化-利用已有的设计模式和设计原则,创建一些新的类和组织已有的类

目标是:低耦合,高内聚,但是可能会在 复用方面折中。
比如Demeter 法则。最小知识原则,一个类了解到的知识是最少的
类中方法的可见性(如何封装细节,如何确定边界)会影响类关系的设计

4、实现

只有当我们使某个类或者对象的外部视图稳定下来后,才会转向它的内部视图。

小结

1、认识了对象的组成,属性,行为,唯一标识符。以及对象关系链接 关系:客户端,服务器,代理,聚合:部分和整体。

2、类是一组对象的共同抽象,表示出来的是契约视图。类之间的关联关系:由强到弱为:继承,聚合,依赖,关联。

3、对象可以通过类来进行实例化。

4、高品质关键抽象的类或者模块的评判标准:低耦合,高内聚,充分性,完整性,基础性。

5、难点问题:如何依据需求提取类,如何设计类的行为方法 ,如何设计类之间的关系 ,如何实现 ?

相关文章

  • 4 | 类和对象

    面向对象系统的基本构建块为 :对象和类 对象本质 从人类认知(真实世界)的角度看:1、可以触摸的实体,展示良好的行...

  • iOS开发之Swift学习(二)

    文章目录:(1)对象和类(2)枚举和结构体(3)协议和扩展(4)泛型 (1)对象和类 要创建一个类的实例,在类名后...

  • 对象、类对象和元类对象

    http://www.tuicool.com/articles/mmyuUr http://blog.csdn.n...

  • [4] - 类和对象之基础

    这篇文章将介绍类的基础知识 定义 Scala 中以 class 来作为类的声明,在类中可以定义成员和方法,成员和方...

  • 4、Kotlin基础---类和对象

    1、类定义Kotlin类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。创建类: 定义空类: 含有...

  • 4、Java基础 - 面向对象【类和对象】

    操作步骤: 1、设计类 如游戏中,盖伦、提莫等都是英雄,我们可以给这些英雄设计一个东西,代表英雄,叫做类; 【类的...

  • 类,封装

    一,面向对象 二,类 1,类的定义 2,类的实例化过程 3,属性查找与绑定方法 示例 4,类和对象 -- 游戏中生...

  • python 类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的...

  • 类,类对象和实例对象

    Python 的类定义写完之后就成了一个类对象,而引用这个类对象的就是实例对象。 类中定义的属性和方法都是静态属性...

  • 一周一章前端书·第9周:《你不知道的JavaScript(上)》

    第4章 :混合对象“类” 本章要介绍和类相关的面相对象编程的知识。首先会介绍面相对象类的设计模式:实例化(inst...

网友评论

    本文标题:4 | 类和对象

    本文链接:https://www.haomeiwen.com/subject/aclyvhtx.html