模型驱动架构MDA

news2024/9/27 7:26:32

MDE

模型驱动工程(MDE, Model-Driven Engineering)是软件工程的一个分支,它将模型与建模拓展到软件开发的所有方面,形成一个多维建模空间,从而将工程活动建立在这些模型的映射和转换之上。[1] MDE的基本原则是将模型视为第一实体,将所有软件产物当做模型或模型要素。模型驱动工程(Model Driven Engineering, MDE)是一种软件开发范式,其核心思想是通过高层次的抽象模型来描述系统的行为和结构,然后利用模型转换和代码生成技术自动生成部分或全部实现代码。MDE旨在提高软件开发的效率、质量、一致性和可维护性。
模型驱动工程(MDE) 涵盖了整个软件研发系统生命周期的各个方面,包括需求分析、设计、实现、验证直至维护阶段。MDE不仅关注软件开发,还倡导使用模型来描述和控制系统的所有方面,并支持跨不同层次和领域的建模活动,以及模型之间的转换和一致性维护。在MDE的背景下,模型不仅是设计工具,而且还是贯穿整个工程流程的核心要素。

当前MDE的发展现状如下:

1.	工具集和框架的成熟:
•	目前已有众多成熟的建模工具和框架支持MDE,例如Eclipse Modeling Framework (EMF),它提供了构建模型、编辑器以及执行模型转换的强大基础;还有JetBrains MPS、Xtext等,允许开发者创建自己的领域特定语言(DSL)并基于这些DSL进行开发。
2.	行业应用广泛:
•	MDE已在航空航天、汽车制造、电信、嵌入式系统、企业应用等多个领域得到应用。在这些领域中,由于系统复杂性较高且规范严格,MDE能有效地提高设计的准确性和代码生成的效率。
3.	与敏捷开发和DevOps的融合:
•	随着敏捷开发和DevOps的流行,MDE也在努力适应这些新的开发范式,例如通过模型来支持持续集成和持续部署(CI/CD)流程,以及在模型级别进行迭代和增量开发。
4.	研究方向的深化:
•	学术界和工业界都在不断深化对MDE的研究,探讨如何解决模型复杂性问题,如何提升模型的可重用性和互操作性,以及如何更好地将MDE融入现有的软件工程实践。
5.	挑战与限制:
•	尽管MDE具有很多优点,但在实际应用中仍面临一些挑战,如模型完整性与一致性检验、模型到代码映射的有效性和精准性、团队成员对模型驱动方法的接受度和熟练度等。

总结来说,模型驱动工程在近几年已经取得了显著进展,并在特定领域得到深入应用。然而,作为一种相对较新的软件开发方法,MDE仍在不断演进和发展中,未来有望在更多场景下发挥更大的作用。同时,也需要进一步克服在推广普及过程中遇到的种种挑战。

MDD

模型驱动设计(Model Driven Design, MDD)和模型驱动开发(Model Driven Development, MDD)作为一套方法论,在过去几十年中得到了广泛的关注和发展。MDD的核心思想是通过抽象层次更高的模型来捕获系统的需求和行为,然后利用模型变换工具链自动生成程序代码或其他设计工件,以减少重复工作,提高软件质量和开发效率。MDD是MDE实践中的一个重要组成部分,专注于通过模型来驱动软件开发的具体实践,而MDE则提供了一个更加全面和整体的方法论框架,旨在利用模型在整个工程实践中发挥更大的作用。

MDD是MDE实践中的一个重要组成部分,专注于通过模型来驱动软件开发的具体实践,而MDE则提供了一个更加全面和整体的方法论框架,旨在利用模型在整个工程实践中发挥更大的作用。

MDA

模型驱动的体系结构(Model Driven Architecture,MDA)是由对象管理组织(Object Management Group ,OMG)提出并且大力倡导的软件开发方法。其核心思想是在软件开发过程中强调使用一系列抽象层次的模型,并利用模型之间的转换来实现从需求到设计、直至代码生成的全过程。MDA 强调通过平台独立模型(Platform Independent Model, PIM)和平台特定模型(Platform Specific Model, PSM)来确保软件架构和设计的可移植性和重用性。基于元模型的应用系统集成方法提高了用户构造大规模应用系统的能力。元模型驱动的开发模式减少了业务模型发生更改时,对组件内部逻辑和部接口进行的修改工作量,并方便实现应用开发从一种平台到另外一种平台的切换。

OMG MDA technologies

  • MOF 2.0
  • XMI 2.0
  • UML 2.0
  • OCL 2.0
  • QVT

MDA defines a framework that separates the specification of the system functionality from its implementation on a specific platform. It distinguishes different kinds of models:

  • 计算独立模型• Computation Independent Model (CIM), a model that describes a system from the computation independent viewpoint.
  • 平台独立模型• Platform Independent Model (PIM), a model with a high level of abstraction that is independent of any implementation technology.
  • 平台相关模型• Platform Specific Model (PSM), a tailored model to specify the system in terms of the implementation constructs available in one specific platform.
  • 特定实现模型• Implementation Specific Model (ISM), a description (specification) of the system in source code.

The Unified Modeling Language (UML) (UML, 2009a) (UML, 2009b) combined with the Object Constraint Language (OCL) (OCL, 2006) is the most widely used way for writing either PIMs or PSMs.

在这里插入图片描述

相比MDA,模型驱动工程(MDE)则是一个更为广泛的概念,它包含了MDA的思想,但不仅限于MDA所关注的架构层面,而是将模型驱动的方法扩展到了整个软件开发生命周期的所有阶段,包括需求分析、设计、编码、测试、部署维护等各个环节。MDE倡导以模型为核心,构建和操作软件系统的不同抽象视图,使用模型转换和综合工具来自动化或半自动化地生成系统各部分,包括但不限于源代码、配置文件、数据库模式以及其他工件。

总的来说,MDA可以看作是MDE在特定领域的应用和实践之一,MDE提供了一种更加全面和灵活的基于模型的开发范式,涵盖了多种技术和标准,而MDA则是其中一种具有标准化特性的方法论。

长期以来,没有那个组织真正实现了MDA的工具或方案:Rational软件已经被IBM成功搞残;AndroMDA的最后一次发布还是在2010年;Eclipse GMT从2005年开始孵化,但到了2007年似乎已经死亡。

在这里插入图片描述

EMF

Eclipse Modeling Framework (EMF) 是一个强大的开源建模框架,广泛应用于软件开发中需要模型驱动工程(Model Driven Engineering, MDE)的场景。EMF使得开发者能够定义域特定的模型,并基于这些模型生成代码、编辑器以及其他基础设施。Eclipse Modeling Framework(EMF)在Eclipse基金会的支持下持续发展。EMF作为Eclipse平台上的一个核心组件,为模型驱动工程(Model Driven Engineering, MDE)提供了强大的支持,特别是在Java环境中用于构建和处理模型。EMF不仅适用于创建和编辑模型,还能基于模型生成代码和其它形式的工件,简化大型系统的开发和维护工作。以下是几个著名的EMF应用案例:

1.	Eclipse IDE内部组件:EMF本身就是Eclipse平台的一部分,许多Eclipse的子项目和插件,比如Papyrus UML建模工具、Xtext DSL工具等,就使用了EMF作为其基础建模框架。
2.	大规模企业级应用:EMF常被用于构建复杂的业务逻辑模型,并基于这些模型生成大量的Java代码,减少手动编写重复性代码的工作量,提高开发效率和一致性。
3.	配置和管理系统:在电信、汽车、航空等行业,EMF常被用来构建配置管理系统,比如网络设备配置、嵌入式系统的配置文件等。
4.	数据交换标准:EMF可以用于实现行业标准的数据交换格式,例如SysML(System Modeling Language)的一种实现就基于EMF。
5.	基础设施设计:在建筑信息模型(Building Information Modeling, BIM)领域,EMF及其衍生工具和技术可用于创建和处理IFC(Industry Foundation Classes)模型。

EMF由于其强大的建模能力和代码生成特性,能够帮助开发者按照这些标准来定义和操作模型,并方便地序列化和反序列化数据,从而支持数据在遵循同样标准的不同系统间无障碍地交换。举例来说,假设有一个行业制定了某种特定的数据交换格式标准,如XML Schema或类似的规范,通过使用EMF,开发团队可以基于这个标准构建相应的模型,然后自动生成解析和生成这种格式所需的所有代码。这样一来,不仅简化了开发过程,同时也保证了与标准的一致性和互操作性。

Eclipse Modeling Framework (EMF) 主要被用于定义、存储、交换和操作结构化数据模型的场景,尤其适用于软件开发过程中的模型驱动工程(Model-Driven Engineering, MDE)。以下是一些EMF常被用作数据交换标准的具体场景:

1.	模型定义和互操作性:
•	定义和规范化特定领域的模型结构,如UML模型、SysML模型、XML Schema定义等。
•	在不同工具和系统之间交换和共享一致的数据模型,确保模型的语义和结构保持不变。
2.	代码生成和模型驱动开发:
•	EMF可以依据定义好的模型自动生成Java源代码,用于实现模型的持久化、操作和展示。
•	在MDA(Model Driven Architecture)中,开发者可以通过EMF模型来生成不同层次的软件构件,如接口、类、数据库脚本等,实现从高层次抽象模型到具体实现的转换。
3.	数据交换格式:
•	EMF可以生成XML Schema并支持将模型数据导出为XML格式(ECORE XMI),这成为了一种跨平台、跨语言的数据交换标准。
•	通过这种方式,不同工具和应用程序可以使用通用的XML格式进行数据交换,大大提高了数据互操作性。
4.	集成开发环境支持:
•	在Eclipse IDE中,EMF提供了丰富的图形编辑器和模型浏览器的支持,方便开发人员在统一的环境中设计和修改模型。
•	对于大型软件项目,尤其是分布式团队合作开发时,EMF可以确保模型数据在团队间传递的一致性和有效性。

EMF框架及其生态系统提供了大量的工具和插件,这些工具极大地增强了对模型生命周期各个阶段的支持,具体包括但不限于以下几个方面:

1.	EMF Generator Tools:
•	EMF提供了代码生成工具,可以根据定义的Ecore模型生成对应的Java模型类、编辑器界面、序列化/反序列化代码以及其他基础设施代码,这样开发者可以直接基于生成的代码进行业务逻辑开发,而无需手写底层数据处理和持久化机制。
2.	Graphical Editors and Modelers:
•	GMF (Graphical Modeling Framework) 是基于EMF的一个图形化建模工具集,用于创建具有可视化编辑能力的Eclipse插件,使得用户可以直观地以图形方式创建和编辑模型。
•	Sirius是一款强大的图形建模工具,允许开发者构建高度定制化的图形编辑器,它可以与EMF模型紧密结合,为用户提供更高级别的可视化建模体验。
3.	Model Validation:
•	EMF提供了内置的验证框架,允许开发者为模型添加约束规则,确保模型数据的有效性和完整性。
4.	Transformations:
•	ATL (Atlas Transformation Language) 和 Xtend 等工具支持模型之间的转换,能够自动将一个模型转化为另一个模型,这对于模型驱动架构(MDA)中的PIM到PSM再到代码的转换非常关键。
5.	Persistence Support:
•	EMF 支持多种持久化方式,包括XMI(XML Metadata Interchange)、数据库持久化等,便于模型数据的存储和交换。
6.	Runtime Services:
•	EMF提供了运行时的服务框架,如通知机制(notification)、查询服务(querying)、动态更新等功能,有助于在运行时有效地操作和管理模型实例。
7.	协同开发和版本控制:
•	EMF与Eclipse平台上的其他工具集成良好,比如支持与Git、SVN等版本控制系统结合,以跟踪模型的变更历史和协同开发。

因此,借助这些丰富的工具,EMF不仅简化了模型的设计和实现过程,还大大提升了模型在开发、测试、部署及维护阶段的效率和质量。

SysML

SysML (Systems Modeling Language) 是一种专门针对系统工程领域的建模语言,它是 UML (Unified Modeling Language) 的一个扩展,用来描述复杂的系统需求、行为、结构和参数。

SysML(System Modeling Language)是一种广泛应用于系统工程领域的建模语言,它基于UML(Unified Modeling Language)扩展而来,主要用于描述复杂系统的架构、行为、需求和物理结构等方面。SysML的实现通常涉及到采用特定的建模工具和框架,而基于EMF(Eclipse Modeling Framework)的实现则是其中一种技术途径。基于EMF实现SysML意味着开发者可以利用EMF的强大建模能力和扩展性来构建支持SysML的建模工具,比如通过定义SysML元模型,然后在这个基础上构建可视化编辑器和模型验证器等组件。
在这里插入图片描述
在这里插入图片描述

MBSE

基于模型的系统工程“Model-Based Systems Engineering MBSE”支持以概念设计阶段开始,并持续贯穿于开发和后期的生命周期阶段的系统需求、设计、分析、验证和确认活动的正规化建模应用。”用通俗一点语言解释的话,MBSE就是开发一个产品、平台的时候,把产品、平台研发中涉及到的各个方面用“计算机数据模型”方式建立起来,形成一个统一的“系统模型”。

MBSE是一套理念,有多种实现的方法论,SysML是实现MBSE的建模语言,有多个工具支持。
在这里插入图片描述

Papyrus for SysML:
Papyrus for SysML 是一个开源的 UML/SysML 工具,它是 Eclipse Foundation 下的 Papyrus 项目的一部分,专门为系统工程师设计,用于创建和管理复杂的系统模型。Papyrus 提供了一个完全符合 OMG 规范的 SysML 图形建模环境,支持多种模型视图,如需求模型、结构模型、行为模型等。随着系统工程的日益成熟,Papyrus for SysML 在工业界得到了一定的采纳,特别是在航空航天、国防、汽车等行业中有较为广泛的使用。

Sirius:
Sirius 是另一种基于 Eclipse 平台的开源建模框架,它允许开发者定制自己的图形建模工具,包括但不限于 SysML 支持。Sirius 不是直接提供一个现成的 SysML 建模环境,而是提供了一种工具来创建和扩展这样的环境。这意味着用户可以根据具体的项目需求,使用 Sirius 构建高度定制化的建模工具,这些工具可以支持 SysML 或者是其他特定领域的建模语言。因此,在企业内部或者学术研究中,Sirius 可能被用于开发专门针对某一套系统工程流程或特定领域需求的建模解决方案。

总体而言,Papyrus for SysML 和 Sirius 在软件工程实践中都有较高的实用价值。Papyrus 更适合直接使用预定义的 SysML 功能进行建模工作的团队和个人,而 Sirius 更倾向于那些需要深度定制建模工具以满足特定业务场景需求的团队。两种工具在系统工程生命周期的不同阶段,以及不同规模和类型的项目中均有不同程度的采用和应用。

对于SysML基于EMF的实现,通常意味着:

1.	模型定义:首先,通过EMF提供的元模型定义技术,可以精确地描述SysML语言的核心概念、规则和约束,形成SysML的元模型。
2.	模型编辑器:基于EMF的基础设施,可以构建SysML模型的图形化编辑器,允许用户通过图形界面创建和修改符合SysML规范的系统模型。例如,可以创建需求图、用例图、活动图、状态机图等SysML特有的图表。
3.	模型持久化与交换:利用EMF的序列化机制,可以将SysML模型保存为标准格式(如XMI),便于模型的存储、版本控制以及与其他工具间的模型交换。
4.	模型执行与分析:通过EMF的模型推理和模型驱动的工具链,可以实现SysML模型的动态仿真、验证以及与其他系统工程工具的集成,如MBSE(Model-Based Systems Engineering)平台。

因此,一个基于EMF实现的SysML工具集通常会包括一套完整的建模环境,其中涵盖了模型创建、编辑、存储、交换以及进一步的系统工程活动支持。例如,Papyrus for SysML就是这样一个基于EMF实现的开源SysML建模工具。

OpenMETA 是 MetaCase 公司开发的一款基于模型的工程工具套件,用于系统和软件设计自动化。OpenMETA 提供的功能包括但不限于:

1.	模型驱动工程:支持创建和编辑不同领域的特定模型,并基于这些模型生成代码、接口定义、仿真环境等。
2.	建模工具集成:能够整合多种建模语言和工具,如UML、SysML以及其他特定领域的建模语言。
3.	系统合成与优化:支持系统级的设计空间探索,允许用户通过参数化模型来快速迭代设计方案并进行性能评估与优化。
4.	自动化代码生成:基于模型自动生成符合目标规范的源代码,以减少手工编码的工作量并提高一致性。
5.	互操作性:支持与其他建模工具和标准格式(如XML、OpenAPI等)的互操作,便于数据交换和协同工作。
6.	复杂系统设计:适用于复杂的嵌入式系统、软件系统以及跨领域的系统工程,支持从概念设计到详细设计再到实施的全生命周期管理。

MOF

在软件工程领域,元对象设施Meta Object Facility (MOF) 是一个标准化的框架或结构,用于定义和处理元模型(Meta-models)以及相关的元数据(Metadata)。这里的 “Facility” 不是指具体的开发工具、软件程序、软件平台或技术组件,而是指一套规范、方法论和技术能力。

Facility 在此上下文中的含义:

•	规范:MOF 提供了一种通用的方法和规则集,用于构建和交换系统设计、架构和实现的抽象层次描述。
•	框架:作为一种设施,MOF 提供了构建和操作元数据模型的基础结构,使得不同工具和平台之间可以共享一致的模型信息。
•	能力:MOF 提供的是对元模型进行定义、实例化、存储、查询和转换的能力,而不直接提供编程接口、代码生成器或运行时环境等具体工具。

总结来说,Meta Object Facility 是一个基础设施级别的规范,为软件工程领域的模型驱动架构(MDA)、统一建模语言(UML)以及其他形式的系统建模提供了共同的语言和标准,支持跨工具、跨平台的模型一致性及互操作性。

MOF四层模型
1.信息层(information layer)
信息是由我们希望描述的数据组成,这些数据通常是用户数据,主要职责是描述信息领域中的详细信息.在数据层用元数据进行对这些用户数据的描述.元数据即为关于数据的数据.即对业务数据的一次抽象(通常的表现形式是一些概念性的,抽象的名字,如单据,操作人等).
2.模型层(model layer)
模型层由元数据组成,元数据的集合被称为模型.模型层的主要职责是为描述信息层而定义的一种"抽象语言"(即没有具体语法或符号的语言,一般用嘴能进行描述,但不规范)。信息层的数据,即用户数据,是模型层的一个实例。可以理解为一个模型对应的是一个业务系统,只是比现实中运行的业务系统更加抽象一些,但一般情况下人们都能够理解这样的模型,但这种模型的构建不标准,不统一,不同的业务系统会有不同的业务模型,其表现形式也不尽相同,比如有些用文档进行描述,有些用视频进行描述,有些通过画图进行描述,等等.
3.元模型层(metamodel layer)
元模型层是由元元数据组成(元元数据的实例),元元数据定义了元模型的结构和语义,这些元元数据的实例化集合被称作为元模型(即元模型是一个语法体系,是关于元元数据结构实例化后的语法体系)。元模型层的主要职责是为了描述模型层而定义的一种"抽象语言",是对模型层的进一步抽象。也就是说,模型层描述的内容通常要比元模型层描述的内容丰富、详细。一个模型是元模型的一个实例(因为在元模型的定义下,是可以画出模型的,所以说模型层是元模型层的一个实例,也就是说可以通过元模型的语法规则画出很多的模型,根据不同的应用场景)。
4.元元模型层(meta-metamodel layer)
元元模型层是由元元数据的结构和语义的描述组成,这层的主要职责是为了描述元模型而定义的一种"抽象语言"。元元模型的定义要比元模型更加抽象、简洁(即元元模型是关于元元数据本身的更深一个层次的抽象,即是描述元元数据的抽象.)。一个元元模型可以定义多个元模型,一个元模型是元元模型的一个实例。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode热题】对链表进行插入排序

给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输…

代码训练LeetCode(7)删除有序数组中的重复项

代码训练(7)LeetCode之删除有序数组中的重复项 Author: Once Day Date: 2024年3月10日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 26. 删除有序数组中的重复项 - 力扣(LeetCode)力扣…

割点原理及封装好的割点类

作者推荐 视频算法专题 预备知识 本分析针对:连通无向图G。 搜索树 节点的父子关系:任意 节点的邻接 节点除了已处理 节点,都是它的子 节点。 以任意一点为根开始DFS,计算所有 节点的父子关系。只保留个子 节点到父 节点形成…

C++学习随笔(2)——引用与函数

经过上章对C有了一个初步认识后,本章我们来学习一下C的一些与C语言不同的新玩样引用,还有C的函数规则。 目录 1. 引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用场景 (1) 做参数 (2) 做返回值…

【Emgu CV教程】9.1、形态学常用操作之腐蚀

文章目录 一、相关概念1.什么叫形态学2.形态学操作的目的3.形态学都包含哪些操作4.结构元素StructuringElement 二、腐蚀1.什么叫腐蚀2.腐蚀的作用3.腐蚀的函数 三、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫形态学 形态学,英文名称morphology&#…

无需编程技能:Python爬虫与数据可视化毕业论文代写服务

引言 作为一名在软件技术领域深耕多年的专业人士,我不仅在软件开发和项目部署方面积累了丰富的实践经验,更以卓越的技术实力获得了🏅30项软件著作权证书的殊荣。这些成就不仅是对我的技术专长的肯定,也是对我的创新精神和专业承诺…

网络协议常见问题

网络协议常见问题 OSI(Open Systems Interconnection)模型OSI 封装 TCP/IP协议栈IP数据报的报头TCP头格式UDP头格式TCP (3-way shake)三次握手建立连接:为什么三次握手才可以初始化 Socket、序列号和窗口大小并建立 TCP 连接。每次建立TCP连接…

揭秘海外媒体运营:扩大影响力、跨越边界的创新之道

导语:随着全球化的不断深入,海外市场对于企业和个人的影响力已变得至关重要。在这一背景下,海外媒体运营崭露头角,成为扩大影响力、跨越边界的创新方式。本文将揭秘海外媒体运营的真正含义和功能,以及它如何通过原创内…

easyexcel文件上传

easyexcel文件上传 前言&#xff1a;功能开发中&#xff0c;难免碰到数据上传下载功能&#xff0c;excel上传常见用于报表上传&#xff0c;绩效上传&#xff0c;考勤上传… 使用步骤&#xff1a; 1&#xff0c;编写业务层&#xff1a; 1&#xff0c;添加easyexcel依赖 <…

linux:线程的控制

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的总结1. 线程的优点2. 线程的缺点3. 线程异常4.线程和进程 二、线程的控制创建线程线程终止线程等待获取返回值 线程分离 总结 前言 本文作为我对于线程的…

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

架构学习总结:企业架构=业务+数据+技术+应用架构

最近再次研读DAMA数据管理知识体系,结合工作对什么是企业架构?如何开展企业架构设计工作有一些新的认识,供大家参考。企业架构包括企业的业务架构、数据架构、技术架构和应用架构,要想做好企业的信息化数字化建设规划,这四个架构都不可缺少,这四个方面的内容共同组成了企…

药品管理系统|基于SSM 框架+ Mysql+Java+的药品管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

目录 文末获取源码 系统实现 前台首页功能 用户功能模块 管理员功能 员工功能模块 系统设计 数据库设计 lunwen参考 概述 源码获取 文末获取源码 系统实现 前台首页功能 用户功能模块 管理员功能 员工功能模块 系统设计 数据库设计 lunwen参考 概述 随着科学技术的…

区块链和人工智能的关系以及经典案例

目录 1.区块链与人工智能的关系 2.应用案例&#xff1a;基于区块链的医疗数据共享平台 2.1背景 2.2方案 2.3优势 2.4挑战 区块链技术和人工智能&#xff08;AI&#xff09;是两种不同的技术&#xff0c;但它们之间存在着互补关系。区块链技术提供了一种安全、透明、去中心…

设置文件管理器默认列宽 - Win系统

问题 当我们使用Windows系统自带的文件管理器时&#xff0c;手动调整列宽后&#xff0c;进入其他文件夹并不会生效更改&#xff0c;下文介绍解决方案&#xff0c;即如何设置文件管理器默认列宽。 解决方案 打开文件管理器&#xff0c;调整好每一列的列宽&#xff0c;然后点击…

vim基础命令

目录 前言 一.vim基础命令大全 二.vim熟练的好处 三.入门使用命令 四.使用案例 4.1 gg和G 4.2 i 和 u 和 ESC使用 4.3 y$ 和 p 和 u 使用 五.注意事项 前言 启动vim编辑器后自动进入编辑模式&#xff0c;在此模式中输入命令对应vim一个动作&#xff0c;比如&#xff1a;进入编辑…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…

Visual Basic6.0零基础教学(2)—vb中类的介绍和基本控件的属性

Visual Basic 6.0中类的介绍和基本控件的属性 文章目录 Visual Basic 6.0中类的介绍和基本控件的属性前言一、对象的有关概念1.类2.对象3.对象的三要素4.5. VB程序的执行步骤 二、基本控件属性1.修改控件属性的练习案例 总结 前言 大家好&#xff0c;昨天我们学习了vb的简单介…

elasticsearch 深度分页查询 Search_after(图文教程)

Search_after使用 一. 简介二. 不带PIT的search_after查询2.1 构造数据2.2 search_after分页查询2.2 问题 三. 带PIT的search_after查询3.1 构建第一次查询条件3.2 进行下一页查询3.3 删除PIT 四.参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注…

opencv解析系列 - 基于DOM提取大面积植被(如森林)

Note&#xff1a;简单提取&#xff0c;不考虑后处理&#xff08;填充空洞、平滑边界等&#xff09; #include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <opencv2/opencv.hpp> using namespace cv…