[零基礎學python]關於類的初步認識

在開始部分,請看官很是很是耐心地閱讀下面幾個枯燥的術語解釋,原本這不符合本教程的風格,可是,請看官諒解,由於列位未來必定要閱讀枯燥的東西的。這些枯燥的屬於解釋,均來自維基百科。python

一、問題空間程序員

問題空間是問題解決者對一個問題所達到的所有認識狀態,它是由問題解決者利用問題所包含的信息和已貯存的信息主動地構成的。編程

一個問題通常有下面三個方面來定義:設計模式

  • 初始狀態——一開始時的不徹底的信息或使人不滿意的情況;
  • 目標狀態——你但願得到的信息或狀態;
  • 操做——爲了從初始狀態邁向目標狀態,你可能採起的步驟。

這三個部分加在一塊兒定義了問題空間(problem space)。架構

二、對象編程語言

對象(object),臺灣譯做物件,是面向對象(Object Oriented)中的術語,既表示客觀世界問題空間(Namespace)中的某個具體的事物,又表示軟件系統解空間中的基本元素。模塊化

在軟件系統中,對象具備惟一的標識符,對象包括屬性(Properties)和方法(Methods),屬性就是須要記憶的信息,方法就是對象可以提供的服務。在面向對象(Object Oriented)的軟件中,對象(Object)是某一個類(Class)的實例(Instance)。函數

三、面向對象學習

面向對象程序設計(英語:Object-oriented programming,縮寫:OOP)是一種程序設計範型,同時也是一種程序開發的方法。對象指的是類的實例。它將對象做爲程序的基本單元,將程序和數據封裝其中,以提升軟件的重用性、靈活性和擴展性。spa

面向對象程序設計能夠看做一種在程序中包含各類獨立而又互相調用的對象的思想,這與傳統的思想恰好相反:傳統的程序設計主張將程序看做一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每個對象都應該可以接受數據、處理數據並將數據傳達給其它對象,所以它們均可以被看做一個小型的「機器」,即對象。

目前已經被證明的是,面向對象程序設計推廣了程序的靈活性和可維護性,而且在大型項目設計中廣爲應用。 此外,支持者聲稱面向對象程序設計要比以往的作法更加便於學習,由於它可以讓人們更簡單地設計並維護程序,使得程序更加便於分析、設計、理解。反對者在某些領域對此予以否定。

當咱們提到面向對象的時候,它不只指一種程序設計方法。它更多意義上是一種程序開發方式。在這一方面,咱們必須瞭解更多關於面向對象系統分析和麪向對象設計(Object Oriented Design,簡稱OOD)方面的知識。

下面再引用一段來自維基百科中關於OOP的歷史。

面向對象程序設計的雛形,早在1960年的Simula語言中便可發現,當時的程序設計領域正面臨着一種危機:在軟硬件環境逐漸複雜的狀況下,軟件如何獲得良好的維護?面向對象程序設計在某種程度上經過強調可重複性解決了這一問題。20世紀70年代的Smalltalk語言在面向對象方面堪稱經典——以致於30年後的今天依然將這一語言視爲面嚮對象語言的基礎。

計算機科學中對象和實例概念的最先萌芽能夠追溯到麻省理工學院的PDP-1系統。這一系統大概是最先的基於容量架構(capability based architecture)的實際系統。另外1963年Ivan Sutherland的Sketchpad應用中也蘊含了一樣的思想。對象做爲編程實體最先是於1960年代由Simula 67語言引入思惟。Simula這一語言是奧利-約翰·達爾和克利斯登·奈加特在挪威奧斯陸計算機中心爲模擬環境而設計的。(聽說,他們是爲了模擬船隻而設計的這種語言,而且對不一樣船隻間屬性的相互影響感興趣。他們將不一樣的船隻概括爲不一樣的類,而每個對象,基於它的類,能夠定義它本身的屬性和行爲。)這種辦法是分析式程序的最先概念體現。在分析式程序中,咱們將真實世界的對象映射到抽象的對象,這叫作「模擬」。Simula不只引入了「類」的概念,還應用了實例這一思想——這多是這些概念的最先應用。

20世紀70年代施樂PARC研究所發明的Smalltalk語言將面向對象程序設計的概念定義爲,在基礎運算中,對對象和消息的普遍應用。Smalltalk的建立者深受Simula 67的主要思想影響,但Smalltalk中的對象是徹底動態的——它們能夠被建立、修改並銷燬,這與Simula中的靜態對象有所區別。此外,Smalltalk還引入了繼承性的思想,它所以一舉超越了不可建立實例的程序設計模型和不具有繼承性的Simula。此外,Simula 67的思想亦被應用在許多不一樣的語言,如Lisp、Pascal。

面向對象程序設計在80年代成爲了一種主導思想,這主要應歸功於C++——C語言的擴充版。在圖形用戶界面(GUI)日漸崛起的狀況下,面向對象程序設計很好地適應了潮流。GUI和麪向對象程序設計的緊密關聯在Mac OS X中可見一斑。Mac OS X是由Objective-C語言寫成的,這一語言是一個仿Smalltalk的C語言擴充版。面向對象程序設計的思想也使事件處理式的程序設計更加普遍被應用(雖然這一律念並不是僅存在於面向對象程序設計)。一種說法是,GUI的引入極大地推進了面向對象程序設計的發展。

蘇黎世聯邦理工學院的尼克勞斯·維爾特和他的同事們對抽象數據和模塊化程序設計進行了研究。Modula-2將這些都包括了進去,而Oberon則包括了一種特殊的面向對象方法——不一樣於Smalltalk與C++。

面向對象的特性也被加入了當時較爲流行的語言:Ada、BASIC、Lisp、Fortran、Pascal以及種種。因爲這些語言最初並無面向對象的設計,故而這種糅合經常會致使兼容性和維護性的問題。與之相反的是,「純正的」面嚮對象語言卻缺少一些程序員們賴以生存的特性。在這一大環境下,開發新的語言成爲了當務之急。做爲先行者,Eiffel成功地解決了這些問題,併成爲了當時較受歡迎的語言。

在過去的幾年中,Java語言成爲了廣爲應用的語言,除了它與C和C++語法上的近似性。Java的可移植性是它的成功中不可磨滅的一步,由於這一特性,已吸引了龐大的程序員羣的投入。

在最近的計算機語言發展中,一些既支持面向對象程序設計,又支持面向過程程序設計的語言悄然浮出水面。它們中的佼佼者有Python、Ruby等等。

正如面向過程程序設計使得結構化程序設計的技術得以提高,現代的面向對象程序設計方法使得對設計模式的用途、契約式設計和建模語言(如UML)技術也獲得了必定提高。

列位看官,當您閱讀到這句話的時候,我就姑且認爲您已經對面向對象有了一個模糊的認識了。那麼,類和OOP有什麼關係呢?

維基百科中這樣定義了類:

在面向對象程式設計,類(class)是一種面向對象計算機編程語言的構造,是建立對象的藍圖,描述了所建立的對象共同的屬性和方法。

類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。它描述了一些對象的行爲規則,而這些對象就被稱爲該類的實例。類有接口和結構。接口描述瞭如何經過方法與類及其實例互操做,而結構描述了一個實例中數據如何劃分爲多個屬性。類是與某個層的對象的最具體的類型。類還能夠有運行時表示形式(元對象),它爲操做與類相關的元數據提供了運行時支持。

支持類的編程語言在支持與類相關的各類特性方面都多多少少有一些微妙的差別。大多數都支持不一樣形式的類繼承。許多語言還支持提供封裝性的特性,好比訪問修飾符。類的出現,爲面向對象編程的三個最重要的特性(封裝性,繼承性,多態性),提供了實現的手段。

看到這裏,看官或許有一個認識,要OOP編程,就得用到類。能夠這麼說,雖然不是很嚴格。可是,反過來就不能說了。不是說用了類就必定是OOP。

編寫類

對類的理解,須要看官有必定的抽象思惟。由於類(Class)自己所定義的是某事物的抽象特色。例如定義一個類:

class Human:        #這是定義類的方法,一般類的名稱用首字母大寫的單詞或者單詞拼接
    pass

好,如今就從這裏開始,編寫一個類,不過此次咱們暫時不用python,而是用僞代碼,固然,這個代碼跟python相去甚遠。以下:

class Human:
    四肢
    性格
    愛好
    學習()

對象(Object)是類的實例。剛纔已經定義了一個名字爲Human的類,從而定義了世界上全部的Human,可是這是一個抽象的Human,不是具體某我的。而對一個具體的人,他的四肢特色、性格、愛好等都是具體的,這些東西在這裏被稱之爲屬性。

下面就找一個具體的人:王二麻子,把上面的類實例化。

王二麻子 = Human()
王二麻子.四肢 = 修長
王二麻子.愛好 = 看MM

在這裏,王二麻子就是Human這個類的一個實例。一個具體對象屬性的值被稱做它的「狀態」。(系統給對象分配內存空間,而不會給類分配內存空間,這很好理解,類是抽象的系統不可能給抽象的東西分配空間,對象是具體的)

行文至此,看官是否是大概對類有了一個模糊的認識了呢?

鑑於類,距離咱們的直觀感受彷佛有點遠。因此,要慢慢道來。本講內容很少,盼望看官能理解。

相關文章
相關標籤/搜索