本文为《面向对象是怎样工作的》的读书笔记
目录
- 导图
- 第3章 编程语言的历史
- 第4章 OOP的三大要素
- 第5章 OOP运行时的机制
- 第6章 两种可重用技术:可重用构建群和设计模式
- 第9章 支持业务分析和需求定义的建模
- 第10章 面向对象设计
- 第11章 迭代式开发流程
导图
面向对象具有两个方面,下游工程的“编程技术”和上游工程的“通用的归纳整理法”
第3章 编程语言的历史
二进制的机器语言
--> 人类容易理解的符号:汇编语言
--> 人类更容易理解的“高级”形式:高级语言, eg:FORTRAN(适合于做科学计算)
--> 简单易懂的结构(循序、选择、重复):结构化编程, eg:Pascal、C语言
--> 可维护性(全局变量)和可重用性:面向对象编程(OOP), eg:JAVA, Python
第4章 OOP的三大要素
类结构将紧密关联的子程序(函数)和全局变量汇总在一起,创建大粒度的软件构件,多态和继承能够将公用子程序无法很好处理的重复代码进行整合,彻底消除代码的冗余。
1.类
类的功能:汇总、隐藏和“创建很多个”
- "汇总"子程序和变量
- “隐藏”只在类内部使用的变量和子程序
- 从一个类“创建很多个”实例
汇总
OOP中将由类汇总的子程序称为方法,将全局变量称为实例变量
优点:
- 构件的数量会减少
- 方法的命名变得轻松
- 方法变得容易查找
隐藏
能对其他类隐藏类中定义的变量和方法(private)
创建很多个
一旦定义了类,在运行时就可以创建很多个实例。
2.继承
继承是将类定义的共同部分汇总到另一个类中,并去除重复代码的结构。在OOP中,这种共用类称为超类,利用超类的类称为子类。
3.多态
多态是统一调用子程序端的逻辑的结构,即创建公用主程序的结构。
4.更先进的OOP结构
包
进行汇总的容器
异常
采用与返回值不同的形式,从方法返回特殊错误的结构。
垃圾回收
删除内存中不再需要的实例
第5章 OOP运行时的机制
1.虚拟机
解释中间代码并将其转化为CPU能够直接运行的机器语言的结构
2.线程
线程:程序运行的单位
进程:表示的单位比线程大,一个进程可以包含多个线程
多个线程同时并发进行:CPU交替执行多个线程的处理,但处理速度快,在使用者眼中像同时执行多个作业一样(单CPU)
3.内存的使用方法
静态区、堆区、栈区
1.静态区
从程序开始时产生,在程序结束前一直存在。
2.堆区
程序运行时动态分配的内存区域,供多个线程使用。
3.栈区
用于线程的控制的内存区域,每个线程准备一个。
类型 | 静态区 | 堆区 | 栈区 |
---|---|---|---|
用法 | 在应用程序开始运行时分配 | 开始时分配一定的区域,之后会根据需要再为应用程序分配 | 后入先出方式 |
存储的信息 | 全局变量、运行代码 | 任意(取决于应用程序) | 调用的子程序的参数、局部变量和返回位置 |
分配单位 | 为整个应用程序分配一个 | 为一个系统或应用程序分配一个 | 为每个线程分配一个 |
4.变量的存储
变量中存储的并不是实例本身,而是实例的指针。当将存储实例的变量赋给其他变量时,只是复制指针,堆区中的实例本身并不会发生变化。
5.垃圾回收
如何判断实例不被需要:发现孤立的实例
第6章 两种可重用技术:可重用构建群和设计模式
第9章 支持业务分析和需求定义的建模
建模的目的:
- 业务分析:整理现实世界的工作的推进方法(why使用计算机)
- 需求定义:确定交给计算机的作业范围(what)
- 设计:确定软件的编写方法(how)
第10章 面向对象设计
即上一章讲述的设计模式
设计的目标
- 去除重复
- 提高构建的独立性:起一个能用一句话表示的名称、创建许多秘密、创建的小一点
- 避免依赖关系发生循环
第11章 迭代式开发流程
开发流程的两种类型:瀑布式开发流程和迭代式开发流程
1.瀑布式开发流程
前提:软件的修改会产生很大的成本,编写文档的成本要比编写软件低得多。
2.迭代式开发流程
第13章 函数式语言
有时间了解一下Haskell或者Scala