CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  软件工程/管理 >  开发方法版

讨论:关于结构化方法与oo方法的可结合性问题~~

楼主joehong(守望者)2003-11-04 13:36:39 在 软件工程/管理 / 开发方法版 提问

面向对象方法强调对象模型,而描述数据变换的功能模型是结构化方法的重点,当我们现实中做项目的时候,似乎很难区分我们用的是结构化方法还是oo方法,还是两者的结合?小弟想请教高手来讨论下这两者的可结合性。。 问题点数:50、回复次数:8Top

1 楼zhuma(竹马)回复于 2003-11-04 14:33:39 得分 4

看问题的侧重不同而已  
  问题本身并没有变化  
  结构有的好处  
  面向对象都有  
  没有结合的必要  
   
  ——新手个人意见Top

2 楼no_com(探花)回复于 2003-11-04 14:42:07 得分 4

业务分析上我想用面向对象的思想比较好,具体编码结构化的就比较有用处Top

3 楼rolandash(慢鱼)回复于 2003-11-04 15:41:15 得分 15

信息隐藏是结构化方法的基本出发点,在抽象现实世界时,划分功能块和描述数据流基本上完全按照事物本来的逻辑,没有做太多的加工。  
   
  而OO实际上体现了一种计算世界观,认为外部世界都是由可划分的独立对象实体和他们之间的交互构成的。基于OO的系统就力图用这种世界观来对外部世界建摸。当然这种观点的正确性并没有严格的证明,只是现在大家都接受默认,成了类似公理的东西。  
   
  OO的优点是这种抽象方法非常符合人们的直觉。OO包含了结构化方法的信息隐藏原则并且有所发展。但OO实际上并不能有效地覆盖软件系统的每个领域。类似数据流这样的对于分析系统很有帮助的手段,用OO的方法描述起来,就显得特别的别扭。这是因为OO最初是作为一种计算语言发展起来的,其描述能力自然有局限性。  
   
  另外,OO既然引入了一层抽象,就必然要增加实现的开销。很多系统如果用纯粹的面向对象来构建,效率将是很低的。典型的例子如数据库的实现。这类东西并不是不能用OO来描述,只不过并不是最好最合适的方法。  
   
  即使是现在流行的OO程序语言,如C++,Java,其实也不是纯粹的OO实现,都是OO和结构式语言的混合体。象smalltalk这类纯粹的OO语言,也是因为效率问题而一直得不到广泛的应用。  
   
  所以我觉得楼主在做项目的时候有这样的感觉实际上是很正常的。无论在系统分析还是在实际编程时,都有OO覆盖不到的地方。在这个时候,谁对你更有效就用哪个方法,而没有必要为了一些形式上的一致而大费周章,最后把自己也弄糊涂了。  
   
   
   
  Top

4 楼rtdb(东临碣石)回复于 2003-11-04 16:09:08 得分 0

说的好!Top

5 楼sinosolo(solo)回复于 2003-11-04 17:20:00 得分 10

本人认为一点都不矛盾(不要骂我哈);  
  在采用面向对象的设计方法的时候,DFD,业务流图仍然是一种非常有效的设计图形,更加方便和用户的交流,理请自己的思路;  
   
  面向对象方法是好,但是本人并不认为它非常适合大型的MIS数据库应用系统。更加适合功能比较集中,但业务逻辑比较复杂而集中的小程序(如手机JAVA程序等)。在做数据库应用的适合,对于数据表的封装等可以采用OO设计,而实际上业务流控制更适合用过程化的分析设计方法。  
   
  书本上说这两种模式水火不容,可能本人愚笨,并没有发现有这么严重Top

6 楼ozzzzzz(希望敏捷)回复于 2003-11-04 19:43:22 得分 15

这中结合非常普遍的存在于我们的周围。你随便找一个项目看看它们的开发的程序,到处是用面向过程的分析加上面向过程的设计最后还来上一点面向过程的写作代码的风格,当然用的语言是面向对象的。这就是我们经常看到的情况,也许有些人喜欢这样的情况,可是我不喜欢。当然你也可以看到个别用面向对象方法在非面向对象语言中实现的例子,但是那是太少太少,可以所在艺术的写作。  
  其实面向对象来自于对面向过程的深度思考,是在面向过程的基础上的前进。但是他们的区别是明显的。面向过程更加适合于机器的思维方式,你可以看到用汇编写的面向过程的程序和用c以及原始的ada,或者干脆就是java,他们的结构没有什么区别。但是面向对象对于工具的要求显然要挑剔的多,而且基于非面向对象语言的面向对象思想的实现,也繁琐无比。而同时一个功能按照面向过程的实现方法是比较简单的,也是直观的。而面向对象的则往往是映射了又映射,划分了又划分。而且由于不同的考虑问题的角度,程序中出现的概念也会非常的不同。而实际上面向对象往往在一个小应用的情况下会比面向过程复杂。但是我们为什么要去追求面向对象的方法呢?为什么那么多人放弃了面向过程而去追随面向对象呢?  
  当然面向对象有面向过程的不可比拟的优势。那就是面向对象的封装性要比面向过程好一点,不多就一点。但是就是这一点就足以让你在一个复杂的环境中,可以容易的多的把握问题的内核,也更加容易的去解决复用与调用的问题。  
  当然在你不习惯或者干脆是不能够使用面向对象的方法去看问题的时候,你所遇到的情况会会使你觉得非常无助。你总是想回到面向过程的老路,这也就是你经常可以看到像我这样大的程序员会经常告诉你说:“面向对象和面向过程没有什么区别,只不过使加来了一个class,和结构没有什么区别。只不过多了一种类型。我还是按照老样子作我的工作,一切都没有改变。”当然还会时不时的出来几个方法学者,他们要么使去刁难面向对象不能很好的适应企业应用的分析,要么就是说流程在面向对象中无法实现。但是即使使一个数据流图也可以用面向对象的角度看。在你用面向过程的方法看问题的时候,你看到的都是一些线;当你用面向对象的方法看的时候,你看到的都是一些点。  
  而怎么才真的知道自己是在面向对象还是面向过程的呢?其实也很简单,那就是你看你系统中的操作是不是按照一定原则划分,去属于一些专门的数据。这些操作都是很简单,很直接的。这些操作和面向过程中的函数相比,只是很小的,简单到根本都算不上过程的过程。而且你也一直在使用这个统一的角度和方法去解决你的问题。  
  流程也是一些状态对象的组合,数据库的E-R我怎么也看不出更加和面向过程相接近。  
  楼主的感觉是很多不能理解面向对象的人经常有的感觉,这个也是很能检查自己是不是理解面向对象思想的好方法。  
  Top

7 楼fancy05(浪花)回复于 2003-11-05 00:05:03 得分 2

很多情况下是两者的结合Top

8 楼zhuma(竹马)回复于 2003-11-05 14:25:30 得分 0

建议读读《重构》  
  很多所谓的结构化方法应用在其中都是Bad   Smell  
  看了很有启发  
  对面向对象会更有信心Top

相关问题

  • 数据结构讨论群
  • 数据结构讨论群
  • 关于n层体系结构与oo如何完美结合的问题?(来者有分,多多益善!)
  • GP与OO,欢迎讨论。
  • 从系统结构角度讨论COM
  • 讨论源程序的目录结构
  • 讨论讨论:关于如何学习B/S结构
  • 【讨论】LDAP和DB的结合
  • BCB开发文档:数据库结构(讨论2版)
  • 讨论C/S结构TCP服务器的算法(散分1000罗)

关键词

  • 面向对象
  • oo
  • 结构
  • 语言
  • 系统
  • 分析
  • 业务
  • 应用
  • 方法
  • 面向过程

得分解答快速导航

  • 帖主:joehong
  • zhuma
  • no_com
  • rolandash
  • sinosolo
  • ozzzzzz
  • fancy05

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo