世界一簡單的 Java OOP — 008

呃…史奴比 (SNOOPY) 大家會怎麼來形容呢?

https://en.wikipedia.org/wiki/Snoopy
  1. 一隻會用兩腳走路的狗。還是…
  2. 一位長得像狗的人。

其實這兩個形容方式都可以,只要聽我們如此描述的他人可以最快、最容易聯想到的話,就是相對好的形容方式。

來分析一下:

  1. 一隻會用兩腳走路的狗:SNOOPY 是一隻狗,而且他能只用兩腳走路。
  2. 一位長得像狗的人:SNOOPY 是一個人,但是他有像狗的五官和尾巴。

如果考慮一下,SNOOPY 是有主人的:查理布朗,我想我的形容會偏向第一項。

https://en.wikipedia.org/wiki/Charlie_Brown

在 Java 要怎麼形容 SNOOPY 呢?

注意到,第8行,用到了 interface 這個關鍵字。這個關鍵字的中譯叫「介面」。我講完,若讀者覺得沒有深深地覺得這個字超棒的?或是今晚可能會帶著這個字入夢的話,忘掉它也沒關係…。

其實這是一個很簡單的分類技巧而已。

例如:「有個人,特色:很會唱歌跳舞。」我們分析一下:

  1. 名詞:人。
  2. 形容詞:會唱歌的、會跳舞的。

Java 的世界就是這樣簡單:用名詞表示「東西的本質」,其他的「形容詞/副詞」可以用「那是一種特色」來歸類。上面這個人,他有兩項特色:會唱歌、會跳舞。用 Java 的形容如下:

每個「東西」都可以具備很多很多種特色。就像人的個性也有很多面向一樣。

回到 SNOOPY:我們形容他是隻狗,但是他有很多人的特色。

他會開飛機。(http://thecraftchop.com/tags/entries/snoopy-2)
他舞跳得很好。(http://jessie4508.deviantart.com/art/Snoopy-Dancing-54504915)
他會看報紙 (http://mypaper.pchome.com.tw/mizusnow/post/3840292)
他還能寫作。(https://foxhugh.com/fiction/hello-kitty-snoopy/)

所以除了能雙腳走路外,他還有以上四項特色,那些一般來說是人類才做得到的事。在 Java 的世界,我們這樣讓 SNOOPY 和我們「人類」共同擁有這些特色。

當我們用「物件導向 / OO / 面向對象」的思維來 "詮釋" 我們所寫的程式時,其實很多時候,我們會編寫出很多的「特色 (在Java中,我們用 interface 做為關鍵字來描述)」才對。

換句話說,寫出來的 interface 數量若超過 class 數,我覺得很正常。可是,我遇到過很多很多寫了一、兩年,甚至更久的 Java 程式,但是沒自己寫過一個新 interface 的人。可見:太多人用不是 OO 的思維在寫 OO 的程式。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.