把书读薄之《面向对象葵花宝典》阅读笔记-面向对象基础

《面向对象葵花宝典》是网友爱技术的华仔的一个技术专栏里的文章,我在逐篇阅读之后,最大的感觉就是这个面向对象编程系列是货真价实的来自技术前线工程师的经验之作,是作者工作经验的总结和升华,对面向编程的方方面面有指导意义,在这里强烈推荐给面向对象领域的朋友们,原文链接如下:http://blog.csdn.net/column/details/oobaodian.html

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

面向对象概述

  • 史前时代:面向机器
  • 面向过程
    • 面向过程是一种以“过程”作为中心的编程思想,其中过程的含义就是“完成一件事情的步骤”
    • 面向过程其实是一种“机械的思想”,它就像流水线一样,一个阶段衔接一个阶段,每个阶段都有自己的输入、处理、输出,而在流水线上流动的就是我们的原料或者中间产品,每个阶段都有一个机械进行处理,最后的输出就是我们的产品
    • 在运用面向过程的方法时,你也需要设计这样一条程序流水线:将程序划分为不同的阶段,设计好各个阶段如何衔接,然后定义好每个阶段需要处理的数据。
  • 面向对象
    • 与面向过程的方法相比,面向对象不再局限于计算机的机器本质,而更加侧重于对现实世界的模拟。
    • 面向对象这种对现实世界的模拟的思想,其本质上就是“人的思想”,这是一个质的飞跃,意味着程序员可以按照人的思想来观察、分析、设计系统。
    • 如果说面向过程像一条流水生产线,那么面向对象就像是一个足球队。没有哪个人能够在一场比赛开始的时候,就精确指定每个队员的每一次跑动,每一次出脚,每一次传球。。。 而只能指定队员的角色(前锋、中场、后卫、门将),然后由队员门自己根据情况做出反应。所以世界上有两个一样的生产线,但绝对不会存在两场一模一样的比赛。
    • 面向过程中有“程序=算法+数据结构”的经典总结,面向对象也有类似的总结: “程序=对象 + 交互”。
    • 面向过程有流水线的这个缺点,即:流程和原料相对固定,扩展比较麻烦。而面向对象正是为了解决面向过程的这个缺点儿诞生的,因此面向对象其实也不是什么复杂和玄妙的技术,面向对象思想的核心是“可扩展性”!
    • 既然面向对象思想的核心是“可扩展性”,那么其适用范围就显而易见了:经常变化的地方就是面向对象应用的地方。
    • 软件属性全图(成本,性能,可靠性,安全性,可维护性,可移植性,可伸缩性,可扩展性)
    • 可以看到,“可扩展性”只是软件质量属性中很小的一部分,其它的属性都不是面向对象能够解决的。明白了面向对象的特点和适用范围,是应用面向对象的关键,经过前面的分析,我们知道,面向对象不是瑞士军刀,而只是一个普通的锤子而已,千万不要拿着锤子到处敲!
    • 面向对象会导致性能降低?
      • 从数据我们可以看出,如果你的业务流程中涉及了磁盘、网络、数据库等操作,那么性能就一下子降到了毫秒级。 因此,对于复杂的业务系统来说,性能的好坏是由设计来决定的,而不是由语言来决定的,更不会因为采用了面向对象而导致性能的降低!

面向对象理论

    • 类就是一组相似事物的统称。
    • “如何定义类“? “只要有相似点的就是同一类“!
    • 角度决定看法! 如何划分类:站在你的观察角度,具有相似点的事物就是同一类!
    • 名词是属性,动词是方法。
    • 设计属性的一个基本原则:属性最小化原则,即: “属性不可再分”!
    • 设计方法的一个基本原则:方法单一化原则,即:一个方法只做一件事!
  • 对象
    • 类的实例。
    • 现实对象-> 归纳概括-> 现实类-> 抽象模拟-> 软件类-> 实例化-> 软件对象-> 活动交互-> 程序
    • “软件类来源于现实类,但高于现实类”: 现实类在软件类中必须有对应,但并不是完全一 一对应的; 软件类并不一定是现实存在的
  • 接口
    • “接口”是我见过的面向对象领域中滥用、乱用、误用最多的术语
    • 接口是一组相关的交互功能点定义的集合。
  • 抽象类
    • 抽象类是一种特殊的类,其特殊性在于抽象类只能用于继承,不能被实例化
    • 抽象类和接口有什么区别,为什么有了接口,还要有抽象类?
      • 抽象类本质上还是类,强调一组事物的相似性,包括属性和方法的相似性;而接口只强调方法的相似性,并且仅仅体现在方法声明上的相似性,而没有方法定义上的相似性。(代码复用)
  • 抽象
    • “抽取出来比较像的部分”
    • 抽象的详细含义:抽取多个对象或者类中比较像的部分。
    • “属性类似”
    • “行为类似”
    • 抽象的作用: 抽象最主要的作用是“划分类别”,而划分类别的主要目的其实还是“隔离关注点,降低复杂度”。因为这个世界太复杂了,复杂到一个人不可能同时关注所有的内容。心理学上的研究证实,人同时能关注的事务不超过 7+/-2 个。可以想象,如果没有抽象分类,我们将面对一个混沌的世界,同时关注如此多的内容,即使是天才,估计也要崩溃。
  • 三大核心特征
    • 封装

      • “保护隐私”
      • “隔离复杂度”
    • 继承
      • 继承类似生物学上的“遗传”,“龙生龙,凤生凤,老鼠生来会打洞”
      • 面向对象的继承意味“子类”遗传了了某些“父类”的属性和方法。
      • 抽象:是分析和设计过程中的一个动作,一个技巧,通过抽象得出类
      • 继承:是实现过程中的一个动作,基于抽象结果,通过编程语言的特性,完成抽象图的模拟。
    • 多态
      • “多胎”,多态的形态再多也只能局限在子类的个数,即“胎”数
      • 多态的特性在面向对象编程的领域中具有十分重要的作用。多态屏蔽了子类对象的差异, 使得调用者可以写出通用性的代码,而无需针对每个子类都需要写不同的代码。
时间: 2024-10-08 14:22:52

把书读薄之《面向对象葵花宝典》阅读笔记-面向对象基础的相关文章

面向对象葵花宝典阅读思维导图(二)

在CSDN看到一个博主的一个系列不错,叫的是<面向对象葵花宝典>,看的话必须自宫么- -,学到了很多,但是怎么记录呢?单纯的文字没有一个树形结构的概念,看起来也不清晰,我就自己花了一个思维导图记录一下~ 专栏的地址是http://blog.csdn.net/column/details/oobaodian.html 本节记录的是该系列的14-17节 需求理解 即系统需要做什么 需求不等于功能  例子:ATM机 "取款"."存款"."查询余额&q

葵花宝典读书笔记-面向对象的应用范围

1.能做什么? 面向对象的核心是"可扩展性".因此,经常变化的地方就是面向对象应用的地方. 软件系统中,经常变化的地方主要集中在客户需求部分,不变的一般都属于计算机系统的基础. 2.不能做什么? 从上图可以看到"可扩展性"只占软件质量属性中的一小部分,其他部分都是不面向对象可以解决的.因此明白了面向对象的特点,是应用面向对象的关键. 面向对象不是瑞士军刀,只是普通的锤子而已,不要尝试所有的问题都用面向对象的思想去解决. 原文地址:https://www.cnblog

葵花宝典读书笔记-面向对象

面向对象编程思想不再局限于计算机本质,更侧重于对现实世界的模拟.对现实世界模拟的思想,本质就是人的思想. 在面向过程中,有一个类似于中央控制器的角色统一调度.面向对象中,没有这样的角色,也不指定严格的操作顺序,而是设计了许多对象,指定这些对象需要完成的任务,以及这些对象如何对外界的刺激作出反应. 如果说面向过程像一条生产流水线,那么面向对象就像一个足球队.每个球员有自己的行为和自己的特长.没有那个人可以从比赛的开始,就可以规划每个球员的每一步走位.出脚.传球....而是只能指定每个球员的角色(前

葵花宝典读书笔记-面向对象的迷思

从语言层面的处理机制上讲,面向对象的方式肯定比面向过程的方式效率要低一些.所以,对性能要求高的,例如操作系统.驱动程序.网络设备程序都是由C语言编写的.(C语言虽然提供的编程模式是面向过程的,但是同样可以以面向对象的思想来写程序,只是它没有太多机制支持面向对象方式编写程序,不是很方便而已.) 很多人认为面向对象的效率会导致性能很差,经常用C语言和JAVA语言做比较来说明观点. 程序系统的运行效率更大的取决于设备的IO速度. CPU:每秒10亿次,性能是纳秒级 内存:每秒1000万次,每次请求时间

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参

面向对象分析与设计阅读笔记二

今天我阅读了面向对象分析与设计的第二章对象模型,从计算机一开始的第一代语言到面向对象编程的演化,经历了很长的演变,同时面向对象的编程也是历史性的演变.那么什么是面向对象的编程呢?面向对象的编程其实是一种实现的方法,在这种方法中,程序组成许多相互协作的对象,每个对象代表一个实例,而类则属于一个通过继承关系形成的层次结构.以前我的认为是:面向对象的编程不就是写一个类,然后用类去创建一个对象,用对象来实现其中的某些功能.现在看来这样的想法有些片面. 每一种编程风格都是基于它自己的概念框架.对于所有面向

《软件构架实践》阅读笔记1

<软件构架实践>阅读笔记01 今天我开始阅读<软件构架实践>这本书,这也是我们下学期的一门学位课,所以我不敢懈怠,从头开始读这本书.在我的原来的思想中,软件构架应该就是在编写软件之前,先要以画图或者文档的方式,对要编写的软件进行一个大体构架的描述,然后根据这个构架去编写软件,今天读这本书,让我对软件的构架有了新的认识. 记得老师曾经说过,我们这一个专业不缺人,缺的是人才.而只有对编程技术熟练到一定程度,才能去写构架,而且还不一定能做好,所以还是要好好学习这本书. 首先通过前面的导读

JavaScript高级程序设计 - 阅读笔记

(本博客为原创:http://www.cnblogs.com/HeavenBin/) 前言: 大致花费了一个星期的时间把这本书认真看了半本,下面是我做的阅读笔记,希望能够让看这本书的人有个大致的参考.目前可能写得较乱不够全面,后续我会整理添加.(2017-7-17) 第一章 JavaScript简介 第二章 HTML中使用JavaScript 第三章  基本概念 3.1.语法 区分大小写 标识符(建议用驼峰大小写myCar) 注释// /**/ 严格模式(use strict) 语句 建议var

theano documentation 阅读笔记

作为帮助学习的工具 目标:较好地清楚地掌握theano的知识结构 学习内容:theano documentation 0.6,主要看tutorial 与 library ,看2遍以上. 学习时间6.29-6.30,(6.31也许需要完善下DAMS project的事)6.32-6.33 一共4天,大约40小时+. 这次是精读 1. install还需要搞定的是BLAS GPU-support 2. import pack 是把pack声明在当前环境,引用pack的内容需要pack.xxx fro