美文网首页
面向对象理解

面向对象理解

作者: 万州大牛 | 来源:发表于2017-10-24 23:49 被阅读0次

类对象,对自己的行为负责。

对象对自己的行为负责。

思考,软件要负责什么?

思考,怎么使用软件?

思考,软件怎样履行自己的责任?

面向对象,以对象为中心,以对象概念为中心。

对象的数据,能告诉对象当前的状态,对象的方法,能让对象履行自己的责任。

对象,自己对自己负责,并且非常清楚的知道自己的责任。

【类型】往往体现了,继承关系。继承关系,体现的就是IS-A的关系。男人是人,女人也是人。

面向对象,将不关心的数据或行为,进行隐藏,抽象类,接口就隐藏了,具体的实现,调用者根本不关心你是具体实现的那个类型。

所以,从概念层次思考,我们经常说,我不关心你怎么实现,我只要调这个接口就可以了,这时候,就需要考虑隐藏,通过抽象类,或接口。

请记住,我们要完成什么样的任务?把任务写下来分析。

分析什么?

分析可能的对象,和责任。

【构造函数】设置默认状态,设置与其他对象关系。

UML

用例图,活动图,交互图,类图,状态图,部署图。

【类图】

IS-A 继承一种

HAS-A 关联,包含(聚合,组合)

使用依赖关系,A使用了B,A依赖B

思考,问题领域的术语,写出来,列一个表。

思考,问题的重要特征,写出来,列一个表。

通常能非常容易看清的是,分类,类型。

生活问题,不要过早的关注细节。

按接口编程。

使用聚合代替继承。

找出变化并封装。

外观模式facade

考虑的是封装,隐藏。为多个子系统提供简单统一的调用接口,为某个系列操作创建一个简单接口。比如读数据库最后返回数据模型,这个就可以用泛型写一个简单T GetTable 的接口。

外观,就像人传衣服一样,要好看,就是接口要简单,清晰,漂亮。

思考
(1)希望封装,隐藏原系统
(2)添加新功能
(3)使用部分功能
(4)原系统调用太复杂

Adapter适配器,在类内部进行转换,体现的是接口不兼容,需要接口转换。

为什么会接口不兼容,因为设计者不一样。

适配器 和 外观 比较:

(1)是否存在既有的类?(是,是)

(2)是否必须按某个接口设计?(是,否)

(3)多态行为?(可能,否)

(4)需要更简单的接口(否,是)

说白了,一个是按兼容接口,一个是简化接口。

对象,是具有责任的东西。

面向对象的封装,体现的是一种隐藏的哲学,将复杂的东西隐藏,给外界简单的东西,将不关心的东西隐藏,只提供抽象的接口给外界,将保密的东西隐藏,不让外界看见。

对象,

传统观点,认为是具有方法的数据,对象有状态数据,有处理数据的方法。这种观点是从实现的角度理解。

现代观点,对象是具有责任的实体,关注对象的意图行为。这种观点是从概念的层次进行理解。

设计对象时,避免过早的思考细节,将细节隐藏,关注对象的公开接口。

有一个XXX对象,能做什么,还能做什么,写出来。

封装,

隐藏数据,

隐藏实现细节,

隐藏派生类,

隐藏设计细节,

隐藏实例化规则

数据的封装,对象状态

方法的封装

对象的封装,如适配器模式,对被适配对象的封装

类型的封装,使用父类作为接口参数,对具体子类进行隐藏,

里氏替代原则,说的是子类可以替代父类,说白了,就是要求针对抽象编程,针对接口编程,典型的就是方法的参数,尽量用父类,不能用具体子类。

从概念层次,看继承,五角星是形状。

从复用的层次,看继承,虚线边框的五角星,是五角星。

【复用层次的继承】问题很明显,为了复用而创造一个子类型,思考自己,复用的目地,意图是什么?反思,如果更多的类似的目地,意图,你是不是为了复用而需要创造出更多的子类型?那么问题,就来了,子类多了,内聚低,重复代码多,维护就难了。

注意思考,一个对象字段,和,一个整型字段。

其实面向对象中一切都是对象,这没啥区别,例如,x+y 实际上可能是对象 x.Add(y)

对象x的行为责任

但是,如果是一个我们写的对象字段,字段对象可以扩展,包含更多的对象字段或整型字段,进一步再包含更多对象字段和整型字段。

但是,请记住,对象字段,需要从概念层次思考自己的行为职责。整型字段的行为职责实际上是语言帮你完成了。

【问题领域】

找到变化的地点,共性分析。

找到如何变化的,变性分析。

编程实践,一次且仅一次规则

小方法,方法粒度小些

极限编程,测试驱动开发,重构,这些都是围绕,以前的开发模式,提出的位于,过度设计,和,不设计,之间的边开发边设计的开发模式。

针对接口编程,而不是针对实现。

优先使用组合,而不是继承。

用组合替代继承,本质是让你在该使用继承的地方才使用继承。

如果为了复用的目地,盲目的使用继承,是非常糟糕的。但是,如果从概念层次去思考继承,原本可能从一个大类继承复用,现在这个大类包含一个对象,也就是使用组合,这个对象,是概念层次的,变化点,对变化点进行共性分析,变性分析,形成变化点,小范围的继承体系结构。

这样构造的系统,才是职责分离,职责明确的。

相关文章

  • 面向对象

    面向对象基础 目标 理解面向对象 类和对象 添加和获取对象属性 魔法方法 一. 理解面向对象 面向对象是一种抽象化...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

  • 理解面向对象

    理解面向对象 阅读知乎大牛对面向对象的讨论后,写下自己的总结和理解。知乎 面向对象的原本特性 面向对象原本的特性(...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 面向对象--理解对象

    面向对象(Object-Oriented OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多...

  • 面向对象—理解对象

    什么是对象? 我们可以把ECMAScript的对象想象成散列表,也就是一组名值对,其中值可以是数据和函数。 对象的...

  • 面向对象

    1.面向对象理解 2.面向对象关系图

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

网友评论

      本文标题:面向对象理解

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