面向对象和c++

走好每一步 2010-01-14 11:06:12
用这个题目并不是为了吸引大家的眼球,而是我真的觉得面向对象这种说法不靠谱。按我们的理解,世间万物分为灵性和非灵性,可是计算机里的对象都是非灵性的,所以说它是对象就有点不靠谱了。有段时间,我一直在思考什么叫面向对象编程,我甚至于一头扎入了对象这个字眼,觉得完成一个功能就是对象之间互相发送消息来完成的,也就说对象有了灵性。可我们知道这是不对,对象是不会思考的,对象只是一组函数功能的集合。那么用对象这个词还合适不?在某本《软件工程》上看到面向对象采用的是“顾客-服务”模式,我终于开始明白过来,对象并不是我想象中那样,确切的说对象只是一个提供服务的没有思维的机器。举个例子吧,就像狗的形状飞行器,你能够说有飞行的狗吗?可是我做飞行器的人就喜欢用狗形状,也许这种做法并不够好,也许不够专业,但我喜欢,你管不着。这种情况就是你需要什么样的服务,我就提供什么样的服务给你,尽管多么地不合理也好。

由此,我发现面向对象最大的好处就是接口定义相比变得容易好用起来,它的服务比面向过程更人性化而已。因为服务的聚居性,扩展起来也变得更加容易(继承),毕竟卖衣服的商铺卖布料更为符合顾客的口味,卖单车就怪异了,但并不说那样不行、或者不好,服务是取决于顾客的喜好的,在权衡利益下才能说好与不好。不是吗?

再回来探讨下面向过程,我们很容易发现面向过程做不到服务的聚集,如果服务聚集就会使得接口变得难用、臃肿,当时我看到api函数的接口头就变两个大。当我们要完成一个很大的功能,也就是满足某个顾客的需求,可能需要的服务是多种多样的,而且单一的服务是不够好,顾客不喜欢关心你的过程,他只喜欢看到结果,看到软件完美地运行起来。进一步来说,服务聚集可以使程序员更专心地做这块,更好地做这块,这和流水线有点类似。而软件架构师考虑的东西也可以抽象到一个新的层面,更好地去设计完成顾客需求,而不至于陷入细节泥淖中。

我不清楚我这种想法对不对,如果是对的话,那任何一本c++书都教不了面向对象编程,这也有可能只是我的遐想。
路过的csdn朋友,给点建议,高手笑完之后不要吝啬你们的笔墨。
...全文
266 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
走好每一步 2010-01-17
  • 打赏
  • 举报
回复
"面向对象,其实也是有灵性的,当与外面交互时,他能吸取一些信息,进而改变自己的状态或属性,做适当的反应。对象的内部机制,其实就是对象的大脑了"

嗯,这种角度也不错。
不过我想说的是,和外面交互的时候:例如,我的粤菜馆,都是清炒xx菜。总经理一声令下,变成湘菜馆,所有清炒变成麻辣xx。还是别人叫它做的,它自己还是不会思考的。
hcj98_cn 2010-01-15
  • 打赏
  • 举报
回复
OOP只是一种思想,C++书籍只能介绍如何实现这种思想。至于如何划分、涉及对象等,靠领悟和经验。
走好每一步 2010-01-15
  • 打赏
  • 举报
回复
自己顶下,聆听高手的意见
jdjking 2010-01-15
  • 打赏
  • 举报
回复
面向对象,我要是理解了面向对象,就又上一个台阶了。思考中。。。。。
cir2633 2010-01-15
  • 打赏
  • 举报
回复
小白不说话,小白只观望
lihan6415151528 2010-01-15
  • 打赏
  • 举报
回复
按我们的理解,世间万物分为灵性和非灵性...
taodm 2010-01-15
  • 打赏
  • 举报
回复
去看《敏捷软件开发:原则、模式与实践》
selooloo 2010-01-15
  • 打赏
  • 举报
回复
其实计算机面向的对象就是0101
Dolphin_001 2010-01-15
  • 打赏
  • 举报
回复
只是这种机制,无法自身的积累和进化,如果可以改变这一点,人工智能化早实现了
Dolphin_001 2010-01-15
  • 打赏
  • 举报
回复
面向对象,其实也是有灵性的,当与外面交互时,他能吸取一些信息,进而改变自己的状态或属性,做适当的反应。对象的内部机制,其实就是对象的大脑了。
走好每一步 2010-01-15
  • 打赏
  • 举报
回复
to lihan6415151528
呵呵。说说你想法吧,不要吝啬
走好每一步 2010-01-15
  • 打赏
  • 举报
回复
to gcc_gun
呵呵,当初我学c++的时候,某个经典的例子就是狗叫,猫叫。还有鸟飞之类的。不要怪我陷入误区。
走好每一步 2010-01-15
  • 打赏
  • 举报
回复
继续顶下,大家踊跃发言啊,都说说自己的理解嘛。
gcc_gun 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 tajon1226 的回复:]
举个例子吧,就像狗的形状飞行器,你能够说有飞行的狗吗?可是我做飞行器的人就喜欢用狗形状,也许这种做法并不够好,也许不够专业,但我喜欢,你管不着。这种情况就是你需要什么样的服务,我就提供什么样的服务给你,尽管多么地不合理也好。
[/Quote]
计算机学科上的研究和应用不能与生物学混为一谈。面向对象中抱紧其定义为一只会飞的狗,并不一定需要在现实生活中也有这样一只狗啊,只是在局部的应用中有这么一种抽象的需要存在而已。
LZ想法还是挺不错的,呵呵,跟你学习一下新思维~~~
Vegertar 2010-01-14
  • 打赏
  • 举报
回复
想不到UBB里居然不能颜色。。。。
Vegertar 2010-01-14
  • 打赏
  • 举报
回复
c++ 书确实教不了OOP,C++本身只是提供了OOP所必须的特征,如类,继承。
我还是贴一段Booch对OOP的权威描述吧:


What, then, is object-oriented programming (OOP)? We define it as follows:

Object-oriented programming is a method of implementation in which programs
are organized as cooperative collections of objects, each of which represents an
instance of some class, and whose classes are all members of a hierarchy of
classes united via inheritance relationships.


There are three important parts to this definition:
(1) Object-oriented programming uses objects, not algorithms, as its fundamental logical building blocks (the “part of” hierarchy we introduced in Chapter 1);
(2) each object is an instance of some class; and
(3) classes may be related to one another via inheritance relationships
(the “is a” hierarchy we spoke of in Chapter 1). A program may appear to be
object-oriented, but if any of these elements is missing, it is not an object-oriented program. Specifically, programming without inheritance is distinctly not objectoriented; that would merely be programming with abstract data types.
sagegz 2010-01-14
  • 打赏
  • 举报
回复
面向对象编程可以用C++来描述.

64,637

社区成员

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

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