叩开C#之门系列之C#与面向对象编程语言

编程|对象

  C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神。在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。因此,学习C#,就必须具有面向对象思想,不明白所谓的“面向对象思想”,就不可能掌握C#的精髓,而对于C#的理解,就只能仅限于语言特色的表面了。

  很多讲解面向对象思想的书籍和文章喜欢将面向对象与面向过程相比较,然而对于学习程序设计的初学者而言,是完全没有必要的。一张空白的纸张,事实上比写满字的纸张更利于未来的发展。

  那么什么是“面向对象思想”?其精要当然是“一切皆为对象”的意义。软件的开发与设计,是围绕着开发的目标进行的。比如开发一个电子商务网站,那么与电子商务有关的都是我们要操作和关心的,商品、订单、用户、目录、购物车等等,都是对象。如果要开发一个论坛,那么论坛中必备的要素,如论坛分类、主题、帖子、评论、用户,也全都是对象。从小处说,我们要求写一个算法用以计算阶乘,那么起始值、运算结果、以及整个算法都是对象。

  那么对象具有什么特质?一般而言,一个对象应具有属性和行为。以现实世界为例,“人”作为一种特殊的动物,也是我们所称谓的“对象”。这个对象具有很多属性,例如姓名,身高、体重、民族、国籍、出生年月等等。而行为呢,可以是行走、吃饭、跑步、乃至于玩游戏、踢足球。如果从词义学的角度来看,属性更偏向于名词的范畴,而行为则近乎于动词。然而对象也有特殊的情况,或者只具有属性,或者只具有行为。例如身份证,可能只具有姓名,出生年月,籍贯,身份证号等属性,而没有行为。例如“飞”,这本身是一种动作,但同样可以认为是一种行为。

  然而这种划分并非绝对,根据实际情况,同一种对象具有的属性和行为可能不一样。例如同样是“人”,如果是要开发一个户籍管理系统,我们就不必去考虑行走、吃饭、跑步等行为,但如果是一个足球游戏,那么对象“人”,就需要各种踢足球的动作作为该对象的行为了。再比如“身份证”对象,也可能为了使用方便,会为它添加“IsValidate”这样一个行为。

  还要注意的是,很多时候属性其实本身也是一个对象,例如姓名,可以是string类型,它属于Sytem.Object对象类型,我们也可以单独为姓名建立一个类对象:

public class Name
{
public string FirstName;
public string MiddleName;
public string LastName;
}

  在C#里,有各种各样的对象类型,除了本身提供的基本类型外,还支持自定义各种类型,包括class,struct,enum,interface,delegate,event。以前面的例子来看,对象Person“人”,就可以被定义为class类型,国籍可以被定义为enum类型。没有行为的身份证,也可以被定义为struct类型。动作“飞”可以被定义为interface类型。至于delegate和event,则是一种特殊对象类型,例如我们可以为论坛管理系统,定义一系列事件,如BeforePost,AfterPost等等。关于这些内容,我会在后面的内容中详细讲解。

  要掌握面向对象思想,就必须具备识别系统中对象的能力。在我们要开发的系统中,哪些需要定义为单独 的对象,而且这个对象应该具备哪些属性和行为,都是初学者比较头疼的问题。要正确地识别对象,就需要首先分析该系统所应实现的功能。例如,我们要求开发一个电子商务系统,功能要求如下:

  1、支持商品的查询功能;

  2、用户如需购买商品,需要成为注册用户并登录;

  3、如果当前库存无该商品,用户可以预订;

  4、用户可以将商品放入购物车;

  5、用户购买商品之前,需提交订单;

  6、用户提交订单后,系统应将订购信息发送邮件给用户;

  7、用户可以对商品添加评论。

  有一个简单的方法,可以帮助我们识别对象,就是找出这些功能描述中的关键名词,如商品、用户、购物车、订单、评论。这些词语基本上可以涵盖这个电子商务系统的主要对象了。至于对象的属性,可以考察该系统对这个对象的要求和所需要的信息。例如商品,必然要求有商品名、价格、相关图片、所属类别、库存量等等。至于行为,我们还可以从功能描述中去寻找与这些对象名词相关联的动词。例如商品的查询,就代表商品具有Search行为。用户注册与登录,就代表该用户具有这两种行为:Register,SignIn。当然隐含的行为自然还包括SignOut。

  真正要识别好对象,也许我们需要掌握UML的知识,知道怎么写用例。或者利用极限编程的方法,把一个个用户故事写出来,然后一一识别。不过这些知识对于初学者似乎太难了。我们现在知道能有这样一个方法就可以了。我更希望的是,读者在看完本节,能够建立起“一切皆为对象”的思想。最后,更希望大家能把识别对象看作是一种填字游戏,关键不在于答案是什么,乐趣全在游戏中了。

  面向对象思想博大精深,不是三言两语就能说清楚的。但建立这样一种思想,要存乎于你的内心,这在与一种“妙悟”。也许在你写了几百个小程序之后还没能体会到面向对象的真谛,但是在霎那之间,你却突然明白了,顿有一种拨开云开见月明的喜悦。我不是故意卖弄玄虚,有时候开发软件还真需要那么一点灵感,有人说,编程是一门艺术,我同意。那么这种“妙悟”什么时候能来到,我无法确知答案,这需要你的体悟。不过这种体悟与谈禅无关,不是每天冥想就可以的,还是踏实点,多写写程序,慢慢你就会明白了。

时间: 2024-11-09 00:15:01

叩开C#之门系列之C#与面向对象编程语言的相关文章

叩开C#之门系列之几个重要名词

初学者很容易把这些概念搞混淆.先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件.在.Net下,一个项目可以表现为多种类型,如控制台应用程序,Windows应用程序,类库(Class Library),Web应用程序,Web Service,Windows控件等等.如果经过编译,从扩展名来看,应用程序都会被编译为.exe文件,而其余的会被编译为.dll文件.既然是.exe文件,就表明它是可以被执行的,表现在程序中,这些应用程序都有一个主程序入口点,即方法Main().而类库

#答题送书# 技术之瞳——叩开阿里之门之在线笔试

一个月的答题时间匆匆已过,这期间大家回贴积极踊跃.优质回复很多,在选取获奖用户时小编犯了难,经过讨论现将获奖名额增至10位,让好书能够传递给更多的人! 获奖用户 hachman 小掌 阿狸master clione linxi 杨晓兵 卡来宝 阿个力 poapa 东风玖哥 答案 1.C 2.ACD 3.B 4.D 5.BD 6.D 7.D 8.B 9.B 10.C 领奖方式 请获奖用户将收件信息以及登录截图发送至邮箱wangy@phei.com.cn中,我们会及时寄出奖品图书.(截图如下) 活动

Csharp+Asp.net系列教程(一)

asp.net|教程 本教程参考C#和ASP.NET程序设计教程撰写,有什么不足之处请大家指出,或在老猫的理想BLOG留言.首先讲解一下c#,这里只是粗略的讲解,详细内容请购买相关书籍,或参阅相关文档.c#已经取消了c++中的指针,并且在c++中大量被使用的操作符(:: ->)已经不在出现,c#中指支持一个".".c#具有面向对象编程语言的所有特性,如封装.继承.多态等.而且比java更面向对象,每种类型都可以看作一个对象.但c#指允许单继承,即一个类不会有多个基类.另外,c#没

金旭亮:如何选择你学的第一门编程语言?

说明:这篇文章是专门针对大学低年级学生(和其他软件开发初学者)写的,如果你己经是研究生或本科高年级学生,请将这篇文章转发给你的师弟或师妹,希望这篇文章能够帮助他们少走弯路,顺利地迈入软件开发的大门;如果您是一位有经验的软件开发者,或者是关注计算机教育的同行,也敬请提出宝贵意见. 最近,台湾知名技术专家蔡学镛先生写了一本<编程ING>,宣称"人人都能学会程序设计".作为一名IT教育工作者,这本书引发了我的兴趣,翻看之后,共鸣之处不少,结合国内计算机教育的现状,产生了颇多感触,

【SSH系列】---Hibernate的基本映射

       开篇前言       在前面的博文中,小编分别介绍了[SSH系列]-- hibernate基本原理&&入门demo,通过这篇博文,小伙伴们对hibernate已经有了基本的了解,以及hibernate的核心,采用对象化的思维操作关系型数据库.     [SSH系列]-- Hibernate持久化对象的三种状态 ,通过这篇博文的讲解,小伙伴们了解到java对象的生命周期,是从通过new语句创建开始,到不再被任何引用变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回.在h

创业开局六绝招助创业者迎来开门红

别以为自己当老板很容易!有人创业第一年找不到半个客户,100万元创业资金一下子就花光:有人自行创业后,没有大公司的蔽荫,"感觉自己好像流浪狗".更多创业者已经意识到,创业先要创势,创造出了良好的开局,形成了自己的气势,创业才有可能得以顺利进行下去. <左传.曹刿论战>有云:一鼓作气,再而衰,三而竭.运兵之道是如此,创业开办企业也同样讲究这个道理.近年来,很多创业成功学的研究者都提出,开局对创业者非常重要.一个屡战屡败的人,也许终有一天能够看到成功的希望,但是相对而言,他的历

《.NET软件技术学习与实践》之序言

  自序        这是一本有自已特色的书.       这是一本于讲技术之外,更讲学习方法的书       这是一本从首至尾贯彻"授人与鱼,不如授人与渔"的书       2003年暑假我在CSDN程序人生论坛发表的个人自传--<一个普通IT人的十年回顾>(已收入本书配套光盘),一石激起千层浪,被许多网站转载,我个人也收到了海内外近千封电子邮件.       我是一个在没有明师指导情况下,几乎完全靠自己在黑暗中摸索,在自学之路上艰难跋涉过来的软件开发者.我不敢自称为&

用后期创造你的魔法特效

  首先我想告诉大家的是想法比技术重要.技术提高相对容易,ps常用命令就那么多,花时间总能掌握.大家关注的应该是为什么这么做和做的方法,而不是具体的数据. 一:前期拍摄 一直就很喜欢看玄幻题材的小说和电影,最爱玩的游戏就是"博德之门"系列.这就是我拍这组片子的灵感和基础.主题确定后那么下面一切工作都应该围绕着这个主题来进行.场地是"金陵十三钗"的拍摄基地 ,古朴做旧的教堂很适合这个主题.模特我选择了经常合作的妹子小安,冷酷的眼神完全达到了我要求.一般的妹子很难表现出

用Photoshop后期创造你的魔法特效

  首先我想告诉大家的是想法比技术重要.技术提高相对容易,ps常用命令就那么多,花时间总能掌握.大家关注的应该是为什么这么做和做的方法,而不是具体的数据. 一:前期拍摄 一直就很喜欢看玄幻题材的小说和电影,最爱玩的游戏就是"博德之门"系列.这就是我拍这组片子的灵感和基础.主题确定后那么下面一切工作都应该围绕着这个主题来进行.场地是"金陵十三钗"的拍摄基地 ,古朴做旧的教堂很适合这个主题.模特我选择了经常合作的妹子小安,冷酷的眼神完全达到了我要求.一般的妹子很难表现出