备份:虚拟仪器的设计思路

本文是虚拟仪器的总体设计方案,是一个草案,很多具体设计还没定型。

暂时想独立建站,因为捆绑并没有太多好处。不过似乎php的程序员远远超过jsp的,而java类的又远远超过ruby on rail 的。这个现象让我有点不知所措。因为依我看,ruby优于java,虽然java是个蠢东西,但是依然远远优于php。

捆绑的好处还是有的,首先是结合紧密,从xxx的角度看,我甚至可以做一个wordpress插件,让用户用最最简单的方法就能自行编辑虚拟仪器。 但是我怀疑这个工作量应该大于独立建站,除非php的确优于java,而java优于ruby。

暂时认为独立的程序可行性更大。因为市面上早就有独立的虚拟仪器,但是从未见过网站性质的虚拟仪器。不过网站形式比较牛逼。这个想不好,设计完了再 说。

无论是仪器还是按钮,从设计角度角度看,都是同样的对象:输入有多个,输出也有多个,他们能对输出结果进行控制。即便从 按钮角度看,输入输出也未必只有一个,设计时要注意。

仪 器对象包括了多个按钮对象,但是这是聚合吗?如果这是聚合,那电路图是什么?如果搞不清楚,不如让仪器类与按钮类分开,让仪器层 增加更多的属性,比如被聚合的按钮的名称和位置

仪器在整个系统中,往往被看作一个按钮。这只是一个粒度问题。解决这个问题,就让仪器类继承按钮类,它就可以被cast成按钮了。

表现层必须很简单,若是网站形式,针对控件的每一个操作,都用ajax发送到后台java class,处理完毕后发送回来,控件根据class的指挥动作。

View层还需要负责对象的外观图片,对于仪器,还需要负责子对象的相对位置。

理论上,保证view层可以使用网页形式也可以使用app形式。

一个model,从使用角度看,是用户在设计它,而不是程序员。切记切记。

model对象:

  • 属性(是ON/OFF开关还是推子还是波段开关?)( 若干个,什么类型的输入和输出) (给它提供输入的是谁)
  • 方法 (对输入值作什么运算),因为输出有多个,方法肯定也有多个。

所谓属性,包括 on/off型(开了就有声音,关了就没有), 线性放大型(推子,旋钮),选择型的波段开关。

从功能角度看,有电阻型的,用于控制放大的,值域的; 有电容型的,处理频域;

应该还有一些按钮,其功能在以上列表之外的。

按钮其实也是一些公共的class,而且肯定会需要用到接口,以实现多重继承. 真的需要这么花哨吗?

因为这些method会大量复用,所以还是独立出来,成为interface比较好。这叫Adaptor模式。

最难的部分是聚合后的对象,这个对象内部有很多对象,这个内部相关性是很复杂的。它实质上要表达的是一个电路图(内部逻辑)。(比如说,某个按钮按 下后,其他按钮无论干什么,都没用了)

针对这一点,需要一个数据库表,表达每个对象之间的输入输出关系。 运行的时候,翻译成链表(还是map?)(多个输入的话,就是多个 链表)只要找到仪器的输入(其实不用找,使用这个仪器的时候,用户当然会指定它的输入和输出),后面的计算倒是迎刃而解,可以自动完成的。

先从用户使用角度來解释吧:(本段不要删除,总控需要看,提意见)

  1. 打开“关卡编辑器”,试图创建一个仪器的原理图
  2. 在控件列表中,拖一个控件过来( 开关型,波段开关型,推子型,处理幅度的,处理频率的 等等),放在合适的位置上,也不用太合适,谁也不知道实际电路是怎样的,逻辑上清晰就可以了
  3. 设置这个控件的更多属性(默认开还是关;默认推子推在哪个位置,也就是说默认算法 ),在输出线条上设置算法(比如,衰减无穷大到增益20db),{zh1}选一下外观,颜色,让它尽量像真实的零件。
  4. 用带箭头的线条连接各个控件,以便让软件知道他们互相之间的输入输出关系
  5. 拖socket过来,指定这个仪器的合法输入和输出。 今后使用的时候,就可以指定在某个地方输入一个音源,比如频率1kz的正弦波,音量100 。

以上是原理图部分,接下去要跟真实照片叠加。 power point 2007中是否有调音台的素材图片?而且非常像真的?

  1. 打开“真实图形”这个图层,上传一张背景照片。所谓背景,就是只包括不能动的部分。
  2. 将原理图中的控件拖到真实图形上。 原理图中的控件是淡淡的线条框加一个真实的活动部件。那个线条框是用来限制活动部件的活动范围的,同时也让软件能测量出用户推推子的幅度。调整线条框的大 小,使之跟真实图形相符。实际使用的时候,线条框可以隐去。但是估计打游戏的人更喜欢它的存在,因为它暗示了哪些部件是真的可以动的。 因为我们一般没精力,也没必要 制作一个所有零件都能动的仪器。大家都知道,大部分部件都没有太大作用。 我们把默认的设置拍摄在上面就可以了。
  3. 好,这就可以了。

几个难点:

1)在编程时期,我们无法建立object,只是一些class和interface而已。用户使用的时候,才会告知,这个object的外观,具 体表现(比如默认衰减20db)。用什么方法可以在运行时new 一个对象?而且,一旦它被建立,还能保存。这似乎要用到对象的持久化了。

动态创建对象的方法:

ClassName c  = Class.forName(ClassName).newInstance()   问题是,这个c,是用 户输入的名字啊,写程序的时候是不知道的!

the class need to have a default constructor. To do anything else, read the java.lang.reflect package API

2)用什么数据结构來表达这样的一个连线图?多输入和多输出的。map ?

一堆的interface 或者class,提供了method。

例子: double function amplifier (double volumn,  double amp ){

return volumn*amp ;

输入输出的处理: 可以不用声音,而是用字符串+数字。比如 输入音量{bfb},经过按钮后,输出音量60%。

因为model层已经非常复杂了,为了让model层成为一个漂亮的类,它只描述它自己的行为,不管界面,也不管界面对它的调用。所以有个 control层负责处理用户在界面上的点击。

比如说,他按了电源按钮,cotrol 层要处理 button.click() ,然后把它翻译成 model中的 switch_off(); 就做类似的事情,别的不做。

找邱工好好聊聊,罗列出大多数开关的类型,画一个结构树。 按钮直接会有大量聚合,这用什么模式比较恰当?

html5目前是否可以应用? 是否可以直接写canvas? javascript 5 对ajax有什么更新?毕竟我要做的是一个很轻量级的View,倘若有简单的方案,在view上不需要花什么工夫。



郑重声明:资讯 【备份:虚拟仪器的设计思路】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——