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。
[1] [2]
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/32190