最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

第九章 面向?qū)ο?1

2023-07-11 11:00 作者:wangyanhpa  | 我要投稿

面向?qū)ο缶幊淌沁m合于編寫(xiě)游戲軟件或者大型軟件采用的一種程序設(shè)計(jì)方法,軟件開(kāi)發(fā)人員一般采用這種方法,也就是說(shuō)這是高手用的。如果只是簡(jiǎn)單的編程入門(mén)課程或者只是為了參加計(jì)算機(jī)等級(jí)考試,這部分內(nèi)容可以不看了,因?yàn)橛?jì)算機(jī)等級(jí)考試Python里沒(méi)有面向?qū)ο蟮膬?nèi)容。所以面向?qū)ο筮@部分可以略過(guò)不看,直接跳過(guò)吧!

?--------------------------------------------------------------------------------------

?知道你好奇還要往下看,看看也好,反正這里是“小白入門(mén)”,介紹的比較簡(jiǎn)單比較基礎(chǔ),了解了解吧,以后也有點(diǎn)兒談資!

?

Python里“萬(wàn)物皆對(duì)象”。什么意思?不管這個(gè),先看下面例子。

n=3

print(n,type(n))?????????? #3 < class 'int'>

f=3.14

print(f,type(f))?????????? #3.14 <class 'float'>

s="cup"

print(s,type(s)) ?????????# cup <class 'str'>

print(s.find("u"))???????? # 1

print(s.upper())????????? # CUP

?

n, f和s是我們熟悉的數(shù)據(jù)類(lèi)型,大家看一下type函數(shù)的輸出都是 <class '*'>,這里的class是什么意思?類(lèi)!類(lèi)和對(duì)象的類(lèi)。所以我們之前學(xué)習(xí)了int類(lèi)--class 'int',float類(lèi)-- class 'float'和str類(lèi)-- class 'str'。s="cup"是str字符串類(lèi)型的對(duì)象,同樣n=3是int類(lèi)型的對(duì)象,f=3.14是float類(lèi)型的對(duì)象。所以可以總結(jié)出來(lái)具體的數(shù)值可以理解為該類(lèi)型的對(duì)象,對(duì)象是一個(gè)一個(gè)確定的實(shí)體,類(lèi)是具有具體數(shù)值的一個(gè)個(gè)實(shí)體的抽象。不懂,沒(méi)有關(guān)系,接著往下看。下面10個(gè)是什么形狀?

小學(xué)生回答“三角形”。我們看到的是一個(gè)一個(gè)具體的形狀(對(duì)象的概念),回答的時(shí)候根據(jù)它們的共性把它們抽象為“三角形”(類(lèi)的概念)?,F(xiàn)在是不是有一絲絲的理解了?再看下面一劑猛藥例子。

上面這些是什么呢?動(dòng)物!動(dòng)物是由上面一個(gè)個(gè)具體的小可愛(ài)抽象出來(lái)的類(lèi)的概念,動(dòng)物是類(lèi),上面一個(gè)個(gè)的是動(dòng)物類(lèi)的對(duì)象。好了,該你舉一個(gè)例子了。什么是類(lèi),什么是對(duì)象。

分類(lèi)是人們認(rèn)識(shí)世界的方法,通過(guò)分類(lèi)可以更好的了解世界。利用分類(lèi),我們可以通過(guò)已知推測(cè)未知,比如當(dāng)我們說(shuō)一種東西是“一種植物”時(shí),你肯定不會(huì)想到這種東西可以像動(dòng)物一樣吃別的東西,除非下面這些特殊的植物。

程序設(shè)計(jì)分為兩種類(lèi)型:面向過(guò)程的程序設(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)。面向過(guò)程的程序設(shè)計(jì)語(yǔ)言如C語(yǔ)言,面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言如C++語(yǔ)言、Java語(yǔ)言和Python。

面向過(guò)程和面向?qū)ο笥惺裁磪^(qū)別呢?個(gè)人的理解是,面向過(guò)程是把問(wèn)題劃分為幾個(gè)步驟,抽象出每個(gè)步驟的功能稱(chēng)為函數(shù),然后依次調(diào)用這些函數(shù),解決問(wèn)題。而面向?qū)ο髣t是根據(jù)具體問(wèn)題,將不同實(shí)體類(lèi)型抽象為不同的類(lèi),類(lèi)有自己的屬性和方法,通過(guò)定義類(lèi)的對(duì)象調(diào)用方法解決問(wèn)題。

以學(xué)生成績(jī)綜合測(cè)評(píng)為例比較說(shuō)明兩種不同程序設(shè)計(jì)方法。假設(shè)我們要輸入10名同學(xué)三門(mén)課的成績(jī),然后計(jì)算每個(gè)人總分并排序。如果采用面向過(guò)程的程序設(shè)計(jì),我們要考慮的是定義如下幾個(gè)函數(shù)。

finput_score:實(shí)現(xiàn)成績(jī)錄入,并保存10名同學(xué)的姓名和每門(mén)課程成績(jī)數(shù)據(jù)。

fget_totalscore:實(shí)現(xiàn)計(jì)算每個(gè)人的總分,并保存10名同學(xué)三門(mén)課程總分。

fsort_score:實(shí)現(xiàn)10名同學(xué)總分成績(jī)從高到低排序。

fdisplay:顯示10名同學(xué)姓名和成績(jī)信息。

編程按照順序依次調(diào)用上面函數(shù)即可完成要求的功能。

如果采用面向過(guò)程的程序設(shè)計(jì),考慮的是學(xué)生實(shí)體我們關(guān)注的信息有三門(mén)課的成績(jī),我們不關(guān)注學(xué)生的身高體重信息,身高體重跟我們要解決的問(wèn)題沒(méi)有關(guān)系。我們要定義一個(gè)學(xué)生類(lèi),這個(gè)學(xué)生的屬性有姓名和三門(mén)課的成績(jī),學(xué)生類(lèi)的方法(方法就是類(lèi)里面定義的函數(shù))有:輸入三門(mén)課成績(jī)、計(jì)算三門(mén)課總分、顯示學(xué)生信息。但是排序?qū)儆谝幚矶鄠€(gè)學(xué)生的信息,所以不能設(shè)計(jì)為學(xué)生類(lèi)的方法,我們還需要編寫(xiě)一個(gè)類(lèi)外的函數(shù)用于多個(gè)學(xué)生的總分進(jìn)行排序。

如果還想繼續(xù)深入理解請(qǐng)繼續(xù)閱讀下面斜體內(nèi)容,只想一知半解了解的請(qǐng)直達(dá)知識(shí)點(diǎn)9.1類(lèi)的定義。


【下述到本節(jié)結(jié)尾參考網(wǎng)絡(luò)資料】

面向過(guò)程編程與面向?qū)ο缶幊腆w現(xiàn)了編程者的兩種不同的思維方式,本節(jié)教程主要介紹面向過(guò)程編程與面向?qū)ο缶幊痰膮^(qū)別和聯(lián)系。

面向過(guò)程是一種以過(guò)程為中心的編程思想,它首先分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),在使用時(shí)依次調(diào)用,是一種基礎(chǔ)的順序的思維方式。

面向?qū)ο笫前慈藗冋J(rèn)識(shí)客觀世界的系統(tǒng)思維方式,采用基于對(duì)象(實(shí)體)的概念建立模型,模擬客觀世界分析、設(shè)計(jì)、實(shí)現(xiàn)軟件的編程思想,通過(guò)面向?qū)ο蟮睦砟钍褂?jì)算機(jī)軟件系統(tǒng)能與現(xiàn)實(shí)世界中的系統(tǒng)一一對(duì)應(yīng)。

面向?qū)ο蠓椒ㄖ苯影阉惺挛锒籍?dāng)作獨(dú)立的對(duì)象,處理問(wèn)題過(guò)程中所思考的不再主要是怎樣用數(shù)據(jù)結(jié)構(gòu)來(lái)描述問(wèn)題,而是直接考慮重現(xiàn)問(wèn)題中各個(gè)對(duì)象之間的關(guān)系。面向?qū)ο蠓椒ǖ幕A(chǔ)實(shí)現(xiàn)中也包含面向過(guò)程的思想。

具體來(lái)說(shuō),面向?qū)ο笈c面向過(guò)程有以下四個(gè)方面的不同:

(1)出發(fā)點(diǎn)不同

面向?qū)ο笫褂梅铣R?guī)思維的方式來(lái)處理客觀世界的問(wèn)題,強(qiáng)調(diào)把解決問(wèn)題領(lǐng)域的“動(dòng)作”直接映射到對(duì)象之間的接口上。而面向過(guò)程則強(qiáng)調(diào)的是過(guò)程的抽象化與模塊化,是以過(guò)程為中心構(gòu)造或處理客觀世界問(wèn)題。

(2)層次邏輯關(guān)系不同

面向?qū)ο笫褂糜?jì)算機(jī)邏輯來(lái)模擬客觀世界中的物理存在,以對(duì)象的集合類(lèi)作為處理問(wèn)題的單位,盡可能地使計(jì)算機(jī)世界向客觀世界靠攏,以使處理問(wèn)題的方式更清晰直接,面向?qū)ο笫褂妙?lèi)的層次結(jié)構(gòu)來(lái)體現(xiàn)類(lèi)之間的繼承與發(fā)展。面向過(guò)程處理問(wèn)題的基本單位是能清晰準(zhǔn)確地表達(dá)過(guò)程的模塊,用模塊的層次結(jié)構(gòu)概括模塊或模塊間的關(guān)系與功能,把客觀世界的問(wèn)題抽象成計(jì)算機(jī)可以處理的過(guò)程。

(3)數(shù)據(jù)處理方式與控制程序方式不同

面向?qū)ο髮?shù)據(jù)與對(duì)應(yīng)的代碼封裝成一個(gè)整體,原則上其他對(duì)象不能直接修改其數(shù)據(jù),即對(duì)象的修改只能由自身的成員函數(shù)完成,控制程序方式上是通過(guò)“事件驅(qū)動(dòng)”來(lái)激活和運(yùn)行程序的。而面向過(guò)程是直接通過(guò)程序來(lái)處理數(shù)據(jù),處理完畢后即可顯示處理的結(jié)果,在控制方式上是按照設(shè)計(jì)調(diào)用或返回程序,不能自由導(dǎo)航,各模塊之間存在著控制與被控制,調(diào)動(dòng)與被調(diào)用的關(guān)系。

(4)分析設(shè)計(jì)與編碼轉(zhuǎn)換方式不同

面向?qū)ο筘灤┯谲浖芷诘姆治?、設(shè)計(jì)及編碼中,是一種平滑的過(guò)程,從分析到設(shè)計(jì)再到編碼是采用一致性的模型表示,實(shí)現(xiàn)的是一種無(wú)縫連接。而面向過(guò)程強(qiáng)調(diào)分析、設(shè)計(jì)及編碼之間按規(guī)則進(jìn)行轉(zhuǎn)換貫穿于軟件生命周期的分析、設(shè)計(jì)及編碼中,實(shí)現(xiàn)的是一種有縫的連接。

面向?qū)ο蟮木幊谭椒ㄓ兴膫€(gè)基本特性:

(1)抽象:就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中相關(guān)的一部分。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。

過(guò)程抽象是指任何一個(gè)明確定義功能的操作都可被使用者看作單個(gè)的實(shí)體看待,盡管這個(gè)操作實(shí)際上可能由一系列更低級(jí)的操作來(lái)完成。數(shù)據(jù)抽象定義了數(shù)據(jù)類(lèi)型和施加于該類(lèi)型對(duì)象上的操作,并限定了對(duì)象的值,只能通過(guò)使用這些操作修改和觀察。

(2)繼承:這是一種聯(lián)結(jié)類(lèi)的層次模型,并且允許和鼓勵(lì)類(lèi)的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類(lèi)可以從現(xiàn)有的類(lèi)中派生,這個(gè)過(guò)程稱(chēng)為類(lèi)繼承。新類(lèi)繼承了原始類(lèi)的特性,新類(lèi)稱(chēng)為原始類(lèi)的派生類(lèi)(子類(lèi)),而原始類(lèi)稱(chēng)為新類(lèi)的基類(lèi)(父類(lèi))。

派生類(lèi)可以從它的基類(lèi)那里繼承方法和實(shí)例變量,并且類(lèi)可以修改或增加新的方法使之更適合特殊的需要。這也體現(xiàn)了大自然中一般與特殊的關(guān)系。繼承性很好地解決了軟件的可重用性問(wèn)題。

(3)封裝:就是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的接口。面向?qū)ο蟮挠?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。一旦定義了一個(gè)對(duì)象的特性,則有必要決定這些特性的可見(jiàn)性,即哪些特性對(duì)外部世界是可見(jiàn)的,哪些特性用于表示內(nèi)部狀態(tài)。

在這個(gè)階段定義對(duì)象的接口。通常,應(yīng)禁止直接訪問(wèn)一個(gè)對(duì)象的實(shí)際表示,而應(yīng)通過(guò)操作接口訪問(wèn)對(duì)象,這稱(chēng)為信息隱藏。封裝保證了模塊具有較好的獨(dú)立性,使得程序維護(hù)修改較為容易。對(duì)應(yīng)用程序的修改僅限于類(lèi)的內(nèi)部,因而可以將應(yīng)用程序修改帶來(lái)的影響減少到最低限度。

(4)多態(tài):是指允許不同類(lèi)的對(duì)象對(duì)同一消息做出響應(yīng)。比如同樣的鼠標(biāo)雙擊操作,在字處理程序和音頻播放程序或者視頻播放剩下中有不同的效果。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好地解決了應(yīng)用程序函數(shù)同名問(wèn)題。 ?

為了進(jìn)一步理解面向?qū)ο蠛兔嫦蜻^(guò)程的不同,以設(shè)計(jì)一個(gè)五子棋程序?yàn)槔?,面向過(guò)程的設(shè)計(jì)思路是,首先分析問(wèn)題的步驟:① 開(kāi)始游戲;② 黑子先走;③ 繪制畫(huà)面;④ 判斷輸贏;⑤ 輪到白子;⑥ 繪制畫(huà)面;⑦ 判斷輸贏;⑧ 返回步驟 ②;⑨ 輸出最后結(jié)果,然后將上面每個(gè)步驟用程序來(lái)實(shí)現(xiàn)即可。

面向?qū)ο蟮脑O(shè)計(jì)則將程序分為三類(lèi)對(duì)象:① 黑白雙方,這兩方的行為是一模一樣的;② 棋盤(pán)系統(tǒng),負(fù)責(zé)繪制畫(huà)面;③ 規(guī)則系統(tǒng),負(fù)責(zé)判定諸如犯規(guī)、輸贏等。第 ① 類(lèi)對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入,并告知第 ② 類(lèi)對(duì)象(棋盤(pán)對(duì)象)棋子布局的變化,棋盤(pán)對(duì)象接收到了棋子的變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時(shí)利用第 ③ 類(lèi)對(duì)象(規(guī)則系統(tǒng))來(lái)對(duì)棋局進(jìn)行判定。

可見(jiàn),面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過(guò)程的設(shè)計(jì)中分散在了多個(gè)步驟中,很可能出現(xiàn)不同的繪制版本,而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤(pán)對(duì)象中出現(xiàn),從而保證了繪圖的統(tǒng)一。功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。

如要加入悔棋功能,若是面向過(guò)程設(shè)計(jì),則從輸入到判斷到顯示的若干步驟都要改動(dòng),甚至步驟之間的先后順序都可能需要調(diào)整。而若是面向?qū)ο笤O(shè)計(jì),則只需改動(dòng)第 ② 類(lèi)對(duì)象(棋盤(pán)對(duì)象)即可,棋盤(pán)對(duì)象保存了黑白雙方的棋譜和落子先后順序,簡(jiǎn)單回溯操作即可實(shí)現(xiàn)悔棋功能,并不涉及顯示和規(guī)則部分,改動(dòng)是局部可控的。



第九章 面向?qū)ο?1的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
仁寿县| 高安市| 宣化县| 龙里县| 读书| 宣化县| 古蔺县| 西吉县| 二手房| 碌曲县| 仙游县| 本溪市| 游戏| 中西区| 镇巴县| 荔波县| 运城市| 裕民县| 乡城县| 同江市| 商都县| 五指山市| 皋兰县| 塘沽区| 宁海县| 隆安县| 崇礼县| 潞城市| 南和县| 凤城市| 北流市| 五台县| 广宗县| 图木舒克市| 乌拉特后旗| 元朗区| 睢宁县| 东辽县| 全椒县| 浠水县| 镇原县|