不懂面相對象和面相過程【面相對象的三大特點是什么】

面相對象的特征
只要好看就行了唄對吧?你們說對吧?面向對象的什么玩意兒?哼!
面向對象和面相過程到底啥意思
過程就是分析出解決問題所需步驟,然后用函這些步步一步實現用的時候一個一個依次調用就可以了 。
“面向過程”也可稱之為“面向記錄”的編程思想,他們不支持豐富的“面向對象”特性(比如繼承、多態),并且它們不允許混合或者持久化狀態和域邏輯 。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為 。
面向對象的概念和應用已超越了程序設計和軟件開發,已經擴展到很寬的范圍 。如數據庫系統、交互式界面、應用結構、應用平臺、分布式系統、網絡管理結構、CAD技術、人工智能等領域 。但是,明確地給出對象的定義或說明對象的定義的非常少,至少現在還沒有發現 。起初,“面向對象”是專指在程序設計中采用封裝、繼承、抽象等設計 。
“面向對象”的三大特征是什么,各自的定義是什么?
封裝
封裝機制將數據和代碼捆綁到一起,避免了外干擾和不確定性 。它同樣允許創建對象 。簡單的說,一個對象就是一個封裝了數據和操作這些數據的代碼的邏輯實體 。
在一個對象內部,某些代碼和(或)某些數據可以是私有的,不能被外界訪問 。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分 。
繼承
繼承是可以讓某個類型的對象獲得另一個類型的對象的屬性的方法 。它支持按級分類的概念 。例如,知更鳥屬于飛鳥類,也屬于鳥類 。就像圖5中描繪的那樣,這種分類的原則是,每一個子類都具有父類的公共特性 。
在OOP中,繼承的概念很好的支持了代碼的重用性(reusability),也就是說,我們可以向一個已經存在的類中添加新的特性,而不必改變這個類 。這可以通過從這個已存在的類派生一個新類來實現 。這個新的類將具有原來那個類的特性,以及新的特性 。而繼承機制的魅力和強大就在于它允許程序員利用已經存在的類(接近需要,而不是完全符合需要的類),并且可以以某種方式修改這個類,而不會影響其它的東西 。
注意,每個子類只定義那些這個類所特有的特性 。而如果沒有按級分類,每類都必須顯式的定義它所有的特性 。
多態
多態是OOP的另一個重要概念 。多態的意思是事物具有不同形式的能力 。舉個例子,對于不同的實例,某個操作可能會有不同的行為 。這個行為依賴于所要操作數據的類型 。比如說加法操作,如果操作的數據是數,它對兩個數求和 。如果操作的數據是字符串,則它將連接兩個字符串 。
圖6演示了一個函數處理不同數量、不同類型的參數 。就像某個單詞在不同的上下文中具有不同的含義 。
多態機制使具有不同內部結構的對象可以共享相同的外部接口 。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調用 。多態在實現繼承的過程中被廣泛應用 。
面向對象程序設計語言支持多態,術語稱之為“one interface multiple method(一個接口,多個實現)” 。簡單來說,多態機制允許通過相同的接口引發一組相關但不相同的動作,通過這種方式,可以減少代碼的復雜度 。在某個特定的情況下應該作出怎樣的動作,這由編譯器決定,而不需要程序員手工干預 。
不懂面相對象和面相過程
object-orient和procedural這兩個術語確實都有自己的含義,不過一般人用的目的總是用來裝B 。什么c語言面向過程,c面向對象,胡說八道而已
面相對象編程?
對象是類的一個實例,有狀態為 。例如條狗是一個對象,它的狀態有:顏色、、品種;行為有:搖尾巴、叫、吃等 。
類是一個模板,它描述一類對象的行為和狀態 。
男孩(boy)、女孩(girl)為類(class),而具體的每個人為該類的對象(object)

什么叫面相對象?
很簡單你把解決問的方法,屬性,工具...都想好了,寫好了放的容內(類).然后當然一個容器(類)怎么行呢?于是你為了解決問題就想出了好多的容器(類),最后你就把這些容器(類)放到你的百寶箱里(程序).提著你的百寶箱到"問題"面前,你呀不服是不??用你的百寶箱砸它.
面向對象程序設計的優點是什么?
1.編程模型
所有計算機均由兩種元素組成:代碼和數據.精確的說,有些是圍繞著"什么正在發生"而編寫,有些則是圍繞"誰正在受影響"而編寫的.
第一種編程方式叫做"面向過程的模型",按這種模型編寫的程序以一系列的線性步驟(代碼)為特征,可被理解為作用于數據的代碼.如 C 等過程化語言.
第二種編程方式叫做"面向對象的模型",按這種模型編寫的程序圍繞著程序的數據(對象)和針對該對象而嚴格定義的接口來組織程序,它的特點是數據控制代碼的訪問.通過把控制權轉移到數據上,面向對象的模型在組織方式上有:抽象,封裝,繼承和多態的好處.
2.抽象
面向對象程序設計的基本要素是抽象,程序員通過抽象來管理復雜性.
管理抽象的有效方法是使用層次式的分類特性,這種方法允許用戶根據物理含義分解一個復雜的系統,把它劃分成更容易管理的塊.例如,一個計算機系統是一個獨立的對象.而在計算機系統內部由幾個子系統組成:顯示器,鍵盤,硬盤驅動器,DVD-ROM,軟盤,音響等,這些子系統每個又由專門的部件組成.關鍵是需要使用層次抽象來管理計算機系統(或其他任何復雜系統)的復雜性.
面向對象程序設計的本質:這些抽象的對象可以被看作具體的實體,這些實體對用來告訴我們作什么的消息進行響應.
/* (我的理解)
*計算機是一個實體,我要輸入字符,顯示器顯示出來,那么
*計算機(對象).輸入(鍵盤屬性).顯示(顯示方法)
*使用分層來引用,操作.而不用管計算機內部如何處理.
*只要有計算機對象,它就能響應我的操作,而我敲鍵盤,
*計算機對象就把這個消息傳給屏幕,屏幕顯示.
*/
計算機對象包含了它所有的屬性,以及操作,這就是面向對象程序設計的三大原則之一:封裝.
3.封裝
封裝是一種把代碼和代碼所操作的數據捆綁在一起,使這兩者不受外界干擾和誤用的機制.封裝可被理解為一種用做保護的包裝器,以防止代碼和數據被包裝器外部所定義的其他代碼任意訪問.對包裝器內部代碼與數據的訪問通過一個明確定義的接口來控制.封裝代碼的好處是每個人都知道怎樣訪問代碼,進而無需考慮實現細節就能直接使用它,同時不用擔心不可預料的副作用.
在JAVA中,最基本的封裝單元是類,一個類定義著將由一組對象所共享的行為(數據和代碼).一個類的每個對象均包含它所定義的結構與行為,這些對象就好象是一個模子鑄造出來的.所以對象也叫做類的實例.
在定義一個類時,需要指定構成該類的代碼與數據.特別是,類所定義的對象叫做成員變量或實例變量.操作數據的代碼叫做成員方法.方法定義怎樣使用成員變量,這意味著類的行為和接口要由操作實例數據的方法來定義.
由于類的用途是封裝復雜性,所以類的內部有隱藏實現復雜性的機制.所以JAVA中提供了私有和公有的訪問模式,類的公有接口代表外部的用戶應該知道或可以知道的每件東西.私有的方法數據只能通過該類的成員代碼來訪問.這就可以確保不會發生不希望的事情.
4.繼承
繼承是指一個對象從另一個對象中獲得屬性的過程.是面向對象程序設計的三大原則之二,它支持按層次分類的概念.例如,波斯貓是貓的一種,貓又是哺乳動物的一種,哺乳動物又是動物的一種.如果不使用層次的概念,每個對象需要明確定義各自的全部特征.通過層次分類方式,一個對象只需要在它的類中定義是它成為唯一的 各個屬性,然后從父類中繼承它的通用屬性.因此,正是由于繼承機制,才使得一個對象可以成為一個通用類的一個特定實例.一個深度繼承的子類將繼承它在類層次中的每個祖先的所有屬性.
繼承與封裝可以互相作用.如果一個給定的類封裝了某些屬性,它的任何子類將會含有同樣得屬性,另加各個子類所有得屬性.這是面向對象程序在復雜性上呈線性而非幾何增長的一個重要概念.新的子類繼承其所有祖先的所有屬性.子類和系統中的其他代碼不會產生無法預料的交互作用.
5.多態
多態是指一個方法只能有一個名稱,但可以有許多形態,也就是程序中可以定義多個同名的方法,用"一個接口,多個方法"來描述.可以通過方法的參數和類型引用.
6.封裝,繼承,多態的組合使用
在由封裝,繼承,多態所組成的環境中,程序員可以編寫出比面向過程模型更健壯,更具擴展性的程序.經過仔細設計的類層次結構是重用代碼的基礎.封裝能讓程序員不必修改公有接口的代碼即可實現程序的移植.多態能使程序員開發出簡潔,易懂,易修改的代碼.例如:汽車
從繼承的角度看,駕駛員都依靠繼承性來駕駛不同類型(子類)的汽車,無論這輛車是轎車還是卡車,是奔馳牌還是菲亞特牌,駕駛員都能找到方向盤,手剎,換檔器.經過一段時間駕駛后,都能知道手動檔與自動檔之間的差別,因為他們實際上都知道這兩者的共同超類:傳動裝置.
從封裝的角度看,駕駛員總是看到封裝好的特性.剎車隱藏了許多復雜性,其外觀如此簡單,用腳就能操作它.發動機,手剎,輪胎大小的實現對與剎車類的定義沒有影響.
從多態的角度看,剎車系統有正鎖反鎖之分,駕駛員只用腳踩剎車停車,同樣的接口可以用來控制若干種不同的實現(正鎖或反鎖).
這樣各個獨立的構件才被轉換為汽車這個對象的.同樣,通過使用面向對象的設計原則,程序員可以把一個復雜程序的各個構件組合在一起,形成一個一致,健壯,可維護的程序