`
wu-yansheng
  • 浏览: 15802 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

结构化思想和面向对象思想

阅读更多
1 方法背景
结构化思想和面向对象思想虽都产生于20世纪60年代,但它们却存在根本差别。结构化方法承袭了传统的编程思想与编程方法,以计算机的计算功能为前提。编写程序的主要目的是数值计算、问题求解。模块是结构化编程的基本单位,但计算方法(简称为算法)是程序的核心。沃尔森曾提出了一个著名公式:程序=算法+数据结构。结构化方法只是对传统程序结构的改进,用三种基本结构来组织程序,使程序结构更为清晰,程序开发更有序、更容易。

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

2 分析问题的方法
软件分析是软件工程的一个重要阶段。在软件分析阶段,主要确定待开发软件的功能、性能和运行环境约束;同时提出解决问题或实现功能的方法和途径,化解一个系统的复杂性,通常有两种解决方法。化解复杂性的最基本技术是将一个大问题分解为一些容易解决的小问题,待小问题解决了大问题也就解决了。结构化分析方法的核心思想是:自顶向下,逐层分解,逐步求精。结构化分析方法体现在数据流图和系统结构图的分解过程中。数据流图的分解从顶层图开始,按照每个加工对应一个子图的分解原则,逐层分解为0层图、1层图等。系统结构图则是从主模块开始,逐层分解为算法更为简单、更加容易管理和实现的子模块。

面向对象分析则是采用了另一种自底向上的化解复杂性的方法:抽象。通过抽象,得到系统的一个简化模型,其中强调系统中某属性细节,而忽略其它的属性。面向对象分析存在三个层次的抽象:第一,识别对象及其属性和方法,这是客观世界事物的抽象;第二,对对象进行层层归类,对客观事物相互关系的抽象,如把相似对象归为一类,或把子类归到父类,或把局部类归整体类;第三,将对象和类进一步抽象归到某个主题,便于对类和对象的定义和管理。结构化分析方法承袭了传统数学问题求解的思想,采用了逐步求精的数学演绎方法,有利于数据的加工、计算等问题的解决。但逐步求精的方法不能提供解决一个具体问题的系统的策略或方法。有时,对于某些问题不存在一个自顶向下的方法。结构化程序分析方法对小规模的程序是一种有效的方法,但将它推广至大规模的系统开发中往往会失效,开发人员无法使用这一方法来很方便地重用以前程序的可重用成份。面向对象方法的抽象机制提供了为复杂的软件系统建模更为自然的方法,特别是能很好地把握对象之间复杂的相互关系,因此面向对象分析技术更加适用于复杂的软件系统的分析。

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

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

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

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

5 举个例子(转)
使用面向对象的思维方法进行设计,其实是一个把业务逻辑从具体的编程技术当中抽象出来的过程,而这个抽象的过程是自上而下的,非常符合人类的思维习惯,也就是先不考虑问题解决的细节,把问题的最主要的方面抽象成为一个简单的框架,集中精力思考如何解决主要矛盾,然后在解决问题的过程中,再把问题的细节分割成一个一个小问题,再专门去解决细节问题。而一个合理运用面向对象技术进行设计和架构的软件,更是具备了思维的艺术美感。

举个例子,要发广告邮件,广告邮件列表存在数据库里面。倘若用C来写的话,一般会这样思考,先把邮件内容读入,然后连接数据库,循环取邮件地址,调用本机的qmail的sendmail命令发送。

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

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

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

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

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

仔细的分析一下,就会发现这样的设计完全是从程序员实现程序功能的角度来设计的,或者说,设计类的时候,是自低向上的,从机器的角度到现实世界的角度来分析问题的。因此在设计的时候,就已经把程序编程实现的细节都考虑进去了,企图从底层实现程序这样的出发点来达到满足现实世界的软件需求的目标。这样的分析方法其实是不适用于面向对象的编程语言,因为,如果改用C语言,封装两个C函数,都会比Java/C++实现起来轻松的多,逻辑上也清楚的多。面向对象的精髓在于考虑问题的思路是从现实世界的人类思维习惯出发的,只要领会了这一点,就领会了面向对象的思维方法。

那么应用面向对象的方法就逮怎么做呢?

对于一个邮件来说,有邮件头,邮件体,和邮件地址这三个属性,发送邮件,需要一个发送的方法,另外还需要一个能把所有邮件地址列出来的方法。所以应该如下设计:

类 JunkMail

属性:

head

body

address

方法:

sendMail() // 发送邮件

listAllMail() // 列邮件地址

这就够了。

如果说传统的面向过程的编程是符合机器运行指令的流程的话,那么面向对象的思维方法就是符合现实生活中人类解决问题的思维过程。

在面向对象的软件分析和设计的时候,要提醒自己,不要一上来就去想程序代码的实现,应该抛开具体编程语言的束缚,集中精力分析我们要实现的软件的业务逻辑,分析软件的业务流程,思考应该如何去描述和实现软件的业务。毕竟软件只是一个载体,业务才是我们真正要实现的目标。

在设计的时候不应过早的考虑具体程序语言的实现,必须用抽象的方法,和具体实现无关的方法来表达业务逻辑。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ocean1010/archive/2010/10/05/5922915.aspx
分享到:
评论

相关推荐

    结构化程序设计与面向对象程序设计的简述.docx

    结构化程序设计与面向对象程序设计的简述全文共4页,当前为第1页。结构化程序设计与面向对象程序设计的简述全文共4页,当前为第1页。关于结构化程序设计与面向对象程序设计的简述 结构化程序设计与面向对象程序设计...

    结构化和面向对象编程方法

    不过,结构化编程和面向对象编程并非二选一的关系,而是可以结合使用的。在实际开发中,可以根据项目需求和开发团队的技术水平选择采用哪种编程方法。 适合PLC和高级语言编程,让您快速了解编程的核心思想!!!

    JAVA面向对象编程_孙卫琴2.pdf

    本章首先简要介绍了结构化的软件开发过程,然后介绍面向对象的软件开发过程,对面向对象的一些核心思想和概念做了阐述。本章列举了不少形象的例子,来帮助读者理解面向对象的开发思想,并且以一个画板Panel软件系统...

    面向对象系统设计面向对象系统设计面向对象系统设计

    作为一名软件开发人员,我深刻地体会到面向对象系统设计带来的种种便 : 1、 良好的可复用性。...一个用面向对象思想设计的系统中加入新功能,不外乎是加入一些 新的类,基本上不用修改原来的东西,这种感觉真爽J 。

    试述结构化分析与设计方法的主要思想与步骤

    分析结构化分析与设计的思想和面向对象方法并对这两个方法进行对比。

    我眼中的面向对象方法和结构化方法

    火龙果软件工程技术中心 我觉得无论结构化范型或面向对象的范型,都是应用到软件工程的每一个阶段。系统的分析、设计必然要为技术管理提供方便,而且从程序的设计方法不断演化(过程式程序设计-〉模块化的程序设计-...

    基于面向对象程序设计的vb

    面向对象程序设计 在vb中综合练习数据库处理,控件处理

    C++面向对象程序设计课后答案

    1.解答要点:面向过程程序设计采用结构化思想,将数据和对数据的操作分离,程序是由一个个的函数组成的;面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好...

    JavaScript程序设计课件:面向对象概述.pptx

    面向过程与面向对象 6.1.1 面向过程与面向对象 1、概念 面向过程(Procedure Oriented)也可称之为“面向记录”,是一种以过程为中心的编程思想。它注重的是具体的步骤,只有按照步骤一步一步执行,才能够完成某件...

    论文研究-面向对象技术实现活动网络图及关键路径算法.pdf

    采用邻接矩阵表示项目活动网络图需要较多的存储空间,且基于结构化程序设计思想实现网络图和关键路径算法都非常繁琐。采用面向对象的类表示活动,基于动态数组表示活动网络图及活动之间的逻辑关系,并据此开发了基于...

    设计模式:可复用面向对象软件的基础--详细书签版

    特别地,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。简而言之,软件领域中的设计模式为开发人员提供了一种...

    面向对象系统设计--------良好的可复用性。易维护。良好的可扩充性。最好的一本设计图书

    以前,在向一个用结构化思想设计的庞大系统中加一个功能则必须考虑兼容前面的数据结构、理顺原来的设计思路,即使客户愿意花钱修改,作为开发人员多少都有点恐惧。在向一个用面向对象思想设计的系统中加入新功能,...

    面向对象与结构化编程区别及异同

    结构化编程的语言主流的是c语言,采用结构化的编程方式,主要用来编写操作系统。特点:语言灵活非常接近底层,对硬件有强大的访问能力。对于一个比较复杂的系统,往往是自顶向下,逐步求精,分模块的思想来编写。...

    JAVA面向对象编程(孙卫琴)01

    内容都是自己深刻思考过,并通过通俗易懂的语言表述出来,最大限度的易懂,易学,这是一本适合新手入门,掌握良好java开发习惯,开发思想的好书,希望大家多多从简单的示例中体会java的面向对象的开发思想,...

    面向对象的分析方法(OOA介绍)

    面向对象分析方法(Object-Oriented Analysis,OOA),是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对...

    JAVA面向对象编程(孙卫琴)09.pdf

    内容都是自己深刻思考过,并通过通俗易懂的语言表述出来,最大限度的易懂,易学,这是一本适合新手入门,掌握良好java开发习惯,开发思想的好书,希望大家多多从简单的示例中体会java的面向对象的开发思想,...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言、持久存储、分布式计算和客户/服务器...

    面向方面CaesarJ的原理与源码分析

    结构化编程表现了这些子程序的语义涵义,抽象的数据结构体现了数据和行为的统一,面向对象的方法则将此概括为相关数据和行为的多样性。 目前的编程主流领域是面向对象(OO)技术。通过使用对象,程序员可以把世界...

Global site tag (gtag.js) - Google Analytics