模型驱动架构MDA

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.mzph.cn/news/739723.shtml

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

相关文章

2.Windows平台Python的下载、安装和配置环境变量——跟老吕学Python编程

2.Windows平台Python的下载、安装和配置环境变量——跟老吕学Python编程 一、下载Windows版Python1.Python官网2.Windows版Python下载网址 二、在Windows安装Python1.全自动安装Python(不推荐)1.1 启动安装1.2 安装进度1.3 安装完成1.4 查看版本 2.自定义…

【GO】HTTP标准库1 - http协议基础知识

目录 一 http协议 1 http协议 2 http request 3 请求方法 4 URL 5 协议版本 6 请求头 7 Content-type 9 POST与GET区别 10 HTTP Response 11 常见的状态与话术 12 HTTP 响应头 13 完整的HTTP响应 14 HTTPS 一 http协议 1 http协议 HTTP(HyperText Tra…

Kubeadm部署K8s

Kubeadm部署K8s 集群规划: Master节点规划: Node节点规划: 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘…

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关(XD-COPNm20)在智能领域,变流器的应用非常广泛,变流器一般会采用CANopen协议。现场采用台达的变流器(支持CANopen协议)作为CANopen从站,S7-1500系列PLC做主站,…

表单进阶(3)-上传文件和隐藏字段

上传文件&#xff1a;<input type"file"> 隐藏字段&#xff1a;<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled&#xff1a;<button disabled"disabled">注册</bu…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理(Wireshark抓包分析)

继续蓝牙系列的研究。 在上篇博客&#xff0c;通过阅读BTStack的源码&#xff0c;大体了解了其框架&#xff0c;对于任何一个BTStack的应用程序都有一个main函数&#xff0c;这个main函数是统一的。这个main函数做了某些初始化之后&#xff0c;最终会调用到应用程序提供的btst…

【嵌入式】嵌入式系统稳定性建设:最后的防线

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…

一文带你了解MySQL之B+树索引的原理

前言 学完前面我们讲解了InnoDB数据页的7个组成部分&#xff0c;知道了各个数据页可以组成一个双向链表&#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表&#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录&#xff0c;在通过主键查…

蓝桥杯真题讲解:子矩阵(二维滑动窗口)

蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 二、正解代码 //二维单调队列 #include<bits/stdc.h> #define endl \n #def…

MapBox添加带箭头的轨迹线

效果&#xff1a; // 轨迹线 export const MAP_PATH_LINE (values, layerId) > {// 箭头-右var svgXML <svg viewBox"0 0 1024 1024" xmlns"http://www.w3.org/2000/svg"> <path d"M529.6128 512L239.9232 222.4128 384.7168 77.5168…

成都爱尔林江院长解析巩膜镜是什么?它适合哪些人群

巩膜镜&#xff0c;全称为硬性透氧性巩膜接触镜&#xff0c;它有着特殊设计&#xff0c;大直径镜片像桥梁一样呈拱形覆盖角膜及角巩膜缘&#xff0c;从角膜上方横跨而过完全无接触、无任何机械性摩擦&#xff0c;最终贴合于巩膜。 巩膜镜的作用原理 光学成像&#xff1a; 配戴…

嵌入式物联网项目实战-STM32F103实现外部中断EXIT事件(物联技术666)

EXIT中断测试 功能描述 外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型&#xff08;脉冲或挂起&#xff09;和对应的触发事件&#xff08;上升沿或下降沿或者双边沿触发&#xff09;。每个输入线都可以被独立的屏蔽。挂起寄…

Unity L屏幕实现方式(已抛弃)

效果 右侧主要的参数&#xff1a;Line参数能够调整中间线的高度&#xff0c;PointXY能够调整整个下方弯曲图像的比例。 使用的是RenderTexture填充RawImage显示的方式&#xff0c;需要将一张RenderTexture设置位摄像机的输出内容。 ShaderGraph 由于这个采用了一定的数学模型…

HarmonyOS NEXT应用开发之多层嵌套类对象监听

介绍 本示例介绍使用Observed装饰器和ObjectLink装饰器来实现多层嵌套类对象属性变化的监听。 效果图预览 使用说明 加载完成后显示商品列表&#xff0c;点击刷新按钮可以刷新商品图片和价格。 实现思路 创建FistGoodsModel类&#xff0c;类对象是用Observed修饰的类Secon…

【C++】手把手教你模拟实现 list

目录 前提&#xff1a;list 的基本介绍 一、构造/析构/拷贝/赋值 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值 二、修改操作 1、push_back 2、insert 3、erase 4、clear 三、list iterator 的使用 1、operator * 2、operator 3、operator -- 4、operator &…

MATLAB中的矩阵的重构和重新排列

师从清风 矩阵的重构和重新排列 reshape函数 reshape函数可以改变矩阵的形状&#xff0c;其常用语法为reshape(A,m,n)或者reshape(A,[m,n]),这可以将矩阵A的形状更改为m行n列&#xff0c;前提是转化前后的两个矩阵的元素总数要相同。例如有一个矩阵A&#xff0c;它原来的大小是…

字节跳动也启动春季校园招聘了(含二面算法原题)

字节跳动 - 春招启动 随着各个大厂陆续打响春招的响头炮&#xff0c;字节跳动也官宣了春季校园招聘的正式开始。 还是那句话&#xff1a;连互联网大厂启动校招计划尚且争先恐后&#xff0c;你还有什么理由不马上行动&#xff1f;&#xff01; 先来扫一眼「春招流程」和「面向群…

掌握Redis,看完这篇文章就够了

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么&#xff1f;二、Redis安装三、Redis相关数据类型 四、基础操作&#xff08;使用了python连接redis&#xff09;1.字符串2.键对应操作3.哈希&am…

2024.3.12

1. 要求&#xff1a;自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void sho…

[Unity3D]--更换天空盒子

我们原来的天空盒子是这样的。 感觉不是特别满意&#xff0c;想换一个更好看的。 去资源商店找个好看的 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 例如这个 然后在Window>Rendering>Lighting里的环境选项里更换材质 更换&#xff1a; ​ …