面向对象--类与对象及其使用
面向对象的思想概述
面向过程思想概述
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,
把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向过程的代表语言:C语言
什么是面向对象的思想
面向对象的思想是基于面向过程思想发展而来的。
- 面向过程:强调的是实现功能每一个步骤
- 面向对象:强调的是对象,然后由这个对象去调用功能
面向对象的特点:
- 是一种更符合我们思想习惯的思想
- 可以将复杂的事情简单化
- 将我们从执行者变成了指挥者
举例:
吃饭:
面向过程的思想:先去菜市场买菜--洗菜--切菜--做菜--装盘--吃
面向对象的对象:你点外卖--(点菜)--厨师(做菜)--外卖小哥(送餐)
伪代码举例
需求:将大象装进冰箱里
面向过程的思想:
分析过程:
1、打开冰箱门
2、把大象装进冰箱
3、关闭冰箱门
伪代码实现:
class Demo{
public static void main(String[] args){
System.out.println("打开冰箱门");
//打开冰箱门这个动作,肯定不是一行代码就搞得定的
//现在仅仅是为了演示面向过程的编码思想
//假设我们将来这个程序要打开很多次冰箱门
//可以将打开冰箱门这个功能封装成一个方法然后去调用
//把大象装进冰箱以及关闭冰箱门这两个功能也可以封装成方法
open();
put();
close();
}
public static void open(){
//写打开冰箱门的功能实现代码
}
public static void put(){
//写把大象装进冰箱的功能实现代码
}
public static void close(){
//写关闭冰箱门的功能实现代码
}
}
面向对象的思想:
使用面向对象的思想去实现该需求:
- 我们需要考虑该需求中有哪些类?
- 每一个类中都有些什么呢?
- 类与类之间的关系又是什么呢?
1、我们需要考虑该需求中有哪些类?
如何分析有哪些类
- 方式1:需要用到UML这门课的知识
- 方式2:名词提取法
有哪些类呢?
通过名词提取法,我们知道有大象类,冰箱类外加一个测试类
2、每一个类中都有些什么呢?
大象类:
属性:体积,鼻子,脚掌,耳朵...
功能:被装进冰箱,喝水,叫....
冰箱类:
属性:立方体,材质,功率...
功能:打开冰箱门,关闭冰箱门,冷藏,保鲜....
测试类:
main方法,实现需求
3、类与类之间的关系又是什么呢?
测试类中使用大象类和冰箱类的功能
伪代码实现:
//大象类
class Elephant{
体积;
鼻子;
脚掌;
耳朵;
被装进冰箱();
喝水();
叫();
}
//冰箱类
class IceBox{
立方体;
材质;
功率;
打开冰箱门()
关闭冰箱门()
冷藏()
保鲜()
}
//测试类
class Demo2{
public static void main(String[] args){
调用冰箱类中的打开冰箱门的方法;
调用大象类中的被装进冰箱的方法;
调用冰箱类中的关闭冰箱门的方法;
}
}
3、面向对象开发,设计,特征
面向对象的开发:
实际上就是不断创建对象,使用对象,指挥对象做事情的过程
面向对象的设计:
其实就是管理和维护类与类之间的关系的过程
面向对象的特征:
1、封装
2、继承
3、多态
类与对象关系
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。
比如:去超市买东西的计费系统,去银行办业务的系统。
我们如何表示一个现实世界事物呢:
属性 就是该事物的描述信息
行为 就是该事物能够做什么
举例:学生事物
我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
我们学习编程语言的目的,其实就是用来模拟现实世界的事物的
而我们现在所学习的语言叫做: java
java中最基本的单位:类
所以,我们通过java把现实世界的事物给描述出来
所以我们要学习如何用java去描述一个现实世界的事物
得出一个对应关系:
事物: 类:
属性:用来描述事物的信息 成员变量:用来描述事物的信息
行为:用来描述事物能够做什么 成员方法:用来描述事物能够做什么
类:是一组成员变量和成员方法的集合,其实是一个抽线的概念
对象:是该类事物的具体表现,具体到某一个个体
类的定义
现实世界的事物
属性 人的身高,体重等
行为 人可以学习,吃饭等
Java中用class描述事物也是如此
成员变量 就是事物的属性
成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
举例:
事物:人
属性:五官,姓名,性别,年龄...
行为:吃饭,学习,说话,敲代码...
类:Person
成员变量:facialFeatures,name,gender,age
成员方法:eat(),study(),talk(),coding()
对象:是该类事物的具体表现,具体到某一个个体
学生,老师,医生,程序员...
伪代码程序示例
类是用来描述现实世界中的事物
现实世界中
学生:
属性:学号,姓名,年龄
行为:吃饭,学习,睡觉
类中:
Student:
成员变量:id,name,age
成员方法:eat(),study(),sleep()
public class Student {
//定义该类中的成员变量
//格式:
// 修饰符 数据类型 变量名;
//目前还没有系统地学习过修饰符,目前不加修饰符
//学号
int id;
//姓名
String name;
//年龄
int age;
//定义成员方法
//目前定义的格式:
// 修饰符 返回值类型 方法名(参数列表){..}
//目前修饰符使用 public static
//吃饭
public static void eat(){
System.out.println("吃饭");
}
//学习
public static void study(){
System.out.println("学习");
}
//睡觉
public static void sleep(){
System.out.println("睡觉");
}
测试学生类
创建对象,调用成员变量和方法
public class StudentDemo {
public static void main(String[] args) {
//如何创建对象呢?
//格式: 类 对象名(自定义) = new 类名(...);
//创建一个学生对象
Student xiaozhu = new Student();
//如何获取成员变量呢?
//格式:
// 对象名.成员变量名
//获取xiaozhu的学号
System.out.println(xiaozhu.id);
//获取xiaozhu的姓名
System.out.println(xiaozhu.name);
//获取xiaozhu的年龄
System.out.println(xiaozhu.age);
System.out.println("=================赋值后:=================");
//由于我们打印发现结果都是系统给的默认值
//现在我们想给这个对象的成员变量进行赋值
//给成员变量赋值的格式:
// 对象名.成员变量名 = 成员变量对应的数据类型的值;
//给xiaozhu这个对象的学号进行赋值
xiaozhu.id = 10001;
//给xiaozhu这个对象的姓名进行赋值
xiaozhu.name = "朱佳乐";
//给xiaozhu这个对象的年龄进行赋值
xiaozhu.age = 18;
//获取xiaozhu的学号
System.out.println(xiaozhu.id);
//获取xiaozhu的姓名
System.out.println(xiaozhu.name);
//获取xiaozhu的年龄
System.out.println(xiaozhu.age);
//如何调用该对象中的方法
//格式:
// 对象名.成员方法
//调用xiaozhu中的吃饭方法
xiaozhu.eat();
xiaozhu.study();
xiaozhu.sleep();
}