引入面向对象
面向对象的由来:
面向对象编程(Object-Oriented Programming, OOP)是一种编程范型,其由来可以追溯到20世纪60年代。在此之前,主流编程语言采用的是“过程化编程”模式,即面向过程编程模式。在这种模式下,程序主要由一组函数或子程序组成,数据和函数是分离的。
然而随着软件规模和复杂性的增加,过程化编程的不足逐渐显现:必须通过全局变量或输入参数来传递信息、代码复用困难、代码难以维护等问题。为了解决这些问题,人们开始寻求一种新的编程范型。
在此背景下,Alan Kay等人提出了面向对象编程这一概念,提供了一种新的软件设计和实现方法,从而被广泛应用于软件开发中。面向对象编程将数据和函数封装为对象,强调数据的本质和操作数据的行为作为一体,多态、继承等特性可以让我们更加灵活地设计、组织、重用和维护程序。
到20世纪80年代,面向对象编程得到了广泛的推广和应用,C++、Java、Python等编程语言都具有良好的面向对象支持。
综上所述,面向对象编程是为了解决过程化编程的不足和应用需求而产生的一种新的编程思想和技术,已经成为现代软件开发的重要组成部分。
这不禁想对比一下,面向对象VS面向过程
面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计
和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来
越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发
各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程
(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。
总结一下,异同点如下:
如何new对象
在Java中,我们可以通过关键字new来创建一个对象。具体步骤如下:
使用关键字new创建一个对象引用,该对象的类型是我们所需创建的类的类名。
例如:Student student1;
在新建对象引用后,需要使用关键字new调用类的构造方法,创建该对象实例。在括号中传入构造方法需要的参数。
例如:student1 = new Student(“001”, “Tom”, “男”, 20, 80.5);
上述代码将创建一个学生对象,并将此对象的sNO、sName、sSex、sAge、sJava属性分别初始化为"001"、“Tom”、“男”、20和80.5。
Student() students = new Student();
例题
请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变
public class Vehicle {//Vehicle实体类
int speed; // 速度
int size; // 体积
public void move() {
System.out.println("Vehicle is moving.");
}
public void setSpeed(int speed) {
this.speed = speed;
}
public void speedUp() {
speed += 10;
}
public void speedDown() {
speed -= 10;
}
}
public class TestVehicle {//测试类TestVehicle
public static void main(String[] args) {
Vehicle v = new Vehicle(); // 创建交通工具对象
v.setSpeed(60); // 设置速度为60
v.size = 3; // 设置体积为3
System.out.println("Speed: " + v.speed);
System.out.println("Size: " + v.size);
v.speedUp(); // 加速
System.out.println("New speed after speeding up: " + v.speed);
v.speedDown(); // 减速
System.out.println("New speed after speeding down: " + v.speed);
}
}
总结
在使用面向对象的思想进行程序设计时,有一些需要特别注意的点,包括以下几个方面:
面向对象的三大特征:封装、继承和多态。在设计类时,需要考虑这些特征的应用,同时遵循单一职责原则,使类的功能更加清晰和简洁。
对象的生命周期
。在Java中,对象创建后会一直存在于内存中,直到垃圾回收器
回收其占用的内存。因此,在使用对象时要注意对象的生命周期,及时对不再使用的对象进行置空或释放内存。
对象之间的关系。在设计类时,需要
考虑类之间的关系
,包括依赖
、关联
、聚合和组合
等。同时,还需注意避免出现过度耦合的情况,遵循迪米特法则,确保类与类之间的独立性。
代码的可维护性
。在编写代码时,需要注意代码的可读性、可复用性、可扩展性和可测试性等方面,以确保代码的可维护性。同时,还需注意代码的规范性和风格的统一性,使其他人更易于理解和修改代码。
异常处理
。在程序运行中,可能会发生各种异常情况,如空指针异常、数组越界异常等。因此,在编写代码时,需要考虑这些异常情况,并进行相应的异常处理,以保证程序的稳定性和可靠性。
综上所述,面向对象的程序设计需要在多个方面进行注意,包括类的设计、对象的生命周期、对象之间的关系、代码的可维护性和异常处理等。只有在这些方面都做到了充分考虑并合理处理,才能编写出高质量、易维护的面向对象程序。
补充
构造方法
何为构造方法、构造方法的用法与细节
解答
1. 构造方法的名称必须与类名相同。
2. 构造方法可以有参数,也可以没有参数。
3. 构造方法没有返回值类型,也不需要显式地写出 return
构造方法的创建
无参构造
public class Person {
private String name;
private int age;
//无参构造方法
public Person() {
}
}
有参构造
public class Person {
private String name;
private int age;
// 有参构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
无参和有参构造
public class Person {
private String name;
private int age;
//无参构造方法
public Person() {
}
// 有参构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}