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

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

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

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

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

问题本身来看:这个问题本身不难

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

评论说:

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

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

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思想和软件工程的意识,因为它流行,很多软件在使用。如果有企业面试,问这个问题,结果不是这个,那么你可以扭头就走。

OO中,先有对象还是先有类?的更多相关文章

  1. java中map和对象互转工具类的实现示例

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...

  2. 在 C++ 中使用 QML 对象

    看过了如何在 QML 中使用 C++ 类型或对象,现在来看如何在 C++ 中使用 QML 对象. 我们可以使用 QML 对象的信号.槽,访问它们的属性,都没有问题,因为很多 QML 对象对应的类型,原 ...

  3. .NET中 类型,对象,线程栈,托管堆在运行时的关系

    .NET中 类型,对象,线程栈,托管堆在运行时的关系 The Relationship at Run Time between Types,Objects,A Thread's Stack,and T ...

  4. python中一切皆对象的理解

    一切皆对象? 学过Java都知道,Java中有8个基本类型,其余的都是继承自Object类的引用类型.方法内的基本类型变量会在栈上分配,而引用类型会通过逃逸分析来决定在栈上分配或堆上分配.Java中关 ...

  5. C#开发中使用配置文件对象简化配置的本地保存

    C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...

  6. 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor

    批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPRO ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (44) ------ 第八章 POCO之POCO中使用值对象和对象变更通知

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-4  POCO中使用值对象(Complex Type--也叫复合类型)属性 问题 ...

  8. 9.Struts2在Action中获取request-session-application对象

    为避免与Servlet API耦合在一起,方便Action类做单元测试. Struts2对HttpServletRequest.HttpSession.ServletContext进行了封装,构造了三 ...

  9. 关于Javascript中通过实例对象修改原型对象属性值的问题

    Javascript中的数据值有两大类:基本类型的数据值和引用类型的数据值. 基本类型的数据值有5种:null.undefined.number.boolean和string. 引用类型的数据值往大的 ...

随机推荐

  1. MySql UDF 调用外部程序和系统命令

    1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...

  2. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Mariadb 10.1.20 + Nginx 1.10.2 + PHP 7.1.0 + Laravel 5.3 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  3. HDU2842 矩阵乘法

    Chinese Rings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  4. JS中常遇到的浏览器兼容问题和解决方法

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

  5. (转)详解css3弹性盒模型(Flexbox)

    今天刚学了css3的弹性盒模型,这是一个可以让你告别浮动.完美实现垂直水平居中的新特性. Flexbox是布局模块,而不是一个简单的属性,它包含父元素和子元素的属性. Flexbox布局的主体思想是似 ...

  6. VS上关于找不到程序集的问题

    第一次重新装了次vs再次导入以前写的项目发现找不到程序集,出现很多的警告和错误,并且代码里好多都是显示红色的 第二次乱动了下又出现此问题 记录下解决的方案和一些相关的问题方案 1.引用一个DLL,需要 ...

  7. Delphi XE5 支持的Android 版本

    Delphi XE5 已经支持Android应用开发.  那XE5支持Android的哪些版本呢?Delphi编译的APP能部署到Gingerbread (2.3.3-2.3.7), Ice Crea ...

  8. 生活中的OO智慧——大话面向对象五大原则

    世间万物,以俗眼观纷纷各异,以道眼观种种是常.面向对象思想不仅是编程的智慧,同样也是人生的智慧.通过生活去领悟面向对象的智慧,以面向对象的智慧来指导生活. (部分图片取自How I explained ...

  9. Hadoop学习笔记—17.Hive框架学习

    一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...

  10. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...