自定义博客皮肤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)
  • 收藏
  • 关注

原创 软件构造(10):计划项的设计:组合复用原则

文章目录设计流程#1 设计接口,定义计划项特性#2 实现计划项特性#3 组合接口,定义特性的组合#4 通过委托实现特性的组合组合复用的优点#1 维护类的封装性#2 易于增加新的接口#3 复用的灵活性好组合复用的小缺点(?)#1 系统中的接口和类过多#2 需要定义细粒度的接口在Lab3的计划项设计中,笔者使用的方案是基于组合复用的思想。在写实验的过程中,笔者感觉这种思路十分直观清晰,于是写下这篇博客记录一下设计的流程和组合复用原则的优缺点。设计流程#1 设计接口,定义计划项特性实验手册中已经将计划项的

2020-05-20 08:37:29 202

原创 软件构造(09):“位置可更改”的三种实现及其比较

文章目录实现“位置可更改”的基础问题何在方案1:蹩脚的委托方案2:无情的复读机方案3:继承做Lab3的时候,碰到了一个问题:在“单个位置”的接口和实现类已经开发出来的前提下,“位置可更改”应该怎么实现。笔者将在此列举三种方法,从安全性和复用性的角度对它们进行比较。实现“位置可更改”的基础在开发“位置可更改”功能之前,笔者已经完成了SingleLocationEntry接口及其实现类SingleLocationEntryImpl。但是考虑到并不是所有使用单个位置的计划项的位置都可更改,笔者只实现了最基本

2020-05-17 21:52:34 1041 4

原创 软件构造(08):深入理解DIP原则:抽象应属于高层模块

文章目录写在前面依赖转置原则第一部分:依赖抽象第二部分:抽象属于高层模块为什么抽象应该属于高层模块更简单的高层模块更好的抽象和接口高层模块定义接口的优点接口实现者定义接口的缺点改善整体架构写在前面在软件构造课程的5-1节:可维护性的度量与构造原则中,我们学习了依赖转置原则(Dependency Inversion Principle)。对于DIP原则的两个方面,“高层模块不应该依赖于低层模块,...

2020-04-30 23:56:29 714 1

原创 软件构造(07):Adapter,Decorator,Facade和Proxy模式的比较

文章目录共性使用组合和委派结构型模式局部的共性Decorator模式和Proxy模式的共性Adapter和Facade模式的共性区别用途的不同是否转换接口能否动态分离性质被包装类的责任包装类的责任包装类的构造方法链接关系写在最后第四章和第五章陆续学习了一些设计模式,其中Adapter,Decorator,Facade和Proxy模式具有相似的结构。这篇博客将对这四个设计模式的共性与区别进行分析,...

2020-04-30 09:47:26 585

原创 软件构造(06):棋类游戏的设计:一些启发式方法

文章目录#1 找出现实世界中的对象#2 形成一致的抽象#3 保持松散的耦合增大模块之间连接的可见性避免模块之间的语义耦合#4 保持高内聚性#5 构造分层结构#6 分配职责#7 创建中央控制点#8 为测试而设计#9 写在最后Lab2的P3要求学生从0开始设计一套ADT,给同学们带来了设计上的困扰和大量的代码重构。这篇博客将介绍一些设计一个小型项目架构的启发式方法,作为今后实践中指导模块设计的一些可...

2020-04-14 15:59:05 1493

原创 软件构造(05):GraphPoet的实现:委托优于继承

文章目录委托的实现(复合+转发)继承的实现为什么使用委托而不是继承?从类的功能角度看从类的安全性角度看从Graph更新的角度看So What?何时使用继承?何时使用委托?写在最后Lab2中P1的GraphPoet需要利用已经实现的Graph及其两个具体实现类来编写,有两种实现方案。这篇博客结合委托和继承两种实现机制的特点,对这两种方案进行比较。委托的实现(复合+转发)(由于在本实验中Grap...

2020-04-12 23:52:58 441

原创 软件构造(04):用快照图理解数据类型

文章目录快照图使用快照图的优点快照图的规范基本类型的表示对象类型的表示不可变对象的表示可变对象的表示引用的表示使用快照图分析引用和值的变化针对可变值的不可变引用针对不可变值的可变引用快照图快照图(Snapshot diagrams)用于描述程序运行时的内部状态——它的栈(即运行中的方法和局部变量)和它的堆(即当前存在的对象)。使用快照图的优点便于程序员之间通过图片进行交流。便于我们阐述...

2020-03-25 15:37:57 346

原创 软件构造(03):使类的可变性最小化

什么是不可变类?不可变类是指其实例不能被修改的类。 每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期中固定不变。Java 平台类库中包含许多不可变的类,如String、基本类型的包装类、Biginteger 和BigDecimal。存在不可变的类有许多理由:不可变的类比可变类更加易于设计、实现和使用。 它们不容易出 错,且更加安全。...

2020-03-23 15:39:07 155

原创 软件构造(02):软件开发过程模型

由于笔者是计算机类非软件工程专业的学生,在将来本科阶段的学习中应该不会非常系统地学习软件工程管理方面的知识,所以借学习软件构造这门课程的机会,拓展了一些软件开发过程模型的内容,在这篇博客中写下自己的一些总结和体会。绝大多数的的软件开发都不是在短时间内完成的,每个软件团队在软件开发过程中都会遇到很多问题。针对这些问题,如果软件开发团队能够得到已有的经过验证的解决方案,将有助于他们快速地分析和解决问...

2020-03-21 02:14:09 371

原创 软件构造(01):Lab1的经验与收获

这篇博客用来记录Lab1中遇到的一些问题以及从这些问题的解决中得到的经验教训。异常的抛出和处理问题描述P1的第二个任务给出了一个函数,它根据输入的奇数n,生成一个n阶幻方。 public static boolean generateMagicSquare(int n) { int magic[][]; magic = new int[n][n]; /* 初始化取第0行的中间列...

2020-03-15 00:37:14 365

空空如也

空空如也

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

TA关注的人

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