很多刚入门的童鞋对与什么是面向对象估计是一脸懵,面向对象更是一个非常庞大的知识体系。前段时间逛博客的时候遇到这么个问题 ,问的是面向对象的知识,问题标题如下,所以就想聊聊有关面向对象的内容。
什么是面向对象?
面向对象编程(Object Oriented Programming,OOP)是一种常见的程序设计范式,它的核心思想是将程序中的各个组件看作是对象,这些对象通过相互交互来完成任务。在面向对象编程中,每个对象都有自己的数据(属性)和行为(方法),其他对象可以通过调用这些方法来与它们交互,而无需了解方法的具体实现细节。
为什么要面向对象?
面向对象编程有许多优点,如模块化、可重用性、继承性、多态性等,因此在许多编程语言中得到广泛应用。
面向对象产生的历史原因有下面两点:
1、 计算机是帮助人们解决问题的,然而计算机终究是个机器,他只会按照人所写的代码,一步一步的执行下去,最终得到了结果,因此无论程序多么的复杂,计算机总是能轻松应付,结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。
2、 结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。
可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要再把现实世界和程序世界之间来回做转换。
与此同时,人们发现,在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为是不稳定的,同时客体之间具有各种联系,因此面向客体编程,比面向行为编程,系统会更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时候只需要改变行为即可,主架构则保持了稳定。
于是面向对象就产生了。
面向对象的特点
面向对象通常有三大特性:
-
封装
-
继承
-
多态
封装是面向对象编程的重要概念之一,它通过将对象的内部状态隐藏起来,只提供有限的公共接口来访问数据,从而保护数据的完整性和安全性。这种封装性使得对象的内部实现可以被隐藏,同时也降低了代码的耦合度,提高了代码的可维护性和复用性。
public class EncapsulationExample {
private int data;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
上面的示例代码演示了封装的概念。在这个类中,data
变量被声明为私有的,外部无法直接访问,只能通过公共的getData()
和setData()
方法来访问和修改数据。
继承是另一个重要的概念,它允许我们创建一个新的类(子类),从已有的类(父类)中继承属性和方法,并且可以在子类中添加新的属性和方法,或者重写父类的方法以实现特定的功能。通过继承,我们可以实现代码的重用,并且可以建立类之间的层次结构,从而提高了代码的组织性和可扩展性。
public class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
上面的示例代码展示了继承的概念。Dog
类继承自Animal
类,并重写了sound()
方法以实现狗的特定声音。
多态性是面向对象编程的又一个重要特点,它允许我们使用统一的接口来操作不同类型的对象,而不需要知道对象的具体类型。多态性使得程序可以更加灵活和可扩展,可以根据需要动态地选择合适的方法来处理对象,从而实现了代码的复用和可维护性。
public class PolymorphismExample {
public void display(Shape shape) {
shape.draw();
}
}
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
上面的示例代码展示了多态性的概念。PolymorphismExample
类中的display()
方法接受一个Shape
类型的参数,可以接受任何实现了Shape
接口的对象。在调用display()
方法时,可以传入Circle
或Rectangle
对象,根据实际类型动态调用相应的draw()
方法。
除此之外,面向对象编程还涉及到一些其他的概念,比如类和对象的关系、构造函数和析构函数、静态方法和成员变量、接口和抽象类等。这些概念共同构成了面向对象编程的基础,通过合理地运用这些概念,我们可以编写出结构清晰、易于理解和维护的代码,从而提高了软件开发的效率和质量。
篇幅有限,其余详细内容会在后续文章中详细解释。
全文完,没关注的烦请加个关注,已关注的烦请加个星标,优质内容持续更新中~