物件導向 (Object-Oriented,大陸譯「面向對象」) 是一種人性化的電腦軟體工程概念。簡單說就是把生活上每一樣東西都獨立看待,然後逐項檢視每一樣東西的特性、與其他東西的關係,最後以這樣的基礎實際轉化成電腦自己的一套語言,例如 Java 就是 OO 程序語言的代表;除了物件導向,還有 Procedural、Declarative、Event-driven 等。
Java 的語言定義中有一項叫作 clone。在英文字典中 clone 解作無性繁殖,就是在沒有其他東西的協助下自我複製出一個一模一樣的東西。Clone 與 copy 不同之處是 copy 這個字本身是第三身的動作;而 clone 是第一人稱的。
複製人這個課題,究竟是否合乎道德倫理,是社會眾人的問題;技術是否可行,是專業醫生學者的問題。而 Java 作為一個電腦技術,有一個註腳,指技術不應該越俎代庖,最後應該交回人們用智慧來決定:
複製 (Clone) 並不是所有物件的通配詞,有些東西可以複製,有些不可以;例如複製一個數據庫代表著什麼?需要再買一台硬盤還是繼而擴充整個電腦室?(Many Collection implementations will have a public clone method, but it would be mistake to require it of all Collections.)
# # #
續前,老闆有一個理論,說錯綜複雜的世代,在某些事情保留一個不求甚解的態度是一種智慧,除非你真的打算沾個滿盤子的鍋,否則,「洗濕左個頭」,貴客自理。
係咩?
Java 又給了一個答案,說 Java 預先造好的程序工具都已經準備好 clone 這個動作 (all of the Collection implementations provided by the JDK),只是,他預設的 clone 動作都是 swallow copy,換言之,深層次內涵的資料是不會那麼好心幫你複製的 (Object.clone() method performs a "shallow copy" of this object, not a "deep copy" operation.)。果然,世界是現實的,Java 秉承了「不想沾鍋就不沾鍋」的哲學。