再开一贴:深入探讨面向对象思想

qscool1987 2012-04-10 10:51:06
加精
记得几个月前我开了一贴讨论面向对象思想,原帖在这
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来了牛人了,于是我赶忙问了个问题

to专家李健:
我想问的问题是:
对于一个软件项目应该从什么样的角度去规划它呢?
在需求和系统分析做好的情况下如何去做对象分析呢?
如何去分配一个对象的职责呢?从什么角度去划分对象职责比较有效呢?
尽管这些我都看过书,但是我还是希望听听你的意见啊

面向对象的思想是很容易有,他只是一种思考方式,你换过来就行,难在对象分析和对象设计上,难在设计良好的可复用面向对象应用程序上。
这点我到是想听听牛人的意见。大家有什么想法尽管说吧,希望这个帖子对大家有用。
...全文
5865 182 打赏 收藏 转发到动态 举报
写回复
用AI写文章
182 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2012-04-21
  • 打赏
  • 举报
回复
深入理解面向对象是个过程
meichen8050753 2012-04-21
  • 打赏
  • 举报
回复
我同意职责驱动,每个对象只需要关心自己的职责所在就行了。
meichen8050753 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 176 楼 的回复:]

每个对象需要对上层有“服务意识”
[/Quote]

如果每个对象都关心上层,那么耦合性太高了。
meichen8050753 2012-04-21
  • 打赏
  • 举报
回复
[Quote=引用 181 楼 的回复:]

我怎么觉的面向对象没有结构化的程序设计好啊?
[/Quote]
因为面向对象没有结构化语言的自由度高,功力不够一不小心就把自己绕糊涂了。
vip16461 2012-04-21
  • 打赏
  • 举报
回复
我怎么觉的面向对象没有结构化的程序设计好啊?
qscool1987 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 176 楼 的回复:]
每个对象需要对上层有“服务意识”
[/Quote]
看来你对分层架构有些研究啊,俺目前正在研究这个问题
对于应用软件最关注的是逻辑层,那么上层的界面层和下层的数据库服务层以及网络服务层之间如何建立联系,这点就需要你对业务层做出良好的设计了,提供方便,低耦合的接口,这些说到底还是OOA/D的能力,需要实践经验
QQ282881515 2012-04-20
  • 打赏
  • 举报
回复
每个对象需要对上层有“服务意识”
QQ282881515 2012-04-20
  • 打赏
  • 举报
回复
我很赞同LZ提出的职责驱动,所抽象出来的对象是对上层提供服务……
meichen8050753 2012-04-18
  • 打赏
  • 举报
回复
补充:
面向对象不止关心对象本身,更关心对象之间的关系。
meichen8050753 2012-04-18
  • 打赏
  • 举报
回复
如果感觉面向对象没有那么高深那么只有三种情况
1.初学者
2.大师
3.天才


我还在泥潭中挣扎啊。。
meichen8050753 2012-04-18
  • 打赏
  • 举报
回复
面向对象的核心是对事物的抽象,抽象本身很容易,但是要对事物合理的抽象就难了,把我粒度是抽象的难点之一。。。


以上是我对面向对象的理解程度。

如果对面向对象有了很深的理解,那么就会很容易的看到事物的本质所在。这已经是哲学的范畴。~~~~
所以面向对象思想其实更靠近哲学范畴,只是我们运用这种思想可以便利的解决一些编程上的问题。。
Tz_Sword 2012-04-18
  • 打赏
  • 举报
回复
其实 面向对象 没什么高深的啊 。。。

它只是把生活中的思想用在 软件中而已。

任何的思想都来源与生活,不能空谈理论。

就 像 jinhao 说的那样 医院的对象就是医生和患者?

学生来医院当义工也可以啊

所以 在实际的需求调研中 要分析清楚 这就体现了架构师 和 设计师的 功力了
fdd100 2012-04-17
  • 打赏
  • 举报
回复
好帖子 顶
qscool1987 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 157 楼 的回复:]
这帖子开的不错,楼主把自己项目中的心得和体会贴出来,大家分享,讨论提高!
[/Quote]
一直把自己当菜鸟,一切只为学习和进步,这个是成长的必要条件
qscool1987 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 156 楼 的回复:]
面向对象思想博大精深,如果没有面向对象思想,就谈不上面向对象语言,但是思想归思想,它的主要作用还是指导我们在实践中如何按照这种思想进行程序设计。如何能把思想和实践很好的结合起来,楼主有没有什么很好的建议?
[/Quote]
实践再实践,重构再重构,模式再模式
qscool1987 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 154 楼 的回复:]
以哲学的思考方式来理解面向对象

一切都是对象,一切又都不是对象
面向对象其实就是面向抽象
对象因为关系而存在,存在的不是只有对象

抽象中人路过,忘切磋!
[/Quote]
抽象是面向对象的基础
fp_Rock 2012-04-17
  • 打赏
  • 举报
回复
真是火热贴啊!!
karljack 2012-04-17
  • 打赏
  • 举报
回复
最近在看《C++沉思录》,6天看了4章。~~~~~
至善者善之敌 2012-04-17
  • 打赏
  • 举报
回复
这帖子开的不错,楼主把自己项目中的心得和体会贴出来,大家分享,讨论提高!
Niko10000 2012-04-17
  • 打赏
  • 举报
回复
面向对象思想博大精深,如果没有面向对象思想,就谈不上面向对象语言,但是思想归思想,它的主要作用还是指导我们在实践中如何按照这种思想进行程序设计。如何能把思想和实践很好的结合起来,楼主有没有什么很好的建议?
加载更多回复(122)

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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