軟體對象
軟體對象實際上是現實世界對象的造型,因為它同樣有狀態和行為。一個軟體對象利用一個或者多個變數來維持它的狀態。變數是由用戶標識符來命名的數據項。軟體對象用它的方法來執行它的行為。方法是跟對象有關聯的函式(子程式)。
對象是理解面向對象技術的關鍵。用戶在學習之前可以看看現實生活中的對象,比如狗、桌子、電視、腳踏車等等。用戶可以發現現實世界中的對象有兩個共同特徵:它們都有狀態和行為。比如狗有自己的狀態(比如名字、顏色、生育以及飢餓等等)和行為(比如搖尾巴等等)。同樣腳踏車也有自己的狀態(比如當前檔位、兩個輪子等等)和行為(比如剎車、加速、減速以及改變檔位等等)。
套用
你可以利用軟體對象來代表現實世界中的對象。你可能想用一個動畫程式來代表現實世界中的狗,或者用可以控制電子腳踏車的程式來代表現實世界的腳踏車。同樣你可以使用軟體對象來造型抽象的概念,比如,事件是一個用在GUI視窗系統的公共對象,它可以代表用戶按下滑鼠按鈕或者鍵盤上的按鍵的反應。
如圖1是一個軟體對象的公共可視代表。軟體對象的狀態和行為都可以用在對象中的變數和方法來表達。構造現實世界的腳踏車的軟體對象要有指示腳踏車的當前狀態的變數:速度為20mps,它的當前檔位為第三檔。這些變數就是我們熟知的實例變數,因為它們包含了用於特殊腳踏車對象的狀態,並且在面向對象技術中,特殊的對象稱為實例。如圖2所示,是作為軟體對象的腳踏車造型。除了變數,軟體腳踏車同樣有用於剎車、改變踏板步調以及改變檔位的方法。這些方法就是熟知的實例方法因為它們檢查或者改變特殊腳踏車實例的狀態。
以上的對象圖顯示了對象的變數組成了圓心部分。方法處在變數的四周並且在程式中從其它對象隱藏了對象的核心。用保護方法的方法來包裝對象的變數稱為封裝。這個對象圖就是對象理想的表示法,也是面向對象系統設計者努力的最後目標。然而這並不是全部的內容。通常,出於某種現實的理由,對象可能暴露它的一些變數或者隱藏一些方法。在JAVA程式語言中,一個對象可以為變數和方法指定四種訪問等級中的一種。這個訪問等級決定哪個對象和類可以訪問變數或者方法。
軟體集
總述
在JAVA中訪問變數和方法可以轉換為控制訪問類的成員函式。封裝相關的變數和方法到一個簡潔的軟體集是一個簡單而且強有力的方法。
模組性
對象的原始碼可以獨立於其它的對象原始碼來進行編寫和維護。同樣,對象可以很容易地在系統中傳遞。你可以將你的腳踏車對象給其它的對象,它仍然可以正常工作。
信息隱藏
一個對象如果有一個公共的界面,那么其它的對象就可以與之進行通訊。這個對象可以維護私人的信息和方法,它可以在任何時候被改變而不影響依賴於它的其它對象。所以你不必理解腳踏車中齒輪的機理就可以使用它。
創建原因
自定義對象本身不會自動地在代碼中加入新功能。通常情況下,為達到相同的效果,可以使用另一種不涉及創建對象的方法。這些對象所能做的就是使複雜的操作看起來更簡單,使複雜的應用程式更加具有自我說明性和可維護性,使需要幾小時才能編完代碼的程式對您自己和其他程式設計師而言可重複利用性更強。實際上,創建自定義對象是一種將代碼包裝起來供其他 Microsoft® Visual Basic® for Applications (VBA)程式設計師使用的方法,因為與其指出如何調用您的代碼,不如使他們能象使用任何內置對象一樣使用您的自定義對象。 您可以創建完整的自定義對象模型,這些模型在後台有複雜的代碼,但顯示給程式設計師的應只是相對簡單和直觀的對象語法。事實上,這就是所有 Microsoft® Office 和 VBA 對象模型為您所做的一切,它們把複雜的操作包裝在易於使用的對象、方法、屬性和事件中。例如,當您將 Microsoft® Excel 對象的 Visible 屬性設為 False 時,不必擔心 VBA、Excel 和 Windows 如何協作以隱藏該對象。您可以把精力集中在創建應用程式這一更高目標上
簡單性和可重複利用性自然要有代價。創建自定義對象和對象模型需要一種思考方法,這種方法比起您在 VBA 中已經習慣的那種編程思考方法是不同的,甚至可能是革命性的不同。掌握它會花一些時間。但從長遠來看,用對象編代碼可以提高效率,磨練設計技巧,更容易重複利用代碼,從而能使您成為更好的程式設計師。
定義用法
定義一個嵌入的對象。請使用此元素向您的 XHTML 頁面添加多媒體。此元素允許您規定插入 HTML 文檔中的對象的數據和參數,以及可用來顯示和運算元據的代碼。
<object> 標籤用於包含對象,比如圖像、音頻、視頻、Java applets、ActiveX、PDF 以及 Flash。
object 的初衷是取代 img 和 applet 元素。不過由於漏洞以及缺乏瀏覽器支持,這一點並未實現。
瀏覽器的對象支持有賴於對象類型。不幸的是,主流瀏覽器都使用不同的代碼來載入相同的對象類型。
而幸運的是,object 對象提供了解決方案。如果未顯示 object 元素,就會執行位於 <object> 和 </object> 之間的代碼。通過這種方式,我們能夠嵌套多個 object 元素(每個對應一個瀏覽器)。
實例
向 HTML 代碼添加一個對象:
<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="50">
<param name="BorderStyle" value="1" />
<param name="MousePointer" value="0" />
<param name="Enabled" value="1" />
<param name="Min" value="0" />
<param name="Max" value="10" /></object>
瀏覽器支持
幾乎所有主流瀏覽器都擁有部分對 <object> 標籤的支持。
提示
注釋:<param> 標籤定義用於對象的 run-time 設定。
注釋:不要對圖像使用 <object> 標籤,請使用 <img> 標籤代替。
屬性
可選的屬性
屬性 | 值 | 描述 | DTD |
align | leftrighttopbottom | 定義圍繞該對象的文本對齊方式。 | TF |
archive | URL | 由空格分隔的指向檔案檔案的 URL 列表。 | STF |
border | pixels | 定義對象周圍的框線。 | TF |
classid | class ID | 定義嵌入 Windows Registry 中或某個 URL 中的類的 ID 值, | STF |
codebase | URL | 定義在何處可找到對象所需的代碼,提供一個基準 URL。 | STF |
codetype | MIME type | 通過 classid 屬性所引用的代碼的 MIME 類型。 | STF |
data | URL | 定義引用對象數據的 URL。 | STF |
declare | declare | 定義此對象僅可被聲明 | STF |
height | pixels | 定義對象的高度。 | STF |
hspace | pixels | 定義對象周圍水平方向的空白。 | TF |
name | unique_name | 為對象定義特定的名稱(以便在腳本中使用)。 | STF |
standby | text | 定義當對象正在載入時所顯示的文本。 | STF |
type | MIME_type | 定義被規定在 data 屬性中指定的檔案中出現的數據的 MIME 類型。 | STF |
usemap | URL | 規定與對象一同使用的客戶端圖像映射的 URL。 | STF |
vspace | pixels | 定義對象的垂直方向的空白。 | TF |
width | pixels | 定義對象的寬度。 | STF |
標準屬性
id, class, title, style, dir, lang, xml:lang,ref,contenteditable,irrelevant,draggable,tabindex
事件屬性
accesskey, tabindex, onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup。