消息关闭
    暂无新消息!
前言---此文只适合我等初级程序员看,牛人请拍,谢谢!

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

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

    关于程序语言的实现。我不是学计算机出身的,就像XX好得瑟里的人,都要备注说明下自己是路子—我真的是野路子—所以我的知识可能是错的在此特地声明,欢迎指正错误。好,先来一大半的废话是我的习惯,忍不下去的可以直接关页面了(︶︿︶)。在高级语言设计时,我感觉最大的革命性就是讲课反复使用的代码抽离成了文件,那么这个文件就具有了一些自己的特有的东西。而且,再将一个文件复制到内存运行的同时,就决定了复制出来的文件能进行自己的定制。所以,我觉得面向对象的具体使用意义就在于它简化了一些反复的操作,而哲学上的意义就是对重复的东西进行了概括定义。一个事物,一旦有了定义,那么就说明他是代表一类事物的,所以,类由此而生。那么程序里说明是类啊?不就是一个文件嘛!类是干嘛的?不就是在程序中给一个东西进行概括定义嘛!所以个人以为,面向对象的使用应该遵循-在程序中需要概括定义的一定要变成类,其他的一律是过程方式的写法。那么再设计一个程序的时候,只要把握好哪些东西是重复使用的,就可以快速找到程序基本架构的入口(喷子注意说的词啊,看清楚再喷)。而没必要封装成类的,个人认为真没必要封装成类。为什么?因为类的封装过多的最大问题就是类的调用,相信大家都有个找别人设计的程序,扒了好几层也没找到相关的类文件的时候吧?反正我宁可类的方法多一些,靠提示去找,也不喜欢挨个翻类,尤其是子啊功能相似的类还很多的情况。
中午休息,未完待续!

22个回答

︿ 3
好长时间没看 居然一月份还有人回复啊。呵呵。看了下 大家的回复都很精彩,各有独到的简介,确实很能让人开拓思路,洒家先谢了则个。
︿ 3
最近也是再学习面向对象。
自己开发过一个电子商务,就是用面向过程开发的。虽然可以实现,不过要更改,或是把某些功能拆出来给另一些项目时就比较混乱,关系太密切 .. = =" 
自己也在揣摩如何通过面向对象理念来提高能力。
各位大大有好的帖子,请分享 ! 感激!
︿ 2
LZ 其实主要用到 封装 少用到继承 

还是看项目大小程度 

设计模式是根据你的对象数目来定的

oop的每个存在都是必须的 只是有些需要在某些时候加强或减弱
︿ 1
面向对象之前是结构化编程,面向对象思想的出现改变了软件开发的流程,数据和接口的分离,多态的特性,可以把部分设计推迟到编写代码的时刻,因此才有了反复多次迭代的流程,后来的极限编程、敏捷开发均以此为基础。
︿ 1

我自己在设计程序的时候,无论大小,一律遵守先考虑具体使用情况,其次考虑可扩展性的原则,尽量不复杂化。也正是因为这个习惯,养成了我无论程序大小,一般很少在程序设计上出现问题。大部分出现的程序问题都是片段代码的问题。因为在开发的时候,一般能够清晰明白类之间的关联。
关于程序的设计。这个要可说的就太多了,我就提一提吧,欢迎大家一起来说,因为这个话题足够写N本书了。对于程序设计我感觉大部分菜鸟(包括我),都存在一个不容易跨出的误区,就是程序的设计应该首先考虑实际应用,而不是技术的炫耀。记得刚入行的那几年,没写一些代码就要封装起来,尽可能的想把什么工厂啊,接口啊之类的都用上。这么干倒是也能出程序,但是啊,慢慢的我自己就头疼了。为啥?维护啊!最闹心的问题。在不是很清楚程序的具体使用方向之前,乱抽取对象去并且加上大量的接口、继承等技术,往往会把自己扔进代码的垃圾堆,——帝都的雾霾何时能好?——
︿ 1
这个主要是翻译问题。

面向对象 原文是 Object Oriented ,面向物体,就是说面向现实世界,而不是面向机器。
所谓面向过程,其实就是按照机器的能力,理顺现实世界的问题,和机器执行的对应关系。
就是要考虑机器如何执行代码。

Object Oriented ,面向物体,是说现实世界事情是怎么做的,代码也这么做,是要模拟现实世界。
而不是,把现实世界的问题,分解成机器可以理解的东西,然后分阶段的执行。

面向对象,必定要有一些面向过程的代码来支持。
因为现实世界,也是一个不断变化的过程。不是一个僵死的东西。

比如排序,面向对象的算法,也不能比面向过程有多少变化。
倒是泛型这种和面向对象无关的方法,确实有些作用。可以写一些比较通用的代码。

面向对象,提高了代码的抽象层次。让代码更接近现实世界(问题领域),
而不用直接面向机器,编写代码。

面向过程和此前的代码编写方式,都是面向机器的。
都是用程序语言,写一些机器可以理解的代码,来解决现实世界的问题。

面向对象,是写一些人可以理解的代码,编译成机器可以理解的代码,来解决问题的。

看面向对象语言的代码,你首先看到的是问题本身的逻辑。

看面向过程和此前的代码,你首先想到的是,机器会如何执行,是机器的执行逻辑。

任何的编程语言,都是解决现实逻辑(问题本身的逻辑),转换为机器的执行逻辑的问题。

面向过程和此前的代码,要求人按照机器的逻辑,思考问题。

面向对象,直接按照现实逻辑(问题本身的逻辑)思考问题。

只有最细节的部分,才和机器的执行逻辑有关。

学习面向对象编程语言,不能只是学习编程语言,要学习面向对象的思想,然后去学习语言。












︿ 0
太忙了,真的没时间写了,写多少算多少吧。楼上有几位提出了自己的看法,我有时间也会去详细看看,欢迎交流。
----------------------------------------------------
总之,我的设计原则就是--在框架化的基础上尽可能的减少冗余的结构,从而减少程序BUG。
︿ 0
面向对象是最简单的啊,每一个实体,就是一个对象,比如王XX,就是对象,比如这个王XX是男的,他就是“男人”这个类的实例。而“人”就可以是“男人”和“女人”这两个类的虚基类。对象之间应该靠发消息进行交互。目前我学过的语言里感觉还没有特符合面向对象思想的。
︿ 0
我也很讨厌复杂的面相对象设计。各种的约定。各种的继承。各种的分层。

当然这也可能是我的面相对象设计水平问题。

但是看到go 的面向对象我就喜欢了。简单优雅,一个结构体 。挂上方法 就是对象。接口简化,访问控制简化。。。 


unix编程思想!
︿ 0
这是我对OO的理解.
http://www.cnblogs.com/healerkx/category/136925.html


我很喜欢Go, 不可否认的是, OO不是万能. 但是OO总的来说更多影响今天软件的发展.
︿ 0
其实用面向对象就1个原因。
用人类可以理解的印象来表达给计算机。
使得代码让人更容易理解。。
而增加了oo复杂度的原因是因为模式。
使用模式就2个原因,解耦,复用。
结果就让这个面向对象的东西不那么容易让人理解了。



︿ 0
楼主说的翻基类找函数费劲的现象,其实那是天然的加密措施,一层一层的继承,功力差点的根本就找不着北,不敢下手修改,这就达到目的了。
︿ 0
面向对象是结构、架构方面的概念,跟使用语言无关,用函数式编程一样可以OOP。