什麼是物件導向:
物件導向是一種對現實世界理解和抽象的方法,通過物件導向的方式,將現實世界的物抽象成物件,現實世界中的關係抽象成類、繼承,對複雜的系統進行分析、設計與程式設計;同時可以提高程式設計的效率,通過封裝技術與訊息機制可以快速的開發出乙個全新的系統,物件導向是指的一種程式設計范型,也是一種開發方法,物件是類的集合,它將物件作為程式的基本單元,將程式和資料封裝其中,以達到提高軟體的重用、靈活和擴充套件性;
物件導向所涉及的軟體開發方面:
物件導向分析(ooa:object oriented analysis)
物件導向的設計(ood:object oriented design)
物件導向的程式設計實現(oop: object oriented programming)
物件導向程式設計中的每乙個物件都應該能接受資料、處理資料並將資料傳達給其他物件。
結構化設計方法求解問題的基本策略是從功能的角度審視問題域,它將程式看成是實現某些特定任務的功能模組,其中子過程是實現某項具體操作的底層功能模組,在每個模組中用資料結構描述待處理資料的組織形式,用演算法描述具體的操作過程;
結構化設計方法的缺點:
客體:
通常人類觀察問題的視覺是客體,客體的屬性反映了客體在某一時刻的狀態,客體的行為反映了客體多能(多方面才能或功能)從事的操作,這些操作附加在客體之上,並能用來設定、改變和獲取客體的狀態。結構化設計方法所採用的設計思路不是將客體作為乙個整體,而是將依附於客體之上的行為抽取出來,以功能為目標來設計並構造應用系統,這樣做導致程式在設計時不得不將客體所構成的顯示世界對映到由功能模組組成的解空間中,這樣的變換增加了程式設計的複雜程度,而且背離了人們觀察問題和解決問題的基本思路;在任何乙個問題域中,客體是穩定的,而行為並不穩定,結構化設計方法將審視問題的視覺定位於不穩定的操作之上,並且將客體的屬性和行為分開,使得應用程式的維護和擴充套件相當的困難,由於問題的不斷擴大、環境越來越需複雜、需求變化加快,徹底改變軟體設計方法的迫在眉睫,所以物件導向應運而生;
自理解'客體:
焦點問題,比如乙個杯子,將焦點放到杯子身上的時候,杯子成為了主體,它的功能(裝東西)與屬性(大小/顏色/**等)則成了客體;當焦點放到杯子的主人身上的時候,主人成了主體,杯子則成了客體;此邏輯是觀察和解決問題的最基本的方式;
程式裡的客體和主體關係:所有問題與需求可視為主體,而整個程式(解決方案)可視為客體;
抽象級別
抽象是人解決問題的基本方式,良好的抽象策略可以控制問題的複雜程度,增強系統的通用性和可擴充套件性,抽象主要包括過程抽象和資料抽象,結構化設計方法應用的是過程抽象,所謂過程抽象是將問題域中具有明確功能定義的操作抽取出來,並將其作為乙個實體看待.這種抽象級別對於軟體系統結構的設計顯得有些武斷,並且穩定性差,導致很難準確無誤的設計出系統的每乙個操作環節,一旦某個客體的屬性表示方式發生了變化,就有可能牽扯到已有系統的很多問題,而資料抽象是較過程抽象更高階別的抽象方式;將描述客體的屬性和行為繫結在一起,實現統一的抽象,從而達到對現實世界客體的真正模擬;
封裝體:
封裝是指將現實世界中存在的某個客體的屬性與行為繫結在一起,並放置在乙個邏輯單元內,該邏輯單元負責將所描述的屬性隱藏起來,外界對客體內部屬性的所有訪問只能通過提供的使用者介面實現,這樣做既可以實現對客體屬性的保護作用,有可以提高軟體系統的可維護性.只要使用者介面不改變,任何封裝體內部的改變都不會對軟體系統的其他部分造成影響.
可重用性:
可重用性標示著軟體產品的可復用能力,是衡量乙個軟體產品成功與否的重要標誌;人們越來越最求開發更多的/更有具有通用性的可重用構件,從而使軟體開發過程徹底改善,從過去的語句級編寫發展到現在的構件組裝,從而提高軟體開發效率,推動行業領域的迅速擴充套件,但是結構化程式設計方法的基本單位是模組.每個模組只是實現特定功能,因此,它的可重用單位只能是模組,這些模組對於今天的軟體開發來說重用力度是微不足道的,而且當參與操作的某些資料型別發生變化時就不能夠在使用那些模組了;所以,渴望更大力度的可重用構件是如今應用領域對軟體開發提出的新需求;
物件導向由此誕生;
基本概念:
1)物件:
物件是人們要進行研究的任何事物,從最簡單的整數到複雜的分級等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則/計畫或事件;
2)物件的狀態和行為:
物件具有狀態,乙個物件用資料值來描述它的狀態.物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為;
3)類:
具有 相同特性和行為的物件 的抽象 就是類.物件的抽象是類,類的具體化就是物件,也就是說類的例項是物件,類實際就是一種 資料型別;
類具有屬性,它是物件的狀態的抽象,用資料結構來描述類的屬性;
類具有操作,它是物件的行為的抽象,用操作名和事項該操作的方法來描述;
4)類的結構:
在客觀世界中有很多類,這些類之間有一定的結構關係.通常有兩種主要的結構關係:
一般-->具體 結構關係,被稱為分類結構,也可以說是"或"關係,或者"is a"關係;
整體-->部分 結構關係,被稱為組裝結構,他們之間的關係式一種"與"關係,或者是 "has a"關係;
5).訊息和方法:
物件之間進行通訊的結構叫做訊息,在物件的操作中當乙個訊息傳送給某個物件時,訊息包含接收物件去執行某種操作的資訊;傳送一條訊息至少要包括說明接收訊息的物件名/傳送給該物件的訊息名(物件名或方法名).一般還要對引數加以說明,引數可以是認識該訊息的物件所知道的變數名或者是所有物件都知道的全域性變數名;類中操作的實現過程叫做方法,乙個方法有方法名,返回值,引數,方法體;
特徵:
1).物件唯一性:
每個物件都有屬於自己的乙個標誌,就好比身份證號碼一樣,物件的標誌不可重複,通過這個標誌就可以找到相應的物件,標誌在物件的整個生命週期中都不可發生改變;
2).抽象性:
抽象性是指將具有一致資料和行為的物件抽象成類,乙個類就是這樣一種抽象(類就是這不同物件之間的共性),類反映了與應用有關的重要性質,而忽略了其他一些無關內容,類的劃分都是主觀的,但是必須與實際應用有關.
3).繼承性:
繼承性是指子類共享父類資料結構和方法的機制,這是類與類之間的一種關係,可以在已有類的基礎之上來進行定義和實現乙個新類,將已存在的類所定義的內容作為自己的內容,同時可以加入新的屬性和行為;類的繼承使軟體具有可擴充性和開放性,這是資訊組織和分類的高效方法,繼承特性簡化了物件以及類的建立工作,同時也增加了**的復用性;採用繼承特性提高了類規範的等級結構,通過類的與類之間的繼承關係,使公共的特性能夠共享,提高了**的重用性.
4).多型性:
多型性是指相同的操作/函式或者過程可以作用於不同型別的物件之上,並獲取到不同的結果,不同的物件收到同樣的訊息(命令)可以產生不同的結果,多型特性允許每個物件以適合自身的方式去響應共同的訊息;多型性增加了軟體的靈活性和重用性;
物件導向的理解
今天發現一本好書,設計模式精解,作者是alan shalloway和james r.trott,薄薄的一本,但是講的很清楚,也讓我對物件導向和設計模式有了多一點的理解。記得去三星實習生面試的時候面試過就問過乙個問題,談談對物件導向的理解,我當時就只說了乙個多型,而且感覺沒有條理,所以今天趁著看過書,...
物件導向的理解
1.物件導向的思想 誰擁有資料,誰就提供運算元據的方面。eg1 售票員統計票上的資料這個過程中統計方法是票據提供的。eg2 兩塊石頭磨成一塊石刀,石刀砍樹,砍成木材,木材又變成椅子 eg3.乙個小球從繩子一端移到至另一端。就第二個例子而言,石頭變成石刀,這個變成的方法不應該是石頭提供的,因為一般沒有...
物件導向的理解
關於物件導向的概念,一直都是似懂非懂的狀態,做次筆記方便日後溫故而知新 封裝 解決了資料的安全問題.繼承 解決了 的重用問題.多型 解決了程式的擴充套件問題.在現實生活中,可以理解為兒子繼承了父親的財產。財產的重用。在程式中是解決 的重用問題 繼承是利用現有的類建立新類的過程,現有的類稱作基類 父類...