📄 oobject102306.htm
字号:
</font><font color="#000000">以及訊息</font><font face="Comic Sans MS"><font color="#000000">(Message)</font></p>
<li>
<p class="MsoNormal" style="MARGIN: 0pt 0cm 6pt; TEXT-INDENT: 24pt"></font><font color="#000000">繼承</font><font face="Comic Sans MS" color="#000000">(Inheritance)</font><font color="#000000">。</font></p>
<li>
<p class="MsoNormal" style="MARGIN: 0pt 0cm 6pt; TEXT-INDENT: 24pt"><font color="#000000">封裝</font><font face="Comic Sans MS" color="#000000">(Encapsulation)</font><font color="#000000">。</font></p>
<li>
<p class="MsoNormal" style="MARGIN: 0pt 0cm 6pt; TEXT-INDENT: 24pt"><font color="#000000">動態連結</font><font face="Comic Sans MS" color="#000000">(Dynamic
Binding)</font><font color="#000000">。</font></p>
</li>
</ol>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">而其中繼承、封裝、動態連結則又是物件導向中,最重要也具盛名的特性,所以很多人都據此來評斷,哪種語言或工具是不是支援
</font><font face="Comic Sans MS" color="#000000">OO</font><font color="#000000">,特別是我們可以在一些論壇之中,常常可以見到諸如這樣的評語:『</font><font face="Comic Sans MS" color="#000000">VB
</font><font color="#000000">不支援類別(</font><font face="Comic Sans MS" color="#000000">Class</font><font color="#000000">)的繼承概念,同時也不支援資訊封裝的方法,所以
</font><font face="Comic Sans MS" color="#000000">VB </font><font color="#000000">不是一個
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">程式語言』、『</font><font face="Comic Sans MS" color="#000000">Java
</font><font color="#000000">由於不支援指標型態,因此更能徹底封裝類別的資訊,跟
</font><font face="Comic Sans MS" color="#000000">C++ </font><font color="#000000">比較起來更能貼近
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">的精神』然而對於這些評語,筆者姑且不討論他們之間的對錯,只是覺得發表這些評論的人,把上述
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">的特性,當作是個『定理』來遵從了,所以才造成論壇中的烽煙四起、口水肆溢的現象出現。其實,事實上在各家程式語言之中,對於
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">支援的程度都不一致,特別是連號稱
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">的先驅
</font><font face="Comic Sans MS" color="#000000">C++ </font><font color="#000000">都是如此,所以如果我們硬是以某一種語言作為標準,來評斷其他語言作法上並不公平。因此筆者根據
</font><font face="Comic Sans MS" color="#000000">Brad Cox </font><font color="#000000">所公布的
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">特性,在此大膽的進行一項假設,『<b>凡是支援繼承、封裝、動態連結的程式語言或工具,我們可以說它們是支援
</b></font><b><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">的,反之則亦然</font></b><font color="#000000">』。現在我們就對這個假設開始進行驗證,不過在此之前我們首先對剛剛所謂的
</font><font face="Comic Sans MS" color="#000000">OO </font><font color="#000000">特性進行以下的定義:</font></p>
<ol>
<li>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">繼承
</font><font face="Comic Sans MS" color="#000000">→ Source </font><font color="#000000">的
</font><font face="Comic Sans MS" color="#000000">Reuse</font><font color="#000000">。</font></p>
<li>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">封裝
</font><font face="Comic Sans MS" color="#000000">→ </font><font color="#000000">保護程式中的資訊,是透過驗證過的程序來存取。</font></p>
<li>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">動態連結
</font><font face="Comic Sans MS" color="#000000">→ </font><font color="#000000">於執行時期決定執行物件的種類與分法。</font></p>
</li>
</ol>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">我們以繼承與封裝為例,並且以素有
</font><font color="#000000"><font face="Comic Sans MS">OO </font>之稱的
<font face="Comic Sans MS">Delphi</font>,與不支援 <font face="Comic Sans MS">OO
</font>的 <font face="Comic Sans MS">VB </font>兩種工具,來逐一比對它們之間的差異。</font></p>
<div style="BORDER-RIGHT: 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: 2px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 2px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN: 0px 0cm 0px 0pt; TEXT-INDENT: 24pt"><span lang="EN-US"><font face="Comic Sans MS"><font color="#000000"> </font></font></span><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS">type</span></font></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
TA = class(TObject)</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
public</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
procedure SayHello;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
end;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
TB = class(TA)</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
public</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
procedure SayHello;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
end;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TB.SayHello;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
Inherited;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
ShowMessage('Hello by Class B ...');</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">procedure
TA.SayHello;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">begin</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
ShowMessage('Hello by Class A ...');</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">end;</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Comic Sans MS" color="#000000"> </font></span></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">上面的範例是一個簡單繼承的例子,我們可以看出其中的繼承關係,其實只不過是從一個函數再去呼叫另一個函數而已,所以如果單單從這個觀點來看的話,</font><font face="Comic Sans MS" color="#000000">VB
</font><font color="#000000">也是可以做的到的。</font></p>
<div style="BORDER-RIGHT: 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: 2px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: 2px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 2px solid; BACKGROUND-COLOR: #ffccff">
<p class="MsoNormal" style="MARGIN: 0px 0cm 0px 0pt; TEXT-INDENT: 24pt"><span lang="EN-US"><font face="Comic Sans MS"><font color="#000000"> </font></font></span><font color="#000000"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS">TC
= class(TObjct)</span></font></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
private</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
FCaption: String;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
function GetCaption: String;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
procedure SetCaption(const Value: String);</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
public</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
property Caption: String read GetCaption write SetCaption;</font></span></p>
<p class="MsoNormal" style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; TEXT-INDENT: 27pt"><span lang="EN-US" style="FONT-FAMILY: Comic Sans MS"><font color="#000000">
end;</font></span></p>
</div>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000"> </font></p>
<p class="MsoNormal" style="MARGIN: 6pt 0cm 12pt; TEXT-INDENT: 24pt"><font color="#000000">上面是一個資訊封裝的例子,其中屬性
</font><font face="Comic Sans MS" color="#000000">Caption </font><font color="#000000">必須透過
</font><font face="Comic Sans MS" color="#000000">GetCaption </font><font color="#000000">與
</font><font face="Comic Sans MS" color="#000000">SetCaption </font><font color="#000000">這兩個方法才能存取得到,目的在於保護
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -