在C++中使用IoC及DSM框架

254 views
Skip to first unread message

Ke Jin

unread,
Dec 15, 2007, 2:37:29 PM12/15/07
to TopLanguage
在C++中使用IoC及DSM框架

自Web和Java诞生以来,软件开发技术,概念以及架构的演变翻新有点让人眼花缭乱,甚至应接不暇。然而,恪守技术含量至上遗风的C++铁杆精英们似
乎是其中的另类,与标新立异摈弃繁文褥节的Java,Ruby新生代之间俨如隔世。不用说DSM,就连IoC这个起源于C++年代甚至C++土壤的概念
和方法虽然在墙外其他晚辈语言部落中广受青睐,在C++红墙内却反而遭长期冷落。IoC和DSM技术虽然看似简单无比平淡无奇遍地都是,甚至被很多C+
+大老们嗤之以鼻,但却能大大提升C++软件开发的效率及质量,而且能彻底简化和净化很多繁琐丑陋甚至危险的C++原始解决方案。比如,由IBM领头忽
悠的一个所谓"服务组件架构"SCA(Service Component Architecture)的厂商标准,其C++组件容器的参考实现
(RI)虽由IBM几个老大全时操刀,历时两年却仍然困难重重地蹒跚在Apache孵化项目阶段。不仅如此,这个沿用传统思维和方法的参考实现使用起来
也相当繁琐,甚至危险(用户将被迫采用无类型验证系统的C-style cast),并且有很多极不自然甚至丑陋的限制(比如对线程模型的特殊要求)
(参见 SCA considered harmful 一文<http://www.pocomatic.com/docs/
whitepapers/sca-harmful>)。与之对比,如果采用IoC和DSM技术去实现同样的SCA C++组件容器,一个初级菜鸟程序员
却能在几天甚至几小时内以区区数百行浅显易懂的代码轻而易举地大功告成,且其结果还远胜于IBM老大们呕心沥血打造的参考版(易用,类型安全,清除所有
不合理限制)(参见 SCA as a DSM 一文<http://www.pocomatic.com/docs/whitepapers/
webservices/#sca-as-a-dsm>)。此类事半功倍的例子在使用IoC和DSM框架的开发中屡见不鲜。其开发效率一个数量级以上的
跳跃改进也绝非天方夜谭。70年代关系数据库及SQL技术的引入就使数据库应用的开发效率提高了近两个数量级。

1. IoC
IoC字面上的意思是"控制反转"(Inversion of Control)。然而其具体含义五花八门的说法却很容易让很多人一头雾水。这些说法往
往是过多地关注IoC表面的甚至是字面的含义,却忽略了IoC被用来解决的实质问题(也无视了这个概念的历史和使用现状)。Martin
Fowler 就把IoC阐述甚至更名为"依赖注入"(Dependency Injection )设计模式<http://
martinfowler.com/articles/injection.html>。而IoC鼻祖之一 Stefano Mazzocchi 却指
出Martin Fowler这个忽悠了一大批人的说法实际上是不得要领(Martin Fowler文章中代码例子确实非常误导)<http://
www.betaversion.org/~stefano/linotype/news/38/>。所以,这里并不急于给IoC下一个教条定义,而是从IoC的实质目的开始探讨。

IoC的概念是Michael Mattson在1996年一篇讨论面向对象框架(Object Oriented Frameworks)的文章中提
出的。面向对象设计及编程(OOD/OOP)的基本思想简单地说就是把复杂软件系统分解成通过接口相互合作的对象。这些对象类的内部实现之间并不互相牵
扯,因而降低了问题的复杂性,且可独立灵活地被重用和扩展。自然而然,经典面向对象的编程语言(如C++,Java)的侧重点就是提供语言机制来方便并
简化这种基于对象类的分解,重用和扩展。然而,一个软件系统的开发效率,可扩展性,以及部署维护升级的灵活性等并不完全由其模块化分解的程度和抽象的优
劣所决定。很大程度上,能否有效清晰而又灵活地再将这些相对独立制作的分散部件组装成一个紧密合作的整体并完成其部署和配置更是决定该软件项目成败及其
产品系统优劣的关键。

以支持对象分解为己任的经典面向对象语言(如C++,Java)并没有引入超越传统命令式语言(imperative language)以外的系统组
装部署和配置手段(当然,Java 5,C#现在都开始往这方面添料)。因而,虽然它们能够有效地应付底层子系统的拼装和连接,但在进行大范围基于组件
(既高层业务层模块)层次的相应作业时就显得简陋,死板,冗长和低效。比如,在使用各种std的IO流类,STL容器类以及boost库类这些底层模块
类时,采用语言本身的机制(自动变量或用new算符)直截了当地实例化这些被使用类的对象就尽善尽美了。但在使用高层业务模块时,为了避免对其具体实现
类的依赖,人们不得不叠床架屋对语言机制进行额外的手工包装。应运而生的是一系列处理所谓管线逻辑(plumbing logic,既非业务逻辑)的设
计模式,比如factory,builder,directory,adaptor,singleton, configuration/
property manager,factory的manager甚至manager的manager等等。遗憾的是,一个世纪以来这些实际上是弥补
语言缺陷的权宜之计反而受到狂热追捧而非深入反思。另外,在传统软件的设计和实现中,业务逻辑往往直接调用这些管线逻辑,从而破坏了业务逻辑的简洁性和
独立性(比如增加了单元测试的困难)。更重要的是,软件组装部署和配置的逻辑是支离破碎地散落混迹于各个业务逻辑组件中,既不直观(往往是见树不见林)
也不灵活(牵一发则可能动全身)。往往使得在宏观结构上理解,维护,修改和扩充一个现有软件要反而难于当初从头开发这个软件。

为解决以上问题,Michael Mattson提出了面向对象框架的IoC设计原则。依照该原则,管线逻辑被转移并集中至软件框架内,业务逻辑模块并
不需知道更不必调用组件框架的服务,例如不用关心和调用其factory或lookup其directory或context等。软件的组装部署和配置
完全是由管线逻辑框架反过来主动控制业务逻辑模块来安排。Michael Mattson用所谓的好莱坞原则(Hollywood
Principle)"别来电(问)我,我会去电(告诉)你"(don't call me, I will call you)形象地比喻了这一设计
思想。这个比喻中的"我"指的是负责管线逻辑的组件框架,"你"则是被其调遣配置的一个组件。比如,在一个业务逻辑模块A需要调用另一个业务逻辑模块B
的场景中,传统的非IoC的设计(比如EJB2.0)是让A调用管线逻辑(B的factory或某个directory服务)来获得B的引用(或指
针)。在IoC框架内,框架不但完成A和B的实例化并保持追踪,而且B的实例引用(或指针)也是由框架主动调用A的接口函数(比如构造及赋值函数等)赋
予 A。从而,A的实现可以专著于业务逻辑,而管线细节(比如B的实例化及如何获得其引用或指针)可以让外部框架透明地安排妥当。这种架构完全避免了业
务逻辑对具体管线逻辑框架的牵连从而降低了业务逻辑模块的复杂度,但更重要的是集中的组装部署和配置逻辑为提高软件宏观结构的直观性和灵活性铺平了道路
(后面还将具体讨论)。

简短概括一下,从概念上说,IoC就是模块化软件组装部署配置框架的一个设计原则。依该原则,业务逻辑模块既不需要处理管线逻辑也可以对外部管线框架本
身一无所知(agnostic)。软件的搭接完全由外部管线框架对业务逻辑模块的主动操控来完成。从具体实现上说,除了一些开发工具以外,IoC框架不
过是一个封装了必备的管线逻辑及IoC机制的轻型类库(比如PocoCapsule/C++ IoC类库<http://
code.google.com/p/pococapsule>大约是70K)。从使用上说,用户制作好业务逻辑组件(见下面非侵入性与POCO讨
论),并将软件组装及部署描述(见后面讨论)提供给IoC框架(作为IoC框架库函数的调用参量,或直接驱动一系列库函数调用)。IoC容器(被调用的
库函数)将参照用户的描述相应地实例化和配置各个组件并将它们搭接为所希望的部署状态。

2. 非侵入性与POCO
对于象C++和Java这类不支持动态类型的语言环境,一个很自然的问题就是业务逻辑组件需要支持什么样的公共接口以使外部IoC框架能对其进行操控。
早期的组件框架(比如EJB2.0,CORBA组件模型 CCM,JTRS-SCA等)几乎清一色地采用侵入式(invasive)设计,也就是强制规
定业务逻辑模块(称作bean)必须与特定的公共组件接口模型兼容,既支持由组件框架定义的用来对组件进行部署配置的公共接口类型或基类(base
class)以及进行实例化的所谓home接口。侵入式设计不仅学习和使用繁琐(EJB2.0和CCM均是以繁为完美的恶例),也大大地限制了组建框架
的开放性和适应性。因为众口难调,所以几乎每一个问题领域均定义了N个自己的组件框架和组件接口模型(比如机器人领域里就至少有10个)。侵入式设计导
致组件接口模型只能被其特定的框架所支持,从而形成了各自为政老死不相往来的组件框架孤岛,限制了组件的重用范围以及框架的通用性。大量这类侵入式组件
框架以及与之相应的上下左右整个配套开发体系(如果侥幸有的话)均仅仅是在小范围内被采用,并以高成本在低水平上无谓地被重复开发和维护(CCM就是这
方面最恶名昭著的例子)。

因此,现代IoC框架大都采用非侵入式(non-invasive)设计,也就是不对组件接口模型(即接口及函数签名)做任何规定。换句话说,非侵入的
IoC框架一视同仁地支持任何组件接口模型,包括已经被定义的和还未被定义的模型,也包括标准组织定义的或用户自定义的模型。这些组件接口模型可以采用
(或不采用)任何公共或自定义接口,模板(template)或基类(也可以根本不是C++对象,比如C/C++函数),可以采用任何(合理的)实例化
或回收手段和部署配置函数,包括构造或析构函数,各种自定义 factory/pool/directory lookup函数,以及各种全局或成员函
数等(参见开源C++非侵入式IoC框架项目 PocoCapsule/C++ IoC的介绍<http://code.google.com/p/
pococapsule> )。在非侵入的C++ IoC组件框架中,因为所有组件无论其接口模型的新旧美丑高矮胖瘦均被一视同仁地按平头百姓对待,故
均被统称为"平庸C++对象"(Plain Old C++ Object )或POCO(相应于Java中的"平庸Java对象"POJO)。

3. 软件组装及部署描述
在使用IoC框架的C++软件开发过程中,管线模块及管线衔接代码转移并集中至IoC框架内,业务逻辑组件(高层模块或库类)的开发只需关注业务逻辑本
身。软件的搭接由IoC容器(或库类)按照用户提供的软件组装及部署描述(assembly and deployment description)
完成。因为由分散组件搭接成的软件呈树状或更广义的图状结构,所以,软件组装及部署描述就是对这种树图结构模型的描述。这种描述通常有三种表达(编写)
形式,既指令代码(code),元数据(metadata),和用户数据(data)。

虽然经典面向对象语言(比如C++和Java)可以有效地按程序步骤构造树图状数据结构,但对结构整体的"模型描述"却苍白无力。在C++中,要搭建一
个树图结构的代码不外乎就是一步步地去调用类似allocNode(),addNode(),wireNodes()等等函数。树图结构模型在这种指令
式的(imperative)"步骤描述"中荡然无存。对于管线逻辑比较简单的应用(例如底层或子模块),结构模型并不至关重要甚至是多此一举,而步骤
描述或干脆抛弃IoC框架也许更直接了当。然而对于管线逻辑较复杂的应用,对结构搭接具体步骤描述所引入的复杂性则与使用IoC框架抽象管线逻辑的原始
初衷背道而驰。

所谓元数据表述就是以编程语言的元数据结构来描述软件的管线结构模型。其实质就是利用传统指令性编程语言中类(class)结构定义的声明式语法来表达
管线结构。比如,如果一个结构有10个节点(组件),按此方法就是让用户定义一个包含10个相应成员函数的类(class)并辅助以相应注释
(annotation)标识管线连接。进行软件搭接时,IoC框架通过反射机制来解读这个类的结构并将其看做组件搭接的管线结构描述。这种方法,看似
提供了一种声明式的(declarative)模型描述,实际上则属于一种牵强附会甚至是生搬硬套的kludge,除了能满足"只使用编程语言本身来表
述管线逻辑"这一教义心态之外不具任何正面意义。

IoC框架中有效灵活自然直观的结构描述形式恰恰就是被大牛们鄙视为恶俗的用户文本数据描述形式。无论大牛们对这种C++和Java语法机制以外的方法
如何深恶痛绝,都不得不面对下面一个尴尬的窘境。C++和Java这类被他们(比如红帽Jboss的首席科学家)奉为万能银弹的编程语言中并不提供对树
图结构整体具体实例的有效描述手段。因为这类语言的目的仅仅是提供对象类的包装抽象机制,而并不是提供具体多对象系统整体部署结构的模型表述方法(更不
要说对各种模型之间变换,甚至变换的变换的声明式描述)。

4. 基于XML的组装及部署描述
主流IoC框架(甚至很多传统非IoC组件框架如EJB2.0和CCM)中用户文本数据形式的组装及部署描述大都是基于XML。XML的设计目的恰恰就
是提供对树图结构的声明式描述。对用户来说,XML标准及技术成熟稳定,已被普遍采用和支持(各种XML解析器和工具满天飞)。另外,XML框架内具备
完善的声明式结构转换技术(XSLT,XQuery),为从底层通用IoC组件部署描述提高到"针对问题域的特定建模"DSM(domain
specific modeling)准备好了理想平台。最重要的是,与SQL类似,XML是种连编程菜鸟都大呼容易的简单直观技术,这就使得很多领域
专家能够对组件构成的系统进行搭建和部署。

下面以开源项目PocoCapsule/C++ IoC框架 中的一个具体例子来介绍这个方法。这个例子的完整代码以及文档在PocoCapsule源
代码包 和安装包 中均可找到,也可以在http://www.pocomatic.com/docs/cpp-examples/basic-
ioc/gps 上在线浏览。

这个例子中所要搭建部署的是一个如图<http://www.pocomatic.com/docs/whitepapers/dsm/
gps.jpg>所示包含定时触发器(tick generator),GPS定位器(gps locator),导航显示器(navigate
display)三个组件的GPS系统。


PocoCapsule容器支持所谓POCO(既前面所说的"平庸C++对象"),从而对组件接口模型几乎没有任何限制。这三个组件的基类
TickGen,GPSLocator和NavDisplay都是由用户自己在Interfaces.h <http://
www.pocomatic.com/docs/cpp-examples/basic-ioc/gps/Interfaces.h>中如下定义的:

class EventListener {
public:
virtual ~EventListener() {}
virtual void refresh() = 0;
};

class EventEmitter {
public:
virtual ~EventEmitter() {}
virtual void subscribe(EventListener*) = 0;
};

class TickGen : public EventEmitter
{
public:
virtual void start() = 0;
};

class GPSLocator : public EventEmitter, public EventListener
{
public:
virtual int get_pos_x() = 0;
virtual int get_pos_y() = 0;
};

class NavDisplay : public EventListener
{
public:
};

这些组件的具体实现类TickGenImpl,GPSLocatorImpl和NavDisplayImpl则大致定义如下(忽略所有与组装不相关细
节)。


class TickGenImpl : public TickGen
{
...
public:
TickGenImpl(int cnt, int interval);
...
};

class GPSLocatorImpl : public GPSLocator
{
...
public:
GPSLocatorImpl();
...
};

class NavDisplayImpl : public NavDisplay
{
...
public:
NavDisplayImpl(GPSLocator* loc) ;
...
};

这些组件基类和具体实现类的定义以及它们的编译连接(动态或静态库均可)等开发制作方式与一般C++应用模块没任何区别,完全不需考虑IoC容器。它们
甚至可以是IoC时代以前已由第三方制作好,不提供源代码的模块。在这个例子中,除了需要用到这些组件实现类的构造算子原型以外省略掉了其他所有不需要
关心的实现细节。

接下来,可以用PocoCapsule的XML语法来描述这个GPS应用。PocoCapsule采用与Spring Framework尽量相近的
XML文本格式(schema,定义在poco-application.context.dtd 中),并针对C++语言特征进行了扩充。比如,将
bean实例化后的setter调用普遍化为任何IoC调用。在这个文本格式中,一个POCO组件的实例将被声明为一个<bean>元素,包含其构造算
子的参数(<method-arg>),实例化后的IoC(<ioc>),以及IoC方法的参量(也是<method-arg>)等子孙元素。比如,这
个例子中的GPS应用结构就可以由下面一段XML声明(见setup.xml ):

...
<poco-application-context>
...
<bean class="TickGenImpl" lazy-init="false">
<method-arg type="short" value="10"/>
<method-arg type="short" value="1"/>
<ioc method="subscribe">
<method-arg ref="gps-locator"/>
</ioc>

<ioc method="start"/>
</bean>

<bean id="gps-locator" class="GPSLocatorImpl">
<ioc method="subscribe">
<method-arg ref="nav-display"/>
</ioc>
</bean>

<bean id="nav-display" class="NavDisplayImpl">

<method-arg ref="gps-locator"/>
</bean>
</poco-application-context>

这段XML声明简单直观地表达了三个组件实例以及它们之间的互相衔接结构。可以形象化地将它用相应的C++形式表示如下:

TickGenImpl* tick_gen = new TickGenImpl(10, 1);
tick_gen->subscribe(gps_locator);
tick_gen->start();
...
GPSLocatorImpl* gps_locator = new GPSLocatorImpl;
gps_locator->subscribe(nav_display);
...
NavDisplayImpl* nav_display = new NavDisplayImpl(gps_locator);

虽然这两种描述看似表达同样的概念,但实际上他们有本质区别。C++版本表达的是构造这个应用的具体先后步骤,因此实际上必须重新修改上面C++代码行
的次序才能让程序正常编译和工作。而XML版本表达的则是一种结构,而并非构造这个结构的步骤。结构中各<bean>节点的实例化次序与它们在XML表
述中的先后次序无关,而是由IoC容器根据用户声明的节点属性(比如lazy-init的值)以及衔接时依赖关系的先后来决定。

至此,用户仅需要将这个XML描述以文件或字符串形式交给PocoCapsule/C++ IoC容器(既以文件名或XML字符串为参量调用
PocoCapsule/C++ IoC库函数,见main.C <http://www.pocomatic.com/docs/cpp-
examples/basic-ioc/gps/main.C> ),让其自动组装部署所描述的应用。关于PocoCapsule详细的使用及工作机制
描述可参阅其入门教材 <http://www.pocomatic.com/docs/whitepapers/ioc-tutorial>,用户手
册<http://code.google.com/p/pococapsule/downloads/list> ,及代码实例 <http://
www.pocomatic.com/docs/cpp-examples>。

5. DSM和模型变换
前面一节例子中用到的XML文本格式是由PocoCapsule容器支持的核心格式(core schema)。因为XML在IoC框架中用于描述基于
组件应用的结构模型,所以这个格式也称为建模格式。该建模格式与其他IoC容器所采用的XML格式大同小异。这种格式有直观易学,格式定义紧凑,普遍适
用等优点。然而,这些这些具有双刃剑特征的优点也意味着相应的缺点,诸如直接引用组件编程接口函数签名,表述力和抽象度低,容易造成冗长的声明及低级错
误。比如,前面GPS例子中,XML模型描述直接涉及了有两个参量的TickGenImpl的构造算子。从该模型描述中,人们无从判断这两个参量的目的
和意义。如果该模型描述声明了不匹配的参量类型,用户可以侥幸地得到IoC容器异常报告(虽然可能难于解读)。但如果这两个参量类型声明无误,而它们的
数值在无意间被相互颠倒了(因为恰好是同一类型),那么用户就只能听天由命了。以setter函数取代多参量的构造或工厂函数来完成组件配置看似避免了
这一问题,但实际上不但可能破坏无侵入(non-invasive)原则,而且还可能使模型描述更加冗长。同样,如果试图增强核心格式以减少这些缺点,
则会牺牲其相应的优点。众多的重型组件框架(如EJB,CCM等)采用的庞大XML描述格式和令人畏惧的UML2.0及XMI就是前车之鉴。

解决这个鱼和熊掌两难问题的一个有效方法是反其道而行之,干脆不去寻求一个能青菜萝卜一刀切"为所有人解决所有问题"的建模格式。而是提供一个开放平
台,允许用户根据自己的特定需要决定取舍制定最佳建模格式,也就是所谓"针对问题域特定建模"DSM(domain specific
modeling)。比如(参见PocoCapsule中dsm-gps例子 ),用户可以为自己要描述的GPS专门定义一个DSM格式gps-
device.dtd 。按照这个DSM格式,前面例子中的GPS系统可以被重新描述如下(参见setup.xml ):

<gps-device>
<tick-generator use="TickGenImpl" count="10" interval="1"/>
<gps-locator use="GPSLocatorImpl"/>
<navigation-display use="NavDisplayImpl"/>
</gps-device>.

与核心格式(poco-application.context.dtd )比较,这个DSM格式(gps-device.dtd)不但抽象度高,而且
定义更紧凑。在其模型描述中完全不涉及组件接口具体函数签名,甚至连组件间具体的连接也被藏于幕后。而其配置参数的含义则一目了然。

如前所说,XML框架中的XSLT和XQuery已经为支持这个DSM格式准备好了现成的平台。这个平台提供了以声明方式描述模型之间互相转换。因而,
用户在定义了一个DSM后只需要再提供该DSM格式至另一个建模格式(比如IoC框架的核心建模格式)的转换XSLT描述。那末,集成了XSLT转换器
的IoC框架(比如PocoCapsule/C++ IoC and DSM框架 )将会按照指定的转换描述将一个由新定义的DSM描述的结构转换为由
另一个DSM定义的结构,直至递归到该IoC框架的核心格式结构。不仅建模格式可以被转换,而且模型转换的XSLT描述本身的格式也可以被转换(甚至转
换的转换的转换),以简化转换描述的设计。这就是所谓的"高阶转换"HOT(higher order transformation )。关于IoC
框架中DSM模型转换的进一步描述可参阅PocoCapsule DSM入门教材<http://www.pocomatic.com/docs/
whitepapers/dsm>,用户手册<http://code.google.com/p/pococapsule/downloads/
list> ,及代码实例 <http://www.pocomatic.com/docs/cpp-examples>。

一个非侵入(non-invasive)IoC框架一视同仁地支持任何组件接口模型。DSM又使其能轻而易举地支持任何用户或标准组织定义的模型描述格
式。因此,一个IoC+DSM框架实际上是一个非常有效灵活的框架的框架。它让菜鸟可以轻松且高质量地实现很多组件框架,包括本文开始说的服务组件架
构 SCA,以及软件无线电SDR的JTRS-SCA核心框架(CF)组件架构,各种机器人软件组件架构,CORBA组件架构,等等如图
<http://www.pocomatic.com/docs/whitepapers/dsm/dsm-diagram.jpg>所述的在
PocoCapsule中提供的DSM框架。




Ke Jin

unread,
Dec 15, 2007, 2:42:19 PM12/15/07
to TopLanguage
这个组上帖没有预览功能。。。结果贴了个乱七八糟:-(。这里<http://blog.csdn.net/kjin101/archive/
2007/12/16/1941057.aspx>看原文吧

莫华枫

unread,
Dec 15, 2007, 7:27:17 PM12/15/07
to pon...@googlegroups.com
现代C++已经不能算作OOP语言。技术重心已经全面转向GP。很明显的一点,标准库已经全面泛型化,即便是stream库这个遗老遗少,也很少真正玩弄动多态这个OOP的看家宝。而boost库则是纯粹而又正宗的GP库,对于动多态,也完全抱着"逼急了才用"的态度。
所以,这类把地基打在OOP上的设计理念和技术,自然无法引起C++社群的兴趣。因为对于OOP而言的诸多技术问题和困难,在GP中已经不是问题。比如对于侵入式设计,GP具备天生的免疫力。但是抛开OOP不说,其中的很多设计思想实际上已经在C++领域中生根开花。比如boost::signal就使得事件相关方无需照面,全由框架控制。
OOP的诸多问题,只有在(纯)OOP这个环境中才是问题。比如类耦合,在过去的SP中根本没有这个名词,而在GP中,并不关心类本身,更多地关心类的特性,自然不会同特定的类型耦合。
C++真正离开OOP进入GP领域,也差不多是95年之后的事。98年标准的出台,则仪式性地宣告了这个迁移。然而,这段时间里,业界的财主们正在为了市场份额大打出手,并且不惜工本地高举OOP,在那里摇旗呐喊。财富的力量毕竟不可小觑,整个编程界的目光都为之吸引。从而忽略了GP这味针对OOP难题的解药。随着OOP问题的不断暴露,人们试图在OOP领域内搜寻最后一根稻草。然而却未曾想到去外面更大的天地里寻找。
为什么有人说"用Ruby从不需要考虑设计模式",就是因为Ruby没有把自己绑死在OOP这一棵树上。

Ke Jin

unread,
Dec 15, 2007, 8:45:58 PM12/15/07
to TopLanguage
多谢评论。说明一下:

IoC和DSM(至少按我的解释)并非基于更非绑死在OOP这颗树上。作为入门文章,我只能从最浅显一面展开。实际上IoC和DSM与OOP也好GP也
吧,甚至SP等等均是正交的,甚至不是一个层面上的技术。以我的看法,至少在C++中,IoC的目的主要就是能够支持基于组件的DSM。至于组件本身是
遵循哪中paradigm并不重要(尤其是在domain一层,组件的编程接口应该完全不可见)。至少这三个paradigm制作的组件在
PocoCapsule中都能够被支持(这在文档中是特意提到的)。

On Dec 15, 4:27 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 现代C++已经不能算作OOP语言。技术重心已经全面转向GP。很明显的一点,标准库已经全面泛型化,即便是stream库这个遗老遗少,也很少真正玩弄动多态-这个OOP的看家宝。而boost库则是纯粹而又正宗的GP库,对于动多态,也完全抱着"逼急了才用"的态度。
> 所以,这类把地基打在OOP上的设计理念和技术,自然无法引起C++社群的兴趣。因为对于OOP而言的诸多技术问题和困难,在GP中已经不是问题。比如对于侵入-式设计,GP具备天生的免疫力。但是抛开OOP不说,其中的很多设计思想实际上已经在C++领域中生根开花。比如boost::signal就使得事件相关方无-需照面,全由框架控制。
> OOP的诸多问题,只有在(纯)OOP这个环境中才是问题。比如类耦合,在过去的SP中根本没有这个名词,而在GP中,并不关心类本身,更多地关心类的特性,自-然不会同特定的类型耦合。
> C++真正离开OOP进入GP领域,也差不多是95年之后的事。98年标准的出台,则仪式性地宣告了这个迁移。然而,这段时间里,业界的财主们正在为了市场份额-大打出手,并且不惜工本地高举OOP,在那里摇旗呐喊。财富的力量毕竟不可小觑,整个编程界的目光都为之吸引。从而忽略了GP这味针对OOP难题的解药。随着O-OP问题的不断暴露,人们试图在OOP领域内搜寻最后一根稻草。然而却未曾想到去外面更大的天地里寻找。
> 为什么有人说"用Ruby从不需要考虑设计模式",就是因为Ruby没有把自己绑死在OOP这一棵树上。
>
> On Dec 16, 2007 3:37 AM, Ke Jin <kjin...@gmail.com> wrote:
>
>
>
> > 在C++中使用IoC及DSM框架
>
> > 自Web和Java诞生以来,软件开发技术,概念以及架构的演变翻新有点让人眼花缭乱,甚至应接不暇。然而,恪守技术含量至上遗风的C++铁杆精英们似
> > 乎是其中的另类,与标新立异摈弃繁文褥节的Java,Ruby新生代之间俨如隔世。不用说DSM,就连IoC这个起源于C++年代甚至C++土壤的概念
> > 和方法虽然在墙外其他晚辈语言部落中广受青睐,在C++红墙内却反而遭长期冷落。IoC和DSM技术虽然看似简单无比平淡无奇遍地都是,甚至被很多C+
> > +大老们嗤之以鼻,但却能大大提升C++软件开发的效率及质量,而且能彻底简化和净化很多繁琐丑陋甚至危险的C++原始解决方案。比如,由IBM领头忽
> > 悠的一个所谓"服务组件架构"SCA(Service Component Architecture)的厂商标准,其C++组件容器的参考实现
> > (RI)虽由IBM几个老大全时操刀,历时两年却仍然困难重重地蹒跚在Apache孵化项目阶段。不仅如此,这个沿用传统思维和方法的参考实现使用起来
> > 也相当繁琐,甚至危险(用户将被迫采用无类型验证系统的C-style cast),并且有很多极不自然甚至丑陋的限制(比如对线程模型的特殊要求)
> > (参见 SCA considered harmful 一文<http://www.pocomatic.com/docs/
> > whitepapers/sca-harmful>)。与之对比,如果采用IoC和DSM技术去实现同样的SCA C++组件容器,一个初级菜鸟程序员
> > 却能在几天甚至几小时内以区区数百行浅显易懂的代码轻而易举地大功告成,且其结果还远胜于IBM老大们呕心沥血打造的参考版(易用,类型安全,清除所有
> > 不合理限制)(参见 SCA as a DSM 一文<http://www.pocomatic.com/docs/whitepapers/
> > webservices/#sca-as-a-dsm>)。此类事半功倍的例子在使用IoC和DSM框架的开发中屡见不鲜。其开发效率一个数量级以上的
> > 跳跃改进也绝非天方夜谭。70年代关系数据库及SQL技术的引入就使数据库应用的开发效率提高了近两个数量级。
>
> > 1. IoC
> > IoC字面上的意思是"控制反转"(Inversion of Control)。然而其具体含义五花八门的说法却很容易让很多人一头雾水。这些说法往
> > 往是过多地关注IoC表面的甚至是字面的含义,却忽略了IoC被用来解决的实质问题(也无视了这个概念的历史和使用现状)。Martin
> > Fowler 就把IoC阐述甚至更名为"依赖注入"(Dependency Injection )设计模式<http://
> > martinfowler.com/articles/injection.html>。而IoC鼻祖之一 Stefano Mazzocchi 却指
> > 出Martin Fowler这个忽悠了一大批人的说法实际上是不得要领(Martin Fowler文章中代码例子确实非常误导)<http://
> >www.betaversion.org/~stefano/linotype/news/38/<http://www.betaversion.org/%7Estefano/linotype/news/38/>
> ...
>
> read more >>- Hide quoted text -
>
> - Show quoted text -

Jian Wang

unread,
Dec 15, 2007, 9:29:34 PM12/15/07
to pon...@googlegroups.com
简单看了一下,这种做法在10年前的CORBA/COM技术中就已经有了.除了把注册表换成XML之外,没有看出有什么新意.
无非就是先定义接口,然后通过配置来决定相应的实例化组件.
C++的实现会有很多问题,比如dll的话,每个DLL可以有自己的heap.那么生命期的维护及必不可少.等等.

希望LZ能够比较一下CORBA/COM和IoC的同异。

在 07-12-16,Ke Jin<kji...@gmail.com> 写道:

Ke Jin

unread,
Dec 15, 2007, 10:59:10 PM12/15/07
to TopLanguage
多谢评论。

我曾经做了10年ORB底层(从96年到06年,几乎是从上到下里里外外,C++和JAVA的),我并不知道CORBA有任何跟这个东西相似的东西,能
否提示一下你说的什么东西跟IOC类似。你说的注册表之类的,我也从来没听说过。可能名词用的不一样。CORBA中可以相比的大概就是CCM了。CCM
 vs IOC可以用EJB2。0 vs IOC来形容(而DSM可以跟UML+MDA去比较)。这只是个容易让人理解的比较,并不精确。CCM应该更
类似Apache Avalon,而不是EJB2。0。

COM从来没摸过,所以只能评一星半点知识回答你的问题。我的理解,COM跟IoC的目的完全不一样。COM主要想解决的是跨编译器模块的互用连接,所
以定义了个什么二禁止标准。这不是IoC要处理的问题,也不是IOC采用的技术。

生命周期管理中如何释放从其他DLL中分配来的HEAP的内存并不是个新问题,更不是个难问题。任何框架都应该提供解决方案,包括CORBA(比如对
CORBA字符串的内存管理)。PocoCapsule完全支持这些解决方案(否则我们就根本支持不了CORBA)或者任何用户自己的方案(实际上都差
不多,别用delete,而用该DLL内的一个释放函数)。文档中有专门一节讨论描述各种生命周期的管理。

再谢


On Dec 15, 6:29 pm, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> 简单看了一下,这种做法在10年前的CORBA/COM技术中就已经有了.除了把注册表换成XML之外,没有看出有什么新意.
> 无非就是先定义接口,然后通过配置来决定相应的实例化组件.
> C++的实现会有很多问题,比如dll的话,每个DLL可以有自己的heap.那么生命期的维护及必不可少.等等.
>
> 希望LZ能够比较一下CORBA/COM和IoC的同异。
>
> 在 07-12-16,Ke Jin<kjin...@gmail.com> 写道:
> ...
>
> read more >>

莫华枫

unread,
Dec 15, 2007, 11:53:51 PM12/15/07
to pon...@googlegroups.com
它们推出的意图或者说原始动力来源于OOP。为什么GP上没有出现这些问题?
到头来,这些技术也是为了解决OOP的问题而提出的。但如果晚上几年,或许就不会提出如此的理论了。因为已经有更本质办法解决这类问题了。

Ke Jin

unread,
Dec 16, 2007, 12:35:10 AM12/16/07
to TopLanguage
IoC现在有各种解释,也在各个不同层次使用(底层和上层都有)。我觉着对于底层,也就是组件内模块(或子模块)的连接,使用情况来说,确实有很多
alternative方案。正向你说的,如过这些alternatives早点出来,就没IoC什么事了。实际上现在Java中的,为底层采用的
IOC已经与早期的和我这里所说的IoC不同了。但是,我所关注的,也是PocoCapsule要解决的是业务组件层问题,也就是基于业务层模块的组
装。这跟最早的初衷是否一致我没有考据过(我并没有找到免费下载的MICHAEL的论文--即使有,我也未必去读),但绝对不是SP,OOP,GP或等
想要和能够有效的解决的问题。否则,搞CCM,UML,MDA,XMI,。。。内些人早就没必要xia折腾了(难道他们都不知道GP?)。

实际上在组件层上所说的OOP并非严格的OOP。更确切地说应该叫OBP。至少PocoCapsule并不要求组件必须有一个纯虚的基类。一个POCO
可以是任何玩意儿,包括任何类(with or without abstract base classs)或模板类,结构,甚至函数(以函数指针形
式)。IoC也可以不是类成员函数,而是C/C++全局或静态函数(不带this指针)。实际上,整套机制可以很方便的拿来支持C和Ada应用。。。

On Dec 15, 8:53 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 它们推出的意图或者说原始动力来源于OOP。为什么GP上没有出现这些问题?
> 到头来,这些技术也是为了解决OOP的问题而提出的。但如果晚上几年,或许就不会提出如此的理论了。因为已经有更本质办法解决这类问题了。
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

Ke Jin

unread,
Dec 16, 2007, 12:53:39 AM12/16/07
to TopLanguage
另外,GP也不是银蛋。只不过GP在底层应用中解决了一些这类问题而已。在高层组件的组装配置则需要一套更灵活(比如能在很多情况下不用重新编译连
接),表现力和抽象度更高(从而更容易让非编程人员理解),更结构化(能够对全局结构提供自我文档),能够很方便地支持以不同描述模型以及模型变换,能
够在很低的要求下支持很高层的第三方建模工具(而不是底层C++大妈分析工具)。。。等等的手段。这些没一个是GP所解决的问题。。。。

On Dec 15, 8:53 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 它们推出的意图或者说原始动力来源于OOP。为什么GP上没有出现这些问题?
> 到头来,这些技术也是为了解决OOP的问题而提出的。但如果晚上几年,或许就不会提出如此的理论了。因为已经有更本质办法解决这类问题了。
>
> ...
>
> read more >>

莫华枫

unread,
Dec 16, 2007, 1:09:56 AM12/16/07
to pon...@googlegroups.com
我相信他们知道GP。但是要知道GP真正充分地形成完整的体系,也就是最近3、4年的事情。之前GP的尚不完全,也未达到随处可用的地步。我试图解释的是C++社群为什么不再关注这些新的模式和方法了。他们现在更多地关注GP的发展和应用。更重要的是,他们在运用GP的时候已经完全抛开了传统意义上的一些模式。因为在足够抽象的层面上,是不需要专门的某种方法和理论来处理的。只要抽象能力足够,可以将问题域自然地展开,获得解决方案。这也就是为什么会有"使用ruby不再考虑设计模式问题"这种说法。大概也算是"无招胜有招"吧。:)

莫华枫

unread,
Dec 16, 2007, 1:20:29 AM12/16/07
to pon...@googlegroups.com
从最新的发展来看,gp虽然说不上是一颗银弹,但也足以够得上三分之一颗了。我相信另外两个三分之一应当是fp和mp。目前随着runtime concept技术浮出水面,gp不再是单纯的编译时技术,它所具备的运行时能力已经达到代替动多态的地步了。
至于gp的抽象能力、灵活性、表现力,这个字母G已经表明它的能力了。gp目前的问题不在这些方面。目前的gp关键问题是没有运行时能力。但Bjarne等人的新论文,已经预示着这方面的突破。

Ke Jin

unread,
Dec 16, 2007, 1:43:50 AM12/16/07
to TopLanguage
我也相信他们知道GP,但我的解释稍有不同,这正说明GP不是解决所说问题的银蛋。设计模式(特别是工场模式)只是很小的一部分问题。我用来开题是为了
能浅显易懂(也易说),当然有以偏概全的可能。很多实际需求(在另一篇答复中已经列出)渊源超出传统四人帮射击模式所讨论的问题。。。也渊源超出GP所
关注的和能有效解决的问题。至于所说的"C++社群不再关注这些新的模式和方法",我想可能是你我所处的领域不同吧。据我所知(直接的和间接的)因为缺
少有效的解决方案(CCM,MDA,UML可以说均告失败)很多欧米大型企业不得不化很多精力和物理BUILD自己HOMEGROWN的解决方
案。。。。当然,这都是局限在我所关注的领域内。

On Dec 15, 10:09 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 我相信他们知道GP。但是要知道GP真正充分地形成完整的体系,也就是最近3、4年的事情。之前GP的尚不完全,也未达到随处可用的地步。我试图解释的是C++社群为什么不再关注这些新的模式和方法了。他们现在更多地关注GP的发展和应用。更重要的是,他们在运用GP的时候已经完全抛开了传统意义上的一些模式。因为在足够抽象的层面上,是不需要专门的某种方法和理论来处理的。只要抽象能力足够,可以将问题域自然地展开,获得解决方案。这也就是为什么会有"使用ruby不再考虑设计模式问题"这种说法。大概也算是"无招胜有招"吧。:)
>

Ke Jin

unread,
Dec 16, 2007, 1:55:13 AM12/16/07
to TopLanguage
FP和MP我都可以说是外行。而且,IoC+DSM所要解决的问题是要提供灵活的高级抽象(浅显易懂地描述领域问题或模型--面对的可能是非编程人
员),而不是高深抽象(有效地描述底层问题--直接由编程人员使用)。我想IoC和DSM组合更象关系数据库和SQL的组合,同样不能被GP(或别的什
么P)取代。

当然,很多FP和MP里的概念和方法是可以接见的。实际上PocoCapsule DSM种很多概念都是从LISP或一般FP中找到影子。结构化模型描
述不就是个S-expression嘛,模型变换就是defmacro,高阶变换就是高街函数(当然要把数据模型理解成函数。。data is
code)。。。

On Dec 15, 10:20 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 从最新的发展来看,gp虽然说不上是一颗银弹,但也足以够得上三分之一颗了。我相信另外两个三分之一应当是fp和mp。目前随着runtime
> concept技术浮出水面,gp不再是单纯的编译时技术,它所具备的运行时能力已经达到代替动多态的地步了。
> 至于gp的抽象能力、灵活性、表现力,这个字母G已经表明它的能力了。gp目前的问题不在这些方面。目前的gp关键问题是没有运行时能力。但Bjarne等人的新论文,已经预示着这方面的突破。
>
> On Dec 16, 2007 1:53 PM, Ke Jin <kjin...@gmail.com> wrote:
>
> > 另外,GP也不是银蛋。只不过GP在底层应用中解决了一些这类问题而已。在高层组件的组装配置则需要一套更灵活(比如能在很多情况下不用重新编译连
> > 接),表现力和抽象度更高(从而更容易让非编程人员理解),更结构化(能够对全局结构提供自我文档),能够很方便地支持以不同描述模型以及模型变换,能
> > 够在很低的要求下支持很高层的第三方建模工具(而不是底层C++大妈分析工具)。。。等等的手段。这些没一个是GP所解决的问题。。。。
>
> > On Dec 15, 8:53 pm, "莫华枫" <longshank...@gmail.com> wrote:
> > > 它们推出的意图或者说原始动力来源于OOP。为什么GP上没有出现这些问题?
> > > 到头来,这些技术也是为了解决OOP的问题而提出的。但如果晚上几年,或许就不会提出如此的理论了。因为已经有更本质办法解决这类问题了。
>
> > > On Dec 16, 2007 9:45 AM, Ke Jin <kjin...@gmail.com> wrote:
>
> > > > 多谢评论。说明一下:
>
> > IoC和DSM(至少按我的解释)并非基于更非绑死在OOP这颗树上。作为入门文章,我只能从���浅显一面展开。实际上IoC和DSM与OOP也好GP也
> ...
>
> read more >>

Ke Jin

unread,
Dec 16, 2007, 2:04:26 AM12/16/07
to TopLanguage

刚才的贴好象全乱码。。。只能从敲从贴。。。

FP和MP我都可以说是外行。而且,IOC+DSM所要解决的问题是要提供灵活的"高层"抽象(浅显易懂地描述领域问题或模型--面对的可能是非编程人
员),而不是"高深"抽象(有效地描述底层算法问题--直接由编程人员使用)。我想IOC和DSM组合更象关系数据库和SQL(特别是动态的)的组合,
同样还没被被GP(或别的什么P)取代。

当然,很多FP和MP里的概念和方法是可以接见的。实际上PocoCapsule DSM种很多概念甚至名词明显都是从LISP或一般FP中搬来
的。imperative结构化模型描述不就是个S-expression嘛,模型变换就是defmacro,高阶变换就是高街函数(当然要把数据模型
理解成函数。。data is code)。。。

On Dec 15, 10:20 pm, "莫华枫" <longshank...@gmail.com> wrote:

Ke Jin

unread,
Dec 16, 2007, 2:12:50 AM12/16/07
to TopLanguage
更正一下。。。应该是"declarative结构化模型描述。。。"。咱时不长就干些打左灯往右转的事。。。:)

莫华枫

unread,
Dec 16, 2007, 2:55:53 AM12/16/07
to pon...@googlegroups.com
恰恰相反,gp实际上已经超出了这里讨论的范围。因为gp不是方法,而是解药。和这些理论和方法正交。而它带来的抽象能力提升,使得很多方法面临的问题得以化解。
--
反者道之动,弱者道之用
m...@seaskysh.com
longsh...@gmail.com
http://blog.csdn.net/longshanks/

Ke Jin

unread,
Dec 16, 2007, 3:37:11 AM12/16/07
to TopLanguage
是方法也好是灵丹妙药也吧,都需要通过语言来支持。我看不出来C++的GP解决了我说说的问题。比如快速(不需重新编译连接系统)而进行组件重新配置搭
接甚至替换。。。如何提供整体结构模型,以及对该模型的约束及验证(当然,你可以写一堆代码),。。。模型描述格式的转换。。。,而且服用这灵丹妙药时
您还不能强制要求组件开发的paradigm(GP,OOP,OBP, SP, ....只要是C++/C写出来的,或工具生成的组件, 有没有元代码
您痛痛都的照顾, 一个也不能拉下)。

还有, 我们在所有IOC+DSM解决的问题中都跟其他现有方案做了具体比较,而并非泛泛地说IOC+DSM是灵丹妙药, 你可以在<http://
www.pocomatic.com/articles>上找到相关文章。既然GP这么神,您也可以解决几个问题与IOC+DSM比较一下。比如PocoCapsule支持几乎所有CORBA和WS应用的部署配置模型,
在上面地址可以找到相关文章。绝大部分是CCM和MDA折腾了N年还寸步难行的问题。而IOC+DSM对每一个问题的解决最长的是几周,最短的是几小
时。您随便挑一个用GP取代一下。如果你不懂CORBA或WS也行,SQL总懂吧,讲一下GP如何取代动态SQL。。。这种取代对传统SQL应用和用户
有什么好处。。。。当然IOC+DSM不是取代动态SQL的灵丹妙药。

On Dec 15, 11:55 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 恰恰相反,gp实际上已经超出了这里讨论的范围。因为gp不是方法,而是解药。和这些理论和方法正交。而它带来的抽象能力提升,使得很多方法面临的问题得以化解。
>

莫华枫

unread,
Dec 16, 2007, 4:05:39 AM12/16/07
to pon...@googlegroups.com
那就耐心些看吧。:)

Ke Jin

unread,
Dec 16, 2007, 4:17:12 AM12/16/07
to TopLanguage
实际上我们并不是直接跳到IOC+DSM这个方案上的。各种解决方案,包括GP等都曾经尝试过。。。。比较过。。。深入分析过。。。一点点理解过来
的。。。。你怎么想的我一清二楚,因为我们还有很多第三方原来都曾走过这些过程。

On Dec 16, 1:05 am, "莫华枫" <longshank...@gmail.com> wrote:
> 那就耐心些看吧。:)
>
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

莫华枫

unread,
Dec 16, 2007, 5:17:25 AM12/16/07
to pon...@googlegroups.com
On Dec 16, 2007 5:17 PM, Ke Jin <kji...@gmail.com> wrote:
实际上我们并不是直接跳到IOC+DSM这个方案上的。各种解决方案,包括GP等都曾经尝试过。。。。比较过。。。深入分析过。。。一点点理解过来
的。。。。你怎么想的我一清二楚,因为我们还有很多第三方原来都曾走过这些过程。
呵呵,这是不可能的。因为我说的gp,还在C++0x草案里呢。另外一些,则还在Bjarne 他们的论文里。

Ke Jin

unread,
Dec 16, 2007, 12:37:25 PM12/16/07
to TopLanguage
误会误会。你去重读一下你自己写的第一篇FOLLOWUP。用的词全是"已经","已经"。您说过这"已经"是N年后的美好展望了的意思ma?。你要早
这么说我就不反驳了。我决不否认未来C++语言变化会引入替代的机制。现在JAVA中这种形式的IOC(特别是在底层应用中),已经被JAVA5中的新
机制所取代。C++中当然可以....

On Dec 16, 2:17 am, "莫华枫" <longshank...@gmail.com> wrote:

莫华枫

unread,
Dec 16, 2007, 7:33:17 PM12/16/07
to pon...@googlegroups.com
我言未达意。"已经"是指技术上一部分已经成熟,但尚未进入语言。另一部分也已经明确其可能性。我们可以"想像"他的作用。不好意思,说太急了。
一个框架所使用的底层技术直接决定了它所需的tricks的数量。很明显Java不具备gp能力,那么这个框架为了适应这类(纯)oop语言,不得不采用某种措施加以化解(比如接口类型归一化)。但是这类措施可能在gp之类无需使用。反过来,如果这个框架宽泛到能够容纳任何范式,而没有tricks,那么它也只能做到泛泛地给出设计指导。由于这对矛盾的存在,我们实际上不可能得到一个适用于任何范式的框架和模式。
这也就是为什么gof在书的一开头就明确表示不考虑任何模板的应用(当然事实上也用了一点点,但只是点缀)。gof设计模式的长期价值在于给出了主要开发活动中的应用场景。事实上这些场景并非针对任何范式。而gof仅采用oop加以实现,是因为oop是当时最完善的抽象机制。
回到我最初的论点,C++社群剩下的那些铁杆们因为发现更加完善的抽象体系,因而把注意力集中到这些方面。在这个技术条件下,如果依然停留在以oop为起点诸多方法和模式上,很自然地会被认为自缚手脚。或许这种态度有些武断,但是对于gp的核心技术虽已明确,但对其特性和能量尚不清晰(似乎有迹象表明,concept的作用有可能进一步超越gp,甚至对mp产生重要的影响)。这种情况下抛开原有的条条框框,或许是最佳选择。

Ke Jin

unread,
Dec 16, 2007, 11:46:20 PM12/16/07
to TopLanguage
首先,多谢你的很多反馈和讨论,受益匪浅。来本坦才几天,感觉全是高高手。但高手也有高手的麻烦,就是固定思维。无名小卒说的话,痛痛都是垃圾。。。。
 ;-)

今天在维基上看了一下C++0X,并没有看到能够取代IoC框架的东西。当然,你理解的IoC框架与我理解的可能不一样。我估计你理解的是编程阶段的框
架,也就是我文章中说的底层框架。而我所谈的(也是PocoCapsule支持的)是部署配置时的框架,也就是文章中说的高层框架(因为更接近
domain用户)。

Concept什么的对编程阶段的IoC也许有用(实际没有也行,定义个wrapper模板就是了--10几年前CORBA C++所谓的TIE影射就
是怎么干的),但对部署和配置时的IoC来说无济于事。因为IoC框架不但不规定公共接口,也不规定公共函数名和参量个数及类型等。所以在任意的需要被
接纳的已编译连接好的组件和单一的已编译连接好的容器之间就有一个GAP。这在RUBY一类的动态语言里不是问题,在JAVA和C#这类静态语言中是靠
反射和动态调用解决的。C++0X既没有引入动态类型也没引入反射和动态调用。

另外,我也没找到C++0X是如何支持声明式的用户数据描述,声明式的描述格式变换描述,以及变换的变换的描述。

你关于范式的讨论我没看明白。是指Paradigm吗? PocoCapsule也并非克意去支持所有组件接口paradigm,而是正好与这些具体组
件实现paradigm正交,所以自然而然neutral to paradigm。

On Dec 16, 4:33 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 我言未达意。"已经"是指技术上一部分已经成熟,但尚未进入语言。另一部分也已经明确其可能性。我们可以"想像"他的作用。不好意思,说太急了。
> 一个框架所使用的底层技术直接决定了它所需的tricks的数量。很明显Java不具备gp能力,那么这个框架为了适应这类(纯)oop语言,不得不采用某种措施加以化解(比如接口类型归一化)。但是这类措施可能在gp之类无需使用。反过来,如果这个框架宽泛到能够容纳任何范式,而没有tricks,那么它也只能做到泛泛地给出设计指导。由于这对矛盾的存在,我们实际上不可能得到一个适用于任何范式的框架和模式。
> 这也就是为什么gof在书的一开头就明确表示不考虑任何模板的应用(当然事实上也用了一点点,但只是点缀)。gof设计模式的长期价值在于给出了主要开发活动中的应用场景。事实上这些场景并非针对任何范式。而gof仅采用oop加以实现,是因为oop是当时最完善的抽象机制。
> 回到我最初的论点,C++社群剩下的那些铁杆们因为发现更加完善的抽象体系,因而把注意力集中到这些方面。在这个技术条件下,如果依然停留在以oop为起点诸多方法和模式上,很自然地会被认为自缚手脚。或许这种态度有些武断,但是对于gp的核心技术虽已明确,但对其特性和能量尚不清晰(似乎有迹象表明,concept的作用有可能进一步超越gp,甚至对mp产生重要的影响)。这种情况下抛开原有的条条框框,或许是最佳选择。
>
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

莫华枫

unread,
Dec 17, 2007, 12:13:25 AM12/17/07
to pon...@googlegroups.com
concept可以runtime化。随之而来的,便是运行时非侵入二进制接口。这种能力便修补了"语言缺陷"。concept的故事才开始,C++0x讲了第一季,第二季的开头部分在Bjarne他们的论文里。
依赖于动态的技术并非新鲜事,com算作最大规模的尝试,尽管不算很成功,但已经测出了这类技术的边界。但是我们可以拥有比动态更可靠的新技术,应该多加考虑。

高手不高手,咱就别再提了。我不是什么高手,就是专著一个问题的时间长了,有些固执(偏执)。别跟一头驴一般见识,对吧?:P

Ke Jin

unread,
Dec 17, 2007, 12:24:58 AM12/17/07
to TopLanguage
runtime化?听着象动态化。我得去关注一下. 如果能拿来模拟动态类型, 确实可以解决很多问题。但并不意味着IOC(指部署时)和DSM就没必
要了,而是使IOC框架的实现更容易了。当然,我在写科普文章是就不能再拿类绑定说事了。也难。。。我要直接说DSM,绝大多数C++程序员不会看第二
段。。。。;)

On Dec 16, 9:13 pm, "莫华枫" <longshank...@gmail.com> wrote:
> concept可以runtime化。随之而来的,便是*运行时*的*非侵入二进制*
> 接口。这种能力便修补了"语言缺陷"。concept的故事才开始,C++0x讲了第一季,第二季的开头部分在Bjarne他们的论文里。
> 依赖于动态的技术并非新鲜事,com算作最大规模的尝试,尽管不算很成功,但已经测出了这类技术的边界。但是我们可以拥有比动态更可靠的新技术,应该多加考虑。
>
> 高手不高手,咱就别再提了。我不是什么高手,就是专著一个问题的时间长了,有些固执(偏执)。别跟一头驴一般见识,对吧?:P
>
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

lili...@gmail.com

unread,
Dec 21, 2007, 2:28:32 AM12/21/07
to TopLanguage
To Ke Jin

看了你们的PocoCapsule C++实现,受益颇多,不过要是你们的文章有中文的就好了,呵呵e文不好呀。

Jian Wang

unread,
Dec 21, 2007, 8:17:53 PM12/21/07
to pon...@googlegroups.com
我觉得狂侃概念没什么意义.越说越不明白.我想首先需要了解的是IoC究竟是解决什么问题的,以及如何解决的.

LZ虽然写了一大堆,但都是泛泛而谈,没有实质性内容.唯一能看到的就是降低复杂性.但是降低了哪方面的复杂性还是看不到.究竟是解决了生命期管理的问题还是接口耦合的问题,还是部署的问题,还是别德什么呢?如果能举个简单的例子说明一下的话,就容易理解多了.

其次是介绍一下具体的实现手段,比如如何从DLL中load一个未知的对象等等.

在 07-12-21,lili...@gmail.com<lili...@gmail.com> 写道:

Jian Wang

unread,
Dec 21, 2007, 8:28:21 PM12/21/07
to pon...@googlegroups.com
再补充一点就是效率问题.
大家都知道如果不考虑效率的话,一般都不需要使用C++来开发。IoC如何在各个组件能够按照配置文件自由组合时,避免额外的性能损失呢?


在 07-12-22,Jian Wang<oxygen.j...@gmail.com> 写道:

Ke Jin

unread,
Dec 21, 2007, 8:50:00 PM12/21/07
to TopLanguage
具体解决了什么问题,文章中说了,引用的连接里也说了。一个小小的建议,请你先把文章仔细读完。而且不要先如为主,带着有色眼睛去读,再来些先射箭后画
靶子的问题。。多谢合作;))这篇是给容器使用者,而不是面向容器实现者的。所以,具体的实现手段若有必要,我会另外写文章的。这是开源项目,你可以看
源代码,并不难理解其机制。

On Dec 21, 5:17 pm, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> 我觉得狂侃概念没什么意义.越说越不明白.我想首先需要了解的是IoC究竟是解决什么问题的,以及如何解决的.
>
> LZ虽然写了一大堆,但都是泛泛而谈,没有实质性内容.唯一能看到的就是降低复杂性.但是降低了哪方面的复杂性还是看不到.究竟是解决了生命期管理的问题还是接口耦合的问题,还是部署的问题,还是别德什么呢?如果能举个简单的例子说明一下的话,就容易理解多了.
>
> 其次是介绍一下具体的实现手段,比如如何从DLL中load一个未知的对象等等.
>
> 在 07-12-21,liling...@gmail.com<liling...@gmail.com> 写道:

Ke Jin

unread,
Dec 21, 2007, 8:53:30 PM12/21/07
to TopLanguage
对绝大多数需要用IOC的应用来说,POCOCAPSULE可以使因采用IOC框架所引入的效率损失为0。这在手册(以及在其他IOC框架中)中均有讨
论。

On Dec 21, 5:28 pm, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> 再补充一点就是效率问题.
> 大家都知道如果不考虑效率的话,一般都不需要使用C++来开发。IoC如何在各个组件能够按照配置文件自由组合时,避免额外的性能损失呢?
>
> 在 07-12-22,Jian Wang<oxygen.jian.w...@gmail.com> 写道:
>
> > 我觉得狂侃概念没什么意义.越说越不明白.我想首先需要了解的是IoC究竟是解决什么问题的,以及如何解决的.
>
> > LZ虽然写了一大堆,但都是泛泛而谈,没有实质性内容.唯一能看到的就是降低复杂性.但是降低了哪方面的复杂性还是看不到.究竟是解决了生命期管理的问题还是接口耦合的问题,还是部署的问题,还是别德什么呢?如果能举个简单的例子说明一下的话,就容易理解多了.
>
> > 其次是介绍一下具体的实现手段,比如如何从DLL中load一个未知的对象等等.
>
> > 在 07-12-21,liling...@gmail.com<liling...@gmail.com> 写道:

Ke Jin

unread,
Dec 21, 2007, 8:56:17 PM12/21/07
to TopLanguage
多谢,并严重考虑你的建议。争取尽早先把手册翻成中文。

On Dec 20, 11:28 pm, "liling...@gmail.com" <liling...@gmail.com>
wrote:

Jian Wang

unread,
Dec 21, 2007, 9:27:43 PM12/21/07
to pon...@googlegroups.com
我本身不是搞web开发的,我的领域是桌面系统和嵌入式系统。因此是抱着学习的目的来参与讨论。并不是来砸场子的。

说实话,你的文章大部分没看懂。可能是我比较菜吧。里面引入了大量的概念,但是对于所解决的哪个领域的问题描述的并不是很清晰。我不知道这个技术是对整个C++来说是一种泛用的技术,还是解决某个特定领域的技术。比如说,在嵌入式系统中有没有使用的价值?

看了教程后,我就更晕乎了。
Foo foo("hello");
foo.hello("world");
不比那XML文件加上main.C更清晰很简单吗?那么搞的这么复杂之后,解决了什么问题呢?没看出来。

因此希望楼主能够举个例子来说明所解决的问题,而不是泛泛而谈。

在 07-12-22,Ke Jin<kji...@gmail.com> 写道:

Ke Jin

unread,
Dec 21, 2007, 9:54:22 PM12/21/07
to TopLanguage
基本上是解决了以前CBD+MDA/MDD,现在的微软software factory等等想解决而要么失败,要么还没有完好解决的问题。这里
CBD=component-based development(基于组建的开发)。而MDA/MDD(特别是基于UML的)是一种模型导向的架构和
开发 (model driven architecture/model driven design)。

虽然PocoCapsule可以支持web开发,而且正象文章开头所说的,比IBM的技术要好的多,但在下的主要心思并不是web开发(因为那里不是C
++的市场),而是实时嵌入应用。比如,我文章中所说的机器人软件(这个领域现在有10几个非IoC人肉框架),软件无线电(既SDR,现在的事实上的
标准是个基于CORBA的重型框架叫JRTS-SCA),几乎所有C++的CORBA and DDS应用。PocoCapsule可以完全取代CCM
重型框架(虽然搞CCM的都愿意自称LW-CCM),国防/制造/航空/航天/交通运输等领域这方面C++的应用还很多,下删1000字。。。。

至于你说的那个Foo (hello)的例子的目的是介绍入门使用方法,而不是要深入说明PocoCapsule要解决的问题。就跟K&R C的
hello world一样,并不是为了说明C比直接命令行

  %echo Hello World!

强大。

On Dec 21, 6:27 pm, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> 我本身不是搞web开发的,我的领域是桌面系统和嵌入式系统。因此是抱着学习的目的来参与讨论。并不是来砸场子的。
>
> 说实话,你的文章大部分没看懂。可能是我比较菜吧。里面引入了大量的概念,但是对于所解决的哪个领域的问题描述的并不是很清晰。我不知道这个技术是对整个C++来说是一种泛用的技术,还是解决某个特定领域的技术。比如说,在嵌入式系统中有没有使用的价值?
>
> 看了教程后,我就更晕乎了。
> Foo foo("hello");
> foo.hello("world");
> 不比那XML文件加上main.C更清晰很简单吗?那么搞的这么复杂之后,解决了什么问题呢?没看出来。
>
> 因此希望楼主能够举个例子来说明所解决的问题,而不是泛泛而谈。
>
> 在 07-12-22,Ke Jin<kjin...@gmail.com> 写道:

pongba

unread,
Dec 22, 2007, 11:58:43 AM12/22/07
to pon...@googlegroups.com
终于有时间仔细阅读了一下,不错的文章。

有两个建议:1. 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2. 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。

我的理解:

IoC的本质目的是为了,当多个组件之间交互的时候,避免组件与组件之间依赖于互相的具体实现(比如XXXImpl具体类)。(设计模式里面使用factory、build等创建型模式来解决问题,但IoC使用的是控制反转来解决问题)。——这个理解对否?

我对IOC缺点的理解:
1. 缺乏精细控制:如果组件与组件之间除了创建对象及调用对方接口函数之外还夹杂着一些零碎的"中间操作"的话,那么这些中间操作放在哪呢?难道也封装成一个个组件?
2. factory模式解依赖有什么问题吗?用IoC来解决是不是值得费这个力气呢?也就是说,对传统解依赖的手法到底存在什么问题非得上IoC,我不甚理解。
3. 是的,IoC可以用于任意接口模型的组件,因为我们在XML文件里面描述这些接口。但是,真正交互的各个组件之间仍然需要通过一致的接口来沟通 (interfaces.h里面的定义)。我原本以为IoC能够解决接口的语法和接口语义耦合的问题,举个例子,组件A需要调用Logging服务,组件 B是一个具体的Logger实现。用IoC,我在编写组件A的时候仍然需要引入ILogger接口定义,而A和B则都要依赖这个接口。难道不能A和B自己 搞自己的接口,至于中间的适配层则留给IoC解决,这就解决了接口依赖问题。从而彻底解开了A和B之间的所有依赖。



On Dec 16, 2007 3:37 AM, Ke Jin < kji...@gmail.com> wrote:
在C++中使用IoC及DSM框架

自Web和Java诞生以来,软件开发技术,概念以及架构的演变翻新有点让人眼花缭乱,甚至应接不暇。然而,恪守技术含量至上遗风的C++铁杆精英们似
乎是其中的另类,与标新立异摈弃繁文褥节的Java,Ruby新生代之间俨如隔世。不用说DSM,就连IoC这个起源于C++年代甚至C++土壤的概念



--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba

Jian Wang

unread,
Dec 22, 2007, 8:02:04 PM12/22/07
to pon...@googlegroups.com
> 有两个建议:1.
> 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2.
> 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。

说的太好了,说出了我的心声。发现自己的表达能力有问题。郁闷。。。。

在 07-12-23,pongba<pon...@gmail.com> 写道:

Ke Jin

unread,
Dec 23, 2007, 1:12:18 AM12/23/07
to TopLanguage
On Dec 22, 8:58 am, pongba <pon...@gmail.com> wrote:
> 终于有时间仔细阅读了一下,不错的文章。
>
--------
答: 多谢刘大老的肯定。
-------


> 有两个建议:1.
> 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2.
> 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。
>
--------
答: 这个建议我会严重考虑。我本人也是头一次写忽悠文章,经验不足,很多拿捏分寸掌握不好。比如,怕例子简单了让人误解这玩意儿没什么用。毕竟对C+
+大老们来说,IoC,特别是XML,需要一种paradigm shift的心理适应(我本人也走过同样路程),更不要说DSM了。很多人(不是说这
里的人,说的是前阵我和Jboss首席科学家打的口水战)连基本概念都没整明白就开始对这些东西嗤之以鼻了。
--------

> 我的理解:
>
> IoC的本质目的是为了,当多个组件之间交互的时候,避免组件与组件之间依赖于互相的具体实现(比如XXXImpl具体类)。(设计模式里面使用factory、build等创建型模式来解决问题,但IoC使用的是控制反转来解决问题)。----这个理解对否?
>
-------
答: 这个理解是典型且普遍的误解。你问了个非常好的也是非常关键的问题。这一点在我的原文中反而被忽略了,甚至有点被舞蹈了。IoC的目的并不是"避
免组件与组件之间依赖于互相的具体实现"。因为正象你说的,这完全可以用factory/builder/directory等一步做到。IoC的目的
是下一步,也就是进一步避免组件对这些factory/builder/directory等管线逻辑的依赖。

通常的非IoC方式是在实现业务逻辑的组件内调用factory/manager去解析依赖,去查询配置管理器去解析配置参量等等。。。。而按IoC的
方式,所有这些依赖和配置的解析等管线逻辑都应该与业务逻辑分离,集中由框架完成并反向地将结果(依赖和配置参量等)直接传递给组件。
--------

> 我对IOC缺点的理解:
> 1.
> 缺乏精细控制:如果组件与组件之间除了创建对象及调用对方接口函数之外还夹杂着一些零碎的"中间操作"的话,那么这些中间操作放在哪呢?难道也封装成一个个组件?
-------
答: 这个问题我没太看懂,只能试着回答。IoC框架既不参与也不知道组件与组件之间具体的相互调用,不管是粗的还是细的。正因为如此,昨天王老大问效
率损失时我立刻回答说是0。IoC只负责将这些组件搭接起来,也就是说将一个组件的引用或指针告诉另一个组件。具体这第二个组件如何使用这个引用或指针
则完全不是IoC框架所要关心。
----------

> 2. factory模式解依赖有什么问题吗?用IoC来解决是不是值得费这个力气呢?也就是说,对传统解依赖的手法到底存在什么问题非得上IoC,我不甚理解。
----------
答: 前面已说过,这是个误解。IoC并不是要取代factory/builder,而是要将这些管线逻辑从组件的业务逻辑中分离出来,集中至框架中管
理。实际上,PocoCapsule中有大量的例子使用factory。XML配置中的factory-bean和factory-method就是让
用户指定factory以及其方法。用new只不过是个factory的特例。
----------

> 3. 是的,IoC可以用于任意接口模型的组件,因为我们在XML文件里面描述这些接口。但是,真正交互的各个组件之间仍然需要通过一致的接口来沟通 (
> interfaces.h里面的定义)。我原本以为IoC能够解决接口的语法和接口语义耦合的问题,举个例子,组件A需要调用Logging服务,组件
> B是一个具体的Logger实现。用IoC,我在编写组件A的时候仍然需要引入ILogger接口定义,而A和B则都要依赖这个接口。难道不能A和B自己
> 搞自己的接口,至于中间的适配层则留给IoC解决,这就解决了接口依赖问题。从而彻底解开了A和B之间的所有依赖。
>
--------
答: 参见前面所说的: IoC框架既不参与也不知道组件与组件之间具体的相互调用. 接口匹配一般是组件本身而并非IOC所要求的。
--------

Ke Jin

unread,
Dec 23, 2007, 1:17:18 AM12/23/07
to TopLanguage
王老大的建议我也会严重考虑,再写一篇,到时候和老大切磋(或请老大指教:))))

On Dec 22, 5:02 pm, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> > 有两个建议:1.
> > 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2.
> > 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。
>
> 说的太好了,说出了我的心声。发现自己的表达能力有问题。郁闷。。。。
>
> 在 07-12-23,pongba<pon...@gmail.com> 写道:
>
> > 终于有时间仔细阅读了一下,不错的文章。
>
> > 有两个建议:1.
> > 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2.
> > 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。
>
> > 我的理解:
>
> > IoC的本质目的是为了,当多个组件之间交互的时候,避免组件与组件之间依赖于互相的具体实现(比如XXXImpl具体类)。(设计模式里面使用factory、build等创建型模式来解决问题,但IoC使用的是控制反转来解决问题)。----这个理解对否?
>
> > 我对IOC缺点的理解:
> > 1.
> > 缺乏精细控制:如果组件与组件之间除了创建对象及调用对方接口函数之外还夹杂着一些零碎的"中间操作"的话,那么这些中间操作放在哪呢?难道也封装成一个个组件?
> > 2.
> > factory模式解依赖有什么问题吗?用IoC来解决是不是值得费这个力气呢?也就是说,对传统解依赖的手法到底存在什么问题非得上IoC,我不甚理解。
> > 3.
> > 是的,IoC可以用于任意接口模型的组件,因为我们在XML文件里面描述这些接口。但是,真正交互的各个组件之间仍然需要通过一致的接口来沟通
> > (interfaces.h里面的定义)。我原本以为IoC能够解决接口的语法和接口语义耦合的问题,举个例子,组件A需要调用Logging服务,组件
> > B是一个具体的Logger实现。用IoC,我在编写组件A的时候仍然需要引入ILogger接口定义,而A和B则都要依赖这个接口。难道不能A和B自己
> > 搞自己的接口,至于中间的适配层则留给IoC解决,这就解决了接口依赖问题。从而彻底解开了A和B之间的所有依赖。
>

Jian Wang

unread,
Dec 23, 2007, 1:21:42 AM12/23/07
to pon...@googlegroups.com
我对这个话题非常感兴趣。
感谢Ke Jin的耐心回答。
期待你的新文章。


在 07-12-23,Ke Jin<kji...@gmail.com> 写道:

pongba

unread,
Dec 23, 2007, 1:30:29 AM12/23/07
to pon...@googlegroups.com
On Dec 23, 2007 2:12 PM, Ke Jin <kji...@gmail.com> wrote:
On Dec 22, 8:58 am, pongba <pon...@gmail.com> wrote:
> 终于有时间仔细阅读了一下,不错的文章。
>
--------
答: 多谢刘大老的肯定。
-------


> 有两个建议:1.
> 第一长段的铺垫引入了很多概念,容易让读者坠入5里雾中,即便理解力强的也需要吃力才能暂时放在脑子里。入手以俭朴的问题描述和代码示例为好。2.
> 对问题的描述和解决方案的描述缺乏一小段精到的,直指问题本质的阐述;需要费力去字里行间概括。
>
--------
答: 这个建议我会严重考虑。我本人也是头一次写忽悠文章,经验不足,很多拿捏分寸掌握不好。比如,怕例子简单了让人误解这玩意儿没什么用。毕竟对C+
+大老们来说,IoC,特别是XML,需要一种paradigm shift的心理适应(我本人也走过同样路程),更不要说DSM了。很多人(不是说这
里的人,说的是前阵我和Jboss首席科学家打的口水战)连基本概念都没整明白就开始对这些东西嗤之以鼻了。
--------

> 我的理解:
>
> IoC的本质目的是为了,当多个组件之间交互的时候,避免组件与组件之间依赖于互相的具体实现(比如XXXImpl具体类)。(设计模式里面使用factory、build等创建型模式来解决问题,但IoC使用的是控制反转来解决问题)。----这个理解对否?
>
-------
答: 这个理解是典型且普遍的误解。你问了个非常好的也是非常关键的问题。这一点在我的原文中反而被忽略了,甚至有点被舞蹈了。IoC的目的并不是"避
免组件与组件之间依赖于互相的具体实现"。因为正象你说的,这完全可以用factory/builder/directory等一步做到。IoC的目的
是下一步,也就是进一步避免组件对这些factory/builder/directory等管线逻辑的依赖。

理解了。然后我的问题就是:管线逻辑代码通常就那么多麽?以至于需要用上一整个儿IoC框架?也许文章中可以列举一些数据,以具体说明为什么对管线逻辑的依赖造成了实际上的困扰。因为至少在我看来,使用一个factory框架和使用IoC框架需要耗费差不多的精力;也许后者还要更多?(IoC框架学习成本+XML文件编写+因IoC介入造成的调试困难(组件之间的交互藏于XML文本之中,不是吗?)
 
通常的非IoC方式是在实现业务逻辑的组件内调用factory/manager去解析依赖,去查询配置管理器去解析配置参量等等。。。。而按IoC的
方式,所有这些依赖和配置的解析等管线逻辑都应该与业务逻辑分离,集中由框架完成并反向地将结果(依赖和配置参量等)直接传递给组件。
--------

> 我对IOC缺点的理解:
> 1.
> 缺乏精细控制:如果组件与组件之间除了创建对象及调用对方接口函数之外还夹杂着一些零碎的"中间操作"的话,那么这些中间操作放在哪呢?难道也封装成一个个组件?
-------
答: 这个问题我没太看懂,只能试着回答。IoC框架既不参与也不知道组件与组件之间具体的相互调用,不管是粗的还是细的。正因为如此,昨天王老大问效
率损失时我立刻回答说是0。IoC只负责将这些组件搭接起来,也就是说将一个组件的引用或指针告诉另一个组件。具体这第二个组件如何使用这个引用或指针
则完全不是IoC框架所要关心。

我的意思是,就拿你的例子来说,三个组件A,B,C。互相协作组成一个GPS导航系统。但如果我想在ABC的交互过程中加上一些零碎的代码,这些代码既不属于A、B也不属于C。那如何让IoC也调用到这些代码呢?这只是我设想出来的情况,可能并不成立,比如这些零碎的代码也许肯定应该属于A/B/C中的任意一个。
 

----------

> 2. factory模式解依赖有什么问题吗?用IoC来解决是不是值得费这个力气呢?也就是说,对传统解依赖的手法到底存在什么问题非得上IoC,我不甚理解。
----------
答: 前面已说过,这是个误解。IoC并不是要取代factory/builder,而是要将这些管线逻辑从组件的业务逻辑中分离出来,集中至框架中管
理。实际上,PocoCapsule中有大量的例子使用factory。XML配置中的factory-bean和factory-method就是让
用户指定factory以及其方法。用new只不过是个factory的特例。

还是前一个问题。为什么值得费这个力气。我想肯定并不是任何时候都适合用IoC框架来取代管线逻辑的。那么问题就成为:IoC框架的适用场合呢?(应该跟应用的规模有关吧?)
 

----------

> 3. 是的,IoC可以用于任意接口模型的组件,因为我们在XML文件里面描述这些接口。但是,真正交互的各个组件之间仍然需要通过一致的接口来沟通 (
> interfaces.h里面的定义)。我原本以为IoC能够解决接口的语法和接口语义耦合的问题,举个例子,组件A需要调用Logging服务,组件
> B是一个具体的Logger实现。用IoC,我在编写组件A的时候仍然需要引入ILogger接口定义,而A和B则都要依赖这个接口。难道不能A和B自己
> 搞自己的接口,至于中间的适配层则留给IoC解决,这就解决了接口依赖问题。从而彻底解开了A和B之间的所有依赖。
>
--------
答: 参见前面所说的: IoC框架既不参与也不知道组件与组件之间具体的相互调用. 接口匹配一般是组件本身而并非IOC所要求的。
--------

我的意思是,IoC的用途是抽离管线逻辑。我本以为IoC能够解开A和B之间的接口依赖呢,比如你的例子当中对EventEmiter接口的依赖(我不是说IoC框架对这个接口的依赖,我是说A和B两个模块对这个接口的依赖)

Ke Jin

unread,
Dec 23, 2007, 4:12:59 AM12/23/07
to TopLanguage
On Dec 22, 10:30 pm, pongba <pon...@gmail.com> wrote:
> 理解了。然后我的问题就是:管线逻辑代码通常就那么多麽?以至于需要用上一整个儿IoC框架?也许文章中可以列举一些数据,以具体说明为什么对管线逻辑的依赖造成了实际上的困扰。因为至少在我看来,使用一个factory框架和使用IoC框架需要耗费差不多的精力;也许后者还要更多?(IoC框架学习成本+XML文件编写+因IoC介入造成的调试困难(组件之间的交互藏于XML文本之中,不是吗?)
>
------------------
答: 管线逻辑远远不止几个“为了避免组件间对对方实现互相依赖”而引入的factory。
对于仅此要求的应用,当然没有必要用IoC框架。其它一些管线逻辑的例子包括分布式中间件(比如CORBA或WS)环境下的业务逻辑部署(将业务逻辑部
署为服务端点,以及相应的transaction, security等等策略),与外部服务(比如消息服务中间件)的连接,注册等等等等。另外,除了
使用标准中间件时引入的繁琐官衔逻辑以外,在制造业/国防/交通等等领域的很多大型应用系统本身也有很多非标准中间件官衔逻辑。这些官衔逻辑要么是应用
系统homegrown的中间件所引入,要么是为扩充标准中间件所引入。

很多这些中间件(标准的或homegrown)的管线逻辑连它们设计和实现者都感到繁琐,不要说是使用者(也就是业务逻辑开发者)。而这些管弦逻辑根本
与业务逻辑无关,业务逻辑开发人员根本就不应该去关注它们。这些管线逻辑的学习曲线绝对要比XML大几倍甚至几十,上百倍。文档中有这方面的探讨。比
如,ACE/TAO有一个长达一学期的培训课程,教授CORBA及相关服务的应用开发技术。如果按照我们IoC框架所给出的解决方案,一个别太菜的鸟
(average developer)花3,4小时学XML(我用了两个晚上),然后加一周时间学学这些声明式的部署配制描述模型就能轻而易举地以浅
显易懂的代码实现很多以前连底层专家都退避三舍的复杂搭接。

另外,IoC框架不但不增加调试困难,反而使单元测试更加方便。我实际上是去年11月中旬就将这个框架写好了。以后这一年时间基本上都是在eat
my own dogfood (自己吃自己烧的破菜) -- 使用并在其上开发。我并没感觉到对应用调试造成障碍。我理解你可能认为IoC越俎代庖了
一些官衔逻辑,妨碍开发人员对这些逻辑的跟踪。实际上,在不妨碍开发人员用传统方式进行跟踪调试的前提下,由于这些逻辑被集中管理,框架反而能提供额外
的跟综手段(文档中找trace)。

另外,IoC并非是头一个认识到管弦逻辑应该有组件框架来集中管理。基于组件的开发/软件工程(CBD/CBSE)已经是个老生常谈了. 建议大家去
GOOGLE上搜搜软件框架的文章,特别是直接用户谈如何在他们开发的大型或复杂系统中使用这些框架(标准的或homegrown的)。当然可能很多
CBD/CBSE是无病呻吟,而且传统CBD中间件确实不但没解决问题,反而将问题变的更复杂了(比如CCM和SCA等)。而IOC恰恰解决了这一问
题。

再有更重要的一点就是IoC使得声明式的管弦逻辑部署成为可能,这就为DSM铺平了道路。而这种方式的DSM即使不是M$ software
factory的取代者,也是它的一个alternative。总之,要领会IOC+DSM的意义,一定要跳出“编程”这个圈子去看问题。C++在这个
小圈子里可能是个下蛋的公鸡,但当软件的尺度或对其灵活性的要求大于这个圈子后,C++就应该依赖其他的补充框架才能更好的解决问题。我前几天曾经问
过,为什么人们不用C++外加文件IO,HASH表,或MDB/NDB等纯编程的手段来进行数据处理,存储,查询,而非弄个外部关系数据库和与C++格
格不入的SQL才能完成某些任务?
------------------

>
> 我的意思是,就拿你的例子来说,三个组件A,B,C。互相协作组成一个GPS导航系统。但如果我想在ABC的交互过程中加上一些零碎的代码,这些代码既不属于A、B也不属于C。那如何让IoC也调用到这些代码呢?这只是我设想出来的情况,可能并不成立,比如这些零碎的代码也许肯定应该属于A/B/C中的任意一个。
>
>
------------
答: IOC对此不加任何限制。这完全根据你自己的设计要求而定。你可以将这些额外的零碎逻辑集中到一个组建中,并让IOC框架管理并将它与ABC搭
接,也可以用传统方式直接与ABC连接(或让ABC直接与它连接),不受IOC框架控制。IOC只是多给你一种选择,而并非一种强制限制。
------------

>
>
> 还是前一个问题。为什么值得费这个力气。我想肯定并不是任何时候都适合用IoC框架来取代管线逻辑的。那么问题就成为:IoC框架的适用场合呢?(应该跟应用的规模有关吧?)
>
>
------
答:见对第一问的回答。
------

> 我的意思是,IoC的用途是抽离管线逻辑。我本以为IoC能够解开A和B之间的接口依赖呢,比如你的例子当中对EventEmiter接口的依赖(我不是说IoC框架对这个接口的依赖,我是说A和B两个模块对这个接口的依赖)
>
--------
答:明白。IOC既不负责解开也不引入组件间接口类型的依赖。
---------

Oldrev

unread,
Dec 23, 2007, 9:36:09 AM12/23/07
to TopLanguage
这段时间一直在用 .Net 的框架 Castle,IoC 模式的使用的确是能让代码更清晰。我想这应该归功于 .Net 平台丰富的RTTI,和一
点点运行时生成代码的能力(CodeDOM)。这两点恐怕 C++ 很难实现。

像 .Net 框架一样在用户端放个编译器不知道算不算 IoC...

Ke Jin 写道:
> ��C++��ʹ��IoC��DSM���
>
> ��Web��Java������4�����������������Լ��ܹ����ݱ䷭���е������ۻ����ң�����Ӧ�Ӳ�Ͼ��Ȼ����ؼ��� �����ŷ��C++��˾�Ӣ����
> �������е����࣬�����b���������ڵ�Java��Ruby�����֮��ٲ����!�����˵DSM����lIoC�����Դ��C++�������C++���5ĸ���
> �ͷ�����Ȼ��ǽ�������?���Բ����й���������C++��ǽ��ȴ�����ⳤ�����䡣IoC��DSM������Ȼ���Ƽ��ޱ�ƽ�������ض��ǣ����q��ܶ�C+
> +��������֮�Աǣ���ȴ�ܴ������C++���������Ч�ʼ��� �������ܳ��׼򻯺;����ܶ෱���ª����Σ�յ�C++ԭʼ���������磬��IBM��ͷ��
> �Ƶ�һ����ν"��������ܹ�"SCA��Service Component Architecture���ij��̱�׼����C++�������IJο�ʵ��
> ��RI������IBM�����ϴ�ȫʱ�ٵ�����ʱ}��ȴ��Ȼ'�����ص�������Apache����Ŀ�׶Ρ�������ˣ�������ô�ͳ˼ά�ͷ����IJο�ʵ��ʹ����4
> Ҳ�൱��������Σ�գ��û������Ȳ�����������֤ϵͳ��C-style cast���������кܶ༫����Ȼ���s�ª�����ƣ�������߳�ģ�͵�����Ҫ��
> ���μ� SCA considered harmful һ��<http://www.pocomatic.com/docs/
> whitepapers/sca-harmful>������֮�Աȣ�������IoC��DSM����ȥʵ��ͬ���SCA C++�������һ���������Ա
> ȴ���ڼ������|�Сʱ�������������dz���׶��Ĵ�������׾ٵش󹦸�ɣ�������Զʤ��IBM�ϴ���Ż��dѪ����IJο��棨���ã����Ͱ�ȫ���������
> ���������ƣ����μ� SCA as a DSM һ��<http://www.pocomatic.com/docs/whitepapers/
> webservices/#sca-as-a-dsm>���������°빦����������ʹ��IoC��DSM��ܵĿ������ż��ʡ��俪��Ч��һ���� �����ϵ�
> ��Ծ�Ľ�Ҳ����췽ҹ̷��70����ϵ��ݿ⼰SQL����������ʹ��ݿ�Ӧ�õĿ���Ч������˽�}���� ����
>
> 1. IoC
> IoC�����ϵ���˼��"���Ʒ�ת"��Inversion of Control����Ȼ������庬���廨���ŵ�˵��ȴ�������úܶ���һͷ��ˮ����Щ˵����
> ���ǹ��ع�עIoC���������������ĺ��壬ȴ������IoC����4����ʵ�����⣨Ҳ���������������ʷ��ʹ����״����Martin
> Fowler �Ͱ�IoC�������x���Ϊ"��5ע��"��Dependency Injection �����ģʽ<http://
> martinfowler.com/articles/injection.html>����IoC����֮һ Stefano Mazzocchi ȴָ
> ��Martin Fowler��������һ�����˵�˵��ʵ�����Dz���Ҫ�죨Martin Fowler�����д�������ȷʵ�dz��󵼣�<http://
> www.betaversion.org/~stefano/linotype/news/38/>�����ԣ����ﲢ�����ڸ�IoC��һ������壬���Ǵ�IoC��ʵ��Ŀ�Ŀ�ʼ̽�֡�
>
> IoC�ĸ�����Michael Mattson��1996��һƪ�������������(Object Oriented Frameworks)����������
> ��ġ����������Ƽ���̣�OOD/OOP���Ļ�˼��򵥵�˵���ǰѸ������ϵͳ�ֽ��ͨ��ӿ��໥����Ķ�����Щ��������ڲ�ʵ��֮�䲢������ǣ
> ��������������ĸ����ԣ��ҿɶ�b���ر����ú�)չ����Ȼ��Ȼ�������������ı�����ԣ���C++��Java���IJ��ص�����ṩ���Ի���4���㲢
> �����ֻ��ڶ�����ķֽ⣬���ú�)չ��Ȼ��һ�����ϵͳ�Ŀ���Ч�ʣ���)չ�ԣ��Լ�����ά���������ԵȲ�����ȫ����ģ�黯�ֽ�ij̶Ⱥͳ������
> �������ܴ�̶��ϣ��ܷ���Ч������������ٽ���Щ��Զ�b����ķ�ɢ������װ��һ����ܺ�������岢����䲿������ø��Ǿ�������Ŀ�ɰܼ���
> ��Ʒϵͳ���ӵĹؼ�
>
> ��֧�ֶ���ֽ�Ϊ���εľ�������������ԣ���C++��Java����û�����볬Խ��ͳ����ʽ���ԣ�imperative language�������ϵͳ��
> װ����������ֶΣ���Ȼ��Java 5��C#���ڶ���ʼ���ⷽ�����ϣ��������Ȼ�����ܹ���Ч��Ӧ���ײ���ϵͳ��ƴװ��l�ӣ����ڽ��д�Χ�������
> ���ȸ߲�ҵ���ģ�飩��ε���Ӧ��ҵʱ���Եü�ª���0壬�߳��͵�Ч�����磬��ʹ�ø���std��IO���࣬STL�������Լ�boost������Щ�ײ�ģ��
> ��ʱ���������Ա���Ļ��ƣ��Զ��� ����new���ֱ���˵���ʵ����Щ��ʹ����Ķ���;��ƾ����ˡ�����ʹ�ø߲�ҵ��ģ��ʱ��Ϊ�˱���������ʵ��
> �����5�����Dz��ò��������ݶ����Ի��ƽ��ж�����ֹ���װ��Ӧ�˶������һϵ�д�����ν�����߼���plumbing logic���ȷ�ҵ���߼�������
> ��ģʽ������factory��builder��directory��adaptor��singleton�� configuration/
> property manager��factory��manager����manager��manager�ȵȡ��ź����ǣ�һ���<���4��Щʵ�������ֲ�
> ����ȱ�ݵ�Ȩ��֮�Ʒ����ܵ�����׷�������뷴˼�����⣬�ڴ�ͳ�������ƺ�ʵ���У�ҵ���߼�����ֱ�ӵ�����Щ�����߼����Ӷ��ƻ���ҵ���߼��ļ���Ժ�
> ��b��(��������˵�Ԫ���Ե�'��)������Ҫ���ǣ������װ��������õ��߼���֧�������ɢ��켣�ڸ��ҵ���߼�����У��Ȳ�ֱ�ۣ������Ǽ�����֣�
> Ҳ����ǣһ������ܶ�ȫ�?������ʹ���ں�۽ṹ����⣬ά�����޸ĺ�)��һ���������Ҫ�������ڵ����ͷ������������
>
> Ϊ����������⣬Michael Mattson�������������ܵ�IoC���ԭ�����ո�ԭ�򣬹����߼���ת�Ʋ��������������ڣ�ҵ���߼�ģ�鲢
> ����֪�8�ص��������ܵķ������粻�ù��ĺ͵�����factory��lookup��directory��context�ȡ��������װ���������
> ��ȫ���ɹ����߼���ܷ���4�����ҵ���߼�ģ��4���š�Michael Mattson����ν�ĺ�3��ԭ��Hollywood
> Principle��"��4��(��)�ң��һ�ȥ��(����)��"��don't call me, I will call you������ر�������һ���
> ˼�롣�������е�"��"ָ���Ǹ�������߼��������ܣ�"��"���DZ����Dz���õ�һ����������磬��һ��ҵ���߼�ģ��A��Ҫ������һ��ҵ���߼�ģ��B
> �ij����У���ͳ�ķ�IoC����ƣ�����EJB2.0������A���ù����߼���B��factory��ij��directory����4���B�����ã���ָ
> �룩����IoC����ڣ���ܲ������A��B��ʵ�����׷�٣�����B��ʵ�����ã���ָ�룩Ҳ���ɿ�������A�Ľӿں�����繹�켰��ֵ����ȣ���
> �� A���Ӷ�A��ʵ�ֿ���ר����ҵ���߼��������ϸ�ڣ�����B��ʵ����λ�������û�ָ�룩�������ⲿ���͸��ذ����׵������ּܹ���ȫ������ҵ
> ���߼��Ծ�������߼���ܵ�ǣl�Ӷ����ҵ���߼�ģ��ĸ��Ӷȣ�������Ҫ���Ǽ��е���װ����������߼�Ϊ��������۽ṹ��ֱ���Ժ��������ƽ�˵�·
> �����滹���������ۣ���
>
> ��̸�(һ�£��Ӹ�����˵��IoC����ģ�黯�����װ�������ÿ�ܵ�һ�����ԭ���8�ԭ��ҵ���߼�ģ��Ȳ���Ҫ��������߼�Ҳ���Զ��ⲿ���߿�ܱ�
> ��һ����֪��agnostic��������Ĵ����ȫ���ⲿ���߿�ܶ�ҵ���߼�ģ�����ٿ�4��ɡ��Ӿ���ʵ����˵������һЩ�����������⣬IoC��ܲ�
> ����һ���װ�˱ر��Ĺ����߼���IoC���Ƶ�������⣨����PocoCapsule/C++ IoC���<http://
> code.google.com/p/pococapsule>��Լ��70K������ʹ����˵���û������ҵ���߼���������������������POCO��
> �ۣ������������װ�����������������ۣ��ṩ��IoC��ܣ���ΪIoC��ܿ⺯��ĵ��ò� ����ֱ����һϵ�п⺯����ã���IoC��������õ�
> �⺯������û���������Ӧ��ʵ������ø������������Ǵ��Ϊ��ϣ��IJ���״̬��
>
> 2. ����������POCO
> ������C++��Java���಻֧�ֶ�̬���͵����Ի�����һ�����Ȼ���������ҵ���߼������Ҫ֧��ʲô��Ĺ����ӿ���ʹ�ⲿIoC����ܶ�����вٿء�
> ���ڵ������ܣ�����EJB2.0��CORBA���ģ�� CCM��JTRS-SCA�ȣ�������һɫ�ز�������ʽ��invasive����ƣ�Ҳ����ǿ�ƹ�
> ��ҵ���߼�ģ�飨����bean���������ض��Ĺ�������ӿ�ģ�ͼ��ݣ���֧���������ܶ������4��������в������õĹ����ӿ����ͻ���ࣨbase
> class���Լ�����ʵ�����νhome�ӿڡ�����ʽ��Ʋ���ѧϰ��ʹ�÷���EJB2.0��CCM�����Է�Ϊ���5Ķ���Ҳ�����������齨���
> �Ŀ����Ժ���Ӧ�ԡ���Ϊ�ڿ��ѵ����Լ���ÿһ���������������N���Լ��������ܺ�����ӿ�ģ�ͣ�����������������������10�������ʽ��Ƶ�
> ������ӿ�ģ��ֻ�ܱ����ض��Ŀ����֧�֣��Ӷ��γ��˸���Ϊ�����2�����4�������ܹµ�����������������÷�Χ�Լ���ܵ�ͨ���ԡ��� ��������ʽ���
> ����Լ���֮��Ӧ����������������׿�����ϵ���������еĻ�����������С��Χ�ڱ����ã����Ը߳ɱ��ڵ�ˮƽ����ν�ر��ظ�������ά����CCM������
> �����������������ӣ���
>
> ��ˣ��ִ�IoC��ܴ󶼲��÷�����ʽ��non-invasive����ƣ�Ҳ���Dz�������ӿ�ģ��(���ӿڼ�����ǩ��)���κι涨�����仰˵���������
> IoC���һ��ͬ�ʵ�֧���κ�����ӿ�ģ�ͣ���(�Ѿ�������ĺͻ�δ�������ģ�ͣ�Ҳ��(��׼��֯����Ļ��û��Զ����ģ�͡���Щ����ӿ�ģ�Ϳ��Բ���
> ���򲻲��ã��κι������Զ���ӿڣ�ģ��(template)����ࣨҲ���Ը���C++���󣬱���C/C++������Բ����κΣ�����ģ�ʵ��
> ������ֶκͲ������ú����(��������������Զ��� factory/pool/directory lookup�����Լ�����ȫ�ֻ��Ա��
> ��ȣ��μ�ԴC++������ʽIoC�����Ŀ PocoCapsule/C++ IoC�Ľ���<http://code.google.com/p/
> pococapsule> �����ڷ������C++ IoC�������У���Ϊ�������������ӿ�ģ�͵��¾��3�߰����ݾ�һ��ͬ�ʵذ�ƽͷ���նԴ��
> ��ͳ��Ϊ"ƽӹC++����"��Plain Old C++ Object ����POCO����Ӧ��Java�е�"ƽӹJava����"POJO����
>
> 3. �����װ����������
> ��ʹ��IoC��ܵ�C++�����������У�����ģ�鼰�����νӴ���ת�Ʋ�������IoC����ڣ�ҵ���߼�������߲�ģ�����ࣩ�Ŀ���ֻ���עҵ���߼���
> �?����Ĵ����IoC�������ࣩ�����û��ṩ�������װ����������assembly and deployment description��
> ��ɡ���Ϊ�ɷ�ɢ�����ӳɵ��������״�������ͼ״�ṹ�����ԣ������װ������������Ƕ�������ͼ�ṹģ�͵�������������ͨ�������ֱ���д��
> ��ʽ����ָ����루code����Ԫ��ݣ�metadata�������û���ݣ�data����
>
> ��Ȼ��������������ԣ�����C++��Java��������Ч�ذ������蹹����ͼ״��ݽṹ�����Խṹ�����"ģ������"ȴ�԰���f����C++�У�Ҫ�һ
> ����ͼ�ṹ�Ĵ��벻������һ������ȥ��������allocNode()��addNode()��wireNodes()�ȵȺ�����ͼ�ṹģ��������ָ��
> ʽ�ģ�imperative��"��������"�е�Ȼ�޴档���ڹ����߼��Ƚϼ򵥵�Ӧ�ã�����ײ����ģ�飩���ṹģ�Ͳ����y���Ҫ�����Ƕ��һ�٣�����
> �����ɴ�����IoC���Ҳ���ֱ���˵���Ȼ����ڹ����߼��ϸ��ӵ�Ӧ�ã��Խṹ��Ӿ��岽������������ĸ���������ʹ��IoC��ܳ�������߼���ԭʼ
> ���Ա��6�ۡ�
>
> ��νԪ��ݱ�������Ա�����Ե�Ԫ��ݽṹ4��������Ĺ��߽ṹģ�͡���ʵ�ʾ������ô�ͳָ���Ա���������ࣨclass���ṹ���������ʽ��4���
> ���߽ṹ�����磬���һ��ṹ��10��ڵ㣨����������˷����������û�����һ���10����Ӧ��Ա������ࣨclass������������Ӧע��
> ��annotation����ʶ����l�ӡ�����������ʱ��IoC���ͨ�������4��������Ľṹ�����俴�������ӵĹ��߽ṹ�������ַ���������
> �ṩ��һ������ʽ�ģ�declarative��ģ������ʵ����������һ��ǣǿ�������������Ӳ�׵�kludge������������"ֻʹ�ñ�����Ա���4��
> ������߼�"��һ������̬֮�ⲻ���κ��������塣
>
> IoC�������Ч�����Ȼֱ�۵Ľṹ������ʽǡǡ���DZ���ţ�DZ���Ϊ���׵��û��ı����������ʽ�����۴�ţ�Ƕ�����C++��Java����������ķ���
> ������ʹ�����ò��������һ�����εľ�����C++��Java���౻���ǣ������ñJboss����ϯ��ѧ�ң���Ϊ������ı�������в����ṩ����
> ͼ�ṹ�������ʵ�����Ч�����ֶΡ���Ϊ�������Ե�Ŀ�Ľ�����ṩ������İ�װ������ƣ������ṩ��������ϵͳ���岿��ṹ��ģ�ͱ��������
> Ҫ˵�Ը���ģ��֮��任�����q任�ı任������ʽ�����
>
> 4. ����XML����װ����������
> ����IoC��ܣ����zܶഫͳ��IoC��������EJB2.0��CCM�����û��ı������ʽ����װ������������ǻ���XML��XML�����Ŀ��ǡǡ��
> ���ṩ����ͼ�ṹ������ʽ������û�4˵��XML��׼����������ȶ����ѱ��ձ���ú�֧�֣�����XML������͹�������ɣ������⣬XML����ھ߱�
> ���Ƶ�����ʽ�ṹת������XSLT��XQuery����Ϊ�ӵײ�ͨ��IoC�������������ߵ�"�����������ض���ģ"DSM��domain
> specific modeling��׼����������ƽ̨������Ҫ���ǣ���SQL���ƣ�XML����l��̲��񶼴�����׵ļ�ֱ�ۼ������ʹ�úܶ�����
> ר���ܹ���������ɵ�ϵͳ���д�Ͳ���
>
> �����Կ�Դ��ĿPocoCapsule/C++ IoC��� �е�һ���������4����������������ӵ���������Լ��ĵ���PocoCapsuleԴ
> ����� �Ͱ�װ�� �о���ҵ���Ҳ������http://www.pocomatic.com/docs/cpp-examples/basic-
> ioc/gps ��������!�
>
> �����������Ҫ��������һ����ͼ<http://www.pocomatic.com/docs/whitepapers/dsm/
> gps.jpg>��ʾ��ʱ������tick generator����GPS��λ��(gps locator)��������ʾ��(navigate
> display)��������GPSϵͳ��
>
>
> PocoCapsule����֧����νPOCO����ǰ����˵��"ƽӹC++����"�����Ӷ������ӿ�ģ�ͼ���û���κ����ơ����������Ļ���
> TickGen��GPSLocator��NavDisplay�������û��Լ���Interfaces.h <http://
> www.pocomatic.com/docs/cpp-examples/basic-ioc/gps/Interfaces.h>�����¶���ģ�
>
> class EventListener {
> public:
> virtual ~EventListener() {}
> virtual void refresh() = 0;
> };
>
> class EventEmitter {
> public:
> virtual ~EventEmitter() {}
> virtual void subscribe(EventListener*) = 0;
> };
>
> class TickGen : public EventEmitter
> {
> public:
> virtual void start() = 0;
> };
>
> class GPSLocator : public EventEmitter, public EventListener
> {
> public:
> virtual int get_pos_x() = 0;
> virtual int get_pos_y() = 0;
> };
>
> class NavDisplay : public EventListener
> {
> public:
> };
>
> ��Щ����ľ���ʵ����TickGenImpl��GPSLocatorImpl��NavDisplayImpl����¶������£�������������װ�����ϸ
> �ڣ���
>
>
> class TickGenImpl : public TickGen
> {
> ...
> public:
> TickGenImpl(int cnt, int interval);
> ...
> };
>
> class GPSLocatorImpl : public GPSLocator
> {
> ...
> public:
> GPSLocatorImpl();
> ...
> };
>
> class NavDisplayImpl : public NavDisplay
> {
> ...
> public:
> NavDisplayImpl(GPSLocator* loc) ;
> ...
> };
>
> ��Щ�������;���ʵ����Ķ����Լ����ǵı���l�ӣ���̬��̬���ɣ��ȿ�������ʽ��һ��C++Ӧ��ģ��û�κ������ȫ���迼��IoC��������
> ��� �����IoCʱ����ǰ���ɵ�������ã����ṩԴ�����ģ�顣����������У�������Ҫ�õ���Щ���ʵ����Ĺ�������ԭ������ʡ�Ե����������в���Ҫ
> ���ĵ�ʵ��ϸ�ڡ�
>
> ����4��������PocoCapsule��XML��4�������GPSӦ�á�PocoCapsule������Spring Framework�� ����
> XML�ı���ʽ��schema��������poco-application.context.dtd �У��������C++�������������)�䡣���磬��
> beanʵ����setter�����ձ黯Ϊ�κ�IoC���á�������ı���ʽ�У�һ��POCO�����ʵ������Ϊһ��<bean>Ԫ�أ����乹����
> �ӵIJ���<method-arg>����ʵ����IoC��<ioc>�����Լ�IoC�����IJ� ��Ҳ��<method-arg>��������Ԫ�ء����磬��
> �������е�GPSӦ�ýṹ�Ϳ���������һ��XML�����setup.xml ����
>
> ...
> <poco-application-context>
> ...
> <bean class="TickGenImpl" lazy-init="false">
> <method-arg type="short" value="10"/>
> <method-arg type="short" value="1"/>
> <ioc method="subscribe">
> <method-arg ref="gps-locator"/>
> </ioc>
>
> <ioc method="start"/>
> </bean>
>
> <bean id="gps-locator" class="GPSLocatorImpl">
> <ioc method="subscribe">
> <method-arg ref="nav-display"/>
> </ioc>
> </bean>
>
> <bean id="nav-display" class="NavDisplayImpl">
>
> <method-arg ref="gps-locator"/>
> </bean>
> </poco-application-context>
>
> ���XML�����ֱ�۵ر����������ʵ���Լ�����֮��Ļ����νӽṹ���������󻯵ؽ�������Ӧ��C++��ʽ��ʾ���£�
>
> TickGenImpl* tick_gen = new TickGenImpl(10, 1);
> tick_gen->subscribe(gps_locator);
> tick_gen->start();
> ...
> GPSLocatorImpl* gps_locator = new GPSLocatorImpl;
> gps_locator->subscribe(nav_display);
> ...
> NavDisplayImpl* nav_display = new NavDisplayImpl(gps_locator);
>
> ��Ȼ��}�������Ʊ��ͬ��ĸ����ʵ���������б������C++�汾�����ǹ������Ӧ�õľ����Ⱥ��裬���ʵ���ϱ��������޸�����C++������
> �Ĵ�������ó��������͹����XML�汾��������һ�ֽṹ����ǹ������ṹ�IJ��衣�ṹ�и�<bean>�ڵ��ʵ�������������XML��
> ���е��Ⱥ�����޹أ�������IoC�������û�����Ľڵ����ԣ�����lazy-init��ֵ���Լ��ν�ʱ��5��ϵ���Ⱥ�4���
>
> �tˣ��û�����Ҫ�����XML�������ļ����ַ���ʽ����PocoCapsule/C++ IoC��������ļ����XML�ַ�Ϊ�� ����
> PocoCapsule/C++ IoC�⺯���main.C <http://www.pocomatic.com/docs/cpp-
> examples/basic-ioc/gps/main.C> ���������Զ���װ�����������Ӧ�á�����PocoCapsule��ϸ��ʹ�ü��������
> ����ɲ��������Ž̲� <http://www.pocomatic.com/docs/whitepapers/ioc-tutorial>���û���
> ��<http://code.google.com/p/pococapsule/downloads/list> ��������ʵ�� <http://
> www.pocomatic.com/docs/cpp-examples>��
>
> 5. DSM��ģ�ͱ任
> ǰ��һ���������õ���XML�ı���ʽ����PocoCapsule����֧�ֵĺ��ĸ�ʽ��core schema������ΪXML��IoC����������������
> ���Ӧ�õĽṹģ�ͣ���������ʽҲ��Ϊ��ģ��ʽ���ý�ģ��ʽ������IoC��������õ�XML��ʽ��ͬС�졣���ָ�ʽ��ֱ����ѧ����ʽ�����գ��ձ���
> �õ��ŵ㡣Ȼ����Щ��Щ����˫�н�������ŵ�Ҳ��ζ����Ӧ��ȱ�㣬����ֱ�����������̽ӿں���ǩ�����f�ͳ���ȵͣ���������߳�������ͼ���
> �󡣱��磬ǰ��GPS�����У�XMLģ������ֱ���漰����}��� ��TickGenImpl�Ĺ������ӡ��Ӹ�ģ�������У������޴��ж���}��� ��Ŀ��
> �����塣����ģ�����������˲�ƥ��IJ� ���ͣ��û����Խ��ҵصõ�IoC�����쳣���棨��Ȼ�������ڽ�c����������}��� �����������󣬶����ǵ�
> ��ֵ������䱻�໥�ߵ��ˣ���Ϊǡ����ͬһ���ͣ�����ô�û���ֻ�����������ˡ���setter����ȡ���� �Ĺ���򹤳�����4���������ÿ��Ʊ�����
> ��һ���⣬��ʵ���ϲ��������ƻ������루non-invasive��ԭ�򣬶��һ�����ʹģ���������߳���ͬ�������ͼ��ǿ���ĸ�ʽ�Լ�����Щȱ�㣬
> �����������Ӧ���ŵ㡣�ڶ�����������ܣ���EJB��CCM�ȣ����õ��Ӵ�XML�����ʽ������η���UML2.0��XMI����ǰ��֮��
>
> �������������}�������һ����Ч�����Ƿ���6���֮���ɴ಻ȥѰ��һ��������ܲ�һ����"Ϊ�����˽����������"�Ľ�ģ��ʽ�������ṩһ���ƽ
> ̨�������û�����Լ����ض���Ҫ��ȡ���ƶ���ѽ�ģ��ʽ��Ҳ������ν"����������ض���ģ"DSM��domain specific
> modeling�������磨�μ�PocoCapsule��dsm-gps���� �����û�����Ϊ�Լ�Ҫ�����GPSר�Ŷ���һ��DSM��ʽgps-
> device.dtd ���������DSM��ʽ��ǰ�������е�GPSϵͳ���Ա������������£��μ�setup.xml ����
>
> <gps-device>
> <tick-generator use="TickGenImpl" count="10" interval="1"/>
> <gps-locator use="GPSLocatorImpl"/>
> <navigation-display use="NavDisplayImpl"/>
> </gps-device>.
>
> ����ĸ�ʽ��poco-application.context.dtd ���Ƚϣ����DSM��ʽ��gps-device.dtd����������ȸߣ�����
> ������ա�����ģ����������ȫ���漰����ӿھ��庯��ǩ������l���������l��Ҳ������Ļ�󡣶������ò���ĺ�����һĿ��Ȼ��
>
> ��ǰ��˵��XML����е�XSLT��XQuery�Ѿ�Ϊ֧�����DSM��ʽ׼�������ֳɵ�ƽ̨�����ƽ̨�ṩ��������ʽ����ģ��֮�以��ת�������
> �û��ڶ�����һ��DSM��ֻ��Ҫ���ṩ��DSM��ʽ����һ��ģ��ʽ������IoC��ܵĺ��Ľ�ģ��ʽ����ת��XSLT������ĩ��������XSLTת����
> ��IoC��ܣ�����PocoCapsule/C++ IoC and DSM��� �����ᰴ��ָ����ת������һ�����¶����DSM����Ľṹת��Ϊ��
> ��һ��DSM����Ľṹ��ֱ�uݹ鵽��IoC��ܵĺ��ĸ�ʽ�ṹ������ģ��ʽ���Ա�ת��������ģ��ת����XSLT������ĸ�ʽҲ���Ա�ת��������ת
> ����ת����ת�������Լ�ת���������ơ��������ν��"�߽�ת��"HOT��higher order transformation ��������IoC
> �����DSMģ��ת���Ľ�һ������ɲ���PocoCapsule DSM���Ž̲�<http://www.pocomatic.com/docs/
> whitepapers/dsm>���û��ֲ�<http://code.google.com/p/pococapsule/downloads/
> list> ��������ʵ�� <http://www.pocomatic.com/docs/cpp-examples>��
>
> һ������루non-invasive��IoC���һ��ͬ�ʵ�֧���κ�����ӿ�ģ�͡�DSM��ʹ��������׾ٵ�֧���κ��û����׼��֯�����ģ�������
> ʽ����ˣ�һ��IoC+DSM���ʵ������һ��dz���Ч���Ŀ�ܵĿ�ܡ����ò�����������Ҹ��� ��ʵ�ֺܶ������ܣ���(���Ŀ�ʼ˵�ķ��������
> �� SCA���Լ�������ߵ�SDR��JTRS-SCA���Ŀ�ܣ�CF������ܹ������ֻ������������ܹ���CORBA����ܹ����ȵ���ͼ
> <http://www.pocomatic.com/docs/whitepapers/dsm/dsm-diagram.jpg>�������
> PocoCapsule���ṩ��DSM��ܡ�

Ke Jin

unread,
Dec 23, 2007, 5:08:06 PM12/23/07
to TopLanguage
È«ÊÇÂÒÂ룬ÀÏ´óÄÜ·ñÖØÌùÒ»´Î£¿

On Dec 23, 6:36 am, Oldrev <old...@gmail.com> wrote:
> „1¤7„1¤7„1¤7 0µ2„1¤7„1¤7 0Ý5 0ö1„1¤7„1¤7„1¤7„1¤7 .Net „1¤7 0‘7„1¤7„1¤7 Castle„1¤7„1¤7IoC 0 0 0¶4„1¤7„1¤7 0¶0„1¤7 0‹1„1¤7 0©2„1¤7„1¤7„1¤7„1¤7„1¤7 0‹0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0á8„1¤7¨´ðЄ1¤7„1¤7 .Net 0 9 0À6„1¤7 5ô3„1¤7„1¤7RTTI„1¤7„1¤7„1¤7„1¤7 0Ý5
> „1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0µ2„1¤7„1¤7 0¯1„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7CodeDOM„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 C++ „1¤7„1¤7„1¤7„1¤7 0µ6„1¤7 0ô5„1¤7
>
> „1¤7„1¤7 .Net „1¤7„1¤7„1¤7 0Ý5„1¤7„1¤7„1¤7„1¤7„1¤7 0‹4„1¤7„1¤7 0»7 0—0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0õ4„1¤7„1¤7„1¤7‚1Ñ1„1¤7„1¤7 IoC...
>
> Ke Jin §Õ„1¤7„1¤7„1¤7
>
> > „1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77Web„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤75„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77b„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77Ruby„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77!„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77lIoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤775„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77?„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 1“61„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤73„1¤71IoC„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77q„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77C+
> > +„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤73„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤78„1¤72„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤72„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77C++„1¤70„1¤79„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77IBM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77"SCA„1¤71„1¤77„1¤71„1¤77Service Component Architecture„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤7¦Ó1„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77RI„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IBM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤70„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72}„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76'„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77Apache„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤70„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤71„1¤70„1¤72„1¤70„1¤74„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤7¦Ó1„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774
> > „1¤70„1¤76„1¤71„1¤77„1¤72„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77C-style cast„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 1™71„1¤70„1¤72„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77s„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0½01„1¤77 SCA considered harmful „1¤70„1¤75„1¤71„1¤77„1¤71„1¤77<http://www.pocomatic.com/docs/
> > whitepapers/sca-harmful>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤73„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77SCA C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73
> > „1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77|„1¤71„1¤77„1¤7„1¤7„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤72„1¤79„1¤76„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77IBM„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77d„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤7¦Ó1„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0½01„1¤77 SCA as a DSM „1¤70„1¤75„1¤71„1¤77„1¤71„1¤77<http://www.pocomatic.com/docs/whitepapers/
> > webservices/#sca-as-a-dsm>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77 1‹5„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤74„1¤76„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤7770„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤79„1¤70SQL„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤71„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > 1. IoC
> > IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤78"„1¤71„1¤77„1¤71„1¤77Inversion of Control„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 1 41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤7 0ª20„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤76„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77Martin
> > Fowler „1¤71„1¤77„1¤70„1¤78„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77x„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72"„1¤71„1¤77„1¤71„1¤775„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77Dependency Injection „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤74<http://
> > martinfowler.com/articles/injection.html>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤75 Stefano Mazzocchi „1¤70„1¤79„1¤70„1¤78
> > „1¤71„1¤77„1¤71„1¤77Martin Fowler„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤73„1¤75Martin Fowler„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ë21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤77„1¤79„1¤71„1¤77<http://
> >www.betaversion.org/~stefano/linotype/news/38/>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ª51„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77
>
> > IoC„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77Michael Mattson„1¤71„1¤77„1¤71„1¤771996„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77(Object Oriented Frameworks)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77OOD/OOP„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤78„1¤71„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤72„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤73„1¤71„1¤77b„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77)„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤73„1¤77„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77)„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77)„1¤70„1¤75„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤75„1¤70„1¤70„1¤70„1¤75„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77b„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 5Î81„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤74„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤70„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0‘90„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77imperative language„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77Java 5„1¤71„1¤77„1¤71„1¤77C#„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤7 0ë21„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤78„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77ƒ8£91„1¤77„1¤71„1¤77„1¤7¨½1„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤770„1¤7 0ª51„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77std„1¤71„1¤77„1¤71„1¤77IO„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78STL„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77boost„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77new„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤78„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤775„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤7 0þ41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤73„1¤71„1¤77„1¤7 0ë21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77plumbing logic„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77factory„1¤71„1¤77„1¤71„1¤77builder„1¤71„1¤77„1¤71„1¤77directory„1¤71„1¤77„1¤71„1¤77adaptor„1¤71„1¤77„1¤71„1¤77singleton„1¤71„1¤77„1¤71„1¤77 configuration/
> > property manager„1¤71„1¤77„1¤71„1¤77factory„1¤71„1¤77„1¤71„1¤77manager„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77manager„1¤71„1¤77„1¤71„1¤77manager„1¤71„1¤77„1¤70„1¤70„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77<„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77b„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77'„1¤71„1¤77„1¤71„1¤77)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤74„1¤70„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77
> > „1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤76„1¤71„1¤70„1¤79„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77?„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤73„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤70„1¤72„1¤71„1¤77)„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70Michael Mattson„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7„1¤7
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤778„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77factory„1¤71„1¤77„1¤71„1¤77lookup„1¤71„1¤77„1¤71„1¤77directory„1¤71„1¤77„1¤71„1¤77context„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77Michael Mattson„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã41„1¤77„1¤70„1¤72„1¤71„1¤773„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77Hollywood
> > Principle„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77)„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77)„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77don't call me, I will call you„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤72„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77"„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77A„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77B
> > „1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77EJB2.0„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77A„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77B„1¤71„1¤77„1¤71„1¤77factory„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77directory„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77B„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78
> > „1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77A„1¤71„1¤77„1¤71„1¤77B„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77B„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77A„1¤71„1¤77„1¤70„1¤75„1¤70„1¤73„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7[„1¤71„1¤77„1¤74„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77 A„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77A„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77B„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0·11„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤70„1¤79l„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤7„1¤7
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77(„1¤70„1¤75„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤778„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤78„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77agnostic„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤71„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule/C++ IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77<http://
> > code.google.com/p/pococapsule>„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤7770K„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77POCO„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤79„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤73„1¤71„1¤77„1¤7„1¤79„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77
> > „1¤71„1¤77„1¤79„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77
>
> > 2. „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77POCO
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤72„1¤73„1¤70„1¤71„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤78„1¤79IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Þ11„1¤77„1¤71„1¤73„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77EJB2.0„1¤71„1¤77„1¤71„1¤77CORBA„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77 CCM„1¤71„1¤77„1¤71„1¤77JTRS-SCA„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤72„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77invasive„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7¦Ó1„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77bean„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Þ41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74base
> > class„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7home„1¤71„1¤77„1¤70„1¤73„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7 0 41„1¤77„1¤71„1¤77„1¤71„1¤77EJB2.0„1¤71„1¤77„1¤71„1¤77CCM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤775„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7n„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77N„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤7710„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤7 0‡21„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤772„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0 41„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ30„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤79„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤70„1¤78„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã41„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77CCM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤7 0 41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77non-invasive„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0´1„1¤7„1¤7 0ž61„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤79„1¤71„1¤77„1¤7 0Œ11„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤79„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤7 0´1 0ª51„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77(template)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C/C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0´1„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤7 0°40„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 factory/pool/directory lookup„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤7 0½01„1¤77„1¤70„1¤76C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77 PocoCapsule/C++ IoC„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77<http://code.google.com/p/
> > pococapsule> „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++ IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤773„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤76„1¤71„1¤78„1¤71„1¤77„1¤70„1¤79„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72"„1¤70„1¤79„1¤70„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77Plain Old C++ Object „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77POCO„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤7 0ñ61„1¤77"„1¤70„1¤79„1¤70„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"POJO„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > 3. „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã10„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77?„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77assembly and deployment description„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤78„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤75„1¤75„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤79„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ë21„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79code„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77metadata„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77data„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7D„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤79„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77f„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤78„1¤75„1¤70„1¤75
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77allocNode()„1¤71„1¤77„1¤71„1¤77addNode()„1¤71„1¤77„1¤71„1¤77wireNodes()„1¤71„1¤77„1¤70„1¤70„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤75„1¤75„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤74„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77imperative„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤7 0ñ61„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤76„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤70„1¤78„1¤71„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77ƒ8£91„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤75„1¤70„1¤70„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77y„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77 5Õ21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤73
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤776„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤7 0Ã10„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤75„1¤754„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤75„1¤75„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤71„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74class„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤764„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤7710„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤7710„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74class„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77annotation„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7k„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77declarative„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77kludge„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤71„1¤70„1¤70„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤78„1¤71„1¤77„1¤78„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7^
>
> > IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤70„1¤71„1¤71„1¤77„1¤71„1¤75„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0‘90„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77Java„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤72„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79Jboss„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Þ41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤70„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤78„1¤70„1¤75„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤7 0É81„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77q„1¤7 0É81„1¤77„1¤70„1¤73„1¤7 0É81„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > 4. „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77z„1¤71„1¤70„1¤72„1¤75„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77EJB2.0„1¤71„1¤77„1¤71„1¤77CCM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤774„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤75„1¤75„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XSLT„1¤71„1¤77„1¤71„1¤77XQuery„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤73„1¤70„1¤76„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70"DSM„1¤71„1¤77„1¤71„1¤77domain
> > specific modeling„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77SQL„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤74„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤74„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7„1¤7„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ë18„1¤75„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77PocoCapsule/C++ IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤7 0ñ61„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule„1¤70„1¤76
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77http://www.pocomatic.com/docs/cpp-examples/basic-
> > ioc/gps „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77!„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤78„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70<http://www.pocomatic.com/docs/whitepapers/dsm/
> > gps.jpg>„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77tick generator„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77GPS„1¤71„1¤77„1¤71„1¤77„1¤7 0·11„1¤77„1¤71„1¤77(gps locator)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77(navigate
> > display)„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77GPS„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77
>
> > PocoCapsule„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7POCO„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤79„1¤70„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > TickGen„1¤71„1¤77„1¤71„1¤77GPSLocator„1¤71„1¤77„1¤71„1¤77NavDisplay„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77Interfaces.h <http://
> >www.pocomatic.com/docs/cpp-examples/basic-ioc/gps/Interfaces.h>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77
>
> > class EventListener {
> > public:
> > virtual ~EventListener() {}
> > virtual void refresh() = 0;
> > };
>
> > class EventEmitter {
> > public:
> > virtual ~EventEmitter() {}
> > virtual void subscribe(EventListener*) = 0;
> > };
>
> > class TickGen : public EventEmitter
> > {
> > public:
> > virtual void start() = 0;
> > };
>
> > class GPSLocator : public EventEmitter, public EventListener
> > {
> > public:
> > virtual int get_pos_x() = 0;
> > virtual int get_pos_y() = 0;
> > };
>
> > class NavDisplay : public EventListener
> > {
> > public:
> > };
>
> > „1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77TickGenImpl„1¤71„1¤77„1¤71„1¤77GPSLocatorImpl„1¤71„1¤77„1¤71„1¤77NavDisplayImpl„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76
> > „1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > class TickGenImpl : public TickGen
> > {
> > ...
> > public:
> > TickGenImpl(int cnt, int interval);
> > ...
> > };
>
> > class GPSLocatorImpl : public GPSLocator
> > {
> > ...
> > public:
> > GPSLocatorImpl();
> > ...
> > };
>
> > class NavDisplayImpl : public NavDisplay
> > {
> > ...
> > public:
> > NavDisplayImpl(GPSLocator* loc) ;
> > ...
> > };
>
> > „1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77C++„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 1¨7„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77¢^1„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Þ41„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤70„1¤764„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77GPS„1¤70„1¤78„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77PocoCapsule„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77Spring Framework„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > XML„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77schema„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77poco-application.context.dtd „1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77)„1¤71„1¤77„1¤73„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77
> > bean„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77setter„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤7„1¤70„1¤72„1¤71„1¤77„1¤7 0°71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77POCO„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77<bean>„1¤70„1¤76„1¤71„1¤77„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7q„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤73„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77<method-arg>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77<ioc>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77<method-arg>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77GPS„1¤70„1¤78„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77setup.xml „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > ...
> > <poco-application-context>
> > ...
> > <bean class="TickGenImpl" lazy-init="false">
> > <method-arg type="short" value="10"/>
> > <method-arg type="short" value="1"/>
> > <ioc method="subscribe">
> > <method-arg ref="gps-locator"/>
> > </ioc>
>
> > <ioc method="start"/>
> > </bean>
>
> > <bean id="gps-locator" class="GPSLocatorImpl">
> > <ioc method="subscribe">
> > <method-arg ref="nav-display"/>
> > </ioc>
> > </bean>
>
> > <bean id="nav-display" class="NavDisplayImpl">
>
> > <method-arg ref="gps-locator"/>
> > </bean>
> > </poco-application-context>
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤75„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã10„1¤71„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤76„1¤71„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77
>
> > TickGenImpl* tick_gen = new TickGenImpl(10, 1);
> > tick_gen->subscribe(gps_locator);
> > tick_gen->start();
> > ...
> > GPSLocatorImpl* gps_locator = new GPSLocatorImpl;
> > gps_locator->subscribe(nav_display);
> > ...
> > NavDisplayImpl* nav_display = new NavDisplayImpl(gps_locator);
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤76„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ø01„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤7 1 21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤71„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤7k„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77C++„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤7 1 21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤73„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤7 0 41„1¤77„1¤75„1¤75„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77<bean>„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77lazy-init„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã41„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤775„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77t„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule/C++ IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > PocoCapsule/C++ IoC„1¤71„1¤77„1¤79„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77main.C <http://www.pocomatic.com/docs/cpp-
> > examples/basic-ioc/gps/main.C> „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤76„1¤71„1¤77 <http://www.pocomatic.com/docs/whitepapers/ioc-tutorial>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77<http://code.google.com/p/pococapsule/downloads/list> „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77 <http://
> >www.pocomatic.com/docs/cpp-examples>„1¤71„1¤77„1¤71„1¤77
>
> > 5. DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤79„1¤7„1¤7
> > „1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤70„1¤75„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77core schema„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72XML„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤71„1¤70„1¤75„1¤75„1¤75„1¤70„1¤70„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤7„1¤7„1¤71„1¤77„1¤73„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤7 1­21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤7 0˜21„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤73„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77f„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤7„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77GPS„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77XML„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7p„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77TickGenImpl„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤71„1¤77„1¤7 0þ41„1¤77„1¤71„1¤77„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7^„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤73„1¤70„1¤71„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤74„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77c„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤78„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤74„1¤77„1¤71„1¤77„1¤72„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77setter„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤774„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤77„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79non-invasive„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤70„1¤76„1¤71„1¤77„1¤70„1¤74
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77EJB„1¤71„1¤77„1¤71„1¤77CCM„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ž61„1¤77„1¤71„1¤77„1¤71„1¤77UML2.0„1¤71„1¤77„1¤71„1¤77XMI„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77}„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤776„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤72„1¤73„1¤70„1¤74„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤76„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79
> > „1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7"„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70"DSM„1¤71„1¤77„1¤71„1¤77domain specific
> > modeling„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 0 2„1¤71„1¤77„1¤7 0½01„1¤77PocoCapsule„1¤71„1¤77„1¤71„1¤77dsm-gps„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77GPS„1¤70„1¤76„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74gps-
> > device.dtd „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77GPS„1¤70„1¤73„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤7 0½01„1¤77setup.xml „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
>
> > <gps-device>
> > <tick-generator use="TickGenImpl" count="10" interval="1"/>
> > <gps-locator use="GPSLocatorImpl"/>
> > <navigation-display use="NavDisplayImpl"/>
> > </gps-device>.
>
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77poco-application.context.dtd „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77gps-device.dtd„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7p„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤7„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77l„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤71„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤7„1¤7„1¤77
>
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77XML„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0ñ61„1¤77XSLT„1¤71„1¤77„1¤71„1¤77XQuery„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤72„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤72„1¤71„1¤77„1¤70„1¤79„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤70„1¤76„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤7 0ä81„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77XSLT„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XSLT„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule/C++ IoC and DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77u„1¤71„1¤77„1¤7z„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤75„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77XSLT„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤74„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0Ã41„1¤77„1¤71„1¤77"„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77"HOT„1¤71„1¤77„1¤71„1¤77higher order transformation „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77IoC
> > „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77DSM„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77PocoCapsule DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤70„1¤76„1¤71„1¤77<http://www.pocomatic.com/docs/
> > whitepapers/dsm>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77<http://code.google.com/p/pococapsule/downloads/
> > list> „1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77 <http://www.pocomatic.com/docs/cpp-examples>„1¤71„1¤77„1¤71„1¤77
>
> > „1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79non-invasive„1¤71„1¤77„1¤71„1¤77IoC„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤70„1¤73„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤78„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7 0°71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77IoC+DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤70„1¤75„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤79„1¤70„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤7„1¤7„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤72„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77 „1¤71„1¤77„1¤71„1¤77„1¤70„1¤76„1¤71„1¤77„1¤70„1¤70„1¤71„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77(„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤70„1¤73„1¤70„1¤75„1¤71„1¤77„1¤70„1¤79„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > „1¤71„1¤77„1¤71„1¤77 SCA„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤74„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77SDR„1¤71„1¤77„1¤71„1¤77JTRS-SCA„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤77„1¤71„1¤77„1¤71„1¤71„1¤71„1¤77CF„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤71„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77CORBA„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤73„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤70„1¤70
> > <http://www.pocomatic.com/docs/whitepapers/dsm/dsm-diagram.jpg>„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77
> > PocoCapsule„1¤71„1¤77„1¤71„1¤77„1¤71„1¤77„1¤75„1¤79„1¤71„1¤77„1¤71„1¤77DSM„1¤71„1¤77„1¤71„1¤77„1¤71„1¤79„1¤71„1¤77

Ke Jin

unread,
Dec 23, 2007, 5:12:23 PM12/23/07
to TopLanguage
can't read your message, repost please.
> ...
>
> read more 0†3

up duan

unread,
Dec 24, 2007, 12:02:48 AM12/24/07
to pon...@googlegroups.com
如果IoC提供管线逻辑管理,是不是跟工作流引擎有点类似之处?

IoC一般也提供一个应用环境【或者叫做组件运行环境】,这个跟OSGi或者应用服务器之间有多大的距离?

On Dec 24, 2007 6:12 AM, Ke Jin <kji...@gmail.com> wrote:
> can't read your message, repost please.
>
>
> On Dec 23, 6:36 am, Oldrev <old...@gmail.com> wrote:

> > Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0▌5Б0Ў1Д1д7Д1д7Д1д7Д1д7 .Net Д1д7Б0С7Д1д7Д1д7 CastleД1д7Д1д7IoC Б0П0Б0╢4Д1д7Д1д7Б0╢0Д1д7Б0Л1Д1д7Б0й2Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л0Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0с8Д1д7и┤Ё╨Д1д7Д1д7 .Net Б0Э9Б0└6Д1д7Б5Ї3Д1д7Д1д7RTTIД1д7Д1д7Д1д7Д1д7Б0▌5
> > Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0п1Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7CodeDOMД1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7 C++ Д1д7Д1д7Д1д7Д1д7Б0╡6Д1д7Б0Ї5Д1д7
> >
> > Д1д7Д1д7 .Net Д1д7Д1д7Д1д7Б0▌5Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л4Д1д7Д1д7Б0╗7Б0Ч0Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0ї4Д1д7Д1д7Д1д7В1╤1Д1д7Д1д7 IoC...
> >
> > Ke Jin з╒Д1д7Д1д7Д1д7
> >
> > > Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> >
> > > Д1д71Д1д77Д1д71Д1д77WebД1д71Д1д77Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д75Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77bД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77RubyД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77!Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77lIoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д775Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77?Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1У61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д78Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д73Д1д71IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77qД1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77C+
> > > +Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д78Д1д72Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д72Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77C++Д1д70Д1д79Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7"Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77"SCAД1д71Д1д77Д1д71Д1д77Service Component ArchitectureД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77RIД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д70Д1д70Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72}Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76'Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77ApacheД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д70Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д71Д1д70Д1д72Д1д70Д1д74Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774
> > > Д1д70Д1д76Д1д71Д1д77Д1д72Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77C-style castД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1Щ71Д1д70Д1д72Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77sД1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0╜01Д1д77 SCA considered harmful Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77<http://www.pocomatic.com/docs/
> > > whitepapers/sca-harmful>Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77SCA C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73
> > > Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77|Д1д71Д1д77Д1д7Д1д7Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д72Д1д79Д1д76Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77dД1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0╜01Д1д77 SCA as a DSM Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77<http://www.pocomatic.com/docs/whitepapers/
> > > webservices/#sca-as-a-dsm>Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Б1Л5Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д74Д1д76Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д7770Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д79Д1д70SQLД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д71Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77}Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> >
> > > 1. IoC
> > > IoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77"Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д70Д1д78"Д1д71Д1д77Д1д71Д1д77Inversion of ControlД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1а41Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70IoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д7Б0к20Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д77Д1д76Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Martin
> > > Fowler Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77xД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72"Д1д71Д1д77Д1д71Д1д775Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77"Д1д71Д1д77Д1д71Д1д77Dependency Injection Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д70Д1д74<http://
> > > martinfowler.com/articles/injection.html>Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д70Д1д75 Stefano Mazzocchi Д1д70Д1д79Д1д70Д1д78
> > > Д1д71Д1д77Д1д71Д1д77Martin FowlerД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д73Д1д75Martin FowlerД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ы21Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д70Д1д76Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д77Д1д79Д1д71Д1д77<http://
> > >www.betaversion.org/~stefano/linotype/news/38/>Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0к51Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77
> >
> > > IoCД1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Michael MattsonД1д71Д1д77Д1д71Д1д771996Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77(Object Oriented Frameworks)Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77OOD/OOPД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д78Д1д71Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д72Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д70Д1д73Д1д71Д1д77bД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77)Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д75Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д76
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д70Д1д73Д1д77Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77)Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77)Д1д70Д1д75Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д70Д1д75Д1д70Д1д70Д1д70Д1д75Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77bД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Б5╬81Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д74Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д71Д1д71Д1д70Д1д71Д1д77
> >
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0С90Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77imperative languageД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77
> > > Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Java 5Д1д71Д1д77Д1д71Д1д77C#Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д78Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77lД1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д71Д1д77Д1д71Д1д77Д1д7Б0ы21Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д78Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Г8г91Д1д77Д1д71Д1д77Д1д7и╜1Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д770Д1д7Б0к51Д1д77Д1д71Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77stdД1д71Д1д77Д1д71Д1д77IOД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78STLД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77boostД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77newД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д73Д1д71Д1д78Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д775Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д7Б0■41Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д70Д1д73Д1д71Д1д77Д1д7Б0ы21Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0├41Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77plumbing logicД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77factoryД1д71Д1д77Д1д71Д1д77builderД1д71Д1д77Д1д71Д1д77directoryД1д71Д1д77Д1д71Д1д77adaptorД1д71Д1д77Д1д71Д1д77singletonД1д71Д1д77Д1д71Д1д77 configuration/
> > > property managerД1д71Д1д77Д1д71Д1д77factoryД1д71Д1д77Д1д71Д1д77managerД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77managerД1д71Д1д77Д1д71Д1д77managerД1д71Д1д77Д1д70Д1д70Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77<Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д77Д1д70Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77
> >
> > ...
> >
> > read more Б0Ж3
>
> >
>

Ke Jin

unread,
Dec 24, 2007, 4:34:29 AM12/24/07
to TopLanguage
形式上可能有类似,实质上则有区别。

IoC框架只负责初始建立及最终拆除(若有必要)管线逻辑,而并不参与组件间运行时的互相调用。组件与组件间的调用完全是普通的C++/JAVA成员函
数直接调用。所以,组件间有直接依赖关系(这就是依赖注入名字的由来)。

工作流则正好相反。各个业务处理模块之间完全独立,无直接依赖关系。而工作流引擎则往往参与业务处理模块之间的请求/结果的传递。

IoC框架实际上就是一种应用服务器的。至于OSGi,我还没仔细看过,不好评价。。。嘿嘿。。。

Oldrev

unread,
Dec 24, 2007, 8:29:03 AM12/24/07
to TopLanguage
恐怕是被您的帖子的 GB2312 害了,呵呵。

我说的是最近一直用 .Net 上的 Castle 框架开发,IoC 的感觉非常好。 C++ 没有 GC、没有反射(好把,我承认可以手工实现一
点),实现起来肯定是很别扭的。

在 C++ 里一个很简单的工厂方法:
Obj* make_obj()
{
return new Obj;
}

就会引起若干的批评,呵呵:
1. 竟然用的原生指针,忘了释放怎么办?
2. 竟然写死了 new,要考虑其内存池或其他高性能内存分配器怎么办?
3. Obj 竟然要求默认构造函数?!忘了 More Effective C++ 的忠告了吗!
.......

是不是 C++ 天生给的选择太多了,反而成了负担?

On 12月24日, 上午6时12分, Ke Jin <kjin...@gmail.com> wrote:
> can't read your message, repost please.
>
> On Dec 23, 6:36 am, Oldrev <old...@gmail.com> wrote:
>
> > Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0▌5Б0Ў1Д1д7Д1д7Д1д7Д1д7 .Net Д1д7Б0С7Д1д7Д1д7 CastleД1д7Д1д7IoC Б0П0Б0╢4Д1д7Д1д7Б0╢0Д1д7Б0Л1Д1д7Б0й2Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л0Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0с8Д1д7и┤Ё╨Д1д7Д1д7 .Net Б0Э9Б0└6Д1д7Б5Ї3Д1д7Д1д7RTTIД1д7Д1д7Д1д7Д1д7Б0▌5
> > Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0п1Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7CodeDOMД1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7 C++ Д1д7Д1д7Д1д7Д1д7Б0╡6Д1д7Б0Ї5Д1д7
>
> > Д1д7Д1д7 .Net Д1д7Д1д7Д1д7Б0▌5Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л4Д1д7Д1д7Б0╗7Б0Ч0Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0ї4Д1д7Д1д7Д1д7В1╤1Д1д7Д1д7 IoC...
>
> > Ke Jin з╒Д1д7Д1д7Д1д7
>
> > > Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77
>
> > > Д1д71Д1д77Д1д71Д1д77WebД1д71Д1д77Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д75Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77bД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77RubyД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77!Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77lIoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д775Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77?Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1У61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д78Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д73Д1д71IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77qД1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77C+
> > > +Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д78Д1д72Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д72Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77C++Д1д70Д1д79Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7"Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77"SCAД1д71Д1д77Д1д71Д1д77Service Component ArchitectureД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77RIД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д70Д1д70Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72}Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76'Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77ApacheД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д70Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д71Д1д70Д1д72Д1д70Д1д74Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774
> > > Д1д70Д1д76Д1д71Д1д77Д1д72Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77C-style castД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1Щ71Д1д70Д1д72Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77sД1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д71Д1д77
> > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0╜01Д1д77 SCA considered harmful Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77<http://www.pocomatic.com/docs/
> > > whitepapers/sca-harmful>Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77SCA
>
> ...
>
> 阅读更多 »

Ke Jin

unread,
Dec 26, 2007, 1:31:00 AM12/26/07
to TopLanguage
实现起来比想象的要容易的多:)。。。。关于工厂方法的问题,IoC框架中有现成的解决方案,也就是说用户可以指定工厂bean和工厂方法,所说的问题
都可以解决。至于没有GC就更不成问题了。而且即使有GC,GC以外的用户可以控制的回收手段(比如远程资源的释放或由原工厂bean回收再用等等)也
仍旧是需要的。这方面IoC框架中也有现成解决方案。不过前几天wang老大也问过相关的问题。。。也就是如何支持(并允许用户自定义的)生命控制方法
等等。。。我想以后有必要单独写篇东西仔细描述一下。在此之前,可以参考用户手册中关于lifecycle控制的章节。
> > > > Д1д71Д1д77Д1д71Д1д77RIД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д70Д1д70Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72}Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76'Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77ApacheД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д70Д1д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д71Д1д70Д1д72Д1д70Д1д74Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71��1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774
> > > > Д1д70Д1д76Д1д71Д1д77Д1д72Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д70Д1д73Д1д70Д1д71Д1д71Д1д77Д1д71Д1д77C-style
>
> ...
>
> read more »

Ke Jin

unread,
Dec 26, 2007, 1:39:59 AM12/26/07
to TopLanguage
ÂÒÂ룬ÖØÌù¡£

ʵÏÖÆðÀ´±ÈÏëÏóµÄÒªÈÝÒ׵Ķࣺ£©¡£¹ØÓÚ¹¤³§·½·¨µÄÎÊÌ⣬IOC¿ò¼Ü¼°POCOCAPSULEÖж¼ÓÐÏֳɵĽâ¾ö·½°¸£¬Ò²¾ÍÊÇ˵֧³ÖÓû§×Ô¶¨Ò幤³§BEAN
ºÍ¹¤³§·½·¨¡£Ëù˵µÄÎÊÌâ1£¬2£¬3¶¼¿ÉÒÔ½â¾ö¡£ÖÁÓÚûÓÐGC¾Í¸ü²»³ÉÎÊÌâÁË¡£¶øÇÒ¼´Ê¹ÓÐGC£¬GCÒÔÍâµÄÓû§×Ô¶¨Òå»ØÊÕÊÖ¶ÎÒ²ÊDZØÐëµÄ¡£±ÈÈçÒªÌṩGC
Ç°µÄÔ¶³Ì×ÊÔ´ÊÍ·Å»òÐèÒªÓÉÓû§×Ô¶¨ÒåµÄBEAN»ØÊÕ£¨ÎªÁËOBJECT¼¶µÄÔÙÓã©¡£Õâ·½ÃæIOC¿ò¼Ü¼°POCOCAPSULEÖÐÒ²ÓÐÏֳɽâ¾ö·½°¸¡£²»¹ý
Ç°¼¸ÌìWANGÀÏ´óÒ²ÎʹýÏà¹ØµÄÎÊÌâ¡£¡£¡£¡£¡£¡£ÎÒÏëÒÔºóÓбØÒªµ¥¶Àдƪ¶«Î÷×ÐϸÌÖÂÛһϡ£ÔÚ´Ë֮ǰ£¬¿ÉÒԲο¼Óû§ÊÖ²áÖйØÓÚLIFECYCLE¿ØÖƵÄ
ÕÂ


On Dec 25, 10:31 pm, Ke Jin <kjin...@gmail.com> wrote:
> 0µ6„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Û8„1¤7„1¤7„1¤7 0ü9 0 8 1Ì2„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 1’5„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 7í0IoC„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0ö3 0¯2„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Ü6„1¤7„1¤7„1¤7„1¤7 0»5„1¤7 0‹4„1¤7„1¤7„1¤7„1¤7„1¤7 0ö8„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7bean„1¤7 0È7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0»5„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7
> „1¤7„1¤7„1¤7„1¤7„1¤7 0ê5„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0‹4„1¤7„1¤7GC„1¤7 0È6„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0¹5„1¤7„1¤7„1¤7„1¤7 0Ý6„1¤7 0¶0„1¤7„1¤7GC„1¤7„1¤7GC„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0‹4„1¤7„1¤7„1¤7„1¤7 0ê7„1¤7„1¤7 0 1 0‘3„1¤7„1¤7„1¤7„1¤7 0ö6¦²„1¤7„1¤7„1¤7„1¤7„1¤7 0é8„1¤7„1¤7„1¤7„1¤7 0é6„1¤7„1¤7„1¤7 0È5 0—3„1¤7„1¤7„1¤7 0è9„1¤7„1¤7„1¤7„1¤7bean„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0‹1 0©0 0§2„1¤7 0Ü6
> „1¤7 0ê6„1¤7„1¤7„1¤7„1¤7„1¤7 0Û8„1¤7 0Ž8„1¤7„1¤7 8ð7„1¤7„1¤7IoC„1¤7„1¤7„1¤7„1¤7„1¤7 0Ü6„1¤7„1¤7„1¤7 0ö3 0°0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0¢2„1¤7„1¤7„1¤7„1¤7wang„1¤7 0Ð2„1¤7 0Ü6„1¤7 0¶0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 7ß3„1¤7„1¤7„1¤7„1¤7 0Ü6„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0õ1„1¤7„1¤7(„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0‹4„1¤7„1¤7 0é8„1¤7„1¤7„1¤7„1¤7)„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0 3„1¤7„1¤7„1¤7
> „1¤7 0©0 0§0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0ê2„1¤7„1¤7§Ò„1¤7 0Û8„1¤7„1¤7„1¤7„1¤7§Õ 0œ0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Ð6„1¤7„1¤7„1¤7„1¤7 0Ý5„1¤7 0„3„1¤7„1¤7 1’0„1¤7 0õ8 0¢2„1¤7„1¤7„1¤7„1¤7„1¤7 0é4¦Ï„1¤7„1¤7 0‹4„1¤7„1¤7 0ö2„1¤7„1¤7§Û„1¤7„1¤7„1¤7lifecycle„1¤7„1¤7„1¤7 0 1„1¤7„1¤7 0†5 1 1„1¤7
>
> On Dec 24, 5:29 am, Oldrev <old...@gmail.com> wrote:
>
> > „1¤7„1¤7 0»5„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Ý5 0ö1„1¤7„1¤7 .Net „1¤7 0Ð3„1¤7 Castle „1¤7„1¤7 1Ÿ9„1¤7„1¤7„1¤7„1¤7„1¤7IoC „1¤7 0‘0§à„1¤7 0¢5„1¤7„1¤7¨¢„1¤7 C++ 0‹4„1¤7„1¤7 GC„1¤7„1¤7 0‹4„1¤7§Ù„1¤7„1¤7‚4 4„1¤7 0Š8 0Ô7„1¤7„1¤7 0Ü7„1¤7„1¤7 0Ñ3„1¤7„1¤7„1¤7„1¤7 0ö9„1¤7 0µ6„1¤7„1¤7 0Ý5
> > „1¤7‚0î1„1¤7„1¤7 0µ6„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Ð4„1¤7„1¤7 0£1 1ž5„1¤7 0•1„1¤7 0Ž8„1¤7
>
> > „1¤7„1¤7 C++ „1¤7„1¤7 0Ý5„1¤7„1¤7 1Ÿ6„1¤7„1¤7„1¤7„1¤7 0‘1„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7
> > Obj* make_obj()
> > {
> > return new Obj;
>
> > }
>
> > „1¤7 0È9„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0¯2„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0£1 0 9„1¤7
> > 1. „1¤7„1¤7 0©6„1¤7 0‹1„1¤7 0è9„1¤7„1¤7 0ö8„1¤7ƒ0 3„1¤7„1¤7„1¤7„1¤7„1¤7 0È5„1¤7„1¤7„1¤7 0‹0„1¤7ƒ3Á8
> > 2. „1¤7„1¤7 0©6§Õ„1¤7„1¤7„1¤7„1¤7 new„1¤7„1¤7 0Û8„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 1’0„1¤7 1…9„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 1’0„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0‹0„1¤7ƒ3Á8
> > 3. Obj „1¤7„1¤7 0©6 0Û8„1¤7„1¤7 0 8„1¤7 0Ð7„1¤7„1¤7ƒ4Õ4„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 More Effective C++ „1¤7„1¤7„1¤7 0Ý2„1¤7„1¤7„1¤7„1¤7„1¤7
> > .......
>
> > „1¤7 0¢4„1¤7„1¤7„1¤7 C++ „1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0Ô5„1¤7„1¤7 0À9„1¤7„1¤7„1¤7 0¹7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7 0»8„1¤7„1¤7„1¤7„1¤7„1¤7
>
> > On 12„1¤7„1¤724„1¤7„1¤7, „1¤7„1¤7„1¤7„1¤76 0µ212„1¤7„1¤7, Ke Jin <kjin...@gmail.com> wrote:
>
> > > can't read your message, repost please.
>
> > > On Dec 23, 6:36 am, Oldrev <old...@gmail.com> wrote:
>
> > > > „1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7e2„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤75„1¤7„1¤70„1¤70„1¤771„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 .Net „1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 Castle„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77IoC „1¤7„1¤70„1¤7„1¤70„1¤7„1¤70„1¤7f4„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7f0„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤71„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤72„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤70„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤78„1¤7„1¤71„1¤7„1¤77„1¤7 1 9 0§6„1¤7„1¤7l„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 .Net „1¤7„1¤70„1¤7„1¤79„1¤7„1¤70„1¤7„1¤76„1¤7„1¤71„1¤7„1¤77„1¤7„1¤75„1¤70„1¤703„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77RTTI„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤75
> > > > „1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7e2„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤71„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77CodeDOM„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 C++ „1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7e6„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤70„1¤705„1¤7„1¤71„1¤7„1¤77
>
> > > > „1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 .Net „1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤75„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤74„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7[7„1¤7„1¤70„1¤7„1¤70„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤70„1¤754„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7h1„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77 IoC...
>
> > > > Ke Jin „1¤7 1Š4V„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77
>
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777IoC„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777DSM„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777
>
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Web„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Java„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤7774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤761„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤7„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777 „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤70„1¤7„1¤761„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777b„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Java„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Ruby„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777!„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775DSM„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777lIoC„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤7775„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777?„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤761„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771IoC„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777DSM„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777q„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C+
> > > > > +„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777 „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777IBM„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77"„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777"SCA„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Service Component Architecture„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C++„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤77„1¤7 1„0]1„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777
> > > > > „1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777RI„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777IBM„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772}„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤779„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776'„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777Apache„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤71„1¤77„1¤71„1¤771„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤77„1¤7 1„0]1„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤7774
> > > > > „1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤776„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤772„1¤7„1¤71„1¤7„1¤775„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤77„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤774„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤778„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤773„1¤7„1¤71„1¤7„1¤770„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777„1¤7„1¤71„1¤7„1¤771„1¤7„1¤71„1¤7„1¤777C-style
>
> > ...
>
> > read more „1¤70„1¤73

Ke Jin

unread,
Dec 26, 2007, 1:41:42 AM12/26/07
to TopLanguage
乱码,重贴。。。。第二次。。。再乱我就崩溃了。。。:))

实现起来比想象的要容易的多:)。关于工厂方法的问题,IOC框架及POCOCAPSULE中都有现成的解决方案,也就是说支持用户自定义工厂BEAN
和工厂方法。所说的问题1,2,3都可以解决。至于没有GC就更不成问题了。而且即使有GC,GC以外的用户自定义回收手段也是必须的。比如要提供GC
前的远程资源释放或需要由用户自定义的BEAN回收(为了OBJECT级的再用)。这方面IOC框架及POCOCAPSULE中也有现成解决方案。不过
前几天WANG老大也问过相关的问题。。。。。。我想以后有必要单独写篇东西仔细讨论一下。在此之前,可以参考用户手册中关于LIFECYCLE控制的


Ke Jin

unread,
Dec 26, 2007, 1:47:00 AM12/26/07
to TopLanguage
乱码,重贴。。。。第3次。。。再乱我就崩溃了。。。:))请刘老大把乱贴删了
On Dec 24, 5:29 am, Oldrev <old...@gmail.com> wrote:
> ...
>
> read more »

李扬

unread,
Dec 26, 2007, 5:03:57 AM12/26/07
to pon...@googlegroups.com
我能理解楼主说的问题,顺便说下osgi应该是一个不错的ioc框架虽然它没对ioc提供直接的支持,但是它提供了对osgi组件全生命周期的管理,这应该是符合IOC精神的。在我看来gp和这里的IOC是完全不同层次上的东西。
打个比喻如果我们讨论的是一个基层电路板,那么IOC解决的是电路板的布线问题。它要完成的功能是怎么样把不同的电容,电阻,元器件组合起来构成一台电脑。而gp或者传统的oop是用来构建电容电阻的技术。ioc要与组件部署生命周期管理结合起来才有意义。
 
 
顺便问句。。。完全无侵入的c++ ioc怎么实现的(没元数据,c++没abi)?没时间看那个库能简单介绍下吗?
 
 
在07-12-26,Ke Jin <kji...@gmail.com> 写道:

confused.ddk

unread,
Dec 26, 2007, 7:23:42 AM12/26/07
to TopLanguage
虽然没有仔细看完poco网站上的内容,但是我的理解是IoC主要是刻画object S与object C之间的调用,其目的是为了让OS与OC更加
松耦合,甚至可以通过外部配置Service可以很容易替换,不知理解是否正确?另有几个疑问是,1.假设牵涉到了distributed
object将如何解决?2.假若stub与OS、OC存在不同进程间,传递参数是否存在问题?3.能做到语言无关吗?4.整个机制让我觉得与com似
曾相识,com通过idl来刻画,编译后也生成stub/proxy,通过dll/ocx export出来的函数通过GUID来创建对应的
ojbect,虽然老大不熟悉COM也请比较比较吧。

我感觉形式上与java的servlet配置很相似。思考的不太深入,随便问问。


On 12月26日, 下午2时47分, Ke Jin <kjin...@gmail.com> wrote:
> 乱码,重贴。。。。第3次。。。再乱我就崩溃了。。。:))请刘老大把乱贴删了
>
> 实现起来比想象的要容易的多:)。关于工厂方法的问题,IOC框架及POCOCAPSULE中都有现成的解决方案,也就是说支持用户自定义工厂BEAN
> 和工厂方法。所说的问题1,2,3都可以解决。至于没有GC就更不成问题了。而且即使有GC,GC以外的用户自定义回收手段也是必须的。比如要提供GC
> 前的远程资源释放或需要由用户自定义的BEAN回收(为了OBJECT级的再用)。这方面IOC框架及POCOCAPSULE中也有现成解决方案。不过
> 前几天WANG老大也问过相关的问题。。。。。。我想以后有必要单独写篇东西仔细讨论一下。在此之前,可以参考用户手册中关于LIFECYCLE控制的
> 章
>
> On Dec 24, 5:29 am, Oldrev <old...@gmail.com> wrote:
>
>
>
> > 恐怕是被您的帖子的 GB2312 害了,呵呵。
>
> > 我说的是最近一直用 .Net 上的 Castle 框架开发,IoC 的感觉非常好。 C++ 没有 GC、没有反射(好把,我承认可以手工实现一
> > 点),实现起来肯定是很别扭的。
>
> > 在 C++ 里一个很简单的工厂方法:
> > Obj* make_obj()
> > {
> >   return new Obj;
>
> > }
>
> > 就会引起若干的批评,呵呵:
> > 1. 竟然用的原生指针,忘了释放怎么办?
> > 2. 竟然写死了 new,要考虑其内存池或其他高性能内存分配器怎么办?
> > 3. Obj 竟然要求默认构造函数?!忘了 More Effective C++ 的忠告了吗!
> > .......
>
> > 是不是 C++ 天生给的选择太多了,反而成了负担?
>
> > On 12月24日, 上午6时12分, Ke Jin <kjin...@gmail.com> wrote:
>
> > > can't read your message, repost please.
>
> > > On Dec 23, 6:36 am, Oldrev <old...@gmail.com> wrote:
>
> > > > Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0▌5Б0Ў1Д1д7Д1д7Д1д7Д1д7 .Net Д1д7Б0С7Д1д7Д1д7 CastleД1д7Д1д7IoC Б0П0Б0╢4Д1д7Д1д7Б0╢0Д1д7Б0Л1Д1д7Б0й2Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л0Д1д7Д1д7Д1д7Д1д­7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0с8Д1д7и┤Ё╨Д1д7Д1д7 .Net Б0Э9Б0└6Д1д7Б5Ї3Д1д7Д1д7RTTIД1д7Д1д7Д1д7Д1д7Б0▌5
> > > > Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Б0╡2Д1д7Д1д7Б0п1Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д­7Д1д7CodeDOMД1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7Д1д7 C++ Д1д7Д1д7Д1д7Д1д7Б0╡6Д1д7Б0Ї5Д1д7
>
> > > > Д1д7Д1д7  .Net Д1д7Д1д7Д1д7Б0▌5Д1д7Д1д7Д1д7Д1д7Д1д7Б0Л4Д1д7Д1д7Б0╗7Б0Ч0Д1д7Д1д7Д1д7Д1д7Д1д­7Д1д7Б0ї4Д1д7Д1д7Д1д7В1╤1Д1д7Д1д7 IoC...
>
> > > > Ke Jin з╒Д1д7Д1д7Д1д7
>
> > > > > Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Io­CД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77
>
> > > > > Д1д71Д1д77Д1д71Д1д77WebД1д71Д1д77Д1д71Д1д77JavaД1д71Д1д77Д1д71Д1д77Д1д71Д1д­77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1­д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1­д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1­д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д79Д1д75Д1­д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д­77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д­70Д1д71Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1д71Д1д­77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д­71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71­Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1­д77Д1д71Д1д77Д1д71Д1д77
> > > > > Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б­0ё61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д­1д77Д1д71Д1д77Д1д71Д1д77bД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77­Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д71Д1д71Д1д77JavaД1д71Д1д77Д­1д71Д1д77RubyД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д1­д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77!Д1д71Д­1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75DSMД1д71Д1д77Д1д71Д1д­77Д1д71Д1д77Д1д71Д1д77lIoCД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д7­7Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д­1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д775Д1д70Д1д70Д1­д71Д1д77Д1д71Д1д77Д1д71Д1д77
> > > > > Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70­Д1д76Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77­Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77?Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7­1Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Б1У61Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71­Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1­д77Д1д70Д1д74Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1­д71Д1д77Д1д71Д1д77Д1д78Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1­д77Д1д73Д1д71IoCД1д71Д1д77Д1д71Д1д77DSMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д­1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д78Д­1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д­1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д74Д1д71Д1д77Д1д71Д1д77Д­1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77qД1д71Д1д77Д1д71Д1д77Д1д71­Д1д70Д1д71Д1д77C+
> > > > > +Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7­1Д1д77Д1д70Д1д78Д1д71Д1д77Д1д70Д1д73Д1д70Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д7­7Д1д70Д1д79Д1д71Д1д77Д1д71Д1д78Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7­1Д1д77Д1д71Д1д77C++Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д­1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д73Д1д71Д1д77Д1д­71Д1д77Д1д71Д1д77 Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71­Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д76Д1д78Д1д72Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77­Д1д71Д1д77Д1д71Д1д77Д1д71Д1д70Д1д72Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70­Д1д79Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д7Д1д71Д1д77Д1д70Д1д71Д1­д71Д1д77C++Д1д70Д1д79Д1д70Д1д73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7­1Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7Д1д71Д1д77Д1д71Д1д77IBMД1­д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77
> > > > > Д1д71Д1д77Д1д70Д1д71Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71­Д1д77Д1д7Д1д7"Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д­1д71Д1д77Д1д71Д1д77Д1д71Д1д73Д1д71Д1д77"SCAД1д71Д1д77Д1д71Д1д77Service Component ArchitectureД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д75Д1д71Д1д77Д1д71Д1д77Д1д­70Д1д75Д1д71Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77C++Д1д71­Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74­Д1д7ж╙1Д1д77Д1д70Д1д76Д1д71Д1д77Д1д71Д1д77
> > > > > Д1д71Д1д77Д1д71Д1д77RIД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д­71Д1д77IBMД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72Д1д71­Д1д77Д1д70Д1д70Д1д70Д1д72Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77­Д1д71Д1д77Д1д71Д1д77Д1д70Д1д72}Д1д71Д1д77Д1д71Д1д77Д1д70Д1д79Д1д71Д1д77Д1д7­1Д1д77Д1д70Д1д76'Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д­73Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Apa­cheД1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д77Д1д71Д1д77Д1д70Д1д70Д1­д7Д1д7Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д7­7Д1д70Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д7­1Д1д77Д1д70Д1д70Д1д71Д1д77Д1д70Д1д71Д1д70Д1д72Д1д70Д1д74Д1д71Д1д77Д1д70Д1д7­5Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д70Д1д74Д1д7ж╙1Д1д77Д1д70Д1д76Д1­д71Д1д77Д1д71Д1д77Д1д70Д1д70Д1д71Д1д77Д1д71Д1д77Д1д71Д1д77Д1д71Д1д774
>
> ...
>
> 阅读更多 »- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Ke Jin

unread,
Dec 26, 2007, 10:19:14 PM12/26/07
to TopLanguage
On Dec 26, 2:03 am, "李扬" <yayany...@gmail.com> wrote:
> 我能理解楼主说的问题,顺便说下osgi应该是一个不错的ioc框架虽然它没对ioc提供直接的支持,但是它提供了对osgi组件全生命周期的管理,这应该是符合IOC精神的。在我看来gp和这里的IOC是完全不同层次上的东西。
> 打个比喻如果我们讨论的是一个基层电路板,那么IOC解决的是电路板的布线问题。它要完成的功能是怎么样把不同的电容,电阻,元器件组合起来构成一台电脑。而gp或者传统的oop是用来构建电容电阻的技术。ioc要与组件部署生命周期管理结合起来才有意义。
>

-----------
Agree! 我前几天也举过一个类似的例子。一个应用软件就类似一个网络系统。里面有
WORKSTATIONS,PRINTERS,ROUTERS,FIREWALL/DNS/EMAIL SERVERS,等等。这些节点的内部实现类似
于OOP/GP/SP等等要讨论的,这些节点的连接,部署,配置等类似于IoC框架的范畴。
----------------

> 顺便问句。。。完全无侵入的c++ ioc怎么实现的(没元数据,c++没abi)?没时间看那个库能简单介绍下吗?
>

-------------
ANSWER: 发现N多人都有这么个误区,把IOC容器中的XML看成是一种脚本“交互”语言,所以强烈依赖反射机制实现“交互”动态调用。如果明白
了IOC并不是干这个用的,以及IOC的实质目的(参见我写的呼悠文章),就能看出语言环境所提供的天然反射对IOC来说并不是必须
的。POCOCAPSULE采用的是所谓“投射”(PROJECTION)方式来提供“反射”(REFLECTION)。也就是说提供一个工具,由
XML配置文件本身来生成反射和动态调用所需要的元数据和代码(这些生成的元数据和代码只记录函数签名,不记入具体参量。所以,若只改变参量值,则无须
重新生成)。自然而然,支持完全不侵入的IOC就一点也不足为奇了。

ABI也是一样的道理。支持异类二进制接口(或异类编译器模块)并非IOC的目的,绝大多数C++应用都没有这个要求。而且即使有这个要求,也可以看成
是与IOC目的和手段都垂直的要求并以额外的垂直于IOC的手段去解决。所以,POCOCAPSULE框架根本就不考虑异类二进制接口,所有模块
(POCO)都应该由二进制互相兼容的C++编译器生成,自然也就没有ABI的要求了。
-----------

Ke

Ke Jin

unread,
Dec 26, 2007, 10:37:58 PM12/26/07
to TopLanguage
On Dec 26, 4:23 am, "confused.ddk" <confused....@gmail.com> wrote:
> 虽然没有仔细看完poco网站上的内容,但是我的理解是IoC主要是刻画object S与object C之间的调用,其目的是为了让OS与OC更加
> 松耦合,甚至可以通过外部配置Service可以很容易替换,不知理解是否正确?另有几个疑问是,1.假设牵涉到了distributed
> object将如何解决?

分布与IOC完全垂直。实际上分布式架构(比如CORBA等)的目的就是包装隐藏分布所带来的复杂性。如果这个封装轻而易举地就被垂直的IOC给捅破
了,要么是这个封装架构有问题,要么是IOC没做到非侵入。POCOCAPSULE中有几个例子就是以分布模块来进行组装的(比如EXAMPLES/
CORBA/JTRS-SCA)。与非分布式的组装没有什么特别的不同。

> 2.假若stub与OS、OC存在不同进程间,传递参数是否存在问题?

看来有这个“迷惑”(嘿嘿)的老大还不少。前几天我解释过,IOC只负责组件的搭接和拆除,而并不参与搭接后组件之间的互相调用。

> 3.能做到语言无关吗?

参见这个讨论: http://groups.google.com/group/pococapsule/browse_frm/thread/b14e67e517c3d63c

> 4.整个机制让我觉得与com似
> 曾相识,com通过idl来刻画,编译后也生成stub/proxy,通过dll/ocx export出来的函数通过GUID来创建对应的
> ojbect,虽然老大不熟悉COM也请比较比较吧。

前几天wang老大也问过类似的问题,看来有必要澄清一下。无论从IOC通性来看还是从POCOCAPSUEL的任何特性来看,与COM均没有太多可比
之处。COM的主要目的(以我对COM肤浅且过时10年以上的了解)是为了支持不同C++编译器生成的模块的集成。所以定义了一个ABI。这与IOC的
目的完全垂直。而且IOC里也不定义什么接口IDL。

>
> 我感觉形式上与java的servlet配置很相似。思考的不太深入,随便问问。
>

这个我不太懂。但要是一定要比,那就跟SPRING一样。。。嘿嘿。。。

李扬

unread,
Dec 26, 2007, 10:40:25 PM12/26/07
to pon...@googlegroups.com

-------------
ANSWER: 发现N多人都有这么个误区,把IOC容器中的XML看成是一种脚本"交互"语言,所以强烈依赖反射机制实现"交互"动态调用。如果明白
了IOC并不是干这个用的,以及IOC的实质目的(参见我写的呼悠文章),就能看出语言环境所提供的天然反射对IOC来说并不是必须
的。POCOCAPSULE采用的是所谓"投射"(PROJECTION)方式来提供"反射"(REFLECTION)。也就是说提供一个工具,由
XML配置文件本身来生成反射和动态调用所需要的元数据和代码(这些生成的元数据和代码只记录函数签名,不记入具体参量。所以,若只改变参量值,则无须
重新生成)。自然而然,支持完全不侵入的IOC就一点也不足为奇了。

ABI也是一样的道理。支持异类二进制接口(或异类编译器模块)并非IOC的目的,绝大多数C++应用都没有这个要求。而且即使有这个要求,也可以看成
是与IOC目的和手段都垂直的要求并以额外的垂直于IOC的手段去解决。所以,POCOCAPSULE框架根本就不考虑异类二进制接口,所有模块
(POCO)都应该由二进制互相兼容的C++编译器生成,自然也就没有ABI的要求了。
-----------

呵呵当时写这个的时候就想到POCO应当是都编制到一个模块中的。不过这样的ioc框架对实际的项目意义不是很大。在我的理解用ioc。就是为了能够更好的二进制模块复用。

Ke Jin

unread,
Dec 26, 2007, 10:56:58 PM12/26/07
to TopLanguage
POCOCAPSULE并不要求所有POCO都被编入同一模块,也不可能强加这种要求。因为用户可能要用的第三方模块可能根本不提供源代码(比如一个第
三方的中间件模块)。POCOCAPSULE所唯一附加的要求就是POCO的接口(如果要被IOC所管理)在WINDOWS上要被EXPORT出来。二
进制复用并不一定非要异质二进制复用。至少现在在CBD/CBSE(COMPONENT-BASED DEVELOPMENT/COMPONENT-
BASED SOFTWARE ENGINEERING)领域,异质二进制远远不是人们所关注的问题。

Ke Jin

unread,
Dec 26, 2007, 11:43:45 PM12/26/07
to TopLanguage
乱码,重贴。。。。

不明白李老大是如何断定POCO都必须被编入同一模块。POCOCAPSULE根本没有这种要求,也不可能强加这种要求(因为很多用户需要使用不提供源
代码的第三方模块)。实际上,POCO们是被BUILD进了几个模块,哪些模块等等都与POCOCAPSULE完全是垂直的。

另外,我同意IOC架构的主要目的之一是二进制模块复用。但这并不等于必须是异类二进制模块(由互相二禁止不兼容的C++编译器--比如VC和G+
+--生成的模块互相集成复用)。大部分C++用户的应用仍旧是同类二进制模块组成(所有模块无论多少都是由同一编译器生成)。即使某些应用确实有异类
二禁止模块服用,也是局限在很小范围之内。我不明白为什么李老大认为不支持异类二进制模块复用的IOC框架意义不大。刚才我在回答迷惑的DDK时也说
了,异类二禁止模块之间的调用(即使有这种要求)可以看成是与IOC垂直的要求,并以与IOC垂直的手段去解决。

Ke

On Dec 26, 7:40 pm, "李扬" <yayany...@gmail.com> wrote:

Jian Wang

unread,
Dec 28, 2007, 12:26:01 PM12/28/07
to pon...@googlegroups.com
我有点明白是怎么回事了。

举个例子来说,本来是3个dll和一个exe,4个都是由c++写的,由这个exe载入3个dll中的对象,并且连接起来构成一个系统。
现在用了IOC之后,这3个dll不变。exe变成了框架 ,XML配置文件,以及从XML自动生成的source,一起编译出来。
于是乎这个新的,不需要用c++来编写的exe就取代了原来的exe。

请问是这样的吗?

在 07-12-27,Ke Jin<kji...@gmail.com> 写道:

Ke Jin

unread,
Dec 28, 2007, 2:08:53 PM12/28/07
to TopLanguage
On Dec 28, 9:26 am, "Jian Wang" <oxygen.jian.w...@gmail.com> wrote:
> 我有点明白是怎么回事了。
>
> 举个例子来说,本来是3个dll和一个exe,4个都是由c++写的,由这个exe载入3个dll中的对象,并且连接起来构成一个系统。
> 现在用了IOC之后,这3个dll不变。exe变成了框架 ,XML配置文件,以及从XML自动生成的source,一起编译出来。
> 于是乎这个新的,不需要用c++来编写的exe就取代了原来的exe。
>
> 请问是这样的吗?
>

-----------------------------------------------------
Answer: 你说的这个有点象传统的DSM,比如MS的软件工厂,强调的是逻辑代码(包括管弦逻辑甚至业务逻辑)生成。IoC和
PocoCapsule并不是这样。首先PocoCapsule并不生成管线逻辑的C/C++代码。管线逻辑仍旧保存在XML中(或者文本化的DOM
中)。因而,用户在现场对配置参量甚至管线逻辑进行改变而并不需要IoC框架的开发系统,也更不需要进行C/C++代码编译。

PocoCapsule基本的用法可以这么描述,你有一堆实例需要由IoC框架管理。这些实例的类的实现是分散在一些DLL(或UNIX的动态库甚至静
态库)中,或者在模板头文件中。这些库和模板文件都是独立于IoC框架制作的。它们的制作者除了遵循松偶合原则外根本就不需要知道或考虑IoC框架。

如果没有IoC框架,用户要人肉开发一些管线逻辑。这些管线逻辑可以被并入EXE,也可以在另外一些DLL或UNIX动态库中由EXE调用。

采用IoC框架后,IoC框架本身就是一个DLL(或UNXI动态库),但其调用逻辑要远远简单于管弦逻辑(基本上就是以XML文件名或XML字符串为
参量的create应用函数和terminate应用函数)。用户在XML中描述管弦逻辑。然后用框架所提供的工具抽取该描述需要的动态调用签名,生成
相应的反射的元数据和动态调用stub。XML中具体的配置参量和实例依赖关系,生命控制逻辑描述等均不在生成代码中。这些逻辑仍旧由IoC框架在运行
时(用户调用create/terminate应用时)根据XML(或DOM)的描述,通过stub调用用户提供的模块(比如
factory,ctro,dtor,setter,或任意method/operator/function等等)实现。当然,这些元数据和stub
们也是build到DLL或EXE中。

这里假设所有牵扯进来的DLL(或UNXI库)包括用户模块,第三方模块和IoC框架本身等都是由二进制互相兼容的C++编译器制造。VC,C+
+BUILDER,g++等混用的情况不在考虑范畴只内。有些老大认为这种不支持编译器混用的框架实际意义不大。也许是领域不同。我所熟悉的领域中绝大
部分应用都是用同一种编译器。

Ke
----------------------------------

> 在 07-12-27,Ke Jin<kjin...@gmail.com> 写道:

up duan

unread,
Dec 29, 2007, 5:16:38 AM12/29/07
to pon...@googlegroups.com
你的这个PocoCapsule是一个管线逻辑的解释执行器?可以这样理解吗?

Ke Jin

unread,
Dec 29, 2007, 12:59:42 PM12/29/07
to TopLanguage
可以这么理解,但也不太确切。另外,并非这个PocoCapsule,几乎所有的IoC容器都可以(也不可以)这么理解(无论是基于XML的,还是基于
annotation的)


可以这么理解的原因是,所要搭建的管弦逻辑或着搭建的步骤并没有被事先转换为静态机器指令,而是运行时由容器(框架)根据用户描述完成的。

不太确切的原因是,XML并非管弦逻辑的脚本语言。它们根本不描述搭建的步骤,而只是表达希望的结果。

可以跟SQL比较(特别是动态SQL,但静态SQL实质上也差不多,因为静态QUERY计划也并非机器代码)。如果SQL数据库引擎可以被看做
SQL(特别是SQL的SELECT查询语句)的解释执行器,那么IoC框架也就可以被看成是管弦逻辑的解释执行器。

On Dec 29, 2:16 am, "up duan" <fixo...@gmail.com> wrote:
> 你的这个PocoCapsule是一个管线逻辑的解释执行器?可以这样理解吗?
>

up duan

unread,
Dec 29, 2007, 11:33:23 PM12/29/07
to pon...@googlegroups.com
>不太确切的原因是,XML并非管弦逻辑的脚本语言。它们根本不描述搭建的步骤,而只是表达希望的结果。

这意味着IoC容器处理了组件以及其依赖关系【在我的观念中,这就是搭建,不知道对不对】,不需要XML描述了?或许你说的搭建是一个动作序列,而依赖关系只是静态关系,IoC容器从这个静态关系推导出搭建步骤,然后实施这个动作序列?

数据库显然分成关系引擎和存储引擎两大部分,关系引擎就是SQL语句的解释执行器,我是这么认为的。

Ke Jin

unread,
Dec 29, 2007, 11:50:39 PM12/29/07
to TopLanguage


On Dec 29, 8:33 pm, "up duan" <fixo...@gmail.com> wrote:
> >不太确切的原因是,XML并非管弦逻辑的脚本语言。它们根本不描述搭建的步骤,而只是表达希望的结果。
>
> 这意味着IoC容器处理了组件以及其依赖关系【在我的观念中,这就是搭建,不知道对不对】,不需要XML描述了?或许你说的搭建是一个动作序列,而依赖关系只是静态关系,IoC容器从这个静态关系推导出搭建步骤,然后实施这个动作序列?
>
------------
Answer: 这个说法比较贴切了。另外,不仅仅是依赖关系,还有生命控制,部署和配置等等条件和设定。
------------

> 数据库显然分成关系引擎和存储引擎两大部分,关系引擎就是SQL语句的解释执行器,我是这么认为的。
>
------------------
那么关系引擎要调用存储引擎(应该叫“命令解释层调用内核层”)。IoC容器也可以这么看,XML被转换为内部结构模型,该模型驱动调用内核功能(你也
可以称之为XML引擎和IoC引擎两大部分, XML引擎就是XML的解释执行器)。
------------------

莫华枫

unread,
Dec 30, 2007, 7:11:14 AM12/30/07
to pon...@googlegroups.com


On Dec 30, 2007 12:50 PM, Ke Jin <kji...@gmail.com> wrote:


On Dec 29, 8:33 pm, "up duan" <fixo...@gmail.com> wrote:
> >不太确切的原因是,XML并非管弦逻辑的脚本语言。它们根本不描述搭建的步骤,而只是表达希望的结果。
>
> 这意味着IoC容器处理了组件以及其依赖关系【在我的观念中,这就是搭建,不知道对不对】,不需要XML描述了?或许你说的搭建是一个动作序列,而依赖关系只是静态关系,IoC容器从这个静态关系推导出搭建步骤,然后实施这个动作序列?
>
------------
Answer: 这个说法比较贴切了。另外,不仅仅是依赖关系,还有生命控制,部署和配置等等条件和设定。
------------
能不能理解成一种xml化的指令,用于执行这种动作序列。

--
反者道之动,弱者道之用
m...@seaskysh.com
longsh...@gmail.com
http://blog.csdn.net/longshanks/

莫华枫

unread,
Dec 30, 2007, 8:44:04 AM12/30/07
to pon...@googlegroups.com
这倒让我想起很久以前,做过的一个东西,不能算框架,只能算个简单的平台吧。这个东西试图运用一些配置数据,将各种功能模块链接起来,构成一个特定的功能。那时xml还没流行,配置数据存放在数据库里。接口部分用的是com(vb泛滥的年代,只有这种选择)。
我们小规模地尝试了一下,这样的系统的确很方便。但是后来却放弃了。倒不是这种配置系统本身的问题。问题出在业务变化上。对于既定的业务系统,明确稳定,按需求预制组件,然后配置,构建功能。
但我们做的是mis系统。做过mis的程序员对于"用户善变"肯定是终身不忘的:)。当业务变化时,我们发现,多数情况下都无法通过调整配置结构完成。一般都需要修改相关模块的代码。有时还伴随着接口的变化。接口变化了,配置数据也得改。这种情况下,工作量增加了很多。
当时我的初始动机是做一些基本组件,就像螺钉、销子、马达这样的标准件,然后用配置数据将他们组合起来。但是结果发现,因为配置数据只具备链接模块的功能,但不具有组织业务的能力。这种方式在需求明确,业务固定的情况下,效果很好。然后,一旦发生了需求变化,不得不修改"标准件"。结果,标准件成了专用件。我们并未从中得到好处,却凭空增加了沟通的负担(对于多人项目而言),以及系统构建和维护的复杂性。更要命的,我们的很多程序员面对被切成块的需求和设计,往往"呼吸困难"。
从中,我意识到一个关键性的问题。配置数据作为粘合剂,缺乏调整的能力。所以,我得出了一个结论,配置数据必须具备简单的编程能力,使得这种"粘合剂"有能力弥合某些标准件间的差异。
后来,我又想到,如果我能够创造一种语言,能够表达配置数据,同时又具备一些简单的编程能力,使得标准件可以尽可能大地被复用,而无需修改,那就好了。这种语言对于我来说,简直就是量子力学,不多久,就把它抛到九霄云外了。这会儿突然想起来,想借这个帖子问一下,现在对于这种问题有没有什么新的方法或理论?


On Dec 30, 2007 12:50 PM, Ke Jin <kji...@gmail.com> wrote:

Ke Jin

unread,
Dec 30, 2007, 4:05:36 PM12/30/07
to TopLanguage
On Dec 30, 4:11 am, "莫华枫" <longshank...@gmail.com> wrote:
> On Dec 30, 2007 12:50 PM, Ke Jin <kjin...@gmail.com> wrote:
>
>
>
> > On Dec 29, 8:33 pm, "up duan" <fixo...@gmail.com> wrote:
> > > >不太确切的原因是,XML并非管弦逻辑的脚本语言。它们根本不描述搭建的步骤,而只是表达希望的结果。
>
> > 这意味着IoC容器处理了组件以及其依赖关系【在我的观念中,这就是搭建,不知道对不对】,不需要XML描述了?或许你说的搭建是一个动作序列,而依赖关系只是-静态关系,IoC容器从这个静态关系推导出搭建步骤,然后实施这个动作序列?
>
> > ------------
> > Answer: 这个说法比较贴切了。另外,不仅仅是依赖关系,还有生命控制,部署和配置等等条件和设定。
> > ------------
>
> 能不能理解成一种xml化的指令,用于执行这种动作序列。
>
------------------
Answer: 还是UP老大的说法确切一些:而依赖关系只是-静态关系(应该叫结构关系),IoC容器从这个静态关系推导出搭建步骤,然后实施这个动
作序列.

IoC容器的XML文件本身只是声明一个结构。因为结点之间互相关联,文件中单独一行XML语句或单独一个XML结点并不能被独立执行。当然,若把整个
XML文件看成一个命令是可以的,就象把一个完整的SQL SELECT语句看成一个命令一样。另外,IoC容器的用户在XML中并不指定执行的步骤,
就跟SELECT并不直接指定QUERY计划一样。
------------------

> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/

Ke Jin

unread,
Dec 30, 2007, 4:51:16 PM12/30/07
to TopLanguage
On Dec 30, 5:44 am, "莫华枫" <longshank...@gmail.com> wrote:
> 这倒让我想起很久以前,做过的一个东西,不能算框架,只能算个简单的平台吧。这个东西试图运用一些配置数据,将各种功能模块链接起来,构成一个特定的功能。那时-xml还没流行,配置数据存放在数据库里。接口部分用的是com(vb泛滥的年代,只有这种选择)。
> 我们小规模地尝试了一下,这样的系统的确很方便。但是后来却放弃了。倒不是这种配置系统本身的问题。问题出在业务变化上。对于既定的业务系统,明确稳定,按需求-预制组件,然后配置,构建功能。
> 但我们做的是mis系统。做过mis的程序员对于"用户善变"肯定是终身不忘的:)。当业务变化时,我们发现,多数情况下都无法通过调整配置结构完成。一般都需-要修改相关模块的代码。有时还伴随着接口的变化。接口变化了,配置数据也得改。这种情况下,工作量增加了很多。
>
> 当时我的初始动机是做一些基本组件,就像螺钉、销子、马达这样的标准件,然后用配置数据将他们组合起来。但是结果发现,因为配置数据只具备链接模块的功能,但不-具有组织业务的能力。这种方式在需求明确,业务固定的情况下,效果很好。然后,一旦发生了需求变化,不得不修改"标准件"。结果,标准件成了专用件。我们并未从-中得到好处,却凭空增加了沟通的负担(对于多人项目而言),以及系统构建和维护的复杂性。更要命的,我们的很多程序员面对被切成块的需求和设计,往往"呼吸困难-"。
>
> 从中,我意识到一个关键性的问题。配置数据作为粘合剂,缺乏调整的能力。所以,我得出了一个结论,配置数据必须具备简单的编程能力,使得这种"粘合剂"有能力弥-合某些标准件间的差异。
> 后来,我又想到,如果我能够创造一种语言,能够表达配置数据,同时又具备一些简单的编程能力,使得标准件可以尽可能大地被复用,而无需修改,那就好了。这种语言-对于我来说,简直就是量子力学,不多久,就把它抛到九霄云外了。这会儿突然想起来,想借这个帖子问一下,现在对于这种问题有没有什么新的方法或理论?
>

好象问了好几个问题,所以我也就东一榔头西一棒的回答了:))

首先说编程语言。。。直接用C++不就可以吗?我的意思是说,不要为了切块而切块,为了进行外部配置而外部配置。一个框架也好,设计也吧,都应该支持这
种灵活的变通。可编程的配置语言并不难,但我觉得会有很多遗留麻烦。最主要的就是如何支持动态调试,动态跟踪,和遍历测试。。。光写个解析执行器还不
够,还要写一堆调试跟踪遍历工具。。。

所以POCOCAPSULE的配置语言和模型转换语言干脆采用纯声明式的语法,没有任何可变变量(MUTEABLE VARIABLE),因而也没有用
户指定的动态行为或因为与执行过程不同而产生的行为不同,从而也就大大地避免了用户一层对这些XML/XSLT描述进行动态调试跟踪遍历的需要。如果应
用程序需要动态行为进行逻辑控制,POCOCAPSULE的建议是将该行为用C++写到一个类里头去处理,而不在XML静态配置中去处理。这有点象
SQL的DDL和DML语句大都还保持声明方式,而命令编程方式需求则是被推到存储过程中去处理。

再说新技术(实际上也都不新了),能想起来的就是无侵入框架,注释(只适用于C#和JAVA等,C++中没有---因为只有注释,没有反射还是没什么
用),DSL/DSM等可能能部分解决你说的问题:

无侵入框架:框架本身并不在乎用户模块的接口,所以可以减少因用户模块的接口改变接所引起的配置变化。

注释(annotation):某些配置(比如安全策略,事务策略,O/R映射等)应该更接近业务逻辑代码而不是集中到外部配置文件中。所以,代码注释
提供了一种变通,但这要求框架能通过反射机制读取编译后的这些注释信息(从而在C++中似乎还不能解决)。

DSL/DSM:有点类似C++和LISP中的宏替换,可以将分散在XML文件(甚至分散在多个XML文件)中配置中的未定参量集中到一个XML文件中
去。

莫华枫

unread,
Dec 30, 2007, 11:09:07 PM12/30/07
to pon...@googlegroups.com
呃...,我还是比较迷糊。
换个说法或许好些:我当时遇到的问题是业务逻辑和配置数据相互交织在一起,对于预先明确的设计,非常好。然而一旦遇到变化,哪怕就是添加一个判别或者修改一个循环,都会导致模块的修改,甚至接口的变化。因为所有的业务逻辑都在模块里,配置数据被设定为与业务逻辑无关。当时,我的希望是,开发预定义的业务模块,通用化和标准化的组件。可以通过装配实现一个特定功能。但是实际上,我们不可能通过一系列标准化或通用化组件简单地拼装构造一个系统。对于一个软件,甚至一个软件的不同用户,都会有很多专用性的组件。而标准件实际上仅仅局限在界面控件和数据访问模块上。
后来我发现配置数据实际上不可能同业务逻辑分离。因为配置数据控制着组件上特定接口间的连接。而组件上的接口表达了实际的业务逻辑,只有正确的链接才能获得正确的功能。这样,业务逻辑实际上隐式地存在于配置数据中。
我本来想,如果通过配置数据构造的软件功能需求变化,只需调整配置数据即可。但是实际上做不到,除非需求是固定的。绝大多数的需求变化都会涉及模块的修改。这样也就失去了配置数据的优点。反而增加了维护的工作量。
后来我想了个办法,标准组件还是标准组件,把标准组件无法弥合的部分放在另一个独立的模块中,相当于做了一个适配器。但是,遇到两个问题:一个是这样一来,模块的数量暴涨,出现了大量粘合业务逻辑模块的组件,而且这些模块很简单,但是很琐碎。另一个问题是,一些特定的情况下,适配模块很难构造,这时还是需要修改标准件。
简单试用后,程序员开始向我抱怨,说我增加了他们的负担。他们修改了组件后,时常忘记修改配置数据,这些东西不在一个project里,跳来跳去很烦。不时地需要添加适配模块,业务逻辑变得很琐碎。而且,他们还要求我提供配置数据的调试功能。结果我们给搞烦了,索性放弃了这种做法。
我总结这次尝试的时候想到:实际上我当时没有"踩上点"。在一个项目,特别是需求变化频繁的项目中,问题的大头不在功能模块的链接方面。这方面的代码量或许会占到20%,或30%,甚至更多。但是可能只占总工作量,或者难度的不到10%。项目越大,越复杂,变化越大,这个比例越小。我用配置数据实现软件构造的功能,只是减少这不到10%的工作量和难度。但却为其他90%的工作带来不小的麻烦。再说,我们做过不少项目后,积累了一些加载和链接模块的代码框架,可以直接使用,这方面的问题也就大大弱化了。这也就难怪那些程序员不买我这点"新技术"的帐了。:)
不过,我还是坚持认为这条路是对的。只是限于我的能力和当时技术条件,无法达到更好的效果。我总结出了这么两点:第一、配置数据不应当孤立,应当嵌入到程序代码中,便于程序员使用;第二、仅有配置数据还不够,还需要有一些简单的编程能力,确保标准件不变成专用件,或者消除大量简单琐碎的适配模块。
现在回想起来,我的脑子里立刻闪出了一样东西——dsl。:)

Ke Jin

unread,
Dec 31, 2007, 12:25:28 AM12/31/07
to TopLanguage


On Dec 30, 8:09 pm, "莫华枫" <longshank...@gmail.com> wrote:
> 呃...,我还是比较迷糊。
> 换个说法或许好些:我当时遇到的问题是业务逻辑和配置数据相互交织在一起,对于预先明确的设计,非常好。然而一旦遇到变化,哪怕就是添加一个判别或者修改一个循环,都会导致模块的修改,甚至接口的变化。因为所有的业务逻辑都在模块里,配置数据被设定为与业务逻辑无关。当时,我的希望是,开发预定义的业务模块,通用化和标准化的组件。可以通过装配实现一个特定功能。但是实际上,我们不可能通过一系列标准化或通用化组件简单地拼装构造一个系统。对于一个软件,甚至一个软件的不同用户,都会有很多专用性的组件。而标准件实际上仅仅局限在界面控件和数据访问模块上。
-------------------
kjin101: 现代基于IoC的组件容器的思想与传统的组件(包括COM组件容器)的思想已经不一样了。IOC组件基本上是服务层的组件,粒度大,
层次高。所以我前面说了,不该分割的和不该外部配置的就应该不用。而且实际场景各不相同,组件框架和外部配制也一样,并非框架里的战斗机(银弹)。

------------------

> 后来我发现配置数据实际上不可能同业务逻辑分离。因为配置数据控制着组件上特定接口间的连接。而组件上的接口表达了实际的业务逻辑,只有正确的链接才能获得正确的功能。这样,业务逻辑实际上隐式地存在于配置数据中。
> 我本来想,如果通过配置数据构造的软件功能需求变化,只需调整配置数据即可。但是实际上做不到,除非需求是固定的。绝大多数的需求变化都会涉及模块的修改。这样也就失去了配置数据的优点。反而增加了维护的工作量。
> 后来我想了个办法,标准组件还是标准组件,把标准组件无法弥合的部分放在另一个独立的模块中,相当于做了一个适配器。但是,遇到两个问题:一个是这样一来,模块的数量暴涨,出现了大量粘合业务逻辑模块的组件,而且这些模块很简单,但是很琐碎。另一个问题是,一些特定的情况下,适配模块很难构造,这时还是需要修改标准件。
> 简单试用后,程序员开始向我抱怨,说我增加了他们的负担。他们修改了组件后,时常忘记修改配置数据,这些东西不在一个project里,跳来跳去很烦。不时地需要添加适配模块,业务逻辑变得很琐碎。而且,他们还要求我提供配置数据的调试功能。结果我们给搞烦了,索性放弃了这种做法。
> 我总结这次尝试的时候想到:实际上我当时没有"踩上点"。在一个项目,特别是需求变化频繁的项目中,问题的大头不在功能模块的链接方面。这方面的代码量或许会占到20%,或30%,甚至更多。但是可能只占总工作量,或者难度的不到10%。项目越大,越复杂,变化越大,这个比例越小。我用配置数据实现软件构造的功能,只是减少这不到10%的工作量和难度。但却为其他90%的工作带来不小的麻烦。再说,我们做过不少项目后,积累了一些加载和链接模块的代码框架,可以直接使用,这方面的问题也就大大弱化了。这也就难怪那些程序员不买我这点"新技术"的帐了。:)
---------------
kjin101: 这是指代码行的比例,而且你应用中的管弦逻辑估计都是HOMEGROWN的,对开发人员并不陌生。在很多场景中,管弦逻辑要用到大量
第三方系统逻辑组件,对于纯业务逻辑开发人员来说,哪怕其代码行只占5%,也是相当的一道开发和维护门槛。
---------------

> 不过,我还是坚持认为这条路是对的。只是限于我的能力和当时技术条件,无法达到更好的效果。我总结出了这么两点:第一、配置数据不应当孤立,应当嵌入到程序代码中,便于程序员使用;第二、仅有配置数据还不够,还需要有一些简单的编程能力,确保标准件不变成专用件,或者消除大量简单琐碎的适配模块。
> 现在回想起来,我的脑子里立刻闪出了一样东西----dsl。:)
>
----------------
kjin101: 能否具体说说。。。:))我对DSL的观点比较保守(感觉马钉同学的LOP更是个大忽悠)。。。对于大多数情况来说,我觉的只有声明
式的DSL才有实际意义,因为避免了跟踪调试便利等要求(这是为什么我只谈DSM,不谈DSL)。程序的正确性由静态约束条件来保证。如果有动态编程要
求(我估计你指的是命令式编程)应该尽量以传统GPL处理(因为有现成的调试跟踪工具)。除非是很简单的语法和很简单的编程,命令式的DSL在大多数情
况下可能是得不偿失。
----------------
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/
Message has been deleted
Message has been deleted

Eli

unread,
Jan 2, 2008, 4:55:13 PM1/2/08
to TopLanguage
看了一下这个讨论, LZ纯属言论暴力, 这么说下去, 只有IoC天上地下无所不能, 非上不可着一个结论. Java社区也好.NET社区也好,
关于IoC这些我看的多了, 确实毫无新意.

如果所谓的控制反转类似的东西不是早就有了的话, 20年来各种商业软件和项目里的插件系统, 通过配置改变的系统, 都是怎么运行的? 你可以说早先
介绍OOP概念的DP95之类的书里没提到这些, 人家就是提供一些的思路, 自然不会说的那么详细, 抛砖引玉嘛, 难道还非得写清楚如何实现一个
XML或者注册表配置系统, 详细说明这些东西如何反过来决定和改变运行时的具体实现? 然后再顺手介绍一下这样的框架如何实现分布式, 如何通用
化? 具体的需求碰到具体的问题, 自然而然会用到各种方式去解决. 你说的96年谁谁提出, 说白了也不过是对已经被应用的手法做个总结和指导罢
了.

你说COM之类和IoC不同, 当然不同, 首先是因为IoC作为一个具体解决手法, 只是COM之类的东西中的一小部分,人家当时面临的问题还有很
多, 类似于IoC概念的这一部分, 和那会儿大面积的空白相比又不是唯一的问题, 自然最终的实现物看起来和现在的IoC框架在形式上有这样那样的区
别; 其次,你文章中还提到, 比如COM要求实现公共接口等等, 这确实都是缺点, 但却不是本质性的, 只是实现上的问题, 古老年代, 可以在开
发者之间分享的经验不够多嘛. 要说不同, 所有的东西都能找出不同不是? 总不能因为养鸡的方式调整了, 鸡就变成新物种了吧?

Java/.NET程序员一大半都是新程序员, 等到程序写多了, 碰到类似的问题(其实比过去可能遇到的困难简单多了), 自然把这个新瓶旧酒的东
西当个宝贝. 现在把这些以通用框架的形式引入C++, 我觉得必要性不大, 毕竟现在选择C++的领域中, 产生非得引入一个通用IoC框架才能满足
的需求的地方不多.

10年前我不熟悉面向对象的各种概念的时候, 你给我说这些乱七八糟的玩意(还有前年热炒的AOP), 我还可能听得一愣一愣的. 现在是什么情况
呢? 一个合格的OOP学习者, 无需别人灌输, 有点工作经验, 用屁股都知道该怎么做: 不就是单独写点代码, 负责具体实现的对象的装载吗? 考
虑到变化, 写个配置文件呗, 没有元数据, 做个额外的描述呗, 需求复杂点的, 来个生命周期维护呗. 只要能正确划分问题, 其中一些类似框架实
现, 自然而然就会涵盖各类IoC框架的部分或全部特征.

关键是, IoC还是给程序员用的; 而现在从大项目到小项目, 哪个组里没有一两个能顺手写个自有IoC框架的人? 人家何苦非要引入第三方的不确定
性呢? IoC的要点在于想法, 而不在于实现的难度, 这使得IoC作为概念在传播时起到改善设计的作用, 而具体到某一个IoC框架, 其实价值不
大. 现在居然还有人靠忽悠或出卖这种玩意想直接或间接挣钱, 只能说太天真了....

说实话, 即便在Java/.NET领域, 我一般也不会使用任何一个无论多么著名多么久经考验的通用IoC框架, 而是最多借鉴一下其实现; 因为没
啥深度可言, 如果在开发一半产生了类似的需求, 自然会在局部做类似的事, 然后借助IDE或已有工具重构一下; 如果在不同局部的实现产生了重复的
特征, 就会顺手提炼一下, 在项目需求的范围内, 越来越通用, 就越来越类似于一个IoC框架. 其实这样花费的时间, 比学习/使用/调整第三方
框架, 并不会多出多少. 要说C++上IoC框架的唯一优势, 可能就是实现起来比Java/.NET工作量更大, 这样如果在多处产生类似的需求以
至于工作量太大, 在自己实现和引入第三方的天平上, 偶尔(实际上这种情况恐怕在如今C++适用的范围里不会很多)会倾向于后者, 这还有一个前提是
后者有足够的声誉可以信任, 让使用者放心.

说到GP/FP/MP是不是替代, 这个话题太大. 只是说, OOP所产生的问题, 现在靠IoC/AOP这些具体手段(别升华到万能药那么可笑,
代码大全里有句话叫做兜售狗皮膏药的软件先知)去解决的, 很多在其它编程方式下根本不存在, 这么理解就好的多.
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted

Eli

unread,
Jan 2, 2008, 6:46:36 PM1/2/08
to TopLanguage
另外多说一句不该说的, 所有对于IoC的介绍, 无论是技术宣传者, 还是实现者, 无论哪一领域, 除了对OOP初学者的使用说明, 更多的言论都
像LZ这样, 云山雾罩, 一大堆有一定经验的开发者也听得很"迷惑". 其实这正是因为IoC说穿了没啥内容, 不得不找很多多余的话来装门面的缘
故.

在我看来, 使用XML除了通用, 最大的好处就是可以很简单定义和实现自己的描述层, 否则就是定义一套漏洞百出的描述层语法或DOM就得花上个大半
年. 没有ABI, 没有IDL, 可以说不需要, 其实另一面是, 一下子面对的事情就少很多简单很多. 别人问的时候, 不能简单的说IoC框架关
注的领域很小, 所以不实现这些, 那显得好像连老旧的COM都不如, 多没面子; 于是就得找一大堆话来作为为什么没有这些元素做一个说明, 结果越
说越绕弯.

说白了就是把:
接口* x;
x = new 类;
Factory.Create某接口(x);
ObjectPool.Get<接口>(x);
接口 y = 某SingletonHolder::GetInstance();

......
..
等等有限(因为OO下也就那点方式)一些情况归纳总结起来, 然后基于一些约定通过配置去统一管理. 比如可以通过基于字符串去约定:

智能指针<接口A> x = IoC::XXX.get(接口A约定的字串);

然后配置文件中:
<component 接口类型约定="接口A约定的字串" 如何装载="某某具体类的装载信息" />

这样太单薄, 考虑到Builder使用场景的那些需求:

Builder b = Builder::GetSingleton();
b.Set某决定X属性的参数(m, p, q);
b.Set某决定Y属性的参数(n);
b.Set生命周期策略(策略.某策略);

接口A* x;
b.Build(x); //比如:完成指定接口A的具体实现并实例化, 同时初始化n的一些属性, 其实即使不象IoC框架那么通用, 我们也常常可
能用配置文件来决定Build方法或工厂的Create的结果.

x.DoSomething();

把这些转化为:
<component 接口类型约定="接口A约定的字串" 如何装载="某某具体类的装载信息" 策略="Singleton/每线程一个/对象池/
总是返回新对象的引用" >
<初始属性 name="X" 类型="接口B约定的字串" >
<初始属性 name="Y" 类型="基本类型int的约定字串" 值="12" />
</component>

然后具体的过程通过调用IoC::XXX.get由所谓的框架来做. 当然, 对于C++, 类似于智能指针或者资源管理的东西最好也加进来. 可以看
到, 不是IoC有什么先进性, 所以不用关注具体接口, 实现所谓的无侵入也并非什么高明技巧搞定的, 而是这样的东西本身就无需侵入, 只要配置文
件提供足够的信息去装载就可以了.至于生命周期策略和资源管理, 也不是IoC提出的, 而是在咱们很久以前就知道的东西并且有很多解决方案可以借
鉴.

当然, 根据使用的需求不同, 有时候这玩意看起来不过像个对象配置管理器, 有时候呢, 比如当程序的关键部分放在了其它包里, 并通过配置改变对象
来改变程序的主要行为, 这么伟大的事情, 就要用什么控制反转啦之类高深的词来形容一下了.

在实现上可能会有很多需要注意的细节, 但是总体说来没啥神秘可言, 可能不同的实现者会加入一些自己的理解和技巧, 不过这个需求一清晰, 恐怕大家
就清楚是什么东西了吧..., 同时也清楚是不是有这种需要, 并且具体实现思路, 估计也都有了 :)

嗯, LS有迷惑的各位实际上只是被唬住了,类似的需求和实现(关键是前者, 好的问题比答案重要嘛), 到.NET/Java社区转转就一清二楚
了. 说实话, Java/.NET里觉得这玩意神奇的, 也是那些对工厂/Builder等设计模式还觉得了不起/装载个DLL然后实例化DLL里一
个已知类都觉得是大学问的程序员.

申明一句, 我可从来没说过IoC没有用. 只是说, IoC仅仅只是一个具体需求的具体解决手法, 既不高级也不神秘, 甚至和各种各样的其它需求比
起来, 都没有什么特别, 实现上也不能说难度巨大. 对于这样一个具体手法, 去讨论什么正交, 垂直, 其实毫无意义, 跟刘兄前一阵子说的接口存
在的必要之类的题目根本不是一个层次上的.

只能说一切都是炒作惹得祸.

莫华枫

unread,
Jan 2, 2008, 8:39:55 PM1/2/08
to pon...@googlegroups.com
粒度问题倒是真的。我的体会是:粒度小,灵活性大,组件容易标准化。但是对业务变化很敏感;粒度大,业务敏感性小,但灵活性也随之减小,基本上无法标准化。如何拿捏,的确比较复杂。粒度越小,越容易体现配置数据的优势,但随之而来的是配置数据复杂化,和业务变化的敏感性。反之,粒度越大,越不易体现配置数据的优势。因为业务组件内部的模块组装依然只能依靠传统手段。这或许是一对矛盾吧。
我当时选择了偏小的粒度,往好处说为了充分发挥配置数据的好处。但在这个问题的背后实际上隐藏着一个技术性的无奈。这个无奈实际上是oop在模块组装方面的缺陷导致的。在oop中,模块化组装的基本手段无外乎策略模式。这种模式通过抽象接口实现模块组装。但是组装过程并不讨人喜欢。我运用配置数据,也无非是为了把这些过程自动化。
不过在现在的技术条件下,此中的多数配置组装并不是必须的。模块组装有两种情况,一种是静态组装,也就是编译前(编码时)便可以确定模块组件,以及如何组装。另一种则是动态的,即运行时的模块组装。
现在,前者已经可以通过模板技术集约化,而免除oop模块组装的诸多workaround。通常采用的手段主要包括traits和policy。policy的威力,在loki库里已经得到体现,traits则在stl等库里有所运用。更广阔的应用,有待我们去发掘。
运行时组装,对于一些相对固定简单的构造,可以在traits和policy的基础上,运用TMP的代码构造能力,创建固态的模块组装代码族。对于一些灵活的构造,则没有其他办法,着实是配置组装的一亩三分地。
也就是说gp的出现,消除了oop在模块组装方面本质性的缺陷,大幅降低了对配置组装的需求。

关于dsl,问题就复杂了。我想到它的缘由到很简单。因为配置组装和业务逻辑是紧密联系的,配置数据中蕴含着业务逻辑。这样的话,将配置数据孤立于代码反而会造成不必要的麻烦。但是,反过来,配置数据存在它的价值。这种优点与问题并存的情况存在于软件开发的各种技术之中。此时,如果仅仅用一句"它不是银弹"打法这些问题,未免有些草率。在我看来,配置组装是"银弹",但不是一整颗。它是一颗银弹的一部分。但就这一部分,并没有什么优势。就像单独一味草药,总会存在一些副作用。我们应当做的是如同中医问诊那样,均衡调和地运用技术,方能趋利避害。
在我的体会中,配置数据独立于代码,会造成麻烦。所以,自然而然地想到配置数据应当嵌入所用的编程语言中。同时,配置数据隐含着业务逻辑,那么如果能够将配置数据同简单的业务控制语言混合,便可以很好地消除模块间的匹配问题,同时有利于促进模块的标准化,使得组件粒度细化,减少整体的开发工作量。
基于这些想法,我首当其冲地想到dsl。这当中有这么几个层次。最简单的情况下,可以运用现有的技术实现配置数据嵌入代码:
poco_application_context_begin()
  ...
   .bean_begin(_class("TickGenImpl"), _lazy_init("false"))
       .method_arg(_type("short"), _value("10"))
       .method_arg(_type("short"), _value("1"))
       ...
   .bean_end()
   ...
.poco_application_context_end()
这种形式运用现有的OOP技术便可以实现,只需通过控制函数的返回值即可。
更进一步,可以通过tmp,搞成这个样子:
_begin<poco_application_contextb>()
  ...
   ._begin<bean>(TickGenImpl, _lazy_init<false>)
       .method_arg<short>(10)
       .method_arg<short>(1)
       ...
   ._end<bean>()
   ...
._end<poco_application_context_end>()
当然,我未曾实验,尚不知道这种形式能否实现,但根据boost里的一些库的情况,可能性还是挺大的。这种形式带来另一个好处,就是静态的类型检验和绑定,这有助于减少运行时错误,提高性能。但是,如同任何运用tmp的代码,错误信息往往是冗长而晦涩。这就有赖于未来concept在这方面对其加以改进。
上如两种方案只是形式的变化,仅仅是把xml配置数据放到程序里。真正消除配置数据带来的问题的,需要在这些配置数据中插入粘合代码。此时,现有的一些技术,包括tmp在内已经无能为力了。尽管tmp拥有在C++中构造嵌入式dsl的能力,但是这种能力极其有限,而且非常复杂,难以运用。
通过代码预处理器实现dsl(早期的嵌入式sql),可以获得这种能力,但是集成性不够。此时,最佳的途径莫过于在传统GPL中嵌入标准MP能力,以获得dsl的特性。这种形式意味着我们可以通过构造代码库实现并精确一种dsl的特性。比如:
poco-application-context
{
  ...
   new TickGenImpl lazy-init
   {
       init(10,  1)
       subscribe(gps-locator)
       start()
   }
   ...//此处可嵌入业务逻辑代码,用于弥合个组件间的差异
}
这种情形,实际上同脚本语言非常相似了。而脚本语言兼备了组装逻辑和业务逻辑的表达能力,而且大幅简化了两者使用难度。所以也更加流行。因为它均衡地解决了一组相关的问题
嵌入式dsl则更进一步,试图使的模块开发语言同模块组装语言更紧密地集成,使我们得以更加灵活地完成开发。现在嵌入dsl的一个趋势似乎是力图通过gpl中增加mp能力,在主语言中创造子语言,以获得某些特定用途的开发能力。或许这条路能够更加均衡地解决我们面临的问题。

Eli

unread,
Jan 2, 2008, 9:32:01 PM1/2/08
to TopLanguage
嘿嘿, 我和莫老兄看法完全一致, 不过就没莫兄这么专业啦. traits还可以说是一种"非常C++"的技巧, 但policy在loki上的体
现, 绝对不是传统OOP实现的策略模式所能类比的, 而IoC其实最根本上来讲也不过是一个策略模式的变体而已.

"运行时组装,对于一些相对固定简单的构造,可以在traits和policy的基础上,运用TMP的代码构造能力,创建固态的模块组装代码族。"

这句话说的太好了, 凭什么不能用代码进行组装和配置? 依我看, 即使对于用户来说, 写两句各种编程语言的代码也不比写XML(无论多么DS)来的
费劲. 现在C++是对于纯动态的场合没有办法, 以至于我都想是不是可以调用编译器来"动态"化. 当然配置文件也有配置文件的好处, 比如容易展开
为二维关系数据等等. 实际上, 配置到底以写代码的方式进行, 还是在配置文件, 并不是什么本质的差异, 都是由具体情况是否产生了对配置文件的这
种具体形式的需求而定的. 而现在广泛流行的配置组装附带生命周期等一系列小礼物的东东, 并不是因为真的所有需求都是配置组装的需求, 而是大多数静
态OO语言本身的缺陷使得在大多数情况下没有更好的做法可选择.

实际上正是因为TMP的能力, 才让C++对于我有足够的吸引力的, 静态OO的某些恶心的做法, 我在别处已经受够了, 难道还要回到C++用纯OO
的方式(在C++有其他供给的情况下)重新体验一遍不成? 至于什么粒度大, 粒度小这样的问题, 也绝对不是IoC比起其它OO实现方式有什么不同的
本质差异, 而是属于一个更大范畴的概念, 甚至可以说, 只能超出而不限于软件构件的范畴; 这样的话题, 只是一个采取了哪种选择的话题, 无论
GP/TMP/OO, 或者任何一种最普通的编码行为, 都存在对粒度的选择; 这可能能够说明, 某一种具体手法的选择在某一情况下比另一种具体手法
更有优势, 而不能用来让一个具体手法变成可以和语言本质上的进步(来变化构建软件的方式)同台竞技的选手; 这两者相比, 说什么垂直/正交, 谁也
不代替谁, 有点驴唇不对马嘴. 象莫兄提到的一些概念, 都是在根本上解决软件组装问题的思路, 至于生命周期创建拆除之类的具体问题或附赠品, 根
本不应在讨论之列.

象Concept之类的新概念, 我就更门外汉了, 等着莫兄和刘兄先吃螃蟹, 然后直接搬板凳听课啦.
> 这种情形,实际上同脚本语言非常相似了。而脚本语言兼备了组装逻辑和业务逻辑的表达能力,而且大幅简化了两者使用难度。所以也更加流行。因为它*
> 均衡地解决了一组相关的问题*。
> 嵌入式dsl则更进一步,试图使的模块开发语言同模块组装语言更紧密地集成,使我们得以更加灵活地完成开发。现在嵌入dsl的一个趋势似乎是力图通过gpl中增加mp能力,在主语言中创造子语言,以获得某些特定用途的开发能力。或许这条路能够更加均衡地解决我们面临的问题。
>
> On Dec 31, 2007 1:25 PM, Ke Jin < kjin...@gmail.com> wrote:
>
>
>
> > On Dec 30, 8:09 pm, "莫华枫" <longshank...@gmail.com> wrote:
> > > 呃...,我还是比较迷糊。
>
> > 换个说法或许好些:我当时遇到的问题是业务逻辑和配置数据相互交织在一起,对于预先明确的设计,非常好。然而一旦遇到变化,哪怕就是添加一个判别或者修改一个循环,都会导致模块的修改,甚至接口的变化。因为所有的业务逻辑都在模块里,配置数据被设定为与业务逻辑无关。当时,我的希望是,开发预定义的业务模块,通用化和标准化的组件。可以通过装配实现一个特定功能。但是实际上,我们不可能通过一系列标准化或通用化组件简单地拼装构造一个系统。对于一个软件,甚至一个软件的不同用户,都会有很多专用性的组件。而标准件实际上仅仅局限在界面控件和数据访问模块上。
>
> > -------------------
> > kjin101: 现代基于IoC的组件容器的思想与传统的组件(包括COM组件容器)的思想已经不一样了。IOC组件基本上是服务层的组件,粒度大,
> > 层次高。所以我前面说了,不该分割的和不该外部配置的就应该不用。而且实际场景各不相同,组件框架和外部配制也一样,并非框架里的战斗机(银弹)。
>
> > ------------------
>
> > 后来我发现配置数据实际上不可能同业务逻辑分离。因为配置数据控制着组件上特定接口间的连接。而组件上的接口表达了实际的业务逻辑,只有正确的链接才能获得正确的功能。这样,业务逻辑实际上隐式地存在于配置数据中。
>
> > 我本来想,如果通过配置数据构造的软件功能需求变化,只需调整配置数据即可。但是实际上做不到,除非需求是固定的。绝大多数的需求变化都会涉及模块的修改。这样也就失去了配置数据的优点。反而增加了维护的工作量。
>
> > 后来我想了个办法,标准组件还是标准组件,把标准组件无法弥合的部分放在另一个独立的模块中,相当于做了一个适配器。但是,遇到两个问题:一个是这样一来,模块的数量暴涨,出现了大量粘合业务逻辑模块的组件,而且这些模块很简单,但是很琐碎。另一个问题是,一些特定的情况下,适配模块很难构造,这时还是需要修改标准件。
>
> > 简单试用后,程序员开始向我抱怨,说我增加了他们的负担。他们修改了组件后,时常忘记修改配置数据,这些东西不在一个project里,跳来跳去很烦。不时地需要添加适配模块,业务逻辑变得很琐碎。而且,他们还要求我提供配置数据的调试功能。结果我们给搞烦了,索性放弃了这种做法。
>
> > 我总结这次尝试的时候想到:实际上我当时没有"踩上点"。在一个项目,特别是需求变化频繁的项目中,问题的大头不在功能模块的链接方面。这方面的代码量或许会占到20%,或30%,甚至更多。但是可能只占总工作量,或者难度的不到10%。项目越大,越复杂,变化越大,这个比例越小。我用配置数据实现软件构造的功能,只是减少这不到10%的工作量和难度。但却为其他90%的工作带来不小的麻烦。再说,我们做过不少项目后,积累了一些加载和链接模块的代码框架,可以直接使用,这方面的问题也就大大弱化了。这也就难怪那些程序员不买我这点"新技术"的帐了。:)
>
> > ---------------
> > kjin101: 这是指代码行的比例,而且你应用中的管弦逻辑估计都是HOMEGROWN的,对开发人员并不陌生。在很多场景中,管弦逻辑要用到大量
> > 第三方系统逻辑组件,对于纯业务逻辑开发人员来说,哪怕其代码行只占5%,也是相当的一道开发和维护门槛。
> > ---------------
>
> ...
>
> read more >>

pi1ot

unread,
Jan 2, 2008, 10:10:47 PM1/2/08
to TopLanguage
我觉得在邮件列表或者论坛上讨论技术开门见山最好,简洁明了才是技术人的长处,最好别跟当年毕业论文似的开篇前言还有铺垫,实在是有凑字的嫌疑。
当然也不排除我的能力或者水平有问题,反正楼主的这个poco ioc我是看的云山雾罩外带晕晕乎乎的。

pongba

unread,
Jan 3, 2008, 12:25:52 AM1/3/08
to pon...@googlegroups.com


On Jan 3, 2008 10:32 AM, Eli <Eli...@gmail.com> wrote:
象Concept之类的新概念, 我就更门外汉了, 等着莫兄和刘兄先吃螃蟹, 然后直接搬板凳听课啦.

其实concept很简单的(我的这篇Blog)。简单到Andrei Alexandrescu这家伙觉得concept不重要,因为它不是一个enabling技术。

此外,Eli兄前面那篇评论实在漂亮。我一向认为,能(愿)把简单的东西讲复杂的人俯拾皆是,而能(愿)把复杂的东西讲简单的人则凤毛麟角!:)

--
刘未鹏(pongba)|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba

Ke Jin

unread,
Jan 3, 2008, 5:21:46 AM1/3/08
to TopLanguage
On Jan 2, 1:55 pm, Eli <Eli...@gmail.com> wrote:
> 看了一下这个讨论, LZ纯属言论暴力,
--------------
comment: 你是不是吃枪药了?请注意你的口气,没关系的帽子少扣。
--------------

> 这么说下去, 只有IoC天上地下无所不能, 非上不可着一个结论.
-------------
comment: 请你指出我我哪句话这么说或者有这个意思?
-------------

> Java社区也好.NET社区也好,
> 关于IoC这些我看的多了, 确实毫无新意.
>
-------------
comment: 什么叫新意?我什么时候说过"有什么新意"?你去读我帖子的第一段,是说新意吗?
------------

> 如果所谓的控制反转类似的东西不是早就有了的话, 20年来各种商业软件和项目里的插件系统, 通过配置改变的系统, 都是怎么运行的?
----------------
comment: 首先,你说的是哪些插件系统。能把例子举出来吗?组件框架已经炒了NN年了,除了WIN上有些实用的以外,还能举出几个例子?我能给
你举出一堆,没一个能令人满意。另外,我什么时候说过控制翻转是以前没有过的新概念??你这种手法叫稻草人。
---------------

> 你可以说早先
> 介绍OOP概念的DP95之类的书里没提到这些, 人家就是提供一些的思路, 自然不会说的那么详细, 抛砖引玉嘛, 难道还非得写清楚如何实现一个
> XML或者注册表配置系统, 详细说明这些东西如何反过来决定和改变运行时的具体实现? 然后再顺手介绍一下这样的框架如何实现分布式, 如何通用
> 化? 具体的需求碰到具体的问题, 自然而然会用到各种方式去解决. 你说的96年谁谁提出, 说白了也不过是对已经被应用的手法做个总结和指导罢
> 了.
>
-----------
你去查一下专利文档,75年就有人用这个词。但这与我的讨论无关。因为我是在讨论组建框架设计的架构,而不是字面上解释这个词。另外,我也不是历史学
家,我的帖子也不是讨论这种类似牛顿到底有没有看到苹果掉下来的具体细节的历史,我只是陈述网上认可的说法铺垫一下。
----------

> 你说COM之类和IoC不同, 当然不同, 首先是因为IoC作为一个具体解决手法, 只是COM之类的东西中的一小部分,人家当时面临的问题还有很
> 多, 类似于IoC概念的这一部分, 和那会儿大面积的空白相比又不是唯一的问题, 自然最终的实现物看起来和现在的IoC框架在形式上有这样那样的区
> 别; 其次,你文章中还提到, 比如COM要求实现公共接口等等, 这确实都是缺点, 但却不是本质性的, 只是实现上的问题, 古老年代, 可以在开
> 发者之间分享的经验不够多嘛. 要说不同, 所有的东西都能找出不同不是? 总不能因为养鸡的方式调整了, 鸡就变成新物种了吧?
>
----------
comment: 我说IOC这与COM无关是因为。IOC与COM要解决的完全是不同的问题。COM是要解决二进制ABI的问题,而这根本不是IOC
的目的。我从来没说COM需要公开接口是COM的缺点,因为COM的目的就是ABI,没有公开接口(广意的。。。包裹函数签名),根本无从讨论
ABI。
----------

> Java/.NET程序员一大半都是新程序员, 等到程序写多了, 碰到类似的问题(其实比过去可能遇到的困难简单多了), 自然把这个新瓶旧酒的东
> 西当个宝贝. 现在把这些以通用框架的形式引入C++, 我觉得必要性不大, 毕竟现在选择C++的领域中, 产生非得引入一个通用IoC框架才能满足
> 的需求的地方不多.
>
----------------
你觉着必要性不大并没有错,但至少在你上帖之前确认一下自己的说法和想法是否站的住脚,确认一下你要批驳我的东西是我说的还是你自己想的。
----------------

> 10年前我不熟悉面向对象的各种概念的时候, 你给我说这些乱七八糟的玩意(还有前年热炒的AOP), 我还可能听得一愣一愣的. 现在是什么情况
> 呢? 一个合格的OOP学习者, 无需别人灌输, 有点工作经验, 用屁股都知道该怎么做: 不就是单独写点代码, 负责具体实现的对象的装载吗? 考
> 虑到变化, 写个配置文件呗, 没有元数据, 做个额外的描述呗, 需求复杂点的, 来个生命周期维护呗. 只要能正确划分问题, 其中一些类似框架实
> 现, 自然而然就会涵盖各类IoC框架的部分或全部特征.
>
--------------
这种问题我也不跟你多说。你要骂也别骂我介绍的IOC。实际上我的目的是介绍CBD和DSM。IOC不过是一种我认为实现CBD最实用的方式。而CBD
和DSM(和DSL)也是炒了NN年的话题,而且现在又被热炒起来了。。。。你要么可以直接写点东西说CBD和DSM/DSL用屁股都知道该怎么做,要
么谈一下为什么用IOC和XSLT做CBD和DSM/DSL用屁股都知道不该这么做。否则其他的都是用屁股的废话。
--------------

> 关键是, IoC还是给程序员用的; 而现在从大项目到小项目, 哪个组里没有一两个能顺手写个自有IoC框架的人? 人家何苦非要引入第三方的不确定
> 性呢? IoC的要点在于想法, 而不在于实现的难度, 这使得IoC作为概念在传播时起到改善设计的作用, 而具体到某一个IoC框架, 其实价值不
> 大. 现在居然还有人靠忽悠或出卖这种玩意想直接或间接挣钱, 只能说太天真了....
>
-------------
comment: 赫赫,看来你是除了前面一句"用屁股都能作"的空话也没有什么技术上依据可以说了,开始以含沙射影来代替技术讨论了。
-------------

> 说实话, 即便在Java/.NET领域, 我一般也不会使用任何一个无论多么著名多么久经考验的通用IoC框架, 而是最多借鉴一下其实现; 因为没
> 啥深度可言, 如果在开发一半产生了类似的需求, 自然会在局部做类似的事, 然后借助IDE或已有工具重构一下; 如果在不同局部的实现产生了重复的
> 特征, 就会顺手提炼一下, 在项目需求的范围内, 越来越通用, 就越来越类似于一个IoC框架. 其实这样花费的时间, 比学习/使用/调整第三方
> 框架, 并不会多出多少. 要说C++上IoC框架的唯一优势, 可能就是实现起来比Java/.NET工作量更大, 这样如果在多处产生类似的需求以
> 至于工作量太大, 在自己实现和引入第三方的天平上, 偶尔(实际上这种情况恐怕在如今C++适用的范围里不会很多)会倾向于后者, 这还有一个前提是
> 后者有足够的声誉可以信任, 让使用者放心.
>
> 说到GP/FP/MP是不是替代, 这个话题太大. 只是说, OOP所产生的问题, 现在靠IoC/AOP这些具体手段(别升华到万能药那么可笑,
> 代码大全里有句话叫做兜售狗皮膏药的软件先知)去解决的, 很多在其它编程方式下根本不存在, 这么理解就好的多.
>
-------------------
comment: 再问一句,我哪里曾经说过IOC是万能药(或类似的意思)了?
-------------------

Ke
> ...
>
> read more >>

Ke Jin

unread,
Jan 3, 2008, 5:47:51 AM1/3/08
to TopLanguage
On Jan 2, 3:46 pm, Eli <Eli...@gmail.com> wrote:
> 另外多说一句不该说的, 所有对于IoC的介绍, 无论是技术宣传者, 还是实现者, 无论哪一领域, 除了对OOP初学者的使用说明, 更多的言论都
> 像LZ这样, 云山雾罩, 一大堆有一定经验的开发者也听得很"迷惑". 其实这正是因为IoC说穿了没啥内容, 不得不找很多多余的话来装门面的缘
> 故.
>
----------
赫赫,我还不至于吃饱了撑的诚心要把简单的东西写复杂了。恰恰相反,我一直认为IOC及相应的(基于模型变换的)DSM/DSL技术的优势就是简单(相
对与传统的CBD和MDA/DSM等技术)直来直去甚至看似平淡无奇,而且在我的帖子以及其他帖子中反复强调这些观点。

我当然要检查我的陈述方式,你也还是检查一下自己有什么思维毛病。
----------
------------------
赫赫,你认为我需要要卖弄这种“学问”?
------------------

> 申明一句, 我可从来没说过IoC没有用. 只是说, IoC仅仅只是一个具体需求的具体解决手法, 既不高级也不神秘, 甚至和各种各样的其它需求比
> 起来, 都没有什么特别, 实现上也不能说难度巨大. 对于这样一个具体手法, 去讨论什么正交, 垂直, 其实毫无意义, 跟刘兄前一阵子说的接口存
> 在的必要之类的题目根本不是一个层次上的.
>
> 只能说一切都是炒作惹得祸.
---------------
请问,我什么地方曾经说过IOC “高级”或“神秘”了?请读我帖子的第一段,跟你说的正好相反。一切的讨论目的,就是说这个看上去平淡无奇的IOC和
模型变换反而是CBD和DSM最好手段。
------------

Ke

Ke Jin

unread,
Jan 3, 2008, 6:14:54 AM1/3/08
to TopLanguage
莫老大,我说部署配置框架并非银弹并非是打发你,而是有两个原因:

首先,它们确实并非银弹。

其次,非常明显,你我日常接触的领域不同。而在你的领域中此类框架看来确实弊大于利。如果没有亲身实践经验,我很难让你认同此类框架在某些别的领域内的
意义(实际上当初我也一样)。你若真有心正面看我的帖子而并非认为是狗皮膏药,我的建议是你可看看自己熟悉的领域以外的技术和方法。多谢

Ke
> 这种情形,实际上同脚本语言非常相似了。而脚本语言兼备了组装逻辑和业务逻辑的表达能力,而且大幅简化了两者使用难度。所以也更加流行。因为它*
> 均衡地解决了一组相关的问题*。
> 嵌入式dsl则更进一步,试图使的模块开发语言同模块组装语言更紧密地集成,使我们得以更加灵活地完成开发。现在嵌入dsl的一个趋势似乎是力图通过gpl中增加mp能力,在主语言中创造子语言,以获得某些特定用途的开发能力。或许这条路能够更加均衡地解决我们面临的问题。
>
> On Dec 31, 2007 1:25 PM, Ke Jin < kjin...@gmail.com> wrote:
>
>
>
> > On Dec 30, 8:09 pm, "莫华枫" <longshank...@gmail.com> wrote:
> > > 呃...,我还是比较迷糊。
>
> > 换个说法或许好些:我当时遇到的问题是业务逻辑和配置数据相互交织在一起,对于预先明确的设计,非常好。然而一旦遇到变化,哪怕就是添加一个判别或者修改一个循环,都会导致模块的修改,甚至接口的变化。因为所有的业务逻辑都在模块里,配置数据被设定为与业务逻辑无关。当时,我的希望是,开发预定义的业务模块,通用化和标准化的组件。可以通过装配实现一个特定功能。但是实际上,我们不可能通过一系列标准化或通用化组件简单地拼装构造一个系统。对于一个软件,甚至一个软件的不同用户,都会有很多专用性的组件。而标准件实际上仅仅局限在界面控件和数据访问模块上。
>
> > -------------------
> > kjin101: 现代基于IoC的组件容器的思想与传统的组件(包括COM组件容器)的思想已经不一样了。IOC组件基本上是服务层的组件,粒度大,
> > 层次高。所以我前面说了,不该分割的和不该外部配置的就应该不用。而且实际场景各不相同,组件框架和外部配制也一样,并非框架里的战斗机(银弹)。
>
> > ------------------
>
> > 后来我发现配置数据实际上不可能同业务逻辑分离。因为配置数据控制着组件上特定接口间的连接。而组件上的接口表达了实际的业务逻辑,只有正确的链接才能获得正确的功能。这样,业务逻辑实际上隐式地存在于配置数据中。
>
> > 我本来想,如果通过配置数据构造的软件功能需求变化,只需调整配置数据即可。但是实际上做不到,除非需求是固定的。绝大多数的需求变化都会涉及模块的修改。这样也就失去了配置数据的优点。反而增加了维护的工作量。
>
> > 后来我想了个办法,标准组件还是标准组件,把标准组件无法弥合的部分放在另一个独立的模块中,相当于做了一个适配器。但是,遇到两个问题:一个是这样一来,模块的数量暴涨,出现了大量粘合业务逻辑模块的组件,而且这些模块很简单,但是很琐碎。另一个问题是,一些特定的情况下,适配模块很难构造,这时还是需要修改标准件。
>
> > 简单试用后,程序员开始向我抱怨,说我增加了他们的负担。他们修改了组件后,时常忘记修改配置数据,这些东西不在一个project里,跳来跳去很烦。不时地需要添加适配模块,业务逻辑变得很琐碎。而且,他们还要求我提供配置数据的调试功能。结果我们给搞烦了,索性放弃了这种做法。
>
> > 我总结这次尝试的时候想到:实际上我当时没有"踩上点"。在一个项目,特别是需求变化频繁的项目中,问题的大头不在功能模块的链接方面。这方面的代码量或许会占到20%,或30%,甚至更多。但是可能只占总工作量,或者难度的不到10%。项目越大,越复杂,变化越大,这个比例越小。我用配置数据实现软件构造的功能,只是减少这不到10%的工作量和难度。但却为其他90%的工作带来不小的麻烦。再说,我们做过不少项目后,积累了一些加载和链接模块的代码框架,可以直接使用,这方面的问题也就大大弱化了。这也就难怪那些程序员不买我这点"新技术"的帐了。:)
>
> > ---------------
> > kjin101: 这是指代码行的比例,而且你应用中的管弦逻辑估计都是HOMEGROWN的,对开发人员并不陌生。在很多场景中,管弦逻辑要用到大量
> > 第三方系统逻辑组件,对于纯业务逻辑开发人员来说,哪怕其代码行只占5%,也是相当的一道开发和维护门槛。
> > ---------------
>
> ...
>
> read more >>

yq chen

unread,
Jan 3, 2008, 8:11:15 AM1/3/08
to pon...@googlegroups.com
说得都很精彩。
 
在08-1-3,Ke Jin <kji...@gmail.com> 写道:
Message has been deleted

Eli

unread,
Jan 3, 2008, 12:34:04 PM1/3/08
to TopLanguage
其实我是借题撒火, 也不是针对你的; 过去几年里, 每次去面向对象社区想学点东西, 漫天都是IoC/AOP, 关于这些具体手法是不是存在炒
作, 想必你比我清楚. 不过我不知道你的文章写那么长, 那么多人觉得"迷惑", 到底是因为你自己的解释过犹不及, 还是因为你故意放大它的作用和
价值, 我不该瞎做论断, 我道歉就是了; 算啦, 我无意争论下去, 就当我是缩头乌龟好了. 我确实是当时脑筋糊涂, 用屁股代替了大脑, 对不恰
当的对象展开了不适合的攻击. 不过说实在的, 让我去Java/.NET社区说, 我也不敢, 非被口水淹死不可.

但是有两点我是很坚定的:

"平淡无奇的IOC和模型变换反而是CBD和DSM最好手段", 这个论断, 你下的太早, 一切都不成熟, 你只能说, 是当前阶段实现CBD或
DSM比较合适的手段. 其实如果你要证明他是"最合适的", 不应该从介绍其特点出发, 而是应该从实际案例出发, 大家就好集中讨论, 你可以证明
为什么这个例子用IoC是最合适的, 大家可以去说, 还有什么手段更合适. 至少在我看来, 很多时候, 你所谓的CBD或者DSM适合的领域, 从
其背后的需求出发, 并不是非要拘泥一定的形式不可的. 莫兄说的"固态的模块组装代码族", 往往对开发人员来说更为自然和高效(不是运行效率而是配
置本身). 关键是, 描述和配置的具体操作者是谁, 这些操作都有哪些特征. 我觉得很多游戏引擎就是很好的例子, 既有代码->编译式或二进制模块
式的描述(或配置), 又有配置文件配置(或描述), 还是看我们要干什么.

另外一点, 你多次强调GP之类的东西和IoC是垂直的. 这有点固执己见. 毕竟, 比如你提到的CBD, 过去我们往往认为必须基于OO, 但是
GP和MP出现以后, 很多认识不见得是对的. 如果一个非OO的编程方式, 去实现CBD, 那么莫兄的方式, 至少在我看来, 要比IoC有吸引力
的多. 就像莫说的, 基于模板的策略和基于TMP的代码生成, Loki和Boost都已经做出了一定的示范, 而现在相当一部分人认为这条路可以走
得更远. 我也正是因为这些, 才转过头重拾C++的. 实际上, 由于语言的原生支持(而且这种支持在不断发展), 很多原来在OO时非IoC或某些
其它技巧不可的领, 就不再有绕弯的必要了. 我比较有意见的是, 你拒绝接受这一点.

关于那些具体的:
比如COM, 确实, COM的目标于IoC不同, 但你不可否认, COM用来实现IoC式的配置, 虽然繁文缛节一大堆, 却并非不可以, 只是配
置的描述形式与现在流行的IoC不同. 比如和现寸的插件系统比较, DirectShow下挂的那些Filter, 虽然和IoC还是有一些区别,但
是也是类似的东西. 关于控反转这个词, 我并没有说"词"怎么样, 而是说可以相比较的实现方式, 即便在OO编程上, 也早就有很多了. 关于含沙
射影什么的, 其实我确实含沙射影了, 不过其目标是我想象中的一群人, 确实不是LZ你, 对于给你造成的不快, 我只能再次说对不起, 我现在是一
看见IoC还有AOP的宣传就腻, 幸亏你没有同时提到后者(不是我要把它们相关联的, 只是Java社区里老是某某框架实现了IoC和AOP), 否
则我说不定真变疯狗了. 这是我不成熟的缘故, Sorry了.

给自己一个台阶下: 至少你解释过以后, 我觉得你要表达的东西, 比一开始你那长篇大论, 简单清晰多了, 只当我是抛臭石头引玉的吧.

Ke Jin

unread,
Jan 3, 2008, 11:19:47 PM1/3/08
to TopLanguage
On Jan 3, 9:34 am, Eli <Eli...@gmail.com> wrote:
> 其实我是借题撒火, 也不是针对你的; 过去几年里, 每次去面向对象社区想学点东西, 漫天都是IoC/AOP, 关于这些具体手法是不是存在炒
> 作, 想必你比我清楚. 不过我不知道你的文章写那么长, 那么多人觉得"迷惑", 到底是因为你自己的解释过犹不及, 还是因为你故意放大它的作用和
> 价值, 我不该瞎做论断, 我道歉就是了; 算啦, 我无意争论下去, 就当我是缩头乌龟好了. 我确实是当时脑筋糊涂, 用屁股代替了大脑, 对不恰
> 当的对象展开了不适合的攻击. 不过说实在的, 让我去Java/.NET社区说, 我也不敢, 非被口水淹死不可.
----------
comment: ....
----------
>
> 但是有两点我是很坚定的:
>
> "平淡无奇的IOC和模型变换反而是CBD和DSM最好手段", 这个论断, 你下的太早, 一切都不成熟, 你只能说, 是当前阶段实现CBD或
> DSM比较合适的手段.
------------
comment: 我说话当然是说当前状况(难道还非要加上时间定语状什么的修饰?太累了吧),任何技术都会被时间所淘汰。另外,什么叫结论下的太早?
难道以后会出现一个永远不会被时间淘汰的技术?
------------

> 其实如果你要证明他是"最合适的", 不应该从介绍其特点出发, 而是应该从实际案例出发, 大家就好集中讨论, 你可以证明
> 为什么这个例子用IoC是最合适的, 大家可以去说, 还有什么手段更合适.
------------
comment: 这太强人所难。我这帖子已经被抱怨铺垫太多,在去讨论CBD那文章启不更长?另外,我并不是没证明例子,上来就写了IBM的案例,最
后一节的连接里也有很多案例。
------------

> 至少在我看来, 很多时候, 你所谓的CBD或者DSM适合的领域, 从
> 其背后的需求出发, 并不是非要拘泥一定的形式不可的. 莫兄说的"固态的模块组装代码族", 往往对开发人员来说更为自然和高效(不是运行效率而是配
> 置本身). 关键是, 描述和配置的具体操作者是谁, 这些操作都有哪些特征. 我觉得很多游戏引擎就是很好的例子, 既有代码->编译式或二进制模块
> 式的描述(或配置), 又有配置文件配置(或描述), 还是看我们要干什么.
>
-------------
comment: 我很糊涂。我要求CBD和DSM拘泥于什么形式了?
-------------

> 另外一点, 你多次强调GP之类的东西和IoC是垂直的. 这有点固执己见.
--------------
comment: 固执己见的意思是听不进反对意见。可这里并没有反对意见呀?你是说你反对我的说法,你认为IOC与GP不是垂直,而是针锋相对?这个
我也没反对。我谈论的是现在的解决方案,GP能在实际中完全取代IOC是未来的美好远景(见我和莫老大的讨论)。
--------------

> 毕竟, 比如你提到的CBD, 过去我们往往认为必须基于OO, 但是
> GP和MP出现以后, 很多认识不见得是对的. 如果一个非OO的编程方式, 去实现CBD, 那么莫兄的方式, 至少在我看来, 要比IoC有吸引力
> 的多. 就像莫说的, 基于模板的策略和基于TMP的代码生成, Loki和Boost都已经做出了一定的示范, 而现在相当一部分人认为这条路可以走
> 得更远. 我也正是因为这些, 才转过头重拾C++的. 实际上, 由于语言的原生支持(而且这种支持在不断发展), 很多原来在OO时非IoC或某些
> 其它技巧不可的领, 就不再有绕弯的必要了. 我比较有意见的是, 你拒绝接受这一点.
-------------
comment: 我已经重复过好N编。作为CBD框架结构来说,IOC根本不要求组件一定按OOP模式开发。实际上IOC中POCO不但可以没有
abstract基类,可以是任意模板类,甚至可以是K&R结构或C函数指针。我看不出IOC与OOP的必然联系或与GP的必然冲突。你大概是从字面上
把CBD中讨论的COMPONENT和CONTAINER与STL and BOOST中的相应词汇混淆了甚至画上等号了。实际上IOC/CBD框架与
OOP, GP, boost所关注的至少现在根本不是一个层次上的问题。
-------------

> 关于那些具体的:
> 比如COM, 确实, COM的目标于IoC不同, 但你不可否认, COM用来实现IoC式的配置, 虽然繁文缛节一大堆, 却并非不可以, 只是配
> 置的描述形式与现在流行的IoC不同. 比如和现寸的插件系统比较, DirectShow下挂的那些Filter, 虽然和IoC还是有一些区别,但
> 是也是类似的东西. 关于控反转这个词, 我并没有说"词"怎么样, 而是说可以相比较的实现方式, 即便在OO编程上, 也早就有很多了. 关于含沙
> 射影什么的, 其实我确实含沙射影了, 不过其目标是我想象中的一群人, 确实不是LZ你, 对于给你造成的不快, 我只能再次说对不起, 我现在是一
> 看见IoC还有AOP的宣传就腻, 幸亏你没有同时提到后者(不是我要把它们相关联的, 只是Java社区里老是某某框架实现了IoC和AOP), 否
> 则我说不定真变疯狗了. 这是我不成熟的缘故, Sorry了.
>
--------------
comment: IOC和DSM属于草根阶级的东西。提出来是为了取代重量级框架。比如IBM的SCA,UML,OMG的CCM,MDA等等。这些重
量级的东西远远应该值得先被反思,而不是先拿IOC/DSM当软柿子捏。CSDN上那么多对SCA,UML糊吹乱捧的文章,也没见谁烦了,倒是见众人
捧。

IOC这几年嚷嚷的不少,但真正理解的人并不多。首先你自己显然并没有理解到底什么是IOC。可以从你上帖中举的例子中看出你理解的IOC是模块之间的
调用关系(这从你说原来热插拔框架怎么工作,以及非拿COM来比的可以看出)。很多介绍IOC的文章都有同样错误的理解。比如大牛ARNON这篇
http://www.ddj.com/blog/architectblog/archives/2006/08/inversion_of_co.html;jsessionid=CGN0Q210LUE2EQSNDLOSKH0CJUNN2JVN?cid=GS_blog_arnon
甚至还有WIKI的词条。所以我的帖子也不得不铺垫罗嗦地讲清楚什么是IOC。你若真对IOC熟悉,应该不难看出我帖子前面说的都是老生常谈。只有以前
没有接触或没有真正理解过IOC这个概念的人才可能对这些铺垫感到陌生。

还有一点就是,当年我看到IOC这个概念时的反应就是“这也太平淡无奇了吧”,想象不到这个概念能演义出什么东西来。所以,我的建议是你不要被别人合理
的或不合理的炒做所左右。可以不关心不感兴趣,但不要肯定或否定自己并不理解的东西。举个例子,数学分析都是一上来学一堆技术(如何算导数求极值,算积
分求面积)。而抽象代数(比如抽象群论)上来就是一堆平淡无奇的概念,N堂课后可能还没见什么技术,到N+1堂课时很多人就烦了。但这些平淡无奇的概念
中能演义出来的东西可并不平淡。当年看到数据库的关系模型时的反映也类似,这种东西人类几百年来不都是这么干的嘛,实在领悟不了为什么关系模型遭热
捧。。。。。当时也差点烦....

至于IOC,我的看法是它只是一个铺垫的概念。真正重要的是模型化和DSM。IOC使得我们能够将应用中很多东西(主要是管弦逻辑)抽取出来,用一种完
全不同的方式表达(声明式的数据模型表达)。而这使得我们可以以各种不同的视角(可灵活变换的)去建立,描述,理解一个应用程序,而不仅仅是逻辑步骤表
达或底层数据或元数据表达。就跟就象抽象群将很多在分析中被埋没了的东西抽取出来,以完全不同的视角考察。。。
--------------

> 给自己一个台阶下: 至少你解释过以后, 我觉得你要表达的东西, 比一开始你那长篇大论, 简单清晰多了, 只当我是抛臭石头引玉的吧.
--------------
多谢和你的讨论
--------------

Eli

unread,
Jan 4, 2008, 7:38:46 AM1/4/08
to TopLanguage

> comment: 这太强人所难。我这帖子已经被抱怨铺垫太多,在去讨论CBD那文章启不更长?另外,我并不是没证明例子,上来就写了IBM的案例,最
> 后一节的连接里也有很多案例。
> ------------

这不是强人所难, 其实对于写文章讨论来说, 你那些铺垫反而是没什么用的; 关于你说的IBM的例子和其它例子, 不觉得有点模糊吗? 象IBM那
个, 你并没有掰开揉碎的说明为什么用你的方式改善会更好啊, 泛泛的一说, 如何让别人信服? 现在是你在宣传某物不是? 你看这个帖子里多少人的迷
惑, 是因为根本没法更具体的去理解你到底在说什么?

你和莫兄的讨论也提到你的工作经历和体会让你有这些认识, 我想这些会更加一矢中的, 为什么不详细的给大家上上课呢?

> -------------
> comment: 我很糊涂。我要求CBD和DSM拘泥于什么形式了?
> -------------


比如说, 动态的而不是静态的组装, 随之而来的, 使用配置文件描述, 而不是直接用C++代码 + 编译器. 比如莫兄说的那些方式.

> --------------
> comment: 固执己见的意思是听不进反对意见。可这里并没有反对意见呀?你是说你反对我的说法,你认为IOC与GP不是垂直,而是针锋相对?这个
> 我也没反对。我谈论的是现在的解决方案,GP能在实际中完全取代IOC是未来的美好远景(见我和莫老大的讨论)。
> --------------

莫兄说的我能理解, 但是你说的我没理解, 我只觉得你在强调, GP不能取代IoC, 并且多次说他们是垂直的.


> -------------
> comment: 我已经重复过好N编。作为CBD框架结构来说,IOC根本不要求组件一定按OOP模式开发。实际上IOC中POCO不但可以没有
> abstract基类,可以是任意模板类,甚至可以是K&R结构或C函数指针。我看不出IOC与OOP的必然联系或与GP的必然冲突。你大概是从字面上
> 把CBD中讨论的COMPONENT和CONTAINER与STL and BOOST中的相应词汇混淆了甚至画上等号了。实际上IOC/CBD框架与
> OOP, GP, boost所关注的至少现在根本不是一个层次上的问题。
> -------------

这个就是我不理解的地方, 我觉得作为介绍一个方法的人员, 你不能光赖我或者别人理解能力低吧? 我知道"IoC的方式"可以很灵活, 但你这种说法
不啻于再说, 面向对象的方式, 照样可以用C来实现. 问题是你说的到底是什么, 在解决哪些层面上的问题. 你写的字大家都认识, 但是你说的内
容, 至少从我的角度看, 除了概念的堆砌, 很难理清楚思路. 还是我说的, 表达的人不能去要求听众的理解能力的配合.

很可能你说的方式, 其实大家都知道也能理解, 只是你管他叫作IoC, 但是缺少了OO这一作用域, 大家就不管这种做法叫做IoC了, 甚至没有那
么多概念, 而只是一种需求导致的手法(这是我一直在强调的); 只是你提出把它们更好的归纳总结为一个框架的形式去使用; 这样大家本来是有相同的认
识的, 现在反而在各说各话, 鸡同鸭讲.

> --------------
> comment: IOC和DSM属于草根阶级的东西。提出来是为了取代重量级框架。比如IBM的SCA,UML,OMG的CCM,MDA等等。这些重
> 量级的东西远远应该值得先被反思,而不是先拿IOC/DSM当软柿子捏。CSDN上那么多对SCA,UML糊吹乱捧的文章,也没见谁烦了,倒是见众人
> 捧。
>
> IOC这几年嚷嚷的不少,但真正理解的人并不多。首先你自己显然并没有理解到底什么是IOC。可以从你上帖中举的例子中看出你理解的IOC是模块之间的
> 调用关系(这从你说原来热插拔框架怎么工作,以及非拿COM来比的可以看出)。很多介绍IOC的文章都有同样错误的理解。比如大牛ARNON这篇http://www.ddj.com/blog/architectblog/archives/2006/08/inversion_of_c...
> 甚至还有WIKI的词条。所以我的帖子也不得不铺垫罗嗦地讲清楚什么是IOC。你若真对IOC熟悉,应该不难看出我帖子前面说的都是老生常谈。只有以前
> 没有接触或没有真正理解过IOC这个概念的人才可能对这些铺垫感到陌生。
>
> 还有一点就是,当年我看到IOC这个概念时的反应就是“这也太平淡无奇了吧”,想象不到这个概念能演义出什么东西来。所以,我的建议是你不要被别人合理
> 的或不合理的炒做所左右。可以不关心不感兴趣,但不要肯定或否定自己并不理解的东西。举个例子,数学分析都是一上来学一堆技术(如何算导数求极值,算积
> 分求面积)。而抽象代数(比如抽象群论)上来就是一堆平淡无奇的概念,N堂课后可能还没见什么技术,到N+1堂课时很多人就烦了。但这些平淡无奇的概念
> 中能演义出来的东西可并不平淡。当年看到数据库的关系模型时的反映也类似,这种东西人类几百年来不都是这么干的嘛,实在领悟不了为什么关系模型遭热
> 捧。。。。。当时也差点烦....


我从这里头领会到一个意思, 就是你说的IoC, 和我在铺天盖地的宣传中理解的IoC, 不是一码事. 但是我个人感觉, 你并没有说清楚怎么不是一
码事了. 但是我觉得, 凡是不合你理解的形式, 就是对IoC的误解, 是你一个问题. 我想如果你的IoC和大众定义的IoC不同, 你倒不妨起个
新名字, 更适合去说明问题. 名词作为一个表达符号, 为的是交流大家都知道的那个东西; 而不是先有名词, 再来给这个名词赋予不同的解释, 那样
就没法交流了.

至于你说我理解不了, 其它质疑的理解不了, 让我们少张嘴, 我觉得就不那么地道了; 你刚说过你没说IoC多么的高级, 问题是我们的智商又不是
30, 我觉得如果有不少人, 尤其是有一定工作经历和思考的人, 理解不了, 那么要么它就是高级(考虑到你说的IoC和一般的IoC不是完全相同
的), 要么就是有意被以一种高级和复杂的形式表达.

你要是认为你介绍的东西背后所隐含的内容, 可以在软件构件领域可以和数学领域中的抽象代数比肩, 我更建议你起个其它名字, 然后好好思考一下如何把
它们介绍给大家, 而不是大家看不懂, 或者被其他人和那种"被扭曲了含义的IoC"划等号以后, 去责怪别人理解不了.

反正在我看来, 所谓的IoC(至少大众眼里的IoC)就是加强版的策略模式(就像你说的, 很多大牛也是这么理解的); 而你介绍的东西, 区别也不
大, 最多是传统理解的IoC的一些升级和特化. 更多的, 你介绍的种种变化, 在我看来不是通过改变"模块之间的调用关系"就已经可以实现了吗?
那么区别在于哪里? 你至少得给出一个传统的变化"模块之间的调用关系"处理不了的例子(现在你的所有说法, 我觉得都不满足"处理不了"这个情况,
如果你觉得有, 可以详细说明一下), 然后告诉我们按你的方式, 如何处理吧.

> 至于IOC,我的看法是它只是一个铺垫的概念。真正重要的是模型化和DSM。IOC使得我们能够将应用中很多东西(主要是管弦逻辑)抽取出来,用一种完
> 全不同的方式表达(声明式的数据模型表达)。而这使得我们可以以各种不同的视角(可灵活变换的)去建立,描述,理解一个应用程序,而不仅仅是逻辑步骤表
> 达或底层数据或元数据表达。就跟就象抽象群将很多在分析中被埋没了的东西抽取出来,以完全不同的视角考察。。。

配合前面说的"拘泥于形式", 我就不明白, 在没有需求的时候, 为什么我非要"用一种完全不同的方式表达(声明式的数据模型表达", 象莫兄提到的
方式, 利用GP/TMP, 抽取到代码中一个地方集中起来, 然后用编译器做成静态的, 又有何不可? 至少免去了使用第三方IoC框架的代价, 也
免去了自己去解析描述的负担(不使用第三方框架的前提下), 还增加了静态检查, 不也很好么?

Ke Jin

unread,
Jan 4, 2008, 9:58:08 PM1/4/08
to TopLanguage
On Jan 4, 4:38 am, Eli <Eli...@gmail.com> wrote:
> > comment: 这太强人所难。我这帖子已经被抱怨铺垫太多,在去讨论CBD那文章启不更长?另外,我并不是没证明例子,上来就写了IBM的案例,最
> > 后一节的连接里也有很多案例。
> > ------------
>
> 这不是强人所难, 其实对于写文章讨论来说, 你那些铺垫反而是没什么用的; 关于你说的IBM的例子和其它例子, 不觉得有点模糊吗? 象IBM那
> 个, 你并没有掰开揉碎的说明为什么用你的方式改善会更好啊, 泛泛的一说, 如何让别人信服? 现在是你在宣传某物不是? 你看这个帖子里多少人的迷
> 惑, 是因为根本没法更具体的去理解你到底在说什么?
>
> 你和莫兄的讨论也提到你的工作经历和体会让你有这些认识, 我想这些会更加一矢中的, 为什么不详细的给大家上上课呢?
>
--------------
comment: 这个我应该检讨,写作水平有待提高。至于为什么不深入讲解按理有两个原因。。。第一是我机器上没有中文输入软件,要先打到一个网上中
文输入系统中,再用鼠标拷贝过来。所以太复杂的叙述很困难。文章定型后要改也是非常劳累:))。第二个原因是我担心那样会一叶障目。所以,我只给了关于
这个问题详细讨论的连接,而不在正文里展开。第三是,关于IBM例子的讨论牵扯到更多的领域知识,所需要的铺垫恐怕更多。第四是我假设读者会阅读我给的
连接或到网上搜索相关补充信息,所以只需要给出主要线索而尽量避免枝节讨论。
--------------

> > -------------
> > comment: 我很糊涂。我要求CBD和DSM拘泥于什么形式了?
> > -------------
>
> 比如说, 动态的而不是静态的组装, 随之而来的, 使用配置文件描述, 而不是直接用C++代码 + 编译器. 比如莫兄说的那些方式.
>
------------
我似乎没有说过CBD只能用动态组装而不能用静态。但从需求上讲理想的CBD框架应该满足如下要求:
1。支持声明式部署(建模)
2。支持现场(非开发环境下)部署。
3。支持部署模型变换
你怎么去实现那是你自己的事。
------------

> > --------------
> > comment: 固执己见的意思是听不进反对意见。可这里并没有反对意见呀?你是说你反对我的说法,你认为IOC与GP不是垂直,而是针锋相对?这个
> > 我也没反对。我谈论的是现在的解决方案,GP能在实际中完全取代IOC是未来的美好远景(见我和莫老大的讨论)。
> > --------------
>
> 莫兄说的我能理解, 但是你说的我没理解, 我只觉得你在强调, GP不能取代IoC, 并且多次说他们是垂直的.
>
------------
comment: 再解释一遍:我说垂直莫老大也没反对。。。因为GP能够取代IOC框架(以及DSM/DSL建模)是未来的美好理想。现在C++仍然
处于GP初级阶段,GP所力所能及的仍然是模块实现或底层组装一层的问题,而IOC框架(以及相应的DSM/DSL)关注的则是高层业务逻辑组装的问
题,与IBM SCA框架,OMG CCM框架等属同一层次。这是我为什么说在现阶段GP和IOC框架是垂直的原因。我并没一定要坚持我的观点,只要你
能给出具体根据来说为什么现在的GP和BOOST已经能够取代IOC框架和DSM/DSL建模(从而也能取代IBM SCA和OMG CCM等等框
架),我会欣然接受而绝对不会固执己见地。CSDN上讨论IBM SCA的文章不少,你可以去写一篇GP vs SCA的文章驳斥一下IBM和BEA那
帮卖狗皮膏药的,他们那点三脚猫的东西已经完全能被GP取代,那会比捏我这种草根软柿子要精彩的多。
------------
> > -------------
> > comment: 我已经重复过好N编。作为CBD框架结构来说,IOC根本不要求组件一定按OOP模式开发。实际上IOC中POCO不但可以没有
> > abstract基类,可以是任意模板类,甚至可以是K&R结构或C函数指针。我看不出IOC与OOP的必然联系或与GP的必然冲突。你大概是从字面上
> > 把CBD中讨论的COMPONENT和CONTAINER与STL and BOOST中的相应词汇混淆了甚至画上等号了。实际上IOC/CBD框架与
> > OOP, GP, boost所关注的至少现在根本不是一个层次上的问题。
> > -------------
>
> 这个就是我不理解的地方, 我觉得作为介绍一个方法的人员, 你不能光赖我或者别人理解能力低吧? 我知道"IoC的方式"可以很灵活, 但你这种说法
> 不啻于再说, 面向对象的方式, 照样可以用C来实现. 问题是你说的到底是什么, 在解决哪些层面上的问题. 你写的字大家都认识, 但是你说的内
> 容, 至少从我的角度看, 除了概念的堆砌, 很难理清楚思路. 还是我说的, 表达的人不能去要求听众的理解能力的配合.
>
------------
comment: 你把问题想复杂了。实际上简单地说就是,任何C/C++中能用指针定位的实体就能被IOC框架管理。IOC框架只需要知道被管理实体
的地址(否则当然没法管理), 并不关心该实体是否有抽象基类,是否是模板,。。。。。
------------

> 很可能你说的方式, 其实大家都知道也能理解, 只是你管他叫作IoC, 但是缺少了OO这一作用域, 大家就不管这种做法叫做IoC了, 甚至没有那
> 么多概念, 而只是一种需求导致的手法(这是我一直在强调的); 只是你提出把它们更好的归纳总结为一个框架的形式去使用; 这样大家本来是有相同的认
> 识的, 现在反而在各说各话, 鸡同鸭讲.
>
--------------
comment: 我不理解为什么IOC框架支持OO实体(有抽象基类)能让你理解,而一但支持了非OO实体(无抽象基类)或模板实体则成了各说各
话, 鸡同鸭讲让你无法理解了?这就好比一个对C++实体进行存储的框架。如果这个框架支持对OO实体(有抽象基类)的存储你就欣然接受,若它同时还支
持对非OO实体(无抽象基类)或模板实体的存储你就认为是难以接受,鸡同鸭讲?

IOC框架完全没必要自己画地为牢。否则将有很多中间件或组件框架和建模系统会被排除在外。比如CORBA的C++影射支持OO和模板(TIE)两种不
同的实现。都不过是对业务逻辑的包装而已。IOC框架对这两种(甚至第三四。。。种)包装PARADIGM都支持。我并不觉得这样对理解IOC造成什么
障碍。如果你觉着IOC不应该去支持非OO或模板方式对业务逻辑包装的组件实体,或这种支持令人难以理解,请给出原因,我洗耳恭听。
--------------

> > --------------
> > comment: IOC和DSM属于草根阶级的东西。提出来是为了取代重量级框架。比如IBM的SCA,UML,OMG的CCM,MDA等等。这些重
> > 量级的东西远远应该值得先被反思,而不是先拿IOC/DSM当软柿子捏。CSDN上那么多对SCA,UML糊吹乱捧的文章,也没见谁烦了,倒是见众人
> > 捧。
>
> > IOC这几年嚷嚷的不少,但真正理解的人并不多。首先你自己显然并没有理解到底什么是IOC。可以从你上帖中举的例子中看出你理解的IOC是模块之间的
> > 调用关系(这从你说原来热插拔框架怎么工作,以及非拿COM来比的可以看出)。很多介绍IOC的文章都有同样错误的理解。比如大牛ARNON这篇http://www.ddj.com/blog/architectblog/archives/2006/08/inversion_of_c...
> > 甚至还有WIKI的词条。所以我的帖子也不得不铺垫罗嗦地讲清楚什么是IOC。你若真对IOC熟悉,应该不难看出我帖子前面说的都是老生常谈。只有以前
> > 没有接触或没有真正理解过IOC这个概念的人才可能对这些铺垫感到陌生。
>
> > 还有一点就是,当年我看到IOC这个概念时的反应就是“这也太平淡无奇了吧”,想象不到这个概念能演义出什么东西来。所以,我的建议是你不要被别人合理
> > 的或不合理的炒做所左右。可以不关心不感兴趣,但不要肯定或否定自己并不理解的东西。举个例子,数学分析都是一上来学一堆技术(如何算导数求极值,算积
> > 分求面积)。而抽象代数(比如抽象群论)上来就是一堆平淡无奇的概念,N堂课后可能还没见什么技术,到N+1堂课时很多人就烦了。但这些平淡无奇的概念
> > 中能演义出来的东西可并不平淡。当年看到数据库的关系模型时的反映也类似,这种东西人类几百年来不都是这么干的嘛,实在领悟不了为什么关系模型遭热
> > 捧。。。。。当时也差点烦....
>
> 我从这里头领会到一个意思, 就是你说的IoC, 和我在铺天盖地的宣传中理解的IoC, 不是一码事. 但是我个人感觉, 你并没有说清楚怎么不是一
> 码事了. 但是我觉得, 凡是不合你理解的形式, 就是对IoC的误解, 是你一个问题. 我想如果你的IoC和大众定义的IoC不同, 你倒不妨起个
> 新名字, 更适合去说明问题. 名词作为一个表达符号, 为的是交流大家都知道的那个东西; 而不是先有名词, 再来给这个名词赋予不同的解释, 那样
> 就没法交流了.
>
-----------------
comment: 业界是否因为泛滥成灾的误解和曲解而将IOC改名是业界的事,我只关心在与我相关的情况下给出正确的解释。你对IOC的理解是错误
的,IOC并非是业务调用的CALLBACK方式。你若认为业界应该采用你的理解,而将IOC框架理解的IOC改名,你可以去呼吁。如果业界改了名,我
也自然会从善如流。。。
-----------------

> 至于你说我理解不了, 其它质疑的理解不了, 让我们少张嘴, 我觉得就不那么地道了; 你刚说过你没说IoC多么的高级, 问题是我们的智商又不是
> 30, 我觉得如果有不少人, 尤其是有一定工作经历和思考的人, 理解不了, 那么要么它就是高级(考虑到你说的IoC和一般的IoC不是完全相同
> 的), 要么就是有意被以一种高级和复杂的形式表达.
>
----------------
你要把“先理解,再批判”这种善意的建议理解成让你少张嘴的命令或贬低你的智商低,那我也无话可说。
----------------

> 你要是认为你介绍的东西背后所隐含的内容, 可以在软件构件领域可以和数学领域中的抽象代数比肩, 我更建议你起个其它名字, 然后好好思考一下如何把
> 它们介绍给大家, 而不是大家看不懂, 或者被其他人和那种"被扭曲了含义的IoC"划等号以后, 去责怪别人理解不了.
>
----------------
comment: 比不比肩我并不关心。但重新起名不是我的事,这些概念都是N年的老生常谈。
----------------
> 反正在我看来, 所谓的IoC(至少大众眼里的IoC)就是加强版的策略模式(就像你说的, 很多大牛也是这么理解的); 而你介绍的东西, 区别也不
> 大, 最多是传统理解的IoC的一些升级和特化. 更多的, 你介绍的种种变化, 在我看来不是通过改变"模块之间的调用关系"就已经可以实现了吗?
> 那么区别在于哪里? 你至少得给出一个传统的变化"模块之间的调用关系"处理不了的例子(现在你的所有说法, 我觉得都不满足"处理不了"这个情况,
> 如果你觉得有, 可以详细说明一下), 然后告诉我们按你的方式, 如何处理吧.
>
---------------
comment: 这个问题(IOC不是指业务模块之间的调用)我在这个THREAD里已经解释过N编了。如果作为技术讨论,我愿意再解释N遍。但现在
讨论显然已经变味了。
--------------
> > 至于IOC,我的看法是它只是一个铺垫的概念。真正重要的是模型化和DSM。IOC使得我们能够将应用中很多东西(主要是管弦逻辑)抽取出来,用一种完
> > 全不同的方式表达(声明式的数据模型表达)。而这使得我们可以以各种不同的视角(可灵活变换的)去建立,描述,理解一个应用程序,而不仅仅是逻辑步骤表
> > 达或底层数据或元数据表达。就跟就象抽象群将很多在分析中被埋没了的东西抽取出来,以完全不同的视角考察。。。
>
> 配合前面说的"拘泥于形式", 我就不明白, 在没有需求的时候, 为什么我非要"用一种完全不同的方式表达(声明式的数据模型表达", 象莫兄提到的
> 方式, 利用GP/TMP, 抽取到代码中一个地方集中起来, 然后用编译器做成静态的, 又有何不可? 至少免去了使用第三方IoC框架的代价, 也
> 免去了自己去解析描述的负担(不使用第三方框架的前提下), 还增加了静态检查, 不也很好么?
--------------
comment: 同样,关于需求的问题我在这个THREAD里也解释过。而且,帖子中也给出了N个讨论其应用的连接。这是入门文章,主要焦点是基本概
念。若你真关心应用需求,完全可以自己去查。否则,讨论这些需求的铺垫将会更长。
--------------

Eli

unread,
Jan 5, 2008, 2:18:44 PM1/5/08
to TopLanguage
我被你折服了...

我最开始确实因为对大多数人宣传的"IoC"反感而不冷静, 但是当我冷静下来以后, 我只是想听听你说的IoC和"被误解的IoC"有什么不同, 我
说到鸡同鸭讲什么的, 你仔细看看就可以理解, 我只是认为你表述的让第三者不容易看出区别, 要知道你的思路当然你自己最清楚, 我或者别人怎么可能
一下子就理解透你的东西的与众不同之处?

在这种情况下, 读者的反应只有两种可能性, 认为你所说的不同, 只是你自己对你最初提到的"被误解的那种IoC"的一种你自己方式的应用, 这样大
家自然兴趣就小很多; 另一种就是你的思路弘扬了IoC真正的核心思路, 那么在IoC广泛的"被误解"的情况下, 咱们为什么不能抛弃这个词呢?

我可从来没给IoC起过名字, 从大部分或浅显或艰深的介绍文章都可以看到: 基本上所有人嘴里的IoC, 都是我说的"加强版Strategy",
或者加上一些附加值: 比如对象的创建与拆除等等; 只是因为它关注的问题相对集中在一些区域, 所以它的视角和Strategy显得有些不一样, 其
在实践上的本质却差别不大; 这在我看来就好比一颗树的每一个节点都可以提升成根节点, 而使得整个树看起来不一样, 但其实还是那棵树; 想必你既然
提到IoC被一些人认为毫不重要, 也必然见过这些论点(比如: 你说的一些大牛), 甚至一些大肆吹捧IoC的人, 在你看来不也是误解了IoC
吗? 那么是谁打算给我们这些误解者上上课, 告诉我们一个不同的IoC? 当大多数人都把某一种理解无论对错叫做IoC的时候, 那个持有不同理解的
人能说是别人在改名吗?

我并没有说, 你介绍的核心内容是"业务调用的CALLBACK方式", 或者任何方式, 我只是听的糊里糊涂, 根本没搞清你说的这套有什么不同.
这就好比, MVC, 实现的方式也有很多种, 发挥的重要性也不一样, 但根本上是一个观察者模式; MVP, 说什么的也都有, Fowler这号
大嘴也是说不清楚, 但根本上讲它是一个中介者模式; 而我并没有看出你介绍的概念, 在根本上来说, 和一个"变种加强版的策略模式"有什么不同.
我的想法当前只是认为你说的东西和MVC一样, 在应用层面上可能有广阔的意义, 但从一个程序员设计和实现的角度来说, 只是如何根据需求, 将这个
形态如何变种, 并且如何应用以发挥你的目的. 所以我的问题是, 如果以OO的方式来说(限制范围省的越说越多), 你介绍的东西至少从不那么严格的
意义上讲, 是不是可以理解为一个关注于某些问题的, "变种加强版的策略模式", 或者它的一种应用? 如果不是, 那它跟我们比较熟悉(越普及的概
念越好)的哪些东西可以类比? 无论是与不是, 它和那个它自身可类比的方案相比, 最关键的改进是什么? 适用于哪些情况? 不适合哪些情况?

我也没说非得OO或者怎么着的, 只是我个人感觉对这个问题从OO的角度看去, 能够说的比较方便. 一个很重要的用于理解和讨论手段是: 找到可类比
的东西. 很多非OO的方式和OO方式截然不同, 但是从总体来说是可类比的. 如果你认为用OO的方式来描述你的理念不够清晰, 你尽可以换一种方式
详细的讲解. 在我看来, 即使是设计模式这种OO产物, 其实一些概念也是超越OO的, 在不同方式下都可以找到可类比的东西的; 只是比如在FP
里, 那个可类比的东西是先天存在的所以看起来无甚必要而已. 所以并非说你提到非OO就是鸡同鸭讲了, 而是说, 作为讨论的发起者, 你为了让大家
明白你的意思所做的工作还远远不够, 很可能导致一些人和你的理解上的不一致, 从而造成一个鸡同鸭讲的情况.

也许就像你说的, 是我自己人为的把事情越想越复杂, 所以反而理不清楚; 但是这就是我的思路, 别说你改变不了我或者其它听众, 听众自己恐怕也无
能为力; 我也不是说你说的就一定是错的或者没有意义的; 我只是希望你能考虑一下不被人理解的客观因素, 是不是能尽量的用实际例子, 或者换些方
式, 更有技巧的表述一下? 这是技术作者应该做到的啊..., 如果你实在做不到, 那我也只能在你眼里继续糊涂下去.

拿LS那个赞同你的兄弟来说, 他说到电阻电容什么的那番类比, 我就可以理解. 但他不是你, 没有表达你要表达的意思. 按照他那种形容方式, 我
还是认为你说的那些, 仍然是"变种加强版的策略模式"在某一具体方向上的应用和发展. 要说我最开始的回帖是借题发挥, 发泄一下被铺天盖地的IoC
宣传憋出来的不爽的话, 我现在打这么多字只有一个目的, 就是我认真的想听你说, 我希望听见不同的声音, 由你来指导, 看到那些我还没看到的东
西; 所以你可以这么理解我的行为: 逼你表述的更清晰一些, 让我这样搞不清状况的人都能够理解. 毕竟这对大家学习或理解你的思路, 对你宣传你的
观念, 都是最有好处的.

唉. 论坛真是费劲, 这要是大家做一张茶座前头, 可能一会儿我就明白你说的什么了, 对我有没有用, 对哪些情况有用, 一下我就清楚了, 然后就
散会吃饭去了...

Eli

unread,
Jan 5, 2008, 2:29:01 PM1/5/08
to TopLanguage
难道你的意思其实只是:

凡是基于你介绍的这种形式的方式, 无论它的具体手段是"被误解的IoC", "加强变种版Strategy", 或者更地道的IoC; 还是利用模板
的能力, 莫兄介绍的哪种方式, 或者在任何一种编程或认识方式中可类比的方式, 都是IoC; 然后就是介绍IoC可以发挥哪些作用, 如何发挥作
用?

那我确实是想复杂了...

Ke Jin

unread,
Jan 13, 2008, 5:48:38 PM1/13/08
to TopLanguage
本来想在博客里回答(因为这里回答估计很少人会爬到快100楼来读),但这两周实在忙不开。还是先简短在这里回答一下,博客以后再说。

首先,IoC不是策略模式。这两个模式本身是垂直独立的模式。也就是说它们考虑的是OO(广义的)架构设计中不同方面的问题。策略模式考虑的是将给定对
象的部分逻辑/算法分解到外部策略对象中去实现从而更灵活地扩展和改变对象行为。而IoC考虑的如何搭接被分解开的对象(甭管它们是基于何种考虑被分解
开的)。可以用IoC框架来搭接的可以是因为各种模式被分解的对象,包括策略模式,发布订阅(观测)模式,适配器模式,等等。比如在我原文中的GPS例
子中,时钟脉冲发生器与 GPS定位器之间就是按发布订阅模式而不是策略模式分解的,并由IoC框架搭接的。在PocoCapsule引用的大量的
CORBA和WS的实例中,策略模式和适配器模式均大量地被采用。如果非要将订阅对象视为发布对象的策略对象,或将被适配对象看做适配器的策略对象,等
等则显然非常牵强附会。因为对象分解的原因在这些不同模式中完全是风马牛不相及。

反过来也一样,这些模式(策略,发布订阅,观测,等等)也可以完全不用IoC模式(或注入模式)而用目录解析或上下文(context)解析等方式来搭
接。比如CORBA传统实现中(你可以去读各种开放源代码的ORB实现),对于POA(可遗址对象适配器)Policy的处理,大部分都采用内部动态目
录或表解析方式来绑定所需/或所设定的策略对象,而不是象GoF例子代码中那样用setter直接注入策略对象。同样,发布订阅和适配器模式也不必非要
采用 setter或构造函数注入相关外部对象(观测者,被适配者等),而采用目录解析或其他方式(比如IBM SCA中就采用的是目录解析方式)。非
要将策略模式解释成所有用setter注入外部对象的模式(从而简单将其等同于IoC)显然是对策略模式以及其他模式缺乏实质的理解。

所以,设计模式的学习者切忌只从字面或某些例子代码表面上的相似性来理解IoC,策略,等等模式(还有切忌仅仅去阅读内些瞎子摸象后写出的“我终于明白
什么是 IoC”的文章),而应该去深刻思考这些模式需要解决的是相同还是不同的问题,考虑的是相同还是不同的方面。。。。。这也恰恰是我为什么要对
IoC的讨论进行铺垫的原因。

其次,IoC模式只是IoC框架的出发点,IoC框架远远不只是IoC模式(或其它单一个设计模式)。就好比一个发布订阅消息服务远远不是发布订阅模
式,一个CORBA可遗址对象适配器(POA)远远不是适配器模式。。。

另外,对事不对人,我再澄清一遍(也是最后一次)。。。我所讨论的IoC概念,术语,和解释等等,并非我自己一人而是业界之见。对此有疑问者可以去看其
他 IoC容器的手册和文档来比较。至于是否业界应该因为泛滥成灾的错误解释(比如IoC就是策略模式,IoC就是回调模式,IoC就是事件驱动模式等
等)而将IoC改名则完全不是我原贴所关心的。

Ke Jin

unread,
Jan 13, 2008, 5:51:55 PM1/13/08
to TopLanguage
一个建议。。。IOC框架的概念和方法并不难(实际上是很简单)。。。难的是有太多瞎子摸象后的文章和误解。所以应该少去读这些文章,而是拿一个IOC
容器来用一用后在思考应该清楚一些。
Reply all
Reply to author
Forward
0 new messages