软件构造三四章总结

本文深入探讨了软件构造中的关键概念,包括静态与动态类型检查、数据类型的可变性与不变性、抽象数据类型的设计与应用,以及面向对象编程的基本原理。详细解析了OOP的特性如封装、继承、多态,以及接口与类的作用。

软件构造3-1数据类型和类型检:

一、静态/动态类型检查:

静态类型语言,在编译阶段进行类型检查。对于编译器的检查主要包含在三个方面:语法检查、类型检查、声明检查。预处理器的工作是进行相关替换:对于头文件的替换、对于条件编译的预处理,对于宏的替换。语法错误,类名、函数名错误,参数数目错误,参数类型错误,返回值类型错误。关于“类型”的检查。
动态类型检查:判断实例是否为某个类型的对象或该类型的子类的对象,判断类型是否为某个类的子类。非法的参数值,非法的返回值,越界,空指针。关于“值”的检查。

二、可变/不变的的数据类型:

改变一个变量:将该变量指向另一个值的存储空间
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值
Immutability:不变数据类型,一旦被创建,其值不能改变,final类无法派生子类,final变量无法改变值、引用;final方法无法被子类重写。不变对象:一旦被创建,始终指向同一个值,可变对象:拥有方法可以修改自己的值
例:String s = “ab”;String t = s;t = t+”c”;此时s是“ab”,t是“abc”
StringBuilder sb = new StringBuilder(“ab”) StringBuilder tb = sb;
tb.append(“c”);此时tb和sb都是“abc”.。

三、数据类型:

基本数据类型:int,long,byte,short,char,float,double,boolean只有值,没有ID,immutable,在栈中分配内存,代价低
对象数据类型:既有ID,也有值,mutable/immutable,在堆中分配内存,表达式与泛型的统一,代价昂贵

软件构造3-2设计规约:

一、方法的规约:

你这个方法要干啥,输入参数和返回值,写假设是为了让别人懂,让自己记住

二、前置/后置条件

三、欠定规约、非确定规约

四、陈述式、操作式规约

五、规约的强度及其比较

六、如何写出好的规约

软件构造3-3抽象数据类型:

设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(表示泄露)。
ADF的特性:不变量、表示泄露、抽象函数AF,表示不变量RI

一、抽象和用户定义的类型:

抽象类型:强调作用于数据上的操作

二、ADT的操作:

构造器:实现ADT,
生产器:通过该ADT生产一些新的数据,
观察器:观察ADT内部的数据,
变值器:改变数据的值,返回值是void,

三、抽象数据类型的例子:

四、ADT的设计规则

五、

RI:表示独立性,client使用ADT无需考虑内部实现

六、ADT的现实意义

七、ADT测试:

测试构造器,生产器和变值器,调用观察器来观察这些结果

八、不变量:

用private定义变量,使用immutable类型,彻底避免表示泄露

九、RI和AF:

RI表示不变性,说明参数的合法值是什么样的,AF:说明这些参数的现实意义是什么,一一说明这些参数都是什么
CheckRep(),检查不变量,所有可能改变rep的方法内部都要检查

十、有益可变性:

十一、表示泄露

十二、不变量的前置条件

软件构造3-4面向对象编程:

一、OOP的概念:

Object是状态和行为的总和;state是object所包含的数据,behavior是object的动作
Class:每个物体都有一个class,一个类的方法就是它的接口
静态的,static方法可以直接使用,但是不带static的方法需要实例化,并且来对象里面进行调用
接口和类:定义和实现ADT;接口之间可以继承与拓展;一个类可以实现多个接口;一个接口可以有多种实现类
接口:确定ADT规约 类:实现ADT
也可以不需要直接使用类作为ADT,既有ADT定义也有ADT实现
实际中更倾向于使用接口来定义变量
客户端需要知道该接口的某个具体实现类的名字

二、OOP的特征:

封装与信息隐藏;继承与重写;多态,子类型,重载,静态与动态分派
信息隐藏:使用接口类型声明变量,客户端仅使用接口中定义的方法,客户端代码无法直接访问属性
Private:只有声明的类可以用
Protected:声明的类的子类可以用
Public:所有人都可以用
继承与重写:严格继承:子类只能添加新方法,无法重写超类中的方法——超类中的方法都用final定义的
Overrriding:子类重写函数,实际执行哪个方法,运行时决定
父类型中的函数不为空,证明这些子类中有一些是共性的,但是如果为空,证明这些子类都是不一样的,每一个都需要自己去实现这个功能
重写之后,也可以调用super的方法
抽象方法和抽象类:
抽象方法:该方法中有一些东西没有实现:
抽象类:至少含有一个抽象方法没有实现的类为抽象类
接口:只有一个抽象方法的一个抽象类
多态:特殊多态,不同的类型表现出不同的行为,不同的参数,不同的返回值构成虽然方法 的名字是一样的,但是他们执行的功能是不一样的;参数化多态——泛型编程
重载:多个方法具有同样的名字,但是参数列表是不一样的,或者返回值时不一样的,例如java中print可以打印不同的东西,静态方法,接受静态检查
Java中的通配符:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义

<? Extends Objects>代表上边界限定通配符,不能直接添加对象,因为不能确定实例化对象具体类型,但是可以用来获取各种数据类型的数据,并赋值给父类型的引用 <? Super Integer>代表下边界限定通配符,使用get受限,但是可以添加特定类型的值,用于将对象写入到一个数据结构里 如果你想从一个数据类型里获取数据,使用 ? extends 通配符 如果你想把对象写入一个数据结构里,使用 ? super 通配符 如果你既想存,又想取,那就别用通配符 不能同时声明泛型通配符上界和下界 动态分派与静态分派:动态分派:编译阶段可能绑定到多态操作,运行阶段决定具体执行哪个 ## 三、Java中重要的Object方法 ## 四、设计好的类 # 软件构造4-1可复用性的度量、形态与外部表现: 一、软件复用:软件复用的两种观点:面向复用编程; 二、怎么衡量复用性 三、复用的级别 四、复用的外部特征 # 软件构造4-2面向复用的软件构造技术: ## 一、设计可复用的类: 继承与重写: 重载: 参数多态与泛型编程: 行为子类型与李氏替换原则: 组合与委托: ## 二、行为子类型与里氏替换原则: 里氏替换原则:所有使用基类的地方可以透明地使用子类的对象,子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法 子类可以增加自己特有的方法
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值