> ==>發信人: 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