黑马程序员技术交流社区

标题: 从现实世界到程序世界——抽象如何进行? [打印本页]

作者: 中华教书人    时间: 2014-9-18 19:28
标题: 从现实世界到程序世界——抽象如何进行?
最近在看张老师讲那两道面试题,发现了一个很重要的问题,就是逻辑思维抽象能力,不容小觑。想了解一下大家都是如何来训练这个方面的能力的。
打个比方,在银行调度系统这个实例上,如何抽象出几个类,具体的思路是什么,抽象到什么程度,如何组织、关联、解析出各个类之间的关系。

当时在看这个视频之前,我就在想搞清楚应该具体抽象出几个类,结果抽象出的类为:客户类、窗口类、号码类

他们之间的关系,我的理解是人要取号,窗口要叫号,那么这一取、一叫如何对应起来,想起来就头大了,再加上有不同的客户取号,就更头大了。

最后看完张老师的视频才发现,张老师处理的逻辑关系非常巧妙,可是自己为什么就想不到这样处理呢?这种能力究竟是需要怎么培养,还是随着大量的练习就能够提高的呢?

想知道大家都是怎么考虑这个问题的,如果每次都是照这别人的思路去理解,感觉都没有问题,可以跟的上,可是撇开别人的思路,自己去想的时候,就无法准确把握各种逻辑关系?

还有就是有些类的属性,是通过构造方法直接赋值的,有些是通过自定义setter方法来赋值,什么时候该选用构造方法赋值,什么时候选用自定义方法去设置值呢?有没有一个简单的模式可供参考?

此外,当一个对象实体需要调用另外一个对象的方法或者获取另外一个对象的属性时,何时使用静态方法,何时创建对象,需要遵循什么样的逻辑,打个比方
在做交通红绿灯那题时,我额外考虑了一个car的类,就是当路要移除一辆car的时候,要判断当前路上三个灯,哪个灯是绿灯,这样就可以详细的输出car的方向了,那么通过car去调用路的灯的状态,这种判断是否可行?

作者: fantacyleo    时间: 2014-9-18 20:40
你想自定义Car类的话,可以参考我写的7k代码,在张老师的思路基础上做了一些改动,也新增了Car类。http://bbs.itheima.com/thread-137041-1-1.html
至于你问的如何进行面向对象抽象,这不是一两句话能说清楚的,建议你找一本教面向对象设计的书来看。如果你英语还行的话,向你推荐我正在读的一本入门书:Practical Object-Oriented Design in Ruby 这本书虽然是用Ruby语言来介绍的,但你只看文字不看那些ruby代码也ok的,关键是思想
作者: 中华教书人    时间: 2014-9-18 20:48
fantacyleo 发表于 2014-9-18 20:40
你想自定义Car类的话,可以参考我写的7k代码,在张老师的思路基础上做了一些改动,也新增了Car类。http://b ...

非常感谢,我去瞅瞅!
作者: 中华教书人    时间: 2014-9-18 20:51
fantacyleo 发表于 2014-9-18 20:40
你想自定义Car类的话,可以参考我写的7k代码,在张老师的思路基础上做了一些改动,也新增了Car类。http://b ...

兄台,现在在黑马几期?




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