现阶段编程语言极大丰富,以编程思想大致分为面向过程和面向对象两类,前者以C语言作为代表,编程以过程为中心,符合编程人员的直观逻辑,便于理解;后者有C++、C#、Java等,编程以对象为基本程序结构单元,与直观逻辑不同,该方法重难点在于对现实世界的抽象,万物皆可对象,代码整体易维护、易扩展、质量高、效率高。此处重点分析一下对编程和类的认识以及类的抽象思路。

1. 对编程和类的认识

C、C++、C#等编程语言都是图灵完备的,也就是都可以模拟出单带图灵机(数据由读写头在控制器指令作用下产生并记录于纸带,整体围绕数据和指令展开),其基本内容同样是数据和指令。不同的编程语言叫法上略有不同,如C#中称为字段(属性)和方法,但含义相同,此处均称为“数据+指令”。编程的基本思想即对数据的定义和指令作用下数据的使用,整体实现某一特定功能。

“数据”包括了常量、变量、列表、数组等,“指令”则表示对数据进行何种处理。函数、结构体、类都可以看作是对这两部分内容的封装,从这一角度理解类更接近类的本质——类是某一现实事物的抽象,是一组数据和若干指令的集合,前者表示该事物的属性(不同的数据类型代表不同类的属性,可进行不同的运算),后者表示可执行的操作和方法。

2.类的抽象

了解了类的本质,类的抽象便有章可循。将要解决的问题进行拆解(相当于建模),拆成数据加指令,看哪些部分适合投射为数据,投射为哪种数据(由此引入数据类型,数据类型决定了它后续可进行的操作和运算),哪些投射为指令(本质是都是选择判断和循环等基本逻辑组合实现的特定的功能)。

如要设计某智能车间的信息采集系统,面对这个大问题首先考虑到可将机床作为一个类进行设计,后续实例化出多个对象即构成整个车间系统。针对此机床类进行数据和指令的抽象:

  1. 数据方面:机床有诸多属性,如PLC数据、刀具数据、轴类数据等,不同的数据应选择各自适合的数据类型,如机床开机状态采用bool类型,机床x轴的实际位置应采用double型,时间采用uint或double,主轴转速采用32bit float。
  2. 指令方面:机床可能需要对其自身的数据进行定时保存、加工运算等,一个个功能要求写成函数的形式等待被调用,以此来操作数据。

在对机床进行抽象时,其组成部分也可以进一步抽象为类,如五轴机床应该将轴也抽象为类,每个轴都包括转速等具体数据信息,由该类通过继承得到直线轴和旋转轴,各轴后续通过实例化便可快速构造。

再如用于通讯的某客户端软件,其主要内容概括为以下几个方面:软件登录界面设计、建立Client、连接Server产生Session、通讯内容可视化、内容保存等。各个功能之间相互独立,应各自抽象为类而不是全部堆砌在一起。登录类包含数据:用户类别int、用户名string、用户密码string、登录状态bool;指令包括:密码验证、界面显示、登录反馈、界面切换等。其他类类似。

总结:大问题可以按一定方式分解为若干小问题,每个小问题在编程上都可由数据+指令解决,在具体抽象为类的过程中应重点思考现实事物向数据的投射,不同的属性投射为不同类型的数据,继而在指令中被访问、改写、传递、显示或保存等,形成该类的方法。 

浅析编程及类的本质、类的抽象相关推荐

  1. Objective-C基础学习笔记(七)-类的本质与SEL

    一.分类-Category 1.思考:如何在不改变原来类的模型的前提下,扩展分类的方法? 两种方式: 1>继承:子类可继承父类原有的方法,并且增加自己的方法. 2>分类;  可以给某个类扩 ...

  2. 面向对象编程(一):类对象

    概要 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法. ...

  3. day06--java高级编程:多线程,枚举类,注解,反射,网络通讯

    1 Day16–多线程01 1.1 程序概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 1.2 进程 1.2.1 概念 进程(proce ...

  4. 23~49(构造函数+继承+类的本质+ES5中的新增方法)

    1 构造函数和原型 1.1 概述 在典型的OOP的语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前,JS中并没用引入类的概念. ES6,全称ECMAScript ...

  5. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

  6. java定义一个类计算圆的半径,C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计...

    导航:网站首页 > C++编程:定义一个圆类要求属性为半径,操作为计算圆的周长和面积...,java编程:定义一个圆类,属性为半径,方法为对输入的半径计 C++编程:定义一个圆类要求属性为半径, ...

  7. id、构造方法、Category 分类、类的本质、description方法、SEL

    1.id: 万能指针id :id对象不能用点语法.id对象本身已经有 * 了 因此变量名不能有 * . 可以吧id理解为 NSObject * 类型数据! int main() { @autorele ...

  8. Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  9. Day14作业 三、编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包)

    三.编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包) 写一个测试类:创建一个集合,里面装6个学生(有三个班级class01,class02,class03) 例如:list. ...

最新文章

  1. React Axios 请求解决跨域问题
  2. 解决通过vue-router打开tab页,下次进入还是上次history缓存的界面状态的问题
  3. C++实现N选R的实现算法(附完整源码)
  4. re.DOTALL --编写多行模式的正则表达式
  5. 阿里 P8 Java高级架构师,都需要掌握哪些技术栈?
  6. 12月19日绝地求生服务器维护公告,绝地求生12月19日更新到几点 绝地求生正式服更新维护公告...
  7. android获取spinner的值_在Android的Spinner中实现键值对的正确方法是什么
  8. Html元素~~标签学习
  9. JAVA程序设计教程-第2版-雍俊海 介绍以及 PDF+源代码+ppt 下载链接
  10. 浙大PAT练习题1006
  11. compileflow 淘宝工作流引擎
  12. 保护眼睛的颜色和各种背景颜色设置方法
  13. 斗战神单机版正在连接服务器,斗战神登录卡在这里,又不提示登录失败或者连接超时什......
  14. 2015 计蒜之道 初赛 第一场 搜狗输入法的分词算法
  15. 优麒麟系统Ubuntu Kylin的网络配置
  16. java代理一(静态代理)
  17. Python中IO概述
  18. IOC/Di与Aop
  19. 快手智能视频图像编码处理服务架构
  20. 苏州各园林的地址和票价

热门文章

  1. 什么是NoSQL数据库
  2. Amazon vs Google 云服务
  3. java程序员学习路线指南
  4. python高德 查询县_Python和高德开放平台——地名地址空间化及采集POI信息
  5. 计算某个字符出现的次数
  6. python pandas 在现有excel中插入新数据
  7. text-align 和 align的区别
  8. 关于Kurento 和 WebRTC-Kurento学习(一)
  9. 【宋红康 MySQL数据库 】【高级篇】【17】MySQL事务日志:redo、undo
  10. 推荐一款技术人必备的接口测试神器:Apifox