前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何学习面向对象程序设计(OOP)

如何学习面向对象程序设计(OOP)

作者头像
李海彬
发布2018-03-27 16:02:10
9740
发布2018-03-27 16:02:10
举报
文章被收录于专栏:Golang语言社区

最近参与了一个面向对象程序设计(以下简称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种,还有很多。但是一旦结合的具体的语言平台,适合的就不多了。所以在学习的时候一要踏实学习,二要不拘泥与字面,三要大胆假设,勇于改进,加入自己的观点;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档