首页 > 其他分享 >通俗易举例说明面向对象和面向过程有什么区别

通俗易举例说明面向对象和面向过程有什么区别

时间:2023-06-02 11:05:26浏览次数:40  
标签:String 对象 编程 面向对象 面向 面向对象编程 通俗 举例说明

通俗易举例说明面向对象和面向过程有什么区别_面向对象编程

一. 面向对象

1. 概念

可以说,在面向对象的编程规范中,“一切皆对象”,对象就是面向对象编程的核心。我们把现实世界中的一个个对象或物体,抽象地体现在编程世界中。就好比我们想驾驶一辆奥迪A6,A6就是一个对象,制造商给A6赋予了各种功能和特性,我们就可以调用这个对象完成一系列操控。所以每一个对象都可以包含一系列具体的操作,最终一个个的对象又组成了完整的Java程序。这些对象可以是独立存在的,也可以是从别的对象中继承过来的。对象之间通过相互作用传递信息,实现程序开发。

给大家举个去吃点栗子,按照面向对象的解决思维就是:

1.  创造一个“餐厅”对象,去做饭;

2.  创造一个“人”对象,去吃饭;

2. 特点

在面向对象编程中,一个对象会有以下特点:

● 对象具有属性和行为;

● 对象具有变化的状态;

● 对象具有唯一性;

● 对象都是某个类的实例;

● 一切皆对象,真实世界中所有的事物都可以视为对象。

当然,如果只是这样跟大家解释一通,很多小白肯定还是不明白到底啥是面向对象。别急,面向对象是一种认知思维,一种思维的养成,并不是一朝一夕就可以形成的。有些科班出身的Java程序员,在学校里接触了很久的面向对象,甚至都做了几年的开发,真让他解释啥是面向对象,他依然很懵懂。我们要想真正地理解面向对象,只看几篇文章和视频是很难吃透的。你需要进行大量的编程实践,写着写着,有一天你就会突然顿悟:“啊,原来这就是面向对象啊”!

二. 面向过程

1. 概念

面向过程的编程思想其实很机械粗暴,所有的事情都可以拆分成一系列要执行的计算步骤,通常采用自上而下、顺序执行的方式来实现。还是给大家举吃饭的栗子,如果是按照面向过程的解决思维就是:

1.  到餐厅;

2.  点菜;

3.  点餐具;

4.  打印菜品明细;

5.  打印餐具明细;

6.  后厨根据菜品明细开始做饭;

7.  .......

你看,整个执行逻辑就是这么机械粗暴,简单明了。面向过程就是把目标的实现拆分成了一个个的实现过程,而每一步又可以继续拆分成若干个子步骤。这种解决问题的思维,与面向对象是有明显不同的。

2. 特点

根据以上分析,我们可以感受到面向过程的优点在于,性能上它比面向对象要高。因为在面向对象中,我们在调用类时需要进行实例化,开销比较大。但面向过程的缺点也很明显,代码不易维护、复用和扩展性都很差,开发效率较低。所以面向过程的开发技术,主要是用在单片机、嵌入式开发、Linux/Unix等对性能要求较高,代码改动不频繁的场景中。

三. 面向对象和面向过程的区别

接下来我们就按照上述描述的:“去吃饭”的栗子来给大家直观的看看面向对象和面向过程的区别是什么吧!

1. 面向对象

// 创建一个人类
class Person {
    private String name; // 人名
    private int age; // 年龄
    private String gender; // 性别

    // 构造函数
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // getter方法
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }

    // 吃饭方法
    public void eat() {
        System.out.println(name + "正在吃饭");
    }
}

// 创建一个餐厅类
class Restaurant {
    private String name; // 餐厅名
    private String address; // 地址

    // 构造函数
    public Restaurant(String name, String address) {
        this.name = name;
        this.address = address;
    }

    // getter方法
    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    // 提供餐食的方法
    public void provideFood() {
        System.out.println("提供美食,欢迎光临!");
    }
}

// 创建一个主函数类
public class goToDinner {
    public static void main(String[] args) {
        // 创建一个人对象
        Person person = new Person("张三", 25, "男");
        System.out.println(person.getName() + "今年" + person.getAge() + "岁,是个成年" + person.getGender() + "人");

        // 创建一个餐厅对象
        Restaurant restaurant = new Restaurant("饕餮大酒楼", "上海市黄浦区南京东路");
        System.out.println("欢迎来到" + restaurant.getName() + ",地址:" + restaurant.getAddress());

        // 人在餐厅吃饭
        person.eat();
        restaurant.provideFood();
    }
}

在这个栗子中:

首先我们通过创建Person类(定义了吃饭的方法eat())和Restaurant类(定义了提供餐食的方法provideFood()),将人和餐厅抽象为对象,并在goToDinner类中通过实例化对象,模拟了一个人在餐厅吃饭的场景。

先不着急分析,我们继续向下看

2. 面向过程

import java.util.Scanner;

public class GoToEat {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        // 输出欢迎信息
        System.out.println("欢迎来到餐厅!");
        
        // 获取用户输入
        System.out.print("请输入您要点的菜品:");
        String dish = input.nextLine();
        
        System.out.print("请输入您需要的餐具(筷子/勺子):");
        String utensils = input.nextLine();
        
        // 打印用户输入
        System.out.println("您点的菜品是:" + dish);
        System.out.println("您需要的餐具是:" + utensils);
        
        // 做饭
        cook(dish);
        
        // 洗碗
        wash(utensils);
        
        // 输出结束信息
        System.out.println("餐点准备好了,开始用餐吧!");
    }
    
    // 做饭
    public static void cook(String dish) {
        System.out.println("开始做" + dish + "...");
        System.out.println("做好了!");
    }
    
    // 洗碗
    public static void wash(String utensils) {
        System.out.println("开始洗" + utensils + "...");
        System.out.println("洗好了!");
    }
}

在上述这个栗子中:

首先输出欢迎来到餐厅的欢迎信息,然后需要获取用户输入的菜品和餐具信息,打印出来之后,调用cook()方法来做饭和调用wash()方法来洗碗,最后输出一切准备结束的信息:"餐点准备好了,开始用餐吧!"表示可以用餐了,整个执行过程就非常的流程化。

通过对比,面向过程的编程它的特点就是:

强调程序执行的顺序和流程,不过面向过程编程最大的优点就是代码确实非常简单易懂,非常适合解决小规模的问题,但是他的缺点就是难以应对一些复杂的问题,代码的可读性差,不易维护和扩展。

相比较之下,面向对象编程更强调的是面向对象的设计,所有的事情都让指定的对象去做,通过定义类和对象,将问题分解成更小的问题,并通过将对象之间的交互解决问题。就像上述的面向对象编程中它人和餐厅抽象为对象,将去吃饭的问题看作是由对象组成的。

同时我们也发现面向对象的编程就是将复杂的问题抽象成简单的类,从而降低了程序的复杂程度,也提高了代码的可读性和可维护性,但是面向对象编程通常需要大量的类和对象来实现程序功能,这会导致代码的复杂度增加,从而降低代码的可读性和可维护性。

四. 总结

最后给大家做一下梳理吧:

面向过程的优点和缺点是什么?

1.  优点:

● 特别易于理解和学习,面向过程编程非常直观和简单,因为它模拟了现实世界中的过程和操作。初学者可以很容易地理解和学习这种编程方式。

● 面向过程编程的代码非常简单易懂,代码的结构相对简单,没有复杂的层次结构,因此易于阅读和理解。

2.  缺点:

● 面向过程编程缺乏高层次的抽象,因此当需要增加新的功能时,代码往往需要被完全重构。

● 面向过程编程难以处理大规模项目,因为代码的结构很难管理和维护。此外,面向过程编程不利于代码复用和模块化,这使得大规模项目的开发更加困难。

面向对象的优点和缺点是什么?

1.  优点:

● 面向对象编程可以将复杂的问题抽象成简单的类,从而降低程序的复杂度,提高代码的可读性和可维护性。

● 继承和多态是面向对象编程的两个重要特性。继承可以让子类继承父类的属性和方法,从而减少代码的重复性;多态则可以让不同的对象对同一消息作出不同的响应,提高了程序的灵活性和可扩展性。

● 面向对象编程将数据和方法封装在类中,只对外部提供必要的接口,从而增强了程序的安全性和稳定性。

2.  缺点:

● 面向对象编程通常需要大量的类和对象来实现程序的功能,这会导致代码复杂度的增加,降低代码的可读性和可维护性。

● 面向对象编程需要频繁地创建和销毁对象,这会导致一定的性能损失。

● 面向对象编程需要掌握一定的面向对象思想和编程技巧,需要一定的学习成本。

面向对象和面向过程的区别是什么?

1.  面向过程编程是一种基于程序和函数的编程范式,它强调程序的执行顺序和数据的处理过程,通过将程序分解成一系列函数来完成任务。在面向过程编程中,数据和函数是分开的,数据被看作是被函数处理的对象。因此,面向过程编程更加注重解决问题的过程,而不是问题的对象。

2.  面向对象编程是一种以对象为中心的编程范式,它将数据和函数作为一个整体来处理,这些数据和函数被封装在一个对象中,通过对象之间的交互来完成任务。在面向对象编程中,对象被看作是问题的解决方案,因此,面向对象编程更加注重问题的对象,而不是解决问题的过程。

3.  面向对象编程中有三个基本概念:封装、继承、多态。

● 封装是指将数据和函数组合在一起形成一个对象,并将其隐藏在对象内部,只提供公共接口给外部使用。

● 继承是指从一个已有的类中派生出一个新类,新类可以使用已有类的属性和方法,同时也可以添加自己的属性和方法。

● 多态是指不同对象对同一消息做出不同的响应,即同一方法可以在不同的对象中具有不同的行为。

总而言之,面向过程编程更加注重程序的执行过程,而面向对象编程更加注重的是对象和对象之间的交互。

标签:String,对象,编程,面向对象,面向,面向对象编程,通俗,举例说明
From: https://blog.51cto.com/u_15739596/6400769

相关文章

  • Java面向对象
    Java面向对象1、基本概念面向对象思想物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。面向对象适合处理复杂的问题,适合处理需要多人协作的问题!面向对象编程(Object-OrentedProgramm......
  • 第十一单元 面向对象三:继承与多态
    假设老师类设计如下:class老师类{属性:姓名,性别,生日,工资行为:吃饭,跑步,教学}学生类设计如下:class老师类{属性:姓名,性别,生日,班级行为:吃饭,跑步,学习}我们秉承着,让最简洁的代码,实现最最强大的功能原则,能否让上述案例中的重复代码进行优化呢?我们能......
  • 第十单元 面向对象二:静态类与静态成员
    前言我们天天都在使用Console.WriteLine("Helloworld");​Console.ReadLine("");​Arrays.Sort()为什么Console类调用方法不需要实例化而可以直接调用呢?我们可以查看Console的源码发现Console类定义如下:publicstaticclassConsole{//...}......
  • 第九单元 面向对象一:类与对象
    假设,班级里40位同学,我们用程序保存40位学生的信息:学号,姓名,性别,生日,身份证号。如果是你,你会怎么实现?小菜同学拿到这个题,奋书疾笔,马上写出如下代码:ArrayListlist=newArrayList();​stringstuNo1="10001";stringname1="张三";stringsex="男";Datetimebirthday1=D......
  • 面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
    参数多态参数多态是指在面向对象编程中,方法的参数可以接受不同类型的对象,并根据实际传递的对象类型来执行不同的操作。它是多态的一种应用形式,通过参数的多态性,可以实现灵活的代码设计和重用。使用场景:当方法需要操作的对象类型不确定时,可以使用多态来接受不同类型的对象,减少......
  • 通俗直观介绍ChatGPT背后的大语言模型理论知识
    “AI的iPhone时刻到来了”。非算法岗位的研发同学'被迫'学习AI,产品岗位的同学希望了解AI。但是,很多自媒体文章要么太严谨、科学,让非科班出身的同学读不懂;要么,写成了科幻文章,很多结论都没有充分的逻辑支撑,是‘滑坡推理’的产物。这篇文章从底层讲起,却不引入太多概念,特别是数......
  • 通俗直观介绍ChatGPT背后的大语言模型理论知识
    “AI的iPhone时刻到来了”。非算法岗位的研发同学'被迫'学习AI,产品岗位的同学希望了解AI。但是,很多自媒体文章要么太严谨、科学,让非科班出身的同学读不懂;要么,写成了科幻文章,很多结论都没有充分的逻辑支撑,是‘滑坡推理’的产物。这篇文章从底层讲起,却不引入太多概念,特别是数......
  • 通俗直观介绍ChatGPT背后的大语言模型理论知识
    “AI的iPhone时刻到来了”。非算法岗位的研发同学'被迫'学习AI,产品岗位的同学希望了解AI。但是,很多自媒体文章要么太严谨、科学,让非科班出身的同学读不懂;要么,写成了科幻文章,很多结论都没有充分的逻辑支撑,是‘滑坡推理’的产物。这篇文章从底层讲起,却不引入太多概念,特别是数......
  • 用费曼学习法教小姐姐学习Java面向对象
    大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员......
  • Java面向对象(高级)
    1、类变量类变量是被类的所有实例共享的。类变量具体放的位置在哪?在内存中的那个区域,这和jdk的版本是有关的静态变量在类加载的时候就生成了,即使没有创建类实例也能访问,当然通过实例来实现类变量定义访问修饰符static类型变量名2、类方法1、只需要在普通方法前面加上......