- 博客(21)
- 收藏
- 关注
原创 软件构造课程随笔——7【并发编程】
目录一、什么是并发编程二、进程、线程、时间切片三、交织和Race条件四、线程安全(1)限制可变变量的共享(2)用不可变的共享变量(3)将共享数据封装在线程安全的数据类型中(4)使用同步机制来防止线程同时使用变量一、什么是并发编程并发并发意味着多个运算同时发生为什么要并发处理器时钟速度不再增加新一代芯片都会有更多的内核为了让计算更快运行,我们必须将计算分解为并发模块两种常见的并发模型共享内存:并发程序通过读写内存中的共享对象交互例如:两个处理器共享物理内存;两个程序共享文件;两个线程共享
2020-07-17 21:52:16
227
1
原创 软件构造课程随笔——6-3、4、5【防御式编程与测试】
目录三. 断言与防御式编程1.断言2.断言vs异常3.防御式编程四.代码调试1.调试过程2.调试工具3.调试策略五、测试三. 断言与防御式编程1.断言断言主要是开发阶段使用,用于假设某些假设是否成立,一旦不成立则会抛出AssertionError 有以下两种形式: (1).assert 表达式; 相当于一个if判断,只是失败了就抛出异常。 (2).assert 表达式:信息; 额外在抛出异常的时候显示出对应的信息。 断言一般用在各种不变量,以及前置条件和后置条件的检查等等;但不要胡乱使
2020-07-17 18:52:34
199
原创 软件构造课程随笔——6-1、2【健壮性与异常】
目录一、一般性错误与异常二、Java中的错误和异常处理(1)什么是异常(2)异常的分类(3)checked和unchecked异常一、一般性错误与异常错误的类型输入错误、设备错误、物理限制、代码错误错误处理错误处理是指编程、应用程序和通信中错误的预测、检测和解决。预先防止、错误中恢复、优雅地退出难点在于检测错误的代码通常远离可以回滚数据或保存数据并优雅退出的代码错误处理的任务就是将控制权从发生错误的位置转移到可以处理错误的程序(1)返回一个中性值采用通用值或缺省值,如0、空字符串、空指针
2020-07-17 18:22:04
207
原创 软件构造课程随笔——5-1【面向可维护性的软件构造思想与原则】
目录一、软件维护和演化二、可维护性的度量三、模块化设计和模块化原则评价模块化效果的指标模块化设计的五个规则耦合和内聚四、OO设计原则:SOLID五、OO设计原则:GRASP一、软件维护和演化什么是软件维护在软件发布后,修改软件以修正错误 和提升性能。运维工程师修复代码后测试所做的修改、回归测试、记录变化除了修复问题,修改中不能引入新的故障,最大的问题:修改后没有足够的文档记录和测试几种软件维护类型纠正性维护、适应性维护、完善性维护、预防性维护软件演化软件演化:对软件进行持续的更新软件
2020-07-07 22:59:24
238
原创 软件构造课程随笔——4-2【LSP原则】
目录背景定义五层含义具体解释1、子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法2、子类中可以增加自己特有的方法3、当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松4、当子类的方法实现父类的(抽象)方法时,方法的后置条件(即方法的返回值)要比父类更严格背景在学习java类的继承时,我们知道继承有一些优点:子类拥有父类的所有方法和属性,从而可以减少创建类的工作量。提高了代码的重用性。提高了代码的扩展性,子类不但拥有了父类的所有功能,还可
2020-06-24 20:40:04
253
原创 软件构造课程随笔——4-1【可复用性的度量、形态与外部表现】
目录一、什么是软件复用性二、如何评价可复用性三、可复用组件的层次和形态四、可重用性的外部表现一、什么是软件复用性软件复用分为两个方面:面向复用编程(开发出可复用的软件)和基于复用编程(利用已有的可复用软件搭建应用系统) ,从而降低成本和开发时间,实现标准化,并让系统更加可靠、稳定。开发成本高于一般软件的成本:要有足够高的适应性。另外,可复用软件相对性能差些: 针对更普适场景,缺少足够的针对性。举几个例子:Java中内置的一些库、Maven,对于Ruby有RubyGems。二、如何评价可复用性高
2020-06-24 18:06:23
312
原创 2020年春季学期 计算机学院《软件构造》课程——Lab2总结(P3)
目录:接lab2上一篇文章规则介绍3.3 Playing Chess3.3.1 ADT设计/实现方案1.Position(mutable)2. Piece(mutable)3. Player(mutable)4. Board(mutable)5. Action(interface)6. Action的两个实例类:ChessAction与 GoAction7. Game(immutable)3.3.2 主程序MyChessAndGoGame设计/实现方案(1)主程序入口(2)主函数(3)以围棋为例,进行游戏的
2020-06-24 16:55:56
408
原创 软件构造课程随笔——3-4【面向对象编程】
目录一、面向对象的标准二、基本概念:对象、类、属性、方法和接口一、面向对象的标准OOP以类为核心概念,通过ADT实现。静态类型(定义良好的类型系统应该通过执行一些类型声明和兼容性规则来保证它所接受的系统的运行时类型安全),“易于改变”“为重用设计”(编写通用类),继承,多态性,动态调度/绑定。二、基本概念:对象、类、属性、方法和接口...
2020-05-26 13:53:55
251
原创 软件构造课程随笔——3-3【抽象数据类型-2】
目录不变性不变量ADT的不变性表示不变量和抽象函数表示域(space of representation values)抽象域(space of abstract values)抽象函数abstraction function表示不变量rep invariant检查表示不变量AF, RI以及表示暴露安全性的注解一个ADT的规格说明应该写什么?用ADT不变量替换前置条件如何建立不变量不变性不变量不变量是一种属性,它在程序运行的时候总是一种状态,而不变性就是其中的一种:一旦一个不变类型的对象被创建,它总是
2020-05-25 15:12:50
316
原创 软件构造课程随笔——3-2【设计规约】
目录程序规约为什么要使用规格说明行为等价规格说明的结构规格说明应该说些什么测试与规格说明设计程序规约决定性的 vs. 待决定性的规格说明声明性的 vs. 操作性的规格说明更强或更弱的规格说明图示化规格说明设计好的规格说明使用前置条件还是后置条件程序规约为什么要使用规格说明在编程中,很多让人抓狂的bug是由于两个地方的代码对于接口行为的理解不一样。虽然每一个程序员在心里都有一份“规格说明”,但是不是所有程序员都会把他们写下来。最终,一个团队中的不同程序员对于同一个接口就有不同的“规格说明”了。当程序崩溃
2020-05-19 19:40:54
238
原创 2020年春季学期 计算机学院《软件构造》课程——Lab2总结(P1、P2)
目录1 实验目标概述2 实验环境配置3 实验过程3.1 Poetic Walks3.1.1 Get the code and prepare Git repository3.1.2 Problem 1: Test Graph 3.1.3 Problem 2: Implement Graph 3.1.3.1 Implement ConcreteEdgesGraph(1)实现 Edge类(2)实现ConcreteEdgesGraph类(3)实现ConcreteEdgesGraphTest类3.1.3.2 Imp
2020-05-19 11:20:54
449
原创 软件构造课程随笔——【测试优先编程】
目录本次课程的目标测试为什么软件测试很困难测试优先编程(Test-first Programming)测试等级以及层次黑盒测试vs白盒测试测试用例的选择一个好的测试用例:等价类的划分一个例子覆盖分区的两个极限情况用JUnit做自动化单元测试测试策略覆盖率自动化测试和回归测试总结本次课程的目标1.理解测试的意义,并了解“测试优先编程”的过程2.能够使用“分区”的方法选择合适的输入输出测试用例...
2020-04-17 08:27:42
337
原创 软件构造课程随笔——1-2【软件构造的质量目标】
目录总体概述(一)外部因素什么是外部因素正确性健壮性可扩展性复用性总体概述软件构造过程中应考虑的重要质量指标如果达不到期望的质量目标,会有什么后果有哪些面向质量指标的软件构造技术1 外部质量:外部质量因素影响用户2 内部质量:内部质量因素影响软件本身和它的开发者3 外部质量取决于内部质量4 这两因素间的折中(一)外部因素什么是外部因素外部质量是用户能够感受到的,影响用户使用的...
2020-03-24 10:21:45
277
原创 2020年春季学期 计算机学院《软件构造》课程——Lab1总结
目录1 实验目标概述2 实验环境配置2.1实验环境的配置方法与过程2.2实验环境配置过程中遇到的问题和困难2.2.1.java环境的配置2.2.2.eclipse的安装与配置2.2.3.Git及Git bash的安装与使用3 实验过程3.1 Magic Squares3.1.1 isLegalMagicSquare()3.1.1.1 处理输入文件并分割3.1.1.2 幻方条件判断3.1.1.3 5...
2020-03-23 20:24:08
437
原创 软件构造课程随笔——1-1【软件构造的多维度视图】
目录前言一、软件构造的多维视图1.总体概括2.软件的多维视图3.具体从各方面分析(1)构建时,某一时刻,代码层面视图(2)构建时、某一时间段、代码层面视图(3)构建时、某一时刻、组件层面视图(4)构建时、某一时间段、组件层面视图前言本系列博客是学校系列课程-软件构造课程的随笔博客,主要记录了在学习过程中对每章节的内容的复习以及加入了一些其他的阅读资料内容。而本篇也是其中第一篇,其中有错误的地方...
2020-03-15 10:11:37
228
原创 计算机系统大作业——程序人生——hello's P2P
计算机系统大作业——程序人生——hello’s P2P摘 要摘要:本文通过hello程序从高级语言程序被编译、汇编、链接、运行,从外部存储设备,经过I/O桥,进入到内存,各级cache,最后在I/O中输出,最后被回收的过程描述,诠释了hello,简单却复杂的一生,描述了即使是最简单的程序,却在生命周期中有着同样复杂的经历,从而揭开程序由高级层次到接近底层运行机制的过程。此次大作业结合CSAP...
2019-12-30 19:43:05
568
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人