扫码关注官方订阅号
发现很多面试官都喜欢问这个问题(我是学生),然而每次觉得自己在这个问题上都答得不尽人意。我的回答往往是
它的设计上的特点是:继承、封装、多态;
从具象到抽象。属性变成变量,行为变成方法;
然而面试官似乎不是很满意,不知各路大神有没有相对优雅的回答?
欢迎选择我的课程,让我们一起见证您的进步~~
先回答是一种编程范式。
然后把你说的三个特性的具体描述说一下,比如:
继承:可以使子类复用父类公开的变量、方法;
封装:屏蔽一系列的细节。使外部调用时只要知道这个方法的存在;
多态:父类的方法继承的到子类以后可以有不同的实现方式;
然后你可以说一说面向对象的优点和缺点,那么一件事情是没有绝对的优点和缺点的,需要一个对比。故此,你得说一说面向过程的编程思想。
回来丢文章了
看了lz的问题被踩了,我在社区里看了一下,的确有相关的答案。我的文章算是一个小补充,如果有问题望各位指出。
面向对象的思想
再用我工作中的实例回答补充下,前段时间要做一个很简单的功能,点赞,确实是一个很简单的功能,但点赞的功能不只是一次,用户可以给其他的评论点赞,可以给文章点赞,可以给问题点赞等等,而且点赞之后可能触发一系列的事件(通知相关用户等),最初我想的有三种写法
点赞
// 1.文章被用户点赞 $article->votedBy($user); // 2.用户给某篇文章点赞 $user->voteArticle($article); // 3.用户伸出大拇指给某篇文章点赞 $user->thumbUp()->voteToArticle($article); //$user->thumbUp()->voteToDiscuss($discuss);
最后我用了第三个写法,具体怎么实现,在你伸出大拇指的那一刻你就知道了。
这真的是个有趣的问题,哈哈。当然每个人都会有不同的理解,毕竟面向对象这个概念也是炒作起来的。
我的理解包括两个方面:
一个是面向对象设计;
一个是面向对象编程。
面向对象设计的核心思想是模块化,而面向对象编程的核心思想是面向接口,面向对象编程还有一个亲戚叫基于对象编程或者叫原型编程(JavaScript就是)。所以说面向对象编程一般是需要语言级别支持的,就像你上面说的封装、继承和多态什么的。
面向对象概念比较火的时候,人们常说软件复用,继承是软件复用的直接体现。但是后来人们发现,应该更多的使用组合而不是继承,接着面向接口编程就火了。
扯得有点远了,到此打住吧。
实现项目时,需要将业务抽象成代码,这个抽象过程就是编程范式,面向对象就是其中一种。类似的还有面向过程,函数式编程。
面向对象的特点是继承, 多态, 封装。
继承
多态
封装
然后面试官就可以开始问继承, 多态, 封装了。
完美!~~~
最好知道下什么是面向过程,函数式编程,那就更好了。
万物皆对象。
object-oriented
everything is object
一定用例子来比如 动物-》furu动物-》 人, 狮子, 老虎
加上多态,比如都会叫
继承,比如furu动物都是胎生的,等等
self-contained, 如果他不懂, 你就可以直接走人了, 这个面试官太菜!
js说:万物皆对象,对象也是对象--没毛病
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
先回答是一种编程范式。
然后把你说的三个特性的具体描述说一下,比如:
继承:可以使子类复用父类公开的变量、方法;
封装:屏蔽一系列的细节。使外部调用时只要知道这个方法的存在;
多态:父类的方法继承的到子类以后可以有不同的实现方式;
然后你可以说一说面向对象的优点和缺点,那么一件事情是没有绝对的优点和缺点的,需要一个对比。故此,你得说一说面向过程的编程思想。
回来丢文章了
看了lz的问题被踩了,我在社区里看了一下,的确有相关的答案。我的文章算是一个小补充,如果有问题望各位指出。
面向对象的思想
再用我工作中的实例回答补充下,前段时间要做一个很简单的功能,
点赞,确实是一个很简单的功能,但点赞的功能不只是一次,用户可以给其他的评论点赞,可以给文章点赞,可以给问题点赞等等,而且点赞之后可能触发一系列的事件(通知相关用户等),最初我想的有三种写法最后我用了第三个写法,具体怎么实现,在你伸出大拇指的那一刻你就知道了。
这真的是个有趣的问题,哈哈。当然每个人都会有不同的理解,毕竟面向对象这个概念也是炒作起来的。
我的理解包括两个方面:
一个是面向对象设计;
一个是面向对象编程。
面向对象设计的核心思想是模块化,而面向对象编程的核心思想是面向接口,面向对象编程还有一个亲戚叫基于对象编程或者叫原型编程(JavaScript就是)。所以说面向对象编程一般是需要语言级别支持的,就像你上面说的封装、继承和多态什么的。
面向对象概念比较火的时候,人们常说软件复用,继承是软件复用的直接体现。但是后来人们发现,应该更多的使用组合而不是继承,接着面向接口编程就火了。
扯得有点远了,到此打住吧。
实现项目时,需要将业务抽象成代码,这个抽象过程就是编程范式,面向对象就是其中一种。类似的还有面向过程,函数式编程。
面向对象的特点是
继承,多态,封装。然后面试官就可以开始问
继承,多态,封装了。完美!~~~
万物皆对象。
object-oriented
everything is object
一定用例子来
比如 动物-》furu动物-》 人, 狮子, 老虎
加上多态,比如都会叫
继承,比如furu动物都是胎生的,等等
self-contained, 如果他不懂, 你就可以直接走人了, 这个面试官太菜!
js说:万物皆对象,对象也是对象--没毛病