当前位置: 首页 > news >正文

[架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法

目录

前言:

一、概述: 软件聚合的程度由简单到复杂

二、主要开发方法详见

2.1 结构化的开发方法

2.2 面对对象的开发方法

2.3 面向服务的开发方法

2.4 面向组件的开发方法

三、不同开发方法比较

3.1 结构化开发方法

3.2 面向对象(OOP)开发方法

3.3 面向服务开发方法

3.4 面向组件开发方法

3.5 组件与服务,哪个的粒度更大


前言:

软件开发方法(纵向):研究组织、管理、复用软件代码的方法。

一、概述: 软件聚合的程度由简单到复杂

软件开发方法(Software Development Methodologies)指的是软件开发全生命周期过程中采用的具体方法、技术、工具和过程等。

软件开发方法可以帮助开发团队规范全生命周期的开发过程提高开发效率和质量、实现代码可重用等目标。

软件的开发方法,随着软件规规模变得越来越大而逐步演进的。

软件开发方法是指在软件开发过程中用于组织、管理软件代码完成开发任务具体方法论和实践方式。不同的软件开发方法有不同的特点和适用场景。

软件开发方法和编程语言的发展密不可分,下面以五种常见的软件开发方法为例,简单介绍它们与编程语言发展的关系

  1. 无结构化方法(语句):无结构化方法是早期的软件开发方法,应用于早期的编程语言,如机器语言、汇编语言等,这些编程语言没有明确的语法规则和结构形式,因此使用无结构化方法进行开发。但是,由于无结构化方法的缺点显著,现在基本不再使用

  2. 结构化开发方法(函数):随着高级编程语言的发展,结构化开发方法兴起了。结构化开发方法常与结构化编程语言如 C、Pascal等一起应用。这些编程语言强调代码结构化,通过控制流和数据结构等方式使程序更容易阅读和维护

  3. 面对对象方法(方法与数据的聚合):面对对象方法与面向对象语言发展起来。现代的面向对象编程语言如Java、C#、Python、Swift支持面向对象编程。同时,这些语言都支持面向对象方法的特性,如封装、继承、多态等,使得面向对象方法可以更好地运用。

  4. 面向服务的方法(一组静态对象或函数的单一功能):面向服务的方法的兴起得益于 Web 服务技术的发展。它通常结合使用服务描述语言,如WSDL、SOAP和REST等,这些语言与XML相结合,使得不同的编程语言之间可以互相通信。同时,现代编程语言如Java、.NET等都提供了对 Web 服务的支持。

  5. 面向组件的方法(一组静态对象或函数的多重功能):随着互联网技术的发展和软件架构演进,面向组件的方法得以广泛应用。同时,支持组件技术的编程语言和框架也相应出现,如Java EE、.NET 等,它们提供了丰富的组件库和接口规范。

综上所述,软件开发方法与编程语言的发展是相互促进的,它们共同推动了软件工程的发展和进步。

备注:

原型法并非是组织、管理、复用软件代码的方法。

二、主要开发方法详见

2.1 结构化的开发方法

结构化的开发方法是一种以逻辑(水平)和层次化(垂直)的方式进行软件开发的方法。它强调将软件系统划分为不同的模块,并使用明确的规则和标准来定义模块之间的接口和依赖关系。

以下是结构化的开发方法的主要特点和步骤:

特点:

  1. 模块化:将系统功能划分为多个模块,每个模块负责完成特定的任务。
  2. 顺序性:按照特定的顺序依次进行需求分析、系统设计、编码和测试等开发阶段。
  3. 结构化编程:编写结构化的、可读性强的程序,使用顺序、选择和循环等结构化语句。
  4. 抽象和封装:通过抽象和封装将模块内部的细节隐藏起来,提高代码的可维护性和可重用性。

步骤:

  1. 需求分析:明确系统的需求和目标,定义系统的功能和性能要求。
  2. 系统设计:根据需求分析的结果,设计系统的架构和模块划分,确定模块之间的接口和数据流。
  3. 编码:根据系统设计,将每个模块分别实现,编写结构化的、可读性强的代码。
  4. 测试:对每个模块进行单元测试,确保各个模块的功能和接口符合设计要求。
  5. 集成测试:将所有模块集成到一起,测试整个系统的功能和性能。
  6. 调试和优化:对系统进行调试和性能优化,修复错误和改进效率。

结构化的开发方法提供了一种清晰、有序的开发流程,使得软件系统更易于维护、扩展和理解。然而,随着软件开发的复杂性和需求的变化,结构化的开发方法在某些情况下可能显得过于刻板和不灵活。因此,在实际开发中,结构化的方法可能与其他方法结合使用或为基础,以满足不同项目的需求。

2.2 面对对象的开发方法

面向对象的开发方法是一种以对象为中心思想的软件开发方法。它将现实世界中的实体抽象为对象,并通过封装、继承和多态等概念来描述对象之间的关系和行为。以下是面向对象开发方法的主要特点和步骤:

特点:

  1. 封装:将数据和对数据的操作封装在对象中,实现数据的隐藏和保护性。
  2. 继承:通过继承关系,让一个对象可以继承另一个对象的属性和方法,以实现代码的复用和扩展。
  3. 多态:同一种操作可以在不同的对象上呈现不同的行为,提高系统的灵活性和可扩展性。
  4. 抽象和接口:通过抽象类和接口,对一组对象进行统一的定义和约束,降低代码耦合性。

步骤:

  1. 需求分析:明确系统的需求和目标,定义对象的属性和行为。
  2. 类设计:根据需求分析的结果,确定所需的类,设计类的属性和方法,并建立类之间的关系。
  3. 类编码:根据类设计,编写具体的类代码,实现类的属性和方法。
  4. 类测试:对每个类进行单元测试,确保类的功能和接口符合设计要求。
  5. 集成测试:将所有类集成到一起,测试整个系统的功能和交互性。
  6. 调试和优化:对系统进行调试和性能优化,修复错误和改进效率。

面向对象的开发方法提供了一种更为灵活、可扩展和可维护的开发方式。它使得软件系统的设计和实现更贴近现实世界的情境,提高了代码的可读性和可维护性。同时,面向对象的开发方法也提供了更好的代码复用和模块化的支持,使得开发团队可以更高效地开发和维护软件系统。

常见的面向对象的编程语言包括Java、C++、C#、Python和Ruby等,这些语言提供了丰富的面向对象的特性和语法,使得开发人员能够更方便地应用面向对象的开发方法。

2.3 面向服务的开发方法

面向服务的开发方法是一种以服务为中心思想的软件开发方法。它将现实世界中的功能和服务抽象为独立的服务(Service),通过服务的组合和调用来满足软件系统的需求和目标。以下是面向服务开发方法的主要特点和步骤:

特点:

  1. 服务化:将系统的功能和服务模块化,设计和实现独立的服务。
  2. 标准化:定义服务的接口和协议,实现服务的可互操作性和可组合性。
  3. 松耦合:服务之间的耦合度要尽可能地低,以实现服务的独立性和可替换性。
  4. 可组合性:通过服务的组合和调用,实现软件系统的构建和业务流程的组合。

步骤:

  1. 需求分析:明确系统的需求和目标,定义所需的功能和服务。
  2. 服务设计:根据需求分析的结果,确定所需的服务,设计服务的接口和行为,并建立服务之间的关系。
  3. 服务实现:根据服务设计,编写具体的服务代码,实现服务的功能和接口。
  4. 服务发布:将服务部署到服务容器中,发布服务以供其他服务或客户端调用。
  5. 服务集成和调用:将不同的服务组合和调用起来,实现业务流程的完整性和可组合性。
  6. 调试和优化:对系统进行调试和性能优化,修复错误和改进效率。

面向服务的开发方法提供了一种更为灵活、可扩展和可组合的开发方式。它通过服务的复用、标准化和组合,实现了更高效、更快速的软件开发和集成。同时,面向服务的开发方法也需要满足服务的标准化和协同化,需要考虑服务之间的接口和兼容性等问题。

目前,许多技术平台和框架支持面向服务的开发方法,比如SOAP、REST、SOA、微服务等。它们提供了服务的标准化和支持,确保了服务之间的兼容性和协同性。

2.4 面向组件的开发方法

面向组件的开发方法是一种以组件为中心思想的软件开发方法,它将现实世界中的实体抽象为组件,并通过组件的封装、复用、替换来描述软件系统中的各种功能和服务。以下是面向组件开发方法的主要特点和步骤:

特点:

  1. 组件化:将软件系统拆分为独立的组件,每个组件都有独立的功能和接口。
  2. 封装:将组件的实现细节隐藏在内部,只提供公共的接口,实现信息的保护和安全性。
  3. 复用:通过对现有的组件进行组合和复用,实现功能的快速开发和提高软件质量。
  4. 可替换性:组件的独立性和接口标准化,使得可以方便地进行组件的替换和升级。

步骤:

  1. 需求分析:明确系统的需求和目标,定义所需的功能和服务。
  2. 组件设计:根据需求分析的结果,确定所需的组件,设计组件的属性、接口和行为,并建立组件之间的关系。
  3. 组件实现:根据组件设计,编写具体的组件代码,实现组件的属性和方法。
  4. 测试与集成:对每个组件进行单元测试,确保组件的功能和接口符合设计要求。然后进行组件之间的集成测试。
  5. 调试和优化:对系统进行调试和性能优化,修复错误和改进效率。

面向组件的开发方法提供了一种更灵活、更可重用、更易于维护和升级的开发方式。它使得软件系统的实现更加模块化,提高了开发效率和可重用性,并可以降低开发成本和风险。同时,面向组件的开发方法也需要满足组件的标准化和协同化,需要考虑组件之间的接口和兼容性等问题。

目前,许多技术平台和框架支持面向组件的开发方法,比如.NET、Java EE和Spring等。它们提供了组件的标准化和支持,确保了组件之间的兼容性和协同性。

三、不同开发方法比较

3.1 结构化开发方法

结构化开发方法把大型系统看成是由多个小部分组成的,利用逐步细化、模块化和自顶向下的设计方法进行分治处理,使得每个模块相互独立、模块内部结构清晰、关注点分离,从而可以更好地管理和维护软件系统。

优点:

  1. 简单易学,适合小规模项目。
  2. 可以提高软件开发的效率并减少错误发生的可能。
  3. 容易理解和验证,更加规范化和可控。

缺点:

  1. 难以扩展,可维护性较低,难以适应大规模软件系统的开发。
  2. 需要大量文档和细致的设计,花费更多的时间和精力。
  3. 面向过程,面向需求可能不足。

3.2 面向对象(OOP)开发方法

面向对象开发方法通过将程序代码划分为对象,对代码进行分层和抽象,以实现程序模块化、代码重用和可维护性管理等特点,更加侧重于数据抽象、继承和多态性等概念。

优点:

  1. 软件重用性高,提高软件的维护性和可扩展性。
  2. 代码结构清晰,具有高内聚、低耦合等优点,便于代码管理。
  3. 面向对象这种编程范型更合理地体现了现实世界。

缺点:

  1. 对象之间关系难以理解,可移植性不强。
  2. 由于面向对象开发方法强调数据抽象、继承、多态等特性,因此程序可以变得过于复杂,增加了程序的难度。
  3. 学习成本较高,需要掌握面向对象开发方法的特殊语言和编程思想。

3.3 面向服务开发方法

面向服务开发方法将软件系统划分为多个独立、互相协调的服务单元,服务通过定义标准接口之间进行相互调用、通信和集成,以实现业务流程和目标。

优点:

  1. 可以提高软件系统的可重用性和可扩展性,降低软件开发成本和维护成本。
  2. 可以更加便于系统的扩展和管理,实现广泛的集成和互操作。
  3. 面向流程和业务需求的方法更加接近现实用户需求,增加了软件系统的可用性。

缺点:
1.

不同开发方法比较:结构化、面对对象、面向组件、面向服务

接上文:

缺点:

  1. 需要专业的人员来设计和实现服务架构,需要一定的技术和管理能力。
  2. 需要依赖于网络的通信和调用环节,可能存在延迟和错误等问题。
  3. 面向服务的开发方法要求对软件系统的模块化程度和架构思想有深刻理解,对开发人员的要求较高。

综上所述,不同的开发方法都有其优缺点和适用范围。在选择开发方法时,需要根据项目的规模、复杂度和需求等考虑因素来选择最适合自己的方法。常见的做法是采用不同方法的混合模式,根据实际需要选择使用不同的开发方法来开发软件系统,以最大限度地发挥其优势。

3.4 面向组件开发方法

面向组件开发方法是一种基于编写和使用独立模块化组件的方式进行软件开发,模块化程度更高,具有高度可重用性和可移植性,并且具有独立的接口和行为。

优点:

  1. 提高了软件的可重用性,降低了开发成本和编码量。
  2. 降低了软件的维护成本,使得程序更加的独立可扩展性更强,降低软件复杂度。
  3. 适用于大规模系统开发,更好地利用了现有的组件和资源。

缺点:

  1. 需要大量的组件库和组件配置,开发成本较高。
  2. 组件的互换性和兼容性可能受限,程序运行稳定性等因素需要加以考虑。
  3. 组件开发和管理需要专门的开发人员和产品经理进行设计和实施。

3.5 组件与服务,哪个的粒度更大

在软件开发中,组件和服务的粒度主要取决于其功能可复用性。一般情况下,组件的粒度比服务更大,因为组件通常是独立、可复用的模块,它们可以提供多种不同的功能。而服务则更多地关注于某种特定的功能或服务,其粒度相对较小。

例如,一个用户管理模块可以被视为一个组件,它可以包含用户信息管理、用户权限管理、用户组管理等多个子模块。而将修改用户密码的功能抽象出来作为一个服务,则更为合适。

另一方面,有些服务的粒度也可以很大,尤其是在分布式系统中,服务可能涉及多个模块或者包含多个子服务,其中每个子服务都可以被视为一个独立的服务

综上所述,组件和服务的粒度没有绝对的先后之分,它们的具体粒度取决于实际的需求和设计。在实际开发中,我们需要根据实际需求来判断何时将某个功能封装为组件,何时将其实现为服务,以及组件和服务之间的交互方式等。

相关文章:

[架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法

目录 前言: 一、概述: 软件聚合的程度由简单到复杂 二、主要开发方法详见 2.1 结构化的开发方法 2.2 面对对象的开发方法 2.3 面向服务的开发方法 2.4 面向组件的开发方法 三、不同开发方法比较 3.1 结构化开发方法 3.2 面向对象(OOP)开发方法 3.3 面向服…...

Qt窗体自动销毁

Qt中通过对象树的方式,实现了窗体自动析构,只要我们使用得当,就能免去自己去释放窗体对象的内存,但是我们得清楚Qt窗体自动析构的机制,什么情况下能够自动析构,什么情况不能。操作不当的情况可能造成内存泄…...

制造业企业设备管理常见的三个问题及对应的解决方案

当今的市场如同茫茫大海,既充满机遇,也伴随着波动的风险。在现代制造业中,企业常常面临着各种挑战,这些挑战可能妨碍其发展和竞争力。但制造企业往往具备能够解决挑战的能力,借助软件工具的力量,可以更好地…...

linux文件目录

/bin 二进制可执行命令。该目录下存放着普通用户的命令 /boot 启动Linux的核心文件 /data 用户用于存放日志等数据的目录 /dev 系统的设备文件,即设备的驱动程序 /etc 系统所有的配置文件都在这个目录中 /home 用户主目录的基点 /lib 存放着和…...

流量卡是什么?流量卡为什么有虚量,51物联卡带你全面了解一下。

上个月在网上买了一张流量卡,用了之后才发现剩余流量和套餐不符,这种流量是虚的吗?还有必要接着使用吗?这是一个网友跟小编私信咨询的一个问题。 ​ 其实流量卡流量和套餐不符,这个问题是比较常见的一个问题&#xff…...

浅谈电力物联网时代物联网技术在电力系统中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定201801 摘要:在电力系统建设中,物联网的应用不仅促进了我国电力工业的发展,而且对我国的物联网技术也起到了一定的促进作用。随着物联网技术应用于电力系统,推动了中国工业的快速发展。因…...

HTTP 状态代码 (Winhttp.h)

文章目录 对开发者有什么帮助状态码产生要求WinHTTP状态码推荐阅读 Microsoft Windows HTTP Services (WinHTTP) 的用户应使用最新版本的技术版本 5.1。 版本 5.0 不再受支持。 对开发者有什么帮助 HTTP状态代码(HTTP status codes)是Web开发中的标准返…...

开槌在即:陈可之油画|《赞红梅》

《赞红梅》 尺寸:38x30cm 陈可之2020年绘 “墙角数枝梅,凌寒独自开。遥知不是雪,为有暗香来。”梅花,迎雪吐艳,严寒飘香,被视为坚忍不拔、自强不息等精神品质的象征物。文学艺术史上,有众多以“…...

C++内存分配 new 和 delete

在 C 语言中,可以用库函数 malloc() 来分配内存;在 C 中仍然可以这样做,但 C 还有更好的方法——new 运算符 语法 类型* 指针名 new 类型;//可以赋初值 类型* 指针名 new 类型(初值); 类型* 指针名 new 类型{初值};//连续空间 类型*…...

蓝桥云课--1014 第 1 场算法双周赛

2-数树数【算法赛】&#xff08;找规律&#xff09; 一、题目要求 二、思路 由此可以推导出来&#xff0c;当s[i]L时&#xff0c;下一个编号当前编号*2-1&#xff1b;当s[i]R时&#xff0c;下一个编号当前编号*2&#xff1b; 三、代码 #include<bits/stdc.h> #define…...

管理类联考——写作——技巧篇——书写标点符号使用要求规范文档

写作答题卡书写标点符号使用要求规范文档 常用标点符号有逗号、句号、叹号、问号等 11 种&#xff0c;下面一一列举其用法和书写规范。 一、句号 用法&#xff1a;用于陈述句的末尾。 占格情况&#xff1a;占一格&#xff0c;写在格子左下方。 举例&#xff1a; 我看见妈妈走…...

快速解决mfc140u.dll丢失问题,找不到mfc140u.dll修复方法分享

在计算机使用过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是某些dll文件丢失。最近&#xff0c;我就遇到了一个关于mfc140u.dll丢失的问题。mfc140u.dll是Microsoft Foundation Class&#xff08;MFC&#xff09;库中的一个动态链接库文件&#xff0c;它包…...

福建地区等保测评怎么做

福建地区等保测评怎么做&#xff1f;福建地区等保测评是指在福建地区对网络安全等级保护进行评估的过程。网络安全已经成为现代社会一个重要的议题&#xff0c;各个行业和领域都面临着越来越多的网络安全风险和威胁。为了保护信息系统的安全性和可靠性&#xff0c;各地区都制定…...

mysql数据库的备份和恢复

目录 一、备份和恢复 1、备份&#xff1a; 2、备份的方法&#xff1a; 2.1物理备份&#xff1a; 2.2、逻辑备份 2.3增量备份&#xff1a; 一、备份和恢复 1、备份&#xff1a; 先备份再恢复 备份&#xff1a;完全备份&#xff0c;增量备份 完全备份&#xff1a;将整个…...

动态IP和静态IP哪个安全,该怎么选择

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全问题。其中&#xff0c;IP地址作为网络通信中的重要组成部分&#xff0c;也成为了人们关注的焦点。 在IP地址中&#xff0c;动态IP和静态IP是两种不同的分配方式&#xff0c;它们各自具有不同的特点&#xff0c;那么…...

linux复习笔记03(小滴课堂)

find命令&#xff1a; d查找目录&#xff1a; 按照文件权限查找&#xff1a; 600全部权限&#xff1a; -user根据所属主&#xff1a; 上面的例子是找出文件并打印有多少行。 我们也可以把我们查询到的结果复制到其它文件位置中去&#xff1a; 复制成功。 -mtime根据修改时间…...

webgoat-Broken Access ControlI 访问控制失效

Insecure Direct Object References 直接对象引用 直接对象引用是指应用程序使用客户端提供的输入来访问数据和对象。 例子 使用 GET 方法的直接对象引用示例可能如下所示 https://some.company.tld/dor?id12345 https://some.company.tld/images?img12345 https://some.…...

Beaustiful Soup爬虫案例

文章目录 1 第三方库2 爬取2.1 初始化函数2.2 结束时关闭数据库2.3 生成header2.4 获取请求body2.5 解析异步json数据2.6 使用BS4的find方法解析2.7 写入口函数2.8 调用 3 完整代码 1 第三方库 获取随机UA pip install fake-useragent连接数据库 $ pip3 install PyMySQL发起…...

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…...

谈一谈SQLite、MySQL、PostgreSQL三大数据库

每一份付出&#xff0c;必将有一份收货&#xff0c;就像这个小小的果实&#xff0c;时间到了&#xff0c;也就会开花结果… 三大数据库概述 SQLite、MySQL 和 PostgreSQL 都是流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;但它们在功能、适用场景和性…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...