Re: [問題] 問一個新手問題

看板java作者 (Alien)時間16年前 (2008/03/28 10:26), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串13/14 (看更多)
個人淺見 C++ 的 header 並不該與 Java 的 Interface 類比. Java 的 Interface 是 OO (嚴格來說也不是, 算是 Interface-Oriented) 的 "Pattern" (不是 gof 的 design pattern). 而在 C++ 一樣可以寫成這樣. 在 C++ 中, 寫個 abstract class, 加上各類不同的 implementation, 是非常常見的做法. Header 的功能旨在宣告, 令到compiler 在 compile 某 source 的時候知道它正在用的東西是會存在的, 待在 linking 的步驟真正把東西連結在一起時再檢 查 "已宣告了的東西是不是都有真正的定義" (static link 的情況), 或者把某些檢查留待 runtime 檢查 (dynamic link 的情況). 為什麼 Java 不需要這樣做? 這是單純因為 Java 的 classpath 及檔案的安排做了一定程度的限制, 令到 compiler 能很簡單就能找到 "宣告" (其實就 是直接從 package 對應的 directory 找, 檔案就 是 class 的名字). 然後留在 JVM 在跑的時候去檢 查定義是否存在. 有點像是每個 .class 就是一個小 型的 DLL. 孰優孰劣我不作評論, 反正在 C++ 一般來說都是採 用類似的 practice 作安排. 但可以肯定的是 Java 的 做法能強逼有一個好的檔案結構, 對維護是有好處的, 開發時也因為少了檔案 (一個 class 一個檔案)而變 得簡潔. 但相對而言, 因為不能只提供宣告給使用者, 所以 Java 更得使用 interface 把實作分離, 你可以說是 帶動更清楚的設計, 但其實也少了 C++ 的某種彈性. JavaDoc 也變成唯一的提供 API 與開發者的方法. 最後要說的是, Header 與是否 OO 一點關係都沒有. Java 也一樣可以選擇要 header 與 impl 分開檔案放. 但這不影響語言上是否 OO. 有點類似 package 是不是 一定要跟 directory 才 OO 一樣, 你可以說是 best practice (只是 java enforce 了) 但與是否 OO 無關. 好長的一篇廢話 :P Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

03/28 10:45, , 1F
解說清清楚楚推一下
03/28 10:45, 1F

03/28 12:10, , 2F
感謝您的解說!!!
03/28 12:10, 2F
文章代碼(AID): #17x5TQFE (java)
討論串 (同標題文章)
文章代碼(AID): #17x5TQFE (java)