進階視窗程式設計 w1

53
視窗應程式設計 哲輝

Upload: samael-wang

Post on 28-Jul-2015

326 views

Category:

Education


5 download

TRANSCRIPT

Page 1: 進階視窗程式設計 W1

視窗應⽤用程式設計⺩王哲輝

Page 2: 進階視窗程式設計 W1

關於我

Page 3: 進階視窗程式設計 W1

今年跳槽了

Page 4: 進階視窗程式設計 W1
Page 5: 進階視窗程式設計 W1

結果1: 高薪族出列!全體高薪門檻年薪138萬

55萬元

78萬元

108萬元

150萬元

189萬元

216萬元

240萬元

260萬元 260萬元

20 ~ 24歲 25 ~ 29歲 30 ~ 34歲 35 ~ 39歲 40 ~ 44歲 45 ~ 49歲 50 ~ 54歲 55 ~ 59歲 60 ~ 64歲

138萬元 紅色區塊「高薪族」,共計近2.4萬人, 金額為高薪族門檻, 若不分年齡,全體高薪族門檻為年薪總額138萬元

黃色區塊「一般族」,共計45.2萬人 排名後95%的族群

資料來源:【104高薪人才大揭密】報告

104 ⾼高薪⼈人才⼤大揭密

Page 6: 進階視窗程式設計 W1

8

1.2% 2.3% 7.3% 17.1% 27.0% 30.7% 34.4% 37.1% 36.7%

98.8% 97.7% 92.7% 82.9%

73.0% 69.3% 65.6% 62.9% 63.3%

20 ~ 24歲 25 ~ 29歲 30 ~ 34歲 35 ~ 39歲 40 ~ 44歲 45 ~ 49歲 50 ~ 54歲 55 ~ 59歲 60 ~ 64歲

年薪總額100萬以上占比 年薪總額100萬元以下占比

結果2: 百萬黃金線!30難立! 30~34歲,僅7.3%「八零後」年薪百萬 20~34歲,僅4.8%「八零+九零」年薪百萬

104 ⾼高薪⼈人才⼤大揭密

Page 7: 進階視窗程式設計 W1

104 ⾼高薪⼈人才⼤大揭密

結果3: 關鍵35!高下立見,薪資差距倍數擴大

55萬元

78萬元

108萬元

150萬元

189萬元

216萬元

240萬元

260萬元 260萬元

20 ~ 24歲 25 ~ 29歲 30 ~ 34歲 35 ~ 39歲 40 ~ 44歲 45 ~ 49歲 50 ~ 54歲 55 ~ 59歲 60 ~ 64歲

年薪總額差異倍數「高薪門檻/一般族中位數」 20~24歲:1.70倍 25~29歲:1.95倍 30~34歲:2.20倍 35~39歲:2.50倍 40~44歲:2.86倍 45~49歲:3.09倍 50~54歲:3.20倍 55~59歲:3.25倍 60~64歲:3.09倍

資料來源:【104高薪人才大揭密】報告

32萬元 40萬元

49萬元 60萬元 66萬元 70萬元

75萬元 80萬元 84萬元

一般族中位數(PR 50) 年薪總額曲線

差異倍數擴大

高薪門檻(PR 95) 年薪總額曲線

Page 8: 進階視窗程式設計 W1

結果4: 一般族(中位數)薪資成長牛步化

55萬元

78萬元

108萬元

150萬元

189萬元

216萬元

240萬元

260萬元 260萬元

20 ~ 24歲 25 ~ 29歲 30 ~ 34歲 35 ~ 39歲 40 ~ 44歲 45 ~ 49歲 50 ~ 54歲 55 ~ 59歲 60 ~ 64歲

資料來源:【104高薪人才大揭密】報告

32萬元 40萬元

49萬元 60萬元 66萬元 70萬元

75萬元 80萬元 84萬元

+ 25%

+ 41.8%

+ 38.5%

+ 38.9%

+ 26.0%

+ 14.3%

+ 11.1%

+ 8.3% + 0%

+ 22.5% + 22.4%

+ 10% + 6.1% + 7.1% + 6.7% + 5%

各年齡級距比前個年齡級距的增幅 高薪門檻曲線皆高於一般族中位數曲線 一般族(中位數)薪資成長牛步化

高薪門檻(PR 95) 年薪總額曲線

一般族中位數(PR 50) 年薪總額曲線

較前個年齡級距 增幅

104 ⾼高薪⼈人才⼤大揭密

Page 11: 進階視窗程式設計 W1

http://www.linkedin.com

Page 12: 進階視窗程式設計 W1

http://www.ibeejobs.com

Page 13: 進階視窗程式設計 W1
Page 14: 進階視窗程式設計 W1

http://www.ursalary.com

Page 15: 進階視窗程式設計 W1

結論

去註冊 LinkedIn 帳號,把 profile 寫好

找⼯工作前試著了解該公司⾏行情

考研究所前了解該校校友出路

Page 16: 進階視窗程式設計 W1

回顧上學期

Page 17: 進階視窗程式設計 W1
Page 18: 進階視窗程式設計 W1

太 難

作業很困難,常常找資料的時候會沒有好的題材參考

冒出很多的英⽂文專有名詞覺得吃⼒力

個⼈人實物經驗較不⾜足 所以聽起來⽐比較吃⼒力

這…基本上⽼老師所說的都不會以致於不知困難在哪

常常看不懂英⽂文 查了資料有更多看不懂的英⽂文

Page 19: 進階視窗程式設計 W1

課程⼤大綱

Page 20: 進階視窗程式設計 W1

核⼼心主題:Model-View-Controller

作業與實習:分階段完成單⼀一專案,每⼀一階段分別計分

課程安排

W1 - MVC 概念介紹

W2 - 全天實習

W3 - 檢討作業常⾒見問題

W4 - UML 基礎與練習

Page 21: 進階視窗程式設計 W1

軟體設計

Page 22: 進階視窗程式設計 W1

Why? 程式不是能動就好?

Page 23: 進階視窗程式設計 W1

半世紀以來不變的問題:

當軟體規模複雜到⼀一定程度的時候,如何測試? 如何維護? 如何應付需求變動?

Page 24: 進階視窗程式設計 W1

⼈人⽉月神話跟只為私⼈人使⽤用⽽而單獨寫出來的組件程式(program)相⽐比,做出軟體系統產品(programming systems product)所要付出的代價將是九倍以上。

估計產品化(productizing)的代價是三倍,若要對組件從事設計、整合、測試,進⽽而凝聚成為⼀一個系統,則代價也是三倍,⽽而且這⽅方⾯面的成本計算基本是獨⽴立的。

Page 25: 進階視窗程式設計 W1

“史前時期最駭⼈人的景象,莫過於⼀一群巨獸在焦油坑裏做垂死前的掙扎。不妨閉上眼睛想像⼀一下,你看到了⼀一群恐⻯⿓龍、⻑⾧長⽑毛象、劍⿒齒⻁虎正在奮⼒力掙脫焦油的束縛,但越掙扎,焦油就纏得越緊,就算他再強壯、再利害,最後,都難逃滅頂的命運。過去⼗十年間,⼤大型系統的軟體開發⼯工作就像是掉進了焦油坑

裏……”

– Frederick P. Brooks, Jr., 1975

Page 26: 進階視窗程式設計 W1

物件導向核⼼心設計觀念

内聚性 (Cohesion) 耦合性 (Coupling)

關注點分離 (Separation of Concerns)

DRY: Don’t Repeat Yourself

KISS: Keep It Simple, Stupid

Page 27: 進階視窗程式設計 W1

記得⼀一件事就好

Decoupling

Page 28: 進階視窗程式設計 W1

何謂 PATTERN

Page 29: 進階視窗程式設計 W1
Page 30: 進階視窗程式設計 W1

“Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem,

in such a way that you can use this solution a million times over, without ever doing it the same

way twice”

– Christopher Alexander

Page 31: 進階視窗程式設計 W1

MODEL-VIEW-CONTROLLER

Page 32: 進階視窗程式設計 W1

Model is the application object. View is its screen presentation. Controller defines the way the user interface reacts to user input.

Page 33: 進階視窗程式設計 W1

ViewModel

Controller

Page 34: 進階視窗程式設計 W1
Page 35: 進階視窗程式設計 W1

MVC 的特性

拆開呈現 (Presentation) 與模型 (Model) => 關注點分離

對相同的 Model 可以採取多種呈現⽅方式,⽽而不必重複實作模型

沒有 UI 的元件較容易做⾃自動化測試

單向依賴:Presentation —> Model

Page 36: 進階視窗程式設計 W1

Model

⽉月曆

Page 37: 進階視窗程式設計 W1

典型 MVC

事件如何傳遞?

Page 38: 進階視窗程式設計 W1

Observer Sample

1. 僅在使⽤用者輸⼊入⾮非空字串時,Controller 才去修改Model 的內容

2. 僅在 Model 內容變動時,View 才輸出

如何修正此程式?

Page 39: 進階視窗程式設計 W1

Observer Sample

https://github.com/freesamael/npu-java-course-spring-2015

試修正此程式,使 1. Model 產⽣生變動時可以通知 View 2. 呈上,照以下步驟替換成第⼆二種 View 類別

1. 新增 AlternativeView 類別,提供與 View 相同介⾯面 2. AlternativeView.show() 中將 Model 的字串反向印出,如

“Hello” 印成 “olleH” 3. 將 main function 中 View 替換成 AlternativeView 時,應僅需更動初始化部分,⽽而不修改 while loop 內容,也不會動到既有的 Model / View / Controller 三個類別

Page 40: 進階視窗程式設計 W1

Observer Sample (進階)

https://github.com/freesamael/npu-java-course-spring-2015

試修正此程式,使 1. Model 產⽣生變動時可以通知 View 2. 呈上,程式碼中已包含三個 View instance,照以下步驟增加第四個 View 1. 新增 AlternativeView 類別,提供與 View 相同介⾯面 2. AlternativeView.show() 中將 Model 的字串反向印出,如

“Hello” 印成 “olleH” 3. 以 AlternativeView 增加第四個 View 時,應僅需更動初始化部分及 Window class 部分參數,⽽而不修改 while loop 內容,也不會動到既有的 Model / View / Controller 三個類別

Page 41: 進階視窗程式設計 W1

觀察者模式

Page 42: 進階視窗程式設計 W1

觀察者模式

Page 43: 進階視窗程式設計 W1

近代 MVC

Page 44: 進階視窗程式設計 W1

Android MVC 應⽤用

Page 45: 進階視窗程式設計 W1

初學者常⾒見謬誤

Model 只包含資料儲存,缺乏 Domain Logic

將 Model 應有的邏輯實作進 Controller

將 View 傳遞⾄至 Model,由 Model 直接操作 View ⽽而產⽣生雙向相依性

Page 46: 進階視窗程式設計 W1
Page 47: 進階視窗程式設計 W1

BACKUP

Page 48: 進階視窗程式設計 W1

SOLID

單⼀一功能原則 (Single Responsibility Principle)

開閉原則 (Open/Closed Principle)

⾥里⽒氏替換原則 (Liskov Substitution Principle)

介⾯面隔離原則 (Interface Segregation Principle)

依賴反轉原則 (Dependency Inversion Principle)

Page 49: 進階視窗程式設計 W1

單⼀一功能原則

每個類別都應該只有⼀一個單⼀一的功能,並且該功能應該由這個類完全封裝起來

概念近似關注點分離

Page 50: 進階視窗程式設計 W1

開閉原則

軟體中的元件(類別、模組、函式等)應該對於擴展是開放的,但是對於修改是封閉的

Page 51: 進階視窗程式設計 W1

⾥里⽒氏替換原則

若 S 為 T 的⼦子型別,則 S 型別的物件應能替換 T ⾏行別的物件⽽而不影響程式功能正常執⾏行

⽩白⾺馬亦⾺馬,依然能載⼈人載貨

Page 52: 進階視窗程式設計 W1

介⾯面隔離原則

拆分⾮非常龐⼤大臃腫的介⾯面成為更⼩小的和更具體的介⾯面,這樣客⼾戶將會只需要知道他們感興趣的⽅方法

Page 53: 進階視窗程式設計 W1

依賴反轉原則