之前写过一篇文章是“面向对象的基础是抽象”(39条消息) 面向对象的基础是抽象_赛男丨木子丿小喵的博客-CSDN博客
当再提到这个问题得时候有了新的认知,尤其是这样得一句话“不用关心他是怎么做的,只要做成就可以了。抽象就是不关注内部具体是什么”。结合老师提到得一个问题,如何理解下面两句话:
”①我们要注重多少人来干事,而不是干什么事。
②我们要注重谁来干事,而不是怎么干事。
这与面向对象的抽象有什么关系?“
一、问题是最后一句话,”这与面向对象的抽象有什么关系?“,现在只说”抽象“,还没有谈到”类“的概念,所以还没有到封装,继承和多态,这说明什么问题,没有类,就无需关注类中的方法,方法中可能会说让别人做什么事情。我的脑袋中一直不能理解为什么不能说让别人做什么,比如打水这个例子,我也没有关心具体水是怎么打的,为什么不是面向对象的抽象,问题就在抽象这里,现在说的就是”抽象“,抽象还没做好,就没有类的事,没有类的事就没有类之间的关系。当然更不用关心一件事具体怎么去实现,回到抽象的解释--抽象就是不关注内部具体是什么。
二、关注句子的主语而非整个句子,再进一步说,关注除了句子的谓语之外的其他成分都可以,主语,宾语,总之名词性的部分,什么意思,你要抽象谁,这个谁是个名字,还拿打水这件事来说,抽象过程中注重对象,而不是过程,场地,打水人,打水工具,受水人,水等等,如果再进一步抽象,参与者,使用的工具,场所(UI),材料(参数)等等,唯独不该关心”让谁打水“。往上抽象,类越来越少,不光为了实现复用,也为了实现代码自动化,可扩充可维护。
三、关于粒度,越大,代码的“颗粒”越模糊,越接近一个逻辑上的概念;粒度越小,代码的“颗粒”越清晰,越接近具体的实现。通常情况下粗粒度的复用性要差,细粒度的、更具体反而更容易复用。也可以理解成抽象的类粒度越小,复用性越高,也就是上面的例子中提到的,抽象出场地,打水人,打水工具,受水人,水等等。
总结,面向对象的基础是抽象,因为没有抽象就没有类,没有类就没有封装继承和多态。