免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6370 | 回复: 15
打印 上一主题 下一主题

[C++] C++与OOP的学习讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-19 15:44 |只看该作者 |倒序浏览
以下内容是转自其它论坛对c++编程的学习方法讨论

C++学习者的迷茫


学习C++编程已经有一段时间了,看了不少经典名著,自己也利用OOP思想编了一些作品。
由于我是从C程序员转过来的,一直不明白面对对象编程到底好在哪里,好象C++编的东东C一样能做,根本不要利用那些
对象,模板等,而且好懂得多。而那些虚拟,多态在实际根本用不着,完全可以用其他的方法代替。
不过C++这么流行就必然有其道理,我想
也许是我见识太浅,不明白其中道理。
希望各位老虾给我解释一下
先谢过了

论坛徽章:
0
2 [报告]
发表于 2003-02-19 15:45 |只看该作者

C++与OOP的学习讨论

OOP最核心的思想是把数据和代码封装在一起,成为对象。有很多东西很适合用对象来描述,比如菜单啦,对话框啦,很多很多,作为对象来考虑很自然。如果是用C来写,你有一个结构,有一个操作这个结构的函数,你会不会觉得在结构内部放上指向函数的指针用起来很方便呢?C++做的更好,它能把这个函数放到类的内部。这不是更清晰更安全吗?
封装只是最基本的。继承在封装的基础上很好地实现了子集和超集的关系(这样的东西很多啦,比如白马和马)。在OO出现之前,你也可以用结构的嵌套来实现。但是这只体现了数据的关系,没体现出来方法间的关系。有了OO,这个关系就很完整了。
用C++能写的程序当然用C都能实现。事实上最初的C++编译器是先把C++翻译成C的。我觉得重要的是理解OO的思想,而不是学习C++语言。OO把数据和相关的代码联系了起来,对于建模型这样的事,用OO的方式去想更容易,也更容易读懂。当然不是说OO总是更好。C是面向过程的语言,你也可以理解成面向功能的。如果你的程序要实现针对简单数据结构的复杂功能,比如说一个纯计算的程序,OO就显不出来好处。
我觉得你虽然学了C++,但是还是C的影响太根深蒂固了,还是C的方式思考。不要去想虚拟多态用C能实现(当然能实现,C++本来就是C实现的),而应该去理解虚拟多态能做什么。再看看例子程序,多态实现了什么?微软的类库里就有用到虚拟和多态的。也许不常用,但是需要用到的时候它是不是很好用?
C++比较烦的是那些所谓的标准类库,和你做应用时候需要用到的别人写的类库,需要很多时间去掌握。程序员本来是一种富有创造力的职业,掌握别人写的类库却是极其无聊的事情。平台越来越复杂,工作越来越机械。OO是软件工业化的成功,把程序员分成了软件工人,这实在是coder的悲哀。当然,作为专业人士你可以选择当设计人员。
一点浅见,供你参考。有不当之处请楼下指正。

论坛徽章:
0
3 [报告]
发表于 2003-02-19 15:50 |只看该作者

C++与OOP的学习讨论

oo思想是学不来的
那些封装,继承,虚拟等概念只看书本只能学到点皮毛。真正难的地方在于OO分析和建模。
这些是需要时间积累的。
要在实际应用中坚持用OO思想来思考问题。



正如你所说,其实C++的任何功能都是可以用C实现的,就像C的任何功能都是可以用汇编实现一样,可为什么我们还是要选用C++呢?当初我也和你一样的迷惑,其实你再好好想想为什么你要用C,而不用汇编就能想通了。既然有了更高一层次,更为方便的编程开发工具,为什么不用,而还要死抱着老的不放呢?一些短小精悍的小程序用C写起来固然要方便得多,但一旦涉及到大型项目来说,就有些力不从心了,尤其是多人的协同开发。C++不仅给了我们一个开发程序的良好思维方式,也使得整个项目的合作开发变得更加方便合理。

这些都是C++的学习者一开始所不能体会到的,只有亲身经历过一段时间的开发工作才能体会得到的。

所以,不要害怕困难,多学习,现在打好基础,将来的实际工作中才能得心应手。

PS:我也只能算是一入门者,也愿以此自勉,大家共同进步!

论坛徽章:
0
4 [报告]
发表于 2003-02-19 15:51 |只看该作者

C++与OOP的学习讨论

在Fundamentals of Data Structures in C这本书里,就已经很好的体现了面向对象的思想。这本书中指出,在实际项目开发中,负责人逐渐发现,如果描述(specification)与实现(implementation)相分离,将会是一件很好的事情。于是这本书的作者,一些c语言的老鸟加大牛,给出了两个定义,Data Type和Abstract Data Type,如果你能对这两个定义有深入的理解,相信你会受到一些帮助的。
Data Type: A data type is a collection of objects and a set of operations that act on those objects.
Abstract Data Type: An abstract data type(ADT) is a data type that is organized in such a way that the specification of the objects and the specification of the operations on the objects is separated from the represention of the objects and the implemention of the operations.
我也是从c语言开始的,后来学习c++,现在使用java,刚开始接触面向对象的概念时跟你现在的情况一样,不过经过一段时间的实际编程后,现在回头再认真读一下这两个定义,发现自己有了许多深入的理解,感觉自己开始体会到当初那么多c语言的大牛为什么要转到面向对象上来了。实际编程会对你的理解起到很大帮助作用的。





如果只是做些1000行以下的小程序,C++的优势倒真体现不出来,现在的程序已经到了几万行,十几万行(已经不能称为程序,是一个软件系统),编写的话需要很成熟的软件工程来控制,C++的优势就在于此,你所提到的继承,虚拟,摸版,每一个概念都有软件工程的基础


真正的想理解C++,你应该先学OOA和OOD,因为首先面向对象是一种思想,是一种程序分析和程序设计的思想。面向对象可以可以很好的体现现实之间事务的关系。因而它是一种比较好的程序分析和设计方法。而C++语言不过是可以很好的实现这些方法的成果的一种语言,如果你愿意,你也可以用C来实现实现这些设计,一样可以做到,只是难度更大一点。国内的程序员大多只注重编程,不注重分析和设计的能力,所以到最后学到了C++的时候就感到很迷茫。所以我建议你看看北大的翻译过的一本《面向对象分析》和《面向对象设计》。我原来有,可惜丢了,sign。找到了也给我寄一本





VC说穿了就是微软提供给大家的一个C++编译平台而已。千万不要将C++和VC这两个不同的东西混淆了。正如楼上的几位高人所说,学习C++是学习OO编程思想的精髓,而学习VC则是如何掌握和运用这个编译平台。之所以许多初学者被VC搞得头昏脑胀(包括当时的我自己),那是因为VC和MFC里面包含有太多有关WindowsAPI的定义和结构,往往看了半天都不知道是干什么用的,因为每一项引深出去都是一大堆的未知,这样也只能造成更加的迷惑和不解。

其实,我建议初学者大可不必早早的进入Windows编程这个领域,先把C++的基础打牢,尤其是对OO编程要有一个很清晰的概念。那时你再学习Windows编程,将会容易得多,说穿了用MFC对Windows编程无非也就是按照微软所事先定义好的一些规范和结构,对一些对象的来回调用而已,而这些Windows编程往往在整个软件项目中只是占据了UI这一小部分。一个程序真正的内涵还是在于程序员对程序内容、框架和结构本身的一种创新。

有志者事竟成!大家千万不要被困难所吓倒,努力是不会白费的!




"有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引
入。"

"程序测试是表明存在故障的非常有效的方法,但对于证明没有故障,调试是很无能
为力的。"

Dijkstra大力鼓吹程序正确性证明,但这一方法离实用还有相当距离,因为一段源程
序的正确性证明的文字往往比源代码还要长,所以充分的软件测试今天仍不可或缺。但是
程序员的科学训练是十分重要的,有人曾做过一个试验:一个题目由一批印度程序员编程
,其结果惊人地相似;而由一批中国程序员来做,编出的程序五花八门。中国的软件人员
有时把创造性放在不恰当的地方。只有规范的科学的编程,一个大项目才能得到有效的管
理,其质量才有保证。

中国软件产业的发展需要有洞察力的帅才,也需要一大批训练有素的程序设计人员和
既懂技术又懂管理的项目领导人。




做程序一定要规范。
反正我做的时候,就想如果别人看,能不能懂。
好的习惯和约定一定要学好的。

论坛徽章:
0
5 [报告]
发表于 2003-02-19 16:56 |只看该作者

C++与OOP的学习讨论

写得不错,

前不久,我用c++在linux写了一个服务程序,写的不咋样?在写的过程中。觉得C++封装比较好,将一些功能封装起来,如:锁,线程,数据库操作,日志,socket都封装到一个个class中,好管理,好修改。
有一些临界资源像数据库类,日志,网络资源,可以从锁继承,
这样好像流程更清晰一些
内存的管理上,在构造函数中分配 (new) 在析构函数中释放(delete , Null) ,方便一些.

不知道你们写c++有何感觉??

论坛徽章:
0
6 [报告]
发表于 2003-02-20 09:29 |只看该作者

C++与OOP的学习讨论

我第一次写的时候
也不知道怎样封装

也不知道系统应该怎样分对象
所以写写改改



后来写多了就熟练了

论坛徽章:
0
7 [报告]
发表于 2003-02-20 12:40 |只看该作者

C++与OOP的学习讨论

收藏先,俺不學VC。高難,

论坛徽章:
0
8 [报告]
发表于 2003-02-22 00:19 |只看该作者

C++与OOP的学习讨论

关于c++
学C++的人对于封装应该是很清楚了。我主要谈一点继承和多态的知识。。
继承是将不同子类的共性提取出形成父类,主要目的还是利于程序的管理和维护。但有时需要注意有些情况用继承不一定好,而应该采取授权。

关于在什么时候使用多态?
例如:在设计一个应用程序时,可能需要使用不同的数据库(如DB2,ORACLE),我们不会为运行在不同数据库的平台上都写一套应用程序。
解决这个问题的其中一个方法就是用多态.
应用程序访问数据库时调用一个虚类。该虚类的子类分别实现针对不同数据库的操作。
当然,你也可以用odbc,或用生成源程序的方法来解决问题。。

论坛徽章:
0
9 [报告]
发表于 2003-02-22 00:22 |只看该作者

C++与OOP的学习讨论

对于面向对象的开发,建议学习一些UML的知识!

论坛徽章:
0
10 [报告]
发表于 2003-02-22 17:02 |只看该作者

C++与OOP的学习讨论

C++总的来说,没有做到彻底的面向对象,许多代码还是用复制的方法重复使用,交叉继承有很多问题。C++,在保留指针的同时,不可避免使它还是一宗比较低级的语言。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP