基本概念
面向對象程序設計中的概念主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性、消息傳遞。經過這些概念面向對象的思想獲得了具體的體現。
1)對象(Object) 能夠對其作事情的一些東西。一個對象有狀態、行爲和標識三種屬性。
2)類(class) 一個共享相同結構和行爲的對象的集合。
3)封裝(encapsulation): 第一層意思:將數據和操做捆綁在一塊兒,創造出一個新的類型的過程。第二層意思:將接口與實現分離的過程。
4)繼承 類之間的關係,在這種關係中,一個類共享了一個或多個其餘類定義的結構和行爲。繼承描述了類之間的「是一種」關係。子類能夠對基類的行爲進行擴展、覆蓋、重定義。
5)組合 既是類之間的關係也是對象之間的關係。在這種關係中一個對象或者類包含了其餘的對象和類。
組合描述了「有」關係。
6)多態 類型理論中的一個概念,一個名稱能夠表示不少不一樣類的對象,這些類和一個共同超類有關。所以,這個名稱表示的任何對象能夠以不一樣的方式響應一些共同的操做集合。
7)動態綁定 也稱動態類型,指的是一個對象或者表達式的類型直到運行時才肯定。一般由編譯器插入特殊代碼來實現。與之對立的是靜態類型。
8)靜態綁定 也稱靜態類型,指的是一個對象或者表達式的類型在編譯時肯定。
9)消息傳遞 指的是一個對象調用了另外一個對象的方法(或者稱爲成員函數)。算法
10)方法 也稱爲成員函數,是指對象上的操做,做爲類聲明的一部分來定義。方法定義了能夠對一個對象執行那些操做。數據庫
語言
一種語言要稱爲面嚮對象語言,必須支持面向對象幾個主要的概念。根據支持程度的不一樣,一般所說的面嚮對象語言能夠分紅兩類:基於對象的語言和麪向對象的語言。
基於對象的語言
基於對象的語言僅支持類和對象,舉例來講,Ada就是一個典型的基於對象的語言,由於它不支持繼承、多態,此外其餘基於對象的語言還有Alphard、CLU、Euclid、Modula。
面向對象的語言
面向對象的語言支持的概念包括:類與對象、繼承、多態。
面向對象的語言中一部分是新發明的語言,如Smalltalk、Java,這些語言自己每每吸收了其餘語言的精華,而又儘可能剔除他們的不足,所以面向對象的特徵特別明顯,充滿了蓬勃的生機;另一些則是對現有的語言進行改造,增長面向對象的特徵演化而來的。如由Pascal發展而來的Object Pascal,由C發展而來的Objective-C,C++ ,由Ada發展而來的Ada95等,這些語言保留着對原有語言的兼容,並非純粹的面嚮對象語言,但因爲其前身每每是有必定影響的語言,所以這些語言依然寶刀不老,在程序設計語言中佔有十分重要的地位。編程
優勢
面向對象出現之前,結構化程序設計是程序設計的主流,結構化程序設計又稱爲面向過程的程序設計。在面向過程程序設計中,問題被看做一系列須要完成的任務,函數(在此泛指例程、函數、過程)用於完成這些任務,解決問題的焦點集中於函數。其中函數是面向過程的,即它關注如何根據規定的條件完成指定的任務。
在多函數程序中,許多重要的數據被放置在全局數據區,這樣它們能夠被全部的函數訪問。每一個函數均可以具備它們本身的局部數據。
這種結構很容易形成全局數據在無心中被其餘函數改動,於是程序的正確性不易保證。面向對象程序設計的出發點之一就是彌補面向過程程序設計中的一些缺點:對象是程序的基本元素,它將數據和操做緊密地連結在一塊兒,並保護數據不會被外界的函數意外地改變。
比較面向對象程序設計和麪向過程程序設計,還能夠獲得面向對象程序設計的其餘優勢:
1)數據抽象的概念能夠在保持外部接口不變的狀況下改變內部實現,從而減小甚至避免對外界的干擾;
2)經過繼承大幅減小冗餘的代碼,並能夠方便地擴展示有代碼,提升編碼效率,也減低了出錯機率,下降軟件維護的難度;
3)結合面向對象分析、面向對象設計,容許將問題域中的對象直接映射到程序中,減小軟件開發過程當中中間環節的轉換過程;
4)經過對對象的辨別、劃分能夠將軟件系統分割爲若干相對爲獨立的部分,在必定程度上更便於控制軟件複雜度;
5)以對象爲中心的設計能夠幫助開發人員從靜態(屬性)和動態(方法)兩個方面把握問題,從而更好地實現系統;
6)經過對象的聚合、聯合能夠在保證封裝與抽象的原則下實現對象在內在結構以及外在功能上的擴充,從而實現對象由低到高的升級。函數
設計方法
對象:對象是要研究的任何事物。從一本書到一家圖書館,單的整數到整數列龐大的數據庫、極其複雜的自動化工廠、航天飛機均可看做對象,它不只能表示有形的實體,也能表示無形的(抽象的)規則、計劃或事件。對象由數據(描述事物的屬性)和做用於數據的操做(體現事物的行爲)構成一獨立總體。從程序設計者來看,對象是一個程序模塊,從用戶來看,對象爲他們提供所但願的行爲。在對內的操做一般稱爲方法。
類:類是對象的模板。即類是對一組有相同數據和相同操做的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行爲。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,造成類層次結構。
消息:消息是對象之間進行通訊的一種規格說明。通常它由三部分組成:接收消息的對象、消息名及實際變元。
面向對象主要特徵:
封裝性:封裝是一種信息隱蔽技術,它體現於類的說明,是對象的重要特性。封裝使數據和加工該數據的方法(函數)封裝爲一個總體,以實現獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具備那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的算法)對用戶是隱蔽的。封裝的目的在於把對象的設計者和對象者的使用分開,使用者沒必要知曉行爲實現的細節,只須用設計者提供的消息來訪問該對象。
繼承性:繼承性是子類自動共享父類之間數據和方法的機制。它由類的派生功能體現。一個類直接繼承其它類的所有描述,同時可修改和擴充。繼承具備傳遞性。繼承分爲單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,若是沒繼承性機制,則類對象中數據、方法就會出現大量重複。繼承不只支持系統的可重用性,並且還促進系統的可擴充性。
多態性:對象根據所接收的消息而作出動做。同一消息爲不一樣的對象接受時可產生徹底不一樣的行動,這種現象稱爲多態性。利用多態性用戶可發送一個通用的信息,而將全部的實現細節都留給接受消息的對象自行決定,如是,同一消息便可調用不一樣的方法。例如:Print消息被髮送給一圖或表時調用的打印方法與將一樣的Print消息發送給一正文文件而調用的打印方法會徹底不一樣。多態性的實現受到繼承性的支持,利用類繼承的層次關係,把具備通用功能的協議存放在類層次中儘量高的地方,而將實現這一功能的不一樣方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不一樣的響應。在OOPL中可經過在派生類中重定義基類函數(定義爲重載函數或虛函數)來實現多態性。
綜上可知,在面對對象方法中,對象和傳遞消息分別表現事物及事物間相互聯繫的概念。類和繼承是是適應人們通常思惟方式的描述範式。方法是容許做用於該類對象上的各類操做。這種對象、類、消息和方法的程序設計範式的基本點在於對象的封裝性和類的繼承性。經過封裝能將對象的定義和對象的實現分開,經過繼承能體現類與類之間的關係,以及由此帶來的動態聯編和實體的多態性,從而構成了面向對象的基本特徵。
面向對象設計是一種把面向對象的思想應用於軟件開發過程當中,指導開發活動的系統方法,是創建在「對象」概念基礎上的方法學。對象是由數據和允許的操做組成的封裝體,與客觀實體有直接對應關係,一個對象類定義了具備類似性質的一組對象。而每繼承性是對具備層次關係的類的屬性和操做進行共享的一種方式。所謂面向對象就是基於對象概念,以對象爲中心,以類和繼承爲構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟件系統。。按照Bjarne STroustRUP的說法,面向對象的編程範式:
l 決定你要的類;
2 給每一個類提供完整的一組操做;
3 明確地使用繼承來表現共同點。
由這個定義,咱們能夠看出:面向對象設計就是「根據需求決定所需的類、類的操做以及類之間關聯的過程」。工具
特色
面向對象設計方法以對象爲基礎,利用特定的軟件工具直接完成從對象客體的描述到軟件結構之間的轉換。這是面向對象設計方法最主要的特色和成就。面向對象設計方法的應用解決了傳統結構化開發方法中客觀世界描述工具與軟件結構的不一致性問題,縮短了開發週期,解決了從分析和設計到軟件模塊結構之間屢次轉換映射的繁雜過程,是一種頗有發展前途的系統開發方法。
可是同原型方法同樣, 面向對象設計方法須要必定的軟件基礎支持才能夠應用,另外在大型的MIS開發中若是不經自頂向下的總體劃分,而是一開始就自底向上的採用面向對象設計方法開發系統,一樣也會形成系統結構不合理、各部分關係失調等問題。因此面向對象設計方法和結構化方法目前還是兩種在系統開發領域相互依存的、不可替代的方法。編碼