Kisser Leon

这个kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

谈谈面向对象

Posted on 2007-04-09 20:52 kk 阅读(446) 评论(0)  编辑 收藏 引用 所属分类: IT随感

面向对象是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

不过我想上面说的应该是国外吧!不知道国内的90年代OO是否风靡啊。偶是21世纪才开始接触电脑的。记得那时候老师在给我们上C++课的时候,拼命说什么C++好啊,面向对象啊,大说了一通。总之,给我的感觉是,OO才开始风靡。后来,学校里又开了一门课,叫着面向对象×××什么什么的,忘了,反正就是在讲面向对象。老师也是一个劲的给我们灌输OO思想,叫我们区别好OOOP的差别。不知道为什么会有这么一段,可能想说国内的技术比国外的慢太多了。很多时候,其实,语言也是一种原因!毕竟国内好的翻译太少了!而且不能总是等侯杰大叔叔来翻译啊。记得以前在论坛上看到一句“名言”啊:不要看国内作者写的书,不要看国内译者翻译的书,括弧(侯杰除外)。看起来似乎有点偏激,不过却不无道理啊!很多的作者和译者都是垃圾啊!!!!偶深受其害,因为偶很爱买书(看书就。。。呵呵)。记得我去年看重构的时候,我觉得这个名词还是很新的啊,看了那本书之后才发现原来这本书写于上个世纪,昏迷啊,国内的技术太落后了。偶的e文也太落后了!要多关注关注国外的新技术。

扯远了。回来再谈OO

OO,很早就已经学过了,很早以前就以为自己懂了,今天突然发现自己还不懂什么是OO,为什么要OO?以前的想法可能太简单了一点,认为只要是全都是对象就是OO了。

没错,在OO的思想中,所有一切东西都是O!但是,我发现在实际编程中,我连这一点都无法保证!而且,我也无法做到理论联系实际,把理论应用到实际。在实际运用中,几乎没有考虑过O的问题。更多的时候是在考虑什么模块怎么划分,一个模块应该有几个类阿,每个类都有些什么功能阿。但是我没有把那个类作为一个对象来考虑,或者说没有把那个类作为一类抽象的对象来考虑。需要什么东西就直接往里面加。不管加的东西跟那个类有没有关系,都往里面塞!行为相当恶劣。简直就是OP啊,每个类都成了一组functionwrapper了,相当悲哀!不管function是否应该属于该类(或者说该对象)。搞不好什么时候就设计出个:一个人有爬的行为!(结果肯定会被一群人狂揍哦)。

OO有什么优点呢?为什么要OO

OO使人们得变成与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富有人性化。

维护简单模块化是面向对象编程中的一个特征。实体被表示为类和同一名字空间中具有相同功能的类,我们可以在名字空间中添加一个类而不会影响该名字空间的其他成员。

可扩充性面向对象编程从本质上支持扩充性。如果有一个具有某种功能的类,就可以很快地扩充这个类,创建一个具有扩充的功能的类。

代码重用,由于功能是被封装在类中的,并且类是作为一个独立实体而存在的,提供一个类库就非常简单了。事实上,任何一个.NET Framework编程语言的程序员都可以使用.NET Framework类库,.NET Framework类库提供了很多的功能。更令人高兴的是,我们可以通过提供符合需求的类来扩充这些功能。

在实际的编程中你有考虑过这些问题吗?Sorry,偶是没有考虑过。基本上是,维护很难!扩充相对较容易,因为直接拷贝过来,在修改(这有算是OO吗?显然否)。这种根本就是没有利用到面向对象中的重用性。扩充起来也不容易,需要什么功能就胡乱继承一通,搞得类的层次太多了,无形之中给后人维护带来了极大的困难。出现这些情况的原因是什么呢?前面的代码设计的不够好。面向对象的三大特点:封装,继承和多态有没有都考虑进来?面向对象是一种思想,是我们考虑事情的方法,通常表现为我们是将问题的解决按照过程方式来解决呢,还是将问题抽象为一个对象来解决它。很多情况下,我们会不知不觉的按照过程方式来解决它,而不是考虑将要解决问题抽象为对象去解决它。有些人打着面向对象的幌子,干着过程编程的勾当。

OOA呢?OOA有什么帮助呢?

OOA的主要优点

·         加强了对问题域和系统责任的理解;

·         改进与分析有关的各类人员之间的交流;

·         对需求的变化具有较强的适应性;

·         支持软件复用。

·         贯穿软件生命周期全过程的一致性。

·         实用性;

·         有利于用户参与。

OOA方法的基本步骤
 
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
第一步,确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。

第二步,确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。

第三步,确定主题(subject)。主题是指事物的总体概貌和总体分析模型。

第四步,确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。

第五步,确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的

 

OO是个好东西啊。要理解OO的思想,并能够在实际中运用它。不过OO现在已经不是最热的了,在现在web2.0的年代,基于网页上的应用会更火啊。你开发个软件,如果是单机版的,你都不好意思说!如果是C/S架构的,你也是会被BS的。呵呵。现在什么SOAAJAX那个火 啊!SOAservice oriented architectureAJAX是什么东东?中间件、CRPCPM等等,现在也是牛一B啊。学无止尽,学不能晒网啊;跟上时代的脚步,对新技术保持必要的触觉。恩。

以上纯属胡言乱语,部分摘自网上。如果有兴趣,偶欢迎大家一起来讨论啊。


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理