自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件构造学习总结

1、学习软件构造时,需要多翻阅资料,以至于能完全理解它们的含义2、每一个实验都要努力的去写,这对代码能力的提升有极大的帮助

2021-07-08 20:35:39 101

原创 软件构造心得

前言哈工大的软件构造期末考试题中,最有难度的往往就是多线程了。而很多同学包括我在内,也是上课听的很懂,但是实际操作中出现了很多问题。这篇博文就和大家一起捋捋期末考试题,看看技巧和入手的点在哪里。如有错误恳请指正。另附我们讨论出的陶神佬最终敲定的一份答案,欢迎大家一起来讨论,继续加大复习的深度!2018年期末考题第二道大题先po一下笔者认为的有风险的地方。第一行的public,必然会引发表示泄露,而表示泄露从线程角度来看也是危险的,所以要将其改为private。加不加final修饰呢?我们发现,每一次

2021-07-08 20:33:50 266

原创 软件构造心得(10):编写等价性判断时重写Hashcode的原因:理论与性能分析

首先了解hash系列数据结构一些底层依赖hash系列数据结构在底层使用其构建对象所具有的hashcode将其分配index到表的各个位置。如果元素的hash值相同,则用链式结构将其追加到index所具有元素组的末尾。在我们使用键值索引时,实际上数据结构是先得到这个键的hashcode然后去索引该index的数据(链)直到最后。为什么要Override Hashcode一句话概括,因为我们要保证,在我们的ADT被使用hash值作为hashset等数据结构的部分时(绝大多数情况这是不可被避免的),避免由

2021-07-08 20:31:26 166

原创 软件构造心得(5)spec、RI、AF、A的概念辨析之spec

1.1spec基本概念:spec,全称为specification,即规约,其规约的是使用者(client)和实现者(implementor)之间的妥协与契约,即是一种在使用时必须要遵循的要求的说明,也是一种在在实现时需要遵循的原则。1.2spec一般被书写在:(1)每一个类前面,(2)每一个方法前面1.3spec组成与分类spec从annotation上由@parameter、@throws、@return组成。完整的spec其需要涵盖若干对于前置条件和后置条件的说明,包括基本使用方法、immu

2021-07-08 20:30:16 825

原创 软件构造心得(9):spec、RI、AF、A之A及系列总结--我们不过也是ADT

A(Abstract field)A是spec中涉及到的抽象变量,就是我们通过R、RI、AF最后映射的最终目标,也是我们费力建立这套流程的初心。A即一个抽象表达的区域,既源自于我们的spec的最初的目的,又是由RI解释而来,是我们努力的结果,具有高度抽象化的特点。书写要求我们需要在implement的过程中写下RI AF Safe from rep exposure这三个部分。RI:明确要求,以及为什么这么限制,这么限制是否是有效的。(为什么它这么约束,为什么结合上你的AF之后具有完备性)The

2021-07-08 20:28:44 302

原创 软件构造心得(8):specRI、AF、A之AF

AF(abstract function)其和rep invariant一起出现,共同完成R(rep)到A(abstract field)的对应关系。其中,RI负责从R中筛选出来有意义的我们要选择的部分,AF完成从R到A的映射,即对于RI的解释。AF性质准确地讲,AF是RI到A的映射(由于RI已经将我们要表示的部分选择出来了)。其具有以下几种性质1,一定是一个满射(即我们一定能实现RI和AF结合之后表示了所有的A中的元素,即我们选取的数据表达是完善的)2,不一定是一个单射(可能有很多表示,他们的抽

2021-07-08 20:28:04 150

原创 软件构造心得(7):spec、RI、AF、A概念辨析之RI

RI(rep invariant)representation概念representation即为了支持功能实现的ADT内部的数据结构(表示方式)。“representation (the actual data structure or data fields used to implement it)”rep independent内部的数据结构的改变不影响外部的功能实现。rep invariant一种解释方式是一个rep到boolean(true or false)的映射。为什么要有这个

2021-07-08 20:27:34 379

原创 软件构造心得(13):用流的泪说明为什么不要滥用unchecked异常

前言最早最早,我不知道有exception这个东西,之后去博客上找一些不系统的入门教程,在胎儿时接受了不正确的教育一样,觉得exception那么多,又不认识,怪乱七八糟的,反正在我代码上乱加东西可不行。于是曾几何时,我在我的代码里面写满了RuntimeException…一旦违背迅速报错,中间没有任何的乱七八糟追求短平快的我,即使一开始老师讲过,看了课件之后也是一个劲的狡辩:“那不是还说有些程序员支持有些程序员反对吗,那我这么写没问题的,好像老师最早也就只教了那个嘛,再改我真的吐了(HITlab3真的

2021-07-08 20:26:52 99

原创 关于软件构造的异常处理的总结

在学习软件构造的过程当中,我也遇到了许多的有意思的话题,其中就包含了之前从来没有遇到过的,委托的处理方式。以及第一次总结的异常处理机制,下面我想对于我的心得做一下总结。目录Exception分类以及特征总结不同类型处理方式try–catch–finally 模块总结新建异常类总结Exception分类以及特征总结:首先异常的分类可以定义为error和Exception。error是系统内部的错位,程序员对于这样的错误是无能为力的,一旦发生,最好能够使得程序可以优雅的结束终止; 而Exc

2021-07-08 20:26:15 124

原创 2021-07-08

这里写自定义目录标我们逐渐对于软件构造有了更深的要求。设计良好的代码需要做到可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码。抽象(Abstraction)和多态(Polymorphism)是实现这一原则的主要机制,而继承(Inheritance)则是实现抽象和多态的主要方法。而提高这一质量指标,打下构建可维护性和可重用性代码的基础,我们首先需要知道一个重要的原则。欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链

2021-07-08 20:25:12 78

原创 软件构造讲义汇总,方便考试同学自取。考完就删

13:45:41录播链接:https://pan.baidu.com/s/1mH_EFbmJ8Qw-MJSpngkHoQ课程介绍:https://docs.qq.com/pdf/DQm5DY1JDalVTbXl4本次课讲义:https://docs.qq.com/pdf/DQnRuRXBSWnZqcWZh13:45:42录播链接:https://pan.baidu.com/s/1V1QM1w6Yf2pWxKsxSMMKOw讲义:https://docs.qq.com/pdf/DQkdTQ2ZZQ

2020-07-11 15:11:17 629

原创 软件构造复习总结搬运

【考点 Equals】是引用等价性 ;而equals()是对象等价性。== 比较的是索引。更准确的说,它测试的是指向相等(referential equality)。如果两个索引指向同一块存储区域,那它们就是的。对于我们之前提到过的快照图来说,就意味着它们的箭头指向同一个对象。equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality)。e在每一个ADT中,quals操作必须合理定义。基本数据类型,也称原始数据类型。byte,short,char,int,

2020-07-05 23:12:33 156

原创 软件构造复习

Build-timeCode-level: 源代码:代码的逻辑组织:AST抽象语法树、函数、方法、类、接口等具体的逻辑实现(class diagram类图)Component-level:结构:代码的物理组织:源文件、包、库、静态链接、测试用例(component diagram构建/组件图),编译Moment view : 特定时刻的源码或组件形态Period view:软件形态随时间的变化Build-moment-code:词汇(源码)、语法(抽象语法树)、语义(类图)Build-per

2020-06-23 10:04:09 217

原创 软件构造课程总结

学习总结因为知道这个学期要学java,所以我在因疫情延长的寒假自己在网上搜了一些视频看自学了一点java,了解了一些浅显的知识点。所以在最开始听老师上课的时候并不是很上心,都是按自己的想法建包去写代码,导致了自己写的代码不规范,变量名不注意大小写,在今后我会慢慢改过来的。而且在上个星期的课中感受到了课前预习的重要性,因为自己没有预习,所以对老师的问题一问三不知。课堂上临时去看老师的讲课笔记会十分茫然。老师喜欢让我们从敲代码中学习,我自己也比较喜欢这种方式,毕竟“纸上得来终觉浅,绝知此事要躬行”。如果想

2020-06-06 00:19:43 117

原创 thinkphp学习1

数据表的建立字段’id’没有默认值[SQL语句]:INSERT INTOfz_link(title,url,desc)值('12的问题这里有个问题:fz_link的id主键设置最好把ilink 下的id主键修改了。因为在cate下的id设置为主键:为了不:字段’id’没有默认值[SQL语句]:INSERT INTOfz_link(title,url,desc)值('12这样在link下指的id 不会连接到 cate下的id...

2020-05-23 16:51:56 246

转载 软件构造6

Programing for/with reuse1、Programing for reuse 开发可复用的软件开发成本高于一般软件的成本:要有足够高的适应性性能差些:针对更普适场景,缺少足够的针对性2、Programing with reuse 使用已有软件进行开发可复用软件库,对其进行有效的管理往往无法拿来就用,需要适配最主要的复用是在代码层面,但软件构造过程中的任何实体都可能被复用。1、代码层面:2、类复用:inheritance继承delegation委托3、包复用: AP

2020-05-21 13:10:54 110

原创 面向对象设计原则(软件的可维护性和可复用性)

导致一个软件可维护性较低,随着性能要求变化而腐化的原因有四个:过于僵硬、过于脆弱、复用性低、黏度过高。过于僵硬:很难加入一个新功能,这不仅意味着增加一个新的模块,同时会波及很多其他模块;过于脆弱:对于一个地方的修改,可能会导致其他没有关系的另一个地方的故障;复用性低:黏度过高:一个改动可以以保持原始设计或原始意图的方式进行,也可以以破坏原始的方式进行,一个系统设计中,后一种方式如果总是比第一种方式容易,就容易诱导程序员采取错误的方式,并惩罚采取正确维护方案的程序员,这样的设计就是黏度过高;

2020-05-21 13:06:09 629

原创 软件构造——ADT学习心得

ADT设计是软件构造中十分重要的一环,ADT设计的核心,在我看来是一种封装与信息隐藏的思想。在进行ADT设计时,首要的目标便是对不可变的满足,相较于可变类型,虽然不可变类型在程序运行的过程中会产生大量的临时拷贝,但其优势也是十分明显的,即安全,不可变类型,不能对内部的该对象进行更改,在以该类型变量作为全局变量的大型程序中,可以避免不同地方对该变量的篡改,保证安全性,同时不可变类型也保证了线程安全,具有优良的性质。ADT具有三个特性,即表示泄漏、抽象函数AF以及表示不变量RI,在我看来,这三个特性都是为不

2020-05-16 18:07:42 332

原创 软件构造笔记4

这篇文章会较多的搬运PPT上面内容,因为我认为确实比较重要,也会在里面加上一些我个人的理解类接口设计建议一:好的抽象类的接口应能提供一组 明显相关 的子程序类的接口应该尽量展现一致的抽象层次class EmployeeCensus: public ListContainer { public: void AddEmployee(Employee employee); void RemoveEmployee(Employee employee); Employee...

2020-05-13 10:15:41 130

原创 软件构造笔记5

软件构造 课堂笔记6子程序的最高目标是功能内聚把含有多条语句的宏用大括号括起来假设这样一种情景:在某个循环里面调用宏,此时编译器会直接展开,被循环调用的就只有宏语句的第一句防御式编程注意错误处理与断言的区别变量来源于外部则应该用错误处理来源于外部的判断依据:函数是public的则数据是来源于外部的(就Java而言)在修正错误的地方加一条断言 // 犯过错误的地方常常会再犯一次错误...

2020-05-13 10:13:46 84

空空如也

空空如也

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

TA关注的人

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