![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件构造
文章平均质量分 95
FZQuantum
一条懒狗
展开
-
软件构造 最后的总结
最后只剩下写零零散散的东西了,大杂烩目录1.多维度视图2.软件构造工具3.ADT4.可复用性4.15. 维护性5.1可维护性的设计模式1.多维度视图软件构造过程中的多维度视图源代码,AST:显然属于开发时要关注的,代码层级,瞬时形态类文件,静态链接库,测试案例:显然属于开发时要关注的,瞬时形态,但是是组件等级代码扰动量(Code Churn):显然也是开发时,代码层级,不过是一个需要随时间变化进行变化的量版本,版本控制工具:开发时,组件级,随时间而变化代码快照图,内存转储: 运行时,代码层级原创 2020-07-11 19:58:54 · 446 阅读 · 0 评论 -
软件构造 2019
某公司拟设计和开发一个停车场管理系统,其基本需求陈述如下:(1) 一个停车场有 n 个车位(n>=5),不同停车场包含的车位数目不同。(2) 一辆车进入停车场,如果该停车场有空车位且其宽度足以容纳车的宽度,则可以在此停车。(3) 停在停车场里的车,随时可以驶离停车场,根据车型或时间自动计费。(4) 停车场管理员可以随时查看停车场的当前占用情况。下图给出了一个包含 13 个停车位的小型停车场示例图,其中 1-8 号停车位较窄,9-13 号停车位较宽。在当前状态下,第 1、3、7、9、10 号原创 2021-01-18 22:57:40 · 311 阅读 · 0 评论 -
软件构造 2018
2.简答题以下给出了某ADT的一部分代码,请判断其是否threadsafe。若非,请将其修改为threadsafe的代码。答题时,请先指出有潜在threadsafe风险的行号或行号范围,然后阐述如何修改以消除每一.项潜 在风险,并尽可能保证高并发性能。最后以注释的形式撰写改造后的ADT的线程安全策略。public class Poem { public String title = new String(); private List<String> originLines = ne原创 2020-07-10 23:02:22 · 674 阅读 · 0 评论 -
锁与同步
前几种保证线程安全的方式:思想缺陷避免共享不能用全局rep共享数据只共享只读类型只能“读”共享数据,不能写使用线程安全类型可以共享 “读写”,但只有单一方法是安全的,多个方法调用就不安全了可以看出,这些方式都有很大的局限性,很多时候,无法满足上述三个条件。常见的情况是要读写共享数据,且线程中的 读写操作复杂。这时候,我们就要使用 同步和锁的方式,通过“同步” 策略,负责多线程之间对mutable数据的共享操作,同时避免多线程同时访问数据。使用锁机制,获得对原创 2020-07-07 22:53:01 · 259 阅读 · 0 评论 -
线程安全
线程安全:ADT或方法在多线程中要执行正确什么是线程安全的?线程之间的“竞争条件”:作用于同一个mutable数据上的多个线程, 彼此之间存在对该数据的访问竞争并导致互相交错存取,致使post condition可能被违反,这是不安全的。保证线程安全的目的是为了让ADT或方法在多线程中要执行正确不违反spec、保持RI与多少处理器、 OS如何调度线程,均无关不需要在spec中强制要求client满足某种“线程 安全”的义务线程不安全的例子:还记得Iterator 类吗?你不能在集合上进行原创 2020-07-07 16:40:35 · 556 阅读 · 0 评论 -
并发——线程
Java中的线程每个应用至少有一个线程 —— 主线程,可以创建其他的线程Java中的线程类可以分为两种:Thread. 从Thread类派生子类 (使用较少)Thread类本身实现了Runnable接口,尽管其.run()方法不执行任何操作。 因此创建一个Thread类将其作为Thread的子类,提供其自己的run()实现。public class HelloThread extends Thread { public void run() { System.out.println("原创 2020-07-04 15:22:41 · 239 阅读 · 0 评论 -
# 软件构造 关于软件测试
即使是最好的测试,也无法达到100%的无错误原创 2020-07-04 11:34:53 · 354 阅读 · 0 评论 -
Try-Catch-Finally的次序问题
首先不管程序是否碰到异常,finally都会被执行常见的Try-Catch-Finally的执行次序:如下面这片代码InputStream in = new FileInputStream(. . .); try { // 1 code that might throw exceptions // 2 } catch (IOException e) { // 3 show error message // 4 } finally { // 5 in.close(); }原创 2020-07-03 14:46:30 · 196 阅读 · 0 评论 -
#软件构造 健壮性与正确性
健壮性健壮性:系统在不 正常输入或不正常外部环境下仍能够表现正常的程度面向健壮性的编程:处理未期望的行为和错误终止即使终止执行,也要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug健壮性法则 (Postel’s 准则)对自己的代码要保守,对用户的行为要开放封闭实现细节,限定 用户的恶意行为考虑极端情况,没有“不可能”...原创 2020-07-03 11:15:32 · 738 阅读 · 0 评论 -
#软件构造 面向可维护性的设计模式
这一节讲了很多设计模式一,创建类的新实例的模式工厂方法模式工厂方法模式(Factory Method) 又被称为 Virtual Constructor 虚拟构造器 :当客户端不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。参考博客https://blog.csdn.net/Franklins_Fan/article/details/105922583抽象工厂模原创 2020-07-02 17:35:48 · 275 阅读 · 0 评论 -
#软件构造 Java中的正则
一些基础的正则表达式符号含义AB表示A与B的连接ABA*表示A的克林闭包,即出现0次或多次A+表示A的非零闭包,即出现1次或多次A?表示A出现0次或1次A{n}表示A正好出现n次,n 是非负整数A{n,m}表示A出现n次到m次之间,n ,m是非负整数\ (转义字符,匹配(A+??表示非贪心的匹配模式,紧随限定符:(*、+、?、{n}、{n,}、{n,m})匹配搜索到的、尽可能短的字符串字符集符号含义原创 2020-07-02 13:38:46 · 139 阅读 · 0 评论 -
#软件构造 面向可维护性的构造技术
# 1.State设计模式# 2.备忘录模式原创 2020-06-30 15:07:08 · 227 阅读 · 0 评论 -
#软件构造 软件的可维护性
这篇博客对应5.1章节的内容,主要涉及软件生命周期中的运维方面 软件常见的质量指标有可维护性,可扩展性, 灵活性,可适应性,可管理性与支持性Code review的时候经常问的几个面向可维护性的问题有:设计结构是否足够简单?模块之间是否松散耦合?模块内部是否高度聚合?是否使用了非常深的继承树,是否使用了委托替代继承?代码的圈复杂度是否太高?是否存在重复代码?0.软件可维护性评估的几个指标圈复杂度 :评估代码的结构复杂度, 通过计算程序流中不同代码路径的数量来定义,圈复杂度较高的程序原创 2020-06-30 14:03:13 · 344 阅读 · 0 评论 -
#软件构造 复用性与各种设计模式(2)行为类模式
行为类模式 :描述类/对象交互和互相分配责任的方式,允许算法和对象职责分配之间的选择(“谁做什么”);简化在运行时难以追踪的复杂的控制流。一.行为类模式1.策略模式有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里为不同的是实现算法构造抽象接口,利用委派,运行时动态传入满足客户端倾向的算法类实例。参考之前的博客https://blog.csdn.net/Franklins_Fan/article/details/106139748其中有对策略模式的总结原创 2020-06-29 14:53:52 · 191 阅读 · 0 评论 -
#软件构造 复用性与各种设计模式(1)结构型模式
在4.3节中提到了很多种设计模式,这里对其进行总结首先大体上,这些设计模式分为结构型模式 :处理类或对象的组成结构,解耦多个类,引入一个抽象类用于将来的扩展;封装复杂的结构。行为类模式 :描述类/对象交互和互相分配责任的方式,允许算法和对象职责分配之间的选择(“谁做什么”);简化在运行时难以追踪的复杂的控制流。一.结构型模式1.适配器模式将某个类/接口转换为客户端期望的其他形式,通过增加一个接口,作为两个互不相容的接口的适配器,将已存在的子类封装起来,适配器模式让本来接口不兼容而无法在一起工原创 2020-06-28 12:47:02 · 235 阅读 · 0 评论 -
#软件构造 LSP里氏原则与软件设计
里氏替代原则1:行为子类型首先,LSP全称为里氏(Liskov )替代原则——Liskov Substitution Principle ,是面向对象最重要的几大原则之一。从字面上去指,其含义是:子类型可以增加方法,但不可删子类型需要实现抽象类型中的所有未实现方法子类型中重写(Override)的方法 必须有相同或子类型的返回值子类型中重写(Override)的 方法必须使用同样类型的参数子类型中重写(Override)的方法不能抛出额外的异常很显然上面的原则已经写进了Java的语法规则原创 2020-06-26 23:32:58 · 323 阅读 · 0 评论 -
#软件构造 ADT与OOP的总结 (5) ADT和OOP中的“等价性“
关于等价性的总结:0.等价关系在集合率中我们学习过等价关系的定义:如果一个关系满足自反、对称、传递 ,那么他就是一个等价关系1.ADT之间的等价性1.不可变类型ADT是对数据的抽象, 体现为一组对数据的操作,在前面的章节中,我们知道,每个ADT都有一个抽象函数(AF):是从内部表示到抽象表示的一个映射,因此,判断ADT之间的等价性,我们可以基于抽象函数AF定义ADT的等价操作,如果两个AF对于相同的事物都映射到同样的结果。如果站在外部观察者角度:对两个对象调用任何相同的操作,都 会得到相同的结原创 2020-06-26 21:03:38 · 267 阅读 · 0 评论 -
Java中重写(Override)与重载(Overload)的关系
一张很形象的图可以进行辨析:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。引用自 https://www.runoob.com/java/java-override-overload.html...转载 2020-06-26 20:37:46 · 185 阅读 · 0 评论 -
Idea生成Javadoc 未指定JDK路径/ 编码 GBK 的不可映射字符
IDEA在工具/生成JavaDoc是一个非常方便生成JavaDoc帮助文档的工具但是在生成JavaDoc的时候经常会遇到一些问题:1.错误运行’Javadoc 问题’: 未指定JDK路径 不能生成JavaDoc解决方案:可能是由于IDEA内置的默认jdk的版本比较低,对一些方法和类不能支持,需要我们指定自己的JDK路径打开 文件/项目接口,进入SDK设置选择项目SDK为我们自己的SDK,如果没有添加的话,点击Add SDK 添加我们自己的SDK即可解决这个问题2.错误: 编码 GBK 的原创 2020-05-20 23:19:24 · 704 阅读 · 0 评论 -
Java异常类与自定义异常
首先,什么是异常?我们先来看jdk1.8的API对异常的定义异常:程序执行中的非正常事件,程序无法再按预想的流程执行,就是Java程序在运行过程中出现的错误。异常Exception这个东西常常和error混淆,但是他们有本质的区别:,表示应用程序运行时出现的重大错误。例如JVM运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误,会导致JVM直接崩溃退出。而异常Exception是运行中产生的可控的错误,如果能够正确的抛出异常以及捕获异常,JVM原创 2020-05-19 22:10:42 · 746 阅读 · 0 评论 -
STRATEGY(策略)一对象行为型模式 来自《设计模式:可复用面向对象软件的基础》总结
1.STRATEGY模式的意图定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。举个例子:使用螺丝刀的时候,针对不同的工作任务,选取不同的“刀头”,但目的并非将螺丝刀与刀头组合起来建立永久的delegation,而只是临时通过delegation完成任务(即调用刀头的“算法”),然后二者再无联系。所以说STRATEGY模式强调算法的动态调用,但前提是动态绑定2.我们为什么需要STRATEGY模式有许多算法可对一个正文流进行分行。将这些算法硬原创 2020-05-15 14:30:35 · 229 阅读 · 0 评论 -
#软件构造实验 工厂方法模式 (Factory Method)
1.什么是工厂方法模式?工厂方法模式(Factory Method) 又被称为 Virtual Constructor 虚拟构造器 :当客户端不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。2.什么时候需要我们用到工厂方法模式?当一个类遇到以下几个情形的...原创 2020-05-04 20:38:42 · 447 阅读 · 0 评论 -
#软件构造 ADT与OOP的总结 (3) 抽象数据类型 (ADT)
在软件构造课程的第三章Abstract Data Type (ADT) and Object Oriented Programming (OOP)中主要分为五个子章节3-1 Data Type and Type Checking 数据类型与类型检验3-2 DesigningSpecification 设计规约3-3 Abstract Data Type (ADT) 抽象数据类型3-4...原创 2020-04-14 17:32:27 · 456 阅读 · 0 评论 -
#软件构造 ADT与OOP的总结 (2)设计规约
在软件构造课程的第三章Abstract Data Type (ADT) and Object Oriented Programming (OOP)中主要分为五个子章节3-1 Data Type and Type Checking 数据类型与类型检验3-2 DesigningSpecification 设计规约3-3 Abstract Data Type (ADT) 抽象数据类型3-4...原创 2020-04-13 16:53:14 · 269 阅读 · 0 评论 -
#GitHub# 如何只下载GitHub仓库指定文件夹中的内容?
#GitHub 如何只下载指定文件夹中的内容?首先我们需要安装SVN,安装方法不再详述安装成功后键输入svn help进行环境检测安装成功截图然后进入我们想要clone文件到本地的文件夹,在地址栏输入cmd进入命令行窗口获取我们需要文件夹的GitHub连接,但是在用前需要修改一下例如这个链接,我们只需要下面的这个子文件夹我们从地址栏获得链接后进行修改将链接中的字...原创 2020-03-06 15:37:49 · 866 阅读 · 0 评论 -
#软件构造实验# git教程与如何使用IDEA将开发上传到GitHub
#软件构造实验# 如何使用IDEA将开发上传到GitHub使用IDEA上传GitHub开发主要有两种方法在IDEA中利用终端(Terminal)利用命令行的方式进行上传利用IDEA自身的图形化界面进行上传对于1:利用终端相信很多git教程都有过提及,这里也不再深入详述只需在IDEA中的终端进行操作即可git init #在本地创建一个git库git add 文件名或文件夹 ...原创 2020-03-01 22:11:14 · 207 阅读 · 0 评论 -
#软件构造 ADT与OOP的总结 (1)
在软件构造课程的第三章Abstract Data Type (ADT) and Object Oriented Programming (OOP)中主要分为五个子章节3-1 Data Type and Type Checking 数据类型与类型检验3-2 DesigningSpecification 设计规约3-3 Abstract Data Type (ADT) 抽象数据类型3-4...原创 2020-04-10 18:11:18 · 306 阅读 · 0 评论 -
#软件构造实验 使用IDEA运行Java程序
使用IDEA运行第一个Java程序1.当我们第一次使用IDEA这款IDE的时候,就需要熟悉IDEA下Java的运作模式2.当我们编写好代码兴高采烈地准备在IDEA上跑出自己第一个结果(bug)的时候,我们会发现运行的按钮是灰色的,说明现在无法运行这份代码,是因为我们尚且没有对这个项目的运行配置进行部署3.解决方法也很简单,大致上有两种(其实本质都是一样的)3.1 方法一:点击最上方工...原创 2020-02-24 15:59:15 · 446 阅读 · 0 评论 -
#软件构造实验 自动生成UML图
作为一条懒狗,没有什么比自动化更加令人兴奋的⑧介绍一款基于代码生成UML的IDEA扩展SimpleUML1.在Idea的环境下安装SimpleUML插件1.下载需要的包访问链接 https://github.com/Jerey-Jobs/SimpleUML并下载simpleUMLCE_8205.jar包2.在IDEA中安装扩展点击导航栏File-Settings-Plugins点击齿...原创 2020-04-10 19:39:23 · 599 阅读 · 0 评论 -
#软件构造实验 Façade设计模式(外观模式)
Façade设计模式Façade设计模式是结构设计模式下的一种当我么面临客户端需要通过一个简化的接口来访问复杂系统内的功能 的问题的时候。利用Façade设计模式提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用 ,同时可以便于客户端学习使用,解耦Façade设计模式适用于类相同种类的接口,其目的是提供一个单一的接口,取代提供多个执行相同种类工作的接口的...原创 2020-04-21 21:42:21 · 437 阅读 · 0 评论 -
#软件构造 Java中常见的mutable与immutable类
在软件构造的学习中,很多地方都会牵扯到有关mutable与immutable类的辨析,这里总结一下 Java中常见的mutable与immutable类原创 2020-06-22 23:31:58 · 595 阅读 · 0 评论 -
#软件构造 作为版本控制工具的git的一些理论知识
我们平时使用git有时候很多只是拿来主义的用一下,而不一定了解其背后的原理和设计思想,今天系统性的对其进行总结原创 2020-06-22 11:00:38 · 296 阅读 · 1 评论 -
#软件构造 软件构造过程中的多维度视图
这个地方涉及的知识点多且杂,需要系统性的整理一下目录Build-time ViewsMoment— Code-level viewMoment — Component-level viewPeriod — Code-level viewPeriod — Component-level viewRuntime ViewsMoment— Code-level viewMoment — Component-level viewPeriod — Code-level viewPeriod — Component-原创 2020-06-21 23:35:15 · 381 阅读 · 0 评论