1 / 73

面向对象编程基础

面向对象编程基础. 目标. 理解对象 理解类 理解抽象和封装 理解对象与类之间的关系 掌握包的创建和导入. 能够在计算机程序中用类似的 实体模拟现实世界中的实体. 设计和实现软件系统的方法. 在 OOP 中,现实世界的所有事物全都被视为对象. OOP. 旨在在计算机程序中 模拟现实世界中的概念. 面向对象编程. 对 象. 是类的实例. 面向对象程序设计中用来描述客观事物的程序单位. 表示现实世界中的实体. 对象. “ 对象是存在的具体实体,具有明确定义的特征和行为。 ”. 具备某种功能 完成特定任务. 对象的示例. 收银员对象.

chin
Download Presentation

面向对象编程基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 面向对象编程基础

  2. 目标 • 理解对象 • 理解类 • 理解抽象和封装 • 理解对象与类之间的关系 • 掌握包的创建和导入

  3. 能够在计算机程序中用类似的 实体模拟现实世界中的实体 设计和实现软件系统的方法 在 OOP中,现实世界的所有事物全都被视为对象 OOP 旨在在计算机程序中 模拟现实世界中的概念 面向对象编程

  4. 对象 是类的实例 面向对象程序设计中用来描述客观事物的程序单位 表示现实世界中的实体 对象 “对象是存在的具体实体,具有明确定义的特征和行为。” 具备某种功能 完成特定任务

  5. 对象的示例 收银员对象 顾客对象 特征 姓名:布兰尼 年龄:35 职务:收银员 操作: 收款 打印帐单 顾客 姓名:朱丽叶 年龄:28 操作: 购买商品 行为

  6. • 类是面向对象程序设计的基础和核心 • 类是对象的抽象和归纳,是对象的模板 类的示例 汽车类 水果类 动物类 “类是具有相同属性和方法的一组对象的集合”

  7. 雇员 收银员 系统管理员 仓库管理员 促销员 部门经理 类和对象的示例

  8. 促销员对象 属性 • 属性名称由类的所有实例共享 • 事物的特征在类中表示为变量 • 每个对象的每个属性都拥有其特有的值 姓名 属性 住址 年龄 “在类中属性表示对象或实体拥有的特征”

  9. 方法 是对象行为的实际实现 每一个方法确定对象的一种行为或功能 方法 “对象执行的操作称为方法。”

  10. 方法的示例 方法 缝制衣服 量尺寸 裁缝 缝衣服 缝制衣服的步骤 得到工具

  11. 类和对象 类是对象的抽象 所有属于同一个类 的对象都具有相同 的特性和操作 类和对象的区别 类定义对象 对象是实际的实体 类是概念模型, 定义对象的所 有特性和所需 的操作 对象是类的实例

  12. 类:教师 属性:姓名 性别 职称 工资 方法:授课 评职称 调工资 抽象 属性名 属性值 实例化 方法名 执行的 操作 对象:刘丽 静态特征:刘丽 女 讲师 890.00 动态特征:授课 评职称 调工资 类与对象的关系示例 类与对象的关系示例

  13. 抽象 只关注事物的重要细节,而忽略事物的次要细节。 处理事物复杂性的方法 数据抽象:“根据具体的应用抽取出类的相关属性和操作。”

  14. Student 类 Name StudentNO SeatNumber 数据抽象的示例 属性 方法 getName() getStudentNO() getSeatNumber()

  15. 封装 • 信息隐藏,隐藏对象的实现细节,不让用户看到 • 将东西包装在一起,然后以新的完整形式呈现出来 • 例如,两种或多种化学药品组成一个胶囊 • 将方法和属性一起包装到一个单元中,单元以类的形式实现 “隐藏属性、方法或实现细节的过程称为封装。”

  16. 封装的示例 3-1 大众汽车公司 通用汽车公司 . . 要求 市场经理 采购经理 雪莉女士 罗杰斯先生

  17. 公共 电话号码 电子邮箱 产品种类 私有 备件的制造方法 备件库存 备件的制造成本 公共 电话号码 电子邮箱 汽车种类 私有 汽车的组装方法 汽车库存 汽车的组装成本 封装的示例 3-2 通用汽车公司 大众汽车公司 有选择地提供数据

  18. 属性 电话号码 电子邮箱 汽车种类 汽车规格 雇员详情 库存详情 经销商详情 属性 电话号码 电子邮箱 产品种类 现有存货数量 雇员详情 所需物料详情 方法 发出订单 汽车的组装方法 计算汽车的组装成本 计算利润率 方法 接收订单 备件的制造方法 计算备件的制造成本 计算利润率 封装的示例 3-3 实体大众汽车公司 实体通用汽车公司 Auti Ltd . Buto Ltd .

  19. 封装的示例 3-4 封装的特征: (1) 在类的定义中设置访问对象属性(数据成员)及方法(成员方法)的权限,限制本类对象及其他类的对象使用的范围。 (2) 提供一个接口来描述其他对象的使用方法。 (3) 其他对象不能直接修改本对象所拥有的属性和方法。

  20. 类的定义 1.定义类的一般格式 (1) 系统定义的类,即Java类库,是系统定义好的类,类库是Java语言的重要组成部分。Java类库是一组由它的发明者SUN公司以及其他软件开发商编写好的Java程序模块,每个模块通常对应一种特定的基本功能和任务,且这些模块都是经过严格测试的,因而也总是正确有效的。当自己编写的Java程序需要完成其中某一功能的时候,就可以直接利用这些现成的类库,而不需要一切从头编写,这样不仅可以提高编程效率,也可以保证软件的质量。

  21. 类的定义 (2) 用户自己定义的类。 在Java程序中,用户自己定义类的一般格式如下: 语法 class 类名 { 类体 } 其中: class 是创建类所使用的关键字, 类体包含属性(数据成员)和成员方法的声明。

  22. 类的简单定义 • 类的命名规则: • 不能为 Java 中的关键字 • 不能包含空格或点号“. ” • 可以下划线“_”、字母或“$”符号开头 class Book { String bookName; String authorName; int nopages; boolean available; }

  23. 方法的定义 类中的方法 4-1 方法的名称 方法的主体 方法返回的数据类型 参数列表

  24. 类中的方法 4-2 语法: 返回值类型 方法名(参数列表) { 方法体(语句体) }

  25. 方法 类中的方法 4-3 class Book { String bookName; String authorName; int nopages; boolean available; void isAvailable() { if(available == true) System.out.println("有这本书"); } ….. }

  26. 对象的声明 创建对象通常包括声明对象、建立对象和初始化对象三步。 1.声明对象 声明对象就是确定对象的名称,并指明该对象所属的类。声明对象的格式如下: 类名 对象名表; 例如:Class_name object_one,object_two;

  27. 对象的建立 2.建立对象 建立对象就是用new关键字为对象分配存储空间。只有通过建立对象这一步,才为对象分配内存,使该对象成为类的实例。 建立对象的格式如下: 对象名=new 构造方法( ); 例如:object_one = new Class_name( ); object_two= new Class_name( );

  28. 对象的创建 3.创建对象的格式如下: 类名 对象名= new 构造方法名( ); 例如:Class_name object_one= new Class_name( ); Class_name object_two= new Class_name( ); 其中:new的作用是建立对象,为对象分配存储空间。执行new Class_name( )将产生一个Class_name( )类的实例(对象)。 与类名相同

  29. 对象的使用 4.使用对象 一个对象可以有许多属性和多个方法。当一个对象被创建后,这个对象就拥有了自己的数据成员和成员方法,我们可以通过引用对象的成员来使用对象。 对象的数据成员的引用方式如下: 对象名.数据成员名 对象的成员方法的引用方式如下: 对象名.成员方法名(参数表)

  30. 圆点符号 示例 class Book { String bookName; String authorName; int nopages; boolean available; static void isAvailable() { if(available == true) System.out.println(“有这本书"); } Book objBook = new Book(); objBook.isAvailable(); …..

  31. 类的严谨定义 类的严谨定义格式如下: [类修饰符] class 类名 [extends 父类名] [implements 接口列表] { 数据成员 成员方法 }

  32. 访问修饰符 public 默认 protected private 访问修饰符 6-1 • 信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因。 • 信息隐藏的原因包括: • 对任何实现细节所作的更改不会影响使用该类的代码 • 防止用户意外删除数据 访问修饰符

  33. public private 默认 该类或非该类均可访问 只有该类可以访问 相同数据包中的类可以访问 该类及其子类的成员可以访问,同一个包中的类也可访问 protected 访问修饰符 6-2

  34. 类访问修饰符 6-3 6.1 类修饰符 类的修饰符用于说明对它的访问限制,一个类可以没有修饰符,也可以有public、final、abstract等几种不同的修饰符。 1.无修饰符的情况 如果一个类前无修饰符,则这个类只能被同一个包里的类使用。Java规定,同一个程序文件中的所有类都在同一个包中。这也就是说,无修饰符的类可以被同一个程序文件中的类使用,但不能被其他程序文件中的其他包中的类使用。

  35. 【示例程序C3_1.java】 class Aa { //无修饰符的类Aa int a=45; //Aa类的数据成员a } public class C3_1{ //公共类C3_1 public static void main(String[ ] args) { Aa a1=new Aa( );//类C3_1中创建了一个无修饰符类Aa的对象a1 System.out.println(a1.a); } }

  36. 类访问修饰符 6-4 2.public修饰符 如果一个类的修饰符是public,则这个类是公共类。公共类不但可供它所在包中的其他类使用,也可供其他包中的类使用。在程序中可以用import语句引用其他包中的public类。Java规定,在一个程序文件中,只能定义一个public类,其余的类可以是无修饰符的类,也可以是用final修饰符定义的最终类,否则编译时会报错。

  37. 【示例程序C3_2.java】 class Fp { C3_2 f1=new C3_2( ); int add( ) { return(f1.b+f1.c); } } public class C3_2 { int b=20,c=3; public static void main(String[ ] args) { Fp p1=new Fp( ); System.out.println(p1.add( )); } } 运行结果:23

  38. 类访问修饰符 6-5 3.final修饰符 用final修饰符修饰的类被称为最终类。最终类是不能被任何其他类所继承的。定义最终类的目的有三: (1) 用来完成某种标准功能。将一个类定义为final类,则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能是正确无误的。

  39. (2) 提高程序的可读性。从父类派生子类,再从子类派生子类,使软件变得越来越复杂。而在必要的层次上设置final类,可以提高程序的可读性。 (3) 提高安全性。病毒的闯入途径之一是在一些处理关键信息的类中派生子类,再用子类去代替原来的类。由于用final修饰符定义的类不能再派生子类,截断了病毒闯入的途径,因而提高了程序的安全性。

  40. 访问修饰符 6-6 4.abstract修饰符 用abstract修饰符修饰的类称为抽象类。其作用在于将许多有关的类组织在一起,提供一个公共的基类,为派生具体类奠定基础。另外,当一个类中出现一个或多个用abstract修饰符定义的方法时,则必须在这个类的前面加上abstract修饰符,将其定义为抽象类。

  41. 访问修饰符 6-7 5.类修饰符使用注意事项 可以同时使用两个修饰符来修饰一个类,当使用两个修饰符修饰一个类时,这些修饰符之间用空格分开,写在关键字class之前,修饰符的顺序对类的性质没有任何影响。 需要注意的是:一个类可以被修饰为public abstract,也可以被修饰为public final,但不能被修饰为abstract final,这是因为abstract类自身没有对象,需要派生子类后再创建子类的对象,而final类不能派生子类,所以不存在用abstract final两个修饰符修饰的类。

  42. 数据成员访问修饰符 6-7 1. 无修饰符:具有包访问特性。 2. public访问修饰符:用public修饰的数据成员称为公有数据成员,使用时危险,通常不使用。 3. private访问修饰符:用private修饰的数据成员称为私有数据成员。私有数据成员只能在定义它的类中使用,不能在类外使用,是对类进行封装时使用的主要方法。 4. protected访问修饰符:用protected修饰的数据成员可以被该类及其子类的成员访问,同一个包中的类也可访问。主要作用是允许其他包中的子类访问父类。

  43. 数据成员访问修饰符示例 class ClassA{ private int k; private void methodA(){ System.out.println(“私有方法”); } } class ClassB{ void methodB(){ ClassA a=new ClassA(); a.k=10; // a.methodA(); // } }

  44. 数据成员修饰符 6-8 5. static修饰的静态数据成员 用static修饰符修饰的数据成员不属于任何一个类的具体对象,而是属于类的静态数据成员。其特点如下: (1)它被保存在类的内存区的公共存储单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是相同的数值。 (2)可以通过类名加点操作符访问它。 (3)static数据成员仍属于类的作用域,还可以使用publicstatic、 private static等进行修饰。修饰符不同,可访问的层次也不同。

  45. 【示例程序C3_5.java】 对上述(1)和(2)的示例。 public class C3_5 { public static void main(Stringargs[]) { Pc m=new Pc( ); Pc m1=new Pc( ); m.ad=0.2; System.out.println("m1="+m1.ad); System.out.println("Pc="+Pc.ad); System.out.println("m="+m.ad); } } class Pc { static double ad=8; } 运行结果:m1=0.2 Pc=0.2 m=0.2

  46. 数据成员修饰符 6-9 6. final修饰符:用final修饰符修饰的数据成员称为最终数据成员。最终数据成员可以在声明时进行初始化,也可以通过构造方法赋值,但不能在程序的其他部分赋值,它的值在程序的整个执行过程中是不能改变的。 用final修饰符说明常量时,需要注意: 需要说明常量的数据类型并指出常量的具体值。

  47. 【示例程序C3_6.java】 class Ca { static int n=20; final int n1; final int k=40; Ca( ) { n1= ++n; } } public class C3_6 { public static void main(String args[]) { Ca m1=new Ca( ); Ca m2=new Ca( ); // m1.n1=90; System.out.println("m1.n1="+m1.n1); System.out.println("m1.k="+m1.k); System.out.println("m2.n1="+m2.n1); System.out.println("m2.k="+m2.k); } } 运行结果: m1.n1=21 m1.k=40 m2.n1=22 m2.k=40

  48. 课堂练习 1. P76 例3.10

  49. 成员方法修饰符 在成员方法头中: 修饰符可以是公共访问控制符public、私有访问控制符private、保护访问控制符protected等访问权限修饰符,也可以是静态成员方法修饰符static、最终成员方法修饰符final、本地成员方法修饰符native、抽象成员方法修饰符abstract等非访问权限修饰符。访问权限修饰符指出满足什么条件时该成员方法可以被访问。非访问权限修饰符指明数据成员的使用方式。

  50. 方法修饰符 static final abstract native 方法修饰符

More Related