当前位置:首页 > 技术文章 > 正文内容

代码封装是为了什么 怎么封装(一)

arlanguage3个月前 (01-31)技术文章26

很多程序员小白在刚刚踏入职场,做程序开发工作的时候,经常会被项目经理叫去喝茶。

小白,你写的这代码耦合太严重啦,简直没有设计可言,更不要说扩展性和灵活性,所有的功能都定义在一个类里,这样随着功能的增多,代码就越来越复杂。你赶紧把代码拆分一下,各功能进行一下代码封装。

1、那什么是封装呢?

封装,在C语言编程中,大部分时候用一个函数调用(API)将一个复杂过程的细节屏蔽起来,用户不需要了解细节,只需要调用该函数就能实现相应的行为。例如吃饭函数,将盛饭,动筷子,夹菜,张嘴,咀嚼,下咽等细节屏蔽起来,我们只需要调用吃饭函数,默认就实现了一遍这样的流程。

面向对象思想中的封装使用更广泛,即一个对象类(C语言中用结构体代替),需要隐藏用户不需要也不应该知道的行为和属性。用户在访问对象时,不需要了解被封装的对象和属性,就能使用该对象类,同时对象类也应该通过权限设置,禁止用户过多地了解被封装的对象属性与行为。

封装的思想都是为了让用户不需要了解对象过多的细节,就能直接通过API来使用对象,从而达到模块化编程,程序员分工合作,各自负责维护自己负责模块对象细节的作用。这个原则普遍存在于现实生活中,在软件开发领域也始终提倡着。

2、为什么要进行代码封装?

我们写程序是用来解决问题的,而且要解决的是现实中的问题,所以我们需要将现实问题转化为符号化的问题,而现实中的问题是由个体所组成的,所以我们将数据和处理数据的方法封装起来形成一个个体,这个个体在问题里面有专门的功能,比如一张纸可以折叠,一支笔可以写,这样有助于我们以自身的角度进行思考分析,这就是面向对象。如果用面向过程的思路,会导致问题与程序之间的转化不好处理,可能使解决问题出现偏差。

封装的过程,其实就是对事物进行抽象的过程,也是对事物进行认识的过程,我们从开始到现在,封装的层次越来越深,处理的问题也越来越复杂。因为我们需要理清复杂问题的内部规律,从而找出解决问题的办法,而深层次的封装使问题恢复成本来的样子就是一种解决办法。所以说封装是在面对软件复杂度增加,开发过程中遇到各种瓶颈时,为了解决这些问题而提出的,通过封装可以达到模块化编程,程序员分工合作,各自负责维护自己负责模块对象细节的作用。当封装的程度达到了一定的水平,就是面向对象的程序设计思想。

3、什么是面向对象思想,和面向过程有什么不同?

所谓面向对象的思想其实就是一种在代码编写之上的软件系统结构设计的思想,和语言无关,并不是C++或者JAVA 、Python等语言才有的。面向对象思想,是随着软件系统的复杂度越来越高,面对大规模软件系统设计的问题,而提出的一种管理大型软件系统设计的思想。只是在C语言出现时,计算机软硬件系统还在起步阶段,面向对象的思想尚未发展,因而C语言中缺乏面向对象相关的核心关键词语法的支持。而JAVA、Python等一些1990年代之后问世的语言,受到C++语言影响以及面向对象思想的逐渐流行,在语法层面就提供了面向对象的核心关键词支持,可以说在处理面向对象问题上具有先天优势。虽然C语言不支持很多面向对象的核心关键词,但是随着Linux内核,Ffmpeg,Nginx等大规模以C语言编写的开源软件项目的发展与推广,C语言遇到的软件复杂度增加以及系统设计与系统长期维护的问题,与JAVA、C++编程遇到的复杂度问题是想通的。并且,面向对象思想也是由于开发者们在开发过程中遇到瓶颈才提出来的,这些问题,不管是用C语言编程还是JAVA编程,都会客观存在。因而用C语言模拟JAVA等面向对象的语言,采用面向对象的思想进行系统顶层设计是很有必要的。

面向过程与面向对象的思想用途不同,没有好坏之分。面向对象思想更倾向于程序之上的顶层设计与程序系统结构设计,然后真正要实现一个函数细节的时候,还是需要面向过程地分析细节如何实现,需要初始化哪些变量,注册哪些结构,设置哪些寄存器等面向过程的问题。

4、在C语言中实现面向对象的思想

既然面向对象是种思想,任何语言都可以实现,而且这种思想重要的几个特性是封装,继承,多态。那在C语言中如何实现呢?

在正式介绍C语言实现封装,继承和多态事前,先介绍一下C语言中的几个概念和语法。

4.1基本知识

(1)结构体

在C语言中,常把一个对象用结构体进行封装,这样便于对对象进行操作,比如:

strcut Point{

int x;

int y;

};

结构体可以嵌套。因而可以把一个结构体当成另一个结构体的成员,如:

struct Circle {

struct Point point_;

int radius;

};

该结构体与以下定义完全一样(包括内存布置都一样):

struct Circle {

int x;

int y;

int radius;

};

(2)函数指针

函数指针是指针的一种,它指向函数的首地址(函数的函数名即为函数的首地址),可以通过函数指针来调用函数。

如函数:

int func(int a[], int n);

可以这样声明函数指针:

int (*pFunc)(int a[], int n);

这样使用:

pFunc = func;

(*pFunc)(a, n);【或者PFunc(a, n)】

可以用typedef定义一个函数指针类型,如:

typdef int (*FUNC)(int a[], int n)

可以这样使用:

int cal_a(FUNC fptr, int a[], int n)

{

//实现体

}

(3)extern与static

extern和static是C语言中的两个修饰符,extern可用于修饰函数或者变量,表示该变量或者函数在其他文件中进行了定义;static也可用于修饰函数或者变量,表示该函数或者变量只能在该文件中使用。可利用它们对数据或者函数进行隐藏或者限制访问权限。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

扫码进群领资料

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1862.html

标签: nginx ffmpeg
分享给朋友:

“代码封装是为了什么 怎么封装(一)” 的相关文章

Nginx 高可用方案

原文链接:https://www.cnblogs.com/SimpleWu/p/11004902.html准备工作192.168.16.128192.168.16.129两台虚拟机。安装好Nginx安装Nginx更新yum源文件:rpm -ivh http://nginx.org/packages/...

Nginx Lua编程基础

Lua是一门脚本动态语言,并不太适合做复杂业务逻辑的程序开发,但是,在高并发场景下,Nginx Lua编程是解决性能问题的利器。Nginx Lua编程主要的应用场景如下:API网关:实现数据校验前置、请求过滤、API请求聚合、AB测试、灰度发布、降级、监控等功能,著名的开源网关Kong就是基于Ngi...

Nginx如何实现四层负载均衡

静态负载均衡Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块,默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置参数启用,如下所示。./configure --prefix=/usr/l...

轻松搭建基于 Serverless 的 ThinkPHP 应用

ThinkPHP 是什么?ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可...

windows 搭建php运行环境(2024年)

由于需要运行一套cms系统,需要运行php环境,现在开始记录搭建步骤:1、分别下载nginx和php包,然后解压到自己喜欢目录下面2、这里我们使用nginx的反向代理模式的FastCGI server,修改nginx.conf,然后启动或重启nginx。location ~ \.php$ {...

我采访了一位 Pornhub 工程师,聊了这些纯纯的话题

成人网站在推动 Web 发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用 WebSocket 推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在 Web 技术创新的最前沿。最近,我有幸采访了大型成人网站 Pornhub 的一位 Web 开发工程师,了解了相关的...