到底什么叫做面向对象?自认为搞清楚了,可是经理说我没搞清楚。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xingzhela
V2EX    程序员

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

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

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

    第 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
    为什么我到现在还搞不清楚?每次说完都觉得不对,别人说出来都好有道理的样子。突然想起来张三丰问张无忌,“无忌,招式记住了多少?”…………我感觉面试这么回答是很好的,如果我们总监这么问我,我这么回答,我会祈祷他不打死我
    y835L9DyC5XD09kq
        39
    y835L9DyC5XD09kq  
       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 ia 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     Solana     5559 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 07:22 PVG 15:22 LAX 00:22 JFK 03:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86