可视化建模的目的是说明软件的用例关系等等,我们还需要对软件的需求规格进行更加详细的说明,以下称为“需求规格说明”。需求规格说明涉及对需求确定期间定义的客户需求进行严格的建模,重点放在那些系统将要提供的所期望的服务(功能性需求)上。在规格说明阶段通常不对系统约束(非功能需求)做进一步的考虑,但系统约束可以指导和验证建模工作。这种指导和验证采用体系结构优先权就的形式。
接下来介绍体系结构:软件体系结构定义了系统中相互作用的软件构件及子系统的结构和组织形式。它提供了一种对设计的保护措施,以防止作为系统阶段的设计出现失败。因此在详细系统规格说明工作开始之前,软件开发团队必须选定全体开发人员都要遵循的体系结构模式和原则。所有软件建模的最重要目标都是将构建依赖最小化,因此开发人员不能允许随意的对象通信,否则随着模型增长及每个新对象的加入,系统的复杂性会呈指数上升。模型-视图-控制器,简称MVC,这是一个大家都很熟悉的体系结构框架,该框架是作为Smalltalk-80编程环境的一部分而开发的。模型对象表示数据对象——应用问题域中的业务实体和业务规则;视图对象表示用户UI对象,将模型的状态以用户需要的格式呈现在用户的图形界面上;控制器对象表示鼠标和键盘事件,响应视图发出的请求,该请求是用户与系统交互的结果;J2EE的核心体系结构是以MVC为骨架,扩展到企业和电子商务系统中的框架。这个框架是通用的,解释的,不需要调整。它在3个应用程序层之间引入了“关注点分离”。规定表示层构件只能通过业务层与集成层构件通信,反之亦然。但由于它不允许双向通信(方法调用),所以没有强化严格的等级顺序,因而允许循环调用。表示-控制器-bean-中介者-实体-资源,原为PCMEF框架。PCMEF框架已被扩展为包含6个层次,并重新命名为PCBMER。该框架具有很多优点:一是层之间相关性的分离,使得修改能在一层内进行而不影响其他层,对其他依赖层的影响也可以预见和管理;第二个优点是去除了依赖关系的循环,得刀了只存在向下依赖的6层结构;第三个优点是该框架确保了相当高的稳定性。PCBMER还具有几个重要的体系结构原则:向下依赖原则(DDP),向上通知原则(UNP),相邻通信原则(NCP),显式关联原则(EAP),循环去除原则(CEP),类命名原则(CNP),相识包原则(APP)。
除需求规格说明外,我们还要进行状态规格说明。状态规格说明提供系统的结构视图,主要任务是定义应用领域的类,它们的属性以及与其他类的关系。类的操作在一开始一般不予考虑,将来从行为规格说明模型中导出。状态规格说明分多个模块。首先是类建模。它是面向对象系统开发的基础,因为类本身的性质,这个建模不是一个确定的过程——不存在发现和定义良好类的秘诀。基本流程为发现类——对类进行说明。第二个为关联建模。关联是模型中最基本的关系——特别是在持久“业务对象”模型中,关联支持用例的执行,因此它与状态和行为规格说明关系紧密。PCBMER框架的EAP原则就主张程序中显式关联的重要性。其基本流程为发现关联——说明关联。第三个为聚合及复合关系建模。聚合与泛化是面向对象系统中支持功能复用的最重要技术。该部分的基本流程为发现聚合和复合——说明聚合和复合。第四个是泛化关系建模。泛化是一个或多个类的公共特性可以抽象到一个更一般化的类中。它有两个目的:可替换性和多态性。基本流程与其他无异:发现泛化——说明泛化。第五个是接口建模。接口提供了某些强大的建模能力,接口与类没有关联,但可以作为来自于类的单向关联的目标方,接口还可以与另一个接口具有泛化关系。基本流程略。第六个是对象建模。建模涉及系统的定义。模型不是一个可执行系统,因此它不显示实例对象,而任何有意义的系统中对象的数量都是巨大的,我们需要对对象进行一个说明,因此在为类建模时这是一个关注点。
在状态规格说明结束之后,我们还需要行为规格说明。系统的行为是它展现给外部用户的,这一行为我们同样需要做一些手段进行说明。说明行为同样划分成多个模块,这同样与建模脱不开干系,以下不再多做说明,直接罗列出来:用例建模,活动建模,交互建模,操作模型。最后一个说明则是状态变化规格说明。状态规格说明定义类的属性,行为规格说明定义类的操作,但要理解对象怎样岁事件改变其状态,需要一个更有针对性的系统视图。这就是状态变化规格说明的出发点。
以上是对本书关于规格说明这一章的简述。这一章我学到了很多东西,在我开始工作之后再回过头来品读时,兴许有了其他的感悟。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!