现阶段编程语言极大丰富,以编程思想大致分为面向过程和面向对象两类,前者以C语言作为代表,编程以过程为中心,符合编程人员的直观逻辑,便于理解;后者有C++、C#、Java等,编程以对象为基本程序结构单元,与直观逻辑不同,该方法重难点在于对现实世界的抽象,万物皆可对象,代码整体易维护、易扩展、质量高、效率高。此处重点分析一下对编程和类的认识以及类的抽象思路。
1. 对编程和类的认识
C、C++、C#等编程语言都是图灵完备的,也就是都可以模拟出单带图灵机(数据由读写头在控制器指令作用下产生并记录于纸带,整体围绕数据和指令展开),其基本内容同样是数据和指令。不同的编程语言叫法上略有不同,如C#中称为字段(属性)和方法,但含义相同,此处均称为“数据+指令”。编程的基本思想即对数据的定义和指令作用下数据的使用,整体实现某一特定功能。
“数据”包括了常量、变量、列表、数组等,“指令”则表示对数据进行何种处理。函数、结构体、类都可以看作是对这两部分内容的封装,从这一角度理解类更接近类的本质——类是某一现实事物的抽象,是一组数据和若干指令的集合,前者表示该事物的属性(不同的数据类型代表不同类的属性,可进行不同的运算),后者表示可执行的操作和方法。
2.类的抽象
了解了类的本质,类的抽象便有章可循。将要解决的问题进行拆解(相当于建模),拆成数据加指令,看哪些部分适合投射为数据,投射为哪种数据(由此引入数据类型,数据类型决定了它后续可进行的操作和运算),哪些投射为指令(本质是都是选择判断和循环等基本逻辑组合实现的特定的功能)。
如要设计某智能车间的信息采集系统,面对这个大问题首先考虑到可将机床作为一个类进行设计,后续实例化出多个对象即构成整个车间系统。针对此机床类进行数据和指令的抽象:
- 数据方面:机床有诸多属性,如PLC数据、刀具数据、轴类数据等,不同的数据应选择各自适合的数据类型,如机床开机状态采用bool类型,机床x轴的实际位置应采用double型,时间采用uint或double,主轴转速采用32bit float。
- 指令方面:机床可能需要对其自身的数据进行定时保存、加工运算等,一个个功能要求写成函数的形式等待被调用,以此来操作数据。
在对机床进行抽象时,其组成部分也可以进一步抽象为类,如五轴机床应该将轴也抽象为类,每个轴都包括转速等具体数据信息,由该类通过继承得到直线轴和旋转轴,各轴后续通过实例化便可快速构造。
再如用于通讯的某客户端软件,其主要内容概括为以下几个方面:软件登录界面设计、建立Client、连接Server产生Session、通讯内容可视化、内容保存等。各个功能之间相互独立,应各自抽象为类而不是全部堆砌在一起。登录类包含数据:用户类别int、用户名string、用户密码string、登录状态bool;指令包括:密码验证、界面显示、登录反馈、界面切换等。其他类类似。
总结:大问题可以按一定方式分解为若干小问题,每个小问题在编程上都可由数据+指令解决,在具体抽象为类的过程中应重点思考现实事物向数据的投射,不同的属性投射为不同类型的数据,继而在指令中被访问、改写、传递、显示或保存等,形成该类的方法。