"為什么要寫類"
對于很多OOP的程序員來說, 類
就是class
寫一個類,
是因?yàn)檫@個語言必須從寫一個類開始,
是因?yàn)閷W(xué)的時候就是要寫一個類,
是因?yàn)榭蚣芾镆獙懸粋€類,
...
造一個房子
我打算造一間屋子, 但只有一些最原始的材料, 樹, 泥土, 草(基本數(shù)據(jù)類型: int, bool...)何缓。我是如此的心靈手巧, 聰明地使用這些原始材料搭出了一間茅草屋绅项。為了順利地建造第二間茅草屋, 我們還把建造的過程記錄了下來。這樣我們就可以造出一間一模一樣的茅草屋照藻。
我的朋友湯姆也想要造一座和我一樣的屋子, 這沒有什么困難的, 把建造方法告訴他就好了。但是湯姆很高, 之前的門太低了彼水。 他必須要把門造的更高崔拥。 但是這樣建造的步驟就和之前有些不一樣了。 他造出來的門有個洞, 他這可不樂意了凤覆。
我發(fā)現(xiàn)其實(shí)造個大的門, 和之前基本一樣链瓦。 造門前, 需要把樹木加工成木板。 也就是說, 木板這個相對高級的材料(對象, 抽象數(shù)據(jù)類型), 是由原始材料加工而來盯桦。把加工木板的材料和工序單獨(dú)記錄下來, 我以后就可以重復(fù)利用木板這個高級材料了啦慈俯。
我發(fā)現(xiàn)木板還不止能造門, 還能用來造桌子, 造床。 這個高級材料真是太好用啦
同理還有由泥沙造出來的磚頭, 用草編的繩子...我創(chuàng)造了世界S德汀L臁!
抽象數(shù)據(jù)類型與類
如果說木材是對樹木的加工做制成, 對象
就是我們對數(shù)據(jù)類型的自定義略号。而類
則是制造木材的工序, 是定義這種數(shù)據(jù)類型的模板刑峡。
這里就引出了我們對對象
的定義: 對象
是一種抽象數(shù)據(jù)類型
, 而抽象數(shù)據(jù)類型
由一組數(shù)據(jù)及其對數(shù)據(jù)的操作組成的。
而面向?qū)ο缶幊?/code>(OOP)就是以定義抽象數(shù)據(jù)類型為中心的編程方式玄柠。
類的'分類'
如果說定義了一種抽象數(shù)據(jù)類型的類才是我們想要的「真類」, 那么想對應(yīng)的, 也有我們?yōu)榱死胏lass的方便, 把過程式的想法塞在class中的「偽類」
比如在定義了一堆靜態(tài)方法的工具類, 就是我們?yōu)榱朔奖愕胤珠T別類地存放各種函數(shù)
在編程了一段時間之后, 我們寫出來的類越來越越不像類了, 就是因?yàn)槟切╊惒辉偈浅橄髷?shù)據(jù)類型了突梦。
當(dāng)然, 并不是說在編程過程中所有的類都是「真類」就是好的, OO的本質(zhì)是復(fù)用, 把握好抽象的尺度, 才能讓我們的程序最有效率地實(shí)現(xiàn)復(fù)用。