编程对于笔者而言也算是半路出家。在学习Dart开发语言的时候越来越发现自己对于面向对象编程存在一些困扰,于是重新整理梳理一下面向对象,如有不对欢迎指正分享。
为什么会出现理解困难
混乱之一:术语洪流
开发者在初次接触面向对象的时候就会接触到大量陌生的术语。
例如:继承、泛化、超类、子类、重载、重写、访问控制、用例、建模、UML、重构、敏捷开发等等术语。
在使用术语的沟通的时候,自己会觉得这样很酷,但是搞不清楚它们的实际含义和差别会在沟通中产生理解差异。
并且这些术语中伴随着定义混乱。在深入理解面向对象之前,对这些术语的庞大和混乱感到气馁的人,应该不少。但这也是因为面向对象涉及的领域广带来的影响。
混乱之二:比喻乱用
通过比喻来讲解面向对象的特点,但是不详细介绍编程语言的结构和目的。
例如:动物是超类,哺乳类和爬虫类是子类,鸭嘴兽就相当于爬虫类和哺乳类的多重继承。
使用比喻,确实能让人很快从现实世界理解面向对象的特征但,往往开发者只记住了生动的比喻,却不关心面向对象背后的结构和目的,或者根据自己的理解,对实际结构产生错误的认知。
混乱之三:“一切都是对象”综合征
很多人在介绍面向对象的时候,都会提到面向对象的特点就是“一切都是对象”,但这其实是一种拿着半截就开跑的做法。
结合比喻乱用,开发者会产生“当使用面向对象的时候,可以直接将现实世界表现为程序”的重大误解。
“一切都是对象”是造成面向对象理解困难的最大问题。
实际上面向对象不能直接表达出现实世界,只是通过编程技术将现实世界中不变的、可重复抽象的业务制作成软件。软件只是承担了现实世界中的一部分工作,并不能表示现实世界本身。
三大混乱造成了面向对象理解困难
术语洪流、比喻乱用以及“一切都是对象”这三点在我看来是导致面向对象理解困难的根本原因。
一旦脱离了面向对象的应用场景,应用的结构和目的,以及误以为使用面向对象就可以直接表达出现实世界,就会对面向对象产生疑惑。
在后面的章节中,笔者会站在自己的角度,结合参考资料,一步步对面向对象进行梳理。