- 博客(21)
- 收藏
- 关注
原创 软件构造相关
设计可复用的类具体的技术有封装和信息隐藏、继承和重写、多态、子类型、重载、泛型编程本节讲解:行为子类型、lsp(李氏原则)、委派、组合Behavioral subtyping and Liskov Substitution Principle (LSP)子类型多态客户端可用统一的方式处理不同类型的对象行为子类型(java)compiler强制:子类型可以增加方法,但不可删除子类型需要实现抽象类型中所有未实现的方法子类型中重写的方法必须有相同的或者满足协变的返回值子类型中重写的方
2021-07-06 19:50:57
117
原创 软件构造相关
关于如何创建类的新实例的模式(creational patterns)工厂方法模式(factory method pattern)什么时候使用当客户端代码不知道要创建哪个类的实例的时候当客户端不想在client代码中指明具体的要创建的类时给出一个例子现在这里有一个接口Trace,FileTrace和SystemTrace分别是继承这个接口的两个子类,正常使用如下:Trace log = **new SystemTrace();**log.debug( "entering log" );.
2021-07-06 19:48:33
132
原创 软件构造相关
Static vs. Dynamic testing静态测试:用眼睛看,评审、走查、检查等动态测试:使用测试用例集进行测试测试套件每个测试集的目标和说明测试运行的配置说明使用这些测试的前置条件单元测试(unit test)含义:针对软件的 最小单元模型开展测试,隔离各个模块,容易定位错误和调试单元测试需要考虑的问题:模块接口、本地数据结构 、保证模块中的所有语句都被测试覆盖到、测试边界条件junit使用使用入门,点这里覆盖度分析含义字面意思测试内容函数覆盖、语句覆盖
2021-07-05 18:38:47
189
1
原创 软件构造相关
bug存在说明什么代码错误需求没有完成用户需求理解错误设计文档中有逻辑错误测试不足在复现bug的时候需要控制什么控制软件版本控制环境相同控制输入数据相同调试的过程复现错误(repreduce)在进行错误复现的时候,要控制软件版本、运行环境、输入数据不同的版本的spec是不一样的不同的环境,比如不同的操作系统在控制输入的时候,一定要尽量减小input的size如果你不能控制输入,那么请使用推断输入和记录输入定位错误(diagnose)先猜想错误的位置(抽象),然后做实验进
2021-07-05 18:38:03
126
原创 软件构造相关
Error 和 ExceptionError:一般是内部错误,一旦发生就无法挽回,所以就只能终止程序的运行。例如:空指针、资源枯竭Error分类:用户输入错误,设备错误,物理限制Error举例:VirtualMachineError 虚拟机坏了或者资源枯竭OutOfMemoryError 内存告罄StackOverflowError 爆栈InternalError 意想不到的内部错误LinkageError 描述在依赖关系中的错误NoClassDefFoundError 一个类的实例引用
2021-07-05 18:37:16
98
原创 软件构造相关
build-time viewsidea =>requirement=>design=>code=>installable/executable package代码层面:代码的逻辑组织component层面:代码的物理组织moment层面:特定时刻的软件形态period层面:软件形态随时间的变化Build-time, moment, and code-level view如何使用基本程序块逻辑地组织源代码,如函数、类、方法、接口等,以及它们之间的依赖关系源代码、语法
2021-07-05 18:36:32
92
原创 软件构造相关
coding从用途上划分:编程语言、建模语言、配置语言、构建语言从形态上划分:基于语言学的构建语言、基于数学的形式化构造语言、基于图形的可视化构造语言编程语言建模语言建模语言是一种用于展示结构中的信息的人工语言,它的目标是可视化地理解、验证、交流一个系统的设计配置语言配置文件配置程序的参数和初始设置,为了改变软件在运行时的行为XML,YAML,JSONreview and static code analysis代码评审形式:结对编程、走查、正式评审会议、自动化评审(checks
2021-07-05 18:35:40
89
原创 软件构造相关
设计可复用的库和框架library和framework被称为系统层面的复用,是因为它们不仅定义了可复用的接口/类,并且定义了这些类之间的交互关系、调用关系术语API:应用编程接口,库和框架的接口client:使用api的codeplugin:定制框架的客户端代码extension point:框架内预留的空白,开发者开发出符合接口要求的代码,框架可调用,从而相当于开发者扩展了框架的功能protocol:客户和api之间预期的交互序列callback:框架将调用一个插件方法来访问定制功能l
2021-07-05 18:34:01
87
原创 软件构造相关
结构型模式adapter(适配器模式)什么时候使用将某个类/接口转换为client期望的其他形式同故宫增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类模型结构其实它的本质就是使用一个中间的类,将原来的方法隔离,为原来的方法重新定义接口,并提供给client使用decorator(装饰器模式)什么时候使用为对象增加不同侧面的特性对每一个特性构造子类,通过委派机制增加到对象上同时使用了子类型和委托机制模型结构decorator中有一个rep,用来
2021-07-05 18:33:17
95
原创 软件构造相关
Specification: Programming for communicationspecification输入/输出的数据类型功能和正确性性能只讲“能做什么”,不讲“怎么实现”behavioral equivalence(行为等价性)站在客户端角度看行为等价性根据规约判断行为是否等价两个函数符合这个规约,故它们等价规约结构(前置条件、后置条件)前置条件:对客户端的约束,在使用方法时必须满足的条件,使用关键字requires后置条件:对开发者的约束,方法结束时必须满足的条件
2021-07-05 18:29:48
99
原创 软件构造相关
名词解释进程(Process)和线程(thread):并发编程的两个基本单元。进程:(1)和同一个机器上的其他进程是彼此隔离的。(2)拥有私有的内存空间,运行时不能共享变量。(3)通过IPC(pipe/socket)进行通信。线程:(1)共享所在进程的内存空间(2)共享可变对象的共享时,需要同步(使用synchronization关键字维护线程安全)。(3)有独立的运行时栈,就像一个普通的函数。(4)杀死线程不安全。Concurrent(并发):在单核机器上,“多进程”并不是真正的多个进程在同时执行,而
2021-07-05 18:28:34
102
原创 设计模式总结
Java中部分设计模式的总结Strategy模式:使某个类拥有一系列接口变量,用一系列方法类来实现接口以实现其中的相关算法。创建类的时候指定需要使用哪些具体的方法类来给接口变量赋值,即可达到代码重用的目的。Observer模式:某对象状态变化时,通知所有的订阅者。这个对象要拥有所有订阅者的列表。该对象实现IObservable接口,内部有notify add remove等方法,而订阅者实现IObserver接口,内部有update方法。此方法避免了观察者对观察对象的不断检查。Decorator模
2020-07-17 11:58:11
173
1
原创 JAVA文本输入输出
Java能实现文本文件输入输出的类种类繁多,正确使用的难度极大。本文旨在总结各种IO的实现方法。以下六个函数分别完整实现了六种IO,希望对大家有所帮助。package apis;import java.io.*;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class Readfile {/**a method of readfile./public static void main(Strin
2020-07-17 11:57:05
236
原创 软件构造
1.并发可以是网络上的多台计算机完成同一个工作,也可以是一台计算机上完成多个应用。而计算机的“核”变得越来越多, 为了充分利用多核和多处理器,需要将程序转化为并行执行并发编程有两种模式: 共享内存:在内存中读写共享数据,某一时刻执行在不同处理器上的同一程序共享内存里的数据; 消息传递:通过channel交换消息,A把消息发给B,B把执行结果发给A2. 进程、线程进程:拥有整台计算机的资源(逻辑上),多个进程时间不共享内存,如果进程之间要协作需要通过消息传递来完成。...
2020-07-07 21:21:49
132
原创 软件构造
6.1 Robustness and Correctness 健壮性与正确性健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常。而且即使因为意外终止执行了,也要向用户展示准确的错误信息。面向健壮性的编程要求封闭实现细节,以达到限定用户的恶意行为的目的,并且要考虑到各种各样大的极端情况,假设用户可以做任何事情。目的是让用户变得更容易:出错也可以容忍,因为程序内部已有容错机制。 对自己的代码要保守,对用户的行为要开放正确性:程序按照spec加以执行的能力,是最重要的...
2020-07-07 21:17:10
264
原创 软件构造
1. 可维护性的指标软件维护的类型:纠错性维护(25%)、适应性维护(21%)、完善性维护(50%)、预防性维护(4%)可维护性(Maintainability)、可扩展性(Extensibility)、灵活性(Flexibility)、可适应性(Adaptability)、可管理性(Manageability)、支持性(Supportability)这些指的都是可维护性。评判可维护性的一些方面: 设计结构足够简单; 模块之间松散耦合; 模块内部高度聚合; 不要...
2020-07-07 21:10:02
144
原创 软件构造
1. 面向复用编程 面向复用编程(programming for reuse):开发可以复用的软件 基于复用编程(programming with reuse):复用已有的软件开发为了降低成本和开发时间,提出了面向复用的编程,所有面向复用的代码都应该经过充分的测试,以保证它的可靠性和稳定性(不能在未来使用的时候发现一堆bug,那就白干了),而因为它是面向复用的,所以在不同的应用里可以保持一致的表现,也就是说对此功能做了标准化。可复用性的评估评估的方面:复用的频繁性、复用的代价...
2020-07-07 21:03:52
225
原创 软件构造
在设计中,最重要的原则就是隔离,将ADT和client、将method和client通过spec都隔离开,确保内部的变化不会影响到client,而client也不知道我的内部的实现,这样的目的是为了便于未来的升级和维护,也可以最大限度的减少恶意者的攻击。3.1 Data Type and Type Checking1. 编程语言的数据类型 在Java中,数据类型分为基本数据类型(int、boolean、char等)和对象数据类型(String、Integer等)。所有的基本数据类型都是Immuta
2020-07-07 20:58:58
284
原创 软件构造
1. 基本知识 软件开发生命周期(SDLC):从无到有,从有到好 传统软件过程模型:基本类型有线性过程(Linear)和迭代过程(Iterative),目前存在的模型有瀑布过程(waterfall),增量过程(incremental),V字模型(V-model),原型过程(prototyping),螺旋模型(spiral)。 敏捷开发:Agile = 增量 + 迭代 将任务划分成一个个小规模的任务,因此较小的团队也能够适应大规模软件的开发。在每...
2020-07-07 20:48:43
220
原创 软件构造
1. 软件构造过程中的多维度视图 Moment维度关注于程序在某一个时刻的表现,而Period维度更关注于程序在一段时间内的表现; Build-time维度关注程序还未被投入运行,编码阶段的表现,而Run-time维度更关注于程序运行时的表现; Code-level维度关注程序的语句层面,Component-level维度更关注于一段代码,当作一个块观察比如一个包、一个库。(1) Build-time, moment, and code-level view...
2020-07-07 20:45:19
173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅