文章目录
- 一、 构化分析与设计
- 2. 结构化分析
- 3. 总体设计
- 4. 详细设计
- 二、 数据库分析与设计
- 2. 需求分析
- 3. 概念结构设计
- 4. 逻辑结构设计
- 5. 数据库的物理设计
- 6. 数据库的实施与维护
- 三、 面向对象分析与设计
- 2. 需求说明
- 3. 建模用例
- 4. 建模活动
- 5. 设计类图
- 6. 建模对象状态
- 7. 建模交互
- 四、 算法分析与设计
- 2. 算法设计与实现
- 五、 面向对象的程序设计与实现
- 2. 设计模式的应用
一、 构化分析与设计
结构化分析:将数据和处理(加工)作为分析对象,数据的分析结果表示了现实世界中实体的属性及其之间的相互关系,而处理的分析结果则展现了系统对数据的加工和转换。
1. 需求说明
在这个阶段,主要涉及收集、分析和明确系统的功能和非功能需求。需求说明应该包括业务需求、功能需求和非功能需求,并且需要明确各个需求的优先级和约束条件。
2. 结构化分析
在这个阶段,重点是使用结构化的方法对需求进行分解和建模。常用的技术包括数据流图、数据字典和实体关系图等。通过分析数据流以及数据之间的转换关系,建立起整个系统的功能模型。;结构化分析的最终结果需要得到系统的数据流图、数据字典和加工说明。
根据需求说明,首先界定系统的边界,由此可以得出系统不完整的第 0 层 DFD
数据流图;然后,在 0 层 DFD
图上分析外部实体与系统间的数据流,补充数据流所得完整的 0 层 DFD
数据流图;随后,对 0 层 DFD
数据流图进行进一步细化。细化完成后,对得到的数据流图进行转化,从而形成系统的总体设计。但在转换之前,应该对数据流图中的数据流采用数据字典进行详细的说明。
在实际使用 DFD 进行数据流建模时,需要注意以下原则:
- 父图和子图必须平衡
- 加工和数据流的正确使用
- 幅图中的图元个数控制在 7 ± 2 7 ± 2 以内
- 数据流图中最底层的加工必须有加工说明
- 加工处理说明和数据流图中加工涉及的元素保持一致
- 每个数据流和数据存储都要在数据字典中有定义,数据字典包括各层数据流图中数据元素的定义。
3. 总体设计
在这个阶段,关注的是系统的整体结构和组件之间的关系。基于结构化分析的结果,将系统划分为子系统或模块,并确定它们之间的接口和交互方式。此外,还需要考虑系统的架构、数据库设计、安全性和性能等方面的问题。
由于数据流呈现了事务型的特性,因此可采用事务型的变换方式对数据流图进行变换,系统总体设计模型可以采用层次图、HIPO
图和结构图来表达。总体设计给出了数据流图中的各个处理转换为模块后模块与模块之间的调用关系,后续需要根据总体设计给出模块的详细设计。
4. 详细设计
在这个阶段,目标是确定怎样具体地实现所要求的系统,将总体设计进一步细化,并生成具体的设计文档。这包括类和对象的设计、接口定义、算法设计、数据库表结构设计等。详细设计需要考虑代码的可读性、可测试性、可扩展性和可维护性等方面。
完成对每一个模块的详细设计,可以得出对目标系统的精确描述,即可将详细设计转换为程序代码,从而实现整个系统。
二、 数据库分析与设计
数据库设计的任务:针对一个给定的应用环境,在给定的(或选择的)硬件环境和操作系统及数据库管理系统等软件环境下,创建一个性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理数据,满足各类用户的需求。合理的数据库结构是数据库应用系统性能良好的基础和保证。
1. 数据库设计的策略与步骤
(1)数据库设计的策略
自顶向下(Top
Down):从一般到特殊的开发策略。从一个企业的高层管理着手,分析企业的目标、对象和策略,构造抽象的高层数据模型,然后逐步构造越来越详细的描述和模型(子系统的模型),模型不断地扩展细化,直到能识别特定的数据库及其应用为止。
自底向上(Bottom
Up):采用与抽象相反的顺序进行。从各种基本业务和数据处理着手,即从一个企业的各个基层业务子系统的业务处理开始,进行分析和设计,。然后将各子系统进行综合和集中,进行上一层系统的分析和设计,将不同的数据进行综合,最后得到整个信息系统的分析和设计。
(2)数据库设计的步骤
①
用户需求分析:数据库设计人员采用一定的辅助工具对应用对象的功能、性能和限制等要求所进行的科学分析。
②
概念设计:概念结构设计是对信息分析和定义,如视图模型化、视图分析和汇总。该阶段对应用对象精确地进行抽象和概括,以形成独立于计算机系统的企业信息模型。描述概念模型较理想的是采用
E-R 方法。
③ 逻辑设计:将抽象的概念模型转化为与选用的 DBMS
产品所支持的数据模型相符合的逻辑模型,它是物理设计的基础,包括模式初始设计、子模式设计、应用程序设计、模式评价以及模式求精。
④
物理设计:逻辑模型在计算机中的具体实现方案。当各阶段发现不能满足用户需求时,均需返回到前面适当的阶段,进行必要的修正。如此经过不断地迭代和求精,直到各种性能均能满足用户的需求为止。
2. 需求分析
(1)需求分析的任务、目标及方法
任务:综合各个用户的应用需求,对现实世界要处理的对象(组织、部门和企业等)进行详细调查,在了解现行系统的情况,确定新系统功能的过程中,收集支持系统目标的基础数据及处理方法。
分方:自顶向下【(Structured
Analysis,SA)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述】和自底向上两类方法。
重点:调查组织机构情况、调查各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界,以此获得用户对系统的信息要求、处理要求、系统要求。
(2)需求分析阶段的文档
将需求调查文档化,文档既要被用户所理解,又要方便数据库的概念结构设计。需求分析阶段的成果是系统需求说明书
,主要包括:数据流图、数据字典、各种说明性表格、统计输出表和系统功能结构图等。系统需求说明书是以后设计、开发、测试和验收等过程的重要依据。
3. 概念结构设计
数据库概念结构设计阶段是在需求分析的基础上,依照需求分析中的信息要求对用户信息加以分类、聚集和概括,建立信息模型,并依照选定的数据库管理系统软件转换成为数据的逻辑结构,再依照软/硬件环境,最终实现数据的合理存储,这一过程也称为数据建模。
目标:产生反映系统信息需求的数据库概念结构,即概念模式,概念结构是独立于支持数据库的
DBMS 和使用的硬件环境的。
(1)概念结构设计策略与方法
概念结构设计:现实世界的事物纷繁复杂,即使是对某一具体的应用,由于存在大量不同的信息和对信息的各种处理,也必须加以分类整理,理清各类信息之间的关系,描述信息处理的流程。
概念结构设计的策略通常有:自顶向下、自底向上、逐步扩张和混合策略。在实际应用中这些策略并没有严格的限定,可以根据具体业务的特点选择。
(2)用 E-R 方法建立概念模型
E-R
图的设计要依照上述的抽象机制,对需求分析阶段所得到的数据进行分类、聚集和概括,确定实体、属性和联系。概念结构的具体工作步骤包括:选择局部应用、逐一设计分
E-R 图和 E-R 图合并。
4. 逻辑结构设计
是在概念结构设计的基础上进行数据模型设计,可以是层次模型、网状模型和关系模型,主要工作步骤包括:确定数据模型、将E-R图转换成为指定的数据模型、确定完整性约束和确定用户视图。
(1)E-R图关系模式的转换
E-R
方法所得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为适合关系数据库系统的处理,必须将
E-R
图转换成关系模式。E-R 图是由实体、属性和联系三要素构成
,而关系模型中只有唯一的结构——关系模式,通常采用以下方法加以转换:
- 实体向关系模式的转换
实体名对应关系模式的名称,实体的属性转换成关系模式的属性,实体标识符就是关系的码(键)。 - 联系向关系模式的转换
一对一(1 : 1)联系的转换(两种方式):将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性包括该联系所关联的两个实体的码及联系的属性,关系的码取自任一方实体的码;将联系归并到关联的两个实体的任一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性即可,归并后的实体码保持不变。
一对多(1 : n)联系的转换(两种方式):将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码;将联系归并到关联的两个实体的多方,给待归并的多方实体属性集中增加一方实体的码和该联系的属性即可,归并后的多方实体码保持不变。
多对多(m : n)联系的转换:只能转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组。
(2)关系模式的规范化
由 E-R
图转换所得的初始关系模式并不一定能完全符合要求,还可能会有数据冗余、更新异常存在,这就需要经过进一步的规范化处理,步骤如下:
① 根据语义确定各关系模式的数据依赖
② 根据数据依赖确定关系模式的范式
③ 如果关系模式不符合要求,要根据关系模式的分解算法对其进行分解,达到
3NF、BCNF 或 4NF
④ 关系模式的评价及修正
(3)确定完整性约束
包括:数据项的约束、表级约束及表间约束,可以参照SQL标准来确定不同的约束,如:检查约束、主码约束和参照完整性约束,以保证数据的正确性。
(4)用户视图的确定
根据数据流图及用户信息建立视图模式,提高数据的安全性和独立性。
- 根据数据流图确定处理使用的视图
- 根据用户类别确定不同用户使用的视图
5. 数据库的物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。数据库的物理设计:为一个给定的逻辑数据模型设计一个最适合应用要求的物理结构的过程。
在数据库的物理结构中,数据的基本单位是记录
,记录是以文件的形式存储的,一条存储记录就对应着关系模式中的一条逻辑记录,在文件中还要存储记录的结构。
一般来说,物理设计包括确定数据分布、存储结构和访问方式的工作。
(1)确定数据分布
从企业计算机应用环境出发,需要确定数据是集中管理还是分布式管理,对于数据如何分布需要从以下几个方面考虑:
①
根据不同应用分布数据:企业的不同部门一般会使用不同数据,将与部门应用相关的数据存储在相应的场地,使得不同的场地上处理不同的业务,对于应用多个场地的业务,可以通过网络进行数据处理。
②
根据处理要求确定数据的分布:对于不同的处理要求,也会有不同的使用频度和响应时间,对于使用频度高、响应时间短的数据,应存储在高速设备上。
③
对数据的分布存储必然会导致数据的逻辑结构的变化,要对关系模式做新的调整,回到数据库逻辑设计阶段做必要的修改。
(2)确定数据的存储结构
指数据文件中记录之间的物理结构。在文件中,数据是以记录为单位存储的,可以是顺序存储、哈希存储、堆存储和
B* 树存储等,要根据数据的处理要求和变更频度选定合理的物理结构。
为提高数据的访问速度,通常会采用索引技术。在物理设计阶段,要根据数据处理和修改要求,确定数据库文件的索引字段和索引类型。
(3)确定数据的访问方式
数据的访问方式是由其存储结构所决定的,采用什么样的存储结构,就使用什么样的访问方式,数据库物理结构主要由存储记录格式、记录在物理设备上的安排及访问路径(存取方法)等构成。
- 存储记录结构设计
包括:记录的组成、数据项的类型、长度和数据项间的联系,以及逻辑记录到存储记录的映射。在设计记录的存储结构时,并不改变数据库的逻辑结构,但可以在物理上对记录进行分割。
当多个用户同时访问常用数据项时,会因访盘冲突而等待。如果将这些数据分布在不同的磁盘组上,当用户同时访问时,系统就可并行地执行 I/O,减少访盘冲突,提高数据库的性能。对于常用关系,最好将其水平分割成多个裂片,分布到多个磁盘组上,以均衡各个磁盘组的负荷,发挥多磁盘组并行操作的优势。 - 存储记录布局
就是确定数据的存放位置。存储记录作为一个整体,如何分布在物理区域上,是数据库物理结构设计的重要一环。聚簇功能可以大大提高按聚簇码进行查询的效率,不仅可用于单个关系,也适用于多个关系,建立聚簇索引的原则如下: - 聚簇码的值相对稳定,没有或很少需要进行修改
- 对应每个聚簇码值的平均元组数既不太多,也不太少
- 表主要用于查询,并且通过聚簇码进行访问或连接是该表的主要应用
- 存取方法的设计
为存储在物理设备(通常是外存储器)上的数据提供存储和检索的能力。存取方法包括:存储结构【限定了可能访问的路径和存储记录】和检索机制【定义每个应用的访问路径】。
存取方法是快速存取数据库中数据的技术。数据库系统是多用户共享系统,对同一个关系建立多条存取路径才能满足多用户的多种应用要求。为关系建立多种存取路径是数据库物理设计的另一个任务,在数据库中建立存取路径最普遍的方法是建立索引,确定索引的一般顺序如下:
① 首先可确定关系的存储结构,即记录的存放是无序的,还是按某属性(或属性组)聚簇存放。
② 确定不宜建立索引的属性或表:太小的表、经常更新的属性或表、属性值很少的表、过长的属性、一些特殊数据类型的属性(大文本、多媒体数据)和不出现或很少出现在查询条件中的属性不宜建立索引。
③ 确定宜建立索引的属性:关系的主码或外部码、以查询为主或只读的表、范围查询、聚集函数或需要排序输出的属性可以考虑建立索引。
索引一般还需在数据库运行测试后,再加以调整。在 RDBMS 中,索引是改善存取路径的重要手段。使用索引的最大优点是可以减少检索的 CPU 服务时间和 I/O 服务时间,改善检索效率。但是,不能对进行频繁存储操作的关系建立过多的索引,因为过多的索引也会影响存储操作的性能。
6. 数据库的实施与维护
在数据库正式投入运行之前,还需要完成很多工作,如果评价结果不能满足要求,还需要对数据库进行修正设计,直到满意为止。数据库正式投入使用,也并不意味着数据库设计生命周期的结束,而是数据库维护阶段的开始,数据库实施阶段的工作过程如下所示:
(1)数据库的实施
根据逻辑和物理设计的结果在计算机上建立起实际的数据库结构并装入数据进行试运行和评价的过程叫作数据库的实施(或实现)。
- 建立实际的数据库结构
用 DBMS 提供的数据定义语言(DDL)编写描述逻辑设计和物理设计结果的程序(一般称为数据库脚本程序),经计算机编译处理和执行后,就生成了实际的数据库结构,在定义数据库结构时,应包含:数据库模式与子模式,以及数据库空间等的描述;数据库完整性描述;数据库安全性描述;数据库物理存储参数描述。 - 数据的加载
数据库应用程序的设计应该与数据库设计同时进行,应用程序的设计应该包括数据库加载程序的设计。在数据加载前,必须对数据进行整理,在数据加载前要建立严格的数据登录、输入和校验规范,设计完善的数据校验与校正程序,排除不合格数据。 - 数据库的试运行和评价
当加载了部分必须的数据和应用程序后,就可以开始对数据库系统进行联合调试,称为数据库的试运行。测试数据库的运行效率是否达到设计目标,是否为用户所容忍。
测试的目的:为了发现问题,而不是为了说明能达到哪些功能。
一般将数据库的试运行和评价结合起来,目的:测试应用程序的功能。
(2)数据库的维护
只有数据库顺利地进行了实施,才可将系统交付使用。数据库一旦投入运行,就标志着数据库维护工作【包括对数据库的监测和性能改善、故障恢复、数据库的重组和重构】的开始,在数据库运行阶段,对数据库的维护主要由 DBA 完成。
- 对数据库性能的监测和改善
性能可以用处理一个事务的I/O量、CPU时间和系统响应时间来度量。DBA 必须利用系统提供的性能监控和分析工具,经常对数据库的运行、存储空间及响应时间进行分析,结合用户的反映确定改进措施。 - 数据库的备份及故障恢复
数据库是企业的一种资源,在数据库设计阶段,DBA 应根据应用要求制定不同的备份方案,保证一旦发生故障能很快将数据库恢复到某种一致性状态,尽量减少损失。数据库的备份及故障恢复方案,一般基于 DBMS 提供的恢复手段。 - 数据库重组和重构
数据库运行一段时间后,由于记录的增、删、改,数据库中物理存储碎片记录链过多,影响了数据库的存取效率,需要对数据库进行重组【指在不改变数据库逻辑和物理结构的情况下去除数据库存储文件中的废弃空间以及碎片空间中的指针链,使数据库记录在物理上紧连】和重构【指当数据库的逻辑结构不能满足当前数据处理的要求时对数据库的模式和内模式修改】。
注:由于数据库重构的困难和复杂性,数据库的重构一般都在迫不得已的情况下才进行。
三、 面向对象分析与设计
面向对象开发方法将问题和问题的解决方案组织为离散对象的集合,数据结构和行为都包含在对象的表示中。面向对象方法中分析和设计有时会存在一部分重叠,不是完全独立的活动。在迭代开发中,不严格区分分析、设计和实现,而是每次迭代不同程度地进行精化。
1. 面向对象分析与设计的步骤
面向对象分析包括:建模系统功能,发现并组织业务对象,组织对象并记录其关系。
面向对象设计的目的:说明系统的对象和消息,包括:精化用例模型以反映实现环境,建模支持用例情景的对象交互、行为和状态,修改对象模型以反映实现环境。
面向对象分析关键步骤包含:建模系统功能;定义领域模型;定义交互、行为和状态;定义设计类图
2. 需求说明
在这个阶段,主要涉及收集、分析和明确系统的功能和非功能需求。需求说明应该包括业务需求、功能需求和非功能需求,并且需要明确各个需求的优先级和约束条件。
3. 建模用例
用例图描述系统与外部系统和用户的交互,以图形化的方式描述了谁将使用系统,以及用户期望以什么方式与系统交互。用例描述也用于以文本化的方式描述每个交互步骤的顺序,用例模型作为后续面向对象分析和设计的基础。
用例建模技术用于描述系统使用的模型,其建模过程是以用户为中心的建模过程,先识别问题中的参与者,再根据参与者确定每个参与者的用例、定义用例之间的关系、确定模型的过程。
4. 建模活动
在用例建模完成后,对每个用例进行细化,建模活动图【描述一个业务过程或者一个用例的活动的顺序,也可以用于系统的建模逻辑】,建模活动图时应该遵循以下原则:
- 用一个活动终止符号结束
- 根据分析决定是否采用泳道
- 从一个作为起点的初始结点开始
- 在并行执行活动的地方添加分叉和汇合
- 从一个动作到另一个动作、决策点或者终点添加一条流
- 为用例的每个主要步骤(或者一个角色发起的每个主要步骤)添加一个动作
- 在流分解成不同的路线的地方添加分支,确保用一个合并将各个流重新合并
5. 设计类图
类图:用于描述系统的对象结构,显示了构成系统的对象类及其之间的关系。
6. 建模对象状态
对象状态:表示对象在其生命期中某一点所处的条件,通过修改对象属性的一个或多个值的事件触发对象状态变化。
状态图:用于建模在生命周期中事件如何改变对象可以经历的各种状态,以及引起对象从一个状态向另一个状态转换的事件。在建模状态图时应该注意遵循原则:
- 状态名称要简单但具有描述性
- 为复杂的实体创建分层的状态图
- 对复合状态,需要对子状态集进行建模
- 避免“奇迹”状态:即只有转换发出而没有任何转换进来的状态,这种状态要么是一个起点,要么就是已经错过了一个或多个转换
- 避免“黑洞”状态:即只有变换进来而没有任何转换发出的状态,这种状态要么由于该状态是一个最终状态,要么就是已经错过了一个或多个转换
7. 建模交互
交互概览图:活动图的变体,描述业务过程中的控制流概览,软件过程中的详细逻辑概览,以及将多个图进行连接,抽象掉了消息和生命线。
序列图:图形化的方式描述了在一个用例或操作的执行过程中对象如何通过消息互相交互,说明了消息在对象之间被发送和接收以及发送的顺序。根据分析设计的迭代演化需求,最初可以绘制系统序列图。系统序列图是一幅描述角色和系统在用例场景下交互的图形。建模序列图应该遵循原则:
- 沿左手边列出用例步骤
- 为持久类和系统类绘制框
- 为清晰起见,添加所需的返回消息
- 添加活动条指示每个对象实例的生命期
- 确定序列图的范围,描述这个用例场景或一个步骤
- 如果范围包括参与者和接口,则绘制参与者和接口类
- 如果需要,为循环、可选步骤和替代步骤等添加框架
- 绘制所需消息,并把每条消息指到将实现响应消息的责任的类上
- 对控制器类及必须在序列中协作的每个实体类,基于它拥有的属性或已经分配给它的行为绘制框
四、 算法分析与设计
1. C 程序设计语言与实现
C
语言:面向过程程序设计中的典型语言,它提供了丰富的数据类型、运算符号和灵活的控制语句,熟悉
C 语言提供的数据类型、运算符号和语句是进行 C
程序设计的最基本要求。合理使用数据类型和控制结构对软件的可维护性、可扩展性有重要作用。
C 语言中的一个核心概念:指针
,是 C 语言的精华部分,它极大地丰富了 C
语言的功能。通过利用指针,可以描述复杂的数据结构,在编程时能很好地利用内存资源,使其发挥最大的效率。运用指针编程是
C 语言最主要的风格之一。
2. 算法设计与实现
(1)算法设计过程
① 理解问题
对于设计算法来说,这是一项重要的技能,明确算法的入口和出口,这是设计算法的切入点。
② 确定相关因素
- 预测所有可能的输入
- 在精确解和近似解间做选择
- 确定适当的数据结构
- 确定算法设计技术
③ 设计算法
根在构思和设计了一个算法之后,必须清楚、准确地将所设计的求解步骤记录下来,即描述算法。描述算法的常用方法有自然语言、流程图、程序设计语言和伪代码等,其中,伪代码是比较合适的描述算法的方法。
④ 证明算法的正确性
可以用循环不变式来证明算法的正确性。
⑤ 分析算法的效率
算法分析主要分析两种效率:时间效率【显示了算法运行得有多快】和空间效率【显示了算法需要多少额外的存储空间】,一般来说,更关注算法的时间效率,一个好的算法首先应该是比同类算法的时间效率高。
⑥ 根据算法编写代码
现代计算机技术还不能将伪代码形式的算法直接“输入”进计算机中,而需要把算法转变为特定程序设计语言编写的程序,算法中的一条指令可能对应实际程序中的多条指令。在把算法转变为程序的过程中,虽然现代编译器提供了代码优化功能,但仍需要一些标准的技巧。
(2)算法问题类型
① 查找问题
在一个数据集合中查找满足给定条件的记录,对于查找问题来说,没有一种算法对于任何情况都是合适的。此外,如果在查找的过程中数据集合可能频繁地发生变化,除了考虑查找操作外,还需要考虑在数据集合中执行插入和删除等操作。
② 排序问题
排序就是将一个记录的无序序列调整成为一个有序序列的过程。排序的一个主要目的是为了进行快速查找,迄今为止,已经发现的排序算法不下几十种,没有一种排序算法在任何情况下都是最好的解决方案。
③ 图问题
算法中最古老也是最令人感兴趣的领域是图问题,很多纷乱复杂的现实问题抽象出的模型都是图结构作为一种通用的、复杂的数据结构,基于图的相关算法也具有十分重要的作用。
有些图问题在计算上是非常困难的,这意味着,在能够接受的时间内,即使用最快的计算机,也只能解决这种问题的一个很小规模的实例。图问题中还有一个奇怪的现象:许多形式上非常类似的问题,解决它们的难度却相差很大。
④ 组合问题
一般都是最优化问题,因此也称为组合优化问题,即寻找一个组合对象,典型的组合优化问题包括:0-1
背包问题、TSP 问题和整数线性规划等。
无论从理论的观点还是实践的观点,组合问题都是计算领域中最难的问题,原因为:
- 随着问题规模的增大,组合对象的数量增长极快,即使是中等规模的实例,其组合对象的数量也会达到不可思议的数量级,产生组合爆炸。
- 还没有一种已知算法能在可接受的时间内精确地求解绝大多数问题。
⑤ 几何问题
处理类似于点、线、面和体等几何对象。几何问题与其他问题的不同之处在于,哪怕是最简单、最初等的几何问题也难以用数字去处理,经典的几何问题包括:最近点对问题和凸包问题。
五、 面向对象的程序设计与实现
1. 设计与实现方法
面向对象程序设计主要是根据问题的详细描述,设计出能够被迅速转换为面向对象程序实现的代码,其设计与实现更为底层,更接近代码。
一般而言,当面临一个具体的问题时,可分为两大阶段:首先根据问题进行设计,其次根据设计进行实现。由于面向对象的实现和面向对象设计之间不存在较大的差异,所不同的是设计更多采用的是
UML
的标准表示,而实现则是采用面向对象语言表达,因此解决问题的重点应放在面向对象的设计上。
熟练并正确地掌握面向对象设计技术,必须很好地体会并理解常用的 23
种设计模式,必须做到:
- 理解类图中每一个类的作用与功能
- 能够使用一种面向对象语言实现设计
- 能够根据设计模式的名称画出其对应的类图
- 能够将现实问题中所描述的各种职责映射到类图中具体的类
2. 设计模式的应用
(1)问题说明
首先需要明确所要解决的问题,并确定是否适合使用设计模式。了解问题的背景、需求和限制条件,明确问题的规模和复杂度。
(2)根据设计模式的名称画出其对应的类图
根据选择的设计模式,画出对应的类图。类图中包括类和它们之间的关系,能够清晰地表示出各个类的作用与功能。
(3)理解类图中每一个类的作用与功能
仔细分析每个类在设计模式中的角色,了解它们的职责和行为。理解每个类是如何协同工作以解决问题的。
(4)能够将现实问题中所描述的各种职责映射到类图中具体的类
将现实问题中所描述的各种职责映射到类图中的具体类。确定哪些类和方法需要创建,以及它们之间的关系是怎样的。
(5)能够使用一种面向对象语言实现设计
一旦分析清楚实际问题的设计结果和原始的设计模式类图中类的对应关系,便可采用一种面向对象语言【C++ 和Java 语言】编写代码实现,并进行测试验证设计是否满足需求和预期效果。