您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第三章 面向对象编程基础
第三章面向对象的编程基础面向对象编程简述软件开发领域两种开发方法:面向过程面向对象面向对象概念的出现,是程序设计领域的一个重大进步.我们可以形象的把对象看成一块积木.积木的设计者需要设计积木的外观,形状及材质,而使用者只需要根据外观与形状进行堆放就可以了.优点:可维护性复用性扩展性灵活性面向对象开发中两种身份:设计者,使用者.实际上,我们现在很多的软件开发都是一种组件化开发,在前人的工作基础上添砖加瓦.如:Convert.ToInt32()当程序规模庞大到一定程度后,需要对其使用面向对象的方法分层设计,使能够进行大批量的同步开发。对象具体的事物,一般具有属性与行为。汽车:属性:型号、颜色行为:启动、加速、刹车鸡:属性:品种、重量、毛色行为:叫、吃东西、下蛋在现实生活中,人们都是习惯以对象为单位,来研究其性质、行为以及其与其他对象之间的关系同样,在程序中使用对象的概念,就可以将一个程序看成是很多对象相互作用的结果。几个关键词封装继承接口封装例如看电视,我们通过遥控器就能控制它,并不需要知道电视是怎么搜索频道、接收信号等工作,按下按钮,就能换到另一个频道。我们只是把电视当作一个供我们娱乐的对象,我们只要知道怎么用就行了。继承电视机从出现到不断发展,从黑白到彩色,到高清,不管怎么变化,它们都有共同的特征:声音,图像。这在面向对象的理论中就是继承多态多种形式或多种形态,同一操作对于不同的对象可以有不同的解释。类与对象的关系初学者往往混淆类和对象的概念,实际上它们之间是蓝图和产品的关系,类就是一张蓝图,它规定了对象有哪些特征,而对象是根据这张蓝图生产的产品。从同一个类产生出来的对象,它们具有样的结构,却可能在某些特性上有不同之处。类与对象的UML表示类类定义了一个“模板”,通过这个“模板”可以生成一个或多个对象类定义了一个对象的状态和行为publicclassStudent{//姓名,年龄...//...//入学,考试,实习,退学...}类是C#中的一种结构,用于在程序中模拟现实生活中的事物基本语法:[访问修饰]class类名{//类的成员}实例化实例化就是创建对象的过程使用new关键字来创建classProgram{staticvoidMain(string[]args){Treea=newTree();Treeb=newTree();}}classTree{}类成员的定义类成员包括字段、方法和属性。所有成员都有自己的访问级别定义字段类所包含的数据字段用标准的变量声明格式和修饰符来声明(可以进行初始化)如:classStudent{publicstringname;publicintage;}classProgram{staticvoidMain(string[]args){Studenta=newStudent();a.name=刘伟;a.age=19;Console.WriteLine(a.name);Console.WriteLine(a.age);Console.ReadKey();}}字段与方法的访问修饰符public:在任何地方访问,不受限制internal:访问仅限于当前程序集private:访问仅限于包含类型(默认)protected:访问仅限于包含类或从包含类派生的类型protectedinternal:访问仅限于从包含类派生的当前程序集或类型定义方法方法指所具有的行为,用函数的形式进行表达.classStudent{publicstringname;publicintage;publicvoidShow(){Console.WriteLine(我叫{0},我{1}岁了,name,age);}publicvoidRun(){Console.WriteLine({0}正在跑步中......,name);}}classProgram{staticvoidMain(string[]args){Studenta=newStudent();a.name=刘伟;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引用用户提供的属性值classTest{privateintmyInt;publicintMyIntProp{get{returnmyInt;}set{myInt=value;}}}classCar{privatedoublerotateSpeed;publicdoubleSpeed{get{Console.WriteLine(当前车轮转速是{0}转/每秒,车速据此计算得出,rotateSpeed);returnrotateSpeed*2*3600/1000;}set{rotateSpeed=value*1000/3600/2;Console.WriteLine(根据车速设车轮转速为{0}转/每秒,rotateSpeed);}}}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();构造函数C#提供了对对象进行初始化的方法,这就是构造函数。构造函数是类的一种特殊方法,在每次创建类的实例时都会调用它。一般构造函数进行对象数据的初始化。访问修饰符类名(){//构造函数的主体}构造函数总是和类同名构造函数没有任何返回值,也无需加void不能显示的调用构造函数每个类都有一个构造函数,如果代码中没有构造函数,系统会自动的为该类提供一个默认的构造函数。构造函数的修饰符如为private会阻止其实例化classPlane{publicstringcolor;publicintweaponLevel;publicintbombNumber;publicPlane(){color=red;weaponLevel=1;bombNumber=3;Console.WriteLine(新飞机构造完毕);}}classProgram{staticvoidMain(string[]args){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;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;}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);}}析构函数用于执行清除操作的特殊的方法~类名(){}只读字段用readonly修饰只能在声明或构造函数中对只读字段进行赋值。静态成员与实例成员前面我们谈到的字段、属性与方法是对象实例所特有的,此外还有静态成员。静态成员不属于任何对象,独立于任何对象实例。静态成员使用static关键字进行定义。classIPhone4{publicstringcolor;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(人类初始数据设置完
本文标题:第三章 面向对象编程基础
链接地址:https://www.777doc.com/doc-5477510 .html