◆→编程思想

jimconrad 2001-09-06 10:21:16
加精

写程序也这么长时间了,面向过程面向对象这类词也看多了,软件工程的书也看了,但始终有点模糊和纳闷。不得不仔细分析一下:我到底在做什么,我到底是怎么做的,到底什么是面向对象。下面都是我的作为,就省略掉“我”字。
目前所谓的面向对象编程主要是局部使用对象设计,全局使用过程设计。为什么?因为全局必须自己设计,表达的是自己的思想过程,摆脱不了面向过程的思维。为什么?因为人在设计时不自觉的会按照平时的办事习惯来进行,即要是这件事我来做,我应该怎么样一步一步的来做来完成,这就是过程的思想。那么为什么局部采用对象设计呢?因为很明显的如一些按钮之类的是一个一个的类,我们也不想深入到细节中,于是把它当成一个整体来看待,当成组成程序的小个体、小分子。又因为别人(如微软)已经封装了一些类,这些类就像函数库一样,我们不能不按照该“函数库”的使用方法学着用类的观点来看待它。还有一个原因就是到达局部以后,就要借助工具,工具很自然的就是要被操作的对象。很像下面的类比:
老板要你写一篇报告,你接到任务后,自然会先去收集资料,写摘要,写提纲,写草稿,打印正稿。这很明显是一个过程的思想。而每个细节,就如打印正稿,你就得利用计算机字处理软件,于是计算机就成了你的工具、你的对象,计算机的处理过程你不必去深究。所以局部自然而然有了对象这一思想。
虽然据说建模的时候面向对象更符合人们对自然界的认识,但是从上面看来好像不符合做事习惯,那么它是否科学呢?... 我想面向对象其实是这样的:老板把你看作工具和对象,他不管你办事的过程,反正任务是交给你了。你手下有几个人,你接到任务就开始分配工作,“张三,你去收集资料;李四,你来写提纲...”他们怎么完成的你不管,你只当张三像台计算机,像台资料搜集器... 你只要管他们完成的过程:“张三你收集完后交给李四,李四你把提纲交给老五...”这样正好反过来,整体是对象,局部是过程。那这又和模块划分的思想有何区别?面向对象的核心是抽象数据类型,那老板这件事怎么进行数据抽象呢?...

针对以上浅薄的理解和问题,还望各位给点批评意见、建议、想法,谢谢!

...全文
280 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Clinx448 2001-09-29
  • 打赏
  • 举报
回复
感觉应该学学软件工程的统筹分配!!一项软件分配假如不懂如何去做?其实不是很可怕?可怕的是知会做,那永远只是一个打工的,不能成为一个领导者!!
wao 2001-09-17
  • 打赏
  • 举报
回复
OO只能处理你预见的变化,而不能处理没有预见的变化。
wao 2001-09-17
  • 打赏
  • 举报
回复
to windowsme:
我也是oo生手。我觉得OO的目标应该是解决软件中的很多问题,我比较倾向与解决各个部分的接口和提供良好的维护性。比如你开发了一个类体系用于开头所说情形。开发完毕了,经过测试,然后发布,别人或者你自己基于这个体系建立了一系列应用。然后,要分配MM了。然后,你修改了person类,这是一个基类。注意,这个时候,你和别人的应用也就都出于一种危险的状态,需要部分的修改和全部的测试。在这种情况下,OO的好处就都没有了。
问题的关键在于:你设计类库的时候没有考虑到MM的问题,因此你的类库就不能处理这种扩展,因此就需要修改类库本身。因此,我觉得OO的好处在于你如果遇见到变化就可以用一种低代价的方案来处理这种变化,而不用修改已经正常使用的代码。
notyy 2001-09-17
  • 打赏
  • 举报
回复
不同意wao(wao)的意见。oo的目标只是更好的模块化,每个模块更小,更紧凑,其他的一切比如重用都只是副产品。
所以oo设计的要点在于不断的提炼,尽量的简化。
简单的设计能够应付未来的变化。
WindowsMe 2001-09-16
  • 打赏
  • 举报
回复
wao(wao):

我对OO的理解也不深,说错了请见谅

但是我觉的如果每人发个MM,那只能是在person基类中加个MMID属性,如果有分配规则,那么或许在BOSS类中加个mm_manage方法

不知实际操作中,如果遇到这种情况,wao兄是怎么做的,难道不需要修改基类就可以吗? 
jimconrad 2001-09-16
  • 打赏
  • 举报
回复
我再想想,我再想想!
wao 2001-09-14
  • 打赏
  • 举报
回复
to windowsme:
我想你的例子好像有点问题:每人发个MM,这个事情是你在设计类时所没有考虑的。如果现在在添一个MMID,看起来好像是成功利用了继承,但是实际上这个过程可能引起很多的bug.这个情况是没有办法体现OO的优越性的。
sdyqingdao 2001-09-13
  • 打赏
  • 举报
回复
确实不可能全都用上一种方法;我觉得像财务软件局部用oo,全局用过程是最好的
面向对象用熟了就好了,反正我能感觉到确实是符合人们认识世界的习惯
并且代码重用率最高
Only_I 2001-09-12
  • 打赏
  • 举报
回复
对象封装的是数据和方法,方法就是过程的
对象不可能死呆着,那它就得有驱动或者说触发的机制,这也是过程的
其实,我觉得即使是一个单一流程的程序也可以看成是一个对象,不过划分放法不一样而已
conquer 2001-09-10
  • 打赏
  • 举报
回复
这个很想 有乐物理上的 大统一理论.
但是也 无法抛弃 经典力学一样.
个有个的使用范围.
kmzwm 2001-09-09
  • 打赏
  • 举报
回复
各位讨论真是很是很精彩!
我一直认为,在使用面向对象的方法中,不应当全部否定面向过程的方法。有时候,两者都是要用到的,不知道对不对?
new_life 2001-09-09
  • 打赏
  • 举报
回复
xx
WindowsMe 2001-09-09
  • 打赏
  • 举报
回复
jimconrad:

》》 目前所谓的面向对象编程主要是局部使用对象设计,全局使用过程设计。

我的感觉恰好相反,整体的系统架构在OOD的分析结果上,而类的方法使用面向过程的设计。这样的系统更健壮一些

例如你说的个例。其实就是一个person基类,和boss,manager,employee这三个子类就可以描述清楚的了。这样的话,如果你们公司突然决定给每个人发个MM,那么就可以在person基类上加个MMID就成。

如果你的上层使用面向过程,就又得对分配MM这个过程进行描述,设计了。

你觉得能节省多少工作量呢?
mycode 2001-09-08
  • 打赏
  • 举报
回复
确实不错!
青润 2001-09-07
  • 打赏
  • 举报
回复
类,可以继承,可以包含,可以实现,也可以扩展。
这就是一个上层类对下层类的操作。
这里可以把你看做是边界类。下面完成其他更具体任务的人看作是实体类或者控制类。
你继承了其他类的方法,通过它完成了某个任务,当然你也可以不通过它来完成,而通过另外一个功能相似的类来完成(这时候你就是向老板提出了解聘某个人而雇佣另一个人)。
如果你对某个人进行了培训以帮助他完成某个任务,那就是存在两种过程:1、你可以对他进行扩展;2、重新设计这个类(提高了他的技能和知识面);
所以这些机制都是可以这样进行分析的。
tony_2008 2001-09-07
  • 打赏
  • 举报
回复
各位大虾真是分析的太妙了,俺是个新手,但是俺十分的好学,不知道俺什么时候
才能达到你们的水平。这篇贴子是俺见过的最妙的。

老吴子 2001-09-06
  • 打赏
  • 举报
回复
我始终崇拜这样一句格言:如果想仅用一种或两种方法解决所有的问题,则一种是错误的,另一种是不正确的。现实世界是复杂的、多样的,因而解决问题的方法也必然是多样的,比如对于流程,IDEF3建模就比面向对象的方法更直观,更易于表达,逻辑性更强;不要听风就是雨,现在,面向对象方法对于大型系统的分析与设计,还存在一些需要改进的地方,其理论依据稍嫌薄弱,不可能用一种方法解决所有问题。“哲学家门都试图用不同方法解释世界,而问题在于改造世界。”只要能更快更好的解决问题即可,管它是不是纯面向对象的。
yeya 2001-09-06
  • 打赏
  • 举报
回复
我说举的例子真是好:)
yeya 2001-09-06
  • 打赏
  • 举报
回复
青润 2001-09-06
  • 打赏
  • 举报
回复
我对你的看法有点不同的观点,但是现在好像还描述不清楚,等我考虑清楚再告诉你。
加载更多回复(6)

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧