面向过程(Procedure Oriented)和面向对象(Object Oriented)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。
C语言是一种典型的面向过程语言,java是一种典型的面向对象语言。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象思维方式是一种更符合人们思考习惯的思想,思维方式将复杂的问题简单化。面向对象把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。宏观上使用面向对象把握,微观处理上仍然是面向过程。
面向过程思维方式中更多的体现的是执行者(自己做事情),面向对象中更多的体现是指挥者(指挥对象做事情)。
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:性能比面向过程低。
如何开汽车?
—面向过程分析 —面向对象分析
1.踩离合 * 驾驶员
2.挂挡 * 汽车
3.踩油门,放离合 * 驾驶员开汽车
4.车开了 car.start();
如何修建房子?
—面向过程分析 —面向对象分析
1.设计房子 * 设计师
– 修建几层楼,几间卧室等 – 负责房屋设计
2.购买材料 * 采购员
– 建筑材料、装修材料等 – 负责材料购买
3.修建毛坯房 * 建筑工人
– 憨实地基,修建房屋等 – 负责房屋建设
4.房屋装修 * 装修工人
– 卫生间先防水后贴地板等 – 负责房屋装修
5.入住 * 入住
java是一种面向对象的程序设计语言(Object Oriented Programming:OOP),面向对象的程序设计语言中有类和对象的概念,它们在概念上有什么区别呢?
从编程的设计来说:万物皆对象。
从另一角度的来说,现实生活中任何具体的事物都可以认为是一个对象。
例如:一张桌子是一个对象,一张床是一个对象,一台电脑是一个对象,一本书是一个对象,一个人是一个对象,一个杯子是一个对象。
从编程的设计来说:现实中一类事物抽象,抽象就是提取这一类事物共有的属性和行为。
例如:班级的每一个同学都是一个对象,都具备姓名、年龄、学号等属性,也具备吃饭、睡觉、学习等行为,那么我就可以把班上的同学抽象为学生(Student)类。
反过来我们可以把类看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。
对象是类的实例,类是对象的模板。
类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、行为。
在java中,我们可以用关键字class来定义一个类,一个java文件可以同时定义多个class。
【示例】类的创建方式
// 定义一个Person类
class Person {
}
// 定义一个Dog类
class Dog {
}
// 每一个源文件必须有且只有一个public class,并且类名和文件名保持一致!
public class ObjectDemo {
}
上面的类定义好后,没有任何的其他信息,就跟我们拿到一张张图纸,但是纸上没有任何信息,这是一个空类,没有任何实际意义。所以,我们需要定义类的具体信息。
类的组成:
属性 field,定义格式: [修饰符] 属性类型 属性名 = ** [默认值] ;**
方法(行为) method,定义格式: [修饰符] 返回值类型 方法名 (形参列表) {}
以下Student类中的属性也称为成员变量,Student类中的方法称之为成员方法。
【示例】创建一个学生类,并添加类的成员变量和成员方法
public class Student {
// 属性,此处也称为成员变量
String name; // 姓名
int age; // 年龄
// 方法,此处也称为成员方法
void eat(String food) {
System.out.println(name + "在吃" + food);
}
void study() {
System.out.println(name + "年龄" + age + "岁,在学习java");
}
}
注意: 成员变量定义在类中,整个类中的成员方法都可以访问;
在java中,对象也叫做object或instance(实例),所以也称为实例对象。
要想创建一个对象,那么必须先有一个类,然后通过new关键字来创建一个对象。
语法格式:类名称 对象名称 = new 类名称();
【示例】通过Student类(模板),创造出两个学生对象(具体实例)
// 测试类
public class ObjectTest {
public static void main(String[] args) {
// 实例化小明学生对象
Student stu1 = new Student();
// 成员变量赋值
stu1.name = "小明"; // 设置名字
stu1.age = 18; // 设置年龄
System.out.println("name:" + stu1.name + " age:" + stu1.age);
// 调用成员方法
stu1.eat("小龙虾"); // 调用吃放方法
stu1.study(); // 调用学习方法
// 实例化小花学生对象
Student stu2 = new Student();
// 操作成员变量
stu2.name = "小花"; // 设置名字
stu2.age = 17; // 设置年龄
System.out.println("name:" + stu2.name + " age:" + stu2.age);
// 调用成员方法
stu2.eat("冰淇淋"); // 调用吃放方法
stu2.study(); // 调用学习方法
}
}
注意事项:
1、成员变量隶属于于对象,只能通过对象来调用,我们可以通过 对象.成员变量 来操作成员变量。
2、成员方法隶属于于对象,只能通过对象来调用,我们可以通过对象.成员方法(实参列表) 来调用成员方法。
我们可以在类中对成员变量显示初始化,也可以在创建对象成功后,通过 对象.成员变量 来设置成员变量值。如果以上两种操作都不做,java虚拟机会使用默认的值对其初始化。
成员变量的默认值 | |
---|---|
整型 | 0 |
浮点型 | 0.0 |
字符型 | ‘\u0000’ |
布尔值 | false |
引用类型 | null |
【示例】蛋糕师制作蛋糕
public class Main {
public static void main(String[] args) {
CakeMaker cakeMaker = new CakeMaker();
cakeMaker.name = "拉提娜";
Cake cakes = cakeMaker.cake("蓝色妖姬翻糖蛋糕", 32, "无价","你是我最深的爱恋");
cakes.info(cakeMaker.name);
System.out.println(" --"+"迪尔"+" "+"预订");
}
}
class Cake{
String cakeName;
int size;
String price;
String moral;
public void info(String str){
System.out.println("蛋糕师:" + str);
System.out.println(size + "寸 " + cakeName);
System.out.println("价格:" + price);
System.out.println("寓意:"+moral);
}
}
class CakeMaker{
String name;
public Cake cake(String cakeName,int size,String price,String moral){
Cake cakes = new Cake();
cakes.cakeName = cakeName;
cakes.size = size;
cakes.price = price;
cakes.moral = moral;
return cakes;
}
}