perl面向?qū)ο骭第1頁(yè)
perl面向?qū)ο骭第2頁(yè)
perl面向?qū)ο骭第3頁(yè)
perl面向?qū)ο骭第4頁(yè)
perl面向?qū)ο骭第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 十 三 章per l 的 面 向 對(duì) 象 編 程b y f l am ep h oen i x一 、 模 塊 簡(jiǎn) 介二 、 per l 中 的 類三 、 創(chuàng) 建 類四 、 構(gòu) 造 函 數(shù)實(shí) 例 變 量五 、 方 法六 、 方 法 的 輸 出七 、 方 法 的 調(diào) 用八 、 重 載九 、 析 構(gòu) 函 數(shù)十 、 繼 承十 一 、 方 法 的 重 載十 二 、 pe rl 類 和 對(duì) 象 的 一 些 注 釋本 章 介 紹 如 何 使 用pe r l 的 面 向 對(duì) 象 編 程 ( o op) 特 性 及 如 何 構(gòu) 建 對(duì) 象 , 還 包 括 繼承 、 方 法 重 載 和 數(shù) 據(jù) 封 裝 等 內(nèi)

2、 容 。一 、 模 塊 簡(jiǎn) 介模 塊 ( mo du l e) 就 是 per l 包 ( pac hag e) 。 per l 中 的 對(duì) 象 基 于 對(duì) 包 中 數(shù) 據(jù) 項(xiàng) 的 引 用 。( 引 用 見(jiàn) 第 x 章 引 用 ) 。詳 見(jiàn) h tt p: / w w w. met r o n et. com 的 p er l m o d 和per l ob j 。在 用 其 它 語(yǔ) 言 進(jìn) 行 面 向 對(duì) 象 編 程 時(shí) , 先 聲 明 一 個(gè) 類 然 后 創(chuàng) 建 該 類 的 對(duì) 象 ( 實(shí)例 ) , 特 定 類 所 有 對(duì) 象 的 行 為 方 式 是 相 同 的 , 由 類 方 法 確 定

3、 , 可 以 通 過(guò) 定 義 新 類或 從 現(xiàn) 存 類 繼 承 來(lái) 創(chuàng) 建 類 。已 熟 悉 面 向 對(duì) 象 編 程 的 人 可 以 在 此 遇 到 許 多 熟 悉 的 術(shù)語(yǔ) 。 per l 一 直 是 一 個(gè) 面 向 對(duì) 象 的 語(yǔ) 言 , 在per l 5 中 , 語(yǔ) 法 略 有 變 動(dòng) , 更 規(guī) 范 化 了對(duì) 象 的 使 用 。下 面 三 個(gè) 定 義 對(duì) 理 解 對(duì) 象 、 類 和 方 法 在pe rl 中 如 何 工 作 至 關(guān) 重 要 。 . 類 是 一 個(gè)per l 包 , 其 中 含 提 供 對(duì) 象 方 法 的 類 。 . 方 法 是 一 個(gè) per l 子 程 序 , 類 名

4、 是 其 第 一 個(gè) 參 數(shù) 。 . 對(duì) 象 是 對(duì) 類 中 數(shù) 據(jù) 項(xiàng) 的 引 用 。二 、 per l 中 的 類再 強(qiáng) 調(diào) 一 下 , 一 個(gè)pe r l 類 是 僅 是 一 個(gè) 包 而 已 。 當(dāng) 你 看 到per l 文 檔 中 提 到 “ 類 ”時(shí) , 把 它 看 作 “ 包 ” 就 行 了 。 per l 5 的 語(yǔ) 法 可 以 創(chuàng) 建 類 , 如 果 你 已 熟 悉c + +, 那 么大 部 分 語(yǔ) 法 你 已 經(jīng) 掌 握 了 。 與per l 4 不 同 的 概 念 是 用 雙 冒 號(hào) (: :) 來(lái) 標(biāo) 識(shí) 基 本 類 和繼 承 類 ( 子 類 ) 。面 向 對(duì) 象 的 一

5、 個(gè) 重 要 特 性 是 繼 承 。 per l 中 的 繼 承 特 性 與 其 它 面 向 對(duì) 象 語(yǔ) 言 不完 全 一 樣 , 它 只 繼 承 方 法 , 你 必 須 用 自 己 的 機(jī) 制 來(lái) 實(shí) 現(xiàn) 數(shù) 據(jù) 的 繼 承 。因 為 每 個(gè) 類 是 一 個(gè) 包 ,所 以 它 有 自 己 的 名 字 空 間 及 自 己 的 符 號(hào) 名 關(guān) 聯(lián) 數(shù) 組( 詳見(jiàn) 第 x 章 關(guān) 聯(lián) 數(shù) 組 ) , 每 個(gè) 類 因 而 可 以 使 用 自 己 的 獨(dú) 立 符 號(hào) 名 集 。 與 包 的 引 用 結(jié)合 , 可 以 用 單 引 號(hào) ( ) 操 作 符 來(lái) 定 位 類 中 的 變 量 , 類 中 成 員

6、 的 定 位 形 式 如 :$ cl ass$ memb er 。 在per l 5 中 , 可 用 雙 冒 號(hào) 替 代 單 引 號(hào) 來(lái) 獲 得 引 用 , 如 :$ cl ass$ memb er 與 $cl a ss: $ mem b er 相 同 。三 、 創(chuàng) 建 類 。本 節(jié) 介 紹 創(chuàng) 建 一 個(gè) 新 類 的 必 要 步 驟 。 下 面 使 用 的 例 子 是 創(chuàng) 建 一 個(gè) 稱 為co coa的 簡(jiǎn) 單 的 類 , 其 功 能 是 輸 出 一 個(gè) 簡(jiǎn) 單 的jav a 應(yīng) 用 的 源 碼 的 必 要 部 分 。 放 心 , 這個(gè) 例 子 不 需 要 你 有 jav a 的 知 識(shí)

7、, 但 也 不 會(huì) 使 你 成 為ja va 專 家 , 其 目 的 是 講 述 創(chuàng)建 類 的 概 念 。首 先 , 創(chuàng) 建 一 個(gè) 名 為c oco a. pm 的 包 文 件 ( 擴(kuò) 展 名pm 是 包 的 缺 省 擴(kuò) 展 名 , 意 為pe rl m o du l e) 。 一 個(gè) 模 塊 就 是 一 個(gè) 包 , 一 個(gè) 包 就 是 一 個(gè) 類 。 在 做 其 它 事 之 前 , 先加 入 “ 1; ” 這 樣 一 行 , 當(dāng) 你 增 加 其 它 行 時(shí) , 記 住 保 留 “ 1 ;” 為 最 后 一 行 。 這 是pe r l 包的 必 需 條 件 , 否 則 該 包 就 不 會(huì) 被

8、per l 處 理 。 下 面 是 該 文 件 的 基 本 結(jié) 構(gòu) 。p ack ag e c o co a;# pu t r eq u i r e statem en ts i n f o r al l r equ i r ed,i m p or ted p ackag es# ju st add co de h er e#1 ; # ter mi na te t h e pa ck age w i th t h e r eq u i r ed 1 ;接 下 來(lái) ,我 們 往 包 里 添 加 方 法 使 之 成 為 一 個(gè) 類 。第 一 個(gè) 需 添 加 的 方 法 是n ew ( ),它 是

9、 創(chuàng) 建 對(duì) 象 時(shí) 必 須 被 調(diào) 用 的 , new ( ) 方 法 是 對(duì) 象 的 構(gòu) 造 函 數(shù) 。四 、 構(gòu) 造 函 數(shù)構(gòu) 造 函 數(shù) 是 類 的 子 程 序 , 它 返 回 與 類 名 相 關(guān) 的 一 個(gè) 引 用 。 將 類 名 與 引 用 相 結(jié)合 稱 為 “ 祝 福 ” 一 個(gè) 對(duì) 象 , 因 為 建 立 該 結(jié) 合 的 函 數(shù) 名 為bl ess( ) , 其 語(yǔ) 法 為 :b l ess y ere fer en ce ,cl assn amey er ef ere n ce 是 對(duì) 被 “ 祝 福 ” 的 對(duì) 象 的 引 用 , c l assn am e 是 可 選 項(xiàng)

10、 , 指 定 對(duì) 象 獲取 方 法 的 包 名 , 其 缺 省 值 為 當(dāng) 前 包 名 。創(chuàng) 建 一 個(gè) 構(gòu) 建 函 數(shù) 的 方 法 為 返 回 已 與 該 類 結(jié) 合 的 內(nèi) 部 結(jié) 構(gòu) 的 引 用 , 如 :sub new my$t hi s = ; # c r eat e an an on y m ou s h ash, and #sel f po i n t s t o i t.b l ess $t hi s; # c o nn ect t he h ash t o th e package c o c oa.r etu r n $ th i s; # r et ur n th e r

11、 ef er en ce to t he h ash.1 ; 創(chuàng) 建 一 個(gè) 對(duì) 不 含 鍵 / 值 對(duì) 的 哈 希 表 ( 即 關(guān) 聯(lián) 數(shù) 組 ) 的 引 用 , 返 回 值 被 賦 給 局 域變 量 $ th i s。 函 數(shù)bl ess( ) 取 出 該 引 用 , 告 訴 對(duì) 象 它 引 用 的 是c o co a, 最 后 返 回 該 引用 。 函 數(shù) 的 返 回 值 現(xiàn) 在 指 向 這 個(gè) 匿 名 哈 希 表 。從new () 函 數(shù) 返 回 后 , $t hi s 引 用 被 銷 毀 , 但 調(diào) 用 函 數(shù) 保 存 了 對(duì) 該 哈 希 表 的 引用 , 因 此 該 哈 希 表 的

12、 引 用 數(shù) 不 會(huì) 為 零 , 從 而 使per l 在 內(nèi) 存 中 保 存 該 哈 希 表 。 創(chuàng)建 對(duì) 象 可 如 下 調(diào) 用 :$ cu p = n ew co c oa;下 面 語(yǔ) 句 為 使 用 該 包 創(chuàng) 建 對(duì) 象 的 例 子 :1 # ! /u sr /b i n /p er l2 p u sh ( in c , pw d ) ;3 u se co coa;4 $ cup = n ew c o co a;第 一 行 指 出 per l 解 釋 器 的 位 置 , 第 二 行 中 , 將 當(dāng) 前 目 錄 加 到 路 徑 尋 找 列 表i n c 中 供 尋 找 包 時(shí) 使 用

13、。 你 也 可 以 在 不 同 的 目 錄 中 創(chuàng) 建 你 的 模 塊 并 指 出 該 絕 對(duì)路 徑 。 例 如 , 如 果 在 / ho me/t est /scr i p ts/創(chuàng) 建 包 , 第 二 行 就 應(yīng) 該 如 下 :p ush ( i n c , / ho m e/t est/ sc ri pt s ) ;在 第 三 行 中 , 包 含 上 包c(diǎn) o co a. p m 以 獲 取 腳 本 中 所 需 功 能 。 u se 語(yǔ) 句 告 訴 per l在 i n c 路 徑 尋 找 文 件 c o co a. p m 并 包 含 到 解 析 的 源 文 件 拷 貝 中 。u se

14、 語(yǔ) 句 是 使 用類 必 須 的 。 第 四 行 調(diào) 用ne w 函 數(shù) 創(chuàng) 建 對(duì) 象 , 這 是 pe rl 的 妙 處 , 也 是 其 易 混 淆 之處 , 也 是 其 強(qiáng) 大 之 處 。 創(chuàng) 建 對(duì) 象 的 方 法 有 多 種 , 可 以 這 樣 寫(xiě) :$ cu p = c oco a- n ew ( );如 果 你 是c 程 序 員 , 可 以 用 雙 冒 號(hào) 強(qiáng) 制 使 用c o co a 包 中 的n ew ( ) 函 數(shù) , 如 :$ cu p = c o co a: :n ew ( ) ;可 以 在 構(gòu) 造 函 數(shù) 中 加 入 更 多 的 代 碼 , 如 在c ocoa.

15、p m 中 , 可 以 在 每 個(gè) 對(duì) 象 創(chuàng) 建時(shí) 輸 出 一 個(gè) 簡(jiǎn) 單 聲 明 , 還 可 以 用 構(gòu) 造 函 數(shù) 初 始 化 變 量 或 設(shè) 置 數(shù) 組 或 指 針 。注 意 :1 、 一 定 要 在 構(gòu) 造 函 數(shù) 中 初 始 化 變 量 ;2 、 一 定 要 用m y 函 數(shù) 在 方 法 中 創(chuàng) 建 變 量 ;3 、 一 定 不 要 在 方 法 中 使 用l o ca l , 除 非 真 的 想 把 變 量 傳 遞 給 其 它 子 程 序 ;4 、 一 定 不 要 在 類 模 塊 中 使 用 全 局 變 量 。加 上 聲 明 的c o co a 構(gòu) 造 函 數(shù) 如 下 :sub n

16、ew my$t hi s = ;p r i n t n /*n * *c r eat ed b y c oco a. p mn * * u se a t ow n r i sk ;p r i n t n * *d i d th i s c o de even get p ass th e j av ac co mp i l er ? ;p r i n t n * * /n ;b l ess $t hi s;r etu r n $ th i s;也 可 以 簡(jiǎn) 單 地 調(diào) 用 包 內(nèi) 或 包 外 的 其 它 函 數(shù) 來(lái) 做 更 多 的 初 始 化 工 作 , 如 :sub new my$t hi

17、 s = b l ess $t hi s;$ t hi s- d o in i t i al i zati on ( );r etu r n $ th i s;創(chuàng) 建 類 時(shí) ,應(yīng) 該 允 許 它 可 被 繼 承 ,應(yīng) 該 可 以 把 類 名 作 為 第 一 個(gè) 參 數(shù) 來(lái) 調(diào) 用n e w函 數(shù) , 那 么 n ew 函 數(shù) 就 象 下 面 的 語(yǔ) 句 :sub new my$cl ass = sh i f t ; # get t he r eq u est cl ass n amemy$t hi s = ;b l ess $t hi s, $ cl ass # u se cl ass na

18、m e to b l ess( ) re fer enc e$ t hi s- d o in i t i al i zati on ( ); r etu r n $t hi s;此 方 法 使 用 戶 可 以 下 列 三 種 方 式 之 一 來(lái) 進(jìn) 行 調(diào) 用 :co coa: ne w ( )co coa- n ew ( )n ew c o co a可 以 多 次 b l ess 一 個(gè) 引 用 對(duì) 象 , 然 而 , 新 的 將 被bl ess 的 類 必 然 把 對(duì) 象 已 被 bl ess的 引 用 去 掉 , 對(duì)c 和pascal 程 序 員 來(lái) 說(shuō) , 這 就 象 把 一 個(gè) 指

19、針 賦 給 分 配 的 一 塊 內(nèi)存 , 再 把 同 一 指 針 賦 給 另 一 塊 內(nèi) 存 而 不 釋 放 掉 前 一 塊 內(nèi) 存 。 總 之 , 一 個(gè) per l 對(duì)象 每 一 時(shí) 刻 只 能 屬 于 一 個(gè) 類 。對(duì) 象 和 引 用 的 真 正 區(qū) 別 是 什 么 呢 ? per l 對(duì) 象 被 b l ess 以 屬 于 某 類 , 引 用 則 不 然 ,如 果 引 用 被 b l ess, 它 將 屬 于 一 個(gè) 類 , 也 便 成 了 對(duì) 象 。 對(duì) 象 知 道 自 己 屬 于 哪 個(gè) 類 ,引 用 則 不 屬 于 任 何 類 。實(shí) 例 變 量作 為 構(gòu) 造 函 數(shù) 的n ew

20、( ) 函 數(shù) 的 參 數(shù) 叫 做 實(shí) 例 變 量 。實(shí) 例 變 量 在 創(chuàng) 建 對(duì) 象 的 每 個(gè)實(shí) 例 時(shí) 用 于 初 始 化 , 例 如 可 以 用n ew ( ) 函 數(shù) 為 對(duì) 象 的 每 個(gè) 實(shí) 例 起 個(gè) 名 字 。可 以 用 匿 名 哈 希 表 或 匿 名 數(shù) 組 來(lái) 保 存 實(shí) 例 變 量 。用 哈 希 表 的 代 碼 如 下 :sub new my $ ty p e = sh i f t;my %p arm = _;my $ th i s = ;$ th i s- n am e = $p ar m n ame ;$ th i s- x = $ p ar m x ;$ th

21、i s- y = $ p ar m y ;b l ess $ t hi s, $ ty pe;用 數(shù) 組 保 存 的 代 碼 如 下 :sub new my $ ty p e = sh i f t;my %p arm = _;my $ th i s = ;$ th i s- 0 = $ p ar m n am e ;$ th i s- 1 = $ p ar m x ;$ th i s- 2 = $ p ar m y ;b l ess $ t hi s, $ ty pe;構(gòu) 造 對(duì) 象 時(shí) , 可 以 如 下 傳 遞 參 數(shù) :$ mu g = c ocoa: n ew ( n a me = t

22、 op ,x = 1 0 ,y = 20 ) ;操 作 符 = 與 逗 號(hào) 操 作 服 功 能 相 同 , 但 = 可 讀 性 好 。 訪 問(wèn) 方 法 如 下 :p ri n t n am e= $mu g - n ame n ;p ri n t x =$ mu g- x n ;p ri n t y=$ mu g- y n ;五 、 方 法per l 類 的 方 法 只 不 過(guò) 是 一 個(gè)per l 子 程 序 而 已 ,也 即 通 常 所 說(shuō) 的 成 員 函 數(shù) 。per l的 方 法 定 義 不 提 供 任 何 特 殊 語(yǔ) 法 ,但 規(guī) 定 方 法 的 第 一 個(gè) 參 數(shù) 為 對(duì) 象 或

23、其 被 引 用 的包 。 per l 有 兩 種 方 法 : 靜 態(tài) 方 法 和 虛 方 法 。靜 態(tài) 方 法 第 一 個(gè) 參 數(shù) 為 類 名 , 虛 方 法 第 一 個(gè) 參 數(shù) 為 對(duì) 象 的 引 用 。 方 法 處 理 第一 個(gè) 參 數(shù) 的 方 式 決 定 了 它 是 靜 態(tài) 的 還 是 虛 的 。 靜 態(tài) 方 法 一 般 忽 略 掉 第 一 個(gè) 參 數(shù) ,因 為 它 們 已 經(jīng) 知 道 自 己 在 哪 個(gè) 類 了 ,構(gòu) 造 函 數(shù) 即 靜 態(tài) 方 法 。虛 方 法 通 常 首 先 把 第一 個(gè) 參 數(shù)sh i ft 到 變 量sel f 或t hi s 中 , 然 后 將 該 值 作 普

24、 通 的 引 用 使 用 。 如 :1.su b n am el i ster 2.m y $ t hi s = sh i ft;3.m y ( $ ke ys ,$ val u e ) ;4.w h i l e ( ($ ke y , $ v al ue ) = each ( %$ th i s) ) 5.p r i nt t $k ey i s $ val u e. n ;6.7.六 、 方 法 的 輸 出如 果 你 現(xiàn) 在 想 引 用c ocoa. p m 包 , 將 會(huì) 得 到 編 譯 錯(cuò) 誤 說(shuō) 未 找 到 方 法 , 這 是 因 為c o co a. p m 的 方 法 還 沒(méi) 有

25、 輸 出 。 輸 出 方 法 需 要exp o r t er 模 塊 , 在 包 的 開(kāi) 始 部 分 加上 下 列 兩 行 :r eq ui r e ex po r ter ; isa = qw( exp o r t er ) ;這 兩 行 包 含 上e x po r t er. p m 模 塊 , 并 把ex po r ter 類 名 加 入 i sa 數(shù) 組 以 供 查 找 。接 下 來(lái) 把 你 自 己 的 類 方 法 列 在 e x po rt 數(shù) 組 中 就 可 以 了 。 例 如 想 輸 出 方 法cl o sem ai n 和dec l ar em ai n , 語(yǔ) 句 如 下 :

26、 ex po r t = q w ( decl ar em ai n , cl osem ai n) ;per l 類 的 繼 承 是 通 過(guò) i sa 數(shù) 組 實(shí) 現(xiàn) 的 。 i sa 數(shù) 組 不 需 要 在 任 何 包 中 定 義 ,然 而 ,一 旦 它 被 定 義 , per l 就 把 它 看 作 目 錄 名 的 特 殊 數(shù) 組 。它 與 i n c 數(shù) 組 類 似 ,i n c 是 包 含 文 件 的 尋 找 路 徑 。 i sa 數(shù) 組 含 有 類 ( 包 ) 名 , 當(dāng) 一 個(gè) 方 法 在 當(dāng) 前 包中 未 找 到 時(shí) 就 到 i sa 中 的 包 去 尋 找 。 i sa 中

27、還 含 有 當(dāng) 前 類 繼 承 的 基 類 名 。類 中 調(diào) 用 的 所 有 方 法 必 須 屬 于 同 一 個(gè) 類 或 isa 數(shù) 組 定 義 的 基 類 。如 果 一 個(gè) 方法 在 i sa 數(shù) 組 中 未 找 到 , per l 就 到a u to l oa d ( ) 子 程 序 中 尋 找 , 這 個(gè) 可 選 的 子程 序 在 當(dāng) 前 包 中 用 sub 定 義 。 若 使 用a u t o l o ad 子 程 序 , 必 須 用u se a u to l o a d;語(yǔ) 句 調(diào) 用au t ol oad. p m 包 。 au t o l oa d 子 程 序 嘗 試 從 已 安

28、 裝 的per l 庫(kù) 中 裝 載 調(diào)用 的 方 法 。 如 果a u t ol o a d 也 失 敗 了 , pe rl 再 到u n i v er sa l 類 做 最 后 一 次 嘗試 , 如 果 仍 失 敗 , pe r l 就 生 成 關(guān) 于 該 無(wú) 法 解 析 函 數(shù) 的 錯(cuò) 誤 。七 、 方 法 的 調(diào) 用調(diào) 用 一 個(gè) 對(duì) 象 的 方 法 有 兩 種 方 法 , 一 是 通 過(guò) 該 對(duì) 象 的 引 用 ( 虛 方 法 ) , 一 是直 接 使 用 類 名 ( 靜 態(tài) 方 法 ) 。 當(dāng) 然 該 方 法 必 須 已 被 輸 出 。 現(xiàn) 在 給c ocoa 類 增 加 一些 方

29、法 , 代 碼 如 下 :p ack ag e c o co a;r eq u i r e exp o r te r;i sa = q w ( exp o r t er );e x por t = qw ( se ti m po r ts, d ecl ar em a i n , cl o sem ai n) ;# t h i s r ou ti n e cr eates th e r efe r en ces f o r i m p o rt s i n jav a fu n ct i o n s#sub seti m po r t smy$cl ass = sh i f t _ ;myna

30、 mes = _;fo r eac h ( n ames) pr i n t i m po r t .$ _ .; n ;# t h i s r ou ti n e d e cl ar es t h e ma i n fu ncti on i n a jav a sc ri p t#sub decl ar em ai nmy$cl ass = sh i f t _ ;my( $ n am e, $ex tend s, $ i mp l e men t s) = _ ;p r i n t n pu b l i c cl ass $n ame ;i f ($ ext en d s) pr i n

31、t ex ten ds .$ ex ten d s;i f ($ i mp l e ment s) pr i n t i m p l em en ts .$ i mp l e men t s;p r i n t n ;# t h i s r ou ti n e d e cl ar es t h e ma i n fu ncti on i n a jav a scr i p t#sub cl osem ai n p r i n t n ;# t h i s sub r ou ti ne cr eates th e he ader f o r th e f i l e.#sub new my$t

32、hi s = ;p r i n t n /*n * *c r eat ed b y c oco a. p mn * * u se a t ow n r i skn * /n ;b l ess $t hi s;r etu r n $ th i s;1 ;現(xiàn) 在 , 我 們 寫(xiě) 一 個(gè) 簡(jiǎn) 單 的per l 腳 本 來(lái) 使 用 該 類 的 方 法 , 下 面 是 創(chuàng) 建 一 個(gè)ja v aap pl et 源 代 碼 骨 架 的 腳 本 代 碼 :# !/ u sr /b in /p er lu se co coa ;$ cup = n ew c oco a;$ cup - set i m po

33、r ts( j av a. i o. i np u tstr eam , j av a. n et. * ) ;$ cup - d ecl ar em ai n ( m sg , j av a. ap pl et. a p p l et , r un n ab l e ) ;$ cup - cl o sem ai n ( ) ;這 段 腳 本 創(chuàng) 建 了 一 個(gè) 叫 做m sg 的jav a ap p l et, 它 擴(kuò) 展 ( ext en d) 了j av a. app l et. a pp l et 小 應(yīng) 用 程 序 并 使 之 可 運(yùn) 行 ( r u nn abl e) , 其 中

34、最 后 三 行 也 可 以 寫(xiě)成 如 下 :c o co a:seti mp o r t s( $c u p, j ava. i o. i n pu t st re am , j av a. net. * ) ;c o co a:d ecl ar em ai n( $cu p, m sg , j ava. ap p l et. a pp l et , r u nn ab l e );c o co a:cl o sem a i n ( $cup ) ;其 運(yùn) 行 結(jié) 果 如 下 :/ * * c r ea ted b y c o co a. p m* * u se at o w n r i sk

35、* /i mpo r t j av a. i o. i n pu tst r eam;i mpo r t j av a. n et. * ;p u bl i c cl ass m sg ext en d s j a va. app l et. a pp l et i m p l em ent s ru n nab l e 注 意 : 如 果 用 - 操 作 符 調(diào) 用 方 法 ( 也 叫 間 接 調(diào) 用 ) , 參 數(shù) 必 須 用 括 號(hào) 括 起 來(lái) ,如 : $ cu p- seti m po rt s( j ava. i o. i n p ut stre am , j av a. ne t

36、. * ) ; 而 雙 冒 號(hào) 調(diào) 用 如 :c o co a:seti mp o r t s( $c u p, j ava. i o. i n pu t st re am , j av a. net. * ) ; 也 可 去 掉 括 號(hào) 寫(xiě) 成 :c o co a:seti mp o r t s $cu p, j av a. i o. i n pu t st r eam , j ava. n et. * ;八 、 重 載有 時(shí) 需 要 指 定 使 用 哪 個(gè) 類 的 方 法 , 如 兩 個(gè) 不 同 的 類 有 同 名 方 法 的 時(shí) 候 。 假 設(shè)類e sp r esso 和q av a 都

37、 定 義 了 方 法g ri nd ,可 以 用 : 操 作 符 指 定 使 用q av a 的 方 法 :$ m ess = q av a : g ri n d( w h ol e , l o t t a, b ag s) ;q av a : gr i n d( $ m ess, w h o l e , l ot ta , b a gs ) ;可 以 根 據(jù) 程 序 的 運(yùn) 行 情 況 來(lái) 選 擇 使 用 哪 個(gè) 類 的 方 法 , 這 可 以 通 過(guò) 使 用 符 號(hào) 引用 去 調(diào) 用 來(lái) 實(shí) 現(xiàn) :$ m et ho d = $ l o ca l ? q av a: : : espr es

38、so: : ;$ cu p- $ me th od gr i n d( a rg s) ;九 、 析 構(gòu) 函 數(shù)per l 跟 蹤 對(duì) 象 的 鏈 接 數(shù) 目 , 當(dāng) 某 對(duì) 象 的 最 后 一 個(gè) 應(yīng) 用 釋 放 到 內(nèi) 存 池 時(shí) , 該 對(duì)象 就 自 動(dòng) 銷 毀 。 對(duì) 象 的 析 構(gòu) 發(fā) 生 在 代 碼 停 止 后 , 腳 本 將 要 結(jié) 束 時(shí) 。 對(duì) 于 全 局 變 量而 言 , 析 構(gòu) 發(fā) 生 在 最 后 一 行 代 碼 運(yùn) 行 之 后 。如 果 你 想 在 對(duì) 象 被 釋 放 之 前 獲 取 控 制 權(quán) , 可 以 定 義d est r o y () 方 法 。d estr o

39、y () 在 對(duì) 象 將 釋 放 前 被 調(diào) 用 , 使 你 可 以 做 一 些 清 理 工 作 。 d e st r o y ( ) 函數(shù) 不 自 動(dòng) 調(diào) 用 其 它 d e st r o y ( ) 函 數(shù) , pe rl 不 做 內(nèi) 置 的 析 構(gòu) 工 作 。 如 果 構(gòu) 造 函 數(shù)從 基 類 多 次 b l ess, d estr o y () 可 能 需 要 調(diào) 用 其 它 類 的d est r o y () 函 數(shù) 。 當(dāng) 一 個(gè)對(duì) 象 被 釋 放 時(shí) , 其 內(nèi) 含 的 所 有 對(duì) 象 引 用 自 動(dòng) 釋 放 、 銷 毀 。一 般 來(lái) 說(shuō) , 不 需 要 定 義d estr o

40、y ( ) 函 數(shù) , 如 果 需 要 , 其 形 式 如 下 :sub d est r oy # a d d cod e h er e. #因 為 多 種 目 的 , perl 使 用 了 簡(jiǎn) 單 的 、 基 于 引 用 的 垃 圾 回 收 系 統(tǒng) 。 任 何 對(duì) 象 的 引用 數(shù) 目 必 須 大 于 零 , 否 則 該 對(duì) 象 的 內(nèi) 存 就 被 釋 放 。 當(dāng) 程 序 退 出 時(shí) , per l 的 一 個(gè) 徹底 的 查 找 并 銷 毀 函 數(shù) 進(jìn) 行 垃 圾 回 收 , 進(jìn) 程 中 的 一 切 被 簡(jiǎn) 單 地 刪 除 。 在u n i x 類 的系 統(tǒng) 中 , 這 像 是 多 余 的

41、, 但 在 內(nèi) 嵌 式 系 統(tǒng) 或 多 線 程 環(huán) 境 中 這 確 實(shí) 很 必 要 。十 、 繼 承類 方 法 通 過(guò) isa 數(shù) 組 繼 承 , 變 量 的 繼 承 必 須 明 確 設(shè) 定 。 下 例 創(chuàng) 建 兩 個(gè) 類b ean. p m 和c of fe e. p m, 其 中c of f ee. p m 繼 承b ean. p m 的 一 些 功 能 。 此 例 演 示 如何 從 基 類 ( 或 稱 超 類 ) 繼 承 實(shí) 例 變 量 , 其 方 法 為 調(diào) 用 基 類 的 構(gòu) 造 函 數(shù) 并 把 自 己 的實(shí) 例 變 量 加 到 新 對(duì) 象 中 。b ean. p m 代 碼 如 下

42、 :p ack ag e b e an ;r eq u i r e exp o r te r;i sa = q w ( exp o r t er );e x por t = qw ( se tb ean t yp e) ;sub new my$t yp e = shi ft ;my$t hi s = ;$ t hi s- b ean = c ol o mb i an ;b l ess $t hi s, $ ty p e;r etu r n $ th i s;# t h i s sub r ou ti ne se ts th e cl ass n amesub setb ean t yp emy

43、($ cl ass, $ n am e) = _;$ cl ass- b ea n = $ n am e;p r i n t se t b ean t o $n amen ;1 ;此 類 中 , 用 $ t hi s 變 量 設(shè) 置 一 個(gè) 匿 名 哈 希 表 , 將 b ean 類 型 設(shè) 為 co l o m b i an 。方 法 set b ean ty p e( ) 用 于 改 變 b ean 類 型 , 它 使 用 $cl ass 引 用 獲 得 對(duì) 對(duì) 象 哈 希 表 的訪 問(wèn) 。c o f f ee. p m 代 碼 如 下 :1#2# t h e c of f ee. pm

44、fi l e t o i l l u st r ate i nh er i t an ce.3#4p ack ag e c of f ee;5r eq u i r e exp o r ter ;6r eq u i r e be an;7 i sa = q w ( e xp o rt er , b ean ) ;8 e x por t = qw ( set i m po r t s, d ecl ar em a in , cl ose m ai n) ;9#1 0 # set i t em1 1 #1 2 sub set c of f eet yp e1 3my ( $ cl ass,$ nam

45、 e) = _ ;1 4$cl ass- c o ff ee= $ n am e;1 5pr i n t set co ff ee t yp e to $n amen ;1 61 7 #1 8 # con st ru cto r1 9 #2 0 sub n e w 2 1my $t yp e = shi f t;2 2my $t hi s = b ean - ne w ( ) ; # # # co f f ee = i nstant ; # u nl ess to l d ot her w i se2 4bl ess $t h is, $ ty p e;2 5r etu rn $ th i s

46、;2 62 7 1 ;第6 行 的requ i r e b ean ;語(yǔ) 句 包 含 了b ean. p m 文 件 和 所 有 相 關(guān) 函 數(shù) , 方 法set c o f f eet y p e( ) 用 于 設(shè) 置 局 域 變 量 $cl ass- c o ff ee 的 值 。 在 構(gòu) 造 函 數(shù)new ( ) 中 ,$ th i s 指 向b e an. p m 返 回 的 匿 名 哈 希 表 的 指 針 , 而 不 是 在 本 地 創(chuàng) 建 一 個(gè) , 下 面 兩個(gè) 語(yǔ) 句 分 別 為 創(chuàng) 建 不 同 的 哈 希 表 從 而 與b ean. p m 構(gòu) 造 函 數(shù) 創(chuàng) 建 的 哈 希

47、 表 無(wú) 關(guān) 的情 況 和 繼 承 的 情 況 :m y $ th i s = ; # 非 繼 承m y $ th i s = $ th esu p er cl ass- new ( ) ; #繼 承下 面 代 碼 演 示 如 何 調(diào) 用 繼 承 的 方 法 :1# !/ usr/ b i n /p er l2p ush ( i n c ,pw d ) ;3u se c o f f ee;4$ cu p = n ew c of fee;5p r i nt n - - - - - - - - - - - - - - - - - - - - i n i t i al val u es - - -

48、- - - - - - - -n ;6p r i nt c of fee : $ cup - c o f f een ;7p r i nt b ean: $ cup - b ean n ;8p r i nt n - - - - - - - - - - - - - - - - - - - ch ang e b ean t yp e - - - - - - - -n ;9$ cu p - set be ant y pe( m i x ed ) ;1 0 p r i nt b ean t yp e i s n o w $ cu p- be ann ;1 1 p r i nt n - - - - -

49、- - - - - - - - - c h a ng e c of fee t yp e - - - - - - - -n ;1 2 $ cu p - setc o f f eet yp e( i n st an t ) ;1 3 p r i nt t y p e o f co f f ee: $ cup - c o ff een ;該 代 碼 的 結(jié) 果 輸 出 如 下 :- - - - - - - - - - - - - - - - i n i t i al v al u es - - - - - - - - - - -c o f f ee: i n stantb ean : c ol o

50、m b i an- - - - - - - - - - - - - - - - - ch a ng e b ean t yp e - - - - - - - -se t b ean t o m i x edb ean t y pe i s no w m i x ed- - - - - - - - - - - - - - ch ang e c of f ee t yp e - - - - - - - -se t co f f ee t yp e t o i n stan tt y pe o f co f f ee: i nstan t上 述 代 碼 中 , 先 輸 出 對(duì) 象 創(chuàng) 建 時(shí) 哈 希

51、 表 中 索 引 為 b ean 和 c o f f ee的 值 , 然 后調(diào) 用 各 成 員 函 數(shù) 改 變 值 后 再 輸 出 。方 法 可 以 有 多 個(gè) 參 數(shù) ,現(xiàn) 在 向c o f f ee. p m 模 塊 增 加 函 數(shù)m akec up ( ) ,代 碼 如 下 :sub ma k ec u p my($ cl ass, $ cr eam, $ su gar , $ d op e) = _;p r i n t n= = = = = = = = = = = = = = = = = = = = =n ;p r i n t m aki n g a cu pn ;p r i n t

52、a d d cr ea mn i f ( $ cr eam ) ;p r i n t a d d $su gar su g ar cub e s n i f ( $ su g ar );p r i n t m aki n g so m e re al l y ad d i ct i v e co f fee ; - )n i f ( $ d op e) ;p r i n t = = = = = = = = = = = = = = = = = = = = = =n ;此 函 數(shù) 可 有 三 個(gè) 參 數(shù) , 不 同 數(shù) 目 、 值 的 參 數(shù) 產(chǎn) 生 不 同 的 結(jié) 果 , 例 如 :#! /u

53、sr /b i n /p er lpu sh ( i n c ,p w d) ;use c of f ee;#$cup = ne w c o f f ee;# w i t h no p ar am et er spr i n t n c al l i n g w i th n o par am eter s:n ;$cup - m ak ec u p;# w i t h o ne p ar am et erp r i n t n c al l i n g w i th o n e par am eter :n ;$ cu p - mak ecu p ( 1 ) ;# w i t h tw o

54、p ara met er sp ri n t n c al l i ng wi th t w o par ame ter s:n ;$ cu p- mak e cu p ( 1 , 2) ;# w i t h al l th re e p ar ame ter s#p ri n t n c al l i ng wi th t hr ee par am et er s:n ;$ cu p- mak e cu p ( 1 ,3, 1 ) ;其 結(jié) 果 輸 出 如 下 :c al li n g w i th n o p ar amete r s:= = = = = = = = = = = = = =

55、 = = = = = =m ak i n g a cu p= = = = = = = = = = = = = = = = = = = =c al l i n g w i t h on e p ar am eter := = = = = = = = = = = = = = = = = = = =m ak i n g a cu pa d d cr eam= = = = = = = = = = = = = = = = = = = =c al l i n g w i t h tw o p ar am eter s:= = = = = = = = = = = = = = = = = = = =m ak

56、i n g a cu pa d d cr eama d d 2 su g ar cu bes= = = = = = = = = = = = = = = = = = = =c al l i n g w i t h th r ee par am eter s:= = = = = = = = = = = = = = = = = = = =m ak i n g a cu pa d d cr eama d d 3 su g ar cu besm ak i n g so m e re al l yad di ct i v e cof fe e ; - )= = = = = = = = = = = = =

57、= = = = = = =在 此 例 中 , 函 數(shù)m akec up () 的 參 數(shù) 既 可 為 字 符 串 也 可 為 整 數(shù) , 處 理 結(jié) 果 相同 , 你 也 可 以 把 這 兩 種 類 型 的 數(shù) 據(jù) 處 理 區(qū) 分 開(kāi) 。 在 對(duì) 參 數(shù) 的 處 理 中 , 可 以 設(shè) 置 缺省 的 值 , 也 可 以 根 據(jù) 實(shí) 際 輸 入 參 數(shù) 值 的 個(gè) 數(shù) 給 予 不 同 處 理 。十 一 、 子 類 方 法 的 重 載繼 承 的 好 處 在 于 可 以 獲 得 基 類 輸 出 的 方 法 的 功 能 , 而 有 時(shí) 需 要 對(duì) 基 類 的 方 法重 載 以 獲 得 更 具 體 或

58、不 同 的 功 能 。 下 面 在 b e an. p m 類 中 加 入 方 法 p r i n tt yp e () ,代 碼 如 下 :sub p r i nt t yp e my$cl ass = sh i f t _ ;p r i n t t h e ty pe o f b ea n i s $ cl ass- b ean n ;然 后 更 新 其 e x por t 數(shù) 組 來(lái) 輸 出 : ex po r t = q w ( set b eant yp e , p ri n tt yp e ) ;現(xiàn) 在 來(lái) 調(diào) 用 函 數(shù)p r i n tt y pe( ) , 有 三 種 調(diào) 用 方 法 :$ cup - c o ff ee: : pr i n tt y pe( ) ;$ cup - p ri nt t yp e( ) ;$ cup - b ean : pr i n tt y pe () ;輸 出 分 別 如 下 :t h e ty pe o f b ean i s m i x edt h e ty pe o f b ean i s m i x edt h e ty pe o f b ean i s m i x ed為 什 么 都 一 樣 呢 ? 因

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論