自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 软件构造 9:抽象数据类型

Java中的访问控制阅读:Controlling Access to Members of a Class阅读小练习阅读以下代码并回答问题: class Wallet { private int amount; public void loanTo(Wallet that) { // put all of this wallet's money into that wallet/*A*/ ...

2021-07-01 20:20:20 295

原创 软件构造 8:避免调试

第一道防御:让Bug无法产生最好的防御策略就是在设计上让Bug无法产生。我们之前已经谈到过静态检查。静态检查能够在编译期发现很多bug。我们也看到了一些动态检查的例子。例如,Java会通过动态检查让数组越界访问的bug不可能存在。如果你试着越界访问一个数组或列表,Java就会在运行时报错。在一些更老的语言中,例如C和C++,这样的访问是允许的——可能会导致bug和安全漏洞.不可变性也是另一种防止bug的设计策略。在创建时,一个不可变类型的对象的值就确定了,接下来可...

2021-07-01 20:19:08 165

原创 软件构造 7:可变性与不变性

可变性回忆之前我们讨论过的“用快照图理解值与对象”(译者注:“Java基础”),有一些对象的内容是不变的(immutable):一旦它们被创建,它们总是表示相同的值。另一些对象是可变的(mutable):它们有改变内部值对应的方法。String就是不变对象的一个例子,一个String对象总是表示相同的字符串。而StringBuilder则是可变的,它有对应的方法来删除、插入、替换字符串内部的字符,等等。因为String是不变的,一旦被创建,一个String...

2021-07-01 20:18:09 461

原创 软件构造 6:设计规格说明

​​​​​​决定性的 vs. 待决定性的规格说明回忆之前的阅读中我们定义的两个find函数:static int findFirst(int[] arr, int val) { for (int i = 0; i < arr.length; i++) { if (arr[i] == val) return i; } return arr.length;}static int findLast(int[] arr, i..

2021-07-01 20:15:41 167

原创 软件构造 5:规格说明

为什么要使用规格说明在编程中,很多让人抓狂的bug是由于两个地方的代码对于接口行为的理解不一样。虽然每一个程序员在心里都有一份“规格说明”,但是不是所有程序员都会把他们写下来。最终,一个团队中的不同程序员对于同一个接口就有不同的“规格说明”了。当程序崩溃的时候,就很难发现问题在哪里。简洁准确的的规格说明使得我们远离bug,更可以快速发现问题所在。规格说明对使用者(客户)来说也是很有用的,它们使得使用者不必去阅读源码。如果你还不相信阅读规格说明比阅读源码更简单易懂的话,看看下面这个标准的Java规格说

2021-07-01 20:13:42 223

原创 软件构造 4:代码评审

代码评审代码评审是一种系统的对别人代码的研究,和论文审校很类似。代码评审有两个主要目的:提升代码质量。找出存在及潜在的bug,分析代码的清晰度以及代码是否严格遵循了当前工程的标准。 提升程序员的水平。代码评审是提升程序员水平的一个重要方法,通过它可以学习到语言新的特性、工程上新的设计以及一些新的实现方法。特别是在开源项目中,很多交流都是在代码评审这种环境下进行的。代码评审已经在开源项目中运用很深了,例如Apache 和Mozilla. 同样的,代码评审在工业界也应用很广,在Google...

2021-07-01 17:47:44 517

原创 软件构造3: 测试

验证(Validation)“测试”是“验证”的一种例子。而验证的目的就是发现程序中的问题,以此提升你对程序正确性的信心。验证包括:形式推理,即通过理论推理证明程序的正确性。形式推理目前还缺乏自动化的工具,通常需要漫长的手工计算。即使是这样,一些关键性的小程序也是需要被证明的,例如操作系统的调度程序、虚拟机里的字节码解释器,或者是文件系统. 代码审查.即让别人仔细的阅读、审校、评价你的代码,这也是发现bug的一个常用方法,我们会在下一个reading里面介绍这种方法。 测试.即选择合适的输入..

2021-07-01 17:38:31 287

原创 软件构造2: Java 基础

用快照图理解值与对象为了弄清楚一些隐秘的问题,我们会画一些图来进行解释。快照图(Snapshot diagrams)能代表程序运行时的各种状态——它的栈(即方法和局部变量)和它的堆(即现在存在的对象)。具体来讲,使用快照图有以下优点:在课堂上和会议上与同学交流 解释一些概念例如原始类型 vs. 对象类型不可更改的值 vs. 不可更改的引用, 指针别名, stack栈 vs. 堆heap, 抽象表达 vs. 具体表达. 能够帮助你解释你的工程的设计思想 为以后的课程做铺垫(例如MIT 6.1

2021-07-01 17:35:05 97

原创 软件构造 1: 静态检查

静态类型Java是一种静态类型的语言。所有变量的类型在编译的时候就已经知道了(程序还没有运行),所以编译器也可以推测出每一个表达式的类型。例如,如果a和b是int类型的,那么编译器就可以知道a+b的结果也是int类型的。事实上,Eclipse在你写代码的时候就在做这些检查,所以你就能够在编辑的同时发现这些问题。在动态类型语言中(例如Python),这种类型检查是发生在程序运行的时候。静态类型是静态检查的一种——检查发生在编译的时候。本课程的一个重要目标就是教会你避免bug的产生,静态检查就是我们

2021-07-01 17:30:17 356

原创 哈工大计算机系统大作业 程序人生-Hello’s P2P

计算机系统大作业题 目 程序人生-Hello’s P2P 专 业 计算机科学与技术 学   号 1190201103 班   级 1903006 学 生 王志贤 指 导 教 师 史先俊 计算机科学与技术学院...

2021-06-23 12:54:44 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除