攻城狮小白

 

面试中让你无法回答的那些问题,持续更新中……

1、什么是面向对象(让软件世界更像现实世界)?
我觉得像这种抽象性概念,每个人应该都有自己的一些理解,我最早从网上看到一张拖拉机扫把图,觉得写的还是挺详细的,首先可以将拖拉机当做一个抽象类,扫地当做一个接口,则该系统就是继承拖拉机,实现了扫地的接口;还可以看到它的封装特性,不需要知道它底层是什么原理工作的,只需要开动开关即可,就像我们平时使用的某些框架或工具类我们不知道底层实现,但是能知道这个方法是干啥的就会使用了;还能意淫出一点低耦合的思想,比如需要实现拖地的功能,只需要将扫把换成拖把不就行了。当然这个图里面还有一些其它的内容,不过估计面试时候也记不起来,简单说说就行了。
 
还有一句话理解就是, 如果上帝是程序员,他怎么创造世界上的所有动物(创造就需要给他们设置属性、行为等),理解这个问题就理解了面向对像编程。
 
当然我在书中可能更多的看到的是一些不太好记的比较抽象的话所描述的,更多就是三个特征了,封装、继承、多态。
 
2、什么是代码之间的耦合问题(用猪换一个iPhone手机的问题)?
在商品经济的萌芽时期,出现了物物交换。假设你要买一个IPhone,卖IPhone的老板让你拿一头猪跟他换,可是你并没有养猪,你只会编程。所以你找到一位养猪户,说给他做一个养猪的APP来换他一头猪,他说换猪可以,但是得用一条金项链来换——所以这里就出现了一连串的对象依赖,从而造成了严重的耦合灾难。解决这个问题的最好的办法就是,买卖双发都依赖于抽象——也就是货币——来进行交换,这样一来耦合度就大为降低了。
当然在我们代码中Spring的一个核心IOC就是一个很好的解耦的例子,IOC容器相当于充当了此处的 货币 的作用,就是一个集合容器,各个层以多态的形式通过接口去springIOC容器中去拿需要的实现类对象,实现代码的解耦合问题。

posted on 2018-01-04 21:19  攻城狮小白  阅读(204)  评论(0编辑  收藏  举报

导航