黑马程序员技术交流社区

标题: 关于面向对象的设计方法 [打印本页]

作者: 罗杰    时间: 2012-3-28 15:58
标题: 关于面向对象的设计方法
本帖最后由 罗杰 于 2012-3-28 16:45 编辑

张老师讲,面试的一个问题,人去关门,关门是门的方法,而不是人的方法?
呃,理解不能,不是人关的门么?

如果写成程序的话是 门.close()? 那么不需要人这个对象么?

硬要写也可以写出程序来:
class person(){
    public void closeTheDoor(Door door){
        用手把 door 推到与墙齐平
    }
}

有哪里不妥么?
作者: 黄或俊    时间: 2012-3-28 16:00
人这个对象不具有关门这个方法
关门是门对象特有的方法
作者: 王国华    时间: 2012-3-28 16:02
人是调用者,你不调用它,它不会自己执行
相当于在主函数中来一个 new Door().close()
作者: izwj    时间: 2012-3-28 16:19
是人关的门,但是关门是门本身的方法,如果门不具备关的方法,怎么关呢?
作者: 李柯    时间: 2012-3-28 16:23
“关门”这个属性是门的,但是可以被人的对象调用。
作者: 罗杰    时间: 2012-3-28 16:44
izwj 发表于 2012-3-28 16:19
是人关的门,但是关门是门本身的方法,如果门不具备关的方法,怎么关呢? ...

class person(){
    public void closeTheDoor(Door door){
        用手把 door 推到与墙齐平
    }
}
作者: izwj    时间: 2012-3-28 18:21
罗杰 发表于 2012-3-28 16:44
class person(){
    public void closeTheDoor(Door door){
        用手把 door 推到与墙齐平

推之前得门具备被推的功能吧?
作者: 姚伟涛    时间: 2012-3-28 18:25
门关上是门的功能,人的功能是可以有关门的动作
对象有方法(功能),属性(私有)
作者: 杨华威    时间: 2012-3-28 19:15
手机:{型号,打电话(),发信息(),放歌()}
人{名字,使用手机()}
人:有名字,有使用手机的能力。
手机:有型号,有打电话功能,有发信息功能,有听歌功能;
当然,手机不会自动播放歌曲,不会自动拨打电话,不会自动发信息。手机只是有这个功能。
人有使用手机的能力,那么只有人,才能去调用手机的打电话、发信息、放歌的方法时,手机才能拨通电话,发送信息,播放音乐。
方法是手机的,但是有人调用的。
即为:人.发信息();人.打电话();人.放歌();

希望楼主慢慢理会其中的,持有功能者,和调用功能者。
作者: 和心愿    时间: 2012-3-28 20:06
如果关门时人的方法那么一条聪明的狗也会关门的话是不是狗这个类上也要有关门这个方法呢;
比如刹车这个行为吧,自行车有自行车的刹车方法启动方法,火车有火车的刹车方法启动方法,汽车有汽车的刹车方法启动方法,他们不会自动的启动或刹车,是打开开关或者踩下刹车调用了这些方法,  而人不需要知道每种车具体是如何启动如何刹车,只需要掉用那个方法就可以了。
作者: 邵中国    时间: 2012-3-28 21:11
本帖最后由 yuanshilieshou 于 2012-3-28 21:13 编辑

谁有数据,或者说数据在谁身上,谁就是对象,大部分是这样吧
人啊什么的是外部的因素,是不是可以理解为他们在使用对象
门自身有轴(姑且这样叫它),有可以旋转的方法(close())

作者: 罗杰    时间: 2012-3-29 09:22
谢谢各位,基本想通了,总结一下:

门的状态可以看作门的成员变量,所以操作这个数据的方法应该是门的方法。

人(或者聪明的阿猫阿狗)都可以调用这个方法,所以这里的“人”貌似就是程序员本身(因为是我编程调用门的这个方法)

程序员坐在电脑前,编写为了实现目的所需要的类,实例化对象并调用各种对象所具备的方法,就是面向对象的编程
作者: 郑洋洋    时间: 2012-3-29 09:52
面向对象用自己的理解说就是把所有可以看为对象的个体都视为独立对象
你把关门方法放入人这个类中,你岂不是 用一个类就实现了关门,就面向过程了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2