欢迎来到天天文库
浏览记录
ID:34542131
大小:891.54 KB
页数:43页
时间:2019-03-07
《c#语言基础_2_类的设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、(二)类的设计2对象(object)和类(class)世界由对象构成——万物皆是对象,每个对象为世界的运转贡献自身的力量对象独一无二。如何刻划对象?——通过类分析对象的特征,有动(动态行为)静(静态属性)之分,以及内(私隐)外(外在表现)之分对对象的特征归纳、抽象(泛化)而得类,然后对类具体化(特化)而得对象人类思维认知过程:特化—泛化—特化(具体—抽象—具体)计算机程序世界的对象和类程序(系统)世界也由各种程序对象构成,一个大系统要能完成其功用,依靠若干程序对象的共同协作才能达成开发程序系统就是要生产出组成系统的各个程序对象
2、,然后装配起来与现实世界制造产品类似,计算机需要需要对象设计图和装配图才能制造出程序对象,计算机程序世界的这些产品设计图就是各种类的定义代码3类是对象的抽象,对象是类的实例对类也可继续抽象泛化,到极致就得到抽象类,抽象类的特化仍是类而非对象类设计要点确定属性和行为——数据成员和函数成员只选择与应用域相关的属性及行为,而非无所不包确定外观和私隐——公开接口和细节隐藏考虑哪些成员外界可见,哪些对外界隐藏以上两点就是面向对象方法中的封装封装过程是融合于对对象的抽象分析过程中本章主要介绍C#语言机制,如何支持面向对象方法的封装性特征4
3、采用真正的面向对象设计方法上一章实现了一个WordCount程序:它可以接受参数输入,然后打开参数所指的文本文件,读取文件中文本行并存储起来,把文本串分解为单个单词并作出现累计,最后按字典顺序把各单词出现次数输出到另一个文本文件中。整个过程可以说是以面向过程的思路来进行与熟知的C++过程式程序比较,最基本的改变或许就是要求把变量和函数都放入一个类定义中。显然,这只是以类的语法来实现过程式编程应用面向对象方法设计程序,需要思维上的扭转立足全局,由粗到细,由浅入深,由表及里过程式方法关注的是“如何做”;面向对象方法则重点考虑“谁来做”的
4、问题,“如何做”则放后。——“推迟实现”的观点,软件开发越迟“实现”,成功率越高5WordCountclass设计从哪儿开始?暂且忘掉单词分解的Split()函数,ArrayList对象,HashTable对象等具体细节,想一想诸如打开文件,读取文件,统计,输出结果这些工作由哪些成员函数来完成(如果要开发更大型的程序,则先考虑各部分工作分别由哪类对象来做)将所有工作都交由一个成员函数来做并非好设计(为什么?请大家列举原因)内聚性概念设立以下成员函数负责上述几项工作:openFile()readFile()countWords()wri
5、teWords()另外为保障上述工作,可能还需要一些前期准备的工作(初始化任务),而所有工作完成后有可能要进行清理的工作6确定WordCount具有的成员函数后,接着粗略考虑函数的接口,即:传入参数和返回值的设置成员函数通常可以不带参数和返回值,借助类的数据成员完成其任务,这样可以简化编程模式接下来要考虑成员函数的访问级别,这个工作很重要,关系到类信息隐藏的效果,这是封装性的要求(回想一下封装的概念)可选择的访问级别是public或private,类内的public成员越多,则细节暴露越多,对类的使用就越不稳定(开发维护难度加大),类
6、成员默认的(即不声明时)访问级别是private应尽量降低外界对类的成员函数的直接调用能力。也就是说,只要能够实现类承诺的功能,应尽量把成员函数设置为private级别。WordCount的这几个成员函数是整个统计功能的几个子过程,逻辑上属于内部事务,不应对外开放,应设为private,而另外设置一个public函数processFile()把它们打包,由外界调用(想想这样做的好处)7围绕“工作由谁做”,类WordCount大体轮廓已设计出来(暂不考虑函数的实现细节,而以简单屏幕输出来代表细节):usingSystem;publiccla
7、ssWordCount{publicvoidprocessFile(){openFiles();readFile();countWords();writeWords();}privatevoidcountWords(){Console.WriteLine(“countWords函数”);}privatevoidreadFiles(){Console.WriteLine(“readFiles(”);}privatevoidopenFiles(){Console.WriteLine(“openFiles函数”);}privatevoidwriteW
8、ords(){Console.WriteLine(“writeWords函数”);}}8尽管上面的函数没有实现细节,但这个类已经是一个完整的定义,可
此文档下载收益归作者所有