您的位置:首页 > 其它

阅读本书要瘦《面向对象的葵花宝典》札记-面向对象的基础

2015-07-13 15:41 211 查看
《面向对象的葵花宝典》是朋友安迪·爱科技在文章的一种技术专栏,之后我读了一篇文章,最大的感受是该系列中面向对象的编程技术是一个真正的前project经验为师。他的工作经验和升华总结的作者,具有指导意义的面向方面编程,域的朋友们,原文链接例如以下:http://blog.csdn.net/column/details/oobaodian.html

下面是个人阅读之后。基于xMind做的读书笔记的整理。将我个人觉得特别有价值或者说对我比較有感触的知识点。记录例如以下,以便随时翻阅。


面向对象概述

史前时代:面向机器

面向过程

面向过程是一种以“过程”作为中心的编程思想,当中过程的含义就是“完毕一件事情的步骤”

面向过程事实上是一种“机械的思想”,它就像流水线一样,一个阶段衔接一个阶段,每一个阶段都有自己的输入、处理、输出,而在流水线上流动的就是我们的原料或者中间产品,每一个阶段都有一个机械进行处理,最后的输出就是我们的产品

在运用面向过程的方法时,你也须要设计这样一条程序流水线:将程序划分为不同的阶段,设计好各个阶段怎样衔接,然后定义好每一个阶段须要处理的数据。

面向对象

与面向过程的方法相比,面向对象不再局限于计算机的机器本质,而更加側重于对现实世界的模拟。

面向对象这样的对现实世界的模拟的思想,其本质上就是“人的思想”,这是一个质的飞跃,意味着程序猿能够依照人的思想来观察、分析、设计系统。

假设说面向过程像一条流水生产线,那么面向对象就像是一个足球队。没有哪个人可以在一场比赛開始的时候,就精确指定每一个队员的每一次跑动,每一次出脚,每一次传球。。。

而仅仅能指定队员的角色(前锋、中场、后卫、门将),然后由队员门自己依据情况做出反应。

所以世界上有两个一样的生产线,但绝对不会存在两场一模一样的比赛。

面向过程中有“程序=算法+数据结构”的经典总结,面向对象也有类似的总结: “程序=对象 + 交互”。

面向过程有流水线的这个缺点,即:流程和原料相对固定,扩展比較麻烦。而面向对象正是为了解决面向过程的这个缺点儿诞生的,因此面向对象事实上也不是什么复杂和玄妙的技术,面向对象思想的核心是“可扩展性”!

既然面向对象思想的核心是“可扩展性”,那么其适用范围就显而易见了:常常变化的地方就是面向对象应用的地方。

软件属性全图(成本。性能,可靠性。安全性,可维护性,可移植性,可伸缩性,可扩展性)

可以看到,“可扩展性”仅仅是软件质量属性中非常小的一部分,其他的属性都不是面向对象可以解决的。明确了面向对象的特点和适用范围,是应用面向对象的关键,经过前面的分析,我们知道,面向对象不是瑞士军刀,而仅仅是一个普通的锤子而已,千万不要拿着锤子到处敲!

面向对象会导致性能减少?

从数据我们能够看出,假设你的业务流程中涉及了磁盘、网络、数据库等操作,那么性能就一下子降到了毫秒级。 因此,对于复杂的业务系统来说,性能的好坏是由设计来决定的,而不是由语言来决定的,更不会由于採用了面向对象而导致性能的减少!


面向对象理论



类就是一组相似事物的统称。

“怎样定义类“?

“仅仅要有相似点的就是同一类“!

角度决定看法! 怎样划分类:站在你的观察角度,具有相似点的事物就是同一类!

名词是属性,动词是方法。

设计属性的一个基本原则:属性最小化原则,即: “属性不可再分”!

设计方法的一个基本原则:方法单一化原则,即:一个方法仅仅做一件事!

对象

类的实例。

现实对象-> 归纳概括-> 现实类-> 抽象模拟-> 软件类-> 实例化-> 软件对象-> 活动交互-> 程序

“软件类来源于现实类,但高于现实类”: 现实类在软件类中必须有相应,但并非全然一 一相应的; 软件类并不一定是现实存在的

接口

“接口”是我见过的面向对象领域中滥用、乱用、误用最多的术语

接口是一组相关的交互功能点定义的集合。

抽象类

抽象类是一种特殊的类,其特殊性在于抽象类仅仅能用于继承,不能被实例化

抽象类和接口有什么差别,为什么有了接口,还要有抽象类?

抽象类本质上还是类,强调一组事物的相似性,包含属性和方法的相似性;而接口只强调方法的相似性,而且只体如今方法声明上的相似性,而没有方法定义上的相似性。(代码复用)

抽象

“抽取出来比較像的部分”

抽象的具体含义:抽取多个对象或者类中比較像的部分。

“属性类似”

“行为类似”

抽象的作用: 抽象最基本的作用是“划分类别”,而划分类别的主要目的事实上还是“隔离关注点,减少复杂度”。由于这个世界太复杂了,复杂到一个人不可能同一时候关注全部的内容。

心理学上的研究证实,人同一时候能关注的事务不超过 7+/-2 个。能够想象,假设没有抽象分类,我们将面对一个混沌的世界,同一时候关注如此多的内容,即使是天才,预计也要崩溃。

三大核心特征

封装

“保护隐私”

“隔离复杂度”

继承

继承类似生物学上的“遗传”。“龙生龙,凤生凤,老鼠生来会打洞”

面向对象的继承意味“子类”遗传了了某些“父类”的属性和方法。

抽象:是分析和设计过程中的一个动作,一个技巧,通过抽象得出类

继承:是实现过程中的一个动作,基于抽象结果,通过编程语言的特性,完毕抽象图的模拟。

多态

“多胎”,多态的形态再多也仅仅能局限在子类的个数,即“胎”数

多态的特性在面向对象编程的领域中具有十分关键的数据。多态屏蔽了子类对象的差异, 使得调用者能够写出通用性的代码,而无需针对每一个子类都须要写不同的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: