面向过程和面向对象
面向过程和面向对象都是一种语言设计思想
面向过程(具体的步骤)
做一件事情,分析有哪些步骤,一一实现
面向对象设计程序时,从宏观上分析程序有哪些功能,
然后对功能进行分类,把不同的功能封装在不同的类中
是一种宏观的设计
但到具体实现,仍然离不开面向过程,两者相辅相成
面向过程
● 面向过程的程序设计思想,简称POP
● 关注的焦点是过程:过程就是操作数据的步骤。如果某个过程的实现代码重复出
现,那么就可以把这个过程抽取为一个函数。这样就可以大大简化冗余代码,便于维护。
● 典型的语言:C语言
● 代码结构:以函数为组织单位。
● 是一种“执行者思维” ,适合解决简单问题。
分析出解决问题所需要的步骤,然后把步骤一步一步实现。
扩展能力差、后期维护难度较大。
面向对象
● 面向对象的程序设计思想,简称OOP
● 关注的焦点是类:在计算机程序设计过程中,参照现实中事物,将事物的属性特
征、行为特征抽象出来,用类来表示。
● 典型的语言:Java、C#、C++、Python、Ruby和PHP等
● 代码结构:以类为组织单位。每种事物都具备自己的属性和行为/功能。
● 是一种设计者思维,适合解决复杂问题。代码扩展性强、可维护性高。
类和对象
1.类
类是具有相同特征的事物的抽象描述,是抽象的,概念上的定义
先根据客观的事物进行抽象,然后由抽象创造出具体,最终使用的是具体
类的结构
• 变量:事物属性的描述(名词)
• 方法:事物的行为(可以做的事情 动词)
• 构造方法:初始化对象
• 块:一段没有名称的代码块
• 内部类: 即在类体中声明的类
2.对象
对象是实际存在的该类事物的每个个体,是具体的,因此也称为实例
3.创建并使用对象
对象类的实例,是以类为模板,在内存中创建的一个实际存在的实例
使用new关键字,Car()--类的构造方法,类会自动提供的
Car bm/bc 声明一个Car类型变量
= :将右边创建的创建对象地址赋给左边的变量
package javaoop;
public class Car {
String name;
float price;
String color;
public void run(){
System.out.println(name+"汽车行驶");
}
public void stop(){
System.out.println(name+"汽车停止");
}
public void music(){
System.out.println(name+"车载音乐");
}
public void altogether(){
System.out.println("车名:"+name+" "+"价格:"+price+" "+"颜色:"+color);
}
}
package javaoop;
public class Testcar {
public static void main(String[] args) {
Car bm = new Car();
bm.name = "宝马";
bm.color ="白色";
bm.price = 420000;
bm.run();
bm.stop();
bm.music();
bm.altogether();
System.out.println("=================================");
Car bc = new Car();
bc.name = "奔驰";
bc.color ="黑色";
bc.price = 500000;
bc.run();
bc.stop();
bc.music();
bc.altogether();
}
}
4.总结类和对象
类是一类事物的抽象概念,是一个模型. 对象是由这个模型所创造的,一个个具体存在的,实实在在存在的实例
构造方法
构造方法名与类名相同,且没有返回值,且不需要使用void修饰
作用: 在构造方法中为创建的对象成员变量初始化赋值
特点: 每个类都有构造方法,如果没有显式地为类定义构造方法,Java将会为该类提供一个默
认无参构造方法,但是只要在一个Java类中定义了一个有参构造方法后,默认的无参构造方法
会失效。
一个类可以有多个构造方法。
package javaoop;
public class Person {
String name;
int age;
String zuming;
public Person(){
}
public Person(String a, int b, String c){
name=a;
age=b;
zuming=c;
}
public void altogether() {
System.out.println("姓名:"+name+" "+"道龄:"+age+" "+"族名:"+zuming);
}
public void strong(){
System.out.println("力量:80");
}
public void mentality(){
System.out.println("智慧:75");
}
public void blood(){
System.out.println("血量:1000000");
}
}
package javaoop;
public class TestPerson {
public static void main(String[] args) {
Person one = new Person();
one.name="朱五";
one.age=150;
one.zuming="妖族";
one.altogether();
one.strong();
one.mentality();
one.blood();
System.out.println("=====================");
Person two = new Person("李四",250,"魔族");
two.altogether();
two.strong();
two.mentality();
two.blood();
}
}
方法的重载
l方法的重载是指一个类中具有相同的名字,但参数不同的多个方法。
l参数不同(可以有三方面的不同)
• 数量不同
• 类型不同
• 顺序不同
l 调用时,会根据不同的参数表选择对应的方法。
注意:方法重载跟方法的返回值类型没有任何关系
public Person(String a, int b, String c){
name=a;
age=b;
zuming=c;
}
public Person(String a,String c,int b){
name=a;
zuming=c;
age=b;
}
Person two = new Person("李四",250,"魔族");
Person two1 = new Person("张三","魅魔",500);
对象与引用
Java 语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象是通过引用对其操作的
1)右边的“new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。
2)左边的“Car bm”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指
向Car对象的对象引用。
3)”=”操作符使对象引用指向刚创建的那个Car对象。
package javaoop;
public class TestPerson {
public static void main(String[] args) {
Person one = new Person();
one.name="张三";
Person one1 = one;
one1.name="李四";
System.out.println(one.name);
System.out.println(one1.name);
}
}
李四
李四