
置頂隨筆
UML是一種通用的建模語(yǔ)言,其表達(dá)能力相當(dāng)?shù)膹?qiáng),不僅可以用于軟件系統(tǒng)的建模,而且可用于業(yè)務(wù)建模以及其它非軟件系統(tǒng)建模。UML綜合了各種面向?qū)ο蠓椒ㄅc表示法的優(yōu)點(diǎn),至提出之日起就受到了廣泛的重視并得到了工業(yè)界的支持。
本章將按視圖、模型元素、圖以及公共機(jī)制依次介紹UML的構(gòu)造和基本元素,以使得讀者對(duì)UML有一個(gè)總體了解,其具體細(xì)節(jié)將在后續(xù)章節(jié)中詳細(xì)描述。
畫(huà)圖工具:eDraw、jude
歡迎大家繼續(xù)支持和關(guān)注我的博客:
http://hoojo.cnblogs.com
http://blog.csdn.net/IBM_hoojo
也歡迎大家和我交流、探討IT方面的知識(shí)。
email:hoojo_@126.com
如果你覺(jué)得本文不錯(cuò)的話,請(qǐng)你點(diǎn)擊屏幕右下方的
。如果你以后會(huì)用到這篇文章的或覺(jué)得以后要重新翻閱的話,你可以點(diǎn)擊屏幕右下角的
。如果你覺(jué)得我的博文不錯(cuò)或是想在第一時(shí)間看到我的動(dòng)態(tài)的話,你可以點(diǎn)擊屏幕右下角
。如果你想說(shuō)點(diǎn)什么的話,你可以點(diǎn)擊屏幕右下方的
。如果你都點(diǎn)過(guò)了,那真的太謝謝你了,兄弟太支持了。此時(shí),或許你可以點(diǎn)擊
按鈕,然后看看博文的導(dǎo)航繼續(xù)瀏覽其他文章。
1. UML的組成
UML由視圖(View)、圖(Diagram)、模型元素(Model Element)和通用機(jī)制(General Mechanism)等幾個(gè)部分組成。
a) 視圖(View): 是表達(dá)系統(tǒng)的某一方面的特征的UML建模元素的子集,由多個(gè)圖構(gòu)成,是在某一個(gè)抽象層上,對(duì)系統(tǒng)的抽象表示。
b) 圖(Diagram): 是模型元素集的圖形表示,通常是由弧(關(guān)系)和頂點(diǎn)(其他模型元素)相互連接構(gòu)成的。
c) 模型元素(Model Element):代表面向?qū)ο笾械念悺?duì)象、消息和關(guān)系等概念,是構(gòu)成圖的最基本的常用概念。
d) 通用機(jī)制(General Mechanism):用于表示其他信息,比如注釋、模型元素的語(yǔ)義等。另外,UML還提供擴(kuò)展機(jī)制,使UML語(yǔ)言能夠適應(yīng)一個(gè)特殊的方法(或過(guò)程),或擴(kuò)充至一個(gè)組織或用戶。

2. UML視圖的分類
UML是用來(lái)描述模型的,用模型來(lái)描述系統(tǒng)的機(jī)構(gòu)或靜態(tài)特征,以及行為或動(dòng)態(tài)特征。從不同的視角為系統(tǒng)構(gòu)架建模,形成系統(tǒng)的不同視圖。
(1) 用例視圖(Use Case View),強(qiáng)調(diào)從用戶的角度看到的或需要的系統(tǒng)功能,是被稱為參與者的外部用戶所能觀察到的系統(tǒng)功能的模型圖。
(2) 邏輯視圖(Logical View),展現(xiàn)系統(tǒng)的靜態(tài)或結(jié)構(gòu)組成及特征,也稱為結(jié)構(gòu)模型視圖(Structural Model View)或靜態(tài)視圖(Static View)。
(3) 并發(fā)視圖(Concurrent View),體現(xiàn)了系統(tǒng)的動(dòng)態(tài)或行為特征,也稱為行為模型視圖(Behavioral Model View)或動(dòng)態(tài)視圖(Dynamic View)。
(4) 組件視圖(Component View),體現(xiàn)了系統(tǒng)實(shí)現(xiàn)的結(jié)構(gòu)和行為特征,也稱為實(shí)現(xiàn)模型視圖(Implementation Model View)。
(5) 配置視圖(Deployment View),體現(xiàn)了系統(tǒng)實(shí)現(xiàn)環(huán)境的結(jié)構(gòu)和行為特征,也稱為環(huán)境模型視圖(Environment Model View)或物理視圖(Physical View)。
視圖是由圖組成的,UML提供9種不同的圖:
(1) 用例圖(Use Case Diagram),描述系統(tǒng)功能;
(2) 類圖(Class Diagram),描述系統(tǒng)的靜態(tài)結(jié)構(gòu);
(3) 對(duì)象圖(Object Diagram),描述系統(tǒng)在某個(gè)時(shí)刻的靜態(tài)結(jié)構(gòu);
(4) 組件圖(Component Diagram),描述了實(shí)現(xiàn)系統(tǒng)的元素的組織;
(5) 配置圖(Deployment Diagram),描述了環(huán)境元素的配置,并把實(shí)現(xiàn)系統(tǒng)的元素映射到配置上;
(6) 狀態(tài)圖(State Diagram),描述了系統(tǒng)元素的狀態(tài)條件和響應(yīng);
(7) 時(shí)序圖(Sequence Diagram),按時(shí)間順序描述系統(tǒng)元素間的交互;
(8) 協(xié)作圖(Collaboration Diagram),按照時(shí)間和空間順序描述系統(tǒng)元素間的交互和它們之間的關(guān)系;
(9) 活動(dòng)圖(Activity Diagram),描述了系統(tǒng)元素的活動(dòng);
建模方法由建模語(yǔ)言和建模過(guò)程兩部分構(gòu)成。其中建模語(yǔ)言是用來(lái)表述設(shè)計(jì)方法的表示法,建模過(guò)程是對(duì)設(shè)計(jì)中所應(yīng)采取的步驟的描述。UML是一種建模語(yǔ)言,它在很大程度上獨(dú)立于建模過(guò)程。在實(shí)際建模中,建模人員最好把UML用于以用案驅(qū)動(dòng)的、以體系機(jī)構(gòu)為中心的、迭代的和漸增式的開(kāi)發(fā)過(guò)程中。
一般而言,軟件系統(tǒng)的體系結(jié)構(gòu)給出了軟件系統(tǒng)的組織、組成系統(tǒng)的構(gòu)造元素及其接口的選擇、系統(tǒng)的行為和體系結(jié)構(gòu)風(fēng)格等信息。也就是說(shuō),它不僅關(guān)心系統(tǒng)的結(jié)構(gòu)和行為等功能性需求,而且也涉及系統(tǒng)的性能、易理解性、易復(fù)用性等非功能性需求。如下圖所示,UML利用用戶模型視圖、結(jié)構(gòu)模型視圖、行為模型視圖、實(shí)現(xiàn)模型視圖和環(huán)境模型視圖來(lái)描述軟件系統(tǒng)的體系結(jié)構(gòu)。
根據(jù)它們?cè)诓煌軜?gòu)視圖的應(yīng)用,可以把9種圖分成:
(1) 用戶模型視圖:用例圖;
(2) 結(jié)構(gòu)模型視圖:類圖和對(duì)象;
(3) 行為模型視圖:狀態(tài)圖、時(shí)序圖、協(xié)作圖和活動(dòng)圖(動(dòng)態(tài)圖);
(4) 實(shí)現(xiàn)模型視圖:組件圖;
(5) 環(huán)境模型視圖:配置圖。
用戶模型視圖由專門(mén)描述最終用戶、分析人員和測(cè)試人員看到的系統(tǒng)行為的用案組成,它實(shí)際上是從用戶角度來(lái)描述系統(tǒng)應(yīng)該具有的功能。用戶模型視圖所描述的系統(tǒng)功能依靠外部用戶或者另外一個(gè)系統(tǒng)來(lái)激活,為用戶或者另一系統(tǒng)提供服務(wù),從而實(shí)現(xiàn)用戶或另一系統(tǒng)與系統(tǒng)的交互。系統(tǒng)實(shí)現(xiàn)的最終目標(biāo)是提供用戶模型視圖中所描述的功能。在UML中,用戶模型視圖是由用案圖組成。
結(jié)構(gòu)模型視圖描述組成系統(tǒng)的類、對(duì)象以及它們之間的關(guān)系等靜態(tài)結(jié)構(gòu),用來(lái)支持系統(tǒng)的功能需求,即描述系統(tǒng)內(nèi)部功能是如何設(shè)計(jì)的。結(jié)構(gòu)模型視圖由類圖和對(duì)象圖構(gòu)成,主要供設(shè)計(jì)人員和開(kāi)發(fā)人員使用。
行為模型視圖主要用來(lái)描述形成系統(tǒng)并發(fā)與同步機(jī)制的線程和進(jìn)程,其關(guān)注的重點(diǎn)是系統(tǒng)的性能、易伸縮性和系統(tǒng)的吞吐量等非功能性需求。行為模型視圖利用并發(fā)來(lái)描述資源的高效使用、并行執(zhí)行和處理異步事件。除了講系統(tǒng)劃分為并發(fā)執(zhí)行的控制線程之外,行為模型還必須處理通信和這些線程及進(jìn)程之間的同步問(wèn)題。行為模型視圖主要供系統(tǒng)開(kāi)發(fā)人員和系統(tǒng)集成人員使用,它由序列圖、協(xié)作圖、狀態(tài)圖和活動(dòng)圖組成。
實(shí)現(xiàn)模型視圖用來(lái)描述系統(tǒng)的實(shí)現(xiàn)模塊它們之間的依賴關(guān)系以及資源分配情況。這種視圖主要用于系統(tǒng)的配置管理,它是由一些獨(dú)立的構(gòu)件組成的。實(shí)現(xiàn)模型視圖由構(gòu)件圖組成。其中構(gòu)件是代碼模塊,不同類型的代碼模塊形成不同的構(gòu)件。實(shí)現(xiàn)模型視圖主要供開(kāi)發(fā)人員使用。
環(huán)境模型視圖用來(lái)描述物理系統(tǒng)的硬件拓?fù)浣Y(jié)構(gòu)。例如,系統(tǒng)中的計(jì)算機(jī)和設(shè)備的分布情況以及它們之間的連接方式,其中計(jì)算機(jī)和設(shè)備統(tǒng)稱為節(jié)點(diǎn)。在UML中環(huán)境模型視圖是由部署圖來(lái)表示的。系統(tǒng)部署圖描述了系統(tǒng)構(gòu)件在節(jié)點(diǎn)上的分布情況,即用來(lái)描述軟件構(gòu)件到物理節(jié)點(diǎn)的映射。部署圖主要供開(kāi)發(fā)人員、系統(tǒng)集成人員和測(cè)試人員使用。
上面每一種視圖反映了系統(tǒng)的一個(gè)特定方面,不同人員可以單獨(dú)的使用其中每一種視圖,從而可以關(guān)注特定的體系結(jié)構(gòu)問(wèn)題。但在通常情況下,由于系統(tǒng)的最終目標(biāo)是提供用戶模型視圖中描述的功能以及其它一些非功能性需求,因此,用戶模型視圖是其它視圖的核心基礎(chǔ),其它視圖的構(gòu)造都依賴與用戶模型視圖中所描述的類容。
細(xì)心的讀者已經(jīng)發(fā)現(xiàn),每一種UML圖都是由多個(gè)圖組成的,每一種圖都是體系結(jié)構(gòu)某個(gè)側(cè)面的表示,各種圖實(shí)際上是一致的,所有的圖在一起組成了系統(tǒng)的完整視圖。如下圖所示,UML中總共提供了用案圖、類圖、對(duì)象圖、序列圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖、構(gòu)建圖和部署圖9種圖。根據(jù)它們描述的是系統(tǒng)的靜態(tài)結(jié)構(gòu)還是動(dòng)態(tài)行為,可以將它們分為靜態(tài)圖和動(dòng)態(tài)圖兩類。再進(jìn)一步介紹這9中UML圖時(shí),先了解下什么是模型元素:
3. UML的建模機(jī)制
UML有兩套建模機(jī)制:靜態(tài)建模機(jī)制和動(dòng)態(tài)建模機(jī)制。靜態(tài)建模機(jī)制包括用例圖、類圖、對(duì)象圖、包、組件圖和配置圖。動(dòng)態(tài)建模機(jī)制包括狀態(tài)圖、時(shí)序圖、協(xié)作圖、活動(dòng)圖。
(1) 用例圖:用例的可視化工具,它提供計(jì)算機(jī)系統(tǒng)的高層次的用戶視圖,表示以外部活動(dòng)者的角度來(lái)看系統(tǒng)將是怎樣使用的。
用例圖(用案圖)是用于描述一組用案,參與者以及它們之間的連接關(guān)系。一個(gè)用案圖描述了一組動(dòng)作序列,每一個(gè)序列表示系統(tǒng)的外部設(shè)施(系統(tǒng)的參與者)與系統(tǒng)本身的交互。從一個(gè)特定參與者的角度看,一個(gè)用案完成對(duì)其有價(jià)值的工作。如圖2.5所示,用案圖僅僅是從參與者使用系統(tǒng)的角度來(lái)描述系統(tǒng)中的信息,即站在系統(tǒng)外部查看系統(tǒng)應(yīng)該具有什么功能,而并不描述該功能在軟件內(nèi)部是如何實(shí)現(xiàn)的。用案可以應(yīng)用于整個(gè)系統(tǒng),也可以應(yīng)用于系統(tǒng)的一個(gè)部分,包括子系統(tǒng)、單個(gè)的類或者接口。通常,用案不僅代表這些元素所期望的行為,而且還可以把這些元素用作開(kāi)發(fā)過(guò)程中測(cè)試用案的基礎(chǔ)。
用例圖包括以下3方面內(nèi)容:
(a) 用例(Use Case)
(b) 參與者(Actor)
(c) 依賴、泛化和關(guān)聯(lián)關(guān)系
用例圖示例:
(2) 類圖:描述類、接口、協(xié)作以及它們之間關(guān)系的圖。
類圖是用于描述一組類、接口、協(xié)作以及它們之間的靜態(tài)關(guān)系。在面向?qū)ο笙到y(tǒng)的建模中,類圖是最為常用的圖,它用來(lái)闡明系統(tǒng)的靜態(tài)結(jié)構(gòu)。事實(shí)上類是對(duì)一組具有相同屬性、操作、關(guān)系和語(yǔ)義的對(duì)象的描述,其中對(duì)類的屬性和操作進(jìn)行描述時(shí)的一個(gè)最重要的細(xì)節(jié)就是它的可見(jiàn)性。
類可以以多種形式連接,例如關(guān)聯(lián)、泛化、依賴和實(shí)現(xiàn)等。一個(gè)典型的系統(tǒng)中通常有若干個(gè)類圖。一個(gè)類圖不一定要包含系統(tǒng)中所有的類,一個(gè)類可以加到幾個(gè)類圖中。
類圖示例:
(3) 對(duì)象圖:表示在某一時(shí)間上一組對(duì)象以及它們之間的關(guān)系的圖。對(duì)象圖可以被看做是類圖在系統(tǒng)某一時(shí)刻的實(shí)例。
對(duì)象圖是類圖的實(shí)例,用來(lái)描述特定運(yùn)行時(shí)刻一組對(duì)象之間的關(guān)系。也就是說(shuō),對(duì)象用于描述交互的靜態(tài)部分,它由參與協(xié)作的有關(guān)對(duì)象組成。但不包括在對(duì)象之間傳遞的任何消息。
在創(chuàng)建對(duì)象圖時(shí),建模人員并不需要用單個(gè)的對(duì)象圖來(lái)描述系統(tǒng)中的每一個(gè)對(duì)象。事實(shí)上,絕大多數(shù)系統(tǒng)中都會(huì)包含成百上千的對(duì)象。用對(duì)象來(lái)描述系統(tǒng)的所有對(duì)象以及它們之間的關(guān)系一般是不太現(xiàn)實(shí)的。因此,建模人員可以選擇所感興趣的對(duì)象極其之間的關(guān)系來(lái)描述。
對(duì)象圖中所使用的符號(hào)和類圖中使用的符號(hào)幾乎完全相同,區(qū)別僅在于對(duì)象圖的對(duì)象名帶有下劃線,而且類與類之間關(guān)系的所有的實(shí)例都要畫(huà)出來(lái)。
(4) 組件圖:描述軟件組件以及組件之間的關(guān)系,組件本身是代碼的物理模塊,組件圖則顯示了代碼的結(jié)構(gòu)。
組件圖(構(gòu)件圖)是用于描述一組構(gòu)件之間的組織和依賴關(guān)系,用于建模系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖。構(gòu)件可以是可執(zhí)行程序集、庫(kù)、表、文件和文檔等,它包含了邏輯類或者邏輯類的實(shí)現(xiàn)信息,因此結(jié)構(gòu)模型視圖和實(shí)現(xiàn)模型視圖之間存在映射關(guān)系。
構(gòu)建圖中也可以包括包或子系統(tǒng),它們都是用于將模型元素組成較大的組塊。
組件圖例圖:
(5) 配置圖:描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)以及在此結(jié)構(gòu)上執(zhí)行的軟件。配置圖可以顯示計(jì)算節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)和通信路徑、結(jié)點(diǎn)上運(yùn)行的軟件組件、軟件組件包含的邏輯單元(對(duì)象、類)等。配置圖常常用于幫助理解分布式系統(tǒng)。
配置圖(部署圖)用來(lái)描述系統(tǒng)運(yùn)行是進(jìn)行處理的節(jié)點(diǎn)以及在節(jié)點(diǎn)上活動(dòng)的構(gòu)件的配置。部署圖用來(lái)對(duì)系統(tǒng)的環(huán)境模型視圖進(jìn)行建模。在大多數(shù)情況下,部署圖用來(lái)描述系統(tǒng)硬件的擴(kuò)普結(jié)構(gòu)。
在UML中,建模人員可以用類圖來(lái)描述系統(tǒng)的靜態(tài)結(jié)構(gòu),可以用序列圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖來(lái)描述系統(tǒng)的動(dòng)態(tài)行為,而用部署圖來(lái)描述軟件所執(zhí)行所需的處理器和設(shè)備的拓?fù)浣Y(jié)構(gòu)。
(6) 狀態(tài)圖:通過(guò)類對(duì)象的生命周期建立模型來(lái)描述對(duì)象隨時(shí)間變化的動(dòng)態(tài)行為。
狀態(tài)圖實(shí)際上是一種由狀態(tài)、變遷、事件和活動(dòng)組成的狀態(tài)機(jī)。狀態(tài)圖描述從狀態(tài)到狀態(tài)的控制流,常用于系統(tǒng)的動(dòng)態(tài)特性建模。在大多數(shù)情況下,它用來(lái)對(duì)反應(yīng)型對(duì)象的行為建模。
在UML中,狀態(tài)圖可以用來(lái)對(duì)一個(gè)對(duì)象按事件排序的行為建模。一個(gè)狀態(tài)圖是強(qiáng)調(diào)從狀態(tài)到狀態(tài)的控制流的狀態(tài)機(jī)的簡(jiǎn)單表示。一般而言,狀態(tài)圖是對(duì)類所描述的設(shè)施的補(bǔ)充說(shuō)明,它描述了類的所有對(duì)象可能具有的狀態(tài)以及引起狀態(tài)變化的事件。
(7) 時(shí)序圖:交互圖描述了一個(gè)交互,它由一組對(duì)象和它們之間的關(guān)系組成,并且還包括在對(duì)象間傳遞的信息。交互圖表達(dá)對(duì)象之間的交互,是描述一組對(duì)象如何協(xié)作完成某個(gè)行為的模型化工具。
序列圖和協(xié)作圖統(tǒng)稱為交互圖。其中,序列圖用來(lái)描述對(duì)象之間消息發(fā)送的先后次序,闡明對(duì)象之間的交互過(guò)程以及在系統(tǒng)執(zhí)行過(guò)程中的某一具體時(shí)刻將會(huì)發(fā)生什么事件。序列圖是一種強(qiáng)調(diào)時(shí)間順序的交互圖,其中對(duì)象沿橫軸方向排列,消息沿縱軸方向排列。
序列圖中的對(duì)象生命線是一條垂直的虛線,它表示一個(gè)對(duì)象在一段時(shí)間內(nèi)存在。由于序列圖中大多數(shù)對(duì)象都存在于整個(gè)交互過(guò)程中,因此這些對(duì)象全部排列在圖的頂部,它們的生命線從圖的頂部畫(huà)到圖的底部。每個(gè)對(duì)象的下方有一個(gè)矩形條,它與對(duì)象的生命線重疊,它表示該對(duì)象的控制焦點(diǎn)。序列圖中的消息可以有序號(hào),但由于這種圖上的消息已經(jīng)從縱軸上按時(shí)間順序排序,因此消息序號(hào)通常予以省略。
(8) 協(xié)作圖:包含類元角色和關(guān)聯(lián)角色,而不僅僅是類元和關(guān)聯(lián)。協(xié)作圖強(qiáng)調(diào)參加交互的各對(duì)象的組織。協(xié)作圖只對(duì)相互間有交互作用的對(duì)象和這些對(duì)象間的關(guān)系建模,而忽略了其他對(duì)象和關(guān)聯(lián)。協(xié)作圖也是一種交互圖,它強(qiáng)調(diào)收發(fā)消息的對(duì)象的組織結(jié)構(gòu)。
協(xié)作圖和序列圖是協(xié)作的,它們可以互相轉(zhuǎn)換。在多數(shù)情況下,協(xié)作圖主要對(duì)單調(diào)的、順序的控制流建模,但它也可以用來(lái)對(duì)包括迭代和分支在內(nèi)的復(fù)雜控制流進(jìn)行建模。
一般而言,建模人員可以創(chuàng)建多個(gè)協(xié)作圖,其中一些是主要的,另外一些是可選擇的路徑或者異常條件。建模人員可以用包來(lái)組織這些協(xié)作圖,并給每個(gè)圖起一個(gè)合適的名字,以便與其它圖區(qū)別開(kāi)。
(9) 活動(dòng)圖:用于展現(xiàn)參與行為的類的活動(dòng)或動(dòng)作。
活動(dòng)圖是狀態(tài)圖的一種特殊情況,其中幾乎所有或大多數(shù)狀態(tài)都處于活動(dòng)狀態(tài),而且?guī)缀跛谢蛘叽蠖鄶?shù)變遷都是由源狀態(tài)中活動(dòng)的完成觸發(fā)的。活動(dòng)圖本質(zhì)上是一種流程圖,它描述了從活動(dòng)到活動(dòng)的控制流。
可以把活動(dòng)圖看作是新樣的交互圖,但交互圖觀察的是傳遞消息的對(duì)象,而活動(dòng)圖觀察到的是對(duì)象之間傳送的消息。盡管兩者在語(yǔ)義上的區(qū)別很細(xì)微,但它們使用不同的方式來(lái)看系統(tǒng)的。

如果你覺(jué)得本文不錯(cuò)的話,請(qǐng)你點(diǎn)擊屏幕右下方的
。如果你以后會(huì)用到這篇文章的或覺(jué)得以后要重新翻閱的話,你可以點(diǎn)擊屏幕右下角的
。如果你覺(jué)得我的博文不錯(cuò)或是想在第一時(shí)間看到我的動(dòng)態(tài)的話,你可以點(diǎn)擊屏幕右下角
。如果你想說(shuō)點(diǎn)什么的話,你可以點(diǎn)擊屏幕右下方的
。如果你都點(diǎn)過(guò)了,那真的太謝謝你了,兄弟太支持了。此時(shí),或許你可以點(diǎn)擊
按鈕,然后看看博文的導(dǎo)航繼續(xù)瀏覽其他文章。
最后,歡迎大家繼續(xù)支持和關(guān)注我的博客:
http://hoojo.cnblogs.com
http://blog.csdn.net/IBM_hoojo
也歡迎大家和我交流、探討IT方面的知識(shí)。
摘要: 這篇文章主要介紹用JavaScript和jQuery、HTML、CSS以及用第三方聊天JavaScript(jsjac)框架構(gòu)建一個(gè)BS Web的聊天應(yīng)用程序。此程序可以和所有連接到Openfire服務(wù)器的應(yīng)用進(jìn)行通信、發(fā)送消息。如果要運(yùn)行本程序還需要一個(gè)聊天服務(wù)器Openfire, 以及需要用到Http方式和Openfire通信的第三方庫(kù)(JabberHTTPBind)。 JabberHTTPB...
閱讀全文
這個(gè)解決方法已經(jīng)定制下來(lái)很久了,上一段時(shí)間比較忙,沒(méi)有時(shí)間整這些東西。最近稍微好些,不怎么加班。所以抽空總結(jié)下,同時(shí)也分享給大家,也算是給大家一個(gè)借鑒吧!或許這并不是最好的解決方案,但只要能滿足當(dāng)前需求的最好方案也算是最好的解決方案,誰(shuí)說(shuō)不是呢!O(∩_∩)O~
我們采用的方案如下:
先看圖

上圖的流程大致上是這樣的:
手機(jī)端向PC端發(fā)送聊天內(nèi)容
1、手機(jī)端程序通過(guò)Socket連接服務(wù)器端的ServerSocket
2、然后服務(wù)器端根據(jù)手機(jī)Mobile客戶端發(fā)送過(guò)來(lái)統(tǒng)一規(guī)范的報(bào)文或聊天內(nèi)容,進(jìn)行解析
3、然后將解析的內(nèi)容,再用smack框架轉(zhuǎn)發(fā)到openfire服務(wù)器
4、最后由openfire服務(wù)器向客戶端(BS、CS、PhoneClient)程序發(fā)送聊天信息。這里的客戶端可以是pc上的瀏覽器,pc上的桌面應(yīng)用,手機(jī)應(yīng)用等
5、PC客戶端BS程序(用http bind方式監(jiān)聽(tīng))的長(zhǎng)連接監(jiān)聽(tīng)到openfire服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù),直接在頁(yè)面中顯示
同樣,PC客戶端向手機(jī)端發(fā)送聊天內(nèi)容
1、PC客戶端(BS)可以直接用http bind(xmpp 提供的http請(qǐng)求的長(zhǎng)連接方式)直接向openfire服務(wù)器發(fā)送聊天數(shù)據(jù);
2、然后openfire服務(wù)器接收到聊天內(nèi)容的時(shí)候,這時(shí)候socket服務(wù)器中的smack框架中有一個(gè)聊天內(nèi)容的監(jiān)聽(tīng)器
3、監(jiān)聽(tīng)到PC端向openfire發(fā)送的內(nèi)容后,會(huì)用socket的流向手機(jī)端發(fā)送我們定義好的報(bào)文或是聊天內(nèi)容
4、手機(jī)端的socket會(huì)不停的輪詢(可以模擬心跳式長(zhǎng)連接的方式),判斷是否有消息到達(dá),如果有則顯示
而普通的聊天程序的流程則是客戶端發(fā)送信息到openfire服務(wù)器,openfire服務(wù)器再將消息轉(zhuǎn)發(fā)給其他客戶端。他們省去了socket服務(wù)器這部分,那我們?yōu)槭裁匆由蟬ocket服務(wù)器這部分呢?
我們這樣做也是有自己的道理的:
首先,如果讓手機(jī)端自己實(shí)現(xiàn)向openfire服務(wù)器發(fā)送程序的代碼,那工作量是相當(dāng)大的。因?yàn)槊總€(gè)手機(jī)平臺(tái)使用的語(yǔ)言都不同,每個(gè)平臺(tái)都需要實(shí)現(xiàn)向openfire服務(wù)器發(fā)送聊天信息的報(bào)文。這其實(shí)就是在做重復(fù)的工作,而且每個(gè)平臺(tái)實(shí)現(xiàn)向手機(jī)端發(fā)送報(bào)文信息的技術(shù)會(huì)讓每個(gè)手機(jī)端的開(kāi)發(fā)人員都要學(xué)會(huì)一套和openfire交互的代碼。這勢(shì)必會(huì)重復(fù)工作、重復(fù)相同業(yè)務(wù)的代碼。所以,把這些代碼放在一個(gè)tcp/ip的socket中轉(zhuǎn)服務(wù)器進(jìn)行統(tǒng)一發(fā)送,這也是有好處的。
其次,把所以發(fā)送消息在報(bào)文在socket服務(wù)器完成,可以對(duì)業(yè)務(wù)進(jìn)行一個(gè)統(tǒng)一的處理、消息過(guò)濾。
手機(jī)端被否決的解決方案,供參考
手機(jī)端用http長(zhǎng)連接的方式,這個(gè)是不行的
其一、手機(jī)的移動(dòng)網(wǎng)絡(luò)不穩(wěn)定,長(zhǎng)連接會(huì)經(jīng)常斷掉,當(dāng)然你可以自動(dòng)進(jìn)行重連
其二、長(zhǎng)連接一直連接在服務(wù)器上,占用服務(wù)器資源。當(dāng)然你可以使用心跳式長(zhǎng)連接或是輪詢方式
其三、手機(jī)端一直連接服務(wù)器會(huì)使用手機(jī)端用戶的網(wǎng)絡(luò)帶寬流量(流量不是免費(fèi)的,客戶會(huì)怎么想)
其四、手機(jī)端一直連著服務(wù)器,對(duì)手機(jī)的電量也有消耗(現(xiàn)在智能機(jī)解決電量也是一個(gè)問(wèn)題)
摘要: 開(kāi)發(fā)環(huán)境: System:Windows JavaEE Server:tomcat5.0.2.8、tomcat6 JavaSDK: jdk6+ IDE:eclipse、MyEclipse 6.6 開(kāi)發(fā)依賴庫(kù): JDK6、 JavaEE5、ehcache-core-2.5.2.jar Email:hoojo_@126.com Blog:http://blog.csdn....
閱讀全文
摘要: 上兩篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html 介紹到了在MongoDB的控制臺(tái)完成MongoDB的數(shù)據(jù)操作、以及通過(guò)Java MongoDB 的驅(qū)動(dòng)完成在Java中對(duì)Mon...
閱讀全文
有問(wèn)題可以留言、私信、發(fā)郵件:
Email:hoojo_@126.com Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
方法一:
1、安裝Rational Rose2003時(shí),在需選擇安裝項(xiàng)的時(shí)候,只選擇Rational Rose EnterPrise Edition即可,不需選擇其他項(xiàng),之后選擇“DeskTop Installation from CD Image“,一路下一步。出現(xiàn)Mem_pointer_Bad錯(cuò)誤,點(diǎn)擊確定繼續(xù);
2、安裝finish后將彈出的Rational License Key Administrator向?qū)У却翱陉P(guān)閉。若有連接FLEXlm License Server的出錯(cuò)提示框出現(xiàn),也關(guān)閉它們。
安裝會(huì)出現(xiàn) Mem_pointer_Bad 錯(cuò)誤,原因應(yīng)該是某個(gè)函數(shù)因?yàn)榘踩燃?jí)問(wèn)題而無(wú)法運(yùn)行,只要下載一個(gè)SHW32.dll把 ../Rational/Rose/SHW32.dll替換即可。(注:此方法可以避免報(bào)錯(cuò),但是亦可能會(huì)造成Rose新建工程報(bào)Automation錯(cuò)誤,所以此方法基本無(wú)效。。。任他報(bào)錯(cuò)吧!囧)
下載地址: http://www.oyksoft.com/soft/1880.html
3、安裝好Rational Rose Enterprise Editon后,打開(kāi)rose2003crack.rar壓縮包,里面有四個(gè)文件,分別為flexlm.cpl、license.dat、lmgrd.exe、rational.exe。
4、用記事本打開(kāi)license.dat文件,大約在文件的中間位置有:
SERVER MICROSOFT ANY
DAEMON rational "C:\Program Files\Rational\common\rational.exe"
將其修改為:SERVER 計(jì)算機(jī)名 ANY DAEMON rational "自己安裝的目錄\rational.exe"后,保存。
5、將license.dat、 lmgrd.exe 、rational.exe三個(gè)文件一起拷貝到:安裝目錄\rational\common\ 下面。
如:若為默認(rèn)則為:C:\Program Files\Rational\common\目錄。
6、將flexlm.cpl拷貝到C:\Windows\system32目錄下。
7、進(jìn)入控制面板,則在控制面板的上方會(huì)增加了一個(gè)圖標(biāo),即FLEXlm License Manager,將其打開(kāi),在Setup頁(yè)中l(wèi)mgrd.exe右側(cè)目錄寫(xiě)為:C:\Program Files\Rational\Common\lmgrd.exe(若為默認(rèn)安裝目錄)
License File右側(cè)目錄寫(xiě)為:C:\Program Files\Rational\Common\license.dat 點(diǎn)擊“應(yīng)用”。
8、回到Control頁(yè),點(diǎn)擊Start,若出現(xiàn)"Server Started",則表示已經(jīng)成功,可以點(diǎn)擊Status,若狀態(tài)為:計(jì)算機(jī)名:license server UP(MASTER)則成功。

9、這時(shí)可打開(kāi)安裝的Rational Rose Enterprise Edition,若還是出現(xiàn)Error,則打開(kāi)Rational License Key Administrator ,點(diǎn)擊工具欄中的第一個(gè)工具(Start WIzard),點(diǎn)擊下一步,在Server Name中的名字改為自己的計(jì)算機(jī)名,port可以不輸,能進(jìn)入下一個(gè)管理窗口并且沒(méi)出錯(cuò)提示,就代表license server配置成功,Rational的產(chǎn)品應(yīng)該可以運(yùn)行了。


——————————————————————————————————————————————————
更簡(jiǎn)單方法二:
安裝完成后,下載rational_perm.dat覆蓋到Common文件夾即可完成破解,簡(jiǎn)單吧 o(∩_∩)o...哈哈!
###########################################################################
另一版本:
FROM:http://blog.csdn.net/fenglibing/archive/2007/08/17/1747693.aspx
這么好的東西,不拿來(lái)出分享,我對(duì)不起原作者呀。但是我這里不知道作者是誰(shuí),感謝在先了。
http://www.oyksoft.com/soft/1880.html
http://files.cnblogs.com/lixianhuei/rose2003crack.rar
以上兩個(gè)網(wǎng)址分別是用來(lái)下載Rational Rose 2003及其破解軟件的。
1、安裝Rational Rose2003時(shí),在需選擇安裝項(xiàng)的時(shí)候,只選擇Rational Rose EnterPrise Edition即可,不需選擇其他項(xiàng)。
2、安裝好Rational Rose Enterprise Editon后,打開(kāi)rose2003crack.rar壓縮包,里面有四個(gè)文件,分別為flexlm.cpl、license.dat、lmgrd.exe、rational.exe。
3、用記事本或者是EditPlus打開(kāi)license.dat文件,大約在文件的中間位置有:SERVER Microsoft ANY
DAEMON rational “C:\Program Files\Rational\common\rational.exe” 將其修改為:SERVER 計(jì)算機(jī)名 ANY DAEMON rational “自己安裝的目錄\rational.exe”后,保存
注:若是按默認(rèn)目錄安裝,則只需修改計(jì)算機(jī)名即可。
4、將license.dat、 lmgrd.exe 、rational.exe三個(gè)文件一起拷貝到:安裝目錄\rational\common\ 下面。
如:若為默認(rèn)則為:C:\Program Files\Rational\common\目錄。
5、將flexlm.cpl拷貝到system32目錄下。如win2000系統(tǒng)中為C:\WINNT\system32目錄。
6、進(jìn)入控制面板,則在控制面板的上方會(huì)增加了一個(gè)圖標(biāo),即FLEXlm License Manager,將其打開(kāi),在Setup頁(yè)中l(wèi)mgrd.exe右側(cè)目錄寫(xiě)為:C:\Program Files\Rational\Common\lmgrd.exe(若為默認(rèn)安裝目錄)
License File右側(cè)目錄寫(xiě)為:C:\Program Files\Rational\Common\license.dat
7、回到Control頁(yè),點(diǎn)擊Start,若出現(xiàn)”Server Started”,則表示已經(jīng)成功,可以點(diǎn)擊Status,若狀態(tài)為:計(jì)算機(jī)名:license server UP(MASTER)則成功。
8、這時(shí)可打開(kāi)安裝的Rational Rose Enterprise Edition,若還是出現(xiàn)Error,則打開(kāi)Rational License Key Administrator ,點(diǎn)擊工具欄中的第一個(gè)工具(Start WIzard),點(diǎn)擊下一步,在Server Name中的名字改為自己的計(jì)算機(jī)名即可。因現(xiàn)在的學(xué)習(xí)需在使用Rational Rose,所以進(jìn)行了安裝,但確實(shí)花了不少工夫,所以特把自己安裝的經(jīng)驗(yàn)來(lái)跟大家一起分享,希望能對(duì)大家有所幫助。
該文章為轉(zhuǎn)載文章,原文作者應(yīng)該是163.com的blog,但找不到作者blog,只能通過(guò)圖片url找到是163.com的
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
posted @
2012-02-14 11:35 hoojo 閱讀(135796) |
評(píng)論 (24) |
編輯 收藏
SQL Server 數(shù)據(jù)庫(kù)設(shè)計(jì)
一、數(shù)據(jù)庫(kù)設(shè)計(jì)的必要性
二、什么是數(shù)據(jù)庫(kù)設(shè)計(jì)
三、數(shù)據(jù)庫(kù)設(shè)計(jì)的重要
四、數(shù)據(jù)模型
實(shí)體-關(guān)系(E-R)數(shù)據(jù)模型
實(shí)體(Entity)
屬性(Attribute)
關(guān)系(Relationship)
五、數(shù)據(jù)庫(kù)設(shè)計(jì)步驟
1、 需求分析階段
2、 概要設(shè)計(jì)階段
3、 詳細(xì)設(shè)計(jì)階段
六、數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范化
數(shù)據(jù)庫(kù)設(shè)計(jì)中經(jīng)常出現(xiàn)的問(wèn)題
規(guī)范設(shè)計(jì)
規(guī)范化和性能關(guān)系
SQL Server 數(shù)據(jù)庫(kù)基礎(chǔ)編程
Go批處理語(yǔ)句
使用、切換數(shù)據(jù)庫(kù)
創(chuàng)建、刪除數(shù)據(jù)庫(kù)
基本數(shù)據(jù)類型
精確數(shù)字類型
近似數(shù)字類型
日期時(shí)間類型
字符串類型
Unicode字符串類型
二進(jìn)制字符串類型
判斷表或其他對(duì)象及列是否存在
創(chuàng)建、刪除表
給表添加字段、修改字段、刪除字段
添加、刪除約束
插入數(shù)據(jù)
查詢、修改、刪除數(shù)據(jù)
備份數(shù)據(jù)、表
利用存儲(chǔ)過(guò)程查詢表信息
SQL Server Transact-SQL 編程
變量
1、 局部變量(Local Variable)
2、 全局變量(Global Variable
輸出語(yǔ)句
邏輯控制語(yǔ)句
1、 if-else判斷語(yǔ)句
2、 while…continue…break循環(huán)語(yǔ)句
3、 case
4、 其他語(yǔ)句
SQL Server T-SQL高級(jí)查詢
基本常用查詢
嵌套子查詢
# from (select … table)示例
# in, not in子句查詢示例
# exists和not exists子句查詢示例
# some、any、all子句查詢示例
聚合查詢
1、 distinct去掉重復(fù)數(shù)據(jù)
2、 compute和compute by匯總查詢
3、 cube匯總
排序函數(shù)
# row_number函數(shù)
# rank函數(shù)函數(shù)
# dense_rank函數(shù)
# partition by分組子句
# ntile平均排序函數(shù)
集合運(yùn)算
1、 union和union all進(jìn)行并集運(yùn)算
2、 intersect進(jìn)行交集運(yùn)算
3、 except進(jìn)行減集運(yùn)算
公式表表達(dá)式
連接查詢
1、 簡(jiǎn)化連接查詢
2、 left join左連接
3、 right join右連接
4、 inner join內(nèi)連接
5、 cross join交叉連接
6、 自連接(同一張表進(jìn)行連接查詢)
函數(shù)
1、 聚合函數(shù)
2、 日期時(shí)間函數(shù)
3、 數(shù)學(xué)函數(shù)
4、 元數(shù)據(jù)
5、 字符串函數(shù)
6、 安全函數(shù)
7、 系統(tǒng)函數(shù)
8、 配置函數(shù)
9、 系統(tǒng)統(tǒng)計(jì)函數(shù)
10、 用戶自定義函數(shù)
SQL Server 索引和視圖
索引
1、 什么是索引
2、 索引分類
3、 創(chuàng)建索引
4、 適合的創(chuàng)建索引的列
5、 不適合創(chuàng)建索引的列
視圖
1、 什么是視圖
2、 創(chuàng)建視圖準(zhǔn)則
3、 創(chuàng)建視圖
4、 修改視圖
5、 加密視圖
SQL Server 存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程的概念
1、 存儲(chǔ)過(guò)程的優(yōu)點(diǎn)
A、 存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件式編程
B、 存儲(chǔ)過(guò)程能夠?qū)崿F(xiàn)較快的執(zhí)行速度
C、 存儲(chǔ)過(guò)程減輕網(wǎng)絡(luò)流量
D、 存儲(chǔ)過(guò)程可被作為一種安全機(jī)制來(lái)充分利用
系統(tǒng)存儲(chǔ)過(guò)程
用戶自定義存儲(chǔ)過(guò)程
1、 創(chuàng)建語(yǔ)法
2、 創(chuàng)建不帶參數(shù)存儲(chǔ)過(guò)程
3、 修改存儲(chǔ)過(guò)程
4、 帶參存儲(chǔ)過(guò)程
5、 帶通配符參數(shù)存儲(chǔ)過(guò)程
6、 帶輸出參數(shù)存儲(chǔ)過(guò)程
7、 不緩存存儲(chǔ)過(guò)程
8、 加密存儲(chǔ)過(guò)程
9、 帶游標(biāo)參數(shù)存儲(chǔ)過(guò)程
10、 分頁(yè)存儲(chǔ)過(guò)程
Raiserror
SQL Server 事務(wù)、異常和游標(biāo)
事務(wù)
1、 事務(wù)的特點(diǎn)
原子性
一致性
隔離性
持久性
2、 事務(wù)的模式
a、 顯示事務(wù)
b、 自動(dòng)提交事務(wù)
c、 隱式事務(wù)
3、 事務(wù)處理
a、 begin transaction語(yǔ)句
b、 commit transaction語(yǔ)句
c、 rollback transaction語(yǔ)句
4、 事務(wù)的示例
異常
# 示例:用異常處理錯(cuò)誤信息
# 示例:異常能處理的錯(cuò)誤信息
# 示例:無(wú)法提交的事務(wù)
# 示例:處理異常日志信息
游標(biāo)
1、游標(biāo)實(shí)際功能
2、游標(biāo)的基本操作
A、 定義游標(biāo)
B、 打開(kāi)游標(biāo)
C、 檢索游標(biāo)
D、 關(guān)閉游標(biāo)
E、 刪除游標(biāo)
3、游標(biāo)操作示例
SQL Server 觸發(fā)器
什么是觸發(fā)器
DML觸發(fā)器分為:
1、 after觸發(fā)器(之后觸發(fā))
a、 insert觸發(fā)器
b、 update觸發(fā)器
c、 delete觸發(fā)器
2、 instead of 觸發(fā)器 (之前觸發(fā))
創(chuàng)建觸發(fā)器
# 創(chuàng)建insert類型觸發(fā)器
# 創(chuàng)建delete類型觸發(fā)器
# 創(chuàng)建update類型觸發(fā)器
# update更新列級(jí)觸發(fā)器
# instead of類型觸發(fā)器
# 創(chuàng)建instead of觸發(fā)器
# 顯示自定義消息raiserror
# 修改觸發(fā)器
# 啟用、禁用觸發(fā)器
# 查詢創(chuàng)建的觸發(fā)器信息
# 示例,驗(yàn)證插入數(shù)據(jù)
# 示例,操作日志
SQL Server 數(shù)據(jù)庫(kù)安全