谁能比喻一下"类","对象","接口","委托","事件","泛型"等概念.

atyzy 2012-02-26 10:25:41
自己的水平还停留在"变量"的阶段,感觉这些概念都是一种"变量".
可惜程序这玩意儿是老外发明的,翻译教材的大牛又都有"西方思维方式",可苦了我这"老内"了,捧本书看n遍也记不住这些概念.求哪位给打个比喻,帮助理解一下.
...全文
531 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
mickers 2013-04-02
  • 打赏
  • 举报
回复
引用 3 楼 nonocast 的回复:
委托和事件 -------------------------------------- 比如你去书店买书,不过碰巧书没有,过两天才会来,那你交待书店等书来了就打我电话,我过来拿。 从委托和事件的角度来看,你把“打电话”这样一个事情委托给了书店,在“书到了”这个事件的时候触发,不知道这样解释你是不是可以理解。 “打电话”这个动作并不是在你去书店的时候发生,……
很好,记下了
atyzy 2013-03-10
  • 打赏
  • 举报
回复
分数不代表回答正确与否,只能反映老师的耐心程度,还有老师虽然寥寥数语,对我帮助确非常大,可惜分很少,就不给了,请理解,呵呵。
atyzy 2013-03-10
  • 打赏
  • 举报
回复
好长时间没来了,谢谢大家的回复。 也许真像那位老师说的,需要多写代码,才能真正理解;也许真的是每个人的理解都不同。 边看帖子边想,学了程序会在以下领域有所领悟: 1。哲学,人生; 2。西方文化、思维方式; 3。管理; 。。。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
在弱类型语言中,根本不需要interface这样的东西,因为消息随便发,都是运行时动态绑定,而csharp这类强类型语言为了解决这个问题才设计interface解决编译时调用的问题。
[/Quote]

因为“弱”,所以混乱。

面向对象系统分析设计是一种设计语言,它要求在类型封装、继承和多态方面要“强”起来,而不是仅仅停留在“弱”上面。

类似javascript那样的语言充其量算是个“基于对象”的语言,而达不到“面向对象语言”的高度。因为它太弱了,可以随便混淆设计的实现方式。
  • 打赏
  • 举报
回复
最简单的理解就是说继承描述了一种“IS-A”式的关系,而不是“HAS-A”的关系。

如果说一个人跟他父亲是继承关系,那么就等于说“一个人他是他自己的父亲”一样是错误的。那种胡乱使用“继承”这个词儿的人,会制造很多诡异的设计问题出来。所以面向对象设计的第一个简单原则就是要保证子类对象可以替换测试原先针对父类对象的测试用例,就好象“马可以骑,所以白马可以骑”、“病人需要医生诊断,所以住院部病人需要医生诊断,并且门诊部病人也需要医生诊断”。

如果滥用“继承”甚至把父子财产问题也“比喻”成是OO上的继承,就等于说你说“父亲可以跟母亲生下我,所以我可以跟母亲生下我自己”。这就是错误的。
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
继承最好和修饰符一起理解,你家里的汽车,你可以起开。因为是你从爸爸继承下来的(public) 你爸爸有多少钱,你不能知道,因为那是男人的秘密(private) 但是 你如果被授权拿钱了就另说了
public money{get;set;}; 这个例子不好,你就将就着点吧。
[/Quote]

这是典型地错误观点。

OO编程的继承,跟财产继承是两回事。仅凭字眼一样,是错误的。从OO概念上,财产继承根本跟继承扯不上半点关系。所谓继承,就好象“白马也是马、张柏芝是女人也是演员、女人也有前列腺”一样的概念,而不是什么“你从你爸爸那里继承汽车”这种概念!
hikarli 2012-09-22
  • 打赏
  • 举报
回复
这些东西就是抽象的说法!!

类(也就是方法):里面包含了你做的事情!比如吃饭、睡觉、玩等等

对象:任何东西都是对象!就像你就是我的对象,那个椅子是我的对象,我是你的对象(就是目标的意思)

委托:就是你让别人去买东西,让别人去干嘛

接口:就是“规定”!假如接口定义了“手、脚、头、身体”,那你继承这个接口的时候,你就必须设置好“手、脚、头、身体”的肤色、长度、重力等!

事件:就是触发了什么事!
threenewbee 2012-02-28
  • 打赏
  • 举报
回复
我给你的建议是,你先把基础的知识学好,多写代码,积累经验。如果你每天都能多学一点,那么总有一天,会理解这些的。

本质上说,无论是什么语言,最终能被计算机执行的都是机器语言,这说明高级语言和机器语言是等价的。高级语言的一切概念,是为了便于更简单、更贴近人的思维方式和设计习惯而产生的。这是需求,有了需求,再去理解怎么做就有了概念。

从函数到委托,本质上是你需求的递进——从我需要重复利用代码(将变量作为参数传递给函数),到我要重复利用代码的结构(将函数作为函数的变量传给函数)。你为什么要将函数作为函数的参数呢?这不是C#语言能告诉你的。它告诉你的是,用委托来实现。
threenewbee 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 atyzy 的回复:]
谢谢谢谢!比喻生动形象,远超过我的预期了,好象清晰一些了,等我回头看看书,再理解理解.
我自己再说说,大家纠正一下:
"类"是一个描述,定义了一类事物,比如"多边形"---3个以上的直线组成的闭合形状;

"对象"是一个具体的事物,比如"4边形";("对象是类的一个实例",那 "对象" 就是 "实例"吗?)

"委托"没理解,我怎么感觉和"事件"差不多?比如按钮,当我click时,就发……
[/Quote]
从你的理解和再转述看来,你还是什么也没有理解。
threenewbee 2012-02-28
  • 打赏
  • 举报
回复
没办法比喻。这如同像小孩子解释什么是结婚一样。

而且更糟糕的是。除非你真正理解了,否则光生动形象是没用的,因为生动形象的部分你理解了,不理解的还是不理解。

如同和小孩子说,结婚就是爸爸妈妈住在一起了,如果你理解结婚,那么这是生动形象的。但是小孩子完全没有概念,他又不理解了,我和弟弟也住在一起了,是不是可以结婚呢。
oneleafpz 2012-02-28
  • 打赏
  • 举报
回复
大神们解释的很清楚啊,学习了
挨踢直男 2012-02-28
  • 打赏
  • 举报
回复


类:对象的抽象
对象:类的实例
接口:类的抽相
委托:使函数可以成为单独的个体进行使用
事件:委托的集合
泛型:c#本是强类型语言,可以通过泛型实现弱类型语言的某此特性
wanghui0380 2012-02-28
  • 打赏
  • 举报
回复
不矫情,面对对象用最朴素的话说就是 直观反应你头脑中的现实对象模型(那些是模型的本质,那些是模型的内涵,那些是模型的外延,那些是模型的功能,那些是需要其他人配合迪,那些是暂时未定需要临时确定迪)
不同的人看问题的方式和看问题的角度不同,所以我们根本无法用啥一个比喻去比喻他,这也是所有有关设计模式和对象书籍统一的毛病(谁告诉你那本书上对象一定如此,谁告诉你这个模式一定就得这样,书上很多就是为了告诉你如此,所以就硬造了一个场景去描述,而对这个场景其实不同人不同项目观点不同,所以就算是同一个场景我们也未必就这个模式,这个技巧,这个抽象)

所以,我们不能比喻,只能告诉你最上面那排红字。至于你怎么去看“哈姆雷特”我不知道,我只知道一千个人一千个哈姆雷特,虽然有些看法可以相同,但是我们也可以有不同的看法
ruanwei1987 2012-02-28
  • 打赏
  • 举报
回复

学习好像也有一道一道鸿沟,当过去了就觉得很容易,当没过去的时候就感觉沟后面很陌生,
zhanghw0212 2012-02-27
  • 打赏
  • 举报
回复
继承最好和修饰符一起理解,你家里的汽车,你可以起开。因为是你从爸爸继承下来的(public) 你爸爸有多少钱,你不能知道,因为那是男人的秘密(private) 但是 你如果被授权拿钱了就另说了
public money{get;set;}; 这个例子不好,你就将就着点吧。
zhanghw0212 2012-02-27
  • 打赏
  • 举报
回复
我在学习类的概念的时候老师也是举的也是人。在理解类的概念最好和类的属性一起理解,这就好比人。把人看做1个类(也就是人类),而人又有不同。(中国人、美国人、法国人)对了,只要是人都有共有的特点也就是属性(名字,生日等等),可这些不能单独存在,因为这样单拿出来没有什么意义,所以必须属性要在1个容器之中 class Preson{ string name{set;get;};} 但我想给这些熟悉填上其的特点,这就要用对象的概念 Person p = new Person() p一般会被说成对象,但它更应该说成1个实例。这里实例和对象要分开,不是1个东西。这里我不多讲,因为我说不明白。但是 p你就认为是你要调用Person中的方法和属性的桥梁。
atyzy 2012-02-27
  • 打赏
  • 举报
回复
谢谢谢谢!比喻生动形象,远超过我的预期了,好象清晰一些了,等我回头看看书,再理解理解.
我自己再说说,大家纠正一下:
"类"是一个描述,定义了一类事物,比如"多边形"---3个以上的直线组成的闭合形状;

"对象"是一个具体的事物,比如"4边形";("对象是类的一个实例",那 "对象" 就是 "实例"吗?)

"委托"没理解,我怎么感觉和"事件"差不多?比如按钮,当我click时,就发生某些动作.或者pageload时,发生某某动作.

"接口",是不是象RS232 \ PCI插槽 \usb\等,都是硬件的"接口",规定了拿根线是传什么数据的,数据是什么格式的等,程序中,接口就是规定我们传递的变量是干什么用的.

effun 2012-02-27
  • 打赏
  • 举报
回复
走在马路上,看到最多的就是汽车(类)。这时突然看到其中一辆(对象)闯了红灯(事件),那是一辆黄色的两厢POLO(属性)轿车,交警叔叔于是把他拦了下来并对其违法行为进行了教育和处罚(委托)。

至于接口的概念,就是一种规范,其实生活中处处可见,例如电源插座,无论什么电气设备,只要其能够工作在220V电压下,并且插头设计成标准尺寸就可以在电源插座上使用了。电脑上的USB接口也是样的道理。

泛型与接口有着异曲同工的作用,接口用于规范类型本身,而泛型侧重于规范类型的成员。例如很多城市设在路边的垃圾箱都分为可回收垃圾和不可回收垃圾两个桶,再例如某些停车场把停车区域划分为小车停车区、货车停车区、客车停车区等,在这两个例子中,垃圾桶和停车区就是两个基本类型,再结合所容纳物品的类型,就派生出五个不同的类型,但其实质是不变的,仅仅是对内容进行了规范。

不知道有没有解释得清楚,希望对你有帮助。
nonocast 2012-02-26
  • 打赏
  • 举报
回复
在弱类型语言中,根本不需要interface这样的东西,因为消息随便发,都是运行时动态绑定,而csharp这类强类型语言为了解决这个问题才设计interface解决编译时调用的问题。
nonocast 2012-02-26
  • 打赏
  • 举报
回复
委托和事件
--------------------------------------
比如你去书店买书,不过碰巧书没有,过两天才会来,那你交待书店等书来了就打我电话,我过来拿。

从委托和事件的角度来看,你把“打电话”这样一个事情委托给了书店,在“书到了”这个事件的时候触发,不知道这样解释你是不是可以理解。

“打电话”这个动作并不是在你去书店的时候发生,因为当时书没来,理解这个很重要。

类和对象
---------------------------------------
类指的是一个模板,而实例是根据这个模板创建出来的东西
比如造楼前有设计图纸,图纸就是模板,而根据图纸造出10栋楼,10栋楼就是10个对象
再比如做棒冰,那个模子就是模板,而通过这个模子做出来的棒冰就是对象
在运行时,对象是实实在在存在的东西,具有"生命",而那个模板已经失去意义了,当然这只是个比喻,实际模板还是有点用的,呵呵

另外在弱类型中,比如javascript,ruby,pyhon中是可以不通过模板直接创建对象,他们的理论就是根据行为回馈来获得的,比如这个对象会鸭子叫,又会像鸭子这样走路,那他就是鸭子,而不必从那个模子里出来,扯远了,顺便提一句。

接口
------------------------------------------
你应该指得的是csharp中的interface,原本方法(同message)在对象上,通过对象可以给他发消息(同method),但为了隔离发消息和实现消息2个概念,设计出interface这个概念,这样在开发设计中,可以针对interface进行编程,因为interface不包括实现部分,这样有效隔离变化,是对象协作的一个基础,相当于2个公司之间的合同契约,我不关心你怎么实现合同内容,我只是根据合同来收钱。
加载更多回复(2)

110,533

社区成员

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

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

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