zoukankan      html  css  js  c++  java
  • 第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++默认静态,改动态

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

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

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

  • 相关阅读:
    Shiro
    Python活力练习Day11
    Python活力练习Day10
    Python活力练习Day9
    数据框DataFrame和列表List相互转换
    Python活力练习Day8
    Python中绘制箭头
    Python活力练习Day7
    Python活力练习Day6
    Python活力练习Day5
  • 原文地址:https://www.cnblogs.com/qmcj/p/9112106.html
Copyright © 2011-2022 走看看