
软件构造
学到了很多
MONA ODYSSEY
这个作者很懒,什么都没留下…
展开
-
软件构造学习笔记-实验1
记录一下做实验1时遇到的问题。准备工作1.GitHub的注册和配置由于之前没有接触过GitHub,所以碰到了一些问题。GitHub是什么?怎么建立GitHub远程仓库与本地仓库的连接?怎么在GitHub上传和下载文件?实验完成后我可以简单回答上述问题:Git是分布式版本控制系统;通过SSH key建立远程与本地的连接;通过Git Bash中的命令进行文件的上传和下载。图1-常用的git...原创 2020-03-07 14:05:51 · 293 阅读 · 0 评论 -
软件构造学习笔记-第十四周、十五周
并发1.并行:将程序布置在多个CPU上执行。并发:将任务拆分为多个阶段,在同一个CPU上执行(切片)。2.并发的两个模型:共享内存(只能用于线程)和消息传递(线程、进程)。进程和线程1.进程和线程都是并发模块的类型。进程比较“重量级”,私有空间,彼此隔离;线程“轻量级”,是程序内部的控制机制。一个进程可以形成多个线程。2.每个应用至少有一个线程,主线程可以创建其它的线程。3.创建线程的方法:继承Thread;从Runnable接口构造Thread对象。创建线程需要调用Thread类的s原创 2020-06-03 21:06:29 · 182 阅读 · 0 评论 -
软件构造学习笔记-实验4
磕磕绊绊也算是完成了最后一个实验。记录一下实验中遇到的问题。IDEA中SpotBugs的安装和使用从网上找教程,都说IDEA没有使用版权。结果我直接在插件中就找到了。点击安装并重启即可。使用时,选择需要操作的项目/包/类点击右键,就能看到SpotBugs的选项,使用很方便。此外,每创建一个Scanner实例,在结果中都会出现一个bug提示。老师说这个不用管。Java Logging的格式问题默认状态下,日志的实践格式是这样的,对正则表达式解析非常不友好。还是从网上寻找办法。按照说法,需要改原创 2020-05-28 16:43:58 · 222 阅读 · 0 评论 -
软件构造学习笔记-第十三周
断言1.断言用以保证程序正确性;异常用以保证程序健壮性。2.断言只是检查程序的内部状态是否符合规约(检查程序员自己的错误),一旦出现false程序就停止。但是代码无法保证不出现外部错误,处理外部错误需要使用异常。3.断言非常影响程序性能,正式版本的程序一般不应出现断言。4.使用异常处理“预料到可以发生的”不正常情况;使用断言处理“绝不该发生”的情况。5.一般,前置条件使用异常检测,后置条件使用断言检测。如果参数来自于外部,不受自己控制(比如public方法),使用异常;如果来自于内部(比如pri原创 2020-05-25 21:22:48 · 888 阅读 · 0 评论 -
软件构造学习笔记-第十二周
异常1.Java“异常”的分类分为Error和Exception(又分为RuntimeException和其它Exception),其中虚线部分(unchecked exception)不需显式catch。2.运行时异常由程序员在代码中处理不当造成,其它异常由外部原因造成。3.运行时异常不应该catch,而是通过修改代码消除。其它异常需要catch,如果不捕获则编译无法通过,类似于静态类型检查。4.异常是为了增强程序健壮性;断言为了增强程序正确性。处理异常(针对checked exceptio原创 2020-05-18 09:54:04 · 155 阅读 · 0 评论 -
软件构造学习笔记-实验3
本次实验要求从五项要求(航班管理、高铁车次管理、操作系统进程管理、大学课表管理、学习日程管理)里完成三项要求,并且尽量实现复用。面向可复用性和可维护性的设计:PlanningEntry1.首先设计一个类CommonPlanningEntry来实现共同的操作,比如创建新计划项、启动、取消、完成、获取名字、获取状态。2.对于各情形的个性化特征如果各应用在某个维度上的特征值完全相同,则可以将针对处理该共性特征值的操作在 PlanningEntry和 CommonPlanningEntry中定义和实现,原创 2020-05-18 09:50:39 · 278 阅读 · 0 评论 -
软件构造学习笔记-第十一周
设计模式的区别和联系1.单个继承树的形式只使用继承,不使用委托。依赖反转,客户端只能依赖抽象(使用接口),不能依赖具体。发生变化时最好是扩展而不是修改。①Adapter:适用于已经有一个类,但其方法与目前客户端需求不一致,所以扩展一个adapter和一个统一接口,该接口被adapter类和原类实现,供客户端使用。②Proxy(代理模式):③Template(模板模式):适用于有共性的算法流程,但是算法各步有不同的实现。典型的“将共性提升至父类型,将个性保留在子类型”。如果某个步骤不需要多种实现原创 2020-05-09 15:17:29 · 230 阅读 · 0 评论 -
软件构造学习笔记-第九周、第十周
框架层面的复用1.可分为白盒框架和黑盒框架白盒框架:通过子类型和重写方法实现扩展,对应模板模式黑盒框架:通过插件接口实现扩展(本质上是委托),对应策略模式和观察模式2.复用白盒框架后,通过创建子类进行调用。复用黑盒调用后,通过框架程序进行调用。3.白盒框架和黑盒框架可复用代码的位置黑盒的可复用代码在框架中,插件是自定义部分白盒框架的可用代码是子框架的父类结构模式1.适配器...原创 2020-04-24 17:18:37 · 327 阅读 · 0 评论 -
软件构造学习笔记-第八周
有关复用1.复用的级别-源代码级别的复用-模块级别的复用(类/抽象类/接口)-库级别的复用(API/包)-系统级别的复用(框架)2.软件构造过程中任何实体都可能被复用。比如需求、规约、数据、测试用例、文档等。3.白盒复用对应继承,黑盒复用对应委托(显示委托:明确指出调用某个对象的功能;隐式委托:不明确指出调用某个对象的功能,例如敲击键盘)子类型多态客户端可用统一的方式处理不同类型...原创 2020-04-17 22:27:28 · 233 阅读 · 1 评论 -
软件构造学习笔记-第七周
本周只有一节课,内容较少。可变类型的相等关系1.Object类的equals方法检查的是行为等价性,即两个变量指向同一个对象时才相等。如StringBuilder类的equals方法。2.所有不可变类都要重写equals方法,实现观察等价性。对于可变类,直接继承Object类的hashCode和equals方法即可。如果一定要判断两个可变对象看起来是否一致,最好定义一个新的方法。3.c...原创 2020-04-11 09:31:53 · 168 阅读 · 0 评论 -
软件构造学习笔记-实验2
P11.设计目标首先对图的ADT进行两种实现(从边和顶点出发),然后选择一种实现的ADT,根据输入的文件构建语料库,再利用构建的语料库,对输入字符串进行插入操作,并返回修改后的字符串。2.有关AF和RI的概念,在实验刚开始时是没有讲到的。进一步学习之后才完成代码的这个部分。AF:R->A(抽象函数)给出R空间的数据,如何映射到A空间的解释。RI:R->boolean(表示不变...原创 2020-04-06 15:55:09 · 227 阅读 · 0 评论 -
软件构造学习笔记-第六周
ADT不变量替换前置条件用ADT不变量取代复杂的前置条件,相当于将复杂的前置条件封装到ADT内部。如果对输入数据的检测代价较高,则将约束传递给用户,即前置条件。接口1.实际中更倾向于使用接口定义变量,因为对于接口的多种实现都满足条件。2.接口中不能含有构造函数,因为接口不能被实例化。接口不能含有具体的实现(比如返回值不能为ArraySet类型)。3.可以在接口中定义静态方法,在静态方...原创 2020-04-05 09:50:07 · 159 阅读 · 0 评论 -
软件构造学习笔记-第五周
设计规约1.规约的强弱前置条件更弱,或后置条件更强的规约,是较强的规约。如果一个规约强于另一个规约,则可以用较强的代替较弱的。2.规约越强,开发者的责任越重,使用者的责任越轻。如Lab1的GenerateMagicSquare,如果规约要求必须输入奇数(较强前置条件),则需要用户进行操作。如果不要求必须输入奇数(较弱前置条件),开发者就需要在程序中添加对输入奇数的操作。3.某个具体实现,...原创 2020-03-27 20:31:01 · 303 阅读 · 2 评论 -
软件构造学习笔记-第四周
静态/动态类型检查1.数据类型:基本数据类型和对象数据类型的对比。2.对象类型具有层次结构,除了Object类之外的所有类都有父类。Object是所有类的父类。Java中只支持单继承。3.静态检查:在不运行程序的前提下的检测。Java是一种静态类型语言,所有变量的种类在编译阶段已经明确。在Eclipse中,静态检测在写代码的时候就已经进行,在不合法的位置会用标记指明。静态类型检查可以在编译...原创 2020-03-20 21:50:41 · 238 阅读 · 0 评论 -
软件构造学习笔记-第三周
软件开发生命周期模型1.软件开发生命周期模型:从0到1软件生命周期中的多版本:从1到n2.软件是具有“生命”的,具有年龄(被制造和使用的时间)、活力(在特定时间的受欢迎程度)等。我们期望软件具有长寿命并保持活力,但是存在许多问题。比如开发的失败,运行时出错,软件功能老化等。传统的软件开发模型1.两个基本种类:线性和迭代性2.目前存在的模型:瀑布型(线性且不迭代)、递增型(不迭代)、V型...原创 2020-03-13 18:15:22 · 131 阅读 · 0 评论 -
软件构造学习笔记-第二周
本周课程把第六章测试的内容提前讲了一部分,主要为实验1服务,讲了有关测试的概念、作用和基本方法。有关测试1.好的测试:能发现错误,不冗余,具有最佳特性,复杂度适中。2.测试种类:分为单元测试、集成测试、系统测试。图1-测试的种类3.测试需要有正确的态度:测试时要让程序尽快出错,因为只有发现了错误才有改正错误的机会。把错误改正后,代码质量才能得到提升。测试用例1.测试用例是输入+执行...原创 2020-03-04 11:23:56 · 217 阅读 · 0 评论