OPAMC架构介绍

简介: OPAMC架构来源于ECS架构的思想,用于实现面向对象绘图,采用Racket语言(Lisp语言的一个方言)实现。

1 OPAMC的概念

       OPAMC架构来源于ECS架构的思想,用于实现面向对象绘图,采用Racket语言(Lisp语言的一个方言)实现。

       ECS架构(全称Entity-Component-System,即实体-组件-系统)是一种软件架构模式,主要用于游戏开发。ECS遵循组合优于继承的原则,游戏内的每一个基本单元都是一个实体,每个实体又由一个或多个组件构成,每个组件仅仅包含代表其特性的数据(即在组件中没有任何方法),系统是处理拥有一个或多个相同组件的实体集合的工具,它只拥有行为(即在系统中没有任何数据)。实体与组件是一个一对多的关系,实体拥有怎样的能力,完全是取决于其拥有哪些组件。通过动态添加或删除组件,可以在(游戏)运行时改变实体的行为。换句话说,每个实体不是由“类型“定义的,而是由与其关联的组件定义的。组件如何与实体相关连,取决于所使用的ECS框架如何设计。

       ECS的规则——“组件没有函数,系统没有状态”。

       ECS架构规避了面向对象编程(OOP)中继承造成的不足——为对象强行建立父子关系,这种极度耦合产生的各种不灵活:耦合性的改动、不充分的继承、不灵活的重用、难以抉择的归类。

       OPAMC架构同样采用组合的方式组织数据,但规避了ECS架构中实体数量及组件数量为预先设定的问题,使它们可以根据用户需求进行动态增减。

       OPAMC架构使用对象(绘图对象,O)、属性(对象属性,P)、行为(对象行为,A)、管理器(M)、协调器(C)五个概念,将绘图对象的属性采用组合方式进行数据组织,即一切皆属性,实现面向数据编程。而在处理具体的行为、管理、协调时,采用面向对象(OOP)进行封装。

2 OPAMC的组成

O:object,对象。指绘图操作对象,包含实体及虚体。对象包括:图元、实体、组、模型。对组的内部成员(实体、组的引用)作为对象的属性;实体的内部成员(图元)作为对象属性;图元的几何描述结构作为对象属性。

P:property,属性。指描述对象的特征的数据结构值。属性仅提供数据(数据结构值),不包含任何行为,没有函数。可以将各种属性结构分类放在不同模块内。

A:action,行为。对象的行为逻辑,负责对一组(或一个)特定对象属性进行处理,实现对象属性的控制及实现对象行为操作。行为模块之间独立存在,不互相调用。

M:manager,管理器,实现对象、属性、行为的创建、添加、修改、查询及删除(CRUD),分别对应通过对象管理器、属性管理器、行为管理器实现。管理器模块与对象、属性、行为模块分开设置,实现代码完全解偶。

C:coordinator,协调器。为避免模块的交叉引用并使程序逻辑更清晰,通过协调器实现对象管理器、属性管理器、行为管理器之间的协调关系;实现对象、属性、行为的综合管理,它也是对外的接口(更上层程序通过调用协调器程序间接管理数据及行为,而不是直接调用各数据及管理器程序)。各管理器仅完成自己范围内的简单操作,所有交叉操作均在协调器内进行。

3 OPAMC模块划分

对象管理器模块:包含对象管理器。以对象管理器为基类,可根据需要扩展出图元对象管理器、实体对象管理器、组对象管理器三个模块。

属性数据结构模块:可按属性数据结构分类设置不同模块。

属性管理器模块。

属性值管理器模块。

行为模块:行为类模块,并以行为类为基类,根据不同行为需求派生各自行为类。

行为管理器模块。

协调器模块。

4 OPAMC文件树结构

       OPAMC架构整体作为一个单独文件夹。其下分为如下文件及文件夹组成文件树:

-opamc(OPAMC架构文件夹)

|-property(属性文件夹)

|+所有经分类的属性模块

|-action(行为文件夹)

|+所有行为的模块

|-manager(管理器文件夹)

|-object-manager.rkt(对象管理器模块)

|-property-manager.rkt(属性管理器模块)

|-property-value-manager.rkt(属性值管理器模块)

|-action-manager.rkt(行为管理器模块)

|-coordinator.rkt(协调器模块)

       由此可以看出,OPAMC架构由:一个架构,三个文件夹(属性文件夹、行为文件夹、管理器文件夹),四个管理器(对象管理器、属性管理器、属性值管理器、行为管理器),一个协调器等组成。

5 OPAMC架构整合

5.1 OPAMC架构数据

对象(objects):(hash (对象id/o . (set 属性id/p)...)

属性(properties):(hash (类型type . (hash 属性id/p . (set 对象id/o))...)...)

属性值(property-values):(hash (类型type . (hash (属性id/p . 属性值)...)...)

行为(actions):(hash (类型type . 行为id/a)...)

5.2 OPAMC操作

对象管理器(object-manager):创建对象、销毁对象;取得对象散列表;取得属性集合;添加属性、移除属性。

属性管理器(property-manager):添加属性、删除属性;取得对象集合;添加对象、移除对象。

属性值管理器(property-value-manager):注册属性类型;取得属性值散列表;添加属性值、销毁属性值、取得属性值、设置属性值。

行为管理器(action-manager):注册行为;取得行为散列表;取得行为;取得对象集合;添加对象、移除对象;判断行为类型是否存在。

协调器(coordinator):协调manager/o、manager/p、manager/pv、manager/a四个管理器。创建对象、销毁对象、取得对象散列表;注册属性、添加属性、移除属性、取得属性、取得属性值、更新属性;注册行为、添加行为、取得行为散列表、取得行为。

       管理器的操作严格控制在简单、直接范围的操作,凡是交叉判断、交叉操作均在协调器内实现。

       数据的索引:将对象、属性值、行为均分配全局唯一id值,通过id值进行索引。由于Racket语言中结构(struct)和类(class)均为一级值,因此对于用类型(type)进行索引分类的,直接用结构类型值及类类型值作为类型(type)索引值,这样既直观又简单。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
监控 Linux
mc常用命令
mc常用命令
228 9
|
4月前
|
存储
|
JavaScript 芯片
PADS Layout添加工艺边和Mark点的方法和步骤
PCB在进行贴片加工的时候(SMT),一般有3种方式(基于开钢网的情况):全人工、半自动、全自动。全人工就是刷钢网,放置元器件都是人工操作。半自动是指人工刷钢网,放置元器件上自动贴片机。全自动是指刷钢网和放置元器件都是机器自动完成。对于全人工的我们就很好理解,毕竟人是活的,最智能的,遇到突发情况都可以想办法处理。
637 0
|
存储 分布式数据库 Hbase
分布式数据库HBase的基本概念和架构之基本数据模型的NameSpace
在分布式数据库 HBase 中,数据的存储和管理是基于列的分布式存储。
75 0
|
SQL 分布式计算 Java
Spark1.6.0功能扩展——为HiveThriftServer2增加HA
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/78549991 前言 HiveThriftServer2是Spark基于HiveServer2实现的多Session管理的Thrift服务,提供对Hive的集中式管理服务。
1373 0