结构化方法与面对对象方法之比较

本文详细介绍了结构化方法和面向对象方法的基本原理、特点及应用步骤,并通过比较分析了两种方法在基本思想、分析方法及程序设计方法等方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    从整体上来说,结构化方法,是针对数据流建立数据模型,功能模型和行为模型,结构化设计也就是基于数据流的设计方法。而面向对象方法,则是尽可能的模拟人类习惯的思维方式,使开发软件的方法与过程尽可能的接近人类认识世界解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。将数据与施加在该数据之上的操作封装成类来模拟现实生活中的“对象”。

       接下来我们进一步了解一些结构化方法和面对对象方法的实质是什么,从它们的分析方法中了解到它们各自的优势与劣势。

      结构化方法是什么?

    结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽等。针对软件生存周期各个不同的阶段,它有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。

 

   结构化分析的常用手段:

 

       一:数据流图:

    数据流图是SA方法中用于表示逻辑系统模型的一种工具,它从数据传递和加工的角度,以图形的方式来刻画数据流从输入到输出的变换过程。

 

        二:数据字典

         数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素定义的集合。数据字典是结构方法的核心。数据字典有以下几个条目:数据项条目、数据流条目、文件条目和加工条目。

        三:结构化语言

         采用一种介于自然语言和形式化语言之间的结构化语言来描述加工逻辑,既可以像自然语言那样最方便,也可以像形式化语言一样能够精确描述事物,且被计算机易于处理。

         四:判定表

         有些加工的逻辑用语形式不容易表达清楚,而用表的形式则一目了然。如果一个加工逻辑有多个条件、多个操作,并且在不同的条件组合下执行不同的操作,就可以使用判定表来描述。

 

         五:判定树

          判定树和判定表没有本质的区别,可以用判定表表示的加工逻辑都可以用判定树来表示。

 结构化分析的步骤:

       ①分析当前的情况,做出反映当前物理模型的DFD

   ②推导出等价的逻辑模型的DFD

   ③设计新的逻辑系统,生成数据字典和基元描述;

   ④建立人机接口,提出可供选择的目标系统物理模型的DFD

   ⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;

   ⑥选择一种方案;

   ⑦建立完整的需求规约。

   结构化方法的特点:

      ①把一个复杂过程用多个单个小过程来实现;

      ②用数据流图,可以完成整个分解过程;

      ③结果的唯一性,同一个问题,不同的人分解出来的结果基本是一样的。也即,用结构化方法,基本上是有标准答案的;

      ④较适合初学者学习,一个连续的处理过程。

     面对对象方法是什么?

     面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OOObject-Oriented)方法,是建立在对象概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

   面对对象方法的基本概念:

        一:对象

        对象是要研究的任何事物。它能表示有形的实体,也能表示无抽象的规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。

 

        二:类

        类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。

        三:继承

    继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。

         四:封装性

    封装是通过限制只有特定类的对象可以访问这一特定类的成员,而它们通常利用接口实现消息的传入传出。具备封装性(Encapsulation)的面向对象程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传送消息给它。

         五:多态

    多态(Polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。

        六:抽象性

    抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。

  面对对象方法的基本步骤:

    (1)分析确定在问题空间和解空间出现的全部对象及其属性;
    (2)确定应施加于每个对象的操作,即对象固有的处理能力;
    (3)分析对象间的联系,确定对象彼此间传递的消息;
    (4)设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
    (5)分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
    (6)确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
    (7)设计每个类关于对象外部特性的描述;
    (8)设计每个类的内部实现(数据结构和方法);
     (9)创建所需的对象(类的实例),实现对象间应有的联系(发消息)。

       面向对象的特点:

        ①基于映射:把现实世界的工作过程或系统,用代码系统中的相对应的元素模拟出来,就完成了软件的设计和开发;

        ②事物→对象;事物的特征→对象的属性;事物的行为→对象的方法;事物之间的信息交换与协同→类方法调用;

        ③由于现实事物的复杂性,为了要更好地完成上面的模拟/映射,需要从多个角度描述系统或过程;

        ④静态关系:多态、继承、聚合、状态转换;

        ⑤动态关系:用例、活动、序列、协作。

        ⑥结果的唯一性,同一个问题,有经验的人和没有经验的人,进行面向对象设计时,结果可能会判别很大;

        ⑦适用范围:设计复杂系统、设计高质量系统、设计与现实世界对应程度比较大的系统。

 

      结构化方法与面对对象方法比较

      基本思想的区别: 

   结构化思想和面向对象思想虽都产生于20世纪60年代,但它们却存在根本差别。

   结构化方法承袭了传统的编程思想与编程方法,以计算机的计算功能为前提。编写程序的主要目的是数值计算、问题求解。模块是结构化编程的基本单位,但计算方法(简称为算法)是程序的核心。结构化方法只是对传统程序结构的改进,用三种基本结构来组织程序,使程序结构更为清晰,程序开发更有序、更容易。 结构化方法中模块只是程序一个功能(机械)部件,在程序中完成特定功能或解决特定问题。因此程序中模块通常用函数(function)来实现,完成对输人数据的加工和计算。

   面向对象思想以计算机信息处理和信息管理的功能为前提,模拟客观世界的事物及事物之间的联系。对象技术的关键概念是对象、消息、类,关键机制包括封装、多态和继承。与结构化方法相比,对象是软件模块化的一种新的单位,它代替了基于功能分解方法中的所谓“模块”等传统的技术。面向对象技术是通过对对象的管理(创建、运行、消亡)以及对象之间的通讯来实现程序功能。面向对象中的对象则是一个活体(生命体),它将数据和过程封装在一起,这同传统的方法中将数据和过程分别对待和处理形成了鲜明的对比。对象代表现实世界中真实对象的结构和交互作用,在程序运行期间有它的生命周期,并通过消息相互通信协同完成程序功能。

   分析方法的区别:

    结构化分析方法的核心思想是:自顶向下,逐层分解,逐步求精。结构化分析方法体现在数据流图和系统结构图的分解过程中。数据流图的分解从顶层图开始,按照每个加工对应一个子图的分解原则,逐层分解为0层图、1层图等。系统结构图则是从主模块开始,逐层分解为算法更为简单、更加容易管理和实现的子模块。        结构化分析方法承袭了传统数学问题求解的思想,采用了逐步求精的数学演绎方法,有利于数据的加工、计算等问题的解决。但逐步求精的方法不能提供解决一个具体问题的系统的策略或方法。有时,对于某些问题不存在一个自顶向下的方法。结构化程序分析方法对小规模的程序是一种有效的方法,但将它推广至大规模的系统开发中往往会失效,开发人员无法使用这一方法来很方便地重用以前程序的可重用成份。

 

   面向对象分析则是采用了另一种自底向上的化解复杂性的方法:抽象。通过抽象,得到系统的一个简化模型,其中强调系统中某属性细节,而忽略其它的属性。面向对象分析存在三个层次的抽象:第一,识别对象及其属性和方法,这是客观世界事物的抽象;第二,对对象进行层层归类,对客观事物相互关系的抽象,如把相似对象归为一类,或把子类归到父类,或把局部类归整体类;第三,将对象和类进一步抽象归到某个主题,便于对类和对象的定义和管理。

      面向对象方法的抽象机制提供了为复杂的软件系统建模更为自然的方法,特别是能很好地把握对象之间复杂的相互关系,因此面向对象分析技术更加适用于复杂的软件系统的分析。

      程序设计方法的区别:

       结构化程序设计方法与分析方法思路相反,采用了自底向上的设计思想。首先设计底层模块,确定模块内部算法,设计模块内部程序,并进行单元测试。模块完成之后,再进行模块之间的组装,进行集成测试。待模块集成测试完成之后,进行确认测试和系统测试,完成设计和调试任务。

      结构化方法的实质是问题求解,即结构化程序是由算法决定的,而算法是程序员分析设计的。因此结构化方法中,程序的执行过程主要是由程序员控制,而不是由用户控制。该方法比较适合大型工程计算、实时数据的跟踪处理、各种自动控制系统等等。

      面向对象程序设计方法采用了自顶向下的设计思想,先设计父类,再设计子类,并继承父类属性和方法。对象是最后在程序运行过程中动态生成。在设计类的同时,另一任务是消息的设计。并将消息与类中的方法有机联系起来,以便对象在运行过程中能相互通信,共同实现软件设定的功能。消息类似于传统程序设计语言中的函数调用,二者的主要区别是函数调用中所执行的函数是一个单一、公共的实现,而对消息的响应可以不同回答,这要根据具体对象的方法来确定。这就是面向对象程序设计思想的多态机制。

     面向对象方法中,程序员设计的是对象属性及操作方法,但在什么时间、使用什么方式操作对象则是完全由用户交互控制。在互联网时代,计算机已经由一个生产工具逐步演变成一个生活工具,出现了许多完全由用户控制程序执行过程的应用软件,比如大型游戏软件以及各类管理信息系统软件。这些软件中各种关系比较复杂,适宜使用面向对象的方法来开发。

    

      举个例子,要发广告邮件,广告邮件列表存在数据库里面。

      倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。

       如果考虑面向对象方法来做,就不能什么代码都塞到main过程里面,假设我们设计三个类:

                   一个类是负责读取数据库,取邮件地址,调用qmail的sendmail命令发送;

                   一个类是读邮件内容,MIME编码成HTML格式的,再加上邮件头;

                   一个主类负责从命令读参数,处理命令行参数,调用发email的类。

                    把一件工作按照功能划分为3个模块分别处理,每个类完成一件模块任务。

   总而言之,开发者在开发实践中, 从实际出发, 考虑执行效率、开发者的技术水平、系统规模、是否为易需求变化的系统等因素, 尽量利用 它们各自的优点, 避免他们的缺点。如对于开发一些小型嵌入式实时监 控系统或同等稳定小系统, 可用结构化方法;对于开发入门者, 使用结 构化方法和面向对象方法相结合;对于大型系统或者需求易变系统, 使用面向对象方法。根据实际出发, 选取合适的软件开发方法, 达到最佳的开发效益定义和管理。

 

转载于:https://www.cnblogs.com/notbigHT/p/6181695.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值