目录
前言:
结构化软件开发方法和面向对象的软件开发方法,既有区别,又是相辅相成的,他们之间并非是相互排斥和相互隔离的,而是相辅相成。先有结构化方法,后又面向对象的方法。
实际上,面向对象方法是在结构化方法基础之上发展起来的,其继承了结构化方法的主要思想和开发流程,如需求分析、架构设计、详细设计、软件编码、测试验证登。同时结构化方法的模块化思想、自顶向下分解的思想、高内聚低耦合的思想都被面向对象的开发方法所继承,结构化的实体关系图和数据流图也以某种形式出现在面向对象的某种UML视图中!!!UML的类图,UML的时序图,UML流程图,都有所有体现。
一、结构化和面向对象方法上的区别
结构化分析方法 (Structural Analysis Method)和面向对象分析方法(Object-Oriented Analysis Method)是常用的软件系统分析方法,但它们在理论、技术和方法论上有一些显著的区别。
-
思想基础:
- 结构化分析方法:结构化分析方法着重于系统内部的数据和处理流程,强调自顶向下的分解和组织。它基于实体关系图、数据流图(Data Flow Diagram)和数据字典(Data Dictionary)、状态图等概念。结构分析方法是站在计算机处理数据的角度诠释现实世界的业务逻辑。 符合C语言编程的习惯:数据结构 + 算法。
- 面向对象分析方法:面向对象分析方法将系统视为一组相互作用的对象,关注对象的属性和行为,并通过类、对象、关系和继承等概念进行建模。它基于用例图(Use Case Diagram)、类图(Class Diagram)和对象交互图(Object Interaction Diagram)等概念。强调自底向上构建系统。符合C++语言编程的习惯:对象、继承、封装、多态
-
抽象和建模:
- 结构化分析方法:结构化分析方法注重对系统中的数据和逻辑功能进行抽象和建模。它使用数据流图和数据字典以及结构图(Structure Chart)等工具,描述数据流的流动和数据处理的逻辑,符合C语言编程的习惯:数据结构 + 算法
- 面向对象分析方法:面向对象分析方法通过识别系统中的对象、类和关系来建立模型。通过用例图、类图和对象交互图等工具,描述系统的功能需求、对象的属性和行为,以及对象之间的关系。
-
模块化与重用性:
- 结构化分析方法:结构化分析方法强调模块化和功能划分,以便于软件的模块划分和重用。它通过功能划分、模块接口定义和结构图等工具来实现模块化设计。
- 面向对象分析方法:面向对象分析方法通过对象和类的抽象和组合,提供了更高程度的模块化和重用性。它通过面向对象的原则和技术,如封装、继承和多态,实现了更灵活和可重用的设计。
-
开发流程:
- 结构化分析方法: 结构化分析方法通常采用瀑布式 的开发流程,强调在需求分析和设计阶段完成详细的系统描述和规范,然后再进行编码和测试。
- 面向对象分析方法: 面向对象分析方法更适合迭代和增量式的开发流程,强调通过快速原型和迭代开发的方式来逐步完善系统的需求和设计。
选择使用结构化分析方法还是面向对象分析方法取决于具体项目和需求的特点,以及团队的背景和技能。
结构化分析方法适用于较小的、相对简单的软件系统,
而面向对象分析方法适用于较大、较复杂且需要高度模块化和重用性的软件系统,并通过对象之间的关系和复用,从而聚合成复杂的大型系统。
一般来说,面向对象分析方法更符合当前软件工程发展的趋势,尤其在面对变化和复杂性增加的情况下更有优势。
二、结构化与面向对象分析方法优缺点比较
结构化分析方法和面向对象分析方法是两种不同的软件开发方法,在软件开发过程中都可以用来分析问题和设计系统。
这两种方法各有优缺点,下面是它们的比较:
- 概念不同:
结构化分析方法关注数据和处理的流程 ,强调系统中数据和处理的组织和设计 ,通过分析数据及其流程来设计系统;而面向对象分析方法则强调真实世界中的对象和这些对象之间的关系 ,通过分析对象及其交互来设计系统。
- 编程方法不同:
结构化方法使用的是自顶向下 的分解与设计,强调功能模块化 、流程控制 、面向过程式 的编程方式;而面向对象方法使用的是自下而上 的设计,强调对象的封装、继承和多态性 等面向对象语言的特性,并通过对象间的通信完成流程控制 ,使得开发更加容易、可维护性更高、代码复用性更好。
- 分析和设计的方式不同:
结构化分析方法通常通过流程图和数据流图 ,以对系统中的各个业务功能 进行分类和展示;而面向对象分析方法则通过UML视图和建模来描述问题和设计的系统。使用的方法不一样,两种方法所获得的结果也不同。
- 应用场景不同:
结构化分析方法通常用于较为简单的系统 ,特别是处理事务数据的系统 ;而面向对象分析方法通常用于较为复杂的系统或科学计算领域,特别是用于在不同对象之间共享和操作数据的系统。
因此,在选择分析方法时,需要考虑系统复杂度、开发人员技能和需求变更等因素。在某些情况下,这两种方法也可结合使用,例如,在大型项目中,可以同时使用结构化分析方法和面向对象分析方法。
三、结构化方法与面向对象方法的融合使用
结构化方法和面向对象方法在软件开发中各有自己的优势,它们的融合使用可以使得软件系统更具灵活性、可维护性和可扩展性。
以下是一些可以将结构化方法和面向对象方法融合使用的实践方法:
-
面向对象分析和结构化设计: 使用面向对象方法进行系统需求分析和概念建模 ,识别系统中的对象、类和它们之间的关系。然后,使用结构化方法进行系统设计,包括数据流图、结构图和流程图等,以更详细地定义系统的数据流和处理流程,以及不同对象在数据流处理中的作用。
-
**结构化模块和面向对象模块的组合:**将系统模块化为独立的结构化模块和面向对象模块,结构化模块处理基础的功能和事务数据,而面向对象模块则处理更复杂的对象和业务逻辑。这样的组合可以提高系统的可维护性和代码复用性。
-
**面向对象技术的结构化实现:**在面向对象方法中,可以使用结构化编程的思想和技术来实现对象的方法和功能。例如,可以使用结构化的控制结构(如条件语句和循环语句)来编写对象的方法,并使用结构化的数据结构(如数组和记录)来表示对象的属性。
-
**使用面向对象语言的结构化风格:**在面向对象语言中,可以使用结构化编程的风格和技术来编写代码。例如,可以使用面向对象语言提供的控制结构和数据结构,以一种结构化的方式编写代码,避免滥用继承和多态等面向对象特性。
-
**过渡策略:**在现有的结构化系统中逐步引入面向对象的新特性和设计方法。可以先对现有系统进行面向对象分析和设计,并逐步将部分结构化模块改写为面向对象模块,以此来逐步迁移到面向对象的开发模式。
总而言之,结构化方法和面向对象方法可以相互融合使用,根据具体情况选择合适的方法和技术,以实现高效、可维护的软件系统。灵活运用这些方法,可以根据项目需求和团队的技术水平做出最佳决策。
结构化方法与面向对象方法的相辅相成完成软件开发。
四、结构化方法与面向对象方法的相辅相成完成软件开发
结构化方法和面向对象方法可以相辅相成地完成软件开发。它们各自具有独特的优势,而结合使用可以弥补彼此的不足,提高软件开发的效率和质量。
下面是一些结构化方法和面向对象方法如何相辅相成的例子:
-
结构化方法的模块化设计与面向对象方法的封装:
- 结构化方法强调模块化设计,将系统划分为相互关联的功能模块,通过清晰的接口和数据流来组织代码。这种模块化设计有助于维护、调试和测试。
- 面向对象方法中的类和对象提供了更好的封装性,可以将数据和方法组织在一起,隐藏内部实现细节并提供良好的抽象。这有助于保持代码的内聚性和可复用性。
-
结构化方法的数据流图与面向对象方法的类图:
- 结构化方法的数据流图可以用于描述系统中数据的流动路径和处理逻辑。这种视图有助于开发人员理解和分析系统的数据流程。
- 面向对象方法的类图则可以用于描述系统中的对象及其之间的关系和行为。这种视图提供了更抽象和更具有模块化特性的描述,有助于开发人员在设计和实现时更好地定义对象的行为和交互。
-
结构化方法的功能分解与面向对象方法的继承和多态:
- 结构化方法通过功能分解将系统划分为更小、更简单的模块,便于开发人员执行任务并确保代码可维护性。
- 面向对象方法中的继承和多态概念允许开发人员从现有类派生新类,并在运行时根据实际情况选择不同的实现,提高代码的灵活性和可扩展性。
通过结合使用这些方法,可以在系统分析、设计和实现的不同阶段应用合适的技术和工具,充分发挥它们的优势,从而在软件开发中得到更好的结果。在实际应用中,根据具体项目的需求和团队的技术水平,灵活选择和调整方法的使用方式,以达到最佳的开发效果。