免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: art_codes
打印 上一主题 下一主题

[C++] 确认一下c++中不能使用interface(如java)那样的功能把 [复制链接]

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
31 [报告]
发表于 2009-03-31 15:07 |显示全部楼层
原帖由 flw 于 2009-3-31 14:09 发表
别本质本质的,C 程序员的最大的毛病就是喜欢说“本质上”。你的本质还是碳水化合物呢。
本质和表象是不可分隔的整体。

抽象有很多种方法,OO 只不过是其中一种。
你用别的方法达到了 OO 想要达到的目的, ...


看问题的角度不同而已。

http://en.wikipedia.org/wiki/Object_oriented
Object-oriented programming (OOP) is a programming paradigm that uses "objects" and their interactions to design applications and computer programs. Programming techniques may include features such as information hiding, data abstraction, encapsulation, modularity, polymorphism, and inheritance. It was not commonly used in mainstream software application development until the early 1990s. Many modern programming languages now support OOP.

如上,如果抠字眼的话,一个文件描述符就代表着一个文件对象(对象);这个文件对象可以通过fwrite/fread方法来访问和操作(方法),这两个接口也只能操纵文件描述符(或代表文件描述符的句柄);除了基本的文件描述符区域,特定的设备文件还有自己特定的数据区,可以通过相对应的xxctl类接口操纵这些特殊区域(继承)……

请问,这个表述是否符合面向对象标准?
现在我把它的设计完全用面向对象的术语描述出来,然后再用C实现一遍,即使最终源代码一模一样,也是前者绝对不是面向对象而后来的实现才是面向对象的,哪怕它们最终写出的源码一模一样?

或者说,只有使用面向对象术语,才算“正宗”的面向对象,否则就是名不正言不顺、更不是主观上故意向面向对象靠拢的,自然就不能算面向对象?

或者,你的意思是: 必须先照着OOC之类教材搞出个C模拟OO框架出来,然后用这个框架搭建才叫面向对象?

不妨看看GTK+,看看它没有模拟任何面向对象关键字和语法,它的作者是否时时处处都受着面向对象的影响?它的整体设计是不是面向对象的?

我想,你的意思总不会是不用面向对象语言就写不出面向对象程序吧?



事实上,我认为你完全没有理解我的意思。

我的意思就是说:
虽然设计时还没有面向对象概念,但从面向对象的角度去看,泛文件设计称得上是真正的面向对象。
只有从那些并非刻意要面向对象的系统出发去发现它们的优点,并找到面向对象的对应物,这才有可能真正理解面向对象最基本最重要的是什么,才能真正朴素的认识到面向对象的好处;也才知道面向对象要抽象的究竟是什么。

相反,嚷嚷了很久面向对象,熟记了很多术语特性特殊用法,究竟为了什么?就为了争执生僻语言特性?!

[ 本帖最后由 shan_ghost 于 2009-3-31 15:10 编辑 ]

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
32 [报告]
发表于 2009-03-31 15:23 |显示全部楼层
要讨论一个问题,首先要明确定义。

是的,抽象和OO不是一回事。只有符合特定标准的抽象才叫OO。

那么,如果不定义下这个抽象到什么程度算OO的话,讨论显然只能落入相互讥笑和谩骂的结局。


我对面向对象程序设计的定义是:
1、以同类数据结构或其他机制表示同类实体(对象)
以后省略 其他机制 四字(特意提出其他机制,是因为某些语言可能有特殊方法组织信息)
2、以接受这些数据结构的处理函数实现操纵对象的逻辑(方法)
3、允许扩充出兼容数据结构(和/或增加相关的处理函数),以便扩展功能(继承)
4、如有必要,设计处理函数隐含替换机制(多态)

一旦一个项目是按照这个思路来设计的,不管最终用什么实现,不管设计师脑子里有没有念叨面向对象三原则,它都是面向对象的。

举个例子,iTCL使用命名空间模拟类和对象,使用这个机制设计的程序算不算面向对象?
如果我把这个机制打散,只抽出当前自己要用到的部分机制实现了一个项目,符合上面的几条标准,这算不算面向对象?

我认为都算。

相反,如果一个程序虽然用了很多class、inherit、virtual,但实际上一个class包了很多不相干的东西、类内部数据仅仅是全局数据的替代品、对象则被当作划分不同人用到的全局数据的“天然屏障”,this则是指向全局数据替代品的索引指针……这样凑起来的系统,我叫它结构化甚至非结构化的,并不认为它和面向对象有半点联系。

这也正是为何我认为必须把面向对象语言给出的那些“面向对象的协议”和“面向对象的设计”本身区分来看的根本原因。


我想请flw兄说明一下自己对面向对象的定义。
我相信不会是“必须使用面向对象语言(而不是设计自己的面向对象机制)才能算是面向对象程序设计”。

当然,我认为我们是在讨论“面向对象是什么”而不是“用面向对象语言开发面向对象程序”,也不是在讨论“怎样为非面向对象语言增加面向对象机制才能让用它开发的项目变成面向对象的”。

[ 本帖最后由 shan_ghost 于 2009-3-31 16:10 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP