組件式編程
A. 面向組件編程是什麼
所有的軟體技術和思想的出現都是為了解決所在的那個年代軟體開發的復雜性,對象技術和組件技術也不例外。當然還有很多其它技術,像DBC(契約式編程)、AOP、MDA等,這些思想都在影響我們設計/實現程序的方式,但無可否認的是,當今最主流的編程技術是對象技術和組件技術。 面向對象技術已經成熟的發展將近20年了,關於這方面的經典書籍和論文也隨處可見。為了解決更大的系統的復雜度,組件技術應運而生,在windows平台上,組件從最初的動態鏈接庫到COM,在到現在的中間件、.NET,就是組件思想走過的軌跡。
面向對象技術的基礎是封裝--介面與實現分離,面向對象的核心是多態--這是介面和實現分離的更高級升華,使得在運行時可以動態根據條件來選擇隱藏在介面後面的實現,面向對象的表現形式是類和繼承。面向對象的主要目標是使系統對象化,良好的對象化的結果,就是系統的各部分更加清晰化,耦合度大大降低。
面向組件技術建立在對象技術之上,它是對象技術的進一步發展,類這個概念仍然是組件技術中一個基礎的概念,但是組件技術更核心的概念是介面。組件技術的主要目標是復用--粗粒度的復用,這不是類的復用,而是組件的復用,如一個dll、一個中間件,甚至一個框架。一個組件可以有一個類或多個類及其它元素(枚舉、)組成,但是組件有個很明顯的特徵,就是它是一個獨立的物理單元,經常以非源碼的形式(如二進制,IL)存在。一個完整的組件中一般有一個主類,而其它的類和元素都是為了支持該主類的功能實現而存在的。為了支持這種物理獨立性和粗粒度的復用,組件需要更高級的概念支撐,其中最基本的就是屬性和事件,在對象的技術中曾一度困擾我們的類之間的相互依賴問題/消息傳遞問題,迄今為止我所知道最好的解決方案就是事件。要理解組件思想,首先要理解事件的思想和機制。
我一直堅持以為,一個組件的外形/外貌應該是簡單的、應該是清晰的、沒有冗餘的東西、也沒有無關緊要的東西,這個外貌通過介面來描述,介面中可以發布事件、屬性和方法。這三種元素就足以描述一個組件外貌的所有特徵。比如,我曾經用封裝的一個完成埠組件,其外貌介面中只有四個方法,三個事件,三個屬性而已,而該組件的內部實現卻有幾千行代碼。所以在設計一個組件的時候,需要做很多的權衡,哪些需要通過介面暴露出來,哪些應當作為私有實現。有時,你會處於兩難的境地,因為讓組件更容易使用,所以需要給出很多默認的參數,但為了使該組件更通用,你又需要暴露更多的屬性可以讓人設定、暴露更多的方法和事件滿足更復雜的功能。你需要抉擇,你需要權衡。難怪有人會說,軟體的設計更像是藝術,因為藝術的美在於恰當的抉擇和平衡。我的經驗是,在保持低耦合度的前提下,組件的介面足以對付當前的應用就好。如果日後需要加強功能,那就重構然後增強它,這是很容易的,因為早就說了嘛,保持組件的低耦合度。
需要說明一下的是,我們通常所說的控制項(如按鈕)也是一種組件,可以這么認為,控制項是一種具有UI形式的組件。插件(Addin/Plugin)也是一種特殊的組件,插件的單獨存在是沒有意義的,它是由兼容該插件協議的框架所使用。
最後強調一點,組件的目標是粗粒度的復用,組件的核心是介面。
B. 面向對象,面向服務,面向組件三種編程模式有什麼區別
我講講我的理解,可能講得也不合適:
面向對象:以對象方式編程而非過程式,是與面向過程相對應的概念。
面向服務:這是平台級應用才會使用的方式,是為了模塊化系統結構,各子系統之間以服務方式通信,為的是降低項目復雜度,耦合性。
面向組件:組件是對功能的抽象,既把一組通用的功能做成一個工具一樣使用,如 Tocmat 中的 Server Service Engine 等概念。
這些概念的主題都是為了使我們更方便地寫代碼,維護系統。
C. 什麼叫組件化開發
張克軍 提出的「組件化就是函數式界面開發」這一說法我是難以接受的,函數式界面開發就讓它好好地叫「函數式組件化」吧,不然我們會在所謂的「傳統UI框架」和「函數式界面開發」之間出現一個Gap,豈不是又要造個詞給填上,多累……
我前面說會有一個Gap,這個Gap很可能就是我們現在想用「組件化」這個定義去表達的一些點,我想在此做一些個人的見解
我將之理解為以下幾要素:
組件是對邏輯的封裝,不限於圖形元素。即我們可以把if做成組件、把一個倒計時做成組件、把一段動畫做成組件、把路由做成組件、把數據架構做成組件,而這些並不能稱為控制項
組件具備單個可移植性,即「隨載入隨用」,不需要為其准備復雜的基礎條件(如引入樣式、引入框架等)。然而這一點現有那些所謂組件庫做得並不好,技術上也不大現實
組件是聲明式定義的,而非命令式。這個不想多說,很大程度上是自己主觀的一個想法
而上面最重要的就是第一點,所以要問我什麼是「組件化開發」,我的說法是:
把圖形、非圖形的各種邏輯均抽象為一個統一的概念(組件)來實現開發的模式
這與傳統開發框架的最大區別就是統一了圖形元素與非圖形元素,除此之外我再想不出其它真正體現區別的點了
在這個概念下,包括router、ajax、mole loader、timer、animation、interval等,都是組件,共享統一的生命周期管理和對外介面,且都是聲明式地進行組合
我的一位同事告訴我去年的深JS上,有位淘寶的朋友的話題叫做「前端組件服務化」,這裡面提的那些個概念,是很符合我對「組件化」的認識的,他要是不給再強安個「服務化」的噱頭就好了- -
不過話說回來,在這個要求之下,組件其實不是那麼好進行抽象設計的,隨便說幾個例子,有難的也有簡單的:
非圖形元素的各種需求如何統一介面,如timer和ajax
組件可以橫向組件,但是縱向復用如何解決,如希望任何圖形元素都可以實現被滑鼠拖拽的效果,則滑鼠拖拽應該也是個組件,這個組件與其它組件的關系是什麼
有些組件對其可被組合的組件是有要求的,比如HTML里就不大好意思把一個<p>放進一個<span>里,這一點如何在組件上表達(實現不難,表達比較難)
一些我們原本想當然認為純的小函數的東西,是不是也能當組件玩,比如underscore.pick要不要也是個組件
D. vb編程是什麼意思,主要幹嘛的
VB程序開發的基本流程是:界面設計(放置窗體和控制項)――屬性設置(設置窗體、控制項的屬性)――編寫代碼――運行調試。其優點是在窗體上添加控制項並設置屬性後就可完成界面的設計使程序員輕易的就可完成界面的設計,而無需過多的進行設計和編程。只需調用預先准備好的、經過測試的、完全就緒的模塊就可完成所需實現的功能。這種備用性的軟體模塊被稱作――組件。窗體和各種控制項就是組件。
VB編程的核心思想就是組件編程。VB是最早引入組件編程的概念,其後被其它語言所採用並成為一種標准,如VC++、Delphi、PowerBuilder都採用組件編程模型,並採用面向對象編程技術,成為當今程序設計的發展方向之一。
VB編程時,因為使用組件技術,所以不必從底層的窗體、控制項開始設計,可以向工廠通過各種部件組裝生產機器一樣,通過微軟或第三方提供的組件,組裝成所需的程序。用什麼組裝?就是用VB的代碼,其作用就像膠水一樣,用有限的代碼和組件聯結成一體。最後形成一個完整的應用程序。
如果沒有現成的組件或需要創建一個新類時,就需要編寫代碼。 組件的種類很多,有多少組件可用,各組件有什麼作用,這需要在實踐中不斷摸索。
E. 面向對象,面向服務,面向組件三種編程模式有什麼區別
三個數據後面都缺了一個詞,分別是:「編程」、「架構」和「開發」(或「軟體工程」)。 同時,不是「面向」組件而是「基於」組件。
面向對象編程(Object-Oreinted Programming) 是一種編程範式。指在設計程序時大量運用類實例對象的方式。OOP一旦在項目中被運用,就成了時刻要考慮的東西。
面向服務架構(Service-Oreinted Architecture) 是將軟體設計成一組可互操作的服務的一套原則或方法論。通常在考慮系統架構時才會觸及SOA。
基 於組件開發(Component-Based Development) 是一種軟體工程實踐,設計時通常要求組件之間高內聚,松耦合。其介面可能是OO的,調用方式可能是以Service的方式。基於組件開發關注系統層次、子 系統邊界和子系統間通訊的的設計,處於代碼層面但不像OOP的一樣是時刻需要運用的東西。
三者身處軟體開發的不同層面,因此說他們用於「哪些領域」並不恰當。不論是哪個領域的軟體開發,都可能要同時面對OOP、SOA和CBD。
F. VB編程水仙花數
VB實現水仙花數的程序代碼如下:
PrivateSubCommand_Click()
Fornum=100To999
a=numMod10
b=num10Mod10
c=num100
Ifa^3+b^3+c^3=numThenPrintnum
Nextnum
EndSub
實現具體步驟如下:
1.啟動VB程序,新建一個標準的exe項目,如下圖。
(6)組件式編程擴展閱讀:
C語言實現水仙花數的代碼:
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
inti,j,k,n;
printf("'waterflower'numberis:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出個位*/
if(n==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf(" ");
}
注意事項:
VB編程的核心思想是組件編程。VB是最早引入組件編程的概念,然後被其他語言採用並成為標准,如vc++、Delphi、PowerBuilder等都採用了組件編程模型,並利用面向對象的編程技術,成為當今程序設計的發展方向之一。
VB編程,由於採用了組件技術,所以不必從底層開始窗體,控制設計,可以由工廠通過各種零件裝配生產機器,通過Microsoft或第三方提供的組件,裝配成所需的程序。與什麼?VB是代碼,它像膠水一樣,把有限的代碼和組件粘合在一起。結果是一個完整的應用程序。
VB有一個圖形用戶界面(GUI)和快速應用程序開發(RAD)系統,可以很容易地使用s、RDO、ADO連接到資料庫,或者很容易地創建活動的X控制項,從而高效地生成類型安全的和面向對象的應用程序。
程序員可以使用VB提供的組件輕鬆快速地構建應用程序。VB的組件既可以擁有用戶界面,也可以沒有。這樣一來伺服器端程序就可以處理增加的模塊。
VB使用參數計算的方法來進行垃圾收集,這個方法中包含有大量的對象,提供基本的面向對象支持。因為越來越多組件的出現,程序員可以選用自己需要的擴展庫。