和Google互补的搜索引擎Wolfram|Alpha
Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。
作者 Rob Thornton 译者 王军 发布于 2007年11月20日 上午1时17分
本周Rickard Oberg在oredev上宣布推出Qi4j,并宣称“类已死,接口万岁”。Qi4j带来了面向组合编程的新思想,提出类中不再放有任何的行为,取而代之的是,类成为混入(mixins)的‘组合’,并在类中使用标注定义接口。
Qi4j本身是一个提供给所有java开发者使用的面向组合编程的Java框架。尽管面向组合编程需要较大的思想转变,但是面向组合编程不需要单独的工具、语言或XML。Qi4j的应用程序可以在Spring应用软件、Web应用容器、OSGi和其他地方运行。Qi4j大量使用了标注,以此摆脱框架特定的知识,让开发者更关注业务规则。项目创始人Rickard Öberg和Niclas Hedhman在新闻稿中这样描述:
Niclas Hedhman说:“Qi4j是一个以领域为中心的应用开发框架,融入了从面向方面编程、依赖注入和领域驱动设计演化而来的思想,利用了Java 5平台和其生态系统”。Niclas Hedhman是长期从事于Java框架的开发者,并且现在是Apache的活跃成员。
Rickard Öberg说:“我需要一个能使领域模型和业务规则再度成为关注焦点、让领域专家和开发者能够清晰沟通的系统” 。Rickard Öberg是以前JBoss、Webwork和XDoclet的创始人。
由于这仅仅只是框架和范型最初的展示,文档和例子还比较少。但是,面向组合编程的目标是完成从对象思考到组合思考的转变。组合由可复用的片段(fragments)组成。片段是Qi4j的组成块 。片段携带组合成员的状态(在mixins(混入)中)、验证和约束它们的使用(在约束(constraints)中)、处理横切点(在关注点(concerns)中)、并提供通知、缓存和撤销管理,以及其他异步需求(在副作用中)。编程范型的转变并不是件容易的事情。Oberg这样描述对面向组合编程的反应:
人们一贯有两种反应:一是试图从脑海中扫除源于旧有经验的坏主意而头疼欲裂,一是理解我们所提思想的潜力而发出心领神会的微笑。
Qi4j仍在更新,并且不稳定。此时,他们仍在致力于稳定框架,同时将面向组合编程思想推介给社区,希望借此获得继续发展。他们也承认目前还没有充分准备好让大家深入到这个框架中,并建议大家在未来数个月中先侧重于概念理解。
查看英文原文:Qi4j introduces Composite Oriented Programming思想挺新的,理解有点困难
好像是在AOP上更进一步?
我认为"类已死,接口万岁"是片面的。 在我看来,类的设计——继承,多态是纵向思维模式。 接口设计——组合、责任链、command是横向思维模式是模块解耦过程。往往大家都比较关注解耦的设计,成功的解耦模块系统确实为我们建立一套可快速变换的系统。 但一个系统应该有纵向和横向的考虑。继承、多态的设计是对系统概念的高度抽象,提炼本质的过程。良好的继承多态的设计是对事物本质的描述,是不变的、深远的一种思想表现。只有把握了本质才能把所有"变化"玩弄在掌股之中。当然这是很难办到的。 另一方面,接口设计是一种责任体验、一种划分过程,责任明确划分得当系统是健壮的,可快速变化的虽然缺少深层考虑但非常符合我们平时分而治之的思维。但如果系统从本质上就出现缺陷,我觉得无论如何组合都无法得已解决,起码对于我来说是这样的。 所以我认为类设计,接口的设计应该两手抓。
接口偏向于动态的设计 类则偏向于静态的设计 觉得现在对动态的过分强调,忽视了亘古不变的静态东西
说的不是一回事嘛。接口不过是为了解决多继承带来的弊端而产生的面相契约编程的东西。但是这个掩盖不了Java在继承行为而不是语义的能力上的弱势。所以O(还有两个点)berg大师说的是用mixin重新修改非常受限制的单根继承和接口的方式,这种扩展的确是划时代的。 Bruce Tate的Beyond Java里面就提到过这样的限制,没想到还是Oberg弄出来了。不过这样不如去用其它直接支持mixin的语言了?
To 乐 田: 希望我没有对本文没理解错,要不然就太糗了。接口在编程语言角度来说是一种解决多继承的办法。但我想本文所说的不是针对编程语言而言,而是采用组合编程的思想对系统建模的思路和方法。"提出类中不再放有任何的行为,取而代之的是,类成为混入(mixins)的'组合'..."。 接口,脱离编程语言方面的考虑,比如说,一家做MP3的公司有两类人员:开发人员和客服人员。客服人员是对外的窗口(接口)责任是沟通和明确与客户的关系,开发人员就是做内部研发工作,其中分为总工、高工、工程师、助理等等个个都要干活的,可能级别不一样,干的活就不一样。不知这样比喻合适不? 本文的意思似乎强调行为建模,而废弃结构建模。所以我觉得"类已死,接口万岁"这句太离谱。
我觉得类和接口相辅相成的
我以为面向组合这个概念本身就生涩,对象是什么:很好理解,组合是什么:很不好理解。 我倒是觉得,在现有的面向对象思想的基础上,引入对象的“状态”和“事件驱动”的思想可以进一步简化和规范我们的编程工作: “状态”,一个对象在任何时候都处于某种状态,而状态的具体表现形式可以是对象的各种属性的当前值; “事件”,事件是对象状态变化的驱动因素,一个对象在某种状态下发生某种事件,经过一系列动作(对事件的反应)而使对象的状态发生变化。 “动作”,对象本身可以执行的一些操作。 引入这样一些概念,我们可以设想编程将变成一个按步就班的过程: 1)在原面向对象的思想指导下,定义类以及类的各种基本属性; 2)定义类的状态集; 3)定义类可以接收的事件集; 4)定义每种状态下每种事件发生时的反应过程 当然这只是形成了一种编程的大致框架,还需要更细致的一些定义,我先抛一块砖吧。
Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。
Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。
罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。
Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。
中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。
HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。
8 条回复
关注此讨论 回复