在面试时经常会被问到面向过程和面向对象有什么区别,虽然都是编程的一种思想,但是他们的侧重点不同,我们从以下几个方面进行简单总结。
面向过程的编程语言有汇编语言、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
面向对象编程思想:将生活逻辑映射到我们的程序里。
找出题目实体,抽象成对象的概念。
分析实体属性和功能,给对象赋一些属性和方法。
让实体相互作用得出结果,让每个对象去执行自己的方法。
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语法中中新增了类这个概念。
对象的概念
在面向对象的编程思想中就是以属性和行为的方式去分析同一类事物,将其共有特性和行为的抽象出来,并封闭起来对待,而且我们封闭的同一类事物的属性和行为是互相关联的,有着内在的联系。
【注】对象既能存储属性又能存储函数。
【注】我们声明的变量和函数对比对象的属性和方法,使用方式相同,唯一的区别就是使用对象的属性和方法时前面需要加对象名称,变量是自由的,属性是属于对象的。
声明对象的三种方式
var obj = new Object(); //通过new对象
var obj = Object(); //声明new
var obj = {}; //直接通过对象常量声明
给对象添加属性
obj.name = "钢铁侠";
obj["age"] = 40; //使用中括号方式与通过.的方式添加属性等价
obj.sex = "男";
给对象添加方法
obj.showName = function(){
alert(this.name); //钢铁侠
}
使用对象的属性和方法
alert(obj.age); //40
obj.showName(); //40
删除其中一个属性或者函数
delete obj.age;
delete obj.showName;
alert(obj.age); //undefined
obj.showName(); //报错
数据结构
基本数据类型:存储单个值
数组:处理批量的数据
对象:既能存储数据,又能存储函数
面向过程是围绕功能进行的,为每一个功能写一个函数,需要考虑其中的每一个细节,以步骤划分,可以这么比喻
面向过程的程序=算法+数据结构
而面向对象则像是组装,先确定一个系统是由哪些对象组成,再分别去设计这些对象,将它们像零件一样组装起来形成有完整功能的系统,以功能划分,相当于
对象=算法+数据结构
面向对象的程序=N个对象+控制信息
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低
什么是面向对象编程思想,为什么要用面向对象思想。js中的面向对象思想和其他静态语言相比有什么不同。js中prototype,constructor,__proto__这些都是什么鬼?
面向对象设计的6个设计原则:1.单一职责原则,2.里氏替换原则,3.依赖倒置原则,4.接口隔离原则,5.迪米特法则,6.开闭原则
面向对象方法是一种运用对象,类,继承,封装,聚合,关联,消息,多态等概念和原则来构造软件系统的开发思想(方法)。
在ES5中,我们经常使用方法或者对象去模拟类的使用,并基于原型实现继承,虽然可以实现功能,但是代码并不优雅,很多人还是倾向于用 class 来组织代码,很多类库、框架创造了自己的 API 来实现 class 的功能。
代码封装可以避免代码冗余,避免去哪聚变量污染,本质就是把公共的代码抽离出来在需要的地方随时调用在继承中也有体现
在面向对象的设计中,系统是由对象和让对象状态发生改变的方法,让对象到达另一种状态来达到目的的。当系统渐渐变大,对象渐渐变多,每个对象间的纠缠越来越多的时候一个对象的状态受到多个控制信号的机会就越来越多
我们正在审查一些代码,并开始讨论为什么我们走捷径,不遵循常识原则。虽然每个人在对待关于类应该如何基于功能上下文来构建的问题上都有自己的智慧,但仍然有一些基本原则值得我们在设计类的时候牢牢记住
JavaScript 是一个强大的面向对象编程语言,但是,并不像传统的编程语言,它采用一个以原型为基础的OOP模型,致使它的语法让大多数开发人员看不懂。另外,JavaScript 也把函数作为首要的对象,这可能会给不够熟悉这门语言的开发人员造成更大的困惑
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!