个人对于面向对象的一些肤浅理解--轻拍

xiedu414 2013-07-31 11:32:12
前言---此文只适合我等初级程序员看,牛人请拍,谢谢!

高级语言泛滥的当今,似乎不玩面向对象的程序员就不是高级程序员。每天面向对象,面向对象,估计就差“卖肾”去证明自己会玩面向对象了。但是,为什么要面向对象啊?初衷是什么啊?我们设计的程序真的就尽可能避免面向对象的陷阱了吗?关于面向对象的问题太多太多了,我这样的菜鸟是论述不完,也论述不清的,所以,开个帖子,欢迎水平差不多的菜鸟们来一起探讨研究:干这事是为了钱啊,总比没事撸强,撸只能撸虚,学点儿东西最起码能赚钱给妹子买束花啥的。

不论go,还是java,抑或C#等都声称自己是面向对象的。但是,我认为,我认为哈(我怕无处不在的喷子),面向对象应该从两方面去理解。第一:程序语言的实现。第二:程序的设计。

关于程序语言的实现。我不是学计算机出身的,就像XX好得瑟里的人,都要备注说明下自己是路子—我真的是野路子—所以我的知识可能是错的在此特地声明,欢迎指正错误。好,先来一大半的废话是我的习惯,忍不下去的可以直接关页面了(︶︿︶)。在高级语言设计时,我感觉最大的革命性就是讲课反复使用的代码抽离成了文件,那么这个文件就具有了一些自己的特有的东西。而且,再将一个文件复制到内存运行的同时,就决定了复制出来的文件能进行自己的定制。所以,我觉得面向对象的具体使用意义就在于它简化了一些反复的操作,而哲学上的意义就是对重复的东西进行了概括定义。一个事物,一旦有了定义,那么就说明他是代表一类事物的,所以,类由此而生。那么程序里说明是类啊?不就是一个文件嘛!类是干嘛的?不就是在程序中给一个东西进行概括定义嘛!所以个人以为,面向对象的使用应该遵循-在程序中需要概括定义的一定要变成类,其他的一律是过程方式的写法。那么再设计一个程序的时候,只要把握好哪些东西是重复使用的,就可以快速找到程序基本架构的入口(喷子注意说的词啊,看清楚再喷)。而没必要封装成类的,个人认为真没必要封装成类。为什么?因为类的封装过多的最大问题就是类的调用,相信大家都有个找别人设计的程序,扒了好几层也没找到相关的类文件的时候吧?反正我宁可类的方法多一些,靠提示去找,也不喜欢挨个翻类,尤其是子啊功能相似的类还很多的情况。
中午休息,未完待续!
...全文
1677 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiedu414 2014-02-20
  • 打赏
  • 举报
回复
好长时间没看 居然一月份还有人回复啊。呵呵。看了下 大家的回复都很精彩,各有独到的简介,确实很能让人开拓思路,洒家先谢了则个。
keatkeat1987 2014-01-08
  • 打赏
  • 举报
回复
最近也是再学习面向对象。 自己开发过一个电子商务,就是用面向过程开发的。虽然可以实现,不过要更改,或是把某些功能拆出来给另一些项目时就比较混乱,关系太密切 .. = =" 自己也在揣摩如何通过面向对象理念来提高能力。 各位大大有好的帖子,请分享 ! 感激!
沙尘暗影 2013-12-14
  • 打赏
  • 举报
回复
我喜欢面向过程
jiandingzhe 2013-12-12
  • 打赏
  • 举报
回复
引用 2 楼 xming4321 的回复:
我也很讨厌复杂的面相对象设计。各种的约定。各种的继承。各种的分层。 当然这也可能是我的面相对象设计水平问题。 但是看到go 的面向对象我就喜欢了。简单优雅,一个结构体 。挂上方法 就是对象。接口简化,访问控制简化。。。 unix编程思想!
裸奔多了之后你会厌恶这种感觉的。
www_7di_net 2013-12-08
  • 打赏
  • 举报
回复
其實說實話我覺得go的面向對象蠻費解的。
liutengfeigo 2013-12-06
  • 打赏
  • 举报
回复
引用 8 楼 healer_kx 的回复:
这是我对OO的理解. http://www.cnblogs.com/healerkx/category/136925.html 我很喜欢Go, 不可否认的是, OO不是万能. 但是OO总的来说更多影响今天软件的发展.
ForestDB 2013-11-07
  • 打赏
  • 举报
回复
其实OO翻译成对象/物件导向,要好得多。
lm_whales 2013-10-24
  • 打赏
  • 举报
回复
这个主要是翻译问题。 面向对象 原文是 Object Oriented ,面向物体,就是说面向现实世界,而不是面向机器。 所谓面向过程,其实就是按照机器的能力,理顺现实世界的问题,和机器执行的对应关系。 就是要考虑机器如何执行代码。 Object Oriented ,面向物体,是说现实世界事情是怎么做的,代码也这么做,是要模拟现实世界。 而不是,把现实世界的问题,分解成机器可以理解的东西,然后分阶段的执行。 面向对象,必定要有一些面向过程的代码来支持。 因为现实世界,也是一个不断变化的过程。不是一个僵死的东西。 比如排序,面向对象的算法,也不能比面向过程有多少变化。 倒是泛型这种和面向对象无关的方法,确实有些作用。可以写一些比较通用的代码。 面向对象,提高了代码的抽象层次。让代码更接近现实世界(问题领域), 而不用直接面向机器,编写代码。 面向过程和此前的代码编写方式,都是面向机器的。 都是用程序语言,写一些机器可以理解的代码,来解决现实世界的问题。 面向对象,是写一些人可以理解的代码,编译成机器可以理解的代码,来解决问题的。 看面向对象语言的代码,你首先看到的是问题本身的逻辑。 看面向过程和此前的代码,你首先想到的是,机器会如何执行,是机器的执行逻辑。 任何的编程语言,都是解决现实逻辑(问题本身的逻辑),转换为机器的执行逻辑的问题。 面向过程和此前的代码,要求人按照机器的逻辑,思考问题。 面向对象,直接按照现实逻辑(问题本身的逻辑)思考问题。 只有最细节的部分,才和机器的执行逻辑有关。 学习面向对象编程语言,不能只是学习编程语言,要学习面向对象的思想,然后去学习语言。
clark523 2013-10-23
  • 打赏
  • 举报
回复
其实用面向对象就1个原因。 用人类可以理解的印象来表达给计算机。 使得代码让人更容易理解。。 而增加了oo复杂度的原因是因为模式。 使用模式就2个原因,解耦,复用。 结果就让这个面向对象的东西不那么容易让人理解了。
卡卡Gemini 2013-09-30
  • 打赏
  • 举报
回复
面向对象是最简单的啊,每一个实体,就是一个对象,比如王XX,就是对象,比如这个王XX是男的,他就是“男人”这个类的实例。而“人”就可以是“男人”和“女人”这两个类的虚基类。对象之间应该靠发消息进行交互。目前我学过的语言里感觉还没有特符合面向对象思想的。
  • 打赏
  • 举报
回复
LZ 其实主要用到 封装 少用到继承 还是看项目大小程度 设计模式是根据你的对象数目来定的 oop的每个存在都是必须的 只是有些需要在某些时候加强或减弱
zl3450341 2013-08-26
  • 打赏
  • 举报
回复
引用 14 楼 jdwx1 的回复:
楼主说的翻基类找函数费劲的现象,其实那是天然的加密措施,一层一层的继承,功力差点的根本就找不着北,不敢下手修改,这就达到目的了。
也不能完全 这么说。 不过这话是实话。。
qianwen36 2013-08-21
  • 打赏
  • 举报
回复
引用 9 楼 xiedu414 的回复:
太忙了,真的没时间写了,写多少算多少吧。楼上有几位提出了自己的看法,我有时间也会去详细看看,欢迎交流。 ---------------------------------------------------- 总之,我的设计原则就是--在框架化的基础上尽可能的减少冗余的结构,从而减少程序BUG。
楼主,面向对象是炒作出来的,我看你深受其害啊,看来多数传教士自己没做好功课倒老遗世人。 结构化表达是根本,纵观所有文法习作,能观其层次条分缕晰才是读者所爱。 而面向对象思想是为了更进一步接受人类思维习惯。OOPL从其特性上做到了许多你喜欢的组织方式,你再也不需要为命名冲突而烦心,因为他提供更强的命名作用域以及各种限定修饰方法。OOP是SP是一种进化。但无论OOP/SP都可察觉出其一个共同目的特征那就是FP,就是朝functional奋进,从lisp理念可了解到这门学问。但最终人们还是希望更高的进阶,所以还衍生出了MP,元化的世界,人们希望更简洁的表达他的目的而把生成目标代码工作交给编译器。 无论是什么开发模式与表达形式,语言是究竟来源于一种文化的需要,也透视出了他的文化渊源。 软件开发易理解指导还是工程学所示的几个理论要点,最基础的就数模块化思想,第二要求解的目标是最小依赖设计。 模块化概念又分诸多层面观看,从OS环境中看,看不同进程不同角色分别提供何中服务,同一进程中又又许多执行者,不同线程各属不同职能,好比一个企业有不同分工一样也是不同角色共事协作。 静态设计来看,有目标级别的模块,即生成的exe或dll这些文件级别。再细致进去,就到源码文件级别,就站在编译器处理的角度去看,哪些不同的编译模块,具体为.c/.cpp等等;再细分,就是到了OOPL的类/类型级别,再细分就到一个个函数块了,函数块内最终是一个具处理块,处理块最后由一条条语句组成。语句又有表达式以及各种操作形成。就这样没了,所见最直接的就是表达式和function调用。
jdwx 2013-08-21
  • 打赏
  • 举报
回复
楼主说的翻基类找函数费劲的现象,其实那是天然的加密措施,一层一层的继承,功力差点的根本就找不着北,不敢下手修改,这就达到目的了。
fengxing 2013-08-13
  • 打赏
  • 举报
回复
好长呀,先标记一下吧
齐岳 2013-08-09
  • 打赏
  • 举报
回复
顶贴,期待下文
halleyzhang3 2013-08-09
  • 打赏
  • 举报
回复
面向对象之前是结构化编程,面向对象思想的出现改变了软件开发的流程,数据和接口的分离,多态的特性,可以把部分设计推迟到编写代码的时刻,因此才有了反复多次迭代的流程,后来的极限编程、敏捷开发均以此为基础。
xiedu414 2013-08-07
  • 打赏
  • 举报
回复
太忙了,真的没时间写了,写多少算多少吧。楼上有几位提出了自己的看法,我有时间也会去详细看看,欢迎交流。 ---------------------------------------------------- 总之,我的设计原则就是--在框架化的基础上尽可能的减少冗余的结构,从而减少程序BUG。
ksjxqy 2013-08-02
  • 打赏
  • 举报
回复
面向对象是结构、架构方面的概念,跟使用语言无关,用函数式编程一样可以OOP。
healer_kx 2013-08-02
  • 打赏
  • 举报
回复
这是我对OO的理解. http://www.cnblogs.com/healerkx/category/136925.html 我很喜欢Go, 不可否认的是, OO不是万能. 但是OO总的来说更多影响今天软件的发展.
加载更多回复(5)

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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