软件构造
HIT本科生软件构造课程学习历程
xyzhang2018
这个作者很懒,什么都没留下…
展开
-
软件构造 - 设计模式总结之性能调优
针对对象创建与复用的设计模式Singleton Pattern 单例模式某些类在应用运行期间只需要一个实例,而需要对象时就new,导致创建多个object。更好的选择:强制client只能创建一个object实例,避免因为new操作和GC所带来的时空性能损失,也便于复用单例模式的使用要点:1. 设置静态和final变量来存储单一实例对象2. 将构造器设置为private,从而cli...原创 2019-06-23 20:44:22 · 268 阅读 · 0 评论 -
软件构造 - 设计模式总结之可维护性
一.Creational patterns创建类的新实例Factory Method pattern当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。区别:通常情况下进行对象创建:(client直接创建具体对象)Product p ...原创 2019-06-21 17:14:33 · 375 阅读 · 0 评论 -
软件构造 - 设计模式总结之可复用性
一.Structural patterns 结构型模式Adapter 适配器模式将某个类/接口转换为client期望的其他形式通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。//定义一个shape接口,四个参数为两个顶点坐标interface Shape { void display(int x1, int y1, int x2, int ...原创 2019-06-18 20:56:23 · 406 阅读 · 0 评论 -
软件构造(8)- 可维护性与健壮性
可维护性的软件构造技术一.可维护性的常见度量指标:圈复杂度:圈复杂度大说明程序代码可能质量低且难于测试和维护代码行数可维护性指数(MI):0-100 利用公式计算继承的层次数:层次越多越不好维护。CRP原则,尽量使用代理而不是继承。类之间的耦合度单元测试的覆盖度二.聚合度与耦合度:1.耦合度:衡量两个模块间的依赖关系,即其中一个模块的变化是否影响另一个影响因素:模块间接口的...原创 2019-06-16 22:54:34 · 1577 阅读 · 0 评论 -
软件构造(7)- 可复用性
面向复用的软件构造技术设计可复用的类LSP原则客户端可用统一的方式处理 不同类型的对象在可以使用父类对象的场景,都可以用子类对象代替而不会有任何问题静态检查规则:(1) 子类型可以增加方法,但不可删(2) 子类型需要实现抽象类型中的所有未实现方法(3) 子类型中重写的方法必须有相同或子类型的返回值(4) 子类型中重写的方法必须使用同样类型的参数(5) 子类型中重写的方法不...原创 2019-06-16 22:18:31 · 382 阅读 · 0 评论 -
软件构造(6)- 面向对象及等价性判断
一.基本概念对象 :state状态 + behavior行为eg:Dogs :state (name, color, breed, hungry) + behavior (barking, fetching, wagging tail)state -> fieldbehavior -> methodclass和method静态方法与实例方法的区别:静态方法与类本身相关联...原创 2019-06-16 09:57:08 · 332 阅读 · 0 评论 -
软件构造(5)- ADT抽象数据类型
抽象数据型与表示独立性:设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的bug——在client和implementer之间建立“防火墙”ADT的特性:表示泄漏、抽象函数AF、表示不变量RI一.用户定义类型与数据抽象数据抽象:由一组操作所刻画的数据类型传统的类型定义:关注数据的具体表示 eg:用int类型来分别表示Date域中的日月年抽象类型...原创 2019-06-14 16:43:31 · 355 阅读 · 0 评论 -
软件构造(4)- 设计规约
一.行为等价性根据规约判断是否行为等价单纯的看实现代码,并不足以判定不同的implmentation是否是“行为等价的”需要根据代码的spec(开发者与client之间形成的contract)判定行为等价性在编写代码之前,需要弄清楚spec如何协商形成、如何撰写例如上述两方法如果只看代码显然不等价,但在下述spec中这两个方法等价二.前置与后置条件前置条件:对客户端的约束,在使...原创 2019-06-11 20:37:24 · 278 阅读 · 0 评论 -
软件构造(3)- 数据类型与类型检查
基本类型对象类型int,long…类(classes),接口(interfaces),数组(arrays),枚举(enums),注解(annotations)不可变的有些可变有些不可变On stack,exist only when in useOn heap,garbage collected代价低代价昂贵类的根是Object,所有类(除Obj...原创 2019-06-11 19:56:07 · 213 阅读 · 0 评论 -
软件构造(2)- 软件构造的质量指标
一.软件系统的质量属性External quality factors (外部质量因素)(1) 正确性:最重要的质量指标按照预先定义的规约执行确保正确性的方式:① Conditional(分层):每一层保证自己的正确性,同时假设其下层是正确的② 测试和调试:发现不正确,消除不正确③ 防御式编程:在写程序的时候就确保正确性④ 形式化方法:通过形式化验证发现问题(2) 健壮性:针...原创 2019-06-10 17:50:48 · 402 阅读 · 0 评论 -
软件构造(1)- 软件构造的多维度视图
一. 软件构造的多维度视图:1. 构造阶段Code-level 代码的逻辑组织:functions, classes, methods, interfacesComponent-level 代码的物理组织:files, directories, packages, librariesMoment view 指特定时刻的软件形态Period view 指软件形态随时间的变化动态链接:库...原创 2019-06-10 16:41:33 · 523 阅读 · 0 评论 -
软件构造 - OQL语言查询内存导出文件
内容主要来自JDK 1.8的JVM监控工具jhat中关于OQL的英文帮助说明以及Eclipse Memory Analyzer中对OQL使用的帮助文档以及两位CSDN博主的博客整理(博客地址在本文最后)基本语法:select [from [instanceof] ][where ]解释:(1)class name是java类的完全限定名,如:java.lang.String,...原创 2019-05-29 17:16:21 · 648 阅读 · 0 评论 -
Git 中文安装教程
步骤一:安装说明,之后有安装位置选择。步骤二:安装组件选项,按照默认安装即可。除默认选项外第一个是追加的图标,第二个是字体选项,第三个是自动检查更新。可根据实际需要选择。步骤三:选择开始文件夹。(按默认即可)步骤四:选择编辑器选择默认的Vim编辑器即可,下拉菜单中还有Notepad++,VSCode,Sublime,Atom等选项,熟悉其他编辑器的也可选择其他选项。步骤五:调整...原创 2019-03-22 21:03:41 · 472 阅读 · 0 评论 -
Git学习笔记之常用命令
一. 创建仓库。创建repository.在这个仓库中的所有文件都可以被Git管理起来,每个文件的修改,删除都能够追踪,并能在某一时刻还原之前的版本。创建方法:安装Git后,可在要创建仓库的文件夹上选择右键选项中的Git Bash Here.则该文件夹即为本地仓库。通过命令行,选择一个合适的地方,创建一个空目录。$ mkdir learngit$ cd learngit$...原创 2019-03-22 21:02:38 · 180 阅读 · 0 评论 -
本地Git远程连接Github并更改文件
将要删除文件夹所在的仓库clone到本地。git pull origin master 将远程库中的文件拉取到本地git rm -r --cached <filename> 删除对应的文件夹git commit -m "delete a useless file"添加本次上传的说明git push origin master 将修改提交到Github...原创 2019-03-08 17:27:41 · 259 阅读 · 0 评论 -
-verbose:gc 查看GC情况
** 命令输入方式 :**选择要运行的源文件,右键选择Run As -> Run Configurations -> Arguments在 VM argument 输入框中输入要运行的命令查看垃圾回收情况:-verbose:gc //在控制台输出GC情况-XX:+PrintGCDetails //在控制台输出详细的GC情况-Xloggc: filepath //将GC日...原创 2019-05-25 20:34:20 · 13519 阅读 · 0 评论 -
Oracle官方文档 Java代码规范
File Organization (文件组织)一个文件应由空行和标识每个节的可选的注释构成超过2000行的文件难以浏览应被避免Java source files (Java源文件)每个Java源文件都包括一个单一的public 类或接口,当private类和接口和public类相联系,你可以将他们放在相同的源文件中。public类必须是这个文件中的第一个类或接口。Java源文件还有以下...翻译 2019-05-20 22:46:44 · 1010 阅读 · 0 评论 -
Junit中对两double类型值的比较
使用JUnit 4 测试正确性时出现以下错误The method assertEquals(double,double) from the type Assert is deprecated经查阅相关资料发现JUnit中没有assertEquals(double,double) 的方法,因为double值比较相等时存在误差需要用assertEquals(double,double,doub...原创 2019-04-29 08:57:10 · 1051 阅读 · 0 评论 -
Java学习笔记 - instanceof关键字
instanceof关键字用来在运行时指出对象是否是特定类的一个实例。判断结果通过返回一个boolean类型值来指示,true则左侧对象为右侧类的实例。举个栗子://接口public interface CircularOrbit<L,E> { ...}//由接口衍生出的抽象类public abstract class ConcreteCircularOrbit<...原创 2019-04-20 22:58:36 · 461 阅读 · 0 评论 -
Java的抽象类和接口
一.抽象类抽象类存在的意义就是为了继承,抽象类与普通类十分类似主要区别如下:抽象类无法实例化抽象方法必须为public或者protected,若为private则无法被子类继承子类必须override父类的所有方法,除非子类也为抽象类二.接口接口中定义的field一定是static final的接口同样无法实例化接口中的方法都是public的一个类可实现多个接口,以弥补J...原创 2019-04-09 22:50:54 · 135 阅读 · 0 评论 -
最新详细教程使用Eclipse创建Java项目
最近课程需要使用Eclipse,但是看到网上的一些教程不是太过陈旧就是不够详细,于是决定自己写一篇以后如果忘记也可以翻出来看看。如有错误欢迎指正!直接在Eclipse打开后的空白工作区中点击File -&amp;gt; New -&amp;gt; Java Project在弹出的对话框中输入项目名称,也可选择项目的存储位置和Java编译器的版本(若无特殊要求默认即可),编辑完成点击Finish在创建...原创 2019-03-22 21:03:12 · 1633 阅读 · 0 评论 -
在Eclipse中使用JUnit进行单元测试
JUnit是什么?JUnit的官网给出的简介: JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks.每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。JUn...原创 2019-03-03 17:20:32 · 4241 阅读 · 0 评论 -
Java学习笔记(2)- 基础队列使用简介
队列的定义(可采用链表的定义方式)特性:先进先出。 Queue&lt;Person&gt; queue = new LinkedList&lt;&gt;();关于队列的函数列表及功能说明:注:add()和remove()方法在失败的时候会抛出异常(不推荐) ,日常开发过程中offer()与pool()方法用的相对比较频繁.offer()方法往队列添加元素如果队列已满直接返回false,...原创 2019-03-03 16:22:50 · 136 阅读 · 0 评论 -
Java学习笔记(1)产生随机数
方法一调用Math.random()Math.random() 函数返回的是 [0,1) 上的一个double值//要产生一个 [0,10)上的整数System.out.println((int) (Math.random() * 10));方法二通过Random类来创建随机数实例化Random();通过创建的对象获取随机数。Random ran = new Random(...原创 2019-02-28 20:23:02 · 321 阅读 · 0 评论