![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 95
FZQuantum
一条懒狗
展开
-
软件构造 最后的总结
最后只剩下写零零散散的东西了,大杂烩目录1.多维度视图2.软件构造工具3.ADT4.可复用性4.15. 维护性5.1可维护性的设计模式1.多维度视图软件构造过程中的多维度视图源代码,AST:显然属于开发时要关注的,代码层级,瞬时形态类文件,静态链接库,测试案例:显然属于开发时要关注的,瞬时形态,但是是组件等级代码扰动量(Code Churn):显然也是开发时,代码层级,不过是一个需要随时间变化进行变化的量版本,版本控制工具:开发时,组件级,随时间而变化代码快照图,内存转储: 运行时,代码层级原创 2020-07-11 19:58:54 · 358 阅读 · 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 · 300 阅读 · 0 评论 -
锁与同步
前几种保证线程安全的方式:思想缺陷避免共享不能用全局rep共享数据只共享只读类型只能“读”共享数据,不能写使用线程安全类型可以共享 “读写”,但只有单一方法是安全的,多个方法调用就不安全了可以看出,这些方式都有很大的局限性,很多时候,无法满足上述三个条件。常见的情况是要读写共享数据,且线程中的 读写操作复杂。这时候,我们就要使用 同步和锁的方式,通过“同步” 策略,负责多线程之间对mutable数据的共享操作,同时避免多线程同时访问数据。使用锁机制,获得对原创 2020-07-07 22:53:01 · 243 阅读 · 0 评论 -
线程安全
线程安全:ADT或方法在多线程中要执行正确什么是线程安全的?线程之间的“竞争条件”:作用于同一个mutable数据上的多个线程, 彼此之间存在对该数据的访问竞争并导致互相交错存取,致使post condition可能被违反,这是不安全的。保证线程安全的目的是为了让ADT或方法在多线程中要执行正确不违反spec、保持RI与多少处理器、 OS如何调度线程,均无关不需要在spec中强制要求client满足某种“线程 安全”的义务线程不安全的例子:还记得Iterator 类吗?你不能在集合上进行原创 2020-07-07 16:40:35 · 523 阅读 · 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 · 217 阅读 · 0 评论 -
# 软件构造 关于软件测试
即使是最好的测试,也无法达到100%的无错误原创 2020-07-04 11:34:53 · 335 阅读 · 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 · 187 阅读 · 0 评论 -
#软件构造 健壮性与正确性
健壮性健壮性:系统在不 正常输入或不正常外部环境下仍能够表现正常的程度面向健壮性的编程:处理未期望的行为和错误终止即使终止执行,也要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug健壮性法则 (Postel’s 准则)对自己的代码要保守,对用户的行为要开放封闭实现细节,限定 用户的恶意行为考虑极端情况,没有“不可能”...原创 2020-07-03 11:15:32 · 707 阅读 · 0 评论 -
#软件构造 面向可维护性的设计模式
这一节讲了很多设计模式一,创建类的新实例的模式工厂方法模式工厂方法模式(Factory Method) 又被称为 Virtual Constructor 虚拟构造器 :当客户端不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。参考博客https://blog.csdn.net/Franklins_Fan/article/details/105922583抽象工厂模原创 2020-07-02 17:35:48 · 269 阅读 · 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 · 133 阅读 · 0 评论 -
#软件构造 面向可维护性的构造技术
# 1.State设计模式# 2.备忘录模式原创 2020-06-30 15:07:08 · 220 阅读 · 0 评论 -
#软件构造 软件的可维护性
这篇博客对应5.1章节的内容,主要涉及软件生命周期中的运维方面 软件常见的质量指标有可维护性,可扩展性, 灵活性,可适应性,可管理性与支持性Code review的时候经常问的几个面向可维护性的问题有:设计结构是否足够简单?模块之间是否松散耦合?模块内部是否高度聚合?是否使用了非常深的继承树,是否使用了委托替代继承?代码的圈复杂度是否太高?是否存在重复代码?0.软件可维护性评估的几个指标圈复杂度 :评估代码的结构复杂度, 通过计算程序流中不同代码路径的数量来定义,圈复杂度较高的程序原创 2020-06-30 14:03:13 · 322 阅读 · 0 评论 -
#软件构造 复用性与各种设计模式(2)行为类模式
行为类模式 :描述类/对象交互和互相分配责任的方式,允许算法和对象职责分配之间的选择(“谁做什么”);简化在运行时难以追踪的复杂的控制流。一.行为类模式1.策略模式有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里为不同的是实现算法构造抽象接口,利用委派,运行时动态传入满足客户端倾向的算法类实例。参考之前的博客https://blog.csdn.net/Franklins_Fan/article/details/106139748其中有对策略模式的总结原创 2020-06-29 14:53:52 · 180 阅读 · 0 评论 -
#软件构造 复用性与各种设计模式(1)结构型模式
在4.3节中提到了很多种设计模式,这里对其进行总结首先大体上,这些设计模式分为结构型模式 :处理类或对象的组成结构,解耦多个类,引入一个抽象类用于将来的扩展;封装复杂的结构。行为类模式 :描述类/对象交互和互相分配责任的方式,允许算法和对象职责分配之间的选择(“谁做什么”);简化在运行时难以追踪的复杂的控制流。一.结构型模式1.适配器模式将某个类/接口转换为客户端期望的其他形式,通过增加一个接口,作为两个互不相容的接口的适配器,将已存在的子类封装起来,适配器模式让本来接口不兼容而无法在一起工原创 2020-06-28 12:47:02 · 228 阅读 · 0 评论 -
#软件构造 LSP里氏原则与软件设计
里氏替代原则1:行为子类型首先,LSP全称为里氏(Liskov )替代原则——Liskov Substitution Principle ,是面向对象最重要的几大原则之一。从字面上去指,其含义是:子类型可以增加方法,但不可删子类型需要实现抽象类型中的所有未实现方法子类型中重写(Override)的方法 必须有相同或子类型的返回值子类型中重写(Override)的 方法必须使用同样类型的参数子类型中重写(Override)的方法不能抛出额外的异常很显然上面的原则已经写进了Java的语法规则原创 2020-06-26 23:32:58 · 303 阅读 · 0 评论 -
#软件构造 软件构造过程中的多维度视图
这个地方涉及的知识点多且杂,需要系统性的整理一下目录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 · 365 阅读 · 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 · 683 阅读 · 0 评论 -
Java异常类与自定义异常
首先,什么是异常?我们先来看jdk1.8的API对异常的定义异常:程序执行中的非正常事件,程序无法再按预想的流程执行,就是Java程序在运行过程中出现的错误。异常Exception这个东西常常和error混淆,但是他们有本质的区别:,表示应用程序运行时出现的重大错误。例如JVM运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用等程序无法处理的错误,会导致JVM直接崩溃退出。而异常Exception是运行中产生的可控的错误,如果能够正确的抛出异常以及捕获异常,JVM原创 2020-05-19 22:10:42 · 731 阅读 · 0 评论 -
STRATEGY(策略)一对象行为型模式 来自《设计模式:可复用面向对象软件的基础》总结
1.STRATEGY模式的意图定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。举个例子:使用螺丝刀的时候,针对不同的工作任务,选取不同的“刀头”,但目的并非将螺丝刀与刀头组合起来建立永久的delegation,而只是临时通过delegation完成任务(即调用刀头的“算法”),然后二者再无联系。所以说STRATEGY模式强调算法的动态调用,但前提是动态绑定2.我们为什么需要STRATEGY模式有许多算法可对一个正文流进行分行。将这些算法硬原创 2020-05-15 14:30:35 · 223 阅读 · 0 评论 -
#软件构造实验 工厂方法模式 (Factory Method)
1.什么是工厂方法模式?工厂方法模式(Factory Method) 又被称为 Virtual Constructor 虚拟构造器 :当客户端不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。2.什么时候需要我们用到工厂方法模式?当一个类遇到以下几个情形的...原创 2020-05-04 20:38:42 · 439 阅读 · 0 评论 -
#软件构造实验 Façade设计模式(外观模式)
Façade设计模式Façade设计模式是结构设计模式下的一种当我么面临客户端需要通过一个简化的接口来访问复杂系统内的功能 的问题的时候。利用Façade设计模式提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用 ,同时可以便于客户端学习使用,解耦Façade设计模式适用于类相同种类的接口,其目的是提供一个单一的接口,取代提供多个执行相同种类工作的接口的...原创 2020-04-21 21:42:21 · 428 阅读 · 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 · 435 阅读 · 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 · 258 阅读 · 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 · 291 阅读 · 0 评论