仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 379|回复: 9
打印 上一主题 下一主题

[学习教程] 发布一篇用Qi4j举行面向组合编程

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,
临时以来,经由过程OOP对象集对范畴观点举行建模的方针并未失掉充实完成。那么迄今为止,我们万般勉力但难以办理的基本成绩究竟是甚么?有无更好的解决举措?在本文中我们将先容面向组合编程(COP,CompositeOrientedProgramming)的观点,展现它怎样躲避OOP存在的一些成绩,偏重先扑灭利用可重用部件组装范畴建模的但愿。
成绩
我为什么物?实践中我能够有多重身份。某些时分,我是编写软件的开辟者;另些时分,我是给人人解说某个有关Java话题的软件开辟者。但其他时分,我大概有完整分歧的身份,好比银行的客户、年夜学的校友。简而言之,我分歧时分的身份,由事先的详细情况决意。在分歧的情况中,我必要经由过程分歧接口、以响应行为与之交互。在一切这些情况中,我实在就是具有分歧接口统一个对象。在我编写软件的时分银行不会呈现另外一个我。
办理计划
假如在软件顶用OOP为我建模,一些人会将我计划为一个Developer类。但如许一个类明显不克不及在分歧时分表达我的分歧身份(好比一个年夜黉舍友,由于Developer类不包含交际观点)。因而对我建模的了局,大概会是几个分歧的类,大概在一个类中完成一切举动。在本文中,我们提出另外一种计划:使用Mixin(混进)观点完成这个完成。
组合
起首,Mixin被完成为一个一般Java类,它一般完成一个特定接口,而这个接口将是Composite所要表露接口的一部分。接着,我们用以下办法声明一个Composite:创立一个Java接口,用注解声明它要用到的Mixin,而且利用“extends”关头字指明需表露哪些范畴接口。经由过程这一办法,我们就能够载一个会合的地址明白界说Composite的布局和举动。
利用COP时,固然把横切存眷点保存在自力的完成类中是一个不错的主张,但是它们的拆卸或构成体例应当仍是会合用Java接口来讲明。为了不呈现反复的申明,我们能够经由过程“extends”关头字重用被扩大接口中的声明。如许,假如修改了被扩大接口,从其扩大而来的Composite接口声明就会主动改动,不需我们逐个做野生修正。
使用这类举措,我们信任能够做到一举两得:存在于各个独自完成类中的存眷点完成了分别,每一个类仅需存眷特定的义务;关于Composite终极应当是甚么样的形貌则是会合和断定的,如许,Composite的开辟者就能够全权卖力界说中应当包含的内容。
代码示例
Composite在实践中怎样详细使用呢?让我们看一个例子。假定我是一个Composite,那末可以下形貌我:
@Mixins({DeveloperMixin.class,SpeakerMixin.class,AlumniMixin.class})
publicinterfaceHumanComposite
extendsDeveloper,Speaker,Alumni,Composite
{}
被扩大接口中包括了实践要被挪用的办法,由Qi4j运转时情况往机关一个Composite实例,这一实例能够将“来自客户真个挪用”路由给特定的Mixin实例。但从客户真个角度看,这个Composite实例完整是一个一般Java对象(只管与普通OOP办法完成的范畴对象对照起来,它有更多的接口)。像Developer如许的领域接口是一般接口,和Qi4j无任何特别干系,实在现自己也是完成了该接口的简单Java类。可是下面所说的范畴对象的身份是由Composite实例而非某个Mixin实例界说的,如许就办理了身份成绩:对“我”这个对象的援用,可在体系局限里传送,并被传送给在特定高低文情况中很有效的接口。假如引进更多范畴或高低文情况时,也可经由过程扩大这个Composite来处置。
如需想创立另外一个也利用Alumni接口的Composite及实在现,我们可让此接口也扩大Alumni,并声明利用不异的Mixin。因而,多重承继和复用基本类的罕见成绩也办理了。
LMM布局
软件一般是在纸上分模块、分层举行计划的。我们对相似以下的计划图已非常熟习了:

这个图包括有多个模块,分歧模块组成了分歧层,而各层又叠放在一同。我们可将这类计划办法简称为LMM(LayeredModulesMetaphor,分层模块暗示法)。LMM图可用来转达一个全体使用的总括,不让我们堕入太多的细节傍边。严厉依照LMM的请求计划体系,可削减体系缺点、下降临时保护本钱,这类体系对将来变动的反应也可更加天真。尽年夜多半项目都利用LMM来形貌使用程序的组成体例,很多项目想法遵守LMM,但只要很少的项目是按此实行的。我想我们都已看到过良多凄惨教导,好比在基本布局层的类中间接利用Web层的类。
<p>
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net,
蒙在股里 该用户已被删除
沙发
发表于 2015-1-20 09:31:34 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
若天明 该用户已被删除
板凳
发表于 2015-1-23 09:25:51 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
因胸联盟 该用户已被删除
地板
发表于 2015-1-27 07:22:28 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
简单生活 该用户已被删除
5#
发表于 2015-2-5 02:00:30 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
乐观 该用户已被删除
6#
发表于 2015-2-11 01:00:10 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
分手快乐 该用户已被删除
7#
发表于 2015-3-1 19:09:12 | 只看该作者
是一种突破用户端机器环境和CPU
admin 该用户已被删除
8#
发表于 2015-3-10 22:09:16 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
山那边是海 该用户已被删除
9#
发表于 2015-3-17 11:09:45 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
老尸 该用户已被删除
10#
发表于 2015-3-24 08:33:47 | 只看该作者
是一种突破用户端机器环境和CPU
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 09:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表