关于面向对象的疑惑

doyouknowm 2010-09-07 12:40:45
前两天看一个帖子,什么是面向对象,其中有位大牛举了个例子,比如写log,原来用文件存,写个文件存的类,后来改数据库存,又添加个数据库存的方法,然后在所有调用的地方修改,如果有些数据库存有些文件存,那么相应的部分调用的地方又要改,没有很好的封装变化点。我水平太凹,实在想不出怎么样才能将变化点封装起来,有变化的时候只需要修改封装的部分而其他地方不用改变,所以开个帖子向大家请教一下,请各位多多指点,谢谢了。
...全文
261 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
久依 2010-09-26
  • 打赏
  • 举报
回复
说的我都挺晕的!
doyouknowm 2010-09-09
  • 打赏
  • 举报
回复
谢谢各位
  • 打赏
  • 举报
回复
沉浸在底层编程里不容易想明白,应该看看如何把生活中的实例用到你的程序中,这样就立刻明白面向对象。所有对象都是独立的个体,比如两个苹果即使长相一样、味道一样,它也是两个独立的苹果,苹果有独立的属性、操作方法。当我管理上万、数十万对象,那么让它封装好成为对象,要比只是弄一大堆简单数据结构和一大堆类库方法要方便。

再看面向对象分析设计方法中的符号及其方法,这些不但可以给机器执行,也可以给人使用。我们画出对象关联图、状态图、时序图、功能图、用例图等,这些图形各自从不同角度把某一类对象抽象为类型(并且方框或者圆形来代表类型),然后用各种箭头线段来指明对象(类)之间的模型关系。面向对象分析和设计(OOAD)是面向对象技术的核心。

然后有很多面向对象编程语言(OOPL),已经流行了将近20年,以至于现在几乎所有结构化分析和设计流派全都用OOPL来包装自己(尽管他们根本不是OOAD的)。其实正规来说,你使用OOPL编程时应该跟OOAD多得到的文档图形保持高度一致,不要再设计时看似是面向对象的,而一写程序就变成一盘散沙又把高度内聚的对象(类)拆散成一大堆低级的数据结构了!
doyouknowm 2010-09-07
  • 打赏
  • 举报
回复
能针对上面的问题具体说一下么
快乐乔巴 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 doyouknowm 的回复:]
前两天看一个帖子,什么是面向对象,其中有位大牛举了个例子,比如写log,原来用文件存,写个文件存的类,后来改数据库存,又添加个数据库存的方法,然后在所有调用的地方修改,如果有些数据库存有些文件存,那么相应的部分调用的地方又要改,没有很好的封装变化点。我水平太凹,实在想不出怎么样才能将变化点封装起来,有变化的时候只需要修改封装的部分而其他地方不用改变,所以开个帖子向大家请教一下,请各位多多指点,谢谢……
[/Quote]

就比如你说的大牛举的例子
可以通过接口来实现 让文件存类,数据库存类都继承这个接口
然后在调用的时候调用接口就可以了 是这意思不
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
面向对象的关键在于抽象,如何把实际的一个大需求或是小的具体需求抽象出来又具有很好的扩展能力。在未来有一天你离职了,别人维护的时候,要么,总是深吸一口气感到心头一紧的那种佩服,要么或是看到就像撞墙重新实现你的功能。这区别就是你实现时是否考虑到足够的扩展,但又不要“设计过度”。过度设计会让一个小功能甚至绝对不会改变(当然,实际上不存在一个绝对不会改变的模块)小模块做了很复杂的设计。这个要经验,至少你要先会设计一个过度复杂的先,然后才知道如何取舍。

总之,看设计模式去吧。书?很多书都不错。
我认为比较有趣,不枯燥的是 中国互动出版网(www.china-pub.com)的一个设计模式的书,不过实在没找到书名,可能就叫:设计模式
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
新手最头疼的是任何书都会介绍面向对象,从c++到.net。但却很难说自己真的懂面向对象。
其实学会面向对象,有2条路,一条是自己总结,长时间的积累,学习别人优秀的设计方式,还有一种,是找本《设计模式》的书来看。后者的学习周期显然会缩短很多,而且效果非常好。
快乐乔巴 2010-09-07
  • 打赏
  • 举报
回复
具体呢
onenewsmile 2010-09-07
  • 打赏
  • 举报
回复
面向对象是一门高深的学问,其实往往没有规范答案,运用之妙,存乎一心!
嗷嗷叫的老马 2010-09-07
  • 打赏
  • 举报
回复
面向对象......头痛
benyouyong 2010-09-07
  • 打赏
  • 举报
回复
又是面向对象...就这么纠结着个概念啊.
反正我是解释不清楚.
大概个人理解都不一样.
懦芞 2010-09-07
  • 打赏
  • 举报
回复
面向对象是一种思想,不是几句话就就能说明白的,重点是你对这种思想的体会有多深。
BlueMap 2010-09-07
  • 打赏
  • 举报
回复
看设计模式,多思考。。。
doyouknowm 2010-09-07
  • 打赏
  • 举报
回复
恩,是有好多看不懂,不过有一点看懂了,设计模式是必须要看的
gengchenhui 2010-09-07
  • 打赏
  • 举报
回复
晕了。。。
加油馒头 2010-09-07
  • 打赏
  • 举报
回复
上面说的 楼主只会越看越迷糊
amandag 2010-09-07
  • 打赏
  • 举报
回复
实在想不出怎么样才能将变化点封装起来,有变化的时候只需要修改封装的部分而其他地方不用改变
==
一点提示。

首先方法功能的拆分,比如一个方法里做了三件事,写成三个方法可能更好,这样将来只需要修改变化的方法

还有,基类提供默认实现,子类考虑重写基类的行为
doyouknowm 2010-09-07
  • 打赏
  • 举报
回复
sp1234说的都好深奥,好多看不懂~~
  • 打赏
  • 举报
回复
记住,不要因为认为一个类中有某些方法其它类中也用,于是就相互继承。这种做法就是典型的滥用继承,它违背了面向对象系统分析的基本原则,空谈用OOPL编程语言的所谓“节省代码”,是典型的破坏OO的做法。
wuyq11 2010-09-07
  • 打赏
  • 举报
回复
面向对象是软件设计技术。包括对象的识别、对象的继承和关联设计、行为设计等
每一种对象,都有其单独的生命周期,谁来创建它,谁来销毁它,它的内在属性,表现行为,以及它与外界之间的关系和集合需要经验。
加载更多回复(7)

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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