1024(程序猿节安利)什么才是面向对象编程(OOP)


前言

不知不觉,又到了一年一度的1024程序员节,在今天的这个特殊的日子里,小Bug祝愿广大“程序猿(媛)”:1024,bug退散,发量惊人。趁着节日的快乐,向大家安利一波什么才是面向对象编程。

在这里插入图片描述

面向对象(Object Oriented Programming)

关于面向对象听别人说的最多的是new个对象,其实并不知道什么是对象。以为对象就是一个class(类),并不觉得有什么特殊。直到很久之后,面试官问到什么是OOP,嘴巴都是一个大O,OOP?what?面试官不耐烦的说:就是面向对象编程。我说:面向对象就是new一个对象,class类,就是一切以class类为载体,去编程,去面对。面试官: go out ! now!
在这里插入图片描述

滚回来的我赶紧看看什么是OOP(Object Oriented Programming),原来就是面向对象的编程啊,还有OOD(Object Oriented Design)面向对象的设计,OOA(Object Oriented Analysis)面向对象的分析。那什么是面向对象呢?要想了解这个问题我们要先了解面向过程,这样对比我们就好理解了。

很早以前的编程是面向过程的,比如实现一个算术运算(1+1=2),通过运算很简单就实现了,后来随着时代的进步,我们不满足于现在算法了,因为问题越来越复杂不像1+1那么简单了。比如一个学校老师的所有数据分析,就有了对象的概念,一切事物皆对象。将现实事物及关系抽象出来成为类,通过继承、实现、组合的方式把一切事物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。
在这里插入图片描述

面向过程、面向对象的概念

面向过程——步骤化
面向过程就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可。(面向过程强调的是做一个事情的过程)
面向对象——行为化
面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为。(面向对象强调的是抽象的概念,把公共的一些对象抽象为类)

举个很简单的例子:
1、今天程序猿节日,你想吃红烧鱼犒劳犒劳自己,然后你就要自己去买材料:鲤鱼(鱼的话看自己喜好,哈哈),葱、姜、蒜等各种调料,腌制,油锅炸,等等一系列操作,最后盛到盘子里。

2、去楼下饭店,张口喊一声:老板、来条红烧鱼。

到这里聪明的小伙伴已经看出来了,没错,1就是面向过程编程,2就是面向对象过程。

而面向对象有什么优势呢?首先你不需要红烧鱼怎么做的,从而降低了耦合性。如果你突然想起来医生说你鱼肉过敏(mmp),那就换个铁锅炖大鹅吧。对于1来说,你还要自己去重新买菜,买调料什么的,然后再把红烧鱼给浪费了。但是对于2来说,太容易了,再次大喊一声:老板,红烧鱼不要了,换成铁锅炖大鹅。从而提高了可维护性。总的来说:就是降低耦合性提高可维护性!!

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

在这里插入图片描述

面向对象的三大特征五项原则

面向对象的三大特性:

**封装:**隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
**继承:**子类继承父类,子类调用父类的属性和方法。
**多态:**调用同样的方法,传递的参数类型或者是参数个数不同,会返回不同的结果。

面向对象的五大基本原则:

单一职责原则SRP(Single Responsibility Principle SRP): 一个类文件中只存在一个类,一个类只做一件事情。
接口隔离原则ISP(the Interface Segregation Principle ISP): 尽量使用多个小的接口代替大的接口。
开放封闭原则OCP(Open-Close Principle OCP): 对于扩展是开放的 对于修改是封闭的。
里氏替换原则(the Liskov Substitution Principle LSP): 子类能够代替父类出现的位置。
依赖倒转原则DIP(the Dependency Inversion Principle DIP): 高层模块不应该依赖底层模块,底层模块应该依赖高层模块的输入。

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

面向过程:
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展。
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 。
缺点:性能比面向过程差。

最后

抽象会使复杂的问题更加简单化。从以前面向过程的执行者,变成了张张嘴的指挥者。面向对象更符合人类的思维,面向过程则是机器的思想。

开个玩笑的说我只会面向对象编程。为什么?(单纯的是因为我不会做红烧鱼啊 TT),好了不说了,作者去学习红烧鱼的做法了 哈哈哈哈


文章:以上就是面向对象编程(OOP),感谢各位大佬的阅读、点赞、评论,希望可以帮助到你们。我是 敲码农的小Bug 我们下期见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值