什么是面向对象

本文介绍了面向过程和面向对象编程的概念,强调了两者在程序设计中的优缺点和应用场景。面向过程注重步骤,面向对象以对象为中心,具有封装、继承和多态性。文章通过蛋炒饭与盖浇饭的比喻,形象地解释了OP与OO的区别,并指出面向对象的高可维护性。此外,文章还阐述了类、对象、属性和方法等面向对象的基本概念,以及封装、继承和多态的特性。

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


前言

本文主要帮助大家理解,到底什么是面向对象。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本概念:OP和OO

在这里插入图片描述

1.面向过程(Procedure Oriented):

(1) 概念:以过程为中心的编程思想,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

(2) 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

(3) 缺点:只能用来解决一个问题,代码牵一发而动全身。

(4) 应用:用于基本很少改变的场景,著名的例子有Linux内核、git、以及Apache HTTP Server等。

2. 面向对象(Object Oriented):

(1) 概念:程序设计的核心是对象,面向对象的方法主要是把事物给对象化,对象包括属性与方法。

(2) 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

(3) 缺点:可控性差,无法像面向过程的程序设计一样可以精准的预测问题的处理流程与结果。

(4) 应用:需求经常变化的软件,一般需求的变化都集中在用户层,如互联网应用、企业内部软件以及游戏等。

网上发现了一篇文章,说了一下 OP 与 OO 的不同,并且打了一个比喻,通俗易懂。有人
这么形容 OP 和 OO 的不同:用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写
出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一
碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切
的。蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯
定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧
肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。蛋炒
饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办
法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨
掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。到底是蛋炒
饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场
景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的
话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。盖浇饭
的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。
用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”"
饭"搅和在一起,想换"蛋""饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。
软件工程追求的目标之一就是可维护性,可维护性主要表现在 3 个方面:可理解性、可测试性
和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

对于编程语言来说,基于 C 语言的编程是面向过程的,C++只能说一半面向过程一半面向
对象,java 语言就是一门完全面向对象的编程语言。当然,除了 java 语言之外,还有很多都是完全面向对象的编程语言,例如:C#、Python 等。

二、面向对象的相关名词理解

  1. 类:类是一个模板,它描述一类对象的行为和状态。

  2. 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

  3. 属性:类中所定义的变量

  4. 方法:类中所定义的函数

  5. 实例化:通过类创建对象的过程

  6. 总结:对象的抽象是类,类的具体化就是对象;也可以说类的实例化是对象,对象是类的实例。

三、面向对象的三大特征:

封装:我们家里的电视机,里面有各种电路板,和电子元器件,这些电路板和元器件都被装到了电视机的壳里,相当于被封装起来了,对外提供一个开关按钮,我们一按按钮就可以打开电视。电视机生产厂商不允许我们操作电视机内部的东西,而提供给我们一个开关按钮,我们可以通过这个按钮来操作电视机壳里面的东西,这就是封装。

对应到程序代码里面,封装可以体现在很多方面,比如方法就是一个封装,在方法中有很多代码,我们只需要通过方法名就可以调用这些代码,相当于将这些代码封装到了方法中。

属性也是体现封装的一个典型例子,我们可以给类中的变量一个私有的访问修饰符,相当于把这个变量封装起来,在类的外部就没法直接访问它,通过提供 get和set方法就可以完成对这个变量的存取操作。

代码实例

public class Student {
     private String name;

     public String getName() {
            return name;
     }

     public void setName(String name) {
            this.name = name;
     }
}

继承:程序中的继承和我们生活中的继承不同,程序中的继承 指的是一个类继承了另一个类,就具有了该类所有非私有的属性和方法。就可以像调用自己的属性和方法一样去调用。被继承的类叫父类,继承父类的类叫子类。

继承的相关特性
① B类继承 A类,则称 A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、
派生类、扩展类。

② java 中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是 java 体
现简单性的一点,换句话说,java 中不允许这样写代码:class B extends A,C{ }。

③ 虽然 java 中不支持多继承,但有的时候会产生间接继承的效果,例如:class C
extends B,class B extends A,也就是说,C 直接继承 B,其实 C 还间接继承 A。

④ java 中规定,子类继承父类,除构造方法和被 private 修饰的数据不能继承外,剩
下都可以继承。

⑤ java 中的类没有显示的继承任何类,则默认继承 Object 类,Object 类是 java 语言
提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object 类型中所有的特征。

⑥ 继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它们之间的
耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类。

多态:多态指的是一个对象可以体现出多种形态,比如猫类继承了动物类,那么猫可以体现出两种形态,一种是猫,一种是动物。具体到代码里面通常指的是将子类对象赋给父类类型,在子类里面重写父类里的方法,调用方法的时候执行的是子类里面的方法。在这里,当父类类型的变量被赋子类类型不同时,调用不同子类对象的方法,所以多态也可以说明为:对于同一个方法调用产生不同的结果。

Java语言中含有方法重载与对象多态两种形式的多态:

方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech_Jia_Hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值