程序人生

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  7 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

2005年4月15日 #

http://www.kcomsoft.com/Article47.htm
OMG的构想是将目前的开发行为提升到更高的抽象层级--分析模型级,把针对特定计算平台的编码工作交由机器自动完成,这样的情况下,业务逻辑与实现技术被成功地解耦,二者相对独立变化,因此模型的价值在包容已有技术的条件下被最大化。这种目的根源于软件开发的现状,在传统的软件开发方法中,随着项目的进展,设计阶段产生的UML模型和代码之间的同步变得越来越困难--代码为了应付新增加的需求和新产生的想法而不断变化,模型却一直停留在原地不动,这使得模型在一段时间之后就失去了它的价值。OMG提出了一个最根本的解决方案--在MDA中,模型不再是一种辅助工具,而是开发过程的产品。一个完整的MDA应用程序包含:
  一个权威的PIM;
  一个或者多个PSM;
  一个或者多个完整的实现 - 开发人员决定支持的所有平台上的应用程序实现。

  MDA在目前技术的基础上,分离出了两个抽象级别的模型:PIM(Platform Independent Model 平台无关模型)和PSM(Platform Specialize Mode 平台相关模型),PIM是一个纯粹的不考虑实现技术的分析模型,而PSM可以视为一个基于特定实现技术,比如J2EE的设计模型。工程师们只需要建立表达业务逻辑的PIM,剩下的工作都将由MDA引擎自动完成。描述业务逻辑的PIM将具有长久的价值,而针对特定平台的PSM则可能会随着平台技术的进步而快速地迁移。在MDA开发过程中,系统的开发工作的最终产品是PIM,从PIM到PSM及至代码实现都是由第三方的自动化工具来完成的。
  为了实现MDA这一宏大构想,OMG制定了一系列的标准:
   UML:UML被MDA用来描述各种模型。它并不是为MDA而生,但是作为目前最为风行的建模语言,UML已经占据了全球建模语言领域90%的市场份额,成为了建模语言事实上的标准,因此OMG将它作为MDA技术的基础是自然而然的明智选择。它是MDA的基础,也是MDA最有力的武器。
   MOF:MOF(Meta Object Facility 元对象机制)是比UML更高层次的抽象,它的目的是为了描述UML的扩展或者其它未来可能出现的类UML的建模语言。由此我们可以看到OMG的"野心",虽然MOF也不是为MDA而生的,但是我们可以体味到OMG的工程师们良苦的用心和长远的目光。
   XMI:XMI(XML-based metadata Interchange)是基于XML的元数据交换。它通过标准化的XML文档格式和DTDs(Document Type Definitions)为各种模型定义了一种基于XML的数据交换格式。这使得作为最终产品的模型可以在各种不同的工具中传递,这一点是非常重要的,它保证了MDA不会在打破了一种束缚之后再被加上一层新的束缚。
   CWM:CWM(Common Warehouse Metamodel 公共仓库元模型)提供了一种数据格式变换的手段,在任意级别的模型上都可以使用CWM来描述两种数据模型之间的映射规则,比如将数据实体从关系数据库变换为XML格式。在MOF的框架下,CWM使得通用的数据模型变换引擎成为可能。
  在OMG的蓝图中,UML、MOF、XMI、CWM等一系列标准分别解决了MDA的模型建立、模型扩展、模型交换、模型变换这几个方面的问题。OMG试图通过标准化的定义,扩大MDA的应用范围。同时通过这样一个可扩展的建模语言环境,IT厂商可以自由实现自己的建模语言,以及语言到可执行代码的映射,然而不管怎么样,都必须处于OMG的标准化框架之下。   
posted @ 2005-04-15 15:17 清风 阅读(289) | 评论 (0)编辑 收藏

http://tech.ccidnet.com/pub/article/c287_a201795_p1.html
posted @ 2005-04-15 15:12 清风 阅读(269) | 评论 (0)编辑 收藏

简单地说,MDA是OMG在模型可执行上的努力,其目的是为了“把建模语言当编程语言来用,而不只是设计语言” 。模型可执行(Executable Model)是MDA的终极目的,为了实现这个目的,OMG制定了模型的精确形式化表示、模型存储以及模型交换方面的各种规约如UML2、MOF(Meta Object Facility,元对象设施)、OCL(Object Constraint Language,对象约束语言)、QVT(Query/View/ Transformations)、XMI(XML Meta-data Interchange,XML元数据交换标准)等等。
MDA不是某一种具体的技术,也不是一种具体的方法论 ,它是包含了诸多规约的一个集合,是OMG提出的在模型驱动开发方面的一个总的架构。

meta-xxx和xxx的关系是class和instance的关系
mof中描述的是uml中的元素的model

posted @ 2005-04-15 14:35 清风 阅读(436) | 评论 (0)编辑 收藏

http://www-128.ibm.com/developerworks/cn/rational/r-mda/index.html
posted @ 2005-04-15 11:19 清风 阅读(323) | 评论 (0)编辑 收藏

http://www.donews.net/shanyou/archive/2004/09/30/115378.aspx
posted @ 2005-04-15 11:17 清风 阅读(1447) | 评论 (0)编辑 收藏

2005年4月8日 #

1.对于访问某个关键共享资源的所有方法,必须把它们设为synchronized.

2.一个线程可以有四种状态:
(1) 新(New):线程对象已经创建,但尚未启动,所以不可运行。
(2) 可运行(Runnable):意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞”。
(3) 死(Dead):从自己的run()方法中返回后,一个线程便已“死”掉。亦可调用stop()令其死掉,但会产生一个违例——属于Error的一个子类(也就是说,我们通常不捕获它)。记住一个违例的“掷”出应当是一个特殊事件,而不是正常程序运行的一部分。所以不建议你使用stop()(在Java 1.2则是坚决反对)。另外还有一个destroy()方法(它永远不会实现),应该尽可能地避免调用它,因为它非常武断,根本不会解除对象的锁定。
(4) 堵塞(Blocked):线程可以运行,但有某种东西阻碍了它。若线程处于堵塞状态,调度机制可以简单地跳过它,不给它分配任何CPU时间。除非线程再次进入“可运行”状态,否则不会采取任何操作。

3.线程被堵塞可能是由下述五方面的原因造成的:
(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。
(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。
(3) 用wait()暂停了线程的执行。除非线程收到nofify()或者notifyAll()消息,否则不会变成“可运行”(是的,这看起来同原因2非常相象,但有一个明显的区别是我们马上要揭示的)。
(4) 线程正在等候一些IO(输入输出)操作完成。
(5) 线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

4.对于Java 1.2,应注意suspend()和resume()已获得强烈反对,因为suspend()包含了对象锁,所以极易出现“死锁”现象。


posted @ 2005-04-08 16:41 清风 阅读(519) | 评论 (0)编辑 收藏

做了多年的programmer,今天第一次blog,很兴奋!
现在刚换了一份工作,还没报到,学习中......,发现了自己很多基础的东西不会,汗颜。在看thinking in java,仍然有新的收获,确实经典,也说明自己的底子很薄,努力!

posted @ 2005-04-08 11:35 清风 阅读(426) | 评论 (0)编辑 收藏

仅列出标题