何为面向对象?(3)

很多刚入门的童鞋对与什么是面向对象估计是一脸懵,面向对象更是一个非常庞大的知识体系。前段时间逛博客的时候遇到这么个问题 ,问的是面向对象的知识,问题标题如下,所以就想聊聊有关面向对象的内容。

什么是面向对象?

面向对象编程(Object Oriented Programming,OOP)是一种常见的程序设计范式,它的核心思想是将程序中的各个组件看作是对象,这些对象通过相互交互来完成任务。在面向对象编程中,每个对象都有自己的数据(属性)和行为(方法),其他对象可以通过调用这些方法来与它们交互,而无需了解方法的具体实现细节。

为什么要面向对象?

面向对象编程有许多优点,如模块化、可重用性、继承性、多态性等,因此在许多编程语言中得到广泛应用。

面向对象产生的历史原因有下面两点:

1、 计算机是帮助人们解决问题的,然而计算机终究是个机器,他只会按照人所写的代码,一步一步的执行下去,最终得到了结果,因此无论程序多么的复杂,计算机总是能轻松应付,结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。

2、 结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。

可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要再把现实世界和程序世界之间来回做转换。

与此同时,人们发现,在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为是不稳定的,同时客体之间具有各种联系,因此面向客体编程,比面向行为编程,系统会更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时候只需要改变行为即可,主架构则保持了稳定。

于是面向对象就产生了。

面向对象的特点

面向对象通常有三大特性:

  1. 封装

  2. 继承

  3. 多态

封装是面向对象编程的重要概念之一,它通过将对象的内部状态隐藏起来,只提供有限的公共接口来访问数据,从而保护数据的完整性和安全性。这种封装性使得对象的内部实现可以被隐藏,同时也降低了代码的耦合度,提高了代码的可维护性和复用性。

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()方法时,可以传入CircleRectangle对象,根据实际类型动态调用相应的draw()方法。

除此之外,面向对象编程还涉及到一些其他的概念,比如类和对象的关系、构造函数和析构函数、静态方法和成员变量、接口和抽象类等。这些概念共同构成了面向对象编程的基础,通过合理地运用这些概念,我们可以编写出结构清晰、易于理解和维护的代码,从而提高了软件开发的效率和质量。

篇幅有限,其余详细内容会在后续文章中详细解释。

全文完,没关注的烦请加个关注,已关注的烦请加个星标,优质内容持续更新中~

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值