2021-12-05面向对象与面向过程总结

面向对象

面向对象编程(OOP)

面向对象编程:是一种编程范式,它以类和对象作为组织代码的单元,以封装、抽象、继承、多态四大特性作为代码设计和实现的基石。注意:面向对象编程更加关注组织代码的单元是否为类或对象的方式,即使编写的代码中没有全部引用四大特性也是面试对象编程。

面向对象编程语言(OOPL)

面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。

面向对象分析(OOA)、设计(OOD)

面向对象分析的目的是搞清楚做什么;面向对象设计是搞清楚怎么做;面向对象编程是将两者的结果(类的设计)翻译成代码,三种正好对应软件开发的三个阶段;

四大特性及其作用

封装

目的:信息隐藏、数据保护。

要求:编程语言提供权限访问控制语法来支持,如public 、private等关键词。

意义:一方面:保护数据不被任意修改,提高了代码的可维护性;另一方面:仅暴露有限的必要接口,提高了代码的易用性

抽象

目的:隐藏方法细节,使调用者关注方法的功能。

要求:抽象通过接口类或者抽象类来实现,不需要特殊的语法机制来支持。

意义:一方面是提高代码的可扩展性、维护性,修改实现不需要改变定义,减少代码的改动范围;另一方面,它也是处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。

继承

定义:表示 is-a 关系,分为单继承和多继承;Java为单继承。

要求:编程语言需要指出继承的特性,如Java 的 ”extends“。

意义:解决代码复用性

多态

定义:多态是指子类替换父类,调用子类的方法实现。

要求:编程语言需要具备继承和抽象的语法支持,如Java中的继承/接口 + 方法重写的组合。

意义:提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。

面向过程

面向过程编程

面向过程编程:相较于面向对象编程以类为基本的编程单元,面向过程是以方法作为编程的基本单元,她最大的特点是数据和方法分离,且不支持丰富的面向对象编程特性(封装、继承、多态)。

面向对象和面向过程比较

面向对象编程相较于面向过程编程来说主要有三大优势:

  1. 支持丰富的面向对象编程特性,利用这些特性编写的代码,更易复用、扩展和维护。
  2. 对于大规模复杂程序的开发,程序的处理流程并非单一主线,而是复杂的网状结构,因为面向对象编程是基于类作为编程单元进行编程,所以更适用这种复杂类型的开发。
  3. 从编程语言和机器打交道的情况来看,面向对象编程比面向过程编程更加高级、更加人性化。

面向过程编程相较于面向对象编程来说主要的优势:从和机器适配的情况来看,面向过程编程相较于面向对象编程拥有更好的适配性,所以相应的执行效率更高。

面向对象编程中哪些设计实际上是面向过程的

  1. 滥用getter、setter方法 -- 违反了封装特性

    getter、setter方法的设计初衷是:对类属性进行保护,通过暴露有限的getter、setter方法作为外面客户访问入口;

    所以在设计类的时候,除非真的需要否则尽量不要给属性定义setter方法;属性如果属是容器类,定义getter方法的时候也需要防范容器内部数据被修改的风险。

    public class ShoppingCart {
        private int itemsCount;
        private double totalPrice;
        private List<ShoppingCartItem> items = new ArrayList<ShoppingCartItem>();
    
        public List<ShoppingCartItem> getItems() {
            return items;
        }
    
     
        public static void main(String[] args) {
            ShoppingCart cart = new ShoppingCart();
            //外部代码还是能修改 items 中的数据
            cart.getItems().clear();
        }
    }
    
    public class ShoppingCartItem{
    
    }
    
  1. Utils类、Constants类设计问题

    Constants类、Utils类作用:解决代码复用问题;对于这两类的设计,我们尽量做到职责单一,尽量定义一下细化的小类,如DataSourceConstants类,不要定义大而全的类(定义大而全的类容易造成代码的维护性下降、编译时间过长、代码开发易冲突和代码复用性问题),除此之外,如果能将这些类中的属性和方法划归到业务类最好不过,这样可以极大提供类的内聚性和代码的复用性。

比如:如果两个不相干的类用引用了相同的一段功能逻辑,这时候使用继承就无法解决这个问题,这时候就可以将这段功能逻辑定义到Utils类中,从中我们也可以看出只包含静态方法不包含任何属性的Utils类是面向过程编程风格,同时这里也要说明一点在面向对象编程过程中并不是要杜绝面向过程编程,如果能解决我们的实际编码问题就可以直接使用的,使用他们的标准就是:如果我们常用的面向对象4大特性无法很好的解决编程过程中遇到的问题,如不相干类引用相同代码或者使用共享变量等场景,就可以直接使用面向过程进行编程。

  1. 基于贫血模型(MVC)的开发模式

    MVC这种数据和方法分类的开发模式就是面向过程编程风格,但是因为MVC开发模式对应新手开发人员具有上手快,逻辑清晰等特点,所以得以大量使用。

面向对象编程为什么容易写出面向过程的代码,包含了2点原因?

  • 面向过程编程更符合人们流程化的思维方式,而面向对象编程是一种自下而上的思考方式,它是将任务拆分为一个个小的模块(类),设计类之间的最后按照流程将类组装起来完成任务。
  • 面向对象编程比面向过程编程更难一些,面向对象编程需要考虑如何设置合适的属性和方法到类中,类之间的关系、交互如何设计,对开发人员来说需要一定的设计经验和技巧。

总结

无论是面向对象编程还是面向过程编程,我们的目的都是写出易维护、易扩展、易读和易复用的高质量代码,只要在开发过程避免面向过程编程的弊端,在掌控范围内使用,大可不用担心在面向对象编程中写出面向过程编程的代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容