面向对象编程,相信大家都有了解和学习。但虽然学习了很多种相关的编程思想,遇到具体问题是还是习惯性面向过程编程。所以还是需要总结为具体步骤,遇到问题时按照步骤进行设计和编程。
这里,想要问问有经验的面向对象编程开发者,你们遇到开发任务时,是怎么一个步骤?
在面向对象编程开发的步骤因人而异,我的习惯做法是:
1.分析识别出涉及哪些对象
2.分析对象之间有哪些关系
3.对象以及关系优化,哪些可以提取出一个公共类来,哪些可以合并或去掉,对象有关系,是把另一个对象做为其参数还是怎么优化。
4.考虑对象的交互,是写方法调用还是公用接口调用。
5.考虑业务的实现。
如果你一直在搞小作坊式的编程,没有接触过任何稍大一点的项目开发
那你再写8年代码也还是面向过程
比如我之前写过一个程序,启动8个线程,8个串口分别读modbus协议的设备
每个串口就发送完等待接收,这哪里用得到面向对象了,连自定义类都不需要,数组就够用了
面向对象,那你总需要有对象才行
当你的工程里需要管理一大堆自定义类,而这些类之间又有重叠的属性
那你就要考虑哪些类可以合并一下,共同继承一个基类,而不要把重复的属性来来回回的反复定义
它们在调用各自的成员函数的时候,又该如何不要反反复复的重复声明
需求决定实现方式,屁股决定脑袋,强行面向对象除了让工程变得可读性降低,开销增大,速度变慢,没有好处
当你真正搞过一个面向对象的工程,你自然就拥有了面向对象的思维方式
否则空有一堆理论,你还是不知道从哪里开始着手
作为一个从学校就开始学习 c++ 十几年的老头,也来说说。。
c++ 最开始学到就是语法,而且是跟 C 差不多的语法,即使是类、继承、多态,其实也没有摆脱面向过程的编程;
起步都这样,除非你是个神童,但是随着项目的需要,代码的熟练,你就会考虑设计;
在我看来,程序猿最重要的不是语法、不是编程能力,而是设计,设计是编程道路中最最最重要的环节;
设计之前,你需要考虑需求、调研、设计思想,还需要考虑你代码的架构,考虑你后期维护的成本,甚至考虑你的代码出去不要让后来者觉得low;
ok。。。。设计会了。。。。这就是你说的面向对象,为什么应用程序都用c++ 开发,而不是C??明白了吧,面向对象太灵活了。。。
所谓的研发。。。首先想到的是 research 和 design,而不是development
OOP是哲学,方法论体系。所以你需要不是计算机技术,而是哲学(存在主义哲学),方法论(7大基本设计原则)
object本身简体翻译就是一种“神”翻译,对象-----啥是对象?第一步就糊了,这个湾湾翻译的比较直观,湾湾翻译成“物件”,而英文愿意为“object:物体,物品,存在”
而存在主义哲学的定义是啥:
存在’的认知观理解是:从发觉、识别、属性、了解、功能;到作用、利弊、用途、效果、控制等系统化的归纳。
对从这里你就看到,怎么学OOP第一步了。 发现物体,识别物体,定义属性,写功能,定作用,用途,效果。
然后是第2步方法论的:了解利弊,控制扩展策略
总体上我们OOP的就是,先抽象出物体,按照说明书的写法写代码,然后在考虑扩展性(了解利弊,尽量保证好的部分)
说明书写法:假设我不会下国际象棋,我会找一下说明书。而说明书告诉你啥“有棋盘,有棋子,每个子啥用”这其实就是对象写法的基本型
所以总结一下:
看看湾湾的OOP的翻译“以物件为导向的编程”大概就能明白了,这个比“面对对象”这种神翻译要明白的多
而以物件为导向的东西,在日常生活里最常见的就是说明书----------“我是啥,能干啥。由那些东西组成,各个东西在哪里?这些东西有啥用”