面向對象的由來
OO方法起源於面向對象的編程語言(簡稱為OOPL)。
50年代,用ORTRAN編寫大型程序是,常出現變量名在程序不同部分發生沖突問題
於是ALGOL語言的設計師在ALGOL60中采用了以Begin......End為標識的程序塊,讓塊內變量名是局部的以避免它們於程序中塊外的同名變量相沖突。
60年代Simuls語言在ALGOL基礎上研制開發,它將ALGOL的塊結構概念向前發展一步,提出了對象的概念,並使用了類也支持類繼承。
70年代Smalltalk語言誕生,它取Simula的類為核心概念,它的很多內容鑒於Lisp
從80年代起人們提出有關信息隱蔽和抽象數據類型等概念,以及由Modula2、Ada和Smalltalk等語言所奠定的基礎,在加上客觀的需求的推動,進行了大量的理論研究和實踐探索,不同類型的面向對象語言(如:Object-c、Eiffel、c++、Java、Object-Pascal等)逐步的發展和建立起比較完整且開發出來的,OO方法的概念理論體系和使用的軟件系統。
正是通過Smalltalk80的研制和廣泛應用,使人們注意到OO方法所具有的模塊化、信息封裝與隱蔽、抽象性、繼承性、多樣性等獨特之處,這些優異特性為研制大型軟件、提高軟件可靠性、可重用性、可擴充性和可維護性提供了有效的手段和途徑
后來面向對象被廣泛應用於程序設計語言、形式定義、設計方法學、操作系統、分布系統、人工智能、實時系統、數據庫、人機接口、計算機體系結構以及(OOPSLA“86”)國際會議,使面向對象受到世人矚目,其后每年都舉行一次,這進一步標志OO方法的研究已經普及到全世界了。
面向對象:就是一種計算機程序的一種設計方法,或者是一種計算機程序設計范式,其中的基本思想是利用對象、類、繼承、封裝、多態等的基本感念來進行程序設計。從現實生活中客觀存在的事物(對象)出發來構造軟件系統,並且在系統構造中盡可能運用人類的自然思維方式。
對象:對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象是由一組屬性和對這組對象的屬性進行操作的一組服務組成。比如:一條狗是一個對象,它的狀態有顏色、名字、品種;行為有:搖尾巴、叫、吃、跑、咬人等。
類的實例化可生成對象,一個對象的生命周期包括三個階段:生成、使用、消除。
類:類是具有相同屬性和方法的一組對象的集合,它是屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在程序中,類是一個獨立的程序單位,它應該有一個類並包括屬性和方法兩個主要部分。
面向對象的三大主要特征
封裝:就是隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別,將抽象得到的數據和行為(或功能)相結合,
形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機結合,形成“類”,其中數據和函數都是類的成員。
封裝的優點:
良好的封裝能夠減少耦合,符合程序設計追求“高內聚,低耦合”。
類內部的結構可以自由修改。
可以對成員變量進行更精准的控制。
隱藏信息實現細節。
繼承:繼承機制允許創建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象具有父類的實例域和方法,或子類從父類繼承方法,
使得子類具有父類相同的行為。
繼承的特征:
子類擁有父類非private的屬性、方法。
子類可以擁有自己的屬性的方法,即子類可以對父類進行擴展。
子類可以用自己的方式實現父類的方法,即重寫父類方法。
提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系越緊密,代碼獨立性越差)
多態:多態是同一個行為具有多個不同表現形式或形態的能力。是指一個類實例(對象)的相同方法在不同清醒有不同表現形式。
多態機制使具有不同內部結構的對象可以共享相同的外部接口。這就意味着,雖然針對不同對象的具體操作不同,但通過一個公共的類,
那些操作可以通過相同的方式予以調用。
多態的優點:
消除類型之間的耦合關系
可替換性
可擴充性
接口性
靈活性
簡化性
多態存在的三個必要條件
繼承
重寫(子類繼承父類后對父類方法進行重新定義)
父類引用指向子類對象