V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xingzhela
V2EX  ›  程序员

到底什么叫做面向对象?自认为搞清楚了,可是经理说我没搞清楚。

  •  
  •   xingzhela · 2016-05-11 08:05:14 +08:00 · 8200 次点击
    这是一个创建于 3153 天前的主题,其中的信息可能已经有所发展或是发生改变。

    到底什么叫做面向对象?自认为搞清楚了,可是经理说我没搞清楚。 面向对象编程不就是封装,多态,继承吗?

    第 1 条附言  ·  2016-05-11 16:52:32 +08:00
    好吧,我们经理是做技术的,做 java 七年多了,但是我感觉他水平一般化,有的设计模式都不懂,我能说有的东西他也不懂,还指指点点的吗
    71 条回复    2016-05-17 10:43:48 +08:00
    laoyuan
        1
    laoyuan  
       2016-05-11 08:13:12 +08:00
    一堆值和函数的集合。。
    pangtianyu
        2
    pangtianyu  
       2016-05-11 08:14:39 +08:00
    请问什么是封装…… 什么是多态…… 什么是继承…… 请具体一点……
    designer
        3
    designer  
       2016-05-11 08:18:07 +08:00 via iPhone
    就是帮单身猿猿们找对象!
    cxbig
        4
    cxbig  
       2016-05-11 08:19:37 +08:00   ❤️ 1
    倒不如帖一点代码出来看看? OOP 更多的是体现在框架构建理念上。
    另外只说你“没搞清楚”?提到细节了没有?如果只是扣个帽子,那说明这个人一样不靠谱。
    araraloren
        5
    araraloren  
       2016-05-11 08:26:12 +08:00
    你们经理对你有意思吗?面向`对象`。。。
    tobyxdd
        6
    tobyxdd  
       2016-05-11 08:27:26 +08:00 via Android
    教科书式的回答。。估计是你得说详细点
    wezzard
        7
    wezzard  
       2016-05-11 08:29:37 +08:00   ❤️ 2
    你們經理在裝逼,一個這種破概念還翻來覆去的,又不是做學術寫論文。
    這是教科書的回答:「面向對象的本質是代碼的復用。」
    這是我的理解:「面向對象的本質是消息的傳遞。」
    每個人都有每個人的理解,沒必要在這種隨着經歷增加而在不斷變化的東西上使太多勁兒。
    ren2881971
        8
    ren2881971  
       2016-05-11 08:35:59 +08:00
    你们经理唬你呢~
    k9982874
        9
    k9982874  
       2016-05-11 08:40:13 +08:00 via iPad
    我觉的你把最重要的一条“抽象”漏了
    vietor
        10
    vietor  
       2016-05-11 08:43:39 +08:00 via Android
    面向对象是理念与工具集,你关注了工具集
    jeffersonpig
        11
    jeffersonpig  
       2016-05-11 08:43:51 +08:00   ❤️ 4
    封装、多态和继承这些只是实现面向对象的技术手段,如果你自己在对象的提取和抽象上没做好,这些技术用上去也写不出好代码。面向对象是一种分析问题、看待事物的思维方式,只着眼于这些技术层面的东西,有点太狭隘了。个人觉得编程不只是写写代码,也是在培养各种看待世界的方式。
    just4test
        12
    just4test  
       2016-05-11 08:46:30 +08:00 via Android
    我觉得本质是绑定了数据和操作,使其更类似于真实世界的实体,从而易于理解和使用
    wjh3936
        13
    wjh3936  
       2016-05-11 08:46:58 +08:00
    你的经理可能是说你没搞清楚,他来教你怎么做“对象”?手动滑稽
    xpol
        14
    xpol  
       2016-05-11 08:53:07 +08:00 via Android
    设计模式解析上有一段叫从传统面向对象到新的面向对象。
    大致是说新的面向对象是抽象和封装变化点。
    superlead
        15
    superlead  
       2016-05-11 08:58:56 +08:00
    @wezzard 咋知道我这是引用的几楼?
    Ouyangan
        16
    Ouyangan  
       2016-05-11 08:59:54 +08:00
    看看 think in java 导论
    kideny
        17
    kideny  
       2016-05-11 09:01:03 +08:00
    只是计算机语言这种拙劣的表现语言,找一个实用.或者->访问对象方法和属性的方式,找一个借口罢了。
    chunqiuyiyu
        18
    chunqiuyiyu  
       2016-05-11 09:01:33 +08:00
    赞同十一楼。面向对象每个人都有自己的理解,如果你们的经理执着于这点就太无聊了,实际的工作项目中,更值得理解和解决的问题根本比概念的理解要重要的多。估计你们经理想要一种教科书式的回答。。
    linux40
        19
    linux40  
       2016-05-11 09:15:11 +08:00 via Android
    我也觉得你们经理在装逼,这个东西还是要看代码。。。
    UnisandK
        20
    UnisandK  
       2016-05-11 09:20:05 +08:00   ❤️ 8
    经理一拍桌子:你好好看着我!
    然后红着脸小声说了句:这就是面向对象。
    evilic
        21
    evilic  
       2016-05-11 09:22:44 +08:00
    尽量用最有效的方法来解决问题。面向对象也好,怎样都好,反正都是为了解决问题的。
    tony1016
        22
    tony1016  
       2016-05-11 09:26:41 +08:00
    10 年工作经验来看,大多数程序猿依旧停留在对象就是有个类的基础上,现实开发中根本没有多少封装,继承和抽象,还不如直接函数编程呢
    admol
        23
    admol  
       2016-05-11 09:28:04 +08:00   ❤️ 1
    你就是一個对象,具备一些功能,拥有一定的编程能力,你们经理在面向你的时候,把你的技能属性值设置成了没搞清楚面向对象是什么,你们经理还可以调用你的编程能力,喊你去做任何能做的事情,但是呢,过了一段时间,你们经理发现你这对象该优化优化了,需要提升一下技能,于是找你谈话,问你什么是面向对象. 2333333333333
    xylophone21
        24
    xylophone21  
       2016-05-11 09:30:08 +08:00
    断章取义概率很大
    suuuch
        25
    suuuch  
       2016-05-11 09:35:23 +08:00
    看情况吧,这算是一个开放性问题吧,有自己的见解就好了。
    kyze8439690
        26
    kyze8439690  
       2016-05-11 09:36:03 +08:00
    懂技术的经理
    jason19659
        27
    jason19659  
       2016-05-11 09:38:14 +08:00
    我同样想起了一个问题,你对 spring 的理解怎么样
    firsthym
        28
    firsthym  
       2016-05-11 09:42:22 +08:00
    这明明是一个 big topic
    yszx
        29
    yszx  
       2016-05-11 09:52:11 +08:00
    面向对象是一种设计思路···反正我是说不出来
    lwbjing
        30
    lwbjing  
       2016-05-11 09:59:17 +08:00   ❤️ 1
    要面向对象,首先要结对编程,
    妹子或者汉子都行,
    再不济也得要有个程序员鼓励师,
    不然就会一直找不到对象。。
    fin
        31
    fin  
       2016-05-11 10:11:13 +08:00
    能不能讲一下 J2EE 。
    niepan0oo
        32
    niepan0oo  
       2016-05-11 10:24:50 +08:00
    个人观点:更多的是设计程序的一个思路吧,用这种方式去解决问题,让程序便于理解、便于维护、便于迭代。封装,多态,继承这些应该是具体的实现吧。
    jydeng
        33
    jydeng  
       2016-05-11 10:26:35 +08:00
    讲不了,所以还是搬砖去吧
    lifesimple
        34
    lifesimple  
       2016-05-11 10:30:31 +08:00
    找不到对象,何以面向对象?
    alexRH
        35
    alexRH  
       2016-05-11 10:32:22 +08:00
    看看设计模式的书,虽然单纯看完你还是不懂设计模式,但是至少,装逼,已经不会输给你经理了。
    j4fun
        36
    j4fun  
       2016-05-11 10:59:35 +08:00
    给我找个对象我告诉你
    bumz
        37
    bumz  
       2016-05-11 11:19:46 +08:00 via iPhone
    何为面向对象?可以从实践、思维、目的三个角度回答

    封装、多态、继承是实现面向对象的常见方式
    以物件为导向设计架构是面向对象的基本思维
    达到代码复用的效果,是面向对象的主要目的
    blackfire
        38
    blackfire  
       2016-05-11 11:19:59 +08:00
    为什么我到现在还搞不清楚?每次说完都觉得不对,别人说出来都好有道理的样子。突然想起来张三丰问张无忌,“无忌,招式记住了多少?”…………我感觉面试这么回答是很好的,如果我们总监这么问我,我这么回答,我会祈祷他不打死我
    kangkang
        39
    kangkang  
       2016-05-11 11:35:13 +08:00
    是产品狗最后的遮羞布
    sensui7
        40
    sensui7  
       2016-05-11 11:50:52 +08:00
    思想丄的, 如果只是把函数葑装琎类里面, 那没有多大意义啊. 个朲锂解猪要是, 数据保护, 低耦合, 复用.
    wingyiu
        41
    wingyiu  
       2016-05-11 12:05:49 +08:00
    以后面试记得带两个象棋
    sensui7
        42
    sensui7  
       2016-05-11 12:12:51 +08:00
    @wingyiu 象没法对, 过不了河
    alphadog619
        43
    alphadog619  
       2016-05-11 12:20:36 +08:00
    世间万物皆对象
    Chrisplus
        44
    Chrisplus  
       2016-05-11 12:29:15 +08:00
    面向对象是一种思维方式
    zhuzhe1983
        45
    zhuzhe1983  
       2016-05-11 12:41:00 +08:00
    首先你要有个对象,然后面对她编程就可以了。。。
    SuperMild
        46
    SuperMild  
       2016-05-11 13:04:32 +08:00 via iPad
    感觉面向对象体现得最明显的就是各种 framework 。
    现在能这么方便地 import 一个包就获得一堆很实用的类和方法,就是面向对象的好处。
    把逻辑封装为 class ,使 api 非常清晰,同时也使 namespace 划分得很清楚。
    an168bang521
        47
    an168bang521  
       2016-05-11 13:05:36 +08:00
    我理解的面向对象是:
    像自然界中一样,把事物分为不同的类,方便进行管理;
    自然界中有人类,动物类等;比如人都属于人类,人都继承人类的特征,都有一个鼻子两只手;
    编程语言中,进行归类,继承,多态等;
    比如 JavaScript 常见的,可以用构造函数创造一个类,实例都继承所创建的类;
    实例的方法继承类;但是实例 A 内的数据和实例 B 内的数据是不同的,虽然都是继承同一个类;
    就好比我们每个人都有一双手,都是继承人类的特征,但是我的手不等于你的手;
    大概就是这样的吧;
    妈的,这玩意,真的认真说起来,就好比是一本正经的吹牛 B 一样;
    Reign
        48
    Reign  
       2016-05-11 13:09:06 +08:00 via Android
    qiumaoyuan
        49
    qiumaoyuan  
       2016-05-11 13:10:03 +08:00
    面向对象是一种管理代码复杂度的有效方法
    qiumaoyuan
        50
    qiumaoyuan  
       2016-05-11 13:11:18 +08:00
    对了,补充一句,其实你经理未必清楚。
    21grams
        51
    21grams  
       2016-05-11 13:17:49 +08:00
    本质就是通过封装降低了复杂度。
    Erbied
        52
    Erbied  
       2016-05-11 13:32:02 +08:00   ❤️ 1
    ChiChou
        53
    ChiChou  
       2016-05-11 13:55:49 +08:00
    你有对象了吗?
    Epirus
        54
    Epirus  
       2016-05-11 16:33:46 +08:00
    发送消息
    redhatping
        55
    redhatping  
       2016-05-11 16:46:34 +08:00
    想和你谈对象呢... 你就这么呆瓜
    McContax
        56
    McContax  
       2016-05-11 17:16:32 +08:00 via Android
    面向对象编程,首先你得有对象(好吧这一块区域我也很模糊,生活中的任何事物都是对象,对象有属性。。。。这一段我都可以背下来了但是就是不懂)
    aksoft
        57
    aksoft  
       2016-05-11 17:20:35 +08:00
    就是面向女朋友
    loryyang
        58
    loryyang  
       2016-05-11 17:42:57 +08:00
    一种思维方式吧,尽量做好封装,需要的时候用好继承和接口。
    另外设计是演化出来的,上来就一定要严格面向对象其实意义不大。而且没有具体的问题,空谈 OO 没啥意思,实用至上
    crayygy
        59
    crayygy  
       2016-05-11 18:29:34 +08:00 via iPhone
    面试前端的时候让我讲一下观察者模式和工厂模式……当时就觉得这事儿没那么简单。果不其然现在这个小项目几乎所有的都是我一个人在做……我特么只是个实习生啊!
    feilaoda
        60
    feilaoda  
       2016-05-11 19:52:26 +08:00 via iPhone
    @crayygy 工作很多年的很多人都不会观察者模式
    garrych
        61
    garrych  
       2016-05-11 20:09:03 +08:00
    都知道封装,多态,继承,但这并不等于理解了面向对象,封装,多态,继承只是为了解决代码层面的问题,比如代码复用
    对象是为了解决业务层面的问题
    garrych
        62
    garrych  
       2016-05-11 20:12:06 +08:00
    赞同十一楼。
    建议楼主看看领域驱动设计,会有很大帮助
    beyoung
        63
    beyoung  
       2016-05-11 22:20:55 +08:00
    @designer
    @araraloren
    @lwbjing
    @Chrisplus
    @UnisandK

    如果对方是妹纸 你可以做个手势,然后淡淡道:
    就像我们现在这样;你不需要知道我到底究竟是怎么做到某件事的,你告诉我,我去做就好;你就是面向了你的对象,也就是我;
    chilaoqi
        64
    chilaoqi  
       2016-05-11 22:29:29 +08:00
    你是不是很想说: “咱不装逼了行么,求你了” 哈哈哈
    ichou
        65
    ichou  
       2016-05-11 23:19:25 +08:00
    我觉得面向对象并不是模式,或者语言特性,那些是实现面向对象的工具

    面向对象 是编程中逻辑编排的一种思想,它不强调我要做什么,而是我这个东西有什么,可以做什么,再通过各个对象的串联来完成一个系统

    很多刚接触一段时间的人,对什么是面向对象如数家珍,但是代码中着实看不到面向对象的思想,要么是为 OOP 而 OOP ,要么是大家都是这么写的所以我这么写

    推荐给楼主一种彻底面向对象的语言: ruby ,凡事皆对象
    SlipStupig
        66
    SlipStupig  
       2016-05-12 00:05:47 +08:00   ❤️ 1
    你是对象,你女朋友是对象,你们两个互相搞对象,你们俩就是类;

    你出生在一个富裕家庭,有一堆跑车,是你爹的,你也可以用,这个叫继承;,但是你娘不属于你,所以这个叫私有对象,跑车和房子属于公共对象,但是只能你和你家人一起用,这个叫公有对象

    你判断政府要在一个地方搞开发,然后你先占坑,放了几张桌子,你听说明年就要开发了,你马上又去修了一个鱼塘,后来政府不开了,你很失望你把那个坑给填了,这个叫抽象类

    以上都是我胡说八道,我是一外行啥也不懂
    Asan
        67
    Asan  
       2016-05-12 08:36:28 +08:00 via iPhone
    面向过程是什么事都自己做,面向对象是什么事都让别人做。
    smallpath
        68
    smallpath  
       2016-05-12 11:29:44 +08:00
    哈哈, 也许你可以看看湾湾的面向组件这种说法, 然后跟你经理装个比
    elvba
        69
    elvba  
       2016-05-12 13:27:19 +08:00
    @SlipStupig 挺形象的哈哈
    SlipStupig
        70
    SlipStupig  
       2016-05-12 14:42:18 +08:00
    @elvba 这种东西每个人理解不一样,我见过国外一些开源项目人家不用 oop ,照样可以写出牛 x 的项目,我个人认为 OOP 目的是让大家水平更平均,要要逞口舌之利,你可以这么玩。
    版本 1 :
    经理:你还是没理解 OOP
    你:我更注重设计模式
    经理:你连 OOP 都理解不了怎么去理解设计模式呢
    你:你写代码都不设计的嘛,那模块如何懈耦,如何拓展,如何降低模块依赖,数据库复杂度,是否做到可持续交付呢?你设计模式都不理解,你怎么写代码!就算你写出来了,我都不知道是什么代码!

    版本 2 :
    经理:你还是没理解 OOP
    你:我不需要理解,我更注重系统和编译原理这些
    经理:你连 OOP 都理解不了怎么去理解这些呢?
    你:你说的虚类 保护对象 隐含调用,在 JVM 里面只不过是内存一个指针而已,在底层虚拟机实现指令中全都是过程没有对象,编译流程中也全部都是过程,你这些都不理解,可能写出来的代码最终就是被编译器优化掉的下场!
    经理:那对你开发速度和质量上也没什么帮助啊
    你:我理解这些所以我能写出更高性能的代码,你连系统原理都不了解,我都不知道是什么代码!
    xingzhela
        71
    xingzhela  
    OP
       2016-05-17 10:43:48 +08:00
    @jeffersonpig 同意
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:02 · PVG 05:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.