当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]来源:菜鸟教程、立功科技、百度百科 面向对象&&面向过程 1、什么是面向过程编程? 比较官方的解释就是:“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。C语言就

来源:菜鸟教程、立功科技、百度百科

面向对象&&面向过程

1、什么是面向过程编程?

比较官方的解释就是:“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。C语言就是一门面向过程的语言。

2、什么是面向对象编程?

比较官方的解释就是:面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。

OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。C++就是一门面向对象的语言。

3、例子

假如要乘出租车去机场。

面向过程的方式是:告诉司机,按照启动、右转、左转、停止等单独的接口去机场。这种方式需要乘客对自己的行为负责,乘客需要知道每个城市去机场的路线。

面向对象的方式是:告诉司机,请载我去机场。显然这种方法比面向过程的方法要容易得多。

在面向过程编程时,由于主程序承担的责任太多,要确保一切正确工作,还要协调各个函数并控制它们的先后顺序,因此经常会产生非常复杂的代码。

很多时候变化是不可避免的,而功能分解法(面向过程思想)却又无法应对可能出现的变化。一旦修改代码,则bug越来越多。

因此,面对复杂的软件开发时,主程序不能做太多的事情,必须通过分离关注点进行职责转移。

在上面的例子中,尽管具体实现在广州、北京或上海等不同城市中是不同的,但在任何城市都可以这么说,因为司机知道怎么去机场,这就是职责转移

面向对象程序实例

因为C++是一门面向对象的语言,所以C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态

1、一些基本概念

  • 类 - 类可以定义为描述对象行为/状态的模板/蓝图。
  • 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
  • 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。

2、类 && 对象

代码:

#include <iostream>
 
using namespace std;

/* Box类 */ 
class Box
{

   public:
      double length;   // 长度
      double breadth;  // 宽度
      double height;   // 高度
};
 
int main( )
{
   Box Box1;             // 声明 Box1,类型为 Box
   Box Box2;             // 声明 Box2,类型为 Box
   double volume = 0.0;  // 用于存储体积
 
   // Box1对象
   Box1.height = 5.0
   Box1.length = 6.0
   Box1.breadth = 7.0;
 
   // Box2对象
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
 
   // box 1 的体积
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Box1 的体积:" << volume <<endl;
 
   // box 2 的体积
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Box2 的体积:" << volume <<endl;
   return 0;
}

运行结果:

3、继承

当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类

继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。

代码:

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{

   public:
      void setWidth(int w)
      
{
         width = w;
      }
      void setHeight(int h)
      
{
         height = h;
      }
   protected:
      int width;
      int height;
};
 
// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      

         return (width * height); 
      }
};
 
int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;
 
   return 0;
}

运行结果:


这里只是演示了最基本的一个继承的例子,关于C++继承相关的还有公有继承(public)、保护继承(protected)、私有继承(private)、多继承等知识点,大家可以自己去学习。

4、多态

多态按字面的意思就是多种形态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

下面的实例中,基类 Shape 被派生为两个类,如下所示:

#include <iostream> 
using namespace std;

// 基类  
class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0int b=0)
      {
         width = a;
         height = b;
      }
      virtual int area()
      
{
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

// 派生类Rectangle
class Rectangle: public Shape{
   public:
      Rectangle( int a=0int b=0):Shape(a, b) { }
      int area ()
      

         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};

// 派生类Triangle
class Triangle: public Shape{
   public:
      Triangle( int a=0int b=0):Shape(a, b) { }
      int area ()
      

         cout << "Triangle class area :" <<endl;
         return (width * height / 2); 
      }
};

// 程序的主函数
int main( )
{
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);
 
   // 存储矩形的地址
   shape = &rec;
   // 调用矩形的求面积函数 area
   shape->area();
 
   // 存储三角形的地址
   shape = &tri;
   // 调用三角形的求面积函数 area
   shape->area();
   
   return 0;
}

运行结果:

5、抽象

数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。

让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,并最终显示在屏幕上。

因此,我们可以说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理,直接通过它的外部接口(比如电源按钮、遥控器、声量控制器)就可以操控电视。

代码:

#include <iostream>
using namespace std;
 
class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      
{
          total += number;
      }
      // 对外的接口
      int getTotal()
      
{
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);
 
   cout << "Total " << a.getTotal() <<endl;
   return 0;
}


6、封装

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

class Box
{

   public:
      double getVolume(void)
      
{
         return length * breadth * height;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

变量 length、breadth 和 height 都是私有的(private)。这意味着它们只能被 Box 类中的其他成员访问,而不能被程序中其他部分访问。这是实现封装的一种方式。

猜你喜欢

C语言、嵌入式重点知识:回调函数

深度实践嵌入式调试神器MicroLab

空间换时间,查表法的经典例子


免责声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

为了便于公众号读者交流学习,小编创建了相关相关交流群。坑位有限,感兴趣的朋友可以扫码下方二维码加我微信,由我邀请入群:

欢迎大家进群交流、共同进步。同时,我也会关注一些大家问的一些问题,从中挑选一些具有代表性的、并且在我知识范围内的问题写出相关文章做分享。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

python语言不止三特点,其全部特点为简单易学、高级语言、解释型语言、可移植性、面向对象、强大的功能、开源、可扩展性、丰富的库、规范代码。

关键字: python语言 开源 面向对象

面向对象技术 (Object-Oriented Technology)面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。...

关键字: 面向对象 抽象性 封装性

SystemVerilog引入了面向对象的思想。对象句柄为语言提供了一种安全的、类似于指针的机制。类提供了继承和抽象建模的能力,这就将不带有任何类型安全性问题的C函数指针的优点引入到了SystemVerilog中,因此它...

关键字: System 面向对象

关注星标公众号,不错过精彩内容来源|果果小师弟在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。自己写单片机程序时,也许你也是奔溃的。总感觉重新开启一个项目,...

关键字: 单片机 面向对象

摘要:在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。自己写单片机程序时,也许你也是奔溃的。总感觉重新开启一个项目,之前的写过相似的代码也无法使用,得重新敲...

关键字: 单片机 面向对象

C和C++的最大区别便是,C++有类,C没有类的概念。单单这一个类使得C缺失很多的东西。好在C有结构体,勉强可以当0.1个类来使用。

关键字: C语言 面向对象

笔者能力有限,如果文中出现错误的地方,欢迎大家给我指出来,我将不胜感激,谢谢~同时如果各位朋友对于状态机还有不同的想法,笔者也很希望能够互相交流,微信二维码在公众号底部获取。 状态机的概念 有限状态机又称有限状态自动机,...

关键字: 有限状态机 面向对象

来自:冰河技术 前言 面向对象思想与并发编程有关系吗?本来二者是没有什么鸟关系的!它们是分属两个不同的领域,但是,Java却将二者融合在一起了!而且融合的效果不错:我们利用Java的面向对象的思想能够让并发编程变得更加简...

关键字: 面向对象 BSP PUBLIC LOWER

    OC和C++对C的扩展最重要的当然就是“面向对象”了,学习了C++对面向对象自然对面向对象一点也不会感到陌生了,可能还觉得有点亲切呢,陌生的语言中看到熟悉的词,你说亲不亲切啊!面向对象的几个重

关键字: objective-c 面向对象

学习了何红辉、关爱民写的《Android设计模式》,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下什么是接口隔离原则 接口隔离的目的就是将庞大的接口拆分成更小的或者说更具体的接

关键字: 接口隔离 面向对象
关闭
关闭