精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: renderer.bbs@ptt.cc (rendering), 信區: programming > ※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: > : 自認對 OO 精通的人應該要能回答 gsj 的質疑才是, 否則 OO 就如其音, > : 黑黑來, 黑黑去, 黑壓壓的一片. > OO 具有封裝性呀 封裝是強調不可分割, 有外防的包莢, 事實上她不像 Mornitor 有 kernel mode 的保護, 因此她採的策略是 information hidden . 這是她不能隨意 使用 pointer 跨 class object 使用莢內資源的原因. 保護未必要黑漆漆的, 是因為根本沒有透明的防護罩, 事實上她跟普通程 式一樣也沒有特製的防護罩, 只是採用 "不必明說" , 直接指向切入的語 法就不支援, 或者很難用. > : 物件導向 或 OOP 不知是否有特別強調 "非循序式" ? 印象中至少不是被 > : 列為是 parallel programming 或 concurrent high level language . > : 學 OO 的要怎麼回答 ? > OO 全然沒有推翻循序性 > OO 是「建立在循序性上」的「程式碼管理哲學」與「工程實務」 事實是 "毫不相關的片段 code thread" 本身就能平行, "你走你的陽關道, 我 過我的獨木橋", 誰先誰後互不影響, 這是實況. 加上作業系統 multi-process 支援或是分散不同地的電腦都能做這種 "無關的平行". OOP 可以讓這類片段的 code 與用到的 data 成包莢式的各別獨立顯現, 傳統的命令式語言雖然也是可以這樣做, 只是不明顯, 必須刻意的處理. 目前 OOP 的語法並沒有相關式平行需要的同步機制, 所以她不是 CHHL , 但她可以適應分散在不同電腦的處理, 在設計思考時, 是不必一定得按特定順 序想, 所以會被誤認為可能是任意的非循序式. 若把這種無關的非循序, 擴大 成可以在任意相關下也能平行, 那就會越界變成無序. 採用訊息傳遞, 把相關的 code , data 封裝在一起就是為了將來能直接用 在分散的電腦上執行. > : > 寫了那麼久的程式你還是不懂什麼是Abstraction... > : > 以及OO跟event driven 是兩回事.. > : > 我看你還是回去寫你的assembly language吧... > : 在 object 封裝的內部對 data , code 是可以雜亂交錯, 你中有我, > : 我中有你那樣的混在一起, 還是分堆但包在封袋裡 ? 顯然 gsj 指出 > : 了 OO 讓人看不清楚無法理解的一面. > OO 的物件為雜亂交錯的 data 與 code 提供了單純而平面化的操作介面 Class Object 內部的 code , data 甚至 stack 還是分堆擺的, 用了高階語 言的 compiler 就會這麼做. Class object 間的界限也不必用到像 process 間隔離的 memory protection & separation , 也就不會增加多餘的工作, 她靠的是 information hidden . > : 如果程式語言與電腦的實體是不對稱的, 那這個質疑是有道理的, 這 > : 不能用 abstraction 一筆帶過, 否則會被懷疑 OOP 是有效率的嗎 ? > : 不然就是效率的稍微(這也得具體說明)犧牲, 可換來那些更值得的東 > : 東 ? 譬如 Interactive 的 interpreter 相對於 compiler , 另外, > : 就是改善的趨勢會是甚麼 ? (譬如使用中間碼的 interpreter) > OO 不是在討論程式執行的本質 循序化的執行早已是本然 > OO 討論的是 data 與 code 的封裝性 物件的責任 物件間的關聯 介面的抽象性 ... > 這些東西並不違反任何實體特質 > 討論的層次有所差異 > 「程式語言與電腦的實體是不對稱的」? 我們得先思維這個命題是否正確 > OOP 沒有損害到程式的執行效率 > 相同的事 要用循序性語言來做 不見得會比較有效率 > 會慢是來自於 design > 你不能說我要讓程式碼受良好管理而不付出任何成本 事實上, 好的 OOP implementation 不會讓程式語言與電腦實體呈現不對稱的現 像, OO 先天就是能把 相關的 code , data 擺在分開來的同一電腦上. 有從屬 關係的 object 會因繼承性而儘量放在可以快速拿得到的地方. > : 其次, 在那些地方或條件下, OOP 可以像一般的 C 使用 pointer > : 那樣方便的 reference structured data (如 array 或 record) ? -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234