Re: [問題] 問一個新手問題
個人淺見
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
討論串 (同標題文章)