OO中,先有对象仍是先有类?

就是问,在面向对象思想里,先有对象仍是先有类,乍一看和先有鸡蛋仍是先有鸡是一类问题,其实否则!这个问题,在lz考研复试的时候被面试官问过,如出一辙,现在又在一个笔试题里看到了相似的题目,眨一下,有人会说,没有类,哪里来对象呢?其实否则,这个问题很经典,考的就是oo思想和软件工程的意识。c++

我经历以后的收获:面对问题,首先分析提问的角度,看清问题程序员

这样问,显然对方是在考察被考者,oo思想掌握程度和软件工程的意识,都说在OO中,换句话就是在面向对象思想里(包含各行各业)……天然不须要在乱想什么内存角度,计算机角度,底层机制,甚至汇编都来,没意义……这样想的思路自己就错的!面试

提问者考的不是这个,并且不是每个面试官或者老师提问都要一字一字的说明白,当时时间有限,思考时间也有限,必须快速做答,给出结论。他们没这个义务和必要,选拔性质嘛!就好比孙悟空能理解菩提老祖,打三下,扭头看月亮的含义,别人理解不了,还觉得孙悟空那样想是傻x呢……算法

故咱们须要必定的分析提问和找准角度的技能!既然是去求职,或者被考察,天然要学会如何搔到对方的痒处,lz记得,当初这个问题,本科科班出身的,没回答对的,几乎都被刷了……本科阶段去面试过的那家公司,一样的问题,回答者就和评论同样,千奇百怪,振振有词者很多。可是少有说到点子上的,或者说少有骚到了面试官痒处的人。包括lz,当初回答的理由也不让人满意。编程

问题自己来看:这个问题自己不难数据结构

属于知道就是知道,不知道就是不知道。属于看清问题,具备oo思想和软件工程意识就能答对,看不清问题就乱说一气的问题类型。架构

评论说:模块化

这个问题很无聊,or lz遇到的问这个问题的人是傻x ,or 这是没有解的题,非要标准答案,属于强加观点给别人,or lz是sb……唉,看了看删除了一些出口就是脏字的非人类评论。函数

我我的认为,不能有问题上来就想到code,若是不是逆向和硬件,那么对于应用程序开发者,一上来就思考计算机的底层,并非好事。故有人抬杠,一直说没有类,怎么new对象的反问来反驳……oop

lz在那以前,没有思考提问问题角度 or 回答思路的习惯。题目看不懂,老是抱怨对方为何不说明白了,问题角度不一样,答案不一样,老是束手无策,不知回答哪一个。

后来见到了实验室的老板,包括一些公司的部门老大,真的,当你周围存在一些竞争对手,且水平有的比你还高的时候,回答人家的问题,必需要思考对方提问的角度和回答的思路,不然死的很惨。不论什么样的问题,当lz踌躇,犹豫,骂提问者脑残,傻x的时候,总有人比你快,先你一步,得出对方满意的答案,不服不行,这就是能力!lz吃过亏。

确实是由于问题角度不一样,因此答案不一样。好比一个很无聊可是能说明问题的例子,若是是面试小学数学老师,问你1+1=多少,天然是2,面试哲学老师,答案就不必定是2,面试文艺类的老师职位,答案更可能千奇百怪。

可是咱们这个问题的环境来看,角度很明确。环境是求职面试,或者研究生复试,前提是各行各业均可能有的面向对象思想,故你没得理由上来就辱骂对方是傻x,你必须给出个所在领域的合适的结果。对方就是在问,思想境界里,先有对象仍是先有类……如此而已,不用扯什么汇编和其余OO语言的程序设计。好比,lz就知道在综合面向过程和面向对象的c++语言里,类是不被分配内存的,编译器把类当作一种新的数据类型来理解,只有生成对象的时候,对象是被分配内存的。比如,int类型不会被分配内存空间可是在其余OO语言里,不必定是这样的。

想综合本身的见解分析下,我也不是技术大牛,我只是结合个人经历和认知在分析。还有,除了上述的几类,若有不一样意见,欢迎文明评论!

软件开发的过程

先通过需求分析,而后概要设计,详细设计,以后才是编码,测试等,那么开始的分析和设计阶段,面向对象思想的程序,必然是先设计类,类的设计来源于对象的抽象。

类的定义

类的定义:类(Class)其实是对某种类型的对象定义变量和方法的原型。是具备相同属性和操做的一组对象的集合!它表示对现实生活中一类具备共同特征的事物的抽象,是面向对象编程的基础。看到这里,已经无需多言,标准答案,是先有对象,再有类

面向过程简单说明

从功能角度出发去分析问题,把问题解决方案分解为步骤或者说是模块!这类结构化的思惟特色是自顶向下去设计程序,尽可能的结构化组织架构,把各个模块的各部分元素实现低耦合,高内聚(相对来讲),编写程序主要使用结构化的语法——顺序,分支,循环。通俗的说:程序= 数据结构 + 算法。把各个模块或者步骤分开设计,编码,测试,最后再统一为一个有机总体!故面向过程语言也叫命令型语音。使用函数分解法,把函数分解的尽可能小,足够简单,一种相似迭代的设计。实现高度模块化!

好处:一目了然,有条理

缺点:不利于维护,由于软件开发最难的地方在于后期维护(包括营销推广、bug修正,和软件的升级等),由于面向过程把数据和方法分离!致使了数据管理混乱,理解困难,重用性差,容易产生串联改变!

面向对象简单说明

oop,ood,是一种接近或者类似于咱们人的思考方式的一种程序设计方法,OO,重点就是类的设计!好比造汽车,不须要第一关心去设计一步步的制造步骤,而是先去设计类,假如车门类,发动机类,外形类,轮胎类,动力类,颜色类,容量类,排量类等,不须要第一就去关心各个组织模块的功能如何实现,而是先去关心各个类的设计,把数据和方法封装不分离!独立为一个总体,让类的实体——对象,经过给各个独立的这些类发送消息,驱动他们有机的运转!

在OO里,程序=对象+消息,且至少要有三大特色(递进关系):封装,继承(多态的基础),多态。

再次强调,OO中,先有对象后有类。

总结:

相似“OO中,or OO思想,先有对象仍是先又类”,不存在什么争议,考察的就是OO思想和软件工程的意识,由于它流行,不少软件在使用。若是有企业面试,问这个问题,结果不是这个,那么你能够扭头就走。

 

欢迎关注

 

dashuai的博客是终身学习践行者,大厂程序员,且专一于工做经验、学习笔记的分享和平常吐槽,包括但不限于互联网行业,附带分享一些PDF电子书,资料,帮忙内推,欢迎拍砖!

 

 

 

相关文章
相关标签/搜索