1. 程式人生 > >面向對象三大特征之封裝

面向對象三大特征之封裝

學生 告訴 可見 區別 信息隱藏 bsp 特征 的區別 描述

上半句+下半句。三流的書籍和博客只會告訴你上半句,因為它們的作者自己也不知道下半句,而讓我們接近真理,走的更遠的是下半句。並且下半句往往非常簡單。

上半句就是一些半吊子挖出的天坑,就算下半句非常簡單。因為它們的誤導,讓無數人很多年也接觸不到講述真理的下半句。

時刻警醒:我們要學習的是講述真理的下半句。

1.
什麽是封裝?
封裝:
封裝說了2個內容,一個是裝,一個是封。

裝:提供了一種聚合方式,提供了一種組合方式。
把東西裝在一起,看作一個整體。
1.能夠描述一個事物
事物通常具有屬性和行為,我們通過數據和方法的整體可以描述這樣的事物。
並且相關的數據和方法被放到一起,提高了內部聚合度。


2.裝為我們提供了一種組合方式,我們通過裝可以組合出一個東西,並且這個東西可以作為組件,繼續組合出其他東西。
能夠表達層次概念,和一些復雜的關系。

3.整體性。(1.用代碼體現概念 2.方便了使用)
1)用代碼體現概念,Student類。
2)方便了使用:
參數不用再傳遞零散的數據,而是直接傳遞對象。
通過對象直接調用操作其內部數據的方法。

封:
在裝的基礎上增加了訪問控制,對外只提供公共的訪問接口,其他的信息被隱藏起來。(上半句)
好處:(下半句)
避免了不必要的耦合,隱藏的信息對客戶端不可見,不會和客戶端發生耦合。我的代碼和客戶端代碼只能通過公共的訪問接口耦合。
當需要修改我們的代碼時,只要保證公共的訪問接口不變,客戶端代碼是不需要改變的。

2個特點,一個是封,一個是裝。
把存在一定關系的一些東西裝在一起。對外只提供公有的訪問接口,隱藏了內部具體的實現細節。
好處:
把相關的東西放在一起聚合度高了。通過訪問控制,只對外提供公有的訪問接口。客戶端只能通過接口來訪問。
只要接口不改變,客戶端就不需要改變,降低了耦合。

我們把具體的實現細節隱藏了。這些東西不需要被客戶端知道,信息隱藏,更安全。

什麽叫一定關系?
我們描述客觀的事物,事物總是具有一定的屬性和方法,我們可以認為這些屬性和方法相關的,可以放到一起。




因為事物通常具有屬性和行為,單獨用數據,或者方法都無法描述。

裝讓我們可以將數據和方法放在一起,看作一個整體。這樣一個整體就可以用來描述事物。
這種方式和單獨用數據+方法的區別:
1.能夠描述一個事物 2.層次 3.整體性。(1.明確了概念,方便了使用)

1.能夠描述一個事物:
因為事物通常具有屬性和行為,我們可以用數據和方法的整體來描述事物。
2.基本的東西,裝在一起,產生一個整體,這個整體可以作為組件來創建另外一些整體。產生層次。
對應於實際,可以用來描述不同層次的事物。
舉個例子:
姓名,年齡,創建一個學生,學生可以作為一個組件,來構建新的整體。
3.整體性。
1)明確了概念(在代碼上): 有一個名字來表示這個整體。類名,包名。
2)方便了使用。
例子1:我們去菜市場買菜,為啥要個塑料袋呢。
例子2:如果你給別人一些東西,先給個a,在給個b,再給個......
現在,我直接給你一包東西。然後說你要的都在這裏面。想用啥自己取。

具體表現:類和對象,包。
類:對一類具體事物的抽象。
對象:描述一個具體的事物。
包:描述的是一個模塊,一個子系統。

這個可以用來構造不同粒度的概念。
姓名,年齡,創建學生。
多個學生,班級名,創建班級。
多個班級,學校名,創建學校。
基本類型,學生,班級,學校。粒度不斷變大。

面向對象三大特征之封裝