面向?qū)ο蟪绦蚓毩?xí)一——游戲登陸

對(duì)于一個(gè)代碼小白來說,想要實(shí)現(xiàn)一個(gè)項(xiàng)目的具體功能,可能最先想到的方法是面向過程的,但從一個(gè)優(yōu)秀的代碼看來,面向?qū)ο蟮乃枷胧侵陵P(guān)重要、不可或缺的。從面向過程到面向?qū)ο笏季S的轉(zhuǎn)化與學(xué)習(xí)需要一定的時(shí)間與積累。

今天小編就帶大家一起來學(xué)習(xí)一個(gè)以面向?qū)ο笏季S來實(shí)現(xiàn)的具體小功能——游戲登陸。

首先我們要了解什么是面向?qū)ο螅?/em>

面向對(duì)象(Object Oriented)是軟件開發(fā)方法,一種編程范式。面向對(duì)象的概念和應(yīng)用已超越了程序設(shè)計(jì)軟件開發(fā),擴(kuò)展到如數(shù)據(jù)庫(kù)系統(tǒng)交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。面向?qū)ο笫且环N對(duì)現(xiàn)實(shí)世界理解和抽象的方法,是計(jì)算機(jī)編程技術(shù)發(fā)展到一定階段后的產(chǎn)物。
面向?qū)ο笫窍鄬?duì)于面向過程來講的,面向?qū)ο蠓椒?/a>,把相關(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來看待,從更高的層次來進(jìn)行系統(tǒng)建模,更貼近事物的自然運(yùn)行模式。

面向?qū)ο笠还灿兴膫€(gè)特性,及:對(duì)象唯一性、抽象性、繼承性、多態(tài)性

故名思意,面向?qū)ο髮?shí)現(xiàn)解決的是代碼的可移植性以及可多方運(yùn)用性,相較于面向過程冗雜而不可移植的缺點(diǎn)來說大大提高了代碼的可讀、簡(jiǎn)便性。讓基礎(chǔ)性的代碼加以組合靈活應(yīng)用分配對(duì)應(yīng)到不同對(duì)象上實(shí)現(xiàn)不同對(duì)象的功能,提高了程序效率,也給開發(fā)帶來了更加廣闊的平臺(tái)。


項(xiàng)目實(shí)訓(xùn)——游戲登陸(Login)

了解了面向?qū)ο蟮闹匾院?,接下來我們將以一個(gè)小項(xiàng)目的完成來具體體現(xiàn)面向?qū)ο蟮乃季S,感受面向?qū)ο蟮拿钐帯?/em>

一、程序分析

回到寫程序,第一步就是程序分析,以面向?qū)ο蟮乃季S的角度來入手,分析整理部分大致可分為以下幾個(gè)步驟:理清功能、找對(duì)象->抽類、理清各個(gè)類中要實(shí)現(xiàn)的具體功能、畫時(shí)序圖與類圖

接下來我們就來一一實(shí)現(xiàn)

(1)理清功能

實(shí)現(xiàn)游戲登陸,即是玩家來到登錄頁面出入賬號(hào)信息,檢驗(yàn)賬號(hào)信息是否正確,顯示登陸結(jié)果成功或失敗

(2)找對(duì)象->抽類

用戶前來登陸——存放用戶信息(User)
來到游戲大廳登陸——游戲大廳類(GaneCenter)
賬號(hào)信息的輸入與系統(tǒng)提示——終端類(Console)
云端檢測(cè)賬號(hào)信息——服務(wù)器類(Serive)
儲(chǔ)存正確賬號(hào)信息——常量類(Constants)

(3)理清各個(gè)類中要實(shí)現(xiàn)的具體功能

首先作為玩家來到游戲大廳,第一步實(shí)現(xiàn)登陸功能,需要用戶通過終端先輸入自己的相關(guān)信息,得到輸入的信息后來到服務(wù)器檢測(cè)賬號(hào)信息是否正確,此時(shí)服務(wù)器就需要拿出從原有儲(chǔ)存好的賬號(hào)信息來與輸入的信息對(duì)比,如果相同,則輸入正確,登陸成功,如果不相同則輸入不正確,登陸失敗。最后將結(jié)果返回到游戲大廳,才算完成整個(gè)登陸的過程。

(4)畫時(shí)序圖與類圖

接下來即可根據(jù)各個(gè)類之間的關(guān)系來畫時(shí)序圖,時(shí)序圖如下:

時(shí)序圖

時(shí)序圖能幫助我們理清功能的先后順序,方便寫代碼時(shí)參考。


二、寫代碼

根據(jù)分好的各個(gè)類來分別寫出各個(gè)類要實(shí)現(xiàn)的功能

首先是用戶類(User),存放輸入用戶的信息

data class User(val name:String,val password:String)

游戲大廳類(GameCenter)

class GameCenter {
    lateinit var user:User
    lateinit var game:IGame
//    game as HappyPokerGame 可以將父類轉(zhuǎn)換為子類
    fun login(){
        while (true){
            "請(qǐng)輸入用戶名".show()
            val name= getDate()
            "請(qǐng)輸入密碼".show()
            val password= getDate()
//        檢測(cè)用戶是否存在
            val result=Server.checkUser(name,password)
            if (result){
                "登錄成功".showWithEnter()
                user= User(name, password)
//                如果成功就初始化創(chuàng)建實(shí)例User
                break
            }else{
                "用戶名或密碼錯(cuò)誤,請(qǐng)重新登錄".show()
            }
        }
        }
    }

終端(Consulo類)實(shí)現(xiàn)輸入輸出的封裝,作為一個(gè)工具類,因此不需要以類來封裝,寫在一個(gè)文件里,作為頂層函數(shù)靜態(tài)方法來使用

  fun getDate():String= readLine()!!
fun String.show()= print(this)
//實(shí)例對(duì)象方法,可用this,一句話實(shí)現(xiàn)直接等號(hào)
fun String.showWithEnter()= println(this)

服務(wù)器類(Server),提供檢驗(yàn)方法,并向GameCenter類傳回一個(gè)結(jié)果值

class Server(){
    companion object{
//        檢測(cè)用戶密碼是否正確
        fun checkUser(name:String,pwd:String):Boolean{
            return name== DEFAULT_NAME && pwd== DEFAULT_PASSWORD
        }
    }
}

常量類(Constants),儲(chǔ)存正確賬號(hào)信息等一系列常量,同理與Consule一樣,作為頂層函數(shù)供全局使用不需要類來封裝

const val DEFAULT_NAME="jake"
const val DEFAULT_PASSWORD="123"

這樣就實(shí)現(xiàn)了通過多個(gè)類來共同實(shí)現(xiàn)登陸功能,各個(gè)部分各司其職,相互作用又相互獨(dú)立,實(shí)現(xiàn)了封裝也對(duì)繼續(xù)開發(fā)提供了便捷易用的基臺(tái)

運(yùn)行截圖如下:


登陸成功運(yùn)行截圖

當(dāng)然啦,以上代碼順序是根據(jù)時(shí)序圖任務(wù)步驟的先后順序來排列的,但在我們真實(shí)寫代碼時(shí)的順序一般是倒著來的,從內(nèi)容(箭頭)最少的部分寫起,這樣從小往上堆,簡(jiǎn)單明了也更好上手


三、小結(jié)

從小程序來分析,面向?qū)ο蟮乃季S讓我們實(shí)現(xiàn)了類的功能板塊化,雖然運(yùn)用到的許多類,卻能十分清晰的展現(xiàn)出各個(gè)部分要完成的具體 功能,各司其職,相互作用又相互獨(dú)立。不難發(fā)現(xiàn),在此基礎(chǔ)上還能對(duì)程序的功能進(jìn)行更多的擴(kuò)展,讓多功能或多協(xié)作成為簡(jiǎn)單而易上手的事,這就是面向?qū)ο蠛苊畹牡胤健?/p>

今天就學(xué)到這里啦,路漫漫其修遠(yuǎn)兮,我們一同加油~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容