在本页面中,我们将学习面向对象编程(OOP)的基础知识。面向对象编程是一种编程范式,它引入了许多概念,如继承、数据绑定、多态性等。

Simula被认为是第一个面向对象的编程语言,它将一切都表示为对象。真正的面向对象编程语言是指完全采用对象范例的编程语言。

Smalltalk被认为是第一个真正的面向对象编程语言。

流行的面向对象语言包括Java、C#、PHP、Python和C++等。

面向对象编程的主要目标是模拟现实世界的实体,如对象、类、抽象、继承、多态等。

OOP(面向对象编程)系统

在面向对象编程中,对象表示现实世界的实体,如笔、椅子、桌子、计算机、手表等。面向对象编程是一种通过使用类和对象来设计程序的方法或范例。它简化了软件开发和维护,引入了以下概念:

  • 对象:表示具体的实体,具有特定的属性和行为。
  • :用于定义对象的模板,包含了对象的属性和方法。
  • 继承:允许一个类继承另一个类的属性和方法,促进代码重用和层次化设计。
  • 多态性:允许对象根据所处的上下文表现出不同的行为,提高灵活性和可扩展性。
  • 抽象:通过定义接口和抽象类来隐藏对象的具体实现细节,只暴露必要的方法和属性。
  • 封装:将相关的数据和方法封装在一起,通过限制对对象内部数据的直接访问来提高安全性和可维护性。

除了这些概念,面向对象设计还使用了其他一些术语,如耦合(组件之间的依赖程度)和聚合(对象之间的关联关系)。

1.png

Object对象

2.png

在面向对象编程中,任何具有状态和行为的实体都被称为对象。例如,椅子、笔、桌子、键盘、自行车等物理或逻辑实体都可以是对象。

对象可以被视为类的实例,它们具有地址并在内存中占用一些空间。对象可以通过消息的发送和响应来进行通信,而无需了解彼此的数据或代码细节。

举个例子,狗就是一个对象,因为它具有颜色、名称、品种等状态,并且可以执行摇尾巴、吠叫、进食等行为。

类(Class)

类是对象的集合,它可以被视为逻辑实体。

类还可以被定义为创建单个对象的蓝图。类本身不占用任何空间。

继承(Inheritance)

当一个对象获得其父对象的所有属性和行为时,我们称之为继承。继承提供了代码的可重用性,并用于实现运行时的多态性。

3.gif

多态性(Polymorphism)

当一项任务可以以多种方式执行时,我们称之为多态性。例如,绘制不同的形状(如三角形、矩形)以满足客户的需求。

在Java中,我们使用方法重载(method overloading)和方法覆盖(method overriding)来实现多态性。

另一个例子是动物的叫声,猫会发出喵喵的声音,狗会发出汪汪的声音,等等。

抽象(Abstraction)

将内部细节隐藏并展示功能称为抽象。比如电话,我们不需要知道内部是如何处理的。

在Java中,我们使用抽象类和接口来实现抽象。

4.png

封装(Encapsulation)

将代码和数据绑定(或封装)到一个单元中称为封装。类比如药丸胶囊中封装了不同的药物。

Java中的类就是封装的一个例子。Java Bean是一个完全封装的类,因为其中的所有数据成员都是私有的。

耦合(Coupling)

耦合指的是类之间的相互依赖和信息共享。当类之间彼此了解时,就会存在耦合关系。如果一个类具有另一个类的详细信息,那么它们之间的耦合就比较强。在Java中,我们使用private、protected和public修饰符来明确类、方法和字段的可见性级别。通过使用较弱耦合的接口,可以减少具体实现之间的依赖关系。

内聚(Cohesion)

内聚指的是组件内部执行单个明确定义任务的程度。高度内聚的方法完成单一明确的任务。低内聚的方法会将任务拆分为多个部分。例如,java.io包是一个高度内聚的包,因为它包含与I/O相关的类和接口。然而,java.util包是一个低内聚的包,因为它包含了不相关的类和接口。

关联(Association)

关联表示对象之间的关系。一个对象可以与一个或多个对象相关联。有四种常见的关联类型:

  • 一对一(one-to-one)
  • 一对多(one-to-many)
  • 多对一(many-to-one)
  • 多对多(many-to-many)

关联可以是单向的或双向的。

聚合(Aggregation)

聚合是实现关联关系的一种方式。聚合表示一个对象包含其他对象作为其状态的一部分。它表示对象之间的弱关系。在Java中,聚合关系也被称为"has-a"关系,它是对对象进行重用的一种方式。

OOP相对于面向过程的编程语言的优势

  1. OOP使开发和维护更容易,而在面向过程的编程语言中,随着代码规模的增加,管理起来变得困难。
  2. OOP提供了数据隐藏,而在面向过程的编程语言中,全局数据可以从任何地方访问。

5.png

图:面向过程编程中的数据表示

6.png

图:面向对象编程中的数据表示

3) OOP 提供了更有效地模拟真实世界事件的能力。如果我们使用面向对象的编程语言,我们可以提供实际应用问题的解决方案。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想