摘要:反對者在某些領域對此予以否認。下面再引用一段來自維基百科中關于的歷史。類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。類還可以有運行時表示形式元對象,它為操作與類相關的元數據提供了運行時支持。
在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術語解釋,本來這不符合本教程的風格,但是,請看官諒解,因為列位將來一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。
1、問題空間
問題空間是問題解決者對一個問題所達到的全部認識狀態,它是由問題解決者利用問題所包含的信息和已貯存的信息主動地構成的。
一個問題一般有下面三個方面來定義:
初始狀態——一開始時的不完全的信息或令人不滿意的狀況;
目標狀態——你希望獲得的信息或狀態;
操作——為了從初始狀態邁向目標狀態,你可能采取的步驟。
這三個部分加在一起定義了問題空間(problem space)。
2、對象
對象(object),臺灣譯作物件,是面向對象(Object Oriented)中的術語,既表示客觀世界問題空間(Namespace)中的某個具體的事物,又表示軟件系統解空間中的基本元素。
在軟件系統中,對象具有唯一的標識符,對象包括屬性(Properties)和方法(Methods),屬性就是需要記憶的信息,方法就是對象能夠提供的服務。在面向對象(Object Oriented)的軟件中,對象(Object)是某一個類(Class)的實例(Instance)。
3、面向對象
面向對象程序設計(英語:Object-oriented programming,縮寫:OOP)是一種程序設計范型,同時也是一種程序開發的方法。對象指的是類的實例。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。
面向對象程序設計可以看作一種在程序中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據并將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。
目前已經被證實的是,面向對象程序設計推廣了程序的靈活性和可維護性,并且在大型項目設計中廣為應用。 此外,支持者聲稱面向對象程序設計要比以往的做法更加便于學習,因為它能夠讓人們更簡單地設計并維護程序,使得程序更加便于分析、設計、理解。反對者在某些領域對此予以否認。
當我們提到面向對象的時候,它不僅指一種程序設計方法。它更多意義上是一種程序開發方式。在這一方面,我們必須了解更多關于面向對象系統分析和面向對象設計(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這個類的一個實例。一個具體對象屬性的值被稱作它的“狀態”。(系統給對象分配內存空間,而不會給類分配內存空間,這很好理解,類是抽象的系統不可能給抽象的東西分配空間,對象是具體的)
行文至此,看官是不是大概對類有了一個模糊的認識了呢?
鑒于類,距離我們的直觀感覺似乎有點遠。所以,要慢慢道來。本講內容不多,盼望看官能理解。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37400.html
摘要:接下來,一般都要編寫構造函數,在寫這個函數之前,先解釋一下什么是構造函數。故這個函數稱為構造函數,擔負著對類進行初始化的任務。 雖然已經對類有了一點點模糊概念,但是,閱讀前面一講的內容的確感到累呀,都是文字,連代碼都沒有。 本講就要簡單多了,嘗試走一個類的流程。 說明:關于類的這部分,我參考了《Learning Python》一書的講解。 創建類 創建類的方法比較簡單,如下: ...
摘要:特別提醒,看官不要自宮,因為本教程不是辟邪劍譜,也不是葵花寶典,撰寫本課程的人更是生理健全者。直到目前,科學上尚未有證實或證偽自宮和寫程序之間是否存在某種因果關系。和是中用的最多的方法啦。 Do not store up for yourselves treasures on earth, where moth and rust consume and where thieves...
摘要:私有函數在某些時候,會看到有一種方法命名比較特別,是以雙劃線開頭的,將這類命名的函數方法稱之為私有函數。如果一個函數類方法或屬性的名字以兩個下劃線開始但不是結束它是私有的其它所有的都是公有的。比如前面反復提到的就是一個典型的專有方法。 在任何語言中,都會規定某些對象(屬性、方法、函數、類等)只能夠在某個范圍內訪問,出了這個范圍就不能訪問了。這是公、私之分。此外,還會專門為某些特殊的東西...
摘要:軟件開發者通常依據特定的框架實現更為復雜的商業運用和業務邏輯。所有,做開發,要用一個框架。的性能是相當優異的,因為它師徒解決一個被稱之為問題,就是處理大于或等于一萬的并發。 One does not live by bread alone,but by every word that comes from the mouth of God --(MATTHEW4:4) 不...
摘要:從運行結果可以看出,當子類繼承多個父類的時候,對于構造函數,只有第一個能夠被繼承,第二個就等掉了。重點看,類繼承了,同時,在構造函數中自己做了規定,也就是的構造函數是按照的意愿執行,不執行的內容,但是,還有一個方法,則繼承了這個方法。 在上一講代碼的基礎上,做進一步修改,成為了如下程序,請看官研習這個程序: #!/usr/bin/env python #coding:utf-8 c...
閱讀 1290·2021-11-24 09:39
閱讀 2631·2021-09-30 09:47
閱讀 1324·2021-09-22 15:15
閱讀 2410·2021-09-10 10:51
閱讀 1953·2019-08-30 15:55
閱讀 2976·2019-08-30 11:06
閱讀 896·2019-08-30 10:53
閱讀 830·2019-08-29 17:26