第三章 面向对象编程基础_第1页
第三章 面向对象编程基础_第2页
第三章 面向对象编程基础_第3页
第三章 面向对象编程基础_第4页
第三章 面向对象编程基础_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章面向对象的编程基础,面向对象编程简述,软件开发领域两种开发方法:面向过程面向对象面向对象概念的出现,是程序设计领域的一个重大进步.,我们可以形象的把对象看成一块积木.积木的设计者需要设计积木的外观,形状及材质,而使用者只需要根据外观与形状进行堆放就可以了.,优点:可维护性复用性扩展性灵活性,面向对象开发中两种身份:设计者,使用者.实际上,我们现在很多的软件开发都是一种组件化开发,在前人的工作基础上添砖加瓦.如:Convert.ToInt32(),当程序规模庞大到一定程度后,需要对其使用面向对象的方法分层设计,使能够进行大批量的同步开发。,对象,具体的事物,一般具有属性与行为。汽车:属性:型号、颜色行为:启动、加速、刹车,鸡:属性:品种、重量、毛色行为:叫、吃东西、下蛋,在现实生活中,人们都是习惯以对象为单位,来研究其性质、行为以及其与其他对象之间的关系同样,在程序中使用对象的概念,就可以将一个程序看成是很多对象相互作用的结果。,几个关键词,封装继承接口,封装,例如看电视,我们通过遥控器就能控制它,并不需要知道电视是怎么搜索频道、接收信号等工作,按下按钮,就能换到另一个频道。我们只是把电视当作一个供我们娱乐的对象,我们只要知道怎么用就行了。,继承,电视机从出现到不断发展,从黑白到彩色,到高清,不管怎么变化,它们都有共同的特征:声音,图像。这在面向对象的理论中就是继承,多态,多种形式或多种形态,同一操作对于不同的对象可以有不同的解释。,类与对象的关系,初学者往往混淆类和对象的概念,实际上它们之间是蓝图和产品的关系,类就是一张蓝图,它规定了对象有哪些特征,而对象是根据这张蓝图生产的产品。从同一个类产生出来的对象,它们具有样的结构,却可能在某些特性上有不同之处。,类与对象的UML表示,类,类定义了一个“模板”,通过这个“模板”可以生成一个或多个对象类定义了一个对象的状态和行为publicclassStudent/姓名,年龄././入学,考试,实习,退学.,类是C#中的一种结构,用于在程序中模拟现实生活中的事物基本语法:访问修饰class/类的成员,实例化,实例化就是创建对象的过程使用new关键字来创建classProgramstaticvoidMain(stringargs)Treea=newTree();Treeb=newTree();classTree,类成员的定义,类成员包括字段、方法和属性。所有成员都有自己的访问级别,定义字段,类所包含的数据字段用标准的变量声明格式和修饰符来声明(可以进行初始化)如:classStudentpublicstringname;publicintage;,classProgramstaticvoidMain(stringargs)Studenta=newStudent();=刘伟;a.age=19;Console.WriteLine();Console.WriteLine(a.age);Console.ReadKey();,字段与方法的访问修饰符,public:在任何地方访问,不受限制internal:访问仅限于当前程序集private:访问仅限于包含类型(默认)protected:访问仅限于包含类或从包含类派生的类型protectedinternal:访问仅限于从包含类派生的当前程序集或类型,定义方法,方法指所具有的行为,用函数的形式进行表达.,classStudentpublicstringname;publicintage;publicvoidShow()Console.WriteLine(我叫0,我1岁了,name,age);publicvoidRun()Console.WriteLine(0正在跑步中.,name);,classProgramstaticvoidMain(stringargs)Studenta=newStudent();=刘伟;a.age=19;a.Show();a.Run();Console.ReadKey();,练习:,1.创建一个类Point,表示一个点.有两个double字段,分别表示x,y坐标.三个方法voidMove(doublea,doubleb)用于将该点在x轴上平移a,在y轴上平移b.voidShow()显示该点当前的坐标.doubleOriginDistance();计算该点与原点的距离。在主函数中创建一个点,设置坐标值后显示,平移,然后再显示.最后计算该点与原点的距离.,2.创建一个Frog类,一个字段:stringname;青蛙的名字intdistance;表示青蛙跳过的距离.一个方法:voidJump()青蛙跳(一个10到20间的随机数)在主函数中创建两个青蛙,让它们各跳10次后,宣布比赛结果.,3猜数字游戏:创建一个类A一个成员变量(字段)intx;指要猜的数(1-100)一个方法:boolguess(intx):用于对字段x进行猜测.如果大了则提示大了,小了则提示小了,等于则提示猜测成功。在主函数中创建一个A类对象,随机设置x字段的值,并让用户猜测,一直到猜中为止.,4创建一个类Student,有姓名,语文,数学,英语四个字段.一个计算平均分的方法.(有结果返回)在主函数中创建二个学生,给各个字段赋值,计算平均分并显示出来.,5.创建一个Pet类,有昵称(string),饥饿值(int),清洁值(int)三个字段,有feed和Bath方法,每次喂食增加5个饥饿值,每次洗澡增加3点清洁值.一个Show方法,将宠物当前状态显示出来.在主函数中创建一个宠物,设置三个字段,喂几次,洗几次澡,显示宠物当前状态.,属性,为了实现良好的数据封装和数据隐藏,类的字段成员的访问属性一般设置成private或protected,这样在类的外部就不能直接读写这些字段成员了,通常的办法是提供public级的方法来访问私有的或受保护的字段。,定义属性,属性拥有两个类似于函数的块,一个块用于获取属性的值,另一个用于设置属性的值。这两个块也称为访问器,分别用get和set来定义。可以只写一个来创建只读或只写属性。,public属性名get/获取属性的代码set/设置属性的错码在set函数中,可以使用关键字value引用用户提供的属性值,classTestprivateintmyInt;publicintMyIntPropgetreturnmyInt;setmyInt=value;,classCarprivatedoublerotateSpeed;publicdoubleSpeedgetConsole.WriteLine(当前车轮转速是0转/每秒,车速据此计算得出,rotateSpeed);returnrotateSpeed*2*3600/1000;setrotateSpeed=value*1000/3600/2;Console.WriteLine(根据车速设车轮转速为0转/每秒,rotateSpeed);,publicclassBankCustomerpublicstringName;publicdecimalBalance;publicvoidDeposit(decimalamount)this.Balance+=amount;,BankCustomerc;c=newBankCustomer();c.Name=张三;c.Balance=0.0M;c.Deposit(1000.0M);Console.Write(c.Balance);Console.ReadLine();,构造函数,C#提供了对对象进行初始化的方法,这就是构造函数。构造函数是类的一种特殊方法,在每次创建类的实例时都会调用它。一般构造函数进行对象数据的初始化。,访问修饰符()/构造函数的主体,构造函数总是和类同名构造函数没有任何返回值,也无需加void不能显示的调用构造函数每个类都有一个构造函数,如果代码中没有构造函数,系统会自动的为该类提供一个默认的构造函数。构造函数的修饰符如为private会阻止其实例化,classPlanepublicstringcolor;publicintweaponLevel;publicintbombNumber;publicPlane()color=red;weaponLevel=1;bombNumber=3;Console.WriteLine(新飞机构造完毕);,classProgramstaticvoidMain(stringargs)Planea=newPlane();Console.WriteLine(a.color);Console.WriteLine(a.weaponLevel);Console.WriteLine(a.bombNumber);Console.ReadLine();,默认构造函数对非静态成员进行初始化(1)数值型初始化为0(2)bool型初始化为false(3)引用类型初始化为null如果自己定义了构造函数,则所有的初始化工作由程序员自己完成。,重载构造函数,构造函数可以有参数,并可以重载。,【例3.2】Time类的构造函数及其重载。,usingSystem;publicclassTimeprivateinthour,minute,second;publicTime()hour=minute=second=0;publicTime(inth)hour=h;minute=second=0;publicTime(inth,intm)hour=h;minute=m;second=0;,publicTime(inth,intm,ints)hour=h;minute=m;second=s;classTeststaticvoidMain()Timet1,t2,t3,t4;/对t1,t2,t3,t4分别调用不同的构造函数t1=newTime();t2=newTime(8);t3=newTime(8,30);t4=newTime(8,30,30);,析构函数,用于执行清除操作的特殊的方法(),只读字段,用readonly修饰只能在声明或构造函数中对只读字段进行赋值。,静态成员与实例成员,前面我们谈到的字段、属性与方法是对象实例所特有的,此外还有静态成员。静态成员不属于任何对象,独立于任何对象实例。静态成员使用static关键字进行定义。,classIPhone4publicstringcolor;staticpublicdecimaldesignFee;,classHuman/两个实例字段publicintage;publicstringname;/两个静态字段staticpublicinthistory;staticpublicintnumber;,静态字段只在内存中存储一次,classHuman/一个实例方法publicvoidDisPlay()Console.WriteLine(我叫0我1岁了,name,age);/一个静态方法staticpublicvoidIntroduce()Console.WriteLine(人类是地球上最聪明的生物,有0年的历史,现在有1人,history,number);,对于静态方法与字段,我们没有必要对其进行new实例化,直接调用即可.,静态方法不能访问实例数据或其他实例方法.,静态构造函数,用于初始化静态数据,或用于执行仅需执行一次的特定操作,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数static()静态构造函数不能使用访问修饰符,也不能使用参数.,/静态构造函数staticHuman()history=5000;number=0;Console.WriteLine(人类初始数据设置完毕);/构造函数publicHuman()age=0;name=未命名;number+;Console.WriteLine(新人已经造出);,classBMW320ipublicstaticstringengine;publicstaticintlength;publicstaticintcarNumber;publicstaticintwarrantyYears;publicstringcolor;publicintoil;staticBMW320i()engine=2.0L156马力L4;length=4531;warrantyYears=2;carNumber=0;Console.WriteLine(小汽车的静态数据已设置完毕);publicBMW320i(stringcolor)this.color=color;this.oil=50;carNumber+;Console.WriteLine(一辆汽车造好了);publicstaticvoidIntroduce()Console.WriteLine(宝马320i);Console.W

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论