第9章:数据抽象与面向对象——《实践之路》笔记

##作用域是逻辑结构(语言定下作用域规则,控制对象的可见性)

##生存周期是物理结构(分配销毁内存,对象存在的物质基础)

##在作用域内:对象可以供当前环境使用。是否开始了生存周期?供使用的正确的值

##在生存周期中:对象存在与内存上。根据作用域规则,是否允许程序使用

作用域控制可见性——作用域内外(进入可见;离开不可见);交集(嵌套,失活激活)可见性;控制导入导出

生存周期——内存空间的分配与释放。存在多久,提前回收

生存周期:占据空间并能保持数据的时间

##将生存期与作用域挂钩成批垃圾回收:Java

变量按生存期分类:

1.全局变量:生存期:整个执行期间

2.局部变量:生存期:一个子程序的执行期间

生存期提升:函数作用域中静态变量:生存期变成全局作用域 不变

作用域的分类:是否允许两两嵌套?

全局作用域

子程序作用域

模块作用域:子程序共享 静态变量

类作用域:方法共享类变量

##模块作为类型(多个实例):与类作用域区别?

管理器风格模块:只能从模块导出抽象类型(单实例类?)

模块类型:本身为一种类型

使用方法

管理器:显式导出

模块类型:实例创建与销毁

类=模块类型+继承(精化抽象)

类的实例:类对象

面向对象类型的三个基本概念:封装继承动态方法约束

9.1面向对象设计

 模块与模块类型提供的抽象:解耦合(从图的角度解释解耦合、内部实现、外部接口。从底向上逐步抽象)

1.减少概念负担细节量

2.故障遏制

3.提高程序部件间的独立性,修改内部实现避免改动外部代码

面向对象

更容易的扩展精化(继承)现有抽象,定义新抽象,提高代码重用(动态约束)

创造对象:调用定义的初始化例程:构造函数

 ##例程:编译器定义的执行时动作(生成代码,执行代码)?

公有私有成员(类内外可见性控制)

类的信息(定义)可放在类声明

声明中包含足够的信息(编译器获得对象大小

简化的类声明.h头文件

函数体.cc实现文件

必须用作用域解析符::方法定义的头部指明(方法)所属的类显式访问类对象(类变量?)

直接访问记录域的操作——类实例对象上的操作

派生:继承已有属性方法

层次结构

创建通用元素的基类,只包含操作与所需的数据

派生特定类型

定义模板,实现类型实例化

重载构造函数

不一定保证执行基类的构造函数

重载方法

显式访问基类

隐式访问

为了将任意大小、类型对象放入固定大小的对象

选择放入引用

可以在不了解类型与大小的情况下对其静态分配

9.2封装与继承

封装:数据与对其操作的子程序组织在一起,隐藏实现细节

9.2.1模块

利用作用域规则隐藏数据:选择性导出接口

头部声明选择导出的名字

体:定义

非透明类型:只能由模块定义的子程序操作模块中的数据

部分出公用部分与私用部分

没有模块头部:编译器自动从模块正文整理出头部

9.2.2类

基类对其成员可见性控制,相对于派生类

 默认可见性,指定可见性,修改可见性

C++ public private protected

python 类成员 public

9.2.3嵌套类

类声明嵌套

对比函数

内外层可见性

java 内层类,局部类:支持闭包机制

9.2.4类型扩展

部分语言未改动现有的模块机制,通过扩充记录的机制提供继承动态方法约束

9.2.5不使用继承扩展

js不允许现有类添加方法

9.3初始化终结处理

对象生存期:占据空间并能保持数据的时间

生存期开始——自动初始化:子程序形式:构造函数

构造函数并不分配空间(生存期已经开始),在已分配好的空间完成初始化工作

构造函数选择重载多个名字

引用与值

如果对象是引用:必须显示创建引用合适的对象

值:声明加工后创建隐式发生:允许对象未初始化的形式开始生命周期  或  提供一种方式,通过加工产生的对象选择合适的构造函数

执行顺序:初始化顺序(隐式调用,显式控制?)重载处理

废料收集

9.3.1构造函数选择

重载:识别合适的函数签名

9.3.2引用与值

引用模型中,传给变量的每个对象都是显式创造的(引用合适的对象)容易保证能调用适当的构造函数

使用值模型:给变量创建对象时,可以作为声明加工结果隐式发生

复制构造函数

只有一个参数(完整对象)

表示初始化,而不是赋值

c++中初始化与赋值的差别会对性能造成影响

9.3.3执行顺序

是否要求自动调用基类的构造函数

9.3.4废料收集

析构函数

自定义对象分配在了哪儿?根据对象声明的位置而定

 函数,类,模块声明的嵌套

多重继承:

歧义时优先级?

9.4动态方法约束

继承:类型扩展的重要结果

没有隐藏任何公共&可见成员派生类:子类

子类型多态性:

派生类(子类)可用于期望基类上下文(上下文:期望,限定了出现的对象的值域)

特殊      一般

 

静态方法约束:根据引用的类型做选择

动态:根据对象的类做选择

python动态

java默认动态,改静态

c++默认静态,改动态

抽象类:至少含一个抽象方法

静态方法约束:编译器总能基于类实例对象的类型(强类型)找到对应的方法版本

动态:对象需要包含足够的信息(所属类型,属性查找,继承链)

原文地址:https://www.cnblogs.com/qmcj/p/9112106.html