首页 > Java > java教程 > 引入面向对象

引入面向对象

Barbara Streisand
发布: 2024-12-31 18:04:11
原创
296 人浏览过

在本章中,我们将学习面向对象(OO)并探索它在软件系统开发过程中带来的好处。

为什么我们在软件开发中需要面向对象(OO)

为了回答这个问题,我们首先(简单地)看看如何使用结构化编程方法(也称为函数式编程)来设计软件系统。

1.结构化编程:

结构化编程中,一般方法是分析问题并将其分解为函数来执行特定任务。大多数这些函数都需要数据类型来处理。 功能系统中的数据通常存储在数据库中,或者可以作为全局变量.

保存在内存中

让我们举一个学校管理系统的简单示例。该系统存储学校所有学生和讲师的详细信息。同时,它还管理学校提供的课程信息,并跟踪哪些学生正在学习哪些课程。

系统需要存储学生老师考试课程的信息,设计有以下功能:

  • 添加学生
  • 参加考试
  • 检查考试标记
  • 颁发_证书
  • 开除学生

从那里,我们可以构建数据、函数和依赖关系的图表,如下所示:
Introduce Object Orientation

这种方法的问题是,如果我们要解决的问题变得过于复杂,系统将变得越来越难以维护。以上面的示例为例,如果请求改变了 Student 处理数据的方式,例如将 “出生年份” 从两个字数字转换为四位数字,该怎么办?只是这个小小的改变就可能导致不可预见的副作用并导致严重的问题。 考试课程老师的数据都依赖于学生的数据。此外,我们可能破坏了 add_student、enter_for_exams、issue_certificate 和 expel_student 函数。例如,add_student 肯定不再起作用,因为它需要两位数的“出生年份”数据,而不是四位数字。

从上面的例子中,我们可以看到结构化编程的一些缺点,包括函数和数据之间的相互依赖,导致难以维护难以扩展容易遇到意想不到的问题更改数据时。为了解决这些问题,我们需要一种新的方法,那就是面向对象(OO).

2.面向对象:

2.1。概念:

对象:可以理解为一个具体的实体,由2个主要组件组成:

  • 属性:是对象的信息和特征。

  • 方法:对象可以执行的操作和动作。

从上面的问题学校管理系统的例子中,我们可以有以下对象:
Introduce Object Orientation

类: 是一种数据类型,包括对象将具有的预定义属性和方法。我们可以将类理解为创建对象的模板。

例如:学生是所有学生的通用定义模板,包括共同的属性和方法,如姓名、出生年份和其他如入学等行为。对象是一个名为2004年出生的Nguyen Van A的特定学生,具有班级特征学生

2.2。 OOP的基本原则:

封装

封装就是将相关的属性和方法分组到同一个类中,以达到有效管理和使用的目的。这降低了复杂性并提高了安全性,同时也使代码易于维护和扩展。

public class Student {
    private String name;
    private String dateOfBirth;


    public void registerForCourse(Course course) {
        course.addStudent(this);
    }
}
登录后复制
登录后复制

学生信息将被封装在Student类中,与Student相关的动作将通过该类中的方法进行。

传承

继承允许子类继承父类的属性和方法,以最佳地重用源代码并轻松扩展功能。

public class Person {
    private String name;
    private String dateOfBirth;
}

public class Student extends Person {
    private double gpa;
}

public class Teacher extends Person {
    private String department;
}
登录后复制

StudentTeacher 都继承自 Person 类,有助于重用公共属性。每个子类都可以添加单独的属性或方法。

多态性

多态允许一个方法以多种不同的方式实现,即该方法可以在具有不同行为的子类中重新定义。

public class Person {
    public void introduce() {
        System.out.println("I am a person.");
    }
}

public class Student extends Person {
    @Override
    public void introduce() {
        System.out.println("I am a student.");
    }
}

public class Teacher extends Person {
    @Override
    public void introduce() {
        System.out.println("I am a teacher.");
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        Person student = new Student();
        Person teacher = new Teacher();

        person.introduce(); // I am a person.
        student.introduce(); // I am a student.
        teacher.introduce(); // I am a teacher.
    }
}
登录后复制

introduce 方法在 Person 类中定义,并在 StudentTeacher 子类中重写。即使使用 Person 类型,当调用 introduce 方法时,系统将使用实际对象的适当方法(StudentTeacher ),表现出多态性。

抽象

抽象是一种处理一般概念的方法,而不需要过多关注具体的实现细节,从而提高灵活性并降低复杂性。

public class Student {
    private String name;
    private String dateOfBirth;


    public void registerForCourse(Course course) {
        course.addStudent(this);
    }
}
登录后复制
登录后复制

通过Abstraction,我们定义一个带有泛型方法(startCourse())的抽象类(Course)。 MathCourseScienceCourse 等子类详细实现了这些方法,使系统易于扩展和定制。

3.面向对象编程的优点:

  • 由于继承,类可以在不重复代码的情况下进行扩展,从而最大限度地减少冗余并提高效率。
  • 节省时间并提高生产力。
  • 类和对象的概念有助于在计算机上更自然、清晰地模拟现实世界的实体,同时克服面向结构编程的局限性。

以上是引入面向对象的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板