2013年3月17日 星期日

一個簡單範例解釋多型(Polymorphism)


所有的人(Human),都有體重(weight)與威力(power),且體重等於威力

Human.java
public class Human {
    public double weight = 0;
    
    public double getPower() {
        return this.weight;
    }
    
    public Boolean isEqualToPower(Human h) {
        // 只要是人,都有取得自己威力的 method,叫做 getPower。
        // 但是骨子裡,不同人種 getPower 的方式卻不一定相同。
        // 這就是多型的應用。
        
        return this.getPower() == h.getPower();
    }
}

黑人天生的肌肉就比較強韌,可以發揮體重 1.5 倍的威力。(也可以擁有屬於黑人獨有的行為(black_method))
Black.java
public class Black extends Human {
    public double getPower() {
        return this.weight * 1.5;
    }
    
    public void black_method() {
        // only for black
    }
}

白人天生的肌肉也比一般人強韌些,可以發揮體重 1.2 倍的威力。也可以擁有屬於白人獨有的行為(white_method))
White.java
public class White extends Human {
    public double getPower() {
        return this.weight * 1.2;
    }
    
    public void white_method() {
        // only for white
    }
}

我們黃種人,體重跟威力,跟所有人類一樣,體重就等於威力。(不需要override getPower)
Yellow.java
public class Yellow extends Human {
    public void yellow_method() {
        // only for yellow
    }
}

PolymorphismExample.java
public class PolymorphismExample {
    public static void main(String[] args) {
        Human y = new Yellow();
        Human b = new Black();
        Human w = new White();
        
        y.weight = 12;
        b.weight = 10;
        w.weight = 10;
        
        System.out.println(y.isEqualToPower(w));
        System.out.println(b.isEqualToPower(w));
    }
}

PolymorphismExample.java 可以知道,不同的人種,也可以進行威力的比較。
而從 Human.java 知道比較威力時,我們也只是站在人的立場,使用 getPower 來取得各自的威力。
可是雖然都是人,但是骨子裡的 getPower 卻會依據不同人種有不同的計算方式這就是多型 (Polymorphism)

範例程式下載
PolymorphismExample.zip

2013年3月16日 星期六

如何成為一個「比較」厲害的程式設計師

 

會寫這篇,有感而發。

現在的網路資訊太過發達,什麼東西只要 Google 一下,就可以找到了。因此,要成為一個會開發各種功能的程式設計師,早已不是什麼難事。

這件事情在 APP 程式設計師上,更是屢見不鮮,即便開發過數十款 Android APP 的程式設計師,可能仍是不懂 JAVA 中的 Interface 的好處。

這件事情,已成常態,所以要成為一個「比較」厲害的程式設計師,你只要比別人多了解一點各種程式語言精妙之處即可。

 

先試著重構吧?整理一下你的程式碼,當你整理上遇到困難時,再回頭看看軟體工程的文章,看看大師們的 Design pattern,一定會有一些不同的體悟的。

 

關於重構- http://jjhou.boolan.com/jjtbooks-refactoring.htm

2013年3月2日 星期六

windows 上寫錄音、撥放音樂、拍照的 python 程式

 

本想用 ADOBE AIR 或是 C# 來寫這個小程式,但後來找一找資源,突然看到 python 的 solution,所以決定使用 python 來實作看看,這邊稍微紀錄一下步驟。(我使用 python 2.7)

 

安裝步驟

python 上要能錄音、撥放音樂,需要安裝 PyAudio

http://people.csail.mit.edu/hubert/pyaudio/

image

 

要能存取 Cam,需倚靠這個有名的 OpenCV,我使用的是2.4.4

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.4/

image

下載解壓縮後,把opencv 資料夾中的 build\python\2.7\cv2.pyd 複製到 python library 路徑下

(在我電腦是 C:\Python27\Lib\site-packages\)

 

同時也要裝 NumPy 以及 Scipy 才行

http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/

http://sourceforge.net/projects/scipy/files/scipy/0.9.0/

 

以上就安裝完成了

 

範例程式

錄音、撥放的範例程式,可以參考連結網站,下方範例(網站中也有整包下載的地方)

http://people.csail.mit.edu/hubert/pyaudio/

image

 

錄影的範例程式,則在 opencv 資料夾中的 samples\python2\video.py

 

以上