亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

[零基礎(chǔ)學(xué)python]關(guān)于類(lèi)的初步認(rèn)識(shí)

王巖威 / 1273人閱讀

摘要:反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。下面再引用一段來(lái)自維基百科中關(guān)于的歷史。類(lèi)的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類(lèi)還可以有運(yùn)行時(shí)表示形式元對(duì)象,它為操作與類(lèi)相關(guān)的元數(shù)據(jù)提供了運(yùn)行時(shí)支持。

在開(kāi)始部分,請(qǐng)看官非常非常耐心地閱讀下面幾個(gè)枯燥的術(shù)語(yǔ)解釋?zhuān)緛?lái)這不符合本教程的風(fēng)格,但是,請(qǐng)看官諒解,因?yàn)榱形粚?lái)一定要閱讀枯燥的東西的。這些枯燥的屬于解釋?zhuān)鶃?lái)自維基百科。

1、問(wèn)題空間

問(wèn)題空間是問(wèn)題解決者對(duì)一個(gè)問(wèn)題所達(dá)到的全部認(rèn)識(shí)狀態(tài),它是由問(wèn)題解決者利用問(wèn)題所包含的信息和已貯存的信息主動(dòng)地構(gòu)成的。

一個(gè)問(wèn)題一般有下面三個(gè)方面來(lái)定義:

初始狀態(tài)——一開(kāi)始時(shí)的不完全的信息或令人不滿(mǎn)意的狀況;

目標(biāo)狀態(tài)——你希望獲得的信息或狀態(tài);

操作——為了從初始狀態(tài)邁向目標(biāo)狀態(tài),你可能采取的步驟。

這三個(gè)部分加在一起定義了問(wèn)題空間(problem space)。

2、對(duì)象

對(duì)象(object),臺(tái)灣譯作物件,是面向?qū)ο螅∣bject Oriented)中的術(shù)語(yǔ),既表示客觀世界問(wèn)題空間(Namespace)中的某個(gè)具體的事物,又表示軟件系統(tǒng)解空間中的基本元素。

在軟件系統(tǒng)中,對(duì)象具有唯一的標(biāo)識(shí)符,對(duì)象包括屬性(Properties)和方法(Methods),屬性就是需要記憶的信息,方法就是對(duì)象能夠提供的服務(wù)。在面向?qū)ο螅∣bject Oriented)的軟件中,對(duì)象(Object)是某一個(gè)類(lèi)(Class)的實(shí)例(Instance)。

3、面向?qū)ο?/strong>

面向?qū)ο蟪绦蛟O(shè)計(jì)(英語(yǔ):Object-oriented programming,縮寫(xiě):OOP)是一種程序設(shè)計(jì)范型,同時(shí)也是一種程序開(kāi)發(fā)的方法。對(duì)象指的是類(lèi)的實(shí)例。它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。

面向?qū)ο蟪绦蛟O(shè)計(jì)可以看作一種在程序中包含各種獨(dú)立而又互相調(diào)用的對(duì)象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設(shè)計(jì)主張將程序看作一系列函數(shù)的集合,或者直接就是一系列對(duì)電腦下達(dá)的指令。面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個(gè)對(duì)象都應(yīng)該能夠接受數(shù)據(jù)、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對(duì)象,因此它們都可以被看作一個(gè)小型的“機(jī)器”,即對(duì)象。

目前已經(jīng)被證實(shí)的是,面向?qū)ο蟪绦蛟O(shè)計(jì)推廣了程序的靈活性和可維護(hù)性,并且在大型項(xiàng)目設(shè)計(jì)中廣為應(yīng)用。 此外,支持者聲稱(chēng)面向?qū)ο蟪绦蛟O(shè)計(jì)要比以往的做法更加便于學(xué)習(xí),因?yàn)樗軌蜃屓藗兏?jiǎn)單地設(shè)計(jì)并維護(hù)程序,使得程序更加便于分析、設(shè)計(jì)、理解。反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。

當(dāng)我們提到面向?qū)ο蟮臅r(shí)候,它不僅指一種程序設(shè)計(jì)方法。它更多意義上是一種程序開(kāi)發(fā)方式。在這一方面,我們必須了解更多關(guān)于面向?qū)ο笙到y(tǒng)分析和面向?qū)ο笤O(shè)計(jì)(Object Oriented Design,簡(jiǎn)稱(chēng)OOD)方面的知識(shí)。

下面再引用一段來(lái)自維基百科中關(guān)于OOP的歷史。

  

面向?qū)ο蟪绦蛟O(shè)計(jì)的雛形,早在1960年的Simula語(yǔ)言中即可發(fā)現(xiàn),當(dāng)時(shí)的程序設(shè)計(jì)領(lǐng)域正面臨著一種危機(jī):在軟硬件環(huán)境逐漸復(fù)雜的情況下,軟件如何得到良好的維護(hù)?面向?qū)ο蟪绦蛟O(shè)計(jì)在某種程度上通過(guò)強(qiáng)調(diào)可重復(fù)性解決了這一問(wèn)題。20世紀(jì)70年代的Smalltalk語(yǔ)言在面向?qū)ο蠓矫婵胺Q(chēng)經(jīng)典——以至于30年后的今天依然將這一語(yǔ)言視為面向?qū)ο笳Z(yǔ)言的基礎(chǔ)。

  

計(jì)算機(jī)科學(xué)中對(duì)象和實(shí)例概念的最早萌芽可以追溯到麻省理工學(xué)院的PDP-1系統(tǒng)。這一系統(tǒng)大概是最早的基于容量架構(gòu)(capability based architecture)的實(shí)際系統(tǒng)。另外1963年Ivan Sutherland的Sketchpad應(yīng)用中也蘊(yùn)含了同樣的思想。對(duì)象作為編程實(shí)體最早是于1960年代由Simula 67語(yǔ)言引入思維。Simula這一語(yǔ)言是奧利-約翰·達(dá)爾和克利斯登·奈加特在挪威奧斯陸計(jì)算機(jī)中心為模擬環(huán)境而設(shè)計(jì)的。(據(jù)說(shuō),他們是為了模擬船只而設(shè)計(jì)的這種語(yǔ)言,并且對(duì)不同船只間屬性的相互影響感興趣。他們將不同的船只歸納為不同的類(lèi),而每一個(gè)對(duì)象,基于它的類(lèi),可以定義它自己的屬性和行為。)這種辦法是分析式程序的最早概念體現(xiàn)。在分析式程序中,我們將真實(shí)世界的對(duì)象映射到抽象的對(duì)象,這叫做“模擬”。Simula不僅引入了“類(lèi)”的概念,還應(yīng)用了實(shí)例這一思想——這可能是這些概念的最早應(yīng)用。

  

20世紀(jì)70年代施樂(lè)PARC研究所發(fā)明的Smalltalk語(yǔ)言將面向?qū)ο蟪绦蛟O(shè)計(jì)的概念定義為,在基礎(chǔ)運(yùn)算中,對(duì)對(duì)象和消息的廣泛應(yīng)用。Smalltalk的創(chuàng)建者深受Simula 67的主要思想影響,但Smalltalk中的對(duì)象是完全動(dòng)態(tài)的——它們可以被創(chuàng)建、修改并銷(xiāo)毀,這與Simula中的靜態(tài)對(duì)象有所區(qū)別。此外,Smalltalk還引入了繼承性的思想,它因此一舉超越了不可創(chuàng)建實(shí)例的程序設(shè)計(jì)模型和不具備繼承性的Simula。此外,Simula 67的思想亦被應(yīng)用在許多不同的語(yǔ)言,如Lisp、Pascal。

  

面向?qū)ο蟪绦蛟O(shè)計(jì)在80年代成為了一種主導(dǎo)思想,這主要應(yīng)歸功于C++——C語(yǔ)言的擴(kuò)充版。在圖形用戶(hù)界面(GUI)日漸崛起的情況下,面向?qū)ο蟪绦蛟O(shè)計(jì)很好地適應(yīng)了潮流。GUI和面向?qū)ο蟪绦蛟O(shè)計(jì)的緊密關(guān)聯(lián)在Mac OS X中可見(jiàn)一斑。Mac OS X是由Objective-C語(yǔ)言寫(xiě)成的,這一語(yǔ)言是一個(gè)仿Smalltalk的C語(yǔ)言擴(kuò)充版。面向?qū)ο蟪绦蛟O(shè)計(jì)的思想也使事件處理式的程序設(shè)計(jì)更加廣泛被應(yīng)用(雖然這一概念并非僅存在于面向?qū)ο蟪绦蛟O(shè)計(jì))。一種說(shuō)法是,GUI的引入極大地推動(dòng)了面向?qū)ο蟪绦蛟O(shè)計(jì)的發(fā)展。

  

蘇黎世聯(lián)邦理工學(xué)院的尼克勞斯·維爾特和他的同事們對(duì)抽象數(shù)據(jù)和模塊化程序設(shè)計(jì)進(jìn)行了研究。Modula-2將這些都包括了進(jìn)去,而Oberon則包括了一種特殊的面向?qū)ο蠓椒ā煌赟malltalk與C++。

  

面向?qū)ο蟮奶匦砸脖患尤肓水?dāng)時(shí)較為流行的語(yǔ)言:Ada、BASIC、Lisp、Fortran、Pascal以及種種。由于這些語(yǔ)言最初并沒(méi)有面向?qū)ο蟮脑O(shè)計(jì),故而這種糅合常常會(huì)導(dǎo)致兼容性和維護(hù)性的問(wèn)題。與之相反的是,“純正的”面向?qū)ο笳Z(yǔ)言卻缺乏一些程序員們賴(lài)以生存的特性。在這一大環(huán)境下,開(kāi)發(fā)新的語(yǔ)言成為了當(dāng)務(wù)之急。作為先行者,Eiffel成功地解決了這些問(wèn)題,并成為了當(dāng)時(shí)較受歡迎的語(yǔ)言。

  

在過(guò)去的幾年中,Java語(yǔ)言成為了廣為應(yīng)用的語(yǔ)言,除了它與C和C++語(yǔ)法上的近似性。Java的可移植性是它的成功中不可磨滅的一步,因?yàn)檫@一特性,已吸引了龐大的程序員群的投入。

  

在最近的計(jì)算機(jī)語(yǔ)言發(fā)展中,一些既支持面向?qū)ο蟪绦蛟O(shè)計(jì),又支持面向過(guò)程程序設(shè)計(jì)的語(yǔ)言悄然浮出水面。它們中的佼佼者有Python、Ruby等等。

  

正如面向過(guò)程程序設(shè)計(jì)使得結(jié)構(gòu)化程序設(shè)計(jì)的技術(shù)得以提升,現(xiàn)代的面向?qū)ο蟪绦蛟O(shè)計(jì)方法使得對(duì)設(shè)計(jì)模式的用途、契約式設(shè)計(jì)和建模語(yǔ)言(如UML)技術(shù)也得到了一定提升。

列位看官,當(dāng)您閱讀到這句話(huà)的時(shí)候,我就姑且認(rèn)為您已經(jīng)對(duì)面向?qū)ο笥辛艘粋€(gè)模糊的認(rèn)識(shí)了。那么,類(lèi)和OOP有什么關(guān)系呢?

維基百科中這樣定義了類(lèi):

  

在面向?qū)ο蟪淌皆O(shè)計(jì),類(lèi)(class)是一種面向?qū)ο笥?jì)算機(jī)編程語(yǔ)言的構(gòu)造,是創(chuàng)建對(duì)象的藍(lán)圖,描述了所創(chuàng)建的對(duì)象共同的屬性和方法。

  

類(lèi)的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。它描述了一些對(duì)象的行為規(guī)則,而這些對(duì)象就被稱(chēng)為該類(lèi)的實(shí)例。類(lèi)有接口和結(jié)構(gòu)。接口描述了如何通過(guò)方法與類(lèi)及其實(shí)例互操作,而結(jié)構(gòu)描述了一個(gè)實(shí)例中數(shù)據(jù)如何劃分為多個(gè)屬性。類(lèi)是與某個(gè)層的對(duì)象的最具體的類(lèi)型。類(lèi)還可以有運(yùn)行時(shí)表示形式(元對(duì)象),它為操作與類(lèi)相關(guān)的元數(shù)據(jù)提供了運(yùn)行時(shí)支持。

支持類(lèi)的編程語(yǔ)言在支持與類(lèi)相關(guān)的各種特性方面都多多少少有一些微妙的差異。大多數(shù)都支持不同形式的類(lèi)繼承。許多語(yǔ)言還支持提供封裝性的特性,比如訪(fǎng)問(wèn)修飾符。類(lèi)的出現(xiàn),為面向?qū)ο缶幊痰娜齻€(gè)最重要的特性(封裝性,繼承性,多態(tài)性),提供了實(shí)現(xiàn)的手段。

看到這里,看官或許有一個(gè)認(rèn)識(shí),要OOP編程,就得用到類(lèi)??梢赃@么說(shuō),雖然不是很?chē)?yán)格。但是,反過(guò)來(lái)就不能說(shuō)了。不是說(shuō)用了類(lèi)就一定是OOP。

編寫(xiě)類(lèi)

對(duì)類(lèi)的理解,需要看官有一定的抽象思維。因?yàn)轭?lèi)(Class)本身所定義的是某事物的抽象特點(diǎn)。例如定義一個(gè)類(lèi):

class Human:        #這是定義類(lèi)的方法,通常類(lèi)的名稱(chēng)用首字母大寫(xiě)的單詞或者單詞拼接
    pass

好,現(xiàn)在就從這里開(kāi)始,編寫(xiě)一個(gè)類(lèi),不過(guò)這次我們暫時(shí)不用python,而是用偽代碼,當(dāng)然,這個(gè)代碼跟python相去甚遠(yuǎn)。如下:

class Human:
    四肢
    性格
    愛(ài)好
    學(xué)習(xí)()

對(duì)象(Object)是類(lèi)的實(shí)例。剛才已經(jīng)定義了一個(gè)名字為Human的類(lèi),從而定義了世界上所有的Human,但是這是一個(gè)抽象的Human,不是具體某個(gè)人。而對(duì)一個(gè)具體的人,他的四肢特點(diǎn)、性格、愛(ài)好等都是具體的,這些東西在這里被稱(chēng)之為屬性。

下面就找一個(gè)具體的人:王二麻子,把上面的類(lèi)實(shí)例化。

王二麻子 = Human()
王二麻子.四肢 = 修長(zhǎng)
王二麻子.愛(ài)好 = 看MM

在這里,王二麻子就是Human這個(gè)類(lèi)的一個(gè)實(shí)例。一個(gè)具體對(duì)象屬性的值被稱(chēng)作它的“狀態(tài)”。(系統(tǒng)給對(duì)象分配內(nèi)存空間,而不會(huì)給類(lèi)分配內(nèi)存空間,這很好理解,類(lèi)是抽象的系統(tǒng)不可能給抽象的東西分配空間,對(duì)象是具體的)

行文至此,看官是不是大概對(duì)類(lèi)有了一個(gè)模糊的認(rèn)識(shí)了呢?

鑒于類(lèi),距離我們的直觀感覺(jué)似乎有點(diǎn)遠(yuǎn)。所以,要慢慢道來(lái)。本講內(nèi)容不多,盼望看官能理解。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37400.html

相關(guān)文章

  • [基礎(chǔ)學(xué)python]編寫(xiě)類(lèi)之一創(chuàng)建實(shí)例

    摘要:接下來(lái),一般都要編寫(xiě)構(gòu)造函數(shù),在寫(xiě)這個(gè)函數(shù)之前,先解釋一下什么是構(gòu)造函數(shù)。故這個(gè)函數(shù)稱(chēng)為構(gòu)造函數(shù),擔(dān)負(fù)著對(duì)類(lèi)進(jìn)行初始化的任務(wù)。 雖然已經(jīng)對(duì)類(lèi)有了一點(diǎn)點(diǎn)模糊概念,但是,閱讀前面一講的內(nèi)容的確感到累呀,都是文字,連代碼都沒(méi)有。 本講就要簡(jiǎn)單多了,嘗試走一個(gè)類(lèi)的流程。 說(shuō)明:關(guān)于類(lèi)的這部分,我參考了《Learning Python》一書(shū)的講解。 創(chuàng)建類(lèi) 創(chuàng)建類(lèi)的方法比較簡(jiǎn)單,如下: ...

    mozillazg 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]探析get和post方法

    摘要:特別提醒,看官不要自宮,因?yàn)楸窘坛滩皇潜傩皠ψV,也不是葵花寶典,撰寫(xiě)本課程的人更是生理健全者。直到目前,科學(xué)上尚未有證實(shí)或證偽自宮和寫(xiě)程序之間是否存在某種因果關(guān)系。和是中用的最多的方法啦。 Do not store up for yourselves treasures on earth, where moth and rust consume and where thieves...

    AaronYuan 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]私有和專(zhuān)有

    摘要:私有函數(shù)在某些時(shí)候,會(huì)看到有一種方法命名比較特別,是以雙劃線(xiàn)開(kāi)頭的,將這類(lèi)命名的函數(shù)方法稱(chēng)之為私有函數(shù)。如果一個(gè)函數(shù)類(lèi)方法或?qū)傩缘拿忠詢(xún)蓚€(gè)下劃線(xiàn)開(kāi)始但不是結(jié)束它是私有的其它所有的都是公有的。比如前面反復(fù)提到的就是一個(gè)典型的專(zhuān)有方法。 在任何語(yǔ)言中,都會(huì)規(guī)定某些對(duì)象(屬性、方法、函數(shù)、類(lèi)等)只能夠在某個(gè)范圍內(nèi)訪(fǎng)問(wèn),出了這個(gè)范圍就不能訪(fǎng)問(wèn)了。這是公、私之分。此外,還會(huì)專(zhuān)門(mén)為某些特殊的東西...

    tinysun1234 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]python開(kāi)發(fā)框架

    摘要:軟件開(kāi)發(fā)者通常依據(jù)特定的框架實(shí)現(xiàn)更為復(fù)雜的商業(yè)運(yùn)用和業(yè)務(wù)邏輯。所有,做開(kāi)發(fā),要用一個(gè)框架。的性能是相當(dāng)優(yōu)異的,因?yàn)樗鼛熗浇鉀Q一個(gè)被稱(chēng)之為問(wèn)題,就是處理大于或等于一萬(wàn)的并發(fā)。 One does not live by bread alone,but by every word that comes from the mouth of God --(MATTHEW4:4) 不...

    lucas 評(píng)論0 收藏0
  • [基礎(chǔ)學(xué)python]編寫(xiě)類(lèi)之四再論繼承

    摘要:從運(yùn)行結(jié)果可以看出,當(dāng)子類(lèi)繼承多個(gè)父類(lèi)的時(shí)候,對(duì)于構(gòu)造函數(shù),只有第一個(gè)能夠被繼承,第二個(gè)就等掉了。重點(diǎn)看,類(lèi)繼承了,同時(shí),在構(gòu)造函數(shù)中自己做了規(guī)定,也就是的構(gòu)造函數(shù)是按照的意愿執(zhí)行,不執(zhí)行的內(nèi)容,但是,還有一個(gè)方法,則繼承了這個(gè)方法。 在上一講代碼的基礎(chǔ)上,做進(jìn)一步修改,成為了如下程序,請(qǐng)看官研習(xí)這個(gè)程序: #!/usr/bin/env python #coding:utf-8 c...

    BoYang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<