系统化掌握Dart编程之面向对象概述

430 阅读5分钟

image.png

前言

在传统的面向过程编程中,开发者往往将注意力集中在解决问题的具体步骤上,而忽视了对问题本身的抽象建模。这种方法对于小型项目可能足够,但对于大型复杂系统来说,往往会带来代码难以维护扩展复用等问题。

面向对象编程是相对于面向过程编程来讲的,它是一种编程范式编程方法论,通过引入“对象”的概念,提供了一种更贴近现实世界的方式建模问题域。通过建模更容易理解和解决这些问题,并且有助于编写更模块化易维护和扩展的软件。

千曲而后晓声,观千剑而后识器。虐它千百遍方能通晓其真意

一、面向过程编程(做菜的步骤

image.png

想象一下你在厨房里做一道菜。你有一本食谱,上面列出了所有需要的材料和详细的步骤。你按照这些步骤一步步来做,直到最后完成这道菜。在这个过程中:

  • 1、变量:是你需要准备的食材
  • 2、函数/过程:就像是食谱上的每一个步骤
  • 3、全局状态:是整个厨房的状态,比如冰箱里的库存、灶台的温度等。

特点

  • 1、线性流程:程序按顺序执行一系列步骤,就像你一步一步跟着食谱做菜。
  • 2、集中控制:通常有一个主函数负责调用其他辅助函数,类似于厨师指挥整个烹饪过程。
  • 3、数据共享:多个函数可能会操作相同的全局数据,就像不同步骤可能都需要用到同一块切好的蔬菜。

二、面向对象编程(餐厅的运作

image.png

现在我们换一个场景,考虑一家餐厅的运作。餐厅有不同的员工,每个员工都有自己的职责。例如,厨师负责做饭,服务员负责点餐和服务顾客,洗碗工负责清洗餐具。每个人都有自己的工具和工作方式,但他们共同为同一个目标 —— 为顾客提供优质的服务而努力。

  • 1、对象:就像是餐厅里的员工,他们有自己的属性(如名字年龄)和行为(如做饭服务顾客)。
  • 2、类:是对这些员工类型的定义,比如 Chef 类、Waiter 类等。
  • 3、消息传递:是指对象之间通过方法调用来交互,就像服务员告诉厨师顾客点了什么菜。

特点

  • 1、模块化:每个对象负责特定的任务,可以独立开发和测试,就像每个员工专注于自己的工作。
  • 2、封装:对象内部的数据和逻辑对外界隐藏,只暴露必要的接口,类似员工的工作细节不需要顾客知道。
  • 3、继承与多态:新类型可以从已有类型派生出来,并根据需要调整行为,就像新的服务员可以基于老服务员的经验进行培训。

三、对比与总结

特征面向过程编程(PP)面向对象编程(OOP)
核心概念函数和过程类和对象
组织方式线性流程,逐步执行模块化,每个对象负责特定任务
数据处理数据和操作分离,可能依赖全局变量数据和操作捆绑在一起,形成独立的对象
扩展性添加新功能可能需要修改现有代码可以通过添加新类或继承现有类来轻松扩展
现实世界映射较难直接映射到复杂的真实世界问题更容易模拟真实世界的实体及其相互关系

四、为什么选择OOP?

虽然面向过程编程对于简单的问题非常有效,但对于更复杂的系统,OOP提供了显著的优势

  • 1、模块化:每个类负责特定的任务,可以独立开发和测试,这使得代码更加清晰易懂。
  • 2、维护性:良好的封装模块化设计使得代码更容易维护和更新
  • 3、扩展性:新增功能时,只需添加新类或修改现有类,而不必改动整个系统
  • 4、复用性:通过继承组合,可以在不重复编写代码的情况下创建新的功能。
  • 5、抽象性OOP 更容易模拟真实世界的实体及其相互关系简化了复杂系统的建模,具有更强的抽象能力

五、总结

image.png

  • 面向过程编程
    • 将问题分解为一系列步骤每个步骤由函数实现,按顺序调用这些函数来解决问题。
    • 类似于严格按照食谱一步步做菜,注重的是具体的步骤流程
  • 面向对象编程
    • 将问题中的事物抽象为对象,每个对象描述某个事物的属性行为,通过对象间的交互来解决问题,而不只是完成单一的步骤。
    • 类似于管理一家餐厅,每个员工(对象)都有自己的职责,通过协作完成任务

码字不易,记得 关注 + 点赞 + 收藏 + 评论