单片机面向什么编程_单片机编程用面向对象编程是否空间占用大 - CSDN
  • 1.在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。 2.在自己写单片机程序时,也许你也是奔溃的,总感觉重新开启一个项目,之前的写过相似的...

    1.在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。
    2.在自己写单片机程序时,也许你也是奔溃的,总感觉重新开启一个项目,之前的写过相似的代码也无法使用,得重新敲,代码重用度不高。编程效率低下。代码无法积累。
    3.而且感觉写这个代码没有思想,没有灵魂,没有框架,只是一个一个功能代码的堆砌,很空泛。

    那么这个时候,我就想在单片机中引入面向对象的思想,使代码更规范。

    引入面向对象的思想有两种方式:

    1.直接使用C++编程,但是不好的是,效率有所降低,有些单片机编译器不支持。

    2.通过C语言引伸出一种写法:

    2.1类(class):

    用来描述具有相同的属性和方法的对象的集合.
    然而C语言中并没有类,但是我们可以跟java一样,通过文件来当做一个类,如有个类叫LCD,那我们就可以用LCD.c来表示有这么一个类,同时在文件中定义一个结构体:struct ScmLCD。
    

    2.2那么面向对象有四个基本特性:

    抽象,封装,继承,多态。
    那么去其中比较有用的主要是封装,继承,多态。
    

    2.3继承

    其中,继承的话,可以使用文件的形式来表示,比如LCD.c这个类在LCD文件夹下,而LCD1602这个对象是LCD的子类,那么在LCD文件夹下还有一个文件夹叫LCD1602,而这个文件夹里有个文件叫LCD1602.c,然后在该文件里定义一个结构体struct ScmLCD1602。那么LCD1602属于LCD的一个型号,所以LCD1602就是继承于LCD.

    2.4封装

    然后是封装的话,封装主要通过一个结构体来封装“成员变量”,当然,安全性还是没有那么高,但是至少可以降低全局变量的滥用,提高可读性,如stLCD这个类有特征边变量:型号,显示的颜色,点数等  动作方法有:显示字符,显示数字等。然后定义几个指针变量void (*get_xxx)()获取特征,通过void (*set_xxx)(char *)来设置特征。
    对于安全性的进一步提高,可以使用static,如静态全局,变量和静态修饰的函数,只能在该文件中调用。
    

    2.5多态

    接下来就是多态了,多态的话,比如说,LCD类有一个  void LCD_ShowChar(char *)的方法,那么LCD的结构体里定义一个结构体指针 void(*LCD_ShowChar)(char *),那么继承类LCD1602只要在.c文件里写一个                   void LCD1602_Showchar(char *)的方法,并在里面写上具体的实现。然后当要调用该类的这个现实方法时,则:
    

    struct ScmLCD stLCD;
    stLCD.LCD_ShowChar= LCD1602_Showchar;
    那么接下来调用stLCD.LCD_ShowChar(“……”);就是调用LCD1602的方法。而如果今天换了一个型号的显示屏甚至主控芯片,那么这个时候则不需要重新编写实现代码,只要在文件夹LCD下增加如LCD12864文件夹,然后增加.c及结构体和实现方法,然后在开头修改stLCD.LCD_ShowChar= LCD12854_Showchar;那么接下来的就是调用LCD12864的方法,其他代码不变,哪天又换回来了,那么再改回stLCD.LCD_ShowChar= LCD1602_Showchar;即可。

    补充:

    单片机代码的需要大规模修改的原因有几个:

    1.PCB布局的变化:

    PCB布局变化主要是IO的变化,然后IO变化一般如果驱动程序是直接对IO操作的话就需要大规模改变代码,那么怎么提升代码的修改效率:可以在每个驱动子类里对IO进行define,那么只需要修改define代码,其他的不变的。

    2.主控芯片的变化:

    如果是主控芯片的变化,那么可能整个编译器或者说芯片内部资源的控制方式都发生变化,那么这个时候如果是按照上面的方法的话,驱动父类和功能类,及核心代码是不用变的,只要修改相应的驱动子类即可。

    3.封装的变化:

    那么封装发生变化,一般要修改IO和该封装的控制方式,即与之前的封装是有同一个父类,那么这个时候只需要添加相应的驱动即可,或者之前有已写好的,只要加入即可。

    4.就是功能指标的变化:

    功能指标的变化,那么一般分为子功能变化和核心功能变化,子功能只需要修改子功能类即可,核心功能修改的话,主要就是执行的顺序,那么这个需要引入队列和多任务机制,那么后续可以根据RTOS系统的一些写法来实现,这样的一个类来通用化

    展开全文
  • 单片机面向对象编程

    2019-08-02 09:28:50
    记录在面向对象的实现方式,做参考未做详细实现细节 01、定义i2c类 typedef struct _class_i2c { GPIO_TypeDef * gpiox; GPIO_Pin_TypeDef sda,scl; void (*pf_start)(class_i2c *object_i2c); void (*pf_...

    00、前提概要

            记录在面向对象的实现方式,做参考未做详细实现细节

    01、定义i2c类

    typedef struct _class_i2c {
        GPIO_TypeDef * gpiox;
        GPIO_Pin_TypeDef sda,scl;
        void (*pf_start)(class_i2c *object_i2c);
        void (*pf_stop)(class_i2c *object_i2c);
        void (*pf_ack)(class_i2c *object_i2c);
        void (*pf_nack)(class_i2c *object_i2c);
        void (*pf_wait_ack)(class_i2c *object_i2c);
        unsigned char (*pf_readwrite)(class_i2c *object_i2c,unsigned char *buf);
    } class_i2c;

    02、实现所需函数

    static void i2c_start(class_i2c *object_i2c){
    }
    
    static void i2c_stop(class_i2c *object_i2c){
    }
    class_i2c i2c;
    i2c.gpiox = GPIOB
    i2c.scl = GPIO_Pin_8;
    i2c.sda = GPIO_Pin_9;
    i2c.pf_start = i2c_start;
    i2c.pf_stop = i2c_stop;
    i2c_config(&i2c);
    i2c_init(&i2c);

     

    展开全文
  • 用C在单片机上实现面向对象,在51和STM32单片机上使用面向对象的编程,第一篇:炫酷地点亮一盏LED灯源码工程,在51和STM32单片机上使用面向对象的编程,第一篇:炫酷地点亮一盏LED灯源码工程
  • 我们学单片机,第一个程序就是点亮一盏LED灯,那么我单片机开启面向对象方式的第一步也是点亮一盏LED灯,这里主要是用到了继承和封装的2个概念;这里我们先讲一下,使用传统的一些LED操作,并分析这些操作有什么问题...

    我们学单片机,第一个程序就是点亮一盏LED灯,那么我单片机开启面向对象方式的第一步也是点亮一盏LED灯,这里主要是用到了继承和封装的2个概念;

    这里我们先讲一下,使用传统的一些LED操作,并分析这些操作有什么问题:

    以前我点亮一盏LED是这样的

    #define LED1 PAout(1)
    #define LED_ON  1
    #define LED_OFF 0
    void LED1_Init()
    {
       ......;//初始化IO口之类的函数
    }
    LED1 = LED_ON; //点亮
    这样写有这么几个问题点击打开链接

    1:我每增加一个灯,就要写一段LED初始化代码,要定义一个端口;

    void  SetLedGPIOCMD(struct CLASS_LED * p, GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
    {
      GPIO_InitTypeDef GPIO_InitStructure;
    
      
      GPIO_InitStructure.GPIO_Pin  = GPIO_Pin ;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOx, &GPIO_InitStructure);
      
      p->_GPIOx = GPIOx;
      p->_GPIO_Pin = GPIO_Pin;
    
      list.AddList(&LED_ListHead,p);
    }

    2:我要实现LED功能的拓展不方便,比如我要实现LED的闪烁;

    所以我现在这样点亮一盏LED灯,以及让它闪烁起来

    首先创建一个结构体,或者我们叫做 定义一个 LED类

    typedef struct CLASS_LED
    {    
      void  (* const  SetLedGPIOCMD)(struct CLASS_LED * p, GPIO_TypeDef* GPIOx, u16 GPIO_Pin);  //设置LED端口
      void  (* const  LED_SetST)(struct CLASS_LED * p,u8 LED_ST);   
      //struct CLASS_LEDBlink * LEDBlink;  //这里是继承了 LED闪烁类,我们下面再来编写,先不看,有需要详细了解的朋友,可以下载工程文件查看源码
      GPIO_TypeDef* _GPIOx;  //LED端口
      u16 _GPIO_Pin;         //LED端口
      u8 _LED_ST; //记录LED灯当前的状态
    }typ_CLASS_LED;

    然后我们来编写相关的函数

    void  SetLedGPIOCMD(struct CLASS_LED * p, GPIO_TypeDef* GPIOx, u16 GPIO_Pin) //初始化LED指定的端口
    {
      GPIO_InitTypeDef GPIO_InitStructure;
    
      GPIO_InitStructure.GPIO_Pin  = GPIO_Pin ;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOx, &GPIO_InitStructure);
      
      p->_GPIOx = GPIOx;
      p->_GPIO_Pin = GPIO_Pin;
    }

    void  LED_SetST(struct CLASS_LED * p,u8 LED_ST)
    {
      switch(LED_ST)
      {
        case LED_ON:
          GPIO_ResetBits(p->_GPIOx, p->_GPIO_Pin);
          break;
        case LED_OFF:
          GPIO_SetBits(p->_GPIOx, p->_GPIO_Pin);
          break;
        case LED_RE:
          GPIO_WriteBit(p->_GPIOx, p->_GPIO_Pin,!GPIO_ReadOutputDataBit(p->_GPIOx, p->_GPIO_Pin));
        default:
          break;
      }
    }  

    然后我们来定义一个宏定义,来给这个结构体赋值(面向对象里面叫实例化这个类)

    #define NewLed()    {            \
      SetLedGPIOCMD,                 \    //这里我们把上面定义的函数名赋值过来,也就是 赋值函数指针
      LED_SetST,                     \
      NULL,                          \
      0,                             \
      0,                              \
      0\
    } 

    好了,这些我们就来创建(实例化)这个LED对象,以及操作它

    typ_CLASS_LED  led0 = NewLed();  //创建了一个led0的对象
    led0.SetLedGPIOCMD(&led0, GPIOB, GPIO_Pin_5); //设置指定的端口,这样是不是很方便,不用重新去写了,这就是面向对象的一个思维,把很类似的代码提取出来,减少代码的重复率
    led0.LED_SetST(&led0,LED_ON);//点亮led0, 这样逻辑是不是很清楚,而且你想要增加功能,就往结构体里面增加相关的方法,比如你可以增加blink功能

    好了,这下我们就完成了点亮一盏LED灯,虽然代码量比传统的大了很多,一开始也会觉得比较复杂,但是你想一下 我们以后这样操作就可以了,想要增加一个LED,只要定义一个LED对象,然后指定其端口就可以随意操作了(比较起来,好像传统的方式也可以,但是这主要是一个思维上的进步,这里的进步主要体现在封装的概念,而且你要想拓展都很方便,而且逻辑很清楚),在实际的工程中,功能增加了很多,比如继承了led_blink类,比如使用了链表结构


    第一篇,写的很多地方可能不是很清楚,以后尽量把它理顺吧。。。有兴趣的请看源码工程,我随后上传。。。里面有操作说明和相关注释,有什么问题欢迎交流

    第一篇相关工程源码下载:https://download.csdn.net/download/qq_32079231/10387107


    展开全文
  • 面向过程编程(procedure oriented Programming)(POP) 面向对象编程(object oriented programming)(OOP) 函数式编程(functional programming)(FP) 2、解释 面向过程编程就是分析出解决问题所需要的步骤,...

    1、概念

    面向过程编程(procedure oriented Programming)(POP)

    面向对象编程(object oriented programming)(OOP)

    函数式编程(functional programming)(FP)

    2、解释

    面向过程编程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    面向对象编程是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

    我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

    而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。

    我们首先要搞明白计算机(Computer)和计算(Compute)的概念。

    在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。

    而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。

    对应到编程语言,就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

    函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

     

    3、举例

    例子1

    例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。

    而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

    可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

    功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

    再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。

    当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性可扩展性

    例子2:

    用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

    蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

    蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

    到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

    盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。 
       
    看了这篇文章,简单的总结一下!

    面向过程

    优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 
    缺点:没有面向对象易维护、易复用、易扩展

    面向对象

    优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 
    缺点:性能比面向过程低
     

     

    展开全文
  • 从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有文章来源于项目实战,属于原创。 阅读说明:...

    感谢阅读本文,在接下来很长的一段时间里,我将陆续分享项目实战经验。从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有文章来源于项目实战,属于原创。

    阅读说明:

    1、Keil4 C51工程网址:
    https://yunpan.360.cn/surl_yrNkQSrCKyc
    2、需要一定的C语言基础,才看得懂此文。

    一、面向对象
    面向对象是软件开发方法,是相对于面向过程来讲的。通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式
    单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。

    二、知识说明
    1、结构体
    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
    常用的定义方法:
    typedef struct
    {
    变量;
    指针;
    函数指针;
    } 结构体名称_t;

    2、指针
    指针是地址,指向内存中的变量。
    常用的定义方法:数据类型 * 指针名;

    3、函数指针
    函数指针是指向函数的指针变量。
    常用的定义方法:返回值类型 ( * 指针变量名) ([形参列表]);

    三、编程说明
    1、主函数如下:
    在这里插入图片描述
    系统初始化后,进入主循环,通过结构体调用system文件的函数。

    2、结构体类型定义
    在这里插入图片描述
    定义1个变量与2个函数指针。
    在这里插入图片描述
    串口类型定义方法,通过结构体,将串口进行封装。

    3、结构体变量定义

    在这里插入图片描述
    定义结构体变量,并进行初始化。 对于函数指针,在c文件中定义函数,再将函数名赋值给函数指针,这样,就可以通过结构体的函数指针调用c文件中的函数。

    4、运行函数
    在这里插入图片描述
    由于使用结构体的函数指针调用函数,函数可以声明为static类型,安全性更好。

    五、小结
    单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。
    面向对象编程的知识点很多,本文只是简要的介绍了下,仅仅起到抛砖引玉的作用,日后设计过程中,需要不断的总结经验,沟通交流,以达到真正的理解,灵活运用。

    欢迎加入硬件家园单片机学习群,群号925620931,别具一格的单片机免费教学,以产品为导向,一起做项目。
    开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号。
    硬件家园 yjjy168168168

    在这里插入图片描述

    作者:刘杰,软硬件技术10年,全职提供技术开发与技术服务、生产支持等。

    展开全文
  • 它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)三个大的步骤。 1、首先是分析需求,先不要思考怎么用程序实现它,先分析需求中稳定不变的客体都是些什么,这些客体之间的关系是什么。 ...
  • 编程语言分为面向过程编程、函数式编程面向对象编程。其实python就是一种面向对象编程,那么我们先了解一下它们的特点和优缺点以及它们的区别是什么面向过程编程:“面向过程”(Procedure Oriented)是一种以...
  • 首先说明一下写这篇文章的由来,最初的目的就是为了解决实际工作中的几个问题本人从事单片机工作以来,遇到以下一些想死的情况:1:面对客服今天一个需求明天一个需求2 : 功能需求不明确,随时需要修改3:一个代码量...
  • 面向对象编程(Object Oriented Programming),简称OOP。是java程序设计的核心,也是java web应用开发的核心。主要有三个概念:封装,继承,和多态。 简要阐述下三个概念:1、封装:封装是OOP语言的优点之一。把一...
  • 在完成了实验一和实验二,并进行了大量关于面向对象代码的编写后,我对面向对象这一编程思想有了更加深刻的认识。 二、比较面向过程编程面向对象编程 面向过程编程 对于面向过程编程我没有能很好地说出它的优点。...
  • 单片机什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言。 这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为什么这些语言不能用来编写单片机程序呢?那么这个问题...
  • 面向过程编程 概念 面向过程编程  POP(Process-oriented programming)即在编程的时候分析出解决问题所需要哪些步骤,然后用函数把这些步骤一步一步(step by step)实现,当轮到这个步骤的时候再进行一次调用...
  • 单片机编程魔法师之高级裸编程思想》以单片机裸环境为基础,为编程者定义了一个微操作系统(MOS)的编程环境,并面向应用中不断提高的需求对编程策略进行了深度剖析与研究,从而分离出数据驱动、并行多任务、面向...
  • 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现 ,使用的时候再一个一个的依 次调用就可以了。 面向对象编程OOP (Object Oriented ...
  • 单片机编程魔法师之高级裸编程思想单片机编程魔法师之高级裸编程思想单片机编程魔法师之高级裸编程思想单片机编程魔法师之高级裸编程思想 《单片机编程魔法师之高级裸编程思想》以单片机裸环境为基础,为编程者定义...
  • 这个面试问题让我想到了面向过程与面向对象编程的区别,咱们先简单了解下这两者定义上区别: 面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 ...
  • 面向对象编程

    2019-06-16 23:17:30
    这些都是以什么正在发生为目标进行编程,不同于面向对象的是谁在受影响。于面向对象明显 的不同就是封装,继承和类。 2.特点: 模块化 , 流程化 3.优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大...
  • 百度百科关于面向过程 以及面向对象的解释:面向过程(Procedure Oriented)是一种以过程为中心的编程思想。面向过程也可称之为面向记录编程思想,他们不支持丰富的面向对象特性(比如继承、多态),并且它们不允许...
  • 面向对象编程介绍及其三大特性面向对象编程介绍面向过程编程函数式编程面向对象编程面向对象编程三大特性对象和类定义类将类转换成对象封装构造方法继承继承实现继承继承的工作机制重写父类方法调用父类的方法多继承...
1 2 3 4 5 ... 20
收藏数 7,398
精华内容 2,959
关键字:

单片机面向什么编程