什么是分析和设计
分析(analysis)强调的是对问题和需求的调查研究,而不是解决方法。例如:如果需要一个新的在线交易系统,那么应该如何使用它?它应该具有哪些功能。
“分析”一词含义广泛,最好加以限制,如需求分析(对需求的调查研究)或者面向对象分析(对领域对象的调查研究)。
设计(design)强调的是满足需求的概念上的解决方法(在软件方面和硬件方面),而不是其实现。例如,对数据库方案和软件对象的描述。其设计思想排斥底层或“显而易见的细节”(对于预期消费者来说是显而易见的)。最终,设计可以实现,而实现(代码)则表达了真实和完整的设计。
与“分析”相同,对于“设计"一词最好也加以限制,如面向对象设计和数据库设计。
有益的分析和设计可以概括为:做正确的事(分析)和正确地做事(设计)
什么是面向对象分析和设计:
在面向对象分析(object-oriented analysis)过程中,强调的是在问题领域内发现和描述对象(或概念)。例如:在航班信息系统中包含飞机(Plane),航班(Flight),飞行员(Pilot)等概念。
在面向对象设计(object-oriented design,简称对象设计)过程中,强调的是定义软件对象以及它们如何协作以实现需要。例如,软件对象Plane可以有tailNumber(飞机尾翼号,标示唯一飞机)属性和getFlightHistory(飞机已经飞过的航班)方法。
最后,在实现或面向对象程序设计过程中,会实现设计出来的对象,如Java中的Plane类。
public class Plane{
private String tailNumber;
public List getFlightHistory(){
......
}
}
定义用例:
需求分析可能包括人们如何使用应用的情节或者场景,这些情节或者场景可以被编写成用例(use case).
用例不是面向对象制品,而只是对情节的记录。但用例是需求分析中的一种常用工具。例如,下面是一个简单的骰子游戏的用例。
骰子游戏:游戏者请求掷骰子。系统展示结果:如果骰子的总点数是7,则游戏者赢;否则游戏者输。
定义领域模型:
面向对象分析的结果可以标示为领域模型(domain model),在领域模型中展示重要的领域概念或者对象。
需要注意的是,领域模型并不是对软件对象的描述,它使真实世界领域中的概念和想象可视化。因此,它也被称为概念对象模型。
分配对象职责并绘制交互图:
面向对象设计关注软件对象的定义,它们的职责和协作。顺序图(sequence diagram,UML的一种交互图)是描述协作的常见表达法。它展示出软件对象之间的消息流,和由消息引起的方法调用。软件对象设计和程序可从真实世界领域中获取灵感,但它们并不是对真实世界的直接建模或模拟。
定义设计类图
除了在交互图中显示对象协作的动态视图外,还可以用设计类图(design class diagram)来有效地标示类定义的静态视图。这样可以描述类的属性和方法。
要注意的是,尽管设计类图不同于领域模型,但其中的某些类名和内容还是相似的。从这一方面讲,OO设计和语言能够缩小软件构件和我们所设想的领域模型之间的差距,即实现低表示差距(lower representational gap)
什么是UML
统一建模语言(UML)是描述,构造和文档化系统制品的可视化语言。UML关键在于可视化这个词,UML是图形化表示法的事实标准。用来绘制和展示与软件(特别是OO软件)相关的图形(以及文字)。
应用UML的三种方式
UML作为草图,非正式的,不完整的图(通常是在白板上手绘草图)。
UML作为蓝图,相对详细的设计图,用于:1.逆向工程,也就是以UML图的方式对现有代码进行可视化,使其易于理解。2.代码生成(前向工程)。
对于逆向工程,UML工具读取源文件或者二进制文件,并生成UML包图,类图和顺序图(一般情况下)。能从整体上理解元素,结构和协作。
无论是人工还是使用自动工具生成代码,在此之前绘制一些详尽的图都能够为生成代码的工作提供指导。
UML作为编程语言,用UML完成软件系统可执行规格说明。
UML和“银弹思想”。
应用UML的三种透视图
概念透视图:用图来描述现实世界或关注领域中的事物。
规格说明(软件)透视图:用图(使用与概念透视图中相同的表示法)来描述软件的抽象物或具有规格说明和接口的构件,但是并不约定特定实现(例如,非特定的C#或Java中的类)。
实现(软件)透视图:用图来描述特定技术(例如,Java)中的软件实现。
概念类(conceptual class):现实世界中的概念或事物。在概念或本质透视图中使用。
软件类(software class):无论在过程还是方法中,都表示软件构件在规格说明或实现透视图中的类。
实现类(implementation class):特定的OO语言(如Java)中的类。
可视化建模的优点:可以帮助我们更为便利地观察全景,发现软件元素或分析之间的联系,同时允许我们忽略或隐藏旁枝末节。这是UML或其他图形化语言的本质价值。