版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第12章 面向?qū)ο蟮膶崿F(xiàn)第12章 面向?qū)ο髮崿F(xiàn)12.1 程序設(shè)計言語12.2 程序設(shè)計風(fēng)格12.3 測試戰(zhàn)略12.4 設(shè)計測試用例12.5 小結(jié)2 面向?qū)ο髮崿F(xiàn)與面向過程的一樣應(yīng)包括:編碼,測試。面向?qū)ο蟮姆治龊驮O(shè)計共同的模型使它們難于分開。面向?qū)ο缶幊?OOP)需求OOP言語OOLOOL具有本人的特點和風(fēng)格。面向?qū)ο蟪绦蛑械姆庋b、承繼和多態(tài)等機制,給測試帶來新特點,添加了測試和調(diào)試的難度。3 面向?qū)ο蟮脑O(shè)計適宜用OOL來實現(xiàn), 實際上也可以用非OOL實現(xiàn)但不可取。 假設(shè)用非OOL編寫面向?qū)ο蟪绦?,那么程序員必需本人實現(xiàn)OOL編譯程序自動提供的面向?qū)ο蟮母拍詈蜋C制:類,承繼,封裝。12.1 程
2、序設(shè)計言語 12.1.1 面向?qū)ο笱哉ZOOL的優(yōu)點41. 一致的表示方法面向?qū)ο箝_發(fā)基于不隨時間變化的、一致的表示方法OO模型:OOA,OOD,OOP。2. 可重用性軟件開發(fā)組織可重用OOA, OOD和OOP結(jié)果。3. 可維護性堅持文檔與源程序完全一致幾乎不能夠。OOL的可讀性(對象名等) =可維護性。51. 支持類與對象概念的機制:內(nèi)存管理 允許用戶動態(tài)創(chuàng)建對象意味著系統(tǒng)必需處置內(nèi)存管理問題。有兩種管理內(nèi)存的方法:1)言語的運轉(zhuǎn)機制自動管理內(nèi)存,即自動回收“渣滓的機制;(必需采用先進的渣滓搜集算法)2)由程序員編寫釋放內(nèi)存的代碼。(例如: 程序員定義析構(gòu)函數(shù)(destructor)。每當一個
3、對象超出范圍或被顯式刪除時,就自動調(diào)用析構(gòu)函數(shù)。這種機制使得程序員可以方便地構(gòu)造和喚醒釋放內(nèi)存的操作)612.1.2 面向?qū)ο笱哉Z的技術(shù)特點2. 實現(xiàn)整體-部分(即聚集)構(gòu)造的機制兩種實現(xiàn)關(guān)聯(lián)方法: 指針和獨立的關(guān)聯(lián)對象 大多數(shù)現(xiàn)有的面向?qū)ο笱哉Z并不顯式支持獨立的關(guān)聯(lián)對象,在這種情況下,運用指針是最容易的實現(xiàn)關(guān)聯(lián)的方法。73. 實現(xiàn)普通-特殊(即泛化)構(gòu)造的機制實現(xiàn)承繼 + 處理名字沖突。名字沖突指的是承繼多個基類能夠出現(xiàn)的重名問題。某些言語回絕接受有名字沖突的程序,另一些言語提供理處理沖突的協(xié)議。程序員應(yīng)該盡力防止出現(xiàn)名字沖突。84. 實現(xiàn)屬性和效力的機制屬性的機制: 支持實例銜接;屬性的可
4、見性控制;對屬性值的約束。效力的機制: 支持音訊銜接(即表達對象交互關(guān)系) ;控制效力可見性;動態(tài)聯(lián)編。95. 類型檢查強/弱類型: 語法規(guī)定變量/屬性分類的嚴厲性。強類型優(yōu)點: 一是在編譯時能發(fā)現(xiàn)程序錯誤,二是添加了優(yōu)化的能夠性。強類型有助于提高軟件的可靠性和運轉(zhuǎn)效率.強類型宜用于開發(fā)軟件產(chǎn)品,弱類型適于快速開發(fā)原型。106. 類庫類庫:編譯/開發(fā)環(huán)境提供的重用類構(gòu)件。類庫包含實現(xiàn)通用數(shù)據(jù)構(gòu)造(例如,動態(tài)數(shù)組、表、隊列、棧、樹等等)的類,GUI用戶界面類。7. 效率面向?qū)ο笱哉Z的主要缺陷是效率低: 解釋型言語, 動態(tài)聯(lián)編.類庫中提供的算法和數(shù)據(jù)構(gòu)造更高效.差別可以忽略,利大于弊。118. 耐
5、久保管對象不依賴于程序執(zhí)行的生命期而長時間保管數(shù)據(jù)對象的兩個緣由: (1) 實如今不同時運轉(zhuǎn)程序間傳送數(shù)據(jù)(2) 恢復(fù)被中斷了的程序的運轉(zhuǎn)理想情況下,應(yīng)該使程序設(shè)計言語語法與對象存儲管理語法實現(xiàn)無縫集成。129. 參數(shù)化類類的數(shù)據(jù)(屬性)類型可以由參數(shù)給定。一個類可以對不同的數(shù)據(jù)類型施以同樣的操作。如對整數(shù)和實數(shù)排序。Eiffel 和C+言語提供了參數(shù)化類/類模板。10. 開發(fā)環(huán)境軟件工具或開發(fā)環(huán)境對軟件消費率有很大影響。一個言語可有不同的編譯程序。CASE工具與言語的兼容性。13選擇面向?qū)ο笱哉Z應(yīng)思索的要素:1. 未來能否占主導(dǎo)位置言語的生命力及穩(wěn)定性:維護的思索。2. 可重用性影響重用的要
6、素:封裝,承繼,多態(tài)。3. 類庫和開發(fā)環(huán)境言語、開發(fā)環(huán)境和類庫這3個要素共同決議可重用性。類庫能否提供有價值的類?開發(fā)環(huán)境能否提供運用方便的類庫編輯和閱讀工具。12.1.3 選擇面向?qū)ο笱哉Z144. 其他要素 在選擇編程言語時,應(yīng)該思索的其他要素還有: 對用戶學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計和編碼技術(shù)所能提供的培訓(xùn)效力; 在運用這個面向?qū)ο笱哉Z期間能提供的技術(shù)支持;能提供應(yīng)開發(fā)人員運用的開發(fā)工具、開發(fā)平臺、發(fā)行平臺; 對機器性能和內(nèi)存的需求; 集成已有軟件的容易程度(調(diào)用其它言語的模塊)。15為順應(yīng)面向?qū)ο蠓椒ㄋ赜械母拍?例如,承繼性)而必需遵照的一些新準那么。12.2 程序設(shè)計風(fēng)格16兩種代碼重用:
7、兩種代碼重用: 1) 本工程內(nèi)的代碼重用,本工程內(nèi)的代碼重用,2) 重用重用舊舊/外工程的代碼。外工程的代碼。 1) 內(nèi)部重用內(nèi)部重用:利用承繼機制共享一樣或類似的部分利用承繼機制共享一樣或類似的部分12.2.1 提高可重用性提高可重用性兩種代碼重用: 1) 本工程內(nèi)的代碼重用,2) 重用舊/外工程的代碼。 1) 內(nèi)部重用:利用承繼機制共享一樣或類似的部分12.2.1 提高可重用性17實現(xiàn)兩類重用的程序設(shè)計準那么:1. 提高方法的內(nèi)聚一個方法(即效力)只完成單個功能, 否那么把它分解成幾個更小的方法。2. 減小方法的規(guī)模把規(guī)模過大的方法(代碼長度超越一頁紙),分解成幾個更小的方法。3. 堅持方
8、法的一致性功能類似的方法應(yīng)該有一致的名字、參數(shù)特征(包括參數(shù)個數(shù)、類型和次序)、前往值類型、運用條件及出錯條件等。184. 把戰(zhàn)略與實現(xiàn)分開兩種不同類型的方法:戰(zhàn)略與實現(xiàn)。戰(zhàn)略方法(拼積木)調(diào)用實現(xiàn)方法(積木)來完成義務(wù)(實現(xiàn)圖案)。戰(zhàn)略方法通常嚴密依賴于詳細運用。實現(xiàn)方法針對詳細數(shù)據(jù)完成特定處置,用于實現(xiàn)復(fù)雜的算法。相對獨立于運用,因此,較能夠被重用。195. 全面覆蓋方法的實現(xiàn)不僅滿足當前運用而且應(yīng)該思索其它運用的潛在需求。此外,方法對空值、極限值及界外值等異常情況也應(yīng)該可以作出有意義的呼應(yīng)。6. 盡量不運用全局信息應(yīng)該盡量降低方法與外界的耦合程度,不運用全局信息,如類變量。207. 利用
9、承繼機制承繼是實現(xiàn)共享和提高重用的主要途徑。(1) 調(diào)用子過程:把公共的代碼分別出來,構(gòu)成一個被其他方法調(diào)用的公用方法, 并在基類中定義它。(2) 分解因子。從不同類的類似方法中分解出不同的“因子(即不同的代碼),把余下的代碼作為公用方法中的公共代碼,把分解出的因子作為名字一樣(多態(tài)性機制)算法不同的方法,放在不同類中定義,并被這個公用方法調(diào)用,如下圖。21(3) 運用委托。僅當確實存在普通-特殊關(guān)系時,運用承繼才是恰當?shù)?,否那么,可以利用委托機制。(4) 把代碼封裝在類中。與承繼無關(guān)把被重用的代碼封裝在類中比較平安和修正。22提高可重用性的準那么,也能提高程序的可擴展性。此外,以下準那么也有
10、助于提高可擴展性: 1. 封裝實現(xiàn)戰(zhàn)略把類的實現(xiàn)戰(zhàn)略(包括描畫屬性的數(shù)據(jù)構(gòu)造、修正屬性的算法等)封裝起來,將提高今后修正數(shù)據(jù)構(gòu)造或算法的自在度。12.2.2 提高可擴展性232. 不要用一個方法遍歷多條關(guān)聯(lián)鏈一個方法應(yīng)該只包含對象模型中的有限內(nèi)容, 除非內(nèi)容與方法無關(guān)。否那么將導(dǎo)致方法過分復(fù)雜,既不易了解,也不易修正擴展。3. 防止運用多分支語句可以利用DO_CASE語句測試對象的內(nèi)部形狀,而不要用來根據(jù)對象類型選擇應(yīng)有的行為(強耦合),否那么在增添新類時將不得不修正原有的代碼。應(yīng)該利用多態(tài)性機制,根據(jù)對象當前類型,自動決議應(yīng)有的行為。244. 精心確定公有方法公有方法是向公眾公布的接口。對這
11、類方法的修正往往會涉及許多其他類。為提高穩(wěn)定性,可修正性,降低維護本錢,必需精心選擇和定義公有方法。刪除、添加或修正私有方法所涉及的面要窄得多,因此代價也比較低。25 既應(yīng)該思索效率,也應(yīng)該思索強壯性。需求在強壯性與效率之間做出適當?shù)恼壑?。為提高強壯性?yīng)該遵守以下幾條準那么:1. 預(yù)防用戶的操作錯誤 軟件系統(tǒng)必需具有處置用戶操作錯誤的才干。任何一個接納用戶輸入數(shù)據(jù)的方法,對其接納到的數(shù)據(jù)都必需進展檢查,發(fā)現(xiàn)了錯誤,應(yīng)該給出恰當?shù)奶崾拘畔?,并預(yù)備再次接納用戶的輸入。12.2.3 提高強壯性262. 檢查參數(shù)的合法性 對公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,由于調(diào)用公有方法時能夠違反參數(shù)的約束
12、條件。3. 不要隨便限定數(shù)據(jù)容量 在設(shè)計階段,很難準確地預(yù)測出運用系統(tǒng)中數(shù)據(jù)構(gòu)造的最大容量需求。假設(shè)有必要和能夠,應(yīng)該運用動態(tài)內(nèi)存分配機制。274. 先測試后優(yōu)化 測試程序的性能以確定能否為提高效率而進展優(yōu)化。 假照實現(xiàn)某個操作的算法有許多種,那么應(yīng)該綜合思索內(nèi)存需求、速度及實現(xiàn)的簡易程度等要素,經(jīng)合理折衷選定適當?shù)乃惴ā?8 測試面向?qū)ο筌浖膽?zhàn)略與與面向過程的戰(zhàn)略根本一樣,但也有許多新特點。12.3 測試戰(zhàn)略29最小的可測試單元是單個封裝起來的類和對象。測試一個類就是測試它的對象子集(不可窮盡).測試對象主要是測試它的操作.不能孤立地測試單個操作:同一個操作在不同形狀下行為不同.同一個操作
13、在不同類中有不同的實現(xiàn)(多態(tài)性).有必要在每個子類的語境中測試操作比面向過程更復(fù)雜12.3.1 面向?qū)ο蟮膯卧獪y試30集成=組裝有關(guān)聯(lián)的類不存在層次的控制構(gòu)造(隱含在類中)傳統(tǒng)的自頂向下/自底向上的集成戰(zhàn)略無意義。12.3.2 面向?qū)ο蟮募蓽y試31面向?qū)ο筌浖募蓽y試的兩種戰(zhàn)略:1 基于線程的測試thread based testing): 把呼應(yīng)系統(tǒng)的一個輸入或一個事件所需求的那些類(線程)集成起來。2 基于運用的測試use based testing): 首先測試獨立類(幾乎不運用其它類的類),再測試運用獨立類的下一個層次的類稱為依賴類。據(jù)此依賴關(guān)系繼續(xù)下去,直至把整個軟件系統(tǒng)構(gòu)造完為
14、止。集群測試cluster testing:用精心設(shè)計的測試用例檢查一群相互協(xié)作的類經(jīng)過研討對象模型可以確定協(xié)作類,以發(fā)現(xiàn)不同的類之間的協(xié)作錯誤。32和傳統(tǒng)確實認測試一樣,面向?qū)ο筌浖_實認測試也集中檢查用戶可見的動作和用戶可識別的輸出。從動態(tài)模型和描畫系統(tǒng)行為的腳本可導(dǎo)出確認測試用例,以發(fā)現(xiàn)用戶交互需求能夠錯誤的情景。黑盒測試方法也可用于設(shè)計上述確認測試用例。12.3.3 面向?qū)ο蟠_實認測試33 與傳統(tǒng)軟件測試不同,面向?qū)ο鬁y試關(guān)注設(shè)計適當?shù)牟僮餍蛄幸詸z查類的形狀。1傳統(tǒng)方法的可用性 白盒測試:用于類級別的測試。測試類中封裝的操作,檢查類的形狀以確定能否存在錯誤。 黑盒測試:用于集成測試、確
15、認測試。12.4 設(shè)計測試用例34 著重測試單個類和類中封裝的方法主要有:隨著重測試單個類和類中封裝的方法主要有:隨機測試、劃分測試和基于缺點的測試等機測試、劃分測試和基于缺點的測試等3種。種。12.4.1 測試類單元的方法測試類單元的方法1. 隨機測試隨機選取測試類操作序列以測試該類對象不同的生命歷史問題的性質(zhì)隱含了一些限制例:銀行運用系統(tǒng)的account(賬戶類有以下操作: open(翻開,setup(建立,deposit(存款,withdraw(取款,balance(余額,summarize(清單,creditLimit(透支限額和close(封鎖。限制:必需在其他操作前翻開賬戶,完成了
16、全部操作之后才干(/必需)封鎖賬戶。35一個account類實例的最小(正常)行為歷史包含以下操作: opensetupdeposit.withdrawclose能夠發(fā)生許多其他行為: Opensetupdeposit deposit|withdraw|balance|summarize|creditLimitn.withdrawclose從上列序列可以隨機地產(chǎn)生一系列不同的操作序列: #r1:opensetupdepositdepositbalancesummarize.withdrawclose#r2:opensetupdepositcreditLimitwithdrawclose也要思索
17、異常用戶或編程)序列:opensetup.withdrawclosesetupdeposit.withdrawclose362. 劃分測試劃分測試partition testing可以減少測試用例的數(shù)量。3種劃分:形狀,屬性,功能。1 基于形狀的劃分根據(jù)類操作能否改動類形狀來劃分。思索account類,形狀操作包括deposit和withdraw,而非形狀操作有balance, summarize和creditLimit。然后為每個類別設(shè)計測試序列。用例應(yīng)覆蓋各類操作的每一操作。372 基于屬性的劃分根據(jù)類操作運用的屬性來劃分。對于account類來說,可運用屬性balance(余額=形狀)
18、把操作劃分成3個類別: 運用balance的操作;修正balance的操作;不運用也不修正balance的操作。用重要屬性形狀而非每個屬性來劃分。383 基于功能的劃分根據(jù)類操作所完成的功能來劃分。例如,可以把account類中的操作分類為初始化操作open,setup,計算操作deposit, withdraw,查詢操作balance, summarize,creditLimit和終止操作close。393. 基于缺點的測試 Fault based testing與傳統(tǒng)的錯誤推測法類似,首先推測軟件中能夠有的錯誤,然后設(shè)計出最能夠發(fā)現(xiàn)這些錯誤的測試用例。它的效率依托測試人員的閱歷和直覺。它與
19、面向?qū)ο蟮姆椒o關(guān)。40 集成測試用例主要針對類間協(xié)作進展測試。 測試類間協(xié)作可運用基于運用的測試戰(zhàn)略, 找出相互依賴的類. 然后設(shè)計用例觸發(fā)類間的各種交互序列. 測試類協(xié)作可以運用隨機測試方法和劃分測試方法,以及基于情景/腳本的測試和行為測試來完成。UML的協(xié)作圖能協(xié)助我們找出相互依賴的類和交互序列.12.4.2 集成測試方法41圖12.3 銀行系統(tǒng)的類-協(xié)作圖42箭頭線上的標注:協(xié)作而調(diào)用的操作1. 多類測試生成多個類的測試用例步驟:1) 對每個客戶/UI類,為其生成一系列測試序列來覆蓋一切操作。2) 對這些操作所生成的每個音訊,確定接納音訊的協(xié)作類/效力器對象中的對應(yīng)操作。3把每個2的操
20、作,結(jié)合進測試序列中。對每個產(chǎn)生音訊的操作,繼續(xù)243例,儲戶存款,操作序列: ATM:cardInserted.password.depositBank: verifyAcctverifyPINdepositReqValidationInfo : validAcct validPINAccount: deposit#r4:verifyAcctBankvalidAcctValidationInfoverifyPINBankvalidPINvalidationInfodepositReqdepositaccount44多個類的劃分測試方法類似于單個類。另一種劃分測試方法,根據(jù)與特定類的接口來劃分
21、類操作。Bank類接納來自ATM類和Cashier類的音訊,可以把Bank類中的方法劃分效果勞于ATM和Cashier的兩類來測試它們。452. 從動態(tài)模型導(dǎo)出測試用例類的形狀圖可以協(xié)助我們導(dǎo)出測試該類及與其協(xié)作的那些類的動態(tài)行為的測試用例。46設(shè)計出的測試用例至少應(yīng)該覆蓋一切形狀: #s1:opensetupAccntdeposit(initial)withdraw(final)close導(dǎo)出更多測試用例,以保證一切行為都被測試:#s2:opensetupAccntdeposit(initial)depositbalancecreditwithdraw(final)close#s3:open
22、setupAccntdeposit(initial)depositwithdrawaccntInfowithdraw(final)close在多個類協(xié)作的情況下,應(yīng)該運用多個形狀圖。47面向?qū)ο笤O(shè)計原那么上不依賴于特定的實現(xiàn)環(huán)境,但實現(xiàn)結(jié)果和本錢卻取決于實現(xiàn)環(huán)境。 支持面向?qū)ο笤O(shè)計范式的程序文語、開發(fā)環(huán)境及類庫,對于面向?qū)ο蟮膶崿F(xiàn)非常重要。具有方便的開發(fā)環(huán)境和豐富的類庫的面向?qū)ο蟪绦蛟O(shè)計言語,是實現(xiàn)面向?qū)ο笤O(shè)計的最正確選擇。良好的程序設(shè)計風(fēng)格對于面向?qū)ο髮崿F(xiàn)來說同樣重要。傳統(tǒng)的程序設(shè)計風(fēng)格準那么依然成立,面向?qū)ο蠓椒ㄟ€有一些新準那么。12.5 小結(jié)48面向?qū)ο鬁y試的戰(zhàn)略和技術(shù)與傳統(tǒng)測試有所不同
23、,對象類成為測試的焦點。測試類時運用的方法主要有隨機測試、劃分測試和基于缺點的測試。每種方法都測試類中封裝的操作。每種操作要在不同的對象形狀由對象的屬性值表示下測試。可以采用基于線程或基于運用的戰(zhàn)略完成集成測試。從動態(tài)模型導(dǎo)出的測試用例,可以測試指定的類及其協(xié)作者。面向?qū)ο笙到y(tǒng)確實認測試可以用傳統(tǒng)的黑盒方法完成。情景/腳本為系統(tǒng)確認測試提供了用例。49Test Tools CASE tool index - Quite a comprehensive list of CASE Tools Old site: cs.queensu.ca/Software-Engineering/toolcat.
24、html 400 categories; 10% for test List of Test related tools50LOGISCOPE LOGISCOPE: Software Quality, Testing, Maintenance and Reverse-Engineering telelogic/products/logiscope/overview.cfm VERILOG IBM Rational Performance Tester 和 HP Mercury LoadRunner 的比較 ibm/developerworks/cn/rational/r-cn-rftloadr
25、unner/ 51Mercury Interactive Mercury With Mercury Quality Center, you can: Standardize and manage the entire quality process. Make quality decisions based on business risks and priorities. Reduce application deployment risk. Improve application quality and reliability. Manage application change impact through manual and automated functional testing. Track quality assets and progress across releases and test cycles. Warehouse critical application quality project data. Test service-oriented architecture services for both functionality and performance. Ensure support for all enviro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光明的守護者燈具
- 《快餐廳設(shè)計》課件
- 2024年一年級品生下冊《種養(yǎng)一棵花》教案2 山東版
- 2024學(xué)年九年級英語上冊 Unit 4 Stories and poems Lesson 24 Writing a Poem教學(xué)設(shè)計(新版)冀教版
- 2024-2025學(xué)年八年級物理下冊 第九章 機械和功 四 功率教案 (新版)北師大版
- 2023六年級數(shù)學(xué)上冊 一 小手藝展示-分數(shù)乘法信息窗3 求一個數(shù)的幾分之幾是多少說課稿 青島版六三制
- 2023七年級道德與法治上冊 第三單元 師長情誼 第六課 師生之間第2框 師生交往說課稿 新人教版
- 動詞錘煉 課件
- 自己擬的入股合同(2篇)
- 獲獎?wù)n件 英語
- 客戶需求及層次
- 海綿城市完整
- 力敏傳感器教學(xué)課件
- 強奸罪起訴狀
- 《高效的溝通技巧》課件
- 2024年廣東佛山市三水區(qū)淼城建設(shè)投資有限公司招聘筆試參考題庫附帶答案詳解
- 《排球運動》PPT課件(部級優(yōu)課)
- 高速公路綠化設(shè)計案例課件
- 《高速公路收費員培訓(xùn)》專業(yè)知識點課件
- 工作匯報流程圖
- 初中美術(shù)九年級上冊 第8課 最親近的家具
評論
0/150
提交評論