2014年5月8日 星期四

EnglishLearning-連接詞

句子與句子之間的連接橋梁就是連接詞

在使用上有6種形式 :
1.長劃符號 (—)
2.冒號 (:)
3.分號(;)
4.對等連接詞(and , or , but)
5.副詞連接詞(because , when...etc)
6.關係詞(who , which...etc)

前3項的用法比較容易理解,這篇先記錄一下對等連接詞與副詞連接詞

對等連接詞

其實就是常見的and、or、but,以及其變化
and
-> both ... and (一方面...同時又...)
or
->either ...or (要不就是.....要不就是)
->neither...or(既不...也非)
but
->not...but (並非....而是)
->not only ....but (also)(不僅...而且)

<注意>
both..and..始終接複數動詞,其於對等連接詞視最近的主詞做動詞變化

EX : Either he or I am wrong.
EX : Not only he but also I have passed the exam.

<注意>
not only ... but (also)若置於主要子句之前,則必須採倒裝句,

EX : Not only he is clever , but also he is polite.(X)
        ->Not only is he clever , but also he is polite.(O)

除此之外還有幾個對等連接詞,這幾個視第一個主詞做動詞變化
as well as(以及...)
= no less than
= together with
rather than(而非...)
= instead of

EX : He as well as I is good at English.


副詞連接詞

較常見的有because , when , unless , as soon as , though , once ....etc

所謂副詞連接詞即是無法對等連接兩個句子,使用副詞的子句成為副詞子句,不可單獨存在

EX : I like him because he is nice.

<注意>
because 不可與 so連用

though
although         不可與but連用
even if
even though

有些副詞也可做為連接詞使用,但前面必須以分號(;)做分離

EX:He is nice ; however , I don't like him.

較常見的副詞有 :
相當於but :
however
nevertheless

相當於so :
therefore
thus

相當於and :
moreover
furthermore
in addition

此外
in addition
besides

還要其他重要的副詞連接詞
while(當... ; 而...)
where(在...的地方)
as(當 ; 雖然 ; 因為)
once(一旦)
or (否則)
nor (也不)
so that (以便..)
so....that...(如此....以至於)
in that(因為)
except that(只可惜 ; 只不過是)
since(自從 ; 因為)




2014年5月7日 星期三

Java with RTTI

一般而言,我們希望程式執行時每個使用的class的型態能夠確定,但並不是每個class在compile期間就清楚其型態,因此在這Java注重繼承、多型的語言,RTTI顯然占了一席之地

RTTI(Runtime Type Information) : 讓我們在程式運行時,可以發現並確認型態

RTTI有兩種方式
1.傳統的RTTI : 假設所有class在編譯時就已確定型態,而他需要使用.class文件,有三種方式
     a) Upcasting & Downcasting (Downcasting在Java中需要強制轉換)
     b) Class 物件 (reflect也會使用Class,如果只是使用Class中的cast,那還是傳統的RTTI)
     c) instanceof & isInstance()

EX :
其執行結果為
In main
Yummy
Loading Candy
True
After creating candy
Loading gum
After creating gum
Loading cookie
After creating cookie


2.Reflection : 在程式運行時,探索編譯時未知的class並且使用他,似乎也能和Proxy design pattern配合使用,而他的使用方法主要為Class這東西,再配合java.lang.reflect library,可以探知class中的field、method、constructor甚至implement的interface


與傳統的RTTI相較,reflection並不需載入.class文件(畢竟他是在運行時抄你家...)
Proxy design pattern依目前所看,其含意似乎為
1.將主要的核心部分隱藏
2.利用另一個物件來執行核心部分
3.可以在此物件做修改(新增或刪除)
有點像代理人的身分

EX:
其執行結果為
public void Ted.miue()
public void Ted.move()
public void pet.ShowName()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public Ted(java.lang.String)

在這例子我主要使用的為getMethod , getConstructor
可以發現當我們使用reflection,我們幾乎把這個class的身家都給查光了!
所以利用此方法,我們可在運行期間去做查詢,並發現此class的型態,然後去使用他,而最大應用在於network,畢竟在client端使用者會怎麼使用我們的程式通常未知,這看起來好像是個大坑...

2014年5月2日 星期五

English Learning-動詞

上一篇紀錄句子中的主詞種類,這次紀錄動詞的種類,有了主詞和動詞,才能表達一個完整的句子

英文中的動詞大致可分為五類
1)完全不及物動詞(complete intransitive verb ; c.vi.)
2)不完全不及物動詞(incomplete intransitive verb ; i.vi.)
3)完全及物動詞(complete transitive verb ; c.vt.)
4)不完全及物動詞(incomplete transitive verb ; i.vi.)
5)授予動詞(dative verb ; d.v.)

辨別及物及不及物的方法很簡單,使用以下的方法:
我____他(主動)
他被我_____(被動)

只要把動詞放進空白中而意思能可通順,則為及物動詞
反之則為不及物動詞

完全及物動詞後面需接受詞才能完整表達意思
EX : He wrote a book.

完全不及物動詞後面不需接受詞即可表達完整意思
EX : I laughed.

不完全及物動詞則是後面接了受詞還不夠,尚需一些東西來修飾他
EX : I made him do this.

不完全不及物動詞因表達的意思並不完整,後面需接名詞、形容詞等來做修飾
EX : You look very good.

授予動詞算是及物動詞的一種,只是後面需有兩個受詞
EX : I will give you this book.



英文中的動詞非常的多,還是得多背單字來補充這一塊,不過還是了解原來動詞有這些不同,還得多用功一點...


2014年5月1日 星期四

Design Patterns(0)-初談

在學習Object-Oriented programming時,不免會學到Design Patterns,這在程式的設計上可說是非常重要且有用的概念,如何思考程式的設計一直是很重要的事情,雖然大多人在寫程式時都會忽略它的存在...,利用現在在學JAVA機會,把這東西也搞到手!

主要從Gof的著作--
Design Patterns Elements of Reusable Object-Oriented Software
來做學習


先說明會什麼Design Patterns會被這麼看重,其實主要的原因很簡單
->不重造車輪

我們寫程式所遇到的百百種問題,其實可以都已經被前人給歸納成好幾類,他們利用這幾類問題設計了幾種良好Patterns來做解決,所以只要遇到這些問題就用相對應的Patterns來解決

這樣的好處是
1)不用再為這些問題想新解法
2)他人方便閱讀程式,較易維護


書中介紹了23種Patterns,主要分為三類
1)Creational -- 注重於物件的建立、管理
     Abstract Factory
     Builder
     Factory Method
     Prototype
     Singleton

2)Structural -- 注重於物件間的組成結構,如何利用繼承、實現來使程式更加健壯
     Adapter
     Bridge
     Composite
     Decorator
     Facade
     Flyweight
     Proxy

3)Behavioral  -- 注重於物件間的合作,有良好的互動才能有良好的執行效率
     Chain of Responsibility
     Command
     Interpreter
     Iterator
     Mediator
     Memento
     Observer
     State
     Strategy
     Template Method
     Visitor

接下來就是花點時間學習一下這些東西