导语
前一阵老师找我聊了一件日常生活中的一件小事,但是通过这件小事,老师分别从面向对象和面向过程两个方面给我进行了分析和讲解,由此,我也对面向对象和面向过程进行一个总结。
背景
1、何老师拿着米老师办公室的钥匙。
2、米老师下午下班,通知何老师锁门。
3、第二天,米老师上班,需要开门。
何老师和米老师,有几种办法,解决这个问题。
解决方案
面向过程:米老师下班后,何老师锁好门,告诉米老师将钥匙放在前台,第二天,米老师到前台拿到钥匙,开门。
面向对象:米老师下班后,何老师锁好门,何老师保存好钥匙,第二天,米老师需要开门的时候通知一声何老师,何老师带着钥匙来开门。
方案解析
我们分析这两种解决方案,为什么说第一种是面向过程的,第二种是面向对象的呢?
第一种方案分析:对于开门这个方法没有进行封装,原本应该由何老师做的开门的方法,现在米老师也必须拥有,没有封装没有复用,并且缺少了数据的安全性支持,要是放在外面,相当于是将数据暴露了,任何人都有可能接触到钥匙,安全性也就没有了保障。这也就完全符合了面向过程的开发。当然,这种方式也有他的优点,就是实时性得到了保障,米老师可以来了之后直接拿钥匙开门,不需要等待何老师的回复。
第二种方案分析:这个解决方案中,使用了消息驱动的方式,米老师通过发消息通知的方式通知到了何老师来进行开门的操作,在这个过程中,每个人或者说每个对象的职责都很清楚,米老师负责通知和办公,何老师负责开门,专人专职专事,对于方法和对应的数据都进行了很好的封装,在需要开门的时候我们只需要将何老师这个类new出来即可。并且这种方案,他的一个天然的优势就是他支持可扩充、可维护、可复用。
面向对象和面向过程的对比
对于这两者之间的比较,我通过一个思维导图进行了梳理: