再开一贴:深入探讨面向对象思想
记得几个月前我开了一贴讨论面向对象思想,原帖在这
http://topic.csdn.net/u/20120110/10/e5c7361a-d2ff-462a-88a2-cf92cd261cd9.html
在这篇帖子里我当时对 依赖于接口而非依赖于实现 这句话理解并不是很深刻,通过大家的回帖收获挺多
当时我觉得是实践没有跟上,随即又发了一贴关于 面向对象理论和实践的贴子
http://topic.csdn.net/u/20120118/15/a677c0c4-1343-43e1-aa22-31de005a0f5b.html
最近刚刚做完一个项目,重构代码的过程中我刻意去结合设计模式,确实体会比较大,所以今天总结一下,
再开一贴探讨面向对象思想
-------------------------------------------------------
对于一般的应用程序,框架都是不用自己设计的,我最近写一个应用程序,框架就用的MFC的单文档,那么面向对象体现在哪里?
MFC本身就是MVC架构下的一个框架,一般的应用程序也都是基于这个架构,程序员要做的是抽象出数据和控制以及显示,说白了也就是对M,V,C三个方面分别进行抽象,抽象M和抽象C是超脱于这个框架的,分别对应于抽象数据结构和抽象界面控制,另外抽象V也就是抽象视图,这个与框架是相关,也称为抽象显示方式
然后是M,V,C三者之间的关联,这是很重要的问题,这个在UML和模式应用这本书里面称为GRASP,如何去分配他们的职责,这本书介绍是以职责驱动的方式来划分。(这本书相当不错,通过一个完整的应用程序系统教你如何去做对象分析和对象设计)。
以上是我对mvc架构的理解,适用于一切基于这种架构的应用程序。
--------------------
当然这种抽象方式同样适用于不带框架的应用程序,关键并不是什么框架,而是要有对象思想,设计任何系统需要考虑的是用对象来完成系统操作。这点通过应用设计模式和重构能够不断加深认识。
如果现在让我对面向对象下个定义:那就是一种思考问题的方式,这种方式是建立在对象基础之上的。
昨天看到CSDN来了牛人了,于是我赶忙问了个问题
- C/C++ code
to专家李健:我想问的问题是:对于一个软件项目应该从什么样的角度去规划它呢?在需求和系统分析做好的情况下如何去做对象分析呢?如何去分配一个对象的职责呢?从什么角度去划分对象职责比较有效呢?尽管这些我都看过书,但是我还是希望听听你的意见啊
面向对象的思想是很容易有,他只是一种思考方式,你换过来就行,难在对象分析和对象设计上,难在设计良好的可复用面向对象应用程序上。
这点我到是想听听牛人的意见。大家有什么想法尽管说吧,希望这个帖子对大家有用。
[解决办法]
楼主的帖子,俺必须要顶滴
[解决办法]
建议楼主看:
《面向模式的软件体系结构》(一共有两卷)
张志祥等译
英文书名和作者
Pattern-Oriented Software Architecture
Author:
DouglasSchmidt
Michael Stal
Hans Rohnert
Frank Buschmann
[解决办法]
《敏捷软件开发》(国内应该有影印版)也是一本很好的书,作者通过实际的例子,包括在设计一个系统的时候的各种思想活动、尝试都写下来了。
英文书名:
Agile Software Development
Principle, Patterns, and Practices
敏捷软件开发
原理、模式和惯例
Author: Robert C. Martin
Robert C. Martin 是大师级别的人物,经常经常被软件界的朋友成为Uncle Bob
(Bob is your uncle是美国俚语,意思是“不用担心,事情其实很简单”),可见这位同学的厉害。
[解决办法]
[解决办法]
不顶不厚道
两位大师已经展开了深入的交流
[解决办法]
学习一下,我是新人!!
[解决办法]
痛苦呀,既不能下载,也不能上传~~~~~~~~~~~~~~
呜呜呜呜呜呜
[解决办法]
感谢LZ分享心得
[解决办法]
学习了!
[解决办法]
值得学习了。现在都是真的受用了。
[解决办法]
楼主的帖子,俺必须要顶滴
[解决办法]
虽然在c++板,但是思想应该是一样的 ,帮顶+学习
[解决办法]
面向对象的帖子,顶一下
[解决办法]
我是个新手,楼主收学徒么???太佩服你了,几乎我每次发个提问帖,您总是回答的那么的精辟!在此表示感谢!
------解决方案--------------------
不错哦~!!O(∩_∩)O~
[解决办法]
非常感谢版主推荐!
[解决办法]
楼主说的很实在
[解决办法]
嗯嗯,多谢了!
[解决办法]
顶一个!
[解决办法]
很有用的帖子,必须好好学习一下~
[解决办法]
个人觉得这个东西,理解深刻的人觉得自然如此,不甚理解的人三言两语始终无法理解,就如同楼上几位给出的经典书籍,每过一段时间看一遍感悟都会不同,但这个时间和过程必须要。
[解决办法]
为什么我的号分数是负分呢?
[解决办法]
你看看深入浅出MFC就可以理解mfc的设计思想。其实这个一般在架构设计上比较重视,但需求一般变化,所以很难有一个能适应任何变化需求的架构。也就是你在设计上除了接口封装实现,还尽量保持功能独立的部分耦合性小,如果在不改变架构的情况增加新的功能模块仍能各部分独立就是好的设计。
有时候看别人的代码和框架也能具体的理解这些问题。
[解决办法]
楼主辛苦!
[解决办法]
谢谢分享,支持一下!!
[解决办法]
如果有兴趣学习OO,推荐你看Unlce bob和Martin fowler的书,绝对具有启蒙教育
另外OO其实不是理论学术,是一种常年的编码实践,这个和重构,单元测试的道理一致,10条以内的设计原则,后面全都是实践,最好的实践当属GOF,但GOF并非理论,而是一种情景契合,很多人把GOF当圣经,其实GOF整本书就一句话--针对接口编程。
[解决办法]
挺不错的
[解决办法]
学习一下啊
[解决办法]
好东西。。
[解决办法]
Mark,很佩服LZ的学习态度。
[解决办法]
学习楼主的学习实践精神.
[解决办法]
学习了
[解决办法]
好深奥的知识,了解了一下,不错!
[解决办法]
依赖于接口而非依赖于实现和OO有基情么……抽象也不是OO的专利。
不就是message passing vs. data directed programing嘛。领域逻辑熟悉以后爱怎么套就怎么套。
当然要怎么向别人说清楚还是挺伤脑筋的。
[解决办法]
[解决办法]
引用:
引用:
引用:
引用:
建议楼主看:
《面向模式的软件体系结构》(一共有两卷)
张志祥等译
英文书名和作者
Pattern-Oriented Software Architecture
Author:
DouglasSchmidt
Michael Stal
Hans Rohnert
Frank Buschmann
……
[解决办法]
都是高手啊,学习!!!!!!!!11
[解决办法]
C++只是一种面向对象的编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
[解决办法]
如果现在让我对面向对象下个定义:那就是一种思考问题的方式,这种方式是建立在对象基础之上的
+100
------解决方案--------------------
好啊1
[解决办法]
[解决办法]
《思考OO》
[解决办法]
如楼主说,面向对象是一种思考方法,其实,说准确一些,我觉得,面向对象思想是一种思考方法,面向对象编程,则是一种编程方法。
可以这么想:假设这个世界刚刚有编程语言的时候,我们会想,怎么写程序才能写得条理清晰还没有bug呢?一开始的时候,我们就是一条语句一条语句的写,然后发现,表达能力有些差,于是加上一些如if - then -else ,while 等控制语句。这样过一段时间,又发现,好多代码都重复了,于是有了函数的功能。随着软件越来越复杂,函数也越来越多,函数调用时的状态也只能依赖于全局变量。而全局变量又容易造成冲突,副作用等等问题。
于是,我们想找到一种可以合理组织变量,函数的编程方法。于是,我们抽象出了面向对象思想。发现,如果把一切东西都看做对象,把函数按功能划分给不同的类,比如fly()属于鸟类,swim()属于鱼类等等。这样可以解决上面所提到的问题。对象的封装,规划了函数所属的类别,对象的成员变量,用来保存成员函数所需要的状态。
对象的继承,解决了代码复用的问题。于是面向对象被大家所接受。但是,到目前为止,面向对象只解决了编程层面的问题(代码组织,状态保存,代码复用,多态等等),但在一个大型系统中,或者面对一个复杂问题时,如何用面向对象来解决呢?于是大家总结出了一些适用于不同情况的模式,即,设计模式。设计模式告诉我们,解决这种问题时,用这种模式会达到代码重用,应扩展等,解决那种问题时,用那种模式。。。
所以,面向对象解决了大型系统中代码组织的问题,设计模式解决了在解决复杂问题时,应该如何应用面向对象的问题。
不过,正如Paul Graham 所说,任何语言,如果需要什么模式(pattern)来解决,那就是语言表达能力的问题了。
同样,面向过程,面向函数 跟面向对象一样,都是编程的一种方法而已。
很抱歉,上面的讨论并没有回答你面向对象分析设计的问题。
不过,以上皆为个人思考所得,也没有参考什么权威的教材,故很可能只是谬论,在此抛出,只是希望跟大家讨论,也希望牛人帮我指正。
[解决办法]
mark ,有时间好好看看
[解决办法]
这个很值得学习。。
[解决办法]
[解决办法]
谢谢分享
[解决办法]
谢谢分享
[解决办法]
看高人的讨论,有点似懂非懂的感觉,学java的人飘过
[解决办法]
看了许多人的发言,没做过实际的东西,感觉理论和实践还是有距离的
[解决办法]
[解决办法]
[解决办法]
一直在为生活的无聊而烦闷、苦恼……
看了上面牛人们的探讨自己才意识到我居然从来没有真正认真关注过OO,
以前的对OO的看法是那么肤浅、原来一直停留在表面……
[解决办法]
以前来逛CSDN只知道灌水,看了大家的发言后突然觉得眼前一亮
谢谢大家了,帮顶一下!
[解决办法]
[解决办法]
最近有点反感面向对象,又进一步把计算机封装了一层.
我是一名学生,想学一些关于底层一点的东西,感 觉还是C对学计算机原理好.
注意我说的是对于学习,对于工作,开发那当然是用OOP拉~~
我是这样理解的..仅个人感觉