計算機誕生以來,為適應程式不斷增長的復雜程序,程式設計方法論發生了巨大變化,例如,在計算機發展初期,程式設計是通過輸入二進制機器指令來完成的,在程式僅限于幾百條指令的情況下,這種方法是可接受的,隨著程式規模的增長,人們發明了匯編語言,這樣程式員就可以使用代表機器指令的符號表示法來處理大型的、復雜的程式,隨著程式規模的繼續增長,高級語言的引入為程式員提供了更多的工具,這些工具可以使他們能夠處理更復雜的程式,
20世紀60年代誕生了結構化程式設計方法,Pascal和C語言是使用這種方法的語言,結構化編程采用了模塊分解與功能抽象和自頂向下、分而治之的方法,從而有效地將一個較復雜的程式系統設計任務分解成許多易于控制和處理的子程式,便于開發和維護,但是由于在實際開發中需求會經常發生變化,因此,它不能很好地適應需求變化的開發程序,結構化程式設計是面向程序的,
面向物件程式設計師一種功能強大的設計方法,它吸收了結構化程式設計的思想精華,并且提出了一些新的概念,廣義上講,一個程式可以用兩種方法組織:一是圍繞代碼(發生了什么);二是圍繞資料(誰受了影響),如果僅使用結構化程式設計技術,那么程式通常圍繞代碼來組織,
面向物件程式則以另一種方式作業,它們圍繞資料來組織程式,在面向物件語言中,需要定義資料和作用于資料的操作,
1 面向程序
面向程序編程(Procedure Oriented Programming,OPP)是一種以事物為中心的編程思想,主要關注“怎么做”,即完成任務的具體細節,它以程序(可以理解為方法、函式、操作)作為組織代碼的基本單元,以資料(可以理解為成員變數、屬性)與方法相分離為最主要的特點,面向程序風格是一種流程化的編程風格,通過拼接一組順序執行的方法來操作資料完成一項功能,
2 面向物件
2.1 概述
面向物件編程(Object Oriented Programming,OOP)是一種以物件為基礎的編程思想,主要關注“誰來做”,即完成任務的物件,使用這種方法開發的軟體具有易維護性、可重用和可擴展等特性,
2.2 基本概念
1.物件
在現實世界中,物件無處不在,人們身邊存在的一切事物都是物件,例如,一個人、一輛汽車、一臺電視機、一所學校甚至一個地球,這些都是物件,除了這些可以觸及的事物是物件外,還有一些抽象的概念,如一次會議、一場足球比賽、一個賬戶等也都可以抽象為一個物件,
一個物件一般具有兩方面的特征:狀態和行為,狀態用來描述物件的靜態特征,行為用來描述物件的動態特征,
例如,一輛汽車可以用下面的特征描述:生產廠家、顏色、最高時速、出廠年份、價格等,汽車可以啟動、加速、轉彎和停止等,這些是汽車所具有的行為或者說施加在汽車上的操作,又如,一場足球比賽可以通過比賽時間、比賽地點、參加的球隊和比賽結果等特性來描述,軟體物件也是對現實世界物件的狀態和行為的模擬,如軟體中的視窗就是一個物件,它可以有自己的狀態和行為,
通過上面的說明,可以給“物件”下一個定義,即物件是現實世界中的一個物體,它具有如下特征:有一個狀態,用來描述它的某些特征,有一組操作,每個操作決定物件的一種功能或行為,
因此,物件是其自身所具有的狀態特征及可以對這些狀態施加的操作結合在一起所構成的物體,一個物件可以非常簡單,也可以非常復雜,復雜的物件往往是由若干個簡單物件組合而成,例如,一輛汽車就是由發動機、輪胎、車身等許多其他物件組成,
2.類
類(class)是面向物件系統中最重要的概念,在日常生活中經常提到類這個詞,如人類、魚類、鳥類等,類可以定義為具有相似特征和行為的物件的集合,如人類共同具有的區別于其他動物的特征有直立行走、使用工具、使用語言交流等,所有的事物都可以歸到某類中,例如,汽車屬于交通工具類,手機屬于通信工具類,
屬于某個類的一個具體的物件稱為該類的一個實體(instance),例如,我的汽車是汽車類中的一個實體,實體與物件是同一個概念,
類與實體的關系是抽象與具體的關系,類是多個實體的綜合抽象,實體是某個類的個體實物,
3.訊息
物件與物件之間不是孤立的,它們之間存在著某種聯系,這種聯系是通過訊息傳遞的,例如,開汽車就是人向汽車傳遞訊息,
一個物件發送的訊息包含三方面的內容:接收訊息的物件;接受物件采用的方法(操作);方法所需要的引數,
2.3 面向物件的基本特征
面向物件最基本的特征為:封裝性、繼承性、多型性,
1.封裝性
封裝(encapsulation)就是把物件的狀態(屬性)和行為(方法)結合成一個獨立的系統單位,并盡可能的隱藏物件的內部細節,封裝使得一個物件形成兩個部分:介面部分和實作部分,對用戶來說,介面部分是可見的,而實作部分是不可見的,封裝提供了兩種保護,首先封裝可以保護物件,防止用戶直接存取物件的內部細節;其次封裝也保護了客戶端,防止物件實作部分的改變可能產生的副作用,即實作部分的改變不會影響到客戶端的改變,
2.繼承性
繼承(inheritance)的概念普遍存在于現實世界中,它是一個物件獲得另一個物件屬性的程序,繼承之所以重要,是因為它支持層次結構類的概念,可以發現,在現實世界中,許多知識都是通過層次結構方式進行管理的,
3.多型性
多型性(ploymorphism)是面向物件編程語言的一個重要特征,所謂多型,是指一個程式中相同的名字表示不同含義的情況,面向物件中多型有多種情況,在簡單的情況下,在同一個類中定義了多個名稱相同的方法,即方法多載;另一種情況是子類中定義的與父類中的方法同名的方法,即方法覆寫,這兩種情況都稱為多型,且前者為靜態多型,后者稱為動態多型,
3 面向物件與面向程序的區別
如今主流的軟體開發思想有兩種:一個是面向物件,另一個是面向程序,面向程序出現的較早,典型代表為C語言,開發中小型專案的效率很高,但是很難適應如今主流的大中型專案開發場景,面向物件則出現的更晚一些,典型代表為Java和C++等語言,更加適用于大型開發場景,兩種開發思想各有長短,
對于面向程序的思想:當需要實作一個功能時,看中的是每一個步驟怎么做,整體的程序是怎樣的,每一個程序都需要自己親力親為,
對于面向程序的思想:當需要實作一個功能時,不看重具體的程序和步驟是怎樣的,而是關心“誰能幫我做這件事”,
面向程序是最為實際的一種思考方式,就算是面向物件的方法也是含有面向程序的思想,可以說面向程序是一種基礎的方法,它考慮的是實際地實作,一般的面向程序是從上往下步步求精,所以面向程序最重要的是模塊化的思想方法,當程式規模不是很大時,面向程序的方法還會體現出一種優勢,因為程式的流程很清楚,按著模塊與函式的方法可以很好的組織,
面向物件是基于物件概念,以物件為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統,類和繼承是是適應人們一般思維方式的描述范式,方法是允許作用于該類物件上的各種操作,這種物件、類、訊息和方法的程式設計范式的基本點在于物件的封裝性和類的繼承性,通過封裝能將物件的定義和物件的實作分開,通過繼承能體現類與類之間的關系,以及由此帶來的動態聯編和物體的多型性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540600.html
標籤:其他
上一篇:SpringMVC學習筆記
