999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

從基于對象轉變到面向對象的C++教學案例

2018-10-22 01:48:46呂蘭蘭
現代計算機 2018年25期
關鍵詞:人類游戲

呂蘭蘭

(湖南科技學院電子與信息工程學院,永州 425199)

0 引言

面向對象程序設計主要講授使用C++來進行面向對象程序設計。文獻[1]以四個面向來表現C++的本質:面向過程、面向泛型、基于對象、面向對象。與基于對象程序設計相比,面向對象程序設計的編程理念更為先進也更為復雜,學生不容易區分二者的差別。學生雖然學習了封裝、繼承、多態等面向對象特性在C++中的語法,但是在設計程序解決具體問題時,雖然編寫的C++程序中定義了類,卻很少利用C++的繼承和多態來提高代碼重用。不難發現,文獻[2]中給出的猜數字游戲的面向對象解決方案,從嚴格意義上來說其實是一個基于對象的解決方案,因為其中并沒有用到繼承和多態。因此,如何引導學生實現“從基于對象到面向對象的程序設計”的轉化,成為講授面向對象程序設計必須解決的重要問題之一。

1 面向對象的四個要素

1.1抽象

在面向對象的程序設計方法中,將各種事物稱為“對象”。將同一類事物的共同特點概括出來,這個過程就稱為“抽象”[3]。對象的抽象包括兩個方面:屬性和方法。在猜數字游戲中,出現了游戲、人類玩家、電腦玩家等對象。答案是游戲對象的一個屬性;人類玩家和電腦玩家猜測的數,也可作為它們的屬性。游戲對象具有“判斷輸贏”、“開始游戲”等方法,而人類玩家和電腦玩家對象則具有“猜數”等方法。

1.2封裝

在完成抽象后,通過某種語法形式,將屬性和方法在形式上寫成一個整體,即“類”,這個過程就稱為“封裝”[3]。在猜數字游戲中,經過封裝可以得到3個類:游戲類、人類玩家類和電腦玩家類。

1.3繼承

猜數字游戲中的人類玩家和電腦玩家,它們具有許多共性,例如它們都具有“猜數”這一方法以及所猜的“數”這一屬性。同時,它們也分別具有一些特性,例如人類玩家可以根據當前猜數結果自動調整猜數范圍,而電腦玩家則需通過“更新范圍”的方法達到這一目標。如何在描述兩類玩家各自特性的同時,避免對它們的共性進行重復描述呢?這就可以借助面向對象方法中的繼承與派生了。所謂繼承,就是從先輩處得到屬性和行為特征[4]。因此,可以創建一個新的類——玩家類,用它來描述兩類玩家的共性,再將人類玩家類和電腦玩家類作為玩家類的派生類,這樣就能夠很好地描述兩類賬戶的共性和各自的特性。

1.4多態

所謂多態具體是指,由繼承而產生的相關的不同的類,其對象對同一消息會做出不同的響應[5]。猜數字游戲中的人類玩家和電腦玩家,是從玩家類派生出的兩個相關但不同的子類,它們在接收到“猜數”這一消息后,人類玩家可由用戶直接從鍵盤輸入所猜的數,而電腦玩家則只能產生一個隨機數作為要猜的數。顯然,它們針對同一消息所做出的響應是不同的,這就是多態。因此,在C++中可以通過將玩家類中的“猜數”這一方法聲明為虛函數,并在人類玩家類和電腦玩家類中重新定義“猜數”方法,達到實現多態的目的。

2 精化基于對象解決方案

經測試,文獻[2]中“面向對象解決方案”中實現的C++程序,其運行結果與文獻[2]中“教學案例:猜數字游戲”部分給出的程序運行樣例有本質區別。在程序實際運行結果中,可能會出現以下情況:人類玩家Human首先猜了一個數50,程序提示“太低”,但緊接著電腦玩家猜了一個數16。這顯示電腦玩家很“笨”。不難發現,這是由于電腦玩家每次只會隨機猜一個數而造成的。為了提高電腦玩家的游戲智能,必須使電腦玩家可以根據雙方已經猜過的數來調整自己的猜數范圍。因此,可以啟發學生進一步精化文獻[2]的交互建模[6]和設計建模[6],并按照精化的設計類圖重新編程實現猜數字游戲,這樣就可以完善猜數字游戲的基于對象解決方案。

2.1精化交互建模

如上所述,要提高電腦玩家的游戲智能,必須要將游戲雙方已經猜過的數以及猜的結果通知電腦玩家,尤其是人類玩家“:Human”的猜數情況。此時,猜數字游戲中游戲對象“:Game”、人類玩家“:Human”、電腦玩家“:Computer”這三個對象之間的交互情況與文獻[2]有所不同。可以使用UML順序圖表達精化交互建模的結果,如圖1所示。

圖1 猜數字游戲順序圖

從圖 1中可以看到,游戲對象“:Game”在每次check 之后,均向電腦玩家“:Computer”發送了一條 up?date消息來通知電腦玩家“:Computer”來及時更新自己猜數時的下限和上限。

2.2精化設計建模

圖1中新增的兩條update消息均由游戲對象“:Game”發出,且均由電腦玩家“:Computer”接收。按照設計建模的原則,對于順序圖中的每一條消息,接收該消息的對象需要提供相應的方法來響應,從而獲得每一個類的職責和屬性以及類之間的關系。因此,需在Computer類中添加相應的update()方法來處理接收到的消息。可使用UML設計類圖表達精化設計建模的結果,如圖2所示。

圖2 猜數字游戲設計類圖

需要注意的是,圖2中除了Computer類新增了update()方法來更新猜數范圍,還在Computer類中新增了2個private屬性high和low用于表示猜數范圍的上限和下限。同時,圖2中Game類的check()方法的返回值類型由bool改為int,用于表示猜數字游戲結果中的猜高了(1)、猜對了(0)和猜低了(-1)。對部分學生來講,這些可能要到類的代碼實現階段才能想到。

2.3精化類的實現

根據圖2可以方便地進行類的代碼實現。下面僅給出電腦玩家類Computer的完整代碼,以及游戲類的部分代碼。

在上述程序中,即使人類玩家故意忽視游戲提示亂猜,電腦玩家依然能夠不受干擾地猜一個合理的數。例如,在游戲雙方猜的50和30都提示“太高”的情況下,人類玩家Human故意猜一個數70,緊接著電腦玩家猜的數4卻是小于30的。這表明電腦玩家在更新自己猜數范圍的下限和上限時,能夠人類玩家猜的數是否處于合理范圍內做出正確判斷。這樣,電腦玩家已經變得和人類玩家一樣“聰明”。

3 面向對象解決方案

之所以將上述解決方案稱為“精化的基于對象解決方案”,是因為其中并沒有用到繼承和多態特性。下面將利用繼承和多態特性,進一步引導學生在目前構造的基于對象的猜數字游戲程序基礎上,設計并實現面向對象的猜數字游戲。

3.1設計建模

如1.3中所述,不管是人類玩家,還是電腦玩家,都是猜數字游戲中的玩家,因此可以將二者的共性抽象出來,封裝在玩家Player類中,且Player類中有一個public方法guess()和一個protected屬性num。利用類的繼承特性,以玩家Player類作為基類,從Player類派生出人類玩家Human類和電腦玩家Computer類。可使用UML設計類圖表達精化設計建模的結果,如圖3所示。

圖3 猜數字游戲設計類圖

通過將游戲類Game中的play()方法的原型做如下更改:

void play(Player&p1,Player&p2);

就可將猜數字游戲從“人機對戰”模式擴展到“人人對戰”、“機機對戰”模式,如下所示:

3.2類的實現

根據圖3可以方便地進行類的代碼實現。下面僅給出玩家類Player的完整代碼,以及游戲類Game的部分代碼。

需要說明的是,Game類的play()方法的實現對于部分學生來講可能是一個難點,尤其是在第一個玩家p1和第二個玩家p2分別猜完數字之后,均要使用下列語句通知游戲雙方:

4 結語

本文以學生熟悉的猜數字游戲作為案例,闡述了該案例的基于對象解決方案與面向對象解決方案,并在兩種解決方案的設計過程中融合了基于UML的面向對象軟件建模技術,以圖形化的方式直觀表達了從基于對象到面向對象的過渡。目前,該案例已在我校軟件工程專業2015級和2016級學生中進行了2學期的教學實踐。我們發現,通過引入UML,分別有大約95%、75%和90%的學生獨立實現了該案例的基于對象方案、基于對象精化方案和面向對象方案,各項數據較之前均有大幅上升。但是,基于對象精化方案本身屬于進階內容。為了降低難度,也可跳過該方案、直接對文獻[2]的基于對象方案進行面向對象改進。對大部分學生而言,要達到熟練運用繼承和多態實現代碼重用的程度,實現從基于對象程序設計到面向對象程序設計的跨越,還需要設計更多更好的能貫穿基于對象和面向對象的案例。而在不同難度案例的選擇和設計上,仍然需要進行進一步的研究與探索。

猜你喜歡
人類游戲
顫抖吧,人類
哈哈畫報(2022年4期)2022-04-19 11:11:50
人類能否一覺到未來?
人類會成長起來嗎?
英語文摘(2021年2期)2021-07-22 07:56:54
人類第一殺手
好孩子畫報(2020年5期)2020-06-27 14:08:05
1100億個人類的清明
游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
人類正在消滅自然
奧秘(2015年2期)2015-09-10 07:22:44
主站蜘蛛池模板: 欧美激情综合一区二区| 国产精品偷伦视频免费观看国产| 国产成人无码Av在线播放无广告| 91精品最新国内在线播放| 91无码人妻精品一区| 国产成人资源| 天天躁狠狠躁| 亚洲国产黄色| 亚洲综合色婷婷| 国产真实二区一区在线亚洲| 自偷自拍三级全三级视频| 国产精品吹潮在线观看中文| 亚洲欧美自拍中文| 色综合激情网| 国产成人精品男人的天堂下载 | 久久综合伊人77777| 国产精品久久久精品三级| 中美日韩在线网免费毛片视频 | 手机精品福利在线观看| 亚洲无码A视频在线| 女人18毛片久久| 夜夜拍夜夜爽| 亚洲一区二区无码视频| 中国特黄美女一级视频| 热这里只有精品国产热门精品| 91偷拍一区| 国产精品女同一区三区五区| 亚洲精品久综合蜜| 亚洲热线99精品视频| www.亚洲一区二区三区| 99久久精品国产麻豆婷婷| 久久久久无码国产精品不卡| 久久久久久久久亚洲精品| 亚洲an第二区国产精品| 国产欧美日韩资源在线观看| 一区二区三区四区精品视频 | 99久久精品久久久久久婷婷| 日韩无码真实干出血视频| 欧美精品不卡| 高清视频一区| 97青青青国产在线播放| 欧美国产菊爆免费观看| 人妻一区二区三区无码精品一区| 欧美一级在线播放| 久久婷婷色综合老司机| 永久在线精品免费视频观看| 免费人成在线观看成人片| 亚洲AⅤ波多系列中文字幕| 国产三级韩国三级理| 欧美一级高清免费a| 欧美不卡视频一区发布| 91po国产在线精品免费观看| 国产成人狂喷潮在线观看2345| 亚洲国产午夜精华无码福利| 自慰高潮喷白浆在线观看| 日韩精品一区二区三区swag| 日韩在线网址| 亚洲另类第一页| 亚洲女同欧美在线| 高清不卡毛片| 午夜国产理论| 99在线观看精品视频| 亚洲精品午夜无码电影网| 亚洲V日韩V无码一区二区| 97国产成人无码精品久久久| 天天综合网亚洲网站| 国产成人高清精品免费| 91午夜福利在线观看精品| 国产成人免费手机在线观看视频 | 免费人成视网站在线不卡| 精品视频一区二区观看| 亚洲精品视频网| 69免费在线视频| 免费a级毛片18以上观看精品| 精品91视频| 天天色综网| 亚洲av无码成人专区| 精品91视频| 亚洲国产中文欧美在线人成大黄瓜 | 国产日韩欧美一区二区三区在线| 丁香婷婷激情网| 久久精品66|