天天看點

程式人生:Java三個月—OOP的樂趣

我發現從jsp學習然後轉到Java語言的學習對于我來說是一個很好的過程。有位程式設計大師說“面向對象技術降低了程式入門的門檻”,這句話我想應該可以放到網絡技術中,更改為“JSP技術降低了Java程式入門的門檻”。利用JSP技術,可以用比普通Java代碼更少的語句實作“helloworld”。

JSP技術封裝了用戶端Java代碼和網絡應用伺服器的連接配接,加上Servlet技術的背景支援,使得開發人員可以很輕易的将程式控制邏輯封裝到網頁中,生成動态的網頁。以JSP/Servlet技術構成了J2EE的平台前端,這使得開發人員可以更專注于後端業務邏輯的獨立和實作。這也是我至今為止看到的MVC的最佳表現。MVC是迄今為止應用最為廣泛的體系結構,模型—視圖—控制器的結構劃分使得程式結構非常清楚,程式的表現形式更加多樣,程式功能的耦合更加寬松,業務邏輯更加獨立,這都保證了系統的可維護性和可擴充性。

由于Java是一個純OO的語言,這使得一些設計模式在Java中可以非常輕易的實作,你可以很輕松的運用設計模式來提高代碼的品質,甚至在不知不覺之中你已經自己“創造”了一個設計模式,即使你從未接觸過這種設計模式。在我們小組開發JSP的時候,不同開發人員都需要利用JDBC與資料庫打交道,起初每個開發人員都試圖使用自己的連接配接方法,大部分人采用最簡單的DriverManager.getConnection()方法擷取資料庫連接配接,但是很快我發現很多的網頁和Javabean中都有這樣的代碼,這是非常恐怖的事情:假如有很多網頁都需要單獨請求資料庫連接配接,這将造成極大的資源占用和浪費,而且一旦資料庫發生改變,系統維護将異常複雜。

于是我立即寫了一個包含getConnection()靜态方法的資料庫連接配接Javabean,交給每個開發人員。這樣在開發過程中可以很輕易的得到資料庫連接配接,節省了開發時間。而且統一了資料連接配接接口。由于使用靜态方法,資料庫連接配接更加快速。最重要的是,由于對資料連接配接多了一層封裝,這使得改變資料庫連接配接方式将非常輕易,比如可以很輕易的使用資料庫連接配接池來提高系統的性能。後來我才知道這其實屬于Façade模式,盡管我以前并不知道Façade模式。

在開發Web應用伺服器的時候,Servlet的功能可能會無限擴大。我參考了《JSP設計》書中的Action方法,實作了自己的Servlet-Action結構。我對這個Action作了一些修改,增加了第二個請求參數“dowhat”,這使得一個Action可以執行更多的任務,減少了Action的開發工作量。在實際開發過程中,開發人員都很好的接受了這樣的伺服器程式結構。

Java的Swing技術也非常有意思。設計Java的人再一次貫徹了MVC體系結構,這使得Java的視窗界面開發也具有了JSP開發一樣的靈活性。(這裡由于本人先接觸了JSP,後才接觸Swing,是以由此感覺。事實上Swing技術的出現遠早于JSP技術)

利用Java的接口和實作類,可以更好的松散系統的功能。Java接口和實作的分離完全不同于C/C++語言的接口和實作(.h檔案和.cpp檔案)。Java接口和實作分離非常好的展現了“plug-in”概念,而C/C++的接口和實作分離并沒有帶來真正意義上的接口概念,隻是很勉強的在代碼檔案上下文章,除了可以帶來inline函數的執行效率之外,我看不到更多的優點。新的C#語言也抛棄了C/C++的模式。

Java的接口和實作類使得功能擴充更加友善。現在的J2EE系統開發已經可以很清楚的劃分為界面的開發和業務邏輯的開發兩大部份。在業務邏輯開發過程中,考慮到系統性能和更新,我們更多的要首先确定系統的功能範圍,然後根據功能範圍以最快的速度寫出功能實作,這往往不是最好的實作,更好的實作将作為系統更新來開發。

這裡的“實作”應該指的是具體的對象了,而“功能”并不是一種對象。利用C++開發時,往往首先考慮使用類繼續來實作功能的可更新和可擴充性,利用不同的子類來實作相同的功能接口。這樣不同實作之間展現出了一種并列的對象關系,“實作”表現為“功能”這個“對象”的擴充——但是事實上功能和實作是兩種不同層面上的概念。利用Java接口及可以很好的從概念上分離功能和實作,更加明确不同類(包括接口)的開發要求,開發人員可以很廣泛的使用接口,而不用過多考慮具體類的變化。