对象导论
1.1 抽象过程
所有编程语言都提供抽象机制. 人们所能解决的问题的复杂性直接取决于抽象的类型和质量.
汇编语言是对底层机器的轻微抽象.
我们将问题空间中的元素及其再解空间中的表示称为对象. 这种思想实质是: 程序可以通过添加新类型的对象使自身适用于某个特定的问题.
万物皆为对象
可以抽取待求解问题的任何概念化构建表示程序中的对象.
程序是对象的集合
他们通过发送消息来告知彼此所要做的.
每个对象都有自己的由其他对象所构成的存储
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
1.2 每个对象都有一个接口
创建抽象数据类型 (类) 是面向对象程序设计的基本概念之一.
可以创建某一类型的变量, 然后操作这些变量.
类描述了具有相同特性 (数据元素) 和行为 (功能) 的对象集合, 所以一个类实际上就是一个数据类型.
1.3 每个对象都提供服务
每个对象都提供服务, 它有助于提高对象的内聚性. 高内聚是软件设计的基本质量要求之一: 这意味着一个软件构件的各个方面组合得很好.
1.4 被隐藏的具体实现
将程序开发人员按照角色分为类创建者和客户端程序员.
客户端程序员的目标是收集各种用来实现快速应用开发的类. 类创建者的目标是构建类, 这种类只向客户端程序员暴露必须的部分, 而隐藏其他部分.
访问控制: 一个存在原因让客户端程序员无法触及不应该触及的部分. 另一个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响客户端程序员.
1.5 复用具体实现
使用现有类合成新的类, 这种方式被称为组合.
如果组合是动态的, 通常称他们为聚合.
1.6 继承
当父类发生变化时, 被修改的子类也会发生变动.
当继承现有类型时, 也就创建了新的类型.
导出类和基类具有相同的类型.
如果只是简单地继承一个类而并不做其他任何事情, 那么基类接口中的方法将会直接继承到导出类.
1.6.1 是一个与像一个关系
导出类和基类时完全相同的类型, 因为它们具有完全相同的接口. 可以用一个导出类对象来完全替代一个基类对象. 这可以被视为纯粹替代, 通常称为替代原则. is-a 关系
有时必须在导出类型中添加新的接口元素, 这样也就扩展了接口. 这个新的类型任然可以替代基类, 但时这种替代不完美, 因为基类无法访问新添加的方法. 者中可以描述为 is-like-a 关系.
1.7 伴随多态的可互换对象
在处理类型的层次结构时, 想把一个对象不当作它所表示的对象类型来对待, 而把它当作基类来对待.
通过导出新的子类型而轻松扩展设计的能力时对改动进行封装的基本方法之一.
1.8 单根继承结构
在单根继承结构中的所有对象都具有一个公用接口, 所有它们归根到底都时相同的基本类型.
单根继承保证了所有对象都具备某些功能.
单根继承结构使垃圾回收器都具备某些功能. 由于所有对象都保证具有其类型信息, 所以不会因无法确定对象的类型而陷入僵局.
1.9 容器
在 C++ 中, 容器被称为标准模板类库.
单一的容器是满足不了现有的需求, 还需要对容易进行选择, 主要原因有两个:
不同容器提供了不同类型的接口和外部行为.
不同容器对于某些操作具有不同的效率
1.9.1 参数化类型
参数化类型就是编译器可以自动定制作用于特定类型上的类. 在 Java 中称为泛型.
1.10 对象的创建和生命期
当使用对象时, 最关键问题之一就是他们的生成与销毁. 每个对象为了生存都需要资源, 尤其时内存. 当我们不在需要对象时, 需要清理掉所占有的资源.
对象的数据存在于何处, 有两种方式:
为了最求最大执行速度, 对象的存储空间和生命周期可以在编程程序时确定, 这可以通过将对象置于堆栈或限域变量或静态存储区来实现. 这种方式将存储空间的分配和释放置于优先位置.
在碓的内存池中动态的创建对象. 在这种方式中, 直到运行时才知道需要多少对象, 它们生命周期如何, 以及它们的具体类型是什么. 因为存储空间是被动态管理的, 所有需要大量时间在碓中分配空间, 这可能要远远大于在堆中创建空间. Java 采用的便是这种方法.
1.11 异常处理: 处理错误
异常是一种对象, 它从出错地点被 "抛出", 并被专门用来处理特定类型错误的相应异常处理器 "捕获". 异常处理像是与正常程序执行路径并行的, 在错误时执行的另一条路径.
异常提供了一种从错误状况进行可靠恢复的途径.
1.12 并发编程
有时中断对于处理时间性强的程序是必须的, 但对于大量其他问题, 我们只想把问题切分成多个独立的部分执行. 在程序中, 这些彼此独立运行的部分被称为 "线程", 这个概念被称为并发.
并发看起来相当有用, 但有一个隐患: 共享资源. 如果多个并行任务都要访问同一个资源, 那么就会出现问题.
解决办法: 当一个任务访问资源的时候, 将资源锁住, 直到使用完毕后, 在释放资源, 给其他任务使用.
来源: https://www.cnblogs.com/Tan-sir/p/9289068.html