精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: UNARY.bbs@bbs.cse.ttu.edu.tw (跑步), 信區: programming > > class A > > { > > int a,b,c; > > int a1,b1,c1; > > fun_a(){ > > a = b+c; //快指令 > > } > > fun_b(){ > > a = b*c; //慢的指令 > > } > > fun_c(){ > > a1 = b1+c1; > > } > > } > > main(){ > > A B; > > B.b = 1; > > B.c = 2; > > B.fun_a(); > > B.fun_b(); > > B.fun_c(); > > } > > 如果是OO並不知道最後a 是哪個 fun_a 或是fun_b的結果 出來不可與其的答案 > > 但是因為目前的程式編譯器幫你處理好 > > 所以會先執行fun_a 在循序的執行fun_b > > a就會是fun_b的結果 > > 也就是編譯器不幫你處理的話 可能因為OO非循序的特性出錯 > OO 有非循序特性嗎? fun_a 與 fun_b 運作到相同的 a,b,c , 這兩者是有關係的, 因此置於同一個 class A 之下. 因為, 這裡只有一個 Class Object , 即使是多機也只能擺到 其中一機上, 達到 Class Object ID 唯一的要求, 要 invoke class Object A 內的 method fun_a 或 fun_b, 這個單一的 Class Object 只會做完一次 invoking 才會再接受下一個 invoking . 目前的 OOPL 不是 CHLL , 所以在 Class Object 內的 method 執行一直都是 循序的. 但如果分寫兩個 Class 就會有 A1 A2 兩個名稱, 多機的 Distributed Object 才有可能會將 A1 A2 分散在不同機器上, 這時候的 invoking 結果就 變成 B1.fun_a B2.fun_b 對這個例就變成 B1.a B2.a > > 不知道我理解的對不對? > 如果有這種問題 > 那用不用 OOPL 都一樣啦 > 反正這麼說來寫了循序敘述,也可能非循序執行 > 那跟我直接把 > a = B.b+B.c; > a = B.b*B.c; > a1 = B.b1+B.c1; > 寫在 main 裡面不是一樣? > 還是可能會發生同樣問題啊 > 一般人看到以上程式不會想那麼多(包括我) > 程式就只是依序執行 > B.fun_a(); > B.fun_b(); > B.fun_c(); > 而已 > 不必講得多複雜吧 > 那個循序不循序根本就不是 OOPL 的問題 > 難怪很多人講到後來都懶得講了... -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234