系统分析与设计
3.系统分析与设计★★★★系统分析将复杂对象拆解为简单组成部分明确各部分属性及关系。主要任务系统分析师与用户基于需求调研形成系统需求规格说明书SRS。系统设计基于系统分析结果制定合理的技术方案指导系统构建。权衡技术方案、分配资源确保系统顺利实施。主要任务概要设计系统架构、模块划分、技术选型详细设计数据库设计、接口设计、流程优化。3.1.结构化方法结构化方法是一种面向功能的软件开发方法也称为面向数据流的软件开发方法。结构化方法的核心原则分解与抽象将复杂问题拆解为更简单的组成部分。模块独立性各模块尽量保持独立降低耦合。信息隐蔽通过隐藏模块内部实现减少外部依赖和接口暴露。结构化开发方法的三个主要阶段结构化分析SA、结构化设计SD、结构化编程SP3.1.1.结构化分析 (SA)结构化分析SA提供一组原理和技术帮助系统分析人员形成功能规约。主要采用图形来描述用户需求主要手段包括数据流图DFD、数据字典结构化语言、判定表、判定树。1. 结构化分析的步骤1分析业务情况建立当前物理模型的数据流图DFD。2推导逻辑模型建立等价的逻辑模型的DFD。3设计新的逻辑系统生成数据字典和基元描述。4建立人机接口提出可选的目标系统物理模型DFD。5评估方案分析各种方案的成本和风险等级。6选择最佳方案确定最终的系统设计方案。7编写完整的需求规约确保系统需求清晰、完整。2. 结构化分析的常用手段2.1 数据流图DFD★★★数据流图DFD是一种需求建模方法也称为过程建模或功能建模核心是数据流。DFD描述了数据在系统中的流向、处理过程及存储方式帮助清晰展现业务流程。2.1.1 DFD的四种基本元素数据流Data Flow用箭头表示数据的流向标注数据项或信息说明。处理Process表示数据的加工与转换在图中用矩形框表示。输入与输出通过箭头连接。数据存储Data Store表示数据库或文件存储的数据以数据存取箭头表示交互。外部项External Entity即系统外部的数据来源或终点如用户、组织、其他系统在图中用圆角框或者平行四边形框表示。2.1.2 DFD的建模步骤★★★1明确目标确定系统范围及功能需求。2建立顶层DFD定义系统主要功能及边界。3构建第一层DFD分解图细化顶层DFD中的处理模块。4开发DFD层次结构图逐层细化确保上下文一致。5检查确认DFD图确保模型正确、一致、完整。2.2 数据字典Data Dictionary数据字典是描述数据的信息集合详细定义系统中的数据元素。2.2.1 数据字典的组成★★★1数据项基本的数据单元描述内容包括名称、类型、长度、取值范围等。2数据结构由多个数据项或数据结构组成描述其组成关系。3数据流描述数据流向、来源、去向、组成结构、流量等信息。4数据存储描述存储数据的方式包括存取方式、存储位置、数据量等。5处理过程描述数据处理的功能、输入/输出数据流及处理要求。3.1.2.结构化设计 (SD)结构化设计(Structured Design, SD) 是一种面向数据流的设计方法采用自顶向下、逐步求精、模块化的方式进行软件设计分为概要设计和详细设计两个阶段。其核心目标是高内聚、低耦合提高系统的可维护性和可扩展性。1. 模块结构系统被划分为多个相对独立、具有单一功能的模块每个模块负责特定的任务。(1) 信息隐藏与抽象信息隐藏模块内部实现细节对外部隐藏外部只能通过接口访问减少模块之间的相互依赖。抽象抽取事物的本质特性忽略非本质细节分为过程抽象、数据抽象、控制抽象。(2) 模块化模块具备功能、逻辑、状态三大特性功能描述模块的职责做什么。逻辑描述模块的实现方式怎么做。状态模块的执行环境及条件。(3) 耦合模块之间的联系耦合表示模块之间的依赖程度耦合度从低到高通常分为7种非直接耦合最松散、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合最紧密目标降低模块之间的耦合使其更独立提高可维护性。(4) 内聚模块内部联系内聚表示模块内部各部分的关联程度内聚度从高到低通常分为7种功能内聚最优、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚最差目标提高模块的内聚使其专注于单一功能。2. 系统结构图 (Structure Chart, SC)定义用于表示系统的模块结构及其层次关系描述模块之间的调用、数据流和控制流。用途从数据流图DFD转换得到作为系统概要设计的主要工具。3. 详细设计(1) 设计目标正确性实现模块功能的算法要逻辑上正确。清晰性算法描述要简明易懂。符合概要设计详细设计不能违背概要设计。(2) 设计步骤1分析并确定输入/输出数据的逻辑结构。2找出输入数据和输出数据之间的对应关系。3依据数据结构推导程序结构。4列出基本操作与条件合理分配到程序结构图。5使用伪码或其他工具编写程序逻辑。4. 详细设计的表示工具(1) 图形工具程序流程图又称为程序框图使用方框、菱形、箭头表示程序逻辑。NSNassi-Shneiderman流程图强制使用结构化构造。PADProblem Analysis Diagram图结构清晰直观易懂支持递归适合自顶向下开发。(2) 表格工具用表格列出各种可能的操作和相应的条件。(3) 语言工具PDLProgram Design Language程序设计语言伪码形式描述模块的具体算法语法开放支持结构化编程可用于自动生成代码。3.1.3.结构化编程SP结构化编程Structured Programming, SP属于“面向过程”方法的改进强调程序的可读性和可维护性主要采用顺序、选择、循环三种基本控制结构。(1) 设计方法自顶向下、逐步求精将程序分解为功能模块逐步细化实现。模块化设计各模块独立编写后组合成完整系统。(2) 主要原则程序 (算法) (数据结构)算法独立于数据结构以函数或过程为主。32 字原则自顶向下逐步细化从高层设计到具体实现逐步分解问题。清晰第一效率第二优先考虑代码可读性再优化性能。书写规范缩进格式保证代码风格一致易于维护。基本结构组合而成程序由顺序、选择、循环三大基本控制结构构成。3.1.4数据库设计数据库设计是指基于用户需求在某一数据库管理系统DBMS上进行数据库结构的设计和实现。数据库设计通常包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施及运行维护等阶段。设计阶段内容需求分析明确数据需求概念结构设计使用E-R图建模逻辑结构设计关系模型转换物理结构设计选择存储方式实施与运行维护数据库部署和优化1. 概念结构设计概念结构设计是数据库设计的第一步主要目的是建立概念数据模型用以抽象现实世界中的信息结构、信息流动和数据关联。常用E-R 图实体-联系图Entity-Relationship Diagram进行表示。(1) E-R 图的基本组成表- E-R 图的基本组成E-R 组件图形表示说明实体Entity矩形□现实世界中的对象如“学生”、“教师”属性Attribute椭圆○描述实体特征如“学号”、“姓名”联系Relationship菱形◇反映实体之间的关系如“选修”、“授课”主属性Primary Attribute下划线作为唯一标识的属性如“学号”(2) 实体Entity现实世界中可区分的事物如“学生”、“教师”。具有一组属性例如学生Student: 学号、姓名、性别、班级课程Course: 课程编号、课程名称、学分E-R 图表示: 用矩形框表示实体框内写明实体名。(3) 属性Attribute用于刻画实体的特征例如学生的属性: 学号、姓名、年龄课程的属性: 课程编号、学分属性分类简单属性不可分割的基本属性如学号、姓名。复合属性由多个子属性组成如“地址”可分为“省市区详细地址”。多值属性一个实体可能有多个值如“学生的电话号码”。派生属性可从其他属性计算得出如“年龄”可由“出生日期”计算。E-R 图表示: 用椭圆表示属性并通过无向边连接到对应的实体或联系。(4) 联系Relationship实体之间的关联如学生与课程存在“选修”关系。教师与课程存在“授课”关系。E-R 图表示: 用菱形框表示联系并用无向边连接相关实体。2. E-R 图中的联系约束E-R 图中定义了三种联系的数量约束表- E-R 图的联系约束类型表示方式示例一对一1:1A ↔B一个学校只有一个校长一个校长只在一个学校一对多1:NA ↔B, B ↔1一个专业有多个学生每个学生只能属于一个专业多对多M:NA ↔B, B ↔A一个学生可以选多门课程每门课程可由多个学生选修示例分析一对一1:1: 学校与校长一对多1:N: 专业与学生多对多M:N: 课程与学生3. E-R 图的作图步骤1确定所有实体集找出需要建模的对象如“学生”、“课程”。2选择实体的属性列出实体的详细信息如“学号”、“姓名”。3确定实体之间的联系分析业务关系如“学生选修课程”。4标明关键字主键在关键属性上加下划线如“学号”。5标注联系类型在E-R 图的联系线上标注 1, N, M。3.2面向对象方法★★★面向对象(OO) 开发方法以“对象”为核心强调系统应映射现实世界使对象及其关系能真实反映问题域。其关键特征包括 封装、继承、多态并采用用例驱动、体系结构为中心、迭代与增量式的开发过程涵盖需求分析、系统分析、系统设计、系统实现四个阶段。3.2.1.面向对象分析 (OOA)OOA 主要在系统业务调查后按照面向对象思想分析问题。其核心模型包括 主题层、对象类层、结构层、属性层、服务层通过分类结构(泛化-特化) 和组装结构 (整体-部分) 描述对象之间的关系。OOA的基本原则1抽象提取事物的本质特征形成概念模型包含数据抽象和过程抽象。2封装隐藏对象的内部细节仅暴露必要接口。3继承特殊类自动拥有一般类的所有属性和方法避免重复定义。4分类将具有相同特征的对象归为一类。5聚合(又称组装)将复杂事物拆解为多个简单部分。6关联表示对象之间的联系反映现实中的逻辑关系。7消息通信对象通过消息进行交互而非直接访问彼此数据。8粒度控制在不同层次上控制细节关注点便于系统分析。9行为分析关注问题域中各事物的交互行为。OOA基本步骤1确定对象和类抽象现实世界中的事物形成对象和类。2确定结构定义类间的泛化-特化 (继承) 关系 和 整体-部分 (聚合) 关系。3确定主题形成系统的整体分析模型。4确定属性定义对象的数据元素。5确定方法定义对象收到消息后的处理方式。3.2.2.面向对象设计OOD面向对象设计Object-Oriented Design, OOD是面向对象分析OOA的延续基于抽象、封装、继承和多态等思想强调通过类来封装数据和行为。1. 主要特点抽象提取对象的本质特征忽略非本质细节。封装将数据和操作封装在对象中保护对象内部状态。继承子类继承父类的属性和方法提高代码复用性。多态相同接口可由不同类实现提高系统灵活性和可扩展性。2. 类的分类在OOD中类可分为以下三种类型实体类Entity Class代表系统中的业务实体需要持久化存储。例如在线教育平台中的“学员类”“课程类”。特点主要用于存储数据长期存在。采用业务领域术语命名通常是名词。一般有属性不一定有方法。控制类Control Class负责业务逻辑和用例的控制行为。例如“身份验证器”控制身份验证逻辑。特点负责协调实体类和边界类的交互。主要封装行为通常是动宾结构的短语动词名词。一般没有属性但一定有方法。生命周期短通常在用例执行后销毁。边界类Boundary Class负责系统与外部交互如用户界面、API接口等。例如窗口、报表、打印机接口、传感器。特点位于系统边界处理输入/输出。使系统与外部环境变更解耦减少影响。既可以有属性也可以有方法。3. 设计原则OOD遵循以下核心原则高内聚低耦合保持类的单一职责减少类之间的依赖。开闭原则OCP对扩展开放对修改封闭。单一职责原则SRP每个类只负责一个功能。接口隔离原则ISP避免不必要的接口依赖。依赖倒置原则DIP面向接口编程避免直接依赖具体实现。4. 设计步骤确定对象和类分析系统中的业务对象并归类成实体类、控制类或边界类。确定类的结构定义类的继承关系泛化-特化和组合关系整体-部分。确定类的职责明确每个类的责任确保高内聚。设计类的属性和方法定义类的状态属性和行为方法。定义交互关系确定类之间的关联和消息通信方式。3.2.3.面向对象编程OOP面向对象编程Object-Oriented Programming, OOP是一种编程范式强调通过对象和类来组织代码。OOP 的核心概念包括对象、类、继承、多态和消息传递。1. OOP 的基本思想通过类对现实世界的事物进行抽象封装其属性数据和行为方法。对象是类的实例多个对象之间通过消息传递进行交互。OOP 使程序结构更符合人类思维方式增强代码的可读性和可维护性。2. OOP 的三大特性封装Encapsulation将数据和行为封装在类中隐藏内部实现只暴露必要的接口。优点提高代码模块化便于维护和扩展。实现高内聚、低耦合减少组件间的依赖。保护数据不被外部修改增强安全性。继承Inheritance允许子类复用父类的属性和方法减少代码冗余提高复用性。分类单继承子类只能继承一个父类。多继承子类可以继承多个父类部分语言支持。继承方式取代继承子类完全替换父类的行为。包含继承子类继承父类的行为并扩展新功能。受限继承对子类继承的部分进行限制。特化继承子类在父类基础上进行更具体的扩展。多态Polymorphism不同的对象对相同的消息方法调用作出不同的响应。实现方式方法重写Override子类重写父类的方法实现不同的行为。方法重载Overload同一个类中多个方法名称相同但参数不同。优点代码更加通用提高扩展性。降低代码耦合使系统更加灵活。3. OOP 的核心要素对象程序的基本单元由属性数据和方法行为组成。类对同类对象的抽象定义了一组对象的属性和行为。消息传递对象之间通过方法调用进行通信模拟现实世界的交互。3.2.4.数据持久化与数据库在面向对象开发方法中对象默认只存在于内存中无法永久保存。因此需要通过数据持久化Persistence技术将对象的状态存储到数据库或其他持久化存储设备中以便后续使用。1. 数据持久化与持久层对象持久化将内存中的对象数据存入数据库以便长期存储和后续访问。持久层Persistence Layer在多层架构中专注于数据存储和访问解耦业务逻辑层与数据存储层提高系统灵活性和可维护性。2. 关系型数据库与对象关系映射ORM关系型数据库RDBMS目前主流的数据存储方式包括DB2、Oracle、SQL Server、MySQL 等。采用结构化查询语言SQL进行数据操作。对象/关系映射Object-Relational MappingORM由于面向对象编程OOP中的对象结构与关系数据库的表结构不同需要使用ORM技术来实现数据映射。ORM 框架负责自动转换对象与数据库表之间的数据简化数据库操作。3. 主要持久化框架1Hibernate全自动ORM 框架对JDBC 进行轻量级封装。通过POJO普通 Java 对象与数据库表映射无需手写 SQL 语句。特点自动生成SQL 语句并执行提高开发效率。提供缓存和事务管理优化数据库性能。2iBatisMyBatis主要实现Java对象到SQL的映射开发者手动编写SQL可以灵活控制查询逻辑。特点相比Hibernate 更轻量级上手快。适合需要高性能、复杂 SQL控制的项目。3JDOJava Data Object由SUN 公司制定的 Java 对象持久化标准 API。提供透明的对象存储无需开发者直接编写数据库访问代码。特点比JDBC 更通用不仅支持关系型数据库还支持XML、对象数据库、普通文件等存储方式。适用于需要高度可移植性