首页 > 代码库 > 基本OOP知识
基本OOP知识
从今天起,我开始总结高焕堂高老师的《android架构师之路》,尽量一个星期写三篇博文。相对而言,看文章比看视频能够快一点,不过看视频也是比较详细的,如果有兴趣的话,就跟着我的这个连载走下去吧。我记录下自己的理解,分享给更多需要的人。话不多说,今天开始第一篇,“基本OOP知识”。
对于现行的编程语言来说,面向对象已经不再是一个让人难以理解的词汇。可是如何能将其中的思想完整的表达出来,这就是我们所需要在意的地方了。本篇希望,高焕堂老师能带给我们不一样的世界。
一、Oriented 的含义
我们大多数情况下,将其理解为面向,原来我也将其理解为面对这类的意思,可是,我又听到了新的意义“信仰”。何为信仰,在基督教信徒的心中,耶稣就是他们的信仰,就是他们的神,除此之外再无其他。在设计师的心中,我们要将对象当成我们心中的“神”,我们有了问题,有了麻烦,只能去求助与它。我们要相信软件的世界一切都是由对象组成的,除此之外,再无其他。Oriented 完美的诠释了这一内涵,除了面向,还有“信仰”。在计算机的世界里,如何将这种信仰表现出来呢?只需要定义类就可以了。
下面通过几个词来真正体会一下Oriented 的含义(Oriented based driven centered):
Based:
类比建造房子,先打地基,地基就是房子的基础。在 based 词汇描述时,更多的强调的是一种先后关系,打地基在前,建房子在后。
再如 requiredment-based :基于需求,有先后顺序。先进行需求分析,然后基于需求分析的结果进行后期的软禁开发活动,就成为 requiredment-based software .
Driven :
我们理解 Driven 直译为驱动,这种翻译其实是不方便理解其真正含义的。其实这个词语更多的是“引导”,指引方向(就很像北极星存在的意义,指引人们前进的向)。就像司机 drive 车,其实司机并没有真正的去驱动车前进,而是指引汽车前进的方向,引擎才是驱动车的真正动力。 Use Case Driven 用例驱动,是要告诉我们,我们的软件开发要按照用户的思维,用户的理解,在这个大方向不变的前提下,进行我们的软件开发。
Centered :
以.....为中心,建设房子先画好设计图,建好房子的大梁(轮廓),后期的开发都是围绕着轮廓建造的。圣诞节的糖果盒礼物都是钩挂在圣诞树上一样。
Architecture-centered 一切软件开发活动都围绕着架构
Service-Oriented Architecture (SOA)是什么含义?
相信软件世界都是由服务所有构成的
二、从对象谈起
自然界有着各式各样的东西,人们随着阅历的增加,对于自然界的东西,认识越来越多。对于个人而言,所认识的东西。皆是对象。例如,李白最清楚的对象是他的诗,每首诗就是对象,而欧洲的诗,就不是李白的对象了。从这种角度而言,对象就是我们所能认识到的事物,最简单的。一旦认识某一样东西,就能说出他的特点,并与其他对象比较一番。自然界的对象特点包括:
对象之特征或属性(静态特性)
对象之行为(动态特性)
我们相信软件是由对象构成的,那么软件的对象就应该有自然界对象的特点
软件的对象(Software object)是由数据(自然界对象的属相)和函数(描述自然界对象的行为 )组成的。
三、类的用途:简述软件对象
类是群体,对象是类中的一份子,人们常用 Is A 来表达对象与类之间的关系。类是一群具有共同重要特性之对象。类之定义就是说明这群对象具有什么的重要特性。特性包括对象之特征及行为。
软件中之对象以数据来表达特征,以函数来表达行为。因之,类之定义就是说明软件中之对象,应含那些数据及那些函数。
四、<基类\子类>结构的用途
1、表示继承
子类可以继承父类公共的属性和行为,也可以定义自己特有的属性和行为。方便复用
2、表示组合
THread 调用start 方法开启了一个新的线程,调用 runnable 中的 run 方法,就掉用到了子类 task 的方法
子类直接继承 扩充Thread , Thread 产生一个子线程执行 run方法。
五、<基类\子类>结构的接口
所谓「卡榫(Hook)」,就是用来连接两个东西的接口。如果两个部分不是在同一个时间段出现的,则会预留一部分的虚空,给于另外一边未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。设计优良的接口,可以轻易的实现新陈代谢、抽换自如、甚至可以让软件跨平台。
?变与不变的分离(Separate code that changes from the code that doesn’t)是设计卡榫(Hook)函数及应用框架之基本原则和手艺。
?分离出变(Variant)与不变(Invariant)部份之后,就可以将不变部份写在父类别(Super-class)里,而变的部份就写在子类别(Subclass)里。
分的目的就是为了更好地和在一起,把善变的东西分离出来
C++ 使用继承机承(Inherit)组合起来
Java 扩充 Extends 机制组合起来的
卡榫函数的Java实现:
在Java里,使用抽象(abstract)函数或可覆写(overridable)函数来实现卡榫函数。
六、IOC机制与Default 函数
控制反转(IoC: Inversion of Control)
?IoC机制源自于OO语言(如C++等)的类别继承体系,例如C++语言中,基类的函数可以主动调用子类的函数,这就是典型的IoC机制。
基类与子类之间,主控权是在基类手上,透过Hook函数来调用子类
?通常基类是撰写在先,而子类则撰写在后,这种前辈拥有主导权,进而「控制」后辈之情形,就通称为「控制反转」。
基类的重要功能:提供默认(预设)行为
?基类可事先定义许多「默认」(Default)函数。这些默认函数可让子类来继承(或调用)之。
七、主动型 vs 被动型 API
系统与人之间的接口:UI , 软件系统模块与模块之间的接口:API
API的类型
对于API来说,有三个与其紧密相关的三个动词:定义(Define) 实现 (Implememt) 调用(Invoke or Call) ,根据这三个角度,可以将API分为两类,主动型与被动型。
被动型API:我定义 我实现、对方调用(地头蛇)
主动型API:我定义、他人实现、我调用(强龙)
API的意义:
API换句话说,就是控制力。接口就是双方接触的地方,也是双方势力和底盘的接线。谁拥有接口的制定权,谁掌握控制点,就能获得较大的主动权,属于强龙的一方,而另外一方则处于被动地位,成为弱势的一方,扮演地头蛇
基本OOP知识