设计模式系列-面向对象葵花宝典-面向对象基础

设计模式系列-面向对象葵花宝典-面向对象基础

声明:本系列为面向对象葵花宝典一书学习总结内容,原作者博客链接

书籍简介

面向对象葵花宝典:思想、技巧与实践》系统地讲述了面向对象技术的相关内容,包括面向对象的基本概念、面向对象开发的流程、面向对象的各种技巧,以及如何应用面向对象思想进行架构设计。在讲述相关知识或技术的时候,除了从“是什么”这个角度进行介绍外,更加着重于从“为什么”和“如何用”这两个角度进行剖析,力争让读者做到“知其然,并知其所以然”,从而达到在实践中既能正确又能优秀地应用面向对象的相关技术和技巧。
《面向对象葵花宝典:思想、技巧与实践》的内容涵盖广泛,无论读者已有的水平如何,都能够从书中获益。
如果你是刚入门的程序员,书中有详尽的和通俗易懂的概念和方法介绍,有完整的面向对象开发流程,让你能够快速掌握面向对象开发的基本技巧,从容不迫地完成开发任务;
如果你有了一定经验,能够熟练应用各种面向对象技术和技巧,但却没有深入地去探索,书中有独辟蹊径的解读,能够让你“知其然,并知其所以然”;
如果你已经成为了面向对象的大牛程序员,但苦于不能继续提升,书中有“面向对象架构设计”的点石成金术,让你从程序员秒变架构师。


读后推荐心得

文中阐述了作者对面向对象的深入理解,全面阐述了面向对象的理论基础,以及通过面向对象的实战指导进行分析,尤为重点让人容易忽视的需求分析过程,让程序更具有建造者的设计气息。最后一部分讲解了面向对象的技巧,以及设计模式的内在剖析。
以下内容在原作基础上进行了删减或者自我理解加工,详细内容请查看原作书籍。

第一部分:面向对象基础

1. 面向对象概述

1.1. 程序设计思想的发展
- 史前时代:面向机器 直接编写0和1的序列来代表程序语言
- 机器第一步:面向过程 解决问题的过程,这应该也是面向过程说法的来由
- 当今主流:面向对象 可扩展性、可维护性
1.3. 面向过程
面向过程是一种以“过程”作为中心的编程思想,其中过程的含义就是“完成一件事情的步骤”。
面向过程其实是一种“机械的思想”,它就像流水线一样,一个阶段衔接一个阶段,每个阶段都有自己的
输入、处理、输出,而在流水线上流动的就是我们的原料或者中间产品,每个阶段都有一个机械进行处理,
最后的输出就是我们的产品。
1.4. 面向对象
面向对象是一种以“对象”作为中心的编程思想,其中对象的含义可以理解为“存在的东西”。
与面向过程的方法相比,面向对象不再局限于计算机的机器本质,而更加侧重于对现实世界的模拟。
面向对象的方法中,设计了很多对象,并且指定了这些对象需要完成的任务,以及这些对象如何对外界的刺激做出反应。
面向过程中有“程序=算法+数据结构”的经典总结,面向对象也有类似的总结:“程序=对象 + 交互”。其中对象就是具体存在的事物,而交互则是事物之间的相互作用、互动等。
1.5. 为什么要面向对象?
面向过程同流水线一样的缺点,即:流程和原料相对固定,扩展比较麻烦。
而面向对象正是为了解决面向过程的这个缺点儿诞生的,面向对象思想的核心是“可扩展性”!
1.6. 面向对象应用范围
经常变化的地方就是面向对象应用的地方
对于软件系统来说,常见的可变的主要集中在客户需求部分,而不变的一般都是属于计算机系统的基础
因此,操作系统、数据库、协议(TCP、3GPP 等) 这些并不适合面向对象大展身手,因为这些基础软件
一般都比较稳定(相对稳定,并不是不变)。而对于企业应用、互联网等应用,需求经常变更,功能不断扩展,这正是面向对象大展身手的地方。
软件质量属性的全图
设计模式系列-面向对象葵花宝典-面向对象基础
大家可以看到,“可扩展性”只是软件质量属性中很小的一部分,其它的属性都不是面向对象能够解决的明白了面向对象的特点和适用范围,是应用面向对象的关键,经过前面的分析,我们知道,面向对象不是瑞士军刀,而只是一个普通的锤子而已,千万不要拿着锤子到处敲!

2. 面向对象理论

2.1.类
何为类? 物以类聚,人以群分,这里的“类”,其实和面向对象中的“类”的逻辑含义并无不同。简单来说,类就是一组相似事物的统称。 站在你的观察角度,具有相似点的事物就是同一类。
面向对象类
面向对象的类由两部分组成:属性和方法。名词是属性,动词是方法
属性:指类具有的特性 属性最小化原则,即:“属性不可再分”更灵活的应对变化
方法:指类具有的功能 方法单一化原则,即:一个方法只做一件事。比如玩?玩什么 玩乒乓球
2.2. 对象
对象就是一个具体的类,一个真实存在的类。
设计模式系列-面向对象葵花宝典-面向对象基础
2.3. 接口
接口是一组相关的交互功能点定义的集合。
【相关】 接口中包含的功能点是相关的,而不是一堆无关功能的堆砌。
【交互】 接口是用于不同物体交互,如果只是自己玩,那么就不能成为接口;
【定义】 接口中的功能点只是定义,并不涉及具体实现。
【集合】 接口是多个功能点的集合,而不是一个具体的功能点。

2.4. 抽象类
抽象类是一种特殊的类,其特殊性在于抽象类只能用于继承,不能被实例化为具体的对象。
有了类,为什么还要抽象类,为什么设计一种只能继承,不能实例化的类?
答案就在于:某些场景下普通类不够用。例如,“苹果”、“桔子”、“香蕉”都是“水果”,这里的“水果”就是一个抽象类。你可以说你喜欢吃“水果”,但你真正吃“水果”的时候,要么是“苹果”,要么是“桔子”,要么是“香蕉”。。。。。。但你绝不可能真正吃到一个叫做“水果”的东东。
抽象类和接口有什么区别,为什么有了接口,还要有抽象类?
答案就在于:抽象类本质上还是类,强调一组事物的相似性,包括属性和方法的相似性;而接口只强调方法的相似性,并且仅仅体现在方法声明上的相似性,而没有方法定义上的相似性。
2.5. 抽象
抽象的中文概念非常形象,简单来说就是“抽取出来比较像的部分”。
抽象的层次是不限的,根据业务的需要,或者不同的观察角度,可以抽象出很多层。
抽象最主要的作用是“划分类别”,而划分类别的主要目的其实还是“隔离关注点,降低复杂度
2.6. 三大核心特征
封装 封装数据的主要原因是“保护隐私” 封装方法的主要原因是“隔离复杂度”
继承 = 遗传了父辈的特征 同时你还可能变异(子类)
多态 多 指向父类的指针或者引用,能够调用多个子类的对象。