最近参与了一个面向对象程序设计(以下简称OOP)的培训,这两天才有空整理一下思路,现在拿出来给大家来分享。本文旨在说明以何种方式学习OOP,文中如有不当之处还请大家指正。
上周看到一个人的帖子,大致的意思是对OOP中的一些概念很困惑,不理解什么是“面向对象的五个特性”或“三个原则”。说实话,最早我对这些概念的认识是背下来的,如果有人问,答得很流畅;后来发现这些概念很空洞,不知道在说些什么,这时候就答不上来了;直到现在,也不该完全保证对这些概念完全了解,只能结合具体的应用说出个一二。
这也是我对OOP的学习认识过程,以下就是这过程中总结的经验,如下:
1.任何OOP都有其独特的场景,离开了场景,一切设计都可能毫无意义;同样,也不能假设场景,因为任何人都不能把握下一步会是什么样子。这就好比收割麦子,除了要知道麦子熟了之外,还要了解交通等状况。不然等你开着收割机去收割的时候发现山路崎岖,收割机根本进不了田。我之前做过一个优化项目。该项目一要支持很多厂家的设备,二对性能要求很高,三时间有限。经过再三讨论后,公司决定将影响性能的算法用C++实现,将影响兼容性的部分用C#实现。结果,算法中丝毫没有用的OOP,交互部分充满了OO设计。最终该项目比较成功的完成了。
2.OOP的实现在不同平台下有不同的呈现方式,脱离平台,依葫芦画瓢最总结果是不论不类。举个例子,C#,Java以及C++是现在主流的三种OO语言,从可维护性,可扩展性等多方面出发,如果用这三种模式去实现一个工厂,其最终结果必有差异。Java和C++差异不大,但经过优化后的C#实现方式与前者有很大的不同,因为C#中可以有反射的加入使设计模式出现了很大的改观(个人认为虽然反射破坏了OOP,但其带来的好处足以掩盖其不足,说到底它是双刃剑,就看怎么用了);
3.OOP是程序设计的一个分支,有长有短,有它特有的职能,与其他程序设计理论有同等的地位,他们相互补充,没有高低贵贱之分。在一个公司的软件系统中,面向过程,OO,SOA甚至AOP等同时存在相当普遍。相信做SOA的人都了解,SOA中每个业务的实现可能是用OOP的方式,但SOA本身却不是;同样,过程语言C今天依旧流行;
4.OOP是人经验的积累,并不是一成不变的。这句话的意思很简单,论坛中每个人在发表自己的见解时,不管这个观点正确还是错误,愚蠢还是高明,都是在表达一种软件开发技术思想。这时候,如果你的思想能够成功的解决某一领域中的难题,那么你的观点就进入的教科书,供更多的人研究学习。面向对象的三个原则,五个特性就是这么来的,它们并不是圣经,它们一样需要不断加入新鲜血液。到目前位置,最经典的血液就是设计模式了。同样,研究过设计模式的人都知道设计模式不仅是四人组的23种,还有很多。但是一旦结合的具体的语言平台,适合的就不多了。所以在学习的时候一要踏实学习,二要不拘泥与字面,三要大胆假设,勇于改进,加入自己的观点;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架