文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#一步一步教你如何去写面向对象代码

2024-12-14 05:09

关注

这是一篇文字较多的文章,建议您仔细阅读,因为它将完整展示构建一个面向对象代码的过程,当然这个思想过程是我个人的过程,每个人有自己思考的方式方法,我的仅供参考。

一、编写面向对象,首先要构思

构思一般随意,你可以在自己脑海中构思,也可以借助专业的UML来构思,又或者借助纸笔构思,总之,一切随意,只要你喜欢。

那么下面这张图,是我在纸上画的构思:

 

 

二、形成你的思路

通过构思,你可以慢慢的理清、形成自己的代码思路。

回到“家庭”这个例子,我当时是这么思考的:

家庭,就要有家庭成员,所以,我可能会有一个IMember的接口。

然后我想到家庭成员之间存在一定的关系,比如父与子、母与子等关系,于是有了IRelation接口。

接着我就想到了家庭属性,家庭应该是独特的,自己的定义,所以就有了Family,有了Family,我就想到了应该抽象成IFamily,而IFamily很可能会有家庭名称、人员列表等属性或者方法定义。

再然后我回顾之前的思路,想到关系会有多种类型,它可能会是个枚举,所以就有RelationTypes枚举对象。

那有了关系,可能需要一个关系管理类来管理它。所以,我就有了RelationManager类。

最后我又思考到了家庭成员,每个成员都有自己的个性。而个性是复杂,不一定是单一的,比如有些成员好动而热情,比如爸爸面冷心热等。于是我想个性应该是个具有Flags标签的枚举,允许一个成员具有多重个性。

三、检查回顾,并理解你的需求是否满足

我们在工作中,对于一个功能开发项,它首要保证的是实现业务需求,所以,我们在做了简单的建模后(构思即是建模的过程),需要结合实际,看是否满足需要。

那么我们看“家庭”这个例子,由于我是举例子,所以它目前的简单建模可能是正确的。暂时也不需要加其它的需求了。

但现在觉得没有问题的建模,在实际编写代码后,可能会面临实际项目中,我们尚未考虑到的点,这时就需要不断迭代建模。直到你的思维准确为止。

四、关于对象的方法或者属性

我个人的习惯是简单建模出整体框架后,就开始写代码了。

可能有的人,做事较为细致,在构建阶段,就会想要事先定义好每一个对象的方法或者属性,这也是可以的。看您习惯和喜欢。

五、编码,我们先写关系代码

1.先定义成员关系接口

 

 

2.定义成员关系类型的枚举

 

 

3.定义关系创建接口

 

 

这里要稍微注意下,这与我的简单建模规划的关系思想有些不同,增加了关系创建接口。所以说,我们在实际编码过程中,针对业务的情况会有偏移,需要进行重构建模。

4.定义成员关系接口的实现类

 

 

这里要特别注意的是,我这里将实现类定义成internal,这就意味着,除了我们自己外,外部调用我们api的人,也就是外部程序员引用我们的dll的话,是无法直接new一个Relation对象的,因为我们把它定义成了内部类。这样就可以规范外部调用者的行为,指定了他如果想要实例化这个Relation类的话,必须通过其它途径来实现。

5.定义关系创建类

 

 

这个就是别人想要创建关系时,所必须通过的途径。因为他无法实例化Relation类,只能通过我的RelationBuilder对象的Create()方法来创建,这就规范了使用我们api的人的行为。

六、编码,我们编写家庭成员和个性的代码

1.家庭成员的接口定义

 

 

我们会看到家庭成员接口只定义了全名和性别2个属性,但是家庭成员是有个性的,为什么不放在一起写呢?这就是面向对象的接口隔离原则,你可以参考我的前面文章,有一篇单独讲“接口隔离原则”的。

2.家庭成员的个性枚举,注意个性是多重的,所以,我们的枚举要定义成Flags

 

 

3.然后我们定义一个家庭成员的个性接口

 

 

4.最后,我们来定义家庭成员的实现类Member.cs

 

 

注意看这个成员实现类,它实现了两个接口,分别是IMember和ICharacter。我们定义了它的构造函数,带有fullName和sex两个参数,所有public的公开属性都是只读的,这意味着别人只能访问而无法修改。开放了设置个性的方法SetCharacter()。

好了,由于篇幅很长了,所以,关于家庭的接口,我就不再继续写了。相信你通过上面两个例子,也已经学会了,如何去编写面向对象的代码思路了。

如果你能学会并运用这个思路,那么我很为你高兴。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯