技术开发 频道

C#与面向对象编程语言

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

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