热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言实现面向对象设计

面向对象设计有诸多优势:可读性强,扩展性强,复用性强。面向对象语言有3大核心技术:1、封装性2、继承性3、多态性主流面

面向对象设计有诸多优势:可读性强,扩展性强,复用性强

面向对象语言有3大核心技术:

1、封装性
2、继承性
3、多态性

主流面向对象编程语言有:java ,c++ , python。很遗憾C语言并不是一个面向对象的语言,但是这并不影响C语言的强大,介绍两个C语言的强大的应用场景:操作系统内核设计,编译器设计。虽然C语言不是面向对象编程语言,但是通过一些设计技巧可以实现面向对象设计。接下来我们研究一下如何用C语言实现面向对象设计,本文将用JAVA语言和C语言进行讲解。

封装性

封装是面向对象编程的核心思想。方法和数据通过封装组成一个整体,封装实现了信息的隐藏(隐藏了数据和功能的实现细节),对象只能通过定义的方法与外界进行信息交流。

JAVA语言和C语言是如何定义一个类,如何封装数据和方法。

JAVA语言中通过类将数据和方法封装起来。接下来声明一个名为鸡的类,鸡类中内部包含两个变量:编号和重量,鸡类中实现3个函数:一个构造方法用于初始化鸡的编号和重量;一个给鸡喂食的方法,喂食后鸡的体重增加;一个查询鸡体重的方法。代码如下**(本文的代码具有连贯性,后面会引用前面的声明):**
在这里插入图片描述
C语言如何实现数据和方法的封装呢?我们可以使用结构体struct ,用C语言实现上述JAVA例程相同功能代码如下:
在这里插入图片描述
上述代码定义了一个结构体,结构体内部包含两个变量:编号和重量,同时还包含3个函数指针:初始化函数指针,喂食函数指针,查询重量函数指针。

JAVA语言和C语言是如何实例对象和操作对象。

JAVA语言实例对象和操作对象,JAVA语言中用new操作符来创建一个对象,创建对象后使用“对象.成员”来调用对象数据和方法,代码如下:
在这里插入图片描述
C语言实例对象和操作对象,C语言使用struct来创建一个对象,创建对象后需要对函数指针进行初始化,完成初始化的对象使用“对象.成员”来调用对象数据和方法,代码如下:
在这里插入图片描述
上述代码例程展示了JAVA和C如何定义一个对象,将数据和方法的封装在对象内部,同时也展示了实例对象和操作对象。

C语言结构体内部不能包含函数只能包含函数指针,因此C语言定义的类相当于JAVA语言中的抽象类。通过封装使得对象方法的工作具体细节对外不可见,外部只能通过调用对象的接口。这样就可以避免一个子系统依赖与另一个子系统。

继承性

继承是面向对象编程技术的一块基石。继承就是子类继承父类的特征和行为,使得子类对象具有父类的属性和方法,此外子类可以定义自己特有的属性和方法,即子类可以对父类进行扩展。继承技术使得程序架构具有一定弹性,增强了程序的复用性,提高了程序的扩展性。

JAVA语言和C语言是如何实现继承。

JAVA语言中通过extends实现继承,假设我们现在需要定义一个母鸡的类,母鸡属于鸡类,所以母鸡有鸡类的所有特性,除此之外母亲还有一个独有的特性:能下蛋。代码如下:
在这里插入图片描述
hen通过extends 继承了chicken的数据和方法,同时hen还定义了母鸡类的独有数据和方法。母鸡类有2个独有的变量:下蛋数量和饲养次数。母鸡类有2个独有的方法:饲养(经过3次饲养后母鸡增加一个蛋),查询下蛋总数的方法。

C语言中如何实现继承,代码如下:
在这里插入图片描述
C语言是通过在结构体内包含另外一个结构体实现继承。子类就完全拥有了父类的数据和方法,同时还能定义独有的数据和方法。

多态性

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是指定义对象和方法在程序运行的不同时刻,可以绑定不同的具体类和具体方法,可以实现多种状态运行。多态性可以从两个方面体现:方法重载,类的上下转型。C语言不支持方法重载和上下转型。

抽象类和接口

JAVA中有两个重要的概念:抽象类,接口。

抽象类

抽象类中可以包含抽象方法(也可以不包含抽象方法),抽象类不能实例化,子类继承抽象父类时需要实现抽象父类中的抽象方法。C语言中定义的类中包含的方法都是抽象方法(函数指针),函数指针可以指向任意符合要求的函数,因此C语言定义的类属于抽象类,使用的时候需要实现函数指针需要指向的函数。

接口

接口类中只能包含抽象方法,接口可以实现多重继承。C语言中可以定义只包含抽象方法(函数指针)的类,C语言定义的类,可以实现多重继承,一个子类可以继承(包含)多个父类。

C语言中使用面向对象设计十分常见,经典例子就是linux中的虚拟文件系统(VFS)。

创作不易希望朋友们点赞,转发,关注。
作者:李巍
Github:liyinuoman2017


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
author-avatar
行玲于諭淑臻
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有