按理說 Java 是一個很 OO 的語言,Java 社區(qū)也一向是充滿了“對象”的氛圍泄伪。但俺在面試 Java 程序員時殴蓬,卻屢屢碰到令人大跌眼鏡的事情。俺碰到不止一個求職者臂容,連什么是“多態(tài)”都講不清楚科雳。很多人號稱用過設(shè)計模式,但一半以上都僅限于單鍵模式和抽象工廠模式脓杉。當(dāng)我深入問他/她抽象工廠模式到底有什么好處時糟秘,很多人語焉不詳。
為什么很多 Java 程序員會缺乏面向?qū)ο蠡竟η蛏ⅲ窟@得怪那些 Java 框架∧蜃現(xiàn)在 Java 的各種框架太發(fā)達(dá)、太傻瓜化了蕉堰,導(dǎo)致很多程序員只需要按部就班凌净、照著框架進(jìn)行代碼填空,基本已經(jīng)喪失了 OOA 和 OOD 的能力屋讶。我手下有些個 Java 程序員冰寻,對 Spring、Hibernate 等框架了如指掌皿渗;但如果給他一個簡單需求斩芭,讓他寫一個脫離 Web 框架的獨(dú)立 Application,他就不知所措了乐疆。這樣的開發(fā)人員划乖,將來只能成為所謂的“軟件藍(lán)領(lǐng)”,崗位很難得到提升挤土。
同上一篇文章一樣琴庵,我這次也提如下幾個問題:
★基于接口的繼承和基于實現(xiàn)的繼承各有什么優(yōu)缺點?
★繼承(包括 extend 和 implement)有什么【缺點】仰美?
★多態(tài)(polymorphism)有什么【缺點】迷殿?
★為什么 Java 可以多繼承 interface,而不可以多繼承 class咖杂?
★假如讓你寫一個小游戲(比如人機(jī)對戰(zhàn)的五子棋)庆寺,你會如何設(shè)計類結(jié)構(gòu)?
★類結(jié)構(gòu)設(shè)計時翰苫,如何考慮可擴(kuò)展性?
如果上述這些問題你都能夠搞得比較清楚,說明你的 OO 基礎(chǔ)還過得去奏窑。否則的話导披,我建議你一邊找些?OOAD?和設(shè)計模式的書看看,同時自己動手寫些簡單的小程序(不依賴那些框架)埃唯,把學(xué)到的模式理論結(jié)合到實踐中撩匕。通過這種方式來提高自己 OOAD 的能力,效果會比較好墨叛。
后面來聊一下第3個通仓贡稀:缺少良好的編程習(xí)慣。