已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 面向对象的程序面向对象的程序 设计概念设计概念 一、面向对象的基本概念 抽象; 封装; 继承; 多态。 面向对象程序设计的基本特征: 对象与类 简单地说: 对象是表示现实世界中某个具体的事物; 类是对对象的抽象描述。 张三 类(CLASS) 如: “man class ” 对对象进行抽象为类 对类进行实例化 对象 (object) 我们可以把生活所在的真实世界(Real World)当作是由许多大小不同的对象所 组成的。对象可以是有生命的个体,比如 一个人或一只鸟。 对象 对象也可以是无生命 的个体,比如一辆汽 车或一台计算机。 对象也可以是一件抽 象的概念,如天气的 变化或鼠标所产生的 事件。 对象(object) 计算机世界中的对象是把数据及其相关的 操作封装在一起所构成的实体。 封装的实体 = 数据+方法(行为) 数据:属性或状态 方法: 作用于数据上的操作 封装:属性的访问和变化通过方法完成 对象的特征 对象有两个特征:状态(state)和行为(behavior)。例 如:一个人有他的身高或体重作状态,并有他的行为 如唱歌、打球、骑摩托车、开汽车。一只狗有它的颜色作 状态,也有它的行为,如吠叫或跳跃。 而在程序设计中,软件对象的概念由真实世界对象而来。 对象的概念是面向对象软件对象将状态保存在变量( variables)或称数据字段(data field)里。而行为则借助 方法(methods)为工具来实现 。 data field 1 data field n method 1 method n 数据字段(状态)方法(行为) 软件对象的定义 我们可以对软件对象作以下的定义 data field 1 data field n method 1 method n 私用数据细节公用方法 定义:对象是由数据字段(变量)及相关方法所组成的软件包 汽车对象 以汽车为例,我们可定义其状态与方法 如: 换档 开大灯 刹车 开冷气 颜色 排档数 排气量 轮胎型号 通过换档(方法)改变当前档 位(属性) 当前档位 面向对象设计思想 1、抽象:是从特定的对象(实例 )中抽取共同的性质以形成类( 一般化概念)的过程。 二、类(class)的概念 类:是一种抽象的数据类型 ,它是所有具有一定共性的 对象的抽象。本质上可以认 为是对对象的描述,使创建 对象的“模板”。 类的某一个对象则被称为是 类的一个实例,是类的实例 化结果。 对象 类 实例化抽象 类 (class) 在真实世界里,有许多同“种类”的对象。而 这些同“种类”的对象可被归类为一个“类”。 例如我们可将世界上所有的汽车归类为汽车 类,所有的动物归为动物类。 动物类 汽车类 实例 (instance) 汽车类有些共同的状态(汽 缸排气量,排档数,颜色, 轮胎数)和行为(换档 ,开灯,开冷气),但 每一台汽车个别的状态及方 法可不同于且独立于其他汽 车 。 你的汽车只是这世界中许多 汽车中的一个。我们就称你 的汽车对象是汽车类中的一 个实例(instance)。 汽车类 class) 实例 instance) NEW 你的车 方法(method) 方法 是对象的行为方式( 操作) 对象与外界的接口 作用 改变对象的属性 返回对象的属性 object1 object2 面向对象方法的主要优点 与人类习惯的思维方法一致 可重用性 可扩展性 可管理性 三、定义类 修饰符 class 类名 extends 父类 implements 接口名 类成员变量声明; 类方法声明; 任务5-1 定义类 public class Student String name; int No; String dorm; String tel; void checkIn(String a,int b) name=a; No=b; void assignDorm(String a) dorm=a; void provideTel(String b) tel=b; 四、对象的定义 修饰符 类名 对象名=new 类名(实参列表); 或 修饰符 类名 对象名; 对象名=new 类名(实参列表); 创建对象 类名 对象名; Student zhang; 注意:类属于复合数据类型,因此,在声明对 象时,系统并没有为对象分配空间,用户需要 应用new完成分配空间的任务。 zhang =new Student( ); 与数组的对比性 int score; score=new int10; 合二为一:Student zhang=new Student(); 对象的引用 引用成员变量 对象名.成员变量名 引用方法 对象名.方法名(参数列表) 5.1.2对象的生命周期 1.对象的生成 2.对象的使用 3对象的清除 5.1.3由类的定义产生对象 对象 属性或状态 操作或行为 类 数据或变量 方法 实 例 化 抽 象 封装的实体=数据+方法 【任务5-2】使用Student类 public class TermBegins public static void main(String args) Student zhang; zhang=new Student(); zhang.checkIn(“张三“, 001); zhang.assignDorm(“A-101“); videTel(); System.out.println(“姓名:“+); System.out.println(“学号:“+zhang.No); System.out.println(“宿舍:“+zhang.dorm); System.out.println(“联系电话:“+zhang.tel); 姓名:张三 学号:1 宿舍:A-101 联系电话演示 定义一个cube类,代表一个立方体 包含的属性有:长、宽、高,分别保存在 变量x,y,z里面 方法有:求表面积 求体积 在main函数里定义一个cube类对象a,并设 置立方体a的长宽高分别为3,4,5,并求 出立方体a的表面积和体积打印出来。 上机作业1 设计一个交通工具Vehicle,属性包括 最大速度 speed、颜色 color、类别 kind、 方法包括设置速度,颜色,类别,取得速度。 颜色,类别 创建Vehicle对象,并为其设置新最大速度 和颜色和类别,并显示其最大速度、颜色 、类别 上机作业2 (1)编写一个位置类Position,包含两个成员 变量:横坐标x,纵坐标y;一个方法: printInfo,打印出横坐标和纵坐标; (2) 编写Position类的测试程序,创建一个点 类的对象a,横坐标、纵坐标分别为3,4,要 求输出点a的相关信息; 举例:汽车的例子 package ch5.week2; public class Car int speed; String color; String no; void drive(int a) speed=speed+a; void print() System.out.println(“speed=“+speed); System.out.println(“color=“+color); System.out.println(“no =“+no); void changeColor(String aColor) color=aColor; void changeNo(String aNo) no=aNo; package ch5.week2; public class Cube /与main方法平行的地方写cube的属性和方法 int x,y,z; int area() int tmp=2*(x*y+y*z+z*x); return tmp; int volumn() int tmp=x*y*z; return tmp; public static void main(String args) Cube b1=new Cube(); b1.x=3; b1.y=4; b1.z=5; System.out.println(“表面积“+b1.area(); System.out.println(“体积“+b1.volumn(); 举例:立方体的例子 package ch5.week2; public class Dog int age; String name; float weight; boolean isHungry; void grow() age=age+1; void eat(float foodWeight) weight=weight+foodWeight; 举例:小狗的例子 测试各种类的程序 package ch5.week2; public class test /* * param args */ public static void main(String args) / TODO Auto-generated method stub /dog /car /*Car myCar=new Car(); /组装新车 myCar.color=“red“; myCar.no=“gz9090“; myCar.speed=0; myCar.print(); /改装车 myCar.drive(40); myCar.changeColor(“blue“); myCar.changeNo(“888888“); myCar.print(); Car yourCar=new Car(); /组装新车 yourCar.color=“green“; yourCar.no=“gz9091“; yourCar.speed=0; yourCar.print(); /改装车 yourCar.drive(40); yourCar.changeColor(“yellow“); yourCar.changeNo(“888886“); yourCar.print(); Car sheCar=new Car(); Car aBoyCar=sheCar;*/ Dog dog1; dog1=new Dog(); =“tom“; dog1.age=2; dog1.weight=2; dog1.eat(0.5f); System.out.print(“dog1体重“+dog1.weight); Dog dog2=new Dog(); =“jack“; dog2.age=2; dog2.grow(); System.out.println(“dog2年龄“+dog2.age); 第三周课 5.1.4类的构造函数 【任务5-3】为Student类定义构造方法。 public class Student String name; int No; String dorm; String tel; Student(String aName,int aNo) name=aName; No=aNo; void assignDorm(String a) dorm=a; void provideTel(String b) tel=b; public static void main(String args) Student zhang=new Student(“张三“,001); zhang.assignDorm(“A-101“); videTel(); 【任务5-4】为Student类定义多个构造 方法。 源代码在备注中 5.2 封装性 封装的定义包括下面几个方面: (1)一个清晰的边界,所有对象的内部软 件范围限定在这个边界之内。 (2)一个接口,该接口描述当前对象和其他 对象之间的交互作用。 (3)内部实现,对象内部的实现是受保护的 ,这个实现给出了软件对象功能的细节,定 义当前对象的类的外面不能访问这些实现 细节。 5.2.1类变量和类方法 对象的初始化 类中包含有成员变量和方法,当使用 类声明并创建对象时,使用new关键 字,这时系统为对象创建自己的内存 区域并自动调用构造方法初始化成员 变量。 构造方法 构造方法是一个特殊的成员方法,它与 类名相同。在创建对象空间后,系统自 动根据参数调用相应的构造函数。构造 函数的主要功能是为数据成员赋初值。 构造方法的特点 构造方法名与类名相同; 构造方法没有返回类型,也不是void; 构造方法的主要作用是对类对象的初始化。如 果没有定义构造方法时,成员变量将被初始化 为各种类型的默认值; 构造方法只能与new关键字初始化对象时使用 ,其他时候不能使用; 一个类可以定义多个构造方法,根据参数的不 同决定执行哪一个。 public class Student String name; int No; String dorm; String tel; Student(String aName,int aNo) name=aName; No=aNo; void assignDorm(String a) dorm=a; void provideTel(String b) tel=b; public static void main(String args) Student zhang=new Student(“张三“,001); zhang.assignDorm(“A-101“); videTel(); 任务5-3 定义构造方法 构造方法作用: 避免对象创建后没有任 何内容,强制程序员 在创建对象时就给某 些变量一些初始值 任务5-4多个构造方法 Student(String aName,int aNo) name=aName; No=aNo; Student(int aNo) No=aNo; Student(String aName) name=aName; 多个构造方法,为程序 员提供多种选择,在 创建对象时,可以任 意使用其中一个 public class Student String name; int No; String dorm; String tel; Student(String aName,int aNo) name=aName; No=aNo; Student(int aNo) No=aNo; Student(String aName) name=aName; void assignDorm(String a) dorm=a; void provideTel(String b) tel=b; 任务5-4源代码 public static void main(String args) Student zhang=new Student(“张三“); zhang.assignDorm(“A-101“); videTel(); System.out.println(“姓名:“+); System.out.println(“学号:“+zhang.No); System.out.println(“宿舍:“+zhang.dorm); System.out.println(“联系电话:“+zhang.tel); System.out.println(“*“); Student li=new Student(002); li.assignDorm(“A-102“); videTel(); System.out.println(“姓名:“+); System.out.println(“学号:“+li.No); System.out.println(“宿舍:“+li.dorm); System.out.println(“联系电话:“+li.tel); 任务5-4源代码 课后实训一 一、类的定义及使用 (1)编写一个位置类Position,包含两个成员变量:横坐标x,纵 坐标y;一个方法:printInfo,打印出横坐标和纵坐标; (2) 编写Position类的测试程序,创建一个点a(3,4),要求输出 点a的相关信息; (3) 将Position类的的两个成员变量改为私有,并添加相应的set 和get方法,用 set方法为点a赋值为(5,7),用get方法取出a 的坐标并打印出来; (4) 为Position类添加一个不带参数构造方法,将横坐标纵坐 标初始化为原点,在测试程序中新增1个原点; (5)为Position类添加一个带参数的构造方法,传两个参数用于 初始化坐标。在测试程序中新增1个点b(8,9); (6)为Position类添加一个静态变量TotalNum,用于统计创建的 Position对象数,在测试程序中输出总的点数量。 五、类成员变量的定义 定义: 访问权限符 static final 类型 变量名 权限修饰符有: public、protected和private static:在成员变量前说明该变量是静态变量。 final:在成员变量前说明该变量是一个最终变量 修饰符 static static可以修饰类中的属性和方法。 静态属性在类定义时静态地分配空间。 它属于类,不属于某个特定的对象,因 此可以通过类进行访问。往往将属于类 的公共属性说明成static。 任务5-5 static成员变量 public class Student String name; int No; String dorm; String tel; static int count=0; Student(String aName,int aNo) name=aName; No=aNo; count+; Student(int aNo) No=aNo; Student(String aName) name=aName; static void printCount() System.out.println(count); public static void main(String args) Student.printCount(); Student zhang=new Student(“张三“,001); Student li=new Student(“李四“,003); System.out.println(Student.count); Java实例 static方法 class Sta_method int width,height;/这两个变量没用到 public static double area(int width,int height) return width*height; public static void main(String args) int i,j; double f; i=Integer.parseInt(args0); j=Integer.parseInt(args1); f=area(i,j); /直接引用此方法 System.out.println(“Area=“+i+“*“+j+“=“+f); 静态方法 由于静态方法属于整个类,因此它不能处 理属于某个对象的变量,只能处理属于整 个类的变量静态变量。 静态方法中只能调用静态方法。 static的访问规则 一个对象的方法可以访问对象的数据成员, 也可以访问方法的局部变量 一个类方法只能访问自己的局部变量或者 类变量。 static的访问规则 解决的办法: 1. 将变量改成类变量 class StaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); static的访问规则 2. 访问局部变量 class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); 【任务5-5】用static变量统计Student类 对象个数。 /static变量和方法的使用 public class Student String name; int No; String dorm; String tel; static int count=0; Student(String aName,int aNo) name=aName; No=aNo; count+; Student(int aNo) No=aNo; Student(String aName) name=aName; static void printCount() System.out.println(“已报到人数:“+count); public static void main(String args) Student.printCount(); Student zhang=new Student(“张三“,001); Student li=new Student(“李四“,003); System.out.println(Student.count); 已报到人数:0 已报到人数:2 5.2.2 使用private将变量封装起来 【任务5-6】private修饰符让Student类的 数据更安全。 /设置private变量 public class Student String name; int No; String dorm; String tel; private static int count=0; Student(String aName,int aNo) name=aName; No=aNo; count+; static void printCount() System.out.println(“总人数:“+ count); public class useStudent public static void main(String args) Student zhang=new Student(“张三“,001); Student li=new Student(“李四“,003); Student.printCount();/利用函数访问count变 量 /System.out.println(Student.count); /上句有语法错误,Student私有变量count不能被访问 5.3扩展应用 5.3.1数组与对象 【任务5-7】用数组处理多个学生对象。 public class Student String name; int no ; int score; void printInfo() System.out.println(name+“t“+no+“t“+score); public class useStudent public static void main(String args) Student netClass=new Student10; int score=90,67,78,90,65,45,67,89,76,67,; String name=“susan“,“tom“,“jerry“,“jack“,“rose“, “maggie“,“elisha“,“Dick “,“Harry“,“John“; for (int i=0;ibEx) return a; else return b; public static void main(String args) Student zhang=new Student(“zhangsan“,001,90,90,15); Student li=new Student(“lisi“,002,89,90,20); Student wang=new Student(“wangwu“,007,98,92,10); Student zhao=new Student(“zhaoliu“,012,89,70,25); Student tmp=pk(zhang,li); Student monitor=pk(tmp,wang); monitor=pk(tmp,zhao); System.out.print(“取胜者为:“+); 取胜者为:lisi 5.3.3 对象作为类的成员 public class Communication double mobliePhone;/移动电话 String eMail;/电子邮件 double qq;/qq号码 String telephone;/宿舍电话 public Communication(double mobliePhone, String mail, double qq, String telephone) super(); this.mobliePhone = mobliePhone; this.eMail = mail; this.qq = qq; this.telephone = telephone; public class Student String name; int no; Communication com1; public Student(String name, int no, Communication com1) super(); = name; this.no = no; 1 = com1; public class TestStudent public static void main(String args) Communication com=new Communication(1311115566,““,123456,“020- 88888888“); Student zhang=new Student(“zhangsan“,001,com); 5.4习题 一、选择题 1. 以下说法不正确的是()。 A) 类是同种对象的集合和抽象 B) 类是抽象的数据类型 C) 类是复合数据类型 D) 类是一个对象 2. 定义类的类头时可以使用的关键字是()。 A) private B) protected C) final D) static 3. 下列选项中,用于在定义子类时声明父类名的关键字是( )。 A)interface B) package C) extends D) class 4.下列类头定义中,错误的是()。 A) public x extends y . B) public class x extends y . C) class x extends y implements y1 . D) class x . 5. 设 A为已定义的类名,下列声明A类的对象a的语句中,正确的是( )。 A) float A a; B) public A a=A( ); C) A a=new int( ); D) static A a=new A( ); 6. 设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( )。 A) public A a=new A( ); B) public A a=A( ); C) A a=new class( ); D) a A; 7. 设 X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是( )。 A) public X x1= new Y( ); B) X x1= X ( ); C) X x1=new X( ); D) int X x1; 8. 设i , j为类X中定义的int型变量名,下列X类的构造函数中不正确的是( )。 A) void X(int k ) i=k; B) X(int k ) i=k; C) X(int m, int n ) i=m; j=n; D) X( )i=0;j=0U1 ; U1希望后面加一些填空题和简答题,以求和面得章节的统一。 二、填空题: 1、一个对象的三个生命周期是_、_、_。 2、 使用一个对象前,必须声明并_它。 3、 创建类对象的运算符是_。创建的目的是_。 4、通过类MyClass中的不含参数的构造函数,生成该类的一个对象obj ,可通过以下语句实现: _。 5、通过_运算符与类的对象连接,可以访问此类的成员。 6.定义类就是定义一种抽象的_,它是所有具有一定共性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 2【刷易错】(模块易错检测练)解析版-2025-2026学年七年级英语上册(人教版)
- 医学全球疾病负担统计案例分析教学课件
- 医学认知神经诊疗环境光照调控案例课件
- 2026江苏春季高考数学考试总复习:不等式(知识梳理+考点)解析版
- TXJBX0030-2025农产品质量安全区块链追溯技术应用指南
- 2026年高考数学一轮复习:指数与指数函数(讲义)原卷版
- 2026福建春季高考语文总复习:文言文阅读(知识梳理+考点)解析版
- 《JBT 6309.1-2013热室压铸机 第1部分基本参数》(2026年)实施指南
- 《JBT 6190.4-199216mm 槽系组合夹具其它件 平面支承钉》(2026年)实施指南
- 《JBT 6060.12-1992 机械压力机锻模 导套》(2026年)实施指南
- GB/T 40822-2021道路车辆统一的诊断服务
- GB/T 34800-2017蛋白酶K酶活力及杂质检测方法
- GB/T 21198.6-2007贵金属合金首饰中贵金属含量的测定ICP光谱法第6部分:差减法
- 有限空间安全教育培训制度
- 第4章逆向物流网络规划与设计课件
- 过敏性休克的急救(共31张PPT)
- 国外汉语课堂教学案例课件
- DB32T 3753-2020 江苏省装配式建筑综合评定标准
- 二尖瓣峡部的消融和验证
- 科研项目申请书撰写技巧与形式审查要点(51张)课件
- 英语presentation-墨西哥亡灵节
评论
0/150
提交评论