OOAD与设计模式(三)

来源:互联网 发布:修改机器码破解软件 编辑:程序博客网 时间:2024/05/28 04:53

一.软件开发流程

客户提出需求--》系统开发结束交付客户

1.传统的软件开发流程---瀑布模型

 1)把整个软件开发过程分成顺序相接的五个阶段,阶段间不可逆转

2)每个阶段必须完成全部规定的任务,并提交相应的文档

问题:

1)  只有项目生命周期的最后阶段才能发现问题

2)  不适应客户需求的变化

 

1. 迭代化开发流程

1)  将整个项目划分成多个阶段性小目标

2)  每个阶段都包含了完整的流程:

à需求—>分析à设计—>实现à测试—>

    3)每个阶段都有明确的评估标准

特点:

1)  允许客户需求的变更

2)  系统逐步集成和完善

3)  不断地测试和集成

4)  早期得到客户的反馈

 

二.UML---统一建模语言

Unified Modeling Language

服务器下载工具:StarUML

目的:提供系统的蓝图

用于设计和开发人员进行交流的语言

 

UML图形分类:

1. 静态建模

描述系统的静态特征

           包括:

                【USE CASE用例图】(需求)

                【CLASS类图】(设计)

                OBJECT对象图

                COMPONENT组件图

                DEPLOYMENT部署图

 

2. 动态建模

描述系统的动态特性(内部行为)

【SEQUENCE时序图】

COLLABORATION协作图

ACTIVITY活动图

STATE状态图

 

1. USECASE用例图

用于需求阶段

描述了从一个外部用户角度对系统提出的功能需求

组成:角色Actor   用例case

特点:

    强调系统具有哪些功能,而不是系统如何工作

注意点:

        避免出现功能上分解

图书管理系统需求:

        管理员:

登录系统—>维护图书信息-à添加图书/删除图书/修改图书

            --à维护借阅信息-à借书/还书

错误的USECASE图:

正确图:

两种用例间的关系:

Include关系

    ----反映的是用例间的包含关系

  基用例和子用例要一起使用才能完成完整的用例

Extend关系

基用例本身就是个完整的用例,但基用例中存在一个扩展点,当该点被激活时,执行子用例

举例:

        图书超期归还,需要罚款

需要对每个case提供用例说明

格式:

1. 简要说明

2. 参与者

3. 前置条件

4. 事件流

a. 基本事件流

b.备选事件流

5. 特殊需求

6. 后置条件

 

练习:

    银行ATM系统,请画出其usecase图,并对取款case提供说明

取款case用例说明:

1. 简要说明

本用例主要描述客户取款的流程

2. 参与者

客户

7. 前置条件

登录系统

8. 事件流

c.  基本事件流

1. 选择”取款”事务

2. 输入取款金额

3. 系统确认金额的合法性

4. 系统吐出现金

5. 保存本次事务结束后客户的账户信息

6. 系统提示选择事务类型

d.备选事件流

1. 如果输入金额大于账户余额

系统提示重新输入金额

2. 如果输入金额大于单次取款限制额度,系统提示,重新输入

3. 如果输入金额与当日以往取款金额相加,大于一天最大取款限额,系统提示,并重新输入

 

9. 特殊需求

10.    后置条件

 

作业:

1. 银行ATM系统,挑选一个case书写其用例说明

 

 

CLASS类图

用于【设计】阶段

反映类与类之间,或类与接口间的关系

继承、实现、依赖、关联、聚合、组合

1. 静态结构

类  

可见性:

+public

-private

#protected

~package private

接口

棒棒糖表示法:

矩形表示法;

抽象类(斜体)

 

2. 动态关系

1)  继承关系:isa

UML:泛化Generalization

空心三角+实线

2)  类与接口间的实现关系

UML: Realization

3)关联关系

  UML:Association

Wife  Husband

  单向关联

           

  双向关联(不推荐使用)

   例:

Customer     Order

1)要求订单上反映客户信息,且客户可以下多张订单

2)要求客户身上携带有订单的信息,且客户可以下多张订单

3)要求客户和订单之间你中有我,我中有你,一个客户可以下多张订单

建议:把多重性关系提取出来,建议一个关联类

3)  聚合关系:has a

UML:Aggregation

空心菱形

4)组合关系:contains a

UML: Composition

实心菱形

4)  临时使用关系:usea

体现为局部变量和方法传参

UML:  Dependency

人吃水果--

人 篮球--

妻子丈夫--

教师学生--

人心脏

练习:

根据动物类图写出java代码

企鹅与气候:

关联关系

Public class Penguim extends Bird{

    Private Climate climate;

}

雁群与大雁:

聚合关系

Public class WideGooseGroup{

    Private Set wideGooses;

    …

  Public voidaddWideGoose(WideGoose wg){

    wideGooses.add(wg);

}

}

鸟与翅膀

组合关系

Public abstract class Bird exends Animal{

    Private Wing[] wings;

  //同时创建

    Public Bird(){

        Wings = new Wing[2];

        Wings[0] = new Wing();

        Wings[1] = new Wing();

        …

}

}

 

问:

1)  美猴王  四肢  金箍棒

组合/聚合

2)  唐僧  徒弟  悟空  悟净  悟能

关联

3)  人  汽车  房子

依赖关系

Class Person{

    Voidbuy(){//Car 、House}

}

要求:用UML图画出其中的关系

 

练习:

    【客户】下【订单】订购【产品】

要求:

1)订单上要反映出客户的信息

    2)允许一张订单存在多个订单明细

   3)每张订单只能有一种支付方式:

   现金Cash  支票Check  信用卡Credit

画出其类图

Object对象图

描述一组对象(具有明确的属性取值和行为)间的关系;

类图描述的是抽象的

对象图则是具体的

例: 三角形的三个具有明确取值的顶点

 

交互图:

Sequence时序图

Collaboration协作图

 

Sequence时序图

   用于【设计】阶段

    反映的是对象间的消息的交互,这些对象按照时间顺序排列

构成:

角色Actor

对象Object

生命线Lifeline

控制焦点focus of control

消息message

自关联消息self-message

例:银行ATM系统,客户取款的sequence图

练习:

    客户下订单系统,画出其中每个case的sequence图

添加订单

修改订单

删除订单

 

状态图

强调的是事务状态的变迁

构造:

初态

终态

子状态

例:烧开水的状态图

 

错误的状态图

 

练习:客户下订单的状态图

分析:

订单状态:

已接收状态

已审核状态

已完成状态

取消状态

 

活动图Activity

针对use case图中的每个case提供一副活动图,描述该用例中用户进行的操作

包括:

活动起点

执行的活动

判定点

满足条件等

ATM客户取款的活动图

练习:画出其他case的活动图

 

组件图Component

反映系统各个组件之间的结构关系

 

部署图Deployment

组件图反映一组构件间的相互依赖关系

部署图反映整个系统的硬件部署

 

原创粉丝点击