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