面向对象与面向过程

本文详细解析了面向对象编程的四大特性——封装、抽象、继承和多态,比较了它们与面向过程的区别,强调了面向对象在复杂系统开发中的优势。从类和对象的概念出发,探讨了如何通过Java示例展示这些特性,以及它们如何提升代码可读性、维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象与面向过程

参考:

对「面向对象」的理解

深入理解面向对象与面向过程

面向对象可以简单的理解为:把事物(属性)和操作事物的方法(操作属性的方法)汇集到一起,形成一个相互依赖的整体。

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。面向对象最基础的概念就是「类」和「对象」,并将其作为程序的基本单元,并拥有**「封装」、「抽象」、「继承」、「多态」**的特性。

  • 类(Class):定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
  • 对象:是类的实例。

面向对象编程能够更方便地实现一些通过面向对象分析设计的需求,可以很方便将某些现实事物转化成更简洁的代码去实现,最简单的例子就是我们平时写的 Java Bean,能够将某个事物的特性写进某个类或对象里。

面向对象特性

上文提到,面向对象编程的关键就是「封装」、「抽象」、「继承」、「多态」,这四大特性在面向对象编程中起着非常关键的作用。以下通过介绍每一个特性来理解其在面向对象编程中的作用。

封装

以下是 Java 中经典的体现封装特性的代码:

public class Person{
    private String name;
    private int age;
    
    public int getAge(){
      return age;
    }
    
    public String getName(){
      return name;
    }
    
    public void setAge(int age){
      this.age = age;
    }
    
    public void setName(String name){
      this.name = name;
    }
}

这里用 publicprivate 体现了 Java 语言的一个体现封装特性的语法机制:访问权限控制。通过控制访问权限,将一些属性封装起来,让外部仅可以通过对外暴露的方法去对一些属性进行修改。在现实中更多是为了控制某些属性按所期待的方式进行修改,而**不是直接修改属性进行修改,相信在工作中也能看到很多相关的例子,为了保护数据和隐藏信息**而作一些限制。

当然这看起来好像直接访问和修改属性能够使代码变得更灵活,但是随着代码量的增长直接访问和修改属性会使代码的可读性和可维护性受到了非常大的影响。

仅仅暴露有限的方法能够使这个类更加易用,在大多数开发者的工作中会涉及到非常广的团队协作,若要对每个类的每个属性进行熟悉会大大降低工作效率,通过暴露有限的方法且方法命名简洁规范可大大提升工作效率,想必这也是封装特性的一个重要意义吧。

抽象

封装特性是为了通过暴露有限的方法来达到保护数据的作用,而抽象则是对方法的具体实现进行隐藏,让调用者只需要关心方法提供哪些功能。在 Java 中可以通过接口类或抽象类的语法机制来实现这个特性。

抽象特性就是通过编程语言的「函数」来表现的,不一定要通过类似于抽象类或接口类来进行表现。比如 C 语言的 malloc() 函数就是一个抽象的表现,开发者并不需要知道里面发生了什么,仅需要知道这个方法调用后能有什么结果。

其实「封装」和「抽象」都是为了处理复杂代码提升效率,毕竟人一时间能承受的范围是有限的,因此通过以上特性出来了很多开源库为我们日常开发“提速”,仅关注功能不关注实现,为大脑减轻负担,提高代码的扩展性、可维护性,降低复杂度

同时,抽象特性在代码设计中起到非常大的作用,比如基于接口而非实现编程、开闭原则、代码解耦都用到了抽象特性。

继承

继承是用来表示类之间的 is-a 关系的,比如猴子是动物,在 Java 中通过 extends 关键字来实现继承。

继承最大的作用就是用来实现更好的代码复用,如果两个类有相同的一部分属性,即可抽取一个父类用于放置相同属性,子类继承于它,这样两个类就可以减少重复代码的编写。当然如果在编写代码的过程中嵌套太多层的继承关系也会适得其反,复杂的代码层级关系使得代码可读性及可维护性下降。所以,只有合适的继承关系使用可解决代码复用问题,提升可维护性

多态

多态是指子类可以替换父类,在运行时调用子类的实现。以下是 Java 语言实现多态的一种方式。

多态的实现需要编程语言提供特殊的语法机制,比如继承加方法重写、接口类。多态用于提高代码的可扩展性和复用性,通过多态使代码变得更加灵活。菜鸟教程给出了一个例子:

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

故有了多态特性,使得此类行为在代码中的控制更加简单快捷。同时,多态也是很多设计模式/原则实现的基础,比如策略模式、基于接口而非实现编程、依赖倒置原则、里氏替换原则等待。

面向过程与面向对象

抽象:

与面向对象编程相比较的,往往就是面向过程编程。面向过程编程也是一种编程范式或编程风格,以过程(可理解为方法)作为组织代码的基本单元,以**数据(可理解为属性)与方法相分离**为最主要的特点,通过组织执行方法的顺序来完成一个功能。

与面向对象不同的是面向过程不是以「类」和「对象」作为组成程序的基本单元,同时**方法和数据结构定义是分开的**,而面向对象方法和数据结构都包含在类里绑定在了一起。

面向对象编程相比面向过程,无非就是其封装、继承、抽象、多态特性,使得代码的可读性、可维护性、可扩展性增强,更适合用于有大型复杂业务的系统开发,提升协作效率。相信大多数开发者都不是独立开发一个系统,故通过面向对象编程语言利用这些特性做好架构设计,能为工作效率提升一个台阶。

具体:

什么是面向过程?

  • 自上而下顺序执行,逐步求精;
  • 其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;
  • 各模块之间的关系尽可能简单,在功能上相对独立
  • 每一模块内部均是由顺序、选择和循环三种基本结构组成;
  • 其模块化实现的具体方法是使用子程序。
  • 程序流程在写程序时就已决定

什么是面向对象?

  • 数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
  • 对同类对象抽象出其共性,形成类。
  • 类中的大多数数据,只能用本类的方法进行处理。
  • 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信
  • 程序流程由用户在使用中决定
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值