20145208 实验三 Java面向对象程序设计
实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
实验步骤
(一)敏捷开发与XP
-
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。从2001年开始,一些软件界的专家开始倡导“敏捷”的价值观和流程,他们肯定了流行做法的价值,但是强调敏捷的做法更能带来价值。
-
敏捷开发包括很多模式,其中,极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:
- XP是以开发符合客户需要的软件为目标而产生的一种方法论
- XP是一种以实践为基础的软件工程过程和思想
- XP认为代码质量的重要程度超出人们一般所认为的程度
- XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件
-
XP准则来表达:
- 沟通 :XP认为项目成员之间的沟通是项目成功的关键,并把沟通看作项目中间协调与合作的主要推动因素。
- 简单 :XP假定未来不能可靠地预测,在现在考虑它从经济上是不明智的,所以不应该过多考虑未来的问题而是应该集中力量解决燃眉之急。
- 反馈 :XP认为系统本身及其代码是报告系统开发进度和状态的可靠依据。系统开发状态的反馈可以作为一种确定系统开发进度和决定系统下一步开发方向的手段。
- 勇气:代表了XP认为人是软件开发中最重要的一个方面的观点。在一个软件产品的开发中人的参与贯穿其整个生命周期,是人的勇气来排除困境,让团队把局部的最优抛之脑后,达到更重大的目标。表明了XP对“人让项目取得成功”的基本信任态度。
(二)编码标准
- 代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:
- 要体现各自的含义
- 包、类、变量用名词
- 方法名用动宾
- 包名全部小写,如:io,awt
- 类名第一个字母要大写,如:HelloWorldApp
- 变量名第一个字母要小写,如:userName
- 方法名第一个字母要小写:setName
- ...
(三)结对编程
-
结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等。
-
结对编程中有两个角色:
- 驾驶员(Driver)是控制键盘输入的人。
- 领航员(Navigator)起到领航、提醒的作用。
-
如何结对编程,为何要结对编程,大家参考一下结对编程和两人合作 ,重点是:
- 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
- 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。
- 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。
- 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“他/她的代码”,只有“我们的代码”。
- 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。
(四)版本控制
- XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。结对编程对这一实践贡献良多:借由在不同的结对中工作,所有的程序员都能看到完全的代码。集体所有制的一个主要优势是提升了开发程序的速度,因为一旦代码中出现错误,任何程序员都能修正它。
- 这意味着代码要放到一个大家都能方便获取的地方,我们叫代码仓库。这引出另外一个话题叫版本控制(Version Control)。
GIT托管的使用
- 先使用
git init
创建.git
文件夹。
- 然后用
git add .
添加我们修改的代码。
- 用
git commit -m '本次修改的描述'
提交到环境中本地代码仓库。
- 以及一系列操作:
- 用
git push
将代码推上去。
- 运用
git clone
将对有的代码下载下来
(五)重构
什么是重构
- 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。
- 下面是队友对我的代码的修改:
- 20145230熊佳炜用重构修改了名字
- 熊佳炜同学在重命名了文件名后发现类名没有改名,所以继续重命名类名:
- 20145220韩旭飞同学对代码文件进行了复制操作,并将复制出的文件命名:
- 20145230熊佳炜同学看到韩旭飞同学进行了复制的操作,不甘示弱,继续了移动(即类似于剪切的操作):
- 20145208蔡野,也就是我,对他们修改过得文件又进行了接口的设定:
小队链接
- 我(20145208蔡野)是和20145220韩旭飞、20145230熊佳炜组队的
- 我负责撰写博客,汇总资料,git上传下载还有代码的一些修改实现,韩旭飞和熊佳炜进行了git的上传和下载还有重构的运用。
- 链接
实验感想
- 通过这次实验,我了解到了重构的妙处,在以往编写程序的时候,经常有代码不够简洁的情况,当时我只能够手动的进行修改,不仅花费较大时间,还经常出现各种小错误浪费更多时间和精力。有了重构之后可以迅速方便快捷的使代码更加层次分明,的确非常实用,但是我现在对重构的认识还不足,很多选项并不知道怎么用,需要加强学习。