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

下载本文档

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

文档简介

面向对象编程基础面向对象编程简述软件开发领域两种开发方法:面向过程面向对象 面向对象概念的出现,是程序设计领域的一个重大进步.

第2页,共62页,2024年2月25日,星期天我们可以形象的把对象看成一块积木.

积木的设计者需要设计积木的外观,形状及材质,而使用者只需要根据外观与形状进行堆放就可以了.第3页,共62页,2024年2月25日,星期天优点:可维护性复用性扩展性灵活性第4页,共62页,2024年2月25日,星期天面向对象开发中两种身份:设计者,使用者.

实际上,我们现在很多的软件开发都是一种组件化开发,在前人的工作基础上添砖加瓦.如:

Convert.ToInt32()

第5页,共62页,2024年2月25日,星期天 当程序规模庞大到一定程度后,需要对其使用面向对象的方法分层设计,使能够进行大批量的同步开发。

第6页,共62页,2024年2月25日,星期天对象具体的事物,一般具有属性与行为。汽车:属性:型号、颜色行为:启动、加速、刹车第7页,共62页,2024年2月25日,星期天鸡:属性:品种、重量、毛色行为:叫、吃东西、下蛋第8页,共62页,2024年2月25日,星期天在现实生活中,人们都是习惯以对象为单位,来研究其性质、行为以及其与其他对象之间的关系同样,在程序中使用对象的概念,就可以将一个程序看成是很多对象相互作用的结果。第9页,共62页,2024年2月25日,星期天几个关键词封装继承接口第10页,共62页,2024年2月25日,星期天封装 例如看电视,我们通过遥控器就能控制它,并不需要知道电视是怎么搜索频道、接收信号等工作,按下按钮,就能换到另一个频道。我们只是把电视当作一个供我们娱乐的对象,我们只要知道怎么用就行了。第11页,共62页,2024年2月25日,星期天继承电视机从出现到不断发展,从黑白到彩色,到高清,不管怎么变化,它们都有共同的特征:声音,图像。这在面向对象的理论中就是继承第12页,共62页,2024年2月25日,星期天多态多种形式或多种形态,同一操作对于不同的对象可以有不同的解释。第13页,共62页,2024年2月25日,星期天类与对象的关系初学者往往混淆类和对象的概念,实际上它们之间是蓝图和产品的关系,类就是一张蓝图,它规定了对象有哪些特征,而对象是根据这张蓝图生产的产品。从同一个类产生出来的对象,它们具有样的结构,却可能在某些特性上有不同之处。第14页,共62页,2024年2月25日,星期天类与对象的UML表示第15页,共62页,2024年2月25日,星期天类类定义了一个“模板”,通过这个“模板”可以生成一个或多个对象类定义了一个对象的状态和行为publicclassStudent{//姓名,年龄...//...//入学,考试,实习,退学...}第16页,共62页,2024年2月25日,星期天类是C#中的一种结构,用于在程序中模拟现实生活中的事物基本语法:[访问修饰]class<类名>{//类的成员}第17页,共62页,2024年2月25日,星期天第18页,共62页,2024年2月25日,星期天实例化实例化就是创建对象的过程使用new关键字来创建classProgram{staticvoidMain(string[]args){Treea=newTree();Treeb=newTree();

}}classTree{

}第19页,共62页,2024年2月25日,星期天类成员的定义类成员包括字段、方法和属性。所有成员都有自己的访问级别第20页,共62页,2024年2月25日,星期天定义字段类所包含的数据字段用标准的变量声明格式和修饰符来声明(可以进行初始化)如:classStudent{ publicstringname;publicintage;}第21页,共62页,2024年2月25日,星期天classProgram{staticvoidMain(string[]args){Studenta=newStudent();="刘伟";a.age=19;

Console.WriteLine();Console.WriteLine(a.age);Console.ReadKey();

}}第22页,共62页,2024年2月25日,星期天字段与方法的访问修饰符public:在任何地方访问,不受限制internal:访问仅限于当前程序集private:访问仅限于包含类型(默认)protected:访问仅限于包含类或从包含类派生的类型protectedinternal:访问仅限于从包含类派生的当前程序集或类型第23页,共62页,2024年2月25日,星期天第24页,共62页,2024年2月25日,星期天第25页,共62页,2024年2月25日,星期天定义方法方法指所具有的行为,用函数的形式进行表达.第26页,共62页,2024年2月25日,星期天classStudent{publicstringname;publicintage;publicvoidShow(){Console.WriteLine("我叫{0},我{1}岁了",name,age);}publicvoidRun(){Console.WriteLine("{0}正在跑步中......",name);}}第27页,共62页,2024年2月25日,星期天classProgram{staticvoidMain(string[]args){Studenta=newStudent();="刘伟";a.age=19;a.Show();a.Run();Console.ReadKey();}}第28页,共62页,2024年2月25日,星期天练习:1.创建一个类Point,表示一个点.有两个double字段,分别表示x,y坐标.三个方法voidMove(doublea,doubleb)

用于将该点在x轴上平移a,在y轴上平移b.voidShow()

显示该点当前的坐标.doubleOriginDistance();计算该点与原点的距离。在主函数中创建一个点,设置坐标值后显示,平移,然后再显示.最后计算该点与原点的距离.第29页,共62页,2024年2月25日,星期天2.创建一个Frog类,一个字段:stringname;青蛙的名字intdistance;表示青蛙跳过的距离.一个方法:voidJump()青蛙跳(一个10到20间的随机数)

在主函数中创建两个青蛙,让它们各跳10次后,宣布比赛结果.第30页,共62页,2024年2月25日,星期天3猜数字游戏:创建一个类A一个成员变量(字段)intx;指要猜的数(1-100)一个方法:boolguess(intx):用于对字段x进行猜测.如果大了则提示大了,小了则提示小了,等于则提示猜测成功。 在主函数中创建一个A类对象,随机设置x字段的值,并让用户猜测,一直到猜中为止.第31页,共62页,2024年2月25日,星期天4创建一个类Student,有姓名,语文,数学,英语四个字段.一个计算平均分的方法.(有结果返回)

在主函数中创建二个学生,给各个字段赋值,计算平均分并显示出来.第32页,共62页,2024年2月25日,星期天5.创建一个Pet类,有昵称(string),饥饿值(int),清洁值(int)三个字段,有feed和Bath方法,每次喂食增加5个饥饿值,每次洗澡增加3点清洁值.一个Show方法,将宠物当前状态显示出来.在主函数中创建一个宠物,设置三个字段,喂几次,洗几次澡,显示宠物当前状态.第33页,共62页,2024年2月25日,星期天属性为了实现良好的数据封装和数据隐藏,类的字段成员的访问属性一般设置成private或protected,这样在类的外部就不能直接读写这些字段成员了,通常的办法是提供public级的方法来访问私有的或受保护的字段。第34页,共62页,2024年2月25日,星期天第35页,共62页,2024年2月25日,星期天定义属性属性拥有两个类似于函数的块,一个块用于获取属性的值,另一个用于设置属性的值。

这两个块也称为访问器,分别用get和set来定义。可以只写一个来创建只读或只写属性。第36页,共62页,2024年2月25日,星期天public<类型名>属性名{ get { //获取属性的代码

} set { //设置属性的错码

}}在set函数中,可以使用关键字value引用用户提供的属性值第37页,共62页,2024年2月25日,星期天classTest{privateintmyInt;publicintMyIntProp{get{returnmyInt;}set{myInt=value;}}}第38页,共62页,2024年2月25日,星期天classCar{privatedoublerotateSpeed;publicdoubleSpeed{get{Console.WriteLine("当前车轮转速是{0}转/每秒,车速据此计算得出",rotateSpeed);returnrotateSpeed*2*3600/1000;}set{rotateSpeed=value*1000/3600/2;Console.WriteLine("根据车速设车轮转速为{0}转/每秒",rotateSpeed);}}}第39页,共62页,2024年2月25日,星期天publicclassBankCustomer{publicstringName;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();第40页,共62页,2024年2月25日,星期天构造函数C#提供了对对象进行初始化的方法,这就是构造函数。构造函数是类的一种特殊方法,在每次创建类的实例时都会调用它。一般构造函数进行对象数据的初始化。第41页,共62页,2024年2月25日,星期天访问修饰符<类名>(){ //构造函数的主体}第42页,共62页,2024年2月25日,星期天构造函数总是和类同名构造函数没有任何返回值,也无需加void不能显示的调用构造函数每个类都有一个构造函数,如果代码中没有构造函数,系统会自动的为该类提供一个默认的构造函数。构造函数的修饰符如为private会阻止其实例化第43页,共62页,2024年2月25日,星期天classPlane{publicstringcolor;publicintweaponLevel;publicintbombNumber;publicPlane(){color="red";weaponLevel=1;bombNumber=3;Console.WriteLine("新飞机构造完毕");}}第44页,共62页,2024年2月25日,星期天classProgram{

staticvoidMain(string[]args){Planea=newPlane();Console.WriteLine(a.color);Console.WriteLine(a.weaponLevel);Console.WriteLine(a.bombNumber);Console.ReadLine();}}第45页,共62页,2024年2月25日,星期天默认构造函数对非静态成员进行初始化(1)数值型初始化为0(2)bool型初始化为false(3)引用类型初始化为null

如果自己定义了构造函数,则所有的初始化工作由程序员自己完成。第46页,共62页,2024年2月25日,星期天重载构造函数构造函数可以有参数,并可以重载。第47页,共62页,2024年2月25日,星期天【例3.2】Time类的构造函数及其重载。usingSystem;publicclassTime{ privateinthour,minute,second; publicTime() { hour=minute=second=0; } publicTime(inth) { hour=h; minute=second=0; } publicTime(inth,intm) { hour=h; minute=m; second=0; }第48页,共62页,2024年2月25日,星期天

publicTime(inth,intm,ints) { hour=h; minute=m; second=s; }}classTest{ staticvoidMain()

{

Timet1,t2,t3,t4;//对t1,t2,t3,t4分别调用不同的构造函数

t1=newTime(); t2=newTime(8); t3=newTime(8,30); t4=newTime(8,30,30); }

}第49页,共62页,2024年2月25日,星期天析构函数用于执行清除操作的特殊的方法~<类名>(){}第50页,共62页,2024年2月25日,星期天只读字段用readonly修饰只能在声明或构造函数中对只读字段进行赋值。第51页,共62页,2024年2月25日,星期天静态成员与实例成员 前面我们谈到的字段、属性与方法是对象实例所特有的,此外还有静态成员。 静态成员不属于任何对象,独立于任何对象实例。

静态成员使用static关键字进行定义。第52页,共62页,2024年2月25日,星期天classIPhone4{publicstringcolor;staticpublicdecimaldesignFee;

}第53页,共62页,2024年2月25日,星期天classHuman{//两个实例字段publicintage;publicstringname;//两个静态字段staticpublicinthistory;staticpublicintnumber;}第54页,共62页,2024年2月25日,星期天静态字段只在内存中存储一次第55页,共62页,2024年2月25日,星期天classHuman{//…//一个实例方法publicvoidDisPlay(){Console.WriteLine("我叫{0}我{1}岁了",name,age);}//一个静态方法staticpublicvoidIntroduce(){Console.WriteLine("人类是地球上最聪明的生物,有{0}年的历史,现在有{1}人",history,number);}}第56页,共62页,2024年2月25日,星期天对于静态方法与字段,我们没有必要对其进行new实例化,直接调用即可.第57页,共62页,2024年2月25日,星期天静态方法不能访问实例数据或其他实例方法.第58页,共62页,2024年2月25日,星期天静态构造函数用于初始化静态数据,或用于执行仅需执行一次的特定操作,在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数static<类名>(){}静态构造函数不能使用访问修饰符,也不能使用参数.第59页,共62页,2024年2月25日,星期天

//静态构造函数staticHuman(){history=5000;number=0;Console.WriteLine("人类初始数据设置完毕");}//构造函数publicHuman(){age=0;name="未命名";number++;Console.WriteLine("新人已经造出");}第60页,共62页,2024年2月25日,星期天classBMW320i{publicstaticstringengine;publicstaticintlength;publicstaticintcarNumber;publicstaticintwarrantyYears;

温馨提示

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

评论

0/150

提交评论