《面向对象编程中的基本概念概念ppt课件》由会员分享,可在线阅读,更多相关《面向对象编程中的基本概念概念ppt课件(32页珍藏版)》请在金锄头文库上搜索。
1、.,面向对象编程中的基本概念,桂勋 ,.,了解什么是面向对象 面向对象的基本概念 类 对象 封装 继承 多态 如何定义类,如何创建对象 成员运算符 访问控制权限:public和private 构造方法,主要内容,.,什么是面向对象?,Object Oriendted Programming,对象,以为导向的,程序设计,面向对象就是使用对象进行程序设计,简写成OOP。,.,面向对象的编程语言,如今,面向对象的编程思想已经成为主流; 面向对象的编程语言正大行其道,最具代表性的有: C+ Java C#,.,面向对象的编程思想,OOP,旨在计算机程序中 模拟现实世界中的概念,在计算机程序中用相似的
2、实体模拟现实世界中的实体,在OOP中,现实世界的 所有事物全都被视为对象,设计和实现 软件系统的方法,.,C语言的编程方式,C语言是结构化的编程语言(Structured Programming,简作SP); 强调精巧的数据结构和优越的算法,关注程序的运行效率; 不适合于大规模的程序开发; 程序模块之间协调性差,程序的重用性、安全性、健壮性和可维护性都存在较大的缺陷。,.,SP和OOP对比,.,面向对象的三大原则,封 装,继 承,多 态,.,对象,对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为; 对象其实就是“数据”和“函数”的封装体,其中: 数据表示自身的状态,
3、也称作“属性”或“成员数据”; 函数表示自身的功能,也称作“方法”或“成员函数”。,.,类,人们为了更好地认识世界,将现实生活中的事物(对象)划分成类; 同一类中的事物总是具有一些共性; 类以共同的特性和行为定义实体; 类是具有相同属性和和行为的一组对象的集合。,.,属性,事物的特性在类中用变量表示; 每个对象的每个属性都拥有其特定的值; 属性名称由类的所有对象共享; 对象或实体拥有的特征在类中表示时称为属性。,.,方法,事物的行为和动作在类中用函数表示; 每个对象都有相同的动作和行为; 对象执行的操作在类中表示为方法。,.,类和对象的区别,类是用来描述实体的“模板”或“原型”; 对象是实际的
4、实体,每一个对象都是类的一个具体实例; 类用来定义对象所有的属性和方法,同一类的所有对象都拥有相同的特征和操作; 可以将类理解成生产产品的模具,而对象则是根据此模具生产的一个个产品。,.,类与结构,最简单的理解方式:,区别在于:结构体一般只有数据(属性)而没有函数(方法)。,.,封装,将某些东西包装在一起,然后以新的完整形式呈现出来; 隐藏属性、方法或实现细节的处理方式称为封装; 封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题。,可以公开,无所谓,不可以公开,.,继承,继承就是重用现有的类来生成新类的一种特征; 通俗地讲就是从现有的类(即父类或基类)创建新类(子类或派生类)
5、的过程; 现实生活中,继承可以达到财产重用的目的,而在Java/C+/C#、中,继承可以使代码重用。,.,多态,多态是指同一函数在不同的类中有不同的实现; 多态的好处就是使类更灵活,更便于扩充。,.,抽象,把相同的或相似的对象归为一类的这个过程就是抽象,所以,抽象就是分析问题的方法; 抽象的基本原则: 只关心主要问题,而不关心次要问题; 只关心主要矛盾,而不关心次要矛盾; 只关心相同的东西,而不关心不同的东西; 只关心问题是什么,能够完成什么,而不关心怎样去完成。 抽象的过程其实就是面向对象编程的核心思想。,.,在Java中定义类,/*定义学生类*/ class Student String
6、name; /姓名 int age; /年龄 float weight; /体重 /*吃饭的方法*/ void dining() System.out.println(吃饱了.); weight+; /*走路的方法*/ void walk() System.out.println(走累了.); weight-; ,.,定义类的语法,习惯上,类名的首字母大写,如:Student,.,在Java中创建对象,/*Test类,用来容纳main方法*/ public class Test /*main方法,程序入口*/ public static void main(String args) Stude
7、nt std; /声明Student类型的引用 std = new Student(); /创建Student类型的对象 std.name = 张三; /为姓名赋值 std.age = 18; /为年龄赋值 std.weight = 50; /为体重赋值 std.dining(); /调用成员方法 System.out.println(std.weight); std.walk(); System.out.println(std.weight); ,.,创建对象的语法,和数组相似,对象也是引用数据类型,只能使用new运算符从堆中分配内存; 创建对象的一般语法: 类名 引用名 = new 类名(
8、); 使用已经定义好的类,创建该类对象的过程称为“实例化”。,注意:这里要有括号,.,成员运算符.,在C语言中,必须要先声明结构体变量,才可以访问结构体中的成员; 同样的,只有先实例化类的对象,才可以访问到类中的成员(属性和方法); 使用成员运算符(.)来访问成员属性或成员方法; 一般语法是: 对象名.成员名 如:std.age = 18; /为成员属性赋值 std.dining(); /调用成员方法,.,访问权限:public和private,C语言中结构体的成员可以从任何地方进行访问,这将给数据的安全留下极大的隐患; 为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制
9、定了约束; 关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问; public修饰的成员可以在任何地方进行访问,不受任何约束; private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。,.,访问权限,无法从类的外部访问私有成员; 其它类的私有成员对于当前类也是隐藏的。,.,访问权限示例,class Student private String name; /姓名,私有的,不可以从类外部直接访问 private int age; /年龄,私有的,不可以从类外部直接访问 private float weight; /体重,私有的,不可以
10、从类外部直接访问 /吃饭的方法,公有的,可以从任何地方访问 public void dining() System.out.println(吃饱了.); weight+; /dining方法是类内部成员,可以直接访问本类私有成员 /走路的方法,公有的,可以从任何地方访问 public void walk() System.out.println(走累了.); weight-; /walk方法是类内部成员,可以直接访问本类私有成员 public class Test public static void main(String args) Student std = new Student();
11、 /实例化一个Student对象 std.age = 18; /试图从类外部访问私有成员,将会报出一个错误 std.dining(); /允许访问公有成员 ,.,访问权限(续),加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全; 一般地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的; 有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成的数据损坏; 因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public。,.,修改St
12、udent类,class Student /定义学生类 private String name; /姓名,私有 private int age; /年龄,私有 private float weight; /体重,私有 public void setName(String name) /为姓名赋值的方法,公有 this.name = name; public void setAge(int a) /为年龄赋值的方法,公有 age = a; public void setWeight(float w) /为体重赋值的方法,公有 weight = w; public void display() /
13、将所有信息打印出来的方法,公有 System.out.println(姓名: + name + ,年龄: + age + ,体重: + weight); public void dining() /吃饭的方法,公有,代码略 public void walk() /走路的方法,公有,代码略 public class Test public static void main(String args) Student std = new Student(); /实例化学生类对象 std.setName(张三); /为姓名赋值 std.setAge(18); /为年龄赋值 std.setWeight(
14、55); /为体重赋值 std.dining(); /调用吃饭的方法 std.display(); /将信息打印出来 ,.,对象初始化,在上例中,只能逐个地为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法; 构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用; 请注意:构造方法没有返回值类型,也不能有返回值。,.,构造方法示例,/*定义ConstructorDemo类,对构造方法进行测试*/ class ConstructorDemo /*构造方法,方法名与类名完全一致 无需指定返回值类型,也不能有返回值*/ public ConstructorD
15、emo() System.out.println(这是构造方法); /*Test类,用来容纳main方法 一般将包含有main方法的类声明为public*/ public class Test /*main方法,程序入口*/ public static void main(String args) /*实例化ConstructorDemo类的对象*/ ConstructorDemo cd = new ConstructorDemo(); ,.,构造方法,正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员; 构造方法的一般形式: 访问权限 类名(
16、形参列表) 方法体 因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。,.,为Student类添加构造方法,class Student /定义学生类 private String name; /姓名,私有 private int age; /年龄,私有 private float weight; /体重,私有 /构造方法,根据传递进来的参数,为数据成员赋值 public Student(String n, int a, float w) /分别为每个数据成员赋初始值 name = n; age = a; weight = w; public void setName(String n) /为姓名赋值的方法,公有,代码略 p