浅析面向过程与面向对象

在面试时经常会被问到面向过程和面向对象有什么区别,虽然都是编程的一种思想,但是他们的侧重点不同,我们从以下几个方面进行简单总结。

历史

面向过程的编程语言有汇编语言、C语言。C语言,是1972年贝尔实验室的 D.M.Ritchie 在B语言的基础上设计出的一种新的语言。他们的特点就是太底层了,当你在使用面向过程的编程语言编写代码的时候,你就需要把思维转换成机器的思维,时刻要考虑开辟多大的内存,存储多大的数据,数据在使用完毕的后什么时间释放,这样写代码学习成本太高,开发效率低,不适合编程的推广与应用。

所以渐渐的就发展出来了更友好地面向对象编程语言,面向对象编程思想是很早就提出来早在1967年的时候,在挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,这种语言被认为是第一个面向对象语言。在20世纪80年代初期美国AT&T贝尔实验室的本贾尼.斯特劳斯特卢普(Bjarne Stroustrup)博士发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。目前主流的面向对象编程语言有:Java、C++、Object-C、 JavaScript、Python、Go等,降低了学习成本,易于推广,极大的激发了大家的学习热情, 可以让人们更加专注于如何使用编程语言实现想要的功能。

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物,是一种高级的编程思想。

对应于软件开发的过程,面向对象OO衍生出3个概念:OOA、OOD和OOP。采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称为OOD,采用面向对象进行编码的方式称为OOP。面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。

编程思想

案例:有一辆车,时速100km/h,行驶在长1000km的跨海大桥上,求多久能跑完?

面向过程编程思想:只关心数学逻辑。

        var hours = 1000 / 100;
        alert(hours);//10

面向对象编程思想:将生活逻辑映射到我们的程序里。

  1. 找出题目实体,抽象成对象的概念。

  2. 分析实体属性和功能,给对象赋一些属性和方法。

  3. 让实体相互作用得出结果,让每个对象去执行自己的方法。

        var car = {
            speed: 100,
            run:function(road){
                return road.length / this.speed;
            }
        }
        var kuahaidaqiao = {
            length:1000
        }
        var hours = car.run(kuahaidaqiao);
        alert(hours);//10

面向过程(Procedure Oriented):看名字它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数)。然后按照一定的顺序,执行完这些方法(每个方法看作一个个过程),等方法执行完了,事情就搞定了。

面向对象(Object Oriented):看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

语法

JavaScript是一种基于对象的语言,但是它又不是一种真正的面向对象编程语言,因为它没有类(class)。类是具有一类相同特征事物的抽象概念。 在JS中一切皆对象,对象是具体的某一个实例,唯一的个体。在ECMA6语法中中新增了类这个概念。

对象的概念

在面向对象的编程思想中就是以属性和行为的方式去分析同一类事物,将其共有特性和行为的抽象出来,并封闭起来对待,而且我们封闭的同一类事物的属性和行为是互相关联的,有着内在的联系。

【注】对象既能存储属性又能存储函数。

【注】我们声明的变量和函数对比对象的属性和方法,使用方式相同,唯一的区别就是使用对象的属性和方法时前面需要加对象名称,变量是自由的,属性是属于对象的。

  1. 声明对象的三种方式

         var obj = new Object(); //通过new对象
         var obj = Object(); //声明new
         var obj = {}; //直接通过对象常量声明
    
  2. 给对象添加属性

         obj.name = "钢铁侠";
         obj["age"] = 40; //使用中括号方式与通过.的方式添加属性等价 
         obj.sex = "男";
    
  3. 给对象添加方法

         obj.showName = function(){
             alert(this.name); //钢铁侠
         }
    
  4. 使用对象的属性和方法

         alert(obj.age); //40
         obj.showName(); //40
    
  5. 删除其中一个属性或者函数

         delete obj.age;
         delete obj.showName;
         alert(obj.age); //undefined
         obj.showName(); //报错
    

数据结构

基本数据类型:存储单个值

数组:处理批量的数据

对象:既能存储数据,又能存储函数

面向过程是围绕功能进行的,为每一个功能写一个函数,需要考虑其中的每一个细节,以步骤划分,可以这么比喻

面向过程的程序=算法+数据结构

而面向对象则像是组装,先确定一个系统是由哪些对象组成,再分别去设计这些对象,将它们像零件一样组装起来形成有完整功能的系统,以功能划分,相当于

对象=算法+数据结构
面向对象的程序=N个对象+控制信息

总结

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展

面向对象

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

缺点:性能比面向过程低

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

推荐阅读更多精彩内容