![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件构造
文章平均质量分 92
软件构造学习过程中的笔记
ShangZHQ
这个作者很懒,什么都没留下…
展开
-
哈工大2020春软件构造Lab4实验报告
实验报告只是为了提供给学弟学妹们参考,所以很多代码都没有完整给出,希望学弟学妹们只用来参考,请勿直接抄袭!!!有问题请联系QQ:1187987704文章目录1 实验目标概述2 实验环境配置3 实验过程3.1 Error and Exception Handling3.1.1 处理输入文本中的三类错误3.1.1.1 SameAirportException(飞机起落机场相同)3.1.1.2 PlaneTypeException(飞机型号异常)3.1.1.3 PlaneSeatsException(飞机.原创 2020-06-15 16:35:49 · 278 阅读 · 0 评论 -
哈工大2020春软件构造Lab3实验报告
实验报告只是为了提供给学弟学妹们参考,所以很多代码都没有完整给出,希望学弟学妹们只用来参考,请勿直接抄袭!!!有问题请联系QQ:1187987704文章目录1 实验目标概述2 实验环境配置3 实验过程3.1 待开发的三个应用场景3.2 面向可复用性和可维护性的设计:PlanningEntry3.2.1 PlanningEntry的共性操作3.2.2 局部共性特征的设计方案3.2.3 面向各应用的PlanningEntry子类型设计(个性化特征的设计方案)3.3 面向复用的设计:R3.4 面向复用的设.原创 2020-06-15 16:23:20 · 508 阅读 · 0 评论 -
哈工大2020春软件构造Lab2实验报告
实验报告只是为了提供给学弟学妹们参考,所以很多代码都没有完整给出,希望学弟学妹们只用来参考,请勿直接抄袭!!!有问题请联系QQ:1187987704文章目录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 ConcreteEdge.原创 2020-06-15 10:57:49 · 710 阅读 · 0 评论 -
哈工大2020春软件构造Lab1实验报告
实验报告只是为了提供给学弟学妹们参考,所以很多代码都没有完整给出,希望学弟学妹们只用来参考,请勿直接抄袭!!!有问题请联系QQ:1187987704文章目录1实验目标概述2实验环境配置3实验过程3.1Magic Squares3.1.1isLegalMagicSquare()3.1.2generateMagicSquare()3.2Turtle Graphics3.2.1Problem 1: Clone and import3.2.2Problem 3: Turtle graphics and dr.原创 2020-06-15 10:21:24 · 576 阅读 · 0 评论 -
Java的正则表达式语法
Java的正则表达式语法在之前的实验中也用到过正则表达式,但是用的都是比较基础的语法,有一些高级一点的用法还没有用到,所以今天来讲一下正则表达式的语法注意:我只列出了常用的,其他的不常用的语法在这里没有体现字符作用\将其下一个字符标记为特殊字符、文本、反向引用^匹配输入字符串开始的位置$匹配输入字符串结束的位置*匹配前面的字符或表达式0次及以上+匹配前面的字符或表达式1次及以上?匹配前面的字符或表达式0次或1次{n}匹配前面的字符或原创 2020-06-15 09:50:49 · 152 阅读 · 0 评论 -
Java中删除容器中元素的方法
Java中删除容器中元素的方法Java中删除容器中元素的方法1. Set中删除元素2. List中删除元素3. Map中删除元素4. 总结Java中删除容器中元素的方法在做实验时,由于是第一次上手Java,所以对于一些使用方法还是有些不熟悉的,今天就来介绍一下我遇到的一个问题,就是如何删除容器中的元素,我们都知道常见的方法就是使用自带的remove(),我之前也是一直这样使用的,直到有一次发生了“莫名其妙”其实是因为我对Java了解的太少 的bug,下面就来对常用的Set,List,Map来分别看一下原创 2020-06-14 15:00:18 · 1357 阅读 · 0 评论 -
Java设计模式之factory、abstract factory、proxy、observer、visitor、state、memento
Java设计模式之factory、abstract factory、proxy、observer、visitor、state、memento设计模式(二)1. Factory(工厂模式)1.1 目的1.2 使用方法1.3 工厂方法的优缺点2. Abstract Factory(抽象工厂模式)2.1 目的2.2 使用方法2.3 抽象工厂方法的优缺点3. Proxy(代理模式)3.1 目的3.2 使用方法3.3 代理模式的优缺点更新中,待更新内容为observer、visitor、state、memento原创 2020-06-12 17:08:02 · 265 阅读 · 0 评论 -
Java设计模式之adapter,decorator,facade,strategy,template,iterator
Java中的设计模式(一)设计模式(一)1.adapter(适配器模式)1.1目的1.2使用方法适配器模式的优缺点2.Decorator(装饰者模式)2.1目的2.2使用方法2.3装饰者模式的优缺点3.Facade(外观模式)3.1目的3.2使用方法外观模式的优缺点更新中,最晚明天更新完strategy、template、iterator设计模式(一)很多设计模式,在学习的过程中不好理解,并且许多设计模式在一起讲,难免会有混淆,所以今天来逐个解释一下1.adapter(适配器模式)1.1目的原创 2020-06-09 17:01:13 · 254 阅读 · 0 评论 -
override与overload的理解
Java中的override与overloadoverride与overloadoverrideoverloadoverride与overload在学习软件构造时,这两个概念开始是有些容易混淆的,并且对于一些特殊的情况不能做出很好的判断,今天就来讲述一下这两个的区别overrideoverride可以叫做重写或者覆盖,主要是在父类与子类之间体现,同时加上@override会自动检查与被重写的方法名,返回值,参数列表是否一致,当子类重写了父类的方法时,在子类的对象调用此方法时,调用的就是子类中的这个方原创 2020-06-07 14:36:22 · 233 阅读 · 0 评论 -
对于AF、RI、Safety from rep exposure的理解
对于AF、RI、Safety from rep exposure的理解AF、RI、Safety from rep exposureAFRISafety from rep exposureAF、RI、Safety from rep exposureAF、RI、Safety是从开始做实验就接触的一个东西,但是只是知道他们大概是什么,上课时也将了关于这个的内容,但是始终没有一个很好的理解,今天来简要的讲述一下我的理解AF首先AF的全称是:Abstraction function(抽象函数),根据函数我们就原创 2020-06-07 12:46:31 · 539 阅读 · 0 评论 -
Java中的可变类与不可变类
可变类与不可变类在学习软件构造课程时,一直对可变类与不可变类没有一个很清晰的认识,有些疑问,类似于:如果不可变类中是因为没有变值器才让他不可变的话,那么getter后得到的对象也是不可变类中的对象,那么获得之后不就是可以对其改变了吗,为什么不会影响不可变类中的对象呢?要弄清这个问题,首先要理解可变数据类型与不可变数据类型可变数据类型与不可变数据类型可变数据类型:对于一个可变数据类型的变量,当其值发生变化时,和原来的变量采用的是一个地址空间,即在原内存的基础上,对值进行的修改不可变数据类型:与可原创 2020-06-04 11:15:24 · 366 阅读 · 0 评论 -
2020.05.29软件构造听课笔记
锁与同步:线程安全不应该依赖于偶然前三种策略的核心思想:避免共享→即使共享,也只能读/不可写→即使可写,共享的可写数据应自己具备在多线程之间协调的能力,即使“使用线程安全的mutable ADT”缺陷:不能用全局rep共享数据→只能“读”共享数据,不能写→可以共享“读写”,但只有单一方法是安全的,多个方法调用就不安全了很多时候,无法满足上述三个条件→要读写共享数据,且线程中的读写操作复杂程序员来负责多线程之间对mutable数据的共享操作,通过“同步”策略,避免多线程同时访问数据使用锁原创 2020-05-29 09:39:45 · 112 阅读 · 0 评论 -
2020.05.27软件构造听课笔记
线程安全:线程之间的“竞争条件”:作用于同一个mutable数据上的多个线程,彼此之间存在对该数据的访问竞争并导致interleaving,导致post-condition可能被违反,这是不安全的线程安全:ADT或方法在多线程中要执行正确4种线程安全的方法:1.限制数据共享2.共享不可变数据3.共享线程安全的可变数据4.同步机制:通过锁的机制共享线程不安全的可变数据,变并行为串行策略1:Confinement将可变数据限制在单一线程内部,避免竞争不允许任何其他线程直接读写该数据原创 2020-05-27 11:39:28 · 90 阅读 · 0 评论 -
2020.05.22软件构造听课笔记
并发:网络上的多台计算机一台计算机上的多个应用一个CPU上的多核处理器多用户并发请求服务器的计算资源APP在手机端和在云端都有计算GUI的前端用户操作和后台的计算同时进行为什么要并发:摩尔定律失效了“核”变得越来越多为了充分利用多核和多处理器,需要将程序转化为并行程序共享内存:并发模块在内存中读写共享数据消息传递:并发模块通过channel交换信息共享内存:两个处理器,共享内存同一台机器上的两个程序,共享文件系统同一个Java程序内的两个线程,共享Java对象消息原创 2020-05-22 09:42:54 · 120 阅读 · 0 评论 -
2020.05.20软件构造听课笔记
断言和异常处理都可以处理同样的错误开发阶段用断言尽可能消除bugs在发行版本里用异常处理机制处理漏掉的错误对于来自外部的数据源要仔细检查,例如:文件、网络数据、用户输入等Barricade:类的public方法接收到的外部数据都应该被认为是dirty的,需要处理干净再传递到private方法——隔离舱隔离舱外部的函数应该使用异常处理,隔离舱内的函数应该使用断言处理增加了复杂性、运行时间和维护成本防御性代码本身也有可能存在缺陷设计好如何进行防御,制定相应的防御策略Debug的目原创 2020-05-20 14:27:38 · 92 阅读 · 0 评论 -
2020.05.15软件构造听课笔记
对于可恢复/期望恢复的情况,抛出checked异常对于程序出错、不确定是否可恢复,抛出unchecked异常尽可能在checked异常中提供方法和丰富的信息,以便协助恢复不建议声明Error类型异常、不建议声明RuntimeException类型的异常方法要在定义和spec中明确声明所抛出的全部checked异常没有声明所有抛出的checked异常,编译会出错unchecked异常和Error可以不用处理如果子类型中override了父类型中的函数,那么子类型中方法抛出的异常不能比父类型原创 2020-05-18 15:10:49 · 79 阅读 · 0 评论 -
2020.05.13软件构造听课笔记
健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度Paranoia(偏执狂):总是假设用户恶意、假定自己的代码可能失败Stupidity:把用户想象成白痴,可能输入任何东西Robustness principle (Postel's Law):对别人宽容点、对自己狠一点Dangerous implements:封闭实现细节,限定用于的恶意行为Can't happen:考虑极端情况,没有“不可能”正确性:程序按照spec加以执行的能力,是最重要的质量指标正确性:永不给用户错误的结果原创 2020-05-17 12:59:47 · 94 阅读 · 0 评论 -
2020.05.06软件构造听课笔记
State-based construction:使用有限的状态机来定义程序的行为,使用有限状态来控制程序想执行根据当前状态,决定下一步要执行什么操作,执行操作之后要转移到什么新的状态核心思想:将程序看作一个有限状态自动机,侧重于对“状态”及“状态转换”的抽象和编程程序的执行被分解为一组自动执行的步骤各步骤之间的通讯通过“状态变量”执行程序执行就可以看作是各自动步骤的不断循环使用枚举...原创 2020-05-06 11:42:40 · 119 阅读 · 0 评论 -
2020.04.29软件构造听课笔记
工厂方法模式:工厂方法模式也被称为“虚拟构造器”当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指明需要具体创建的实例时,有工厂方法定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类静态工厂方法相比于通过构造器(new)构建对象:1.静态工厂方法可具有指定的名称2.不必在每次调用的时候都创建新对象3.可...原创 2020-04-29 11:45:12 · 131 阅读 · 0 评论 -
2020.04.24软件构造听课笔记
软件维护:修复错误、改善性能运维是软件开发中最困难的工作之一,涉及到其他所有环节处理来自用户报告的故障/问题阿里运维工程师职责:负责系统稳定性工作;生产系统部署、上线;维护生产系统网络安全、稳定、可靠;维护生产系统数据备份岗位要求:深入理解运维体系结构,精于容量规划、架构设计、性能优化;熟悉服务管理、单元部署、自动扩容等运维系统建设,对成本控制和效能提升有深刻的理解...原创 2020-04-24 09:39:34 · 101 阅读 · 0 评论 -
2020.04.22软件构造听课笔记
除了类本身,设计模式更强调多个类/对象之间的关系和交互过程——比接口/类复用的粒度更大设计模式分类:创建型模式、结构型模式、行为类模式Adapter模式(适配器模式):将某个类/接口转换为client期望的其他形式解决类之间接口不兼容的问题通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类Decorator设计模式(装饰器模式):为对象增加不...原创 2020-04-22 11:47:36 · 104 阅读 · 0 评论 -
2020.04.17软件构造听课笔记
<? super A>下限通配符,A及其父类<? extends A>上限通配符,A及其子类List<? extends Number> list,意味着list可以匹配多种类型中的一种,但并不意味着同一个list可以存放所有这些的类型,无限定通配符和下限通配符同理委托/委派:一个对象请求另一个对象的功能委派是复用的一种常见形式很多设计模式将继承...原创 2020-04-17 09:44:58 · 99 阅读 · 0 评论 -
2020.04.15软件构造听课笔记
面向复用编程:开发出可以复用的软件基于复用编程:利用已有的可复用软件搭建应用系统复用的特点:很大的适应性降低成本和开发时间充分的测试->高可靠标准化、一致化针对性不强->性能差开发可复用软件的成本要高于一般软件的成本:要有组稿的适应性性能差些:针对更普适的场景,缺少足够的针对性使用已有软件进行开发:可复用软件库,对其进行有效的管理往往无法拿来就用,需要适配...原创 2020-04-15 11:45:27 · 108 阅读 · 0 评论 -
2020.04.03软件构造听课笔记
现实中的每个对象实体都是独特的,所以无法完全相等,但有“独特性”在人类语言和数学中,“绝对相等”是存在的等价关系:自反、对称、传递ADT是对数据的抽象,体现为一组对数据的操作抽象函数AF:内部表示->抽象表示基于抽象函数AF定义ADT的等价操作如果AF映射到同样的结果,则等价站在外部观察者角度:对两个对象调用任何相同操作,都会得到相同结果,则认为这两个对象是等价的,反之亦...原创 2020-04-03 09:43:46 · 79 阅读 · 0 评论 -
2020.04.01软件构造听课笔记
静态方法无法直接调用非静态成员Interface和Class:实现和定义ADT接口中只有方法的定义,没有实现接口之间可以继承与扩展一个类可以实现多个接口(从而具备了多个接口中的方法)一个接口可以有多种实现类接口:确定ADT规约类:实现ADT也可以不需要接口直接使用类作为ADT,既有ADT定义也有ADT实现实际中更倾向于使用接口来定义变量打破了抽象边界,接口定义中没有包含c...原创 2020-04-01 11:45:59 · 83 阅读 · 0 评论 -
2020.03.27软件构造听课笔记
ADT的规约里也不应该谈及任何内部表示的细节,以及R空间中的任何值ADT的内部表示(私有属性)对外部都应该严格不可见故在代码中以注释的形式写出AF和RI而不能在Javadoc文档中,防止被外部看到而破坏表示独立性/信息隐藏在对象的初始状态不变量为true,在对象发生变化是,不变量也要为true构造器和生产器在创建对象是要确保不变量为true变值器和观察器在执行时必须保持不变性在每个方...原创 2020-03-27 09:48:18 · 79 阅读 · 0 评论 -
2020.03.25软件构造听课笔记
抽象数据类型(ADT)ADT的特性:不变量、表示泄露、抽象函数AF、表示不变量RI数据抽象:有一组操作所刻画的数据类型传统的类型定义:关注数据的具体表示抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可可变类型的对象:提供了可改变其内部数据的值的操作不可变数据类型:其操作不可改变内部值,而是构造新的对象良好的ADT的设...原创 2020-03-25 11:52:58 · 87 阅读 · 0 评论 -
2020.03.20软件构造听课笔记
设计规约final关键字定义了设计决策,代表不可改变为什么要写出“假设”?第一:自己记不住,第二:别人看不懂代码中蕴含的“设计决策”:给编译器读注释形式的“设计决策”:给自己和别人读精确的规约有助于区分责任客户端无需阅读调用函数的代码,只需理解spec即可规约可以隔离“变化”,无需通知客户端规约也可以提高代码效率(Eg.实现者不需要写代码确保是输入的正确性,调用者的责任)...原创 2020-03-20 09:45:18 · 69 阅读 · 0 评论 -
2020.03.18软件构造听课笔记
数据类型与类型检验:基本数据类型:只有值没有ID、在栈中分配内存、代价低对象数据类型:既有ID也有值、在堆中分配内存、代价昂贵所有的类默认继承了Object继承:一个子类可以拥有父类所有可见的方法基本类型对应的对象类型(将基本类型包装为对象类型):Boolean、Integer、Short、Long、Character、Float、Double通常是在定义容器类型的时候用到它们的...原创 2020-03-19 14:22:23 · 94 阅读 · 0 评论 -
2020.03.11软件构造听课笔记
这节课讲的主要是软件生命周期与配置管理软件生命周期与配置管理:软件从无到有的过程:计划、分析、设计、写代码、测试、实际运行(调试等)传统的软件过程模型有两种:线性过程,迭代过程其他模型有:瀑布模型、增量模型、V字模型、原型过程、螺旋模型瀑布过程特点:线性推进、阶段划分清楚、整体推进、无迭代、管理简单、无法适应需求增加\变化增量过程特点:线性推进、增量式(多个瀑布的串行)、无迭代...原创 2020-03-17 13:57:01 · 104 阅读 · 0 评论 -
2020.03.04软件构造听课笔记
以下为2020年3月4日的软件构造听课中记录的知识点:测试是负能量的表现:破坏、证错再好的此时也无法证明系统里不存在错误一个好的测试的特征:1.能发现错误;2.不冗余;3.最佳特性最佳方案;4.不太复杂也不太简单静态测试:不运行程序,只分析代码动态测试:运行程序,输入测试用例,检测是否有问题测试:发现是否存在错误调试:识别错误根源,消除错误白盒测试:对程序内部代...原创 2020-03-11 08:15:08 · 106 阅读 · 0 评论