很多語言,如C,Pascal,Basic等,都是面向過程的。面向過程的程序設計語言主要使用順序,選擇和循環三種基本結構來編寫程序。順序指按照時間軸順訓完成每個處理;選擇指根據條件的成立與否執行不同的條件分支;循環指根據一定的條件反復執行同樣的代碼。
在面向對象技術問世以前,程序設計被看做為一個個功能系統的集合。程序員根據設計文檔實現各個函數,完成目標軟件。所以,那個年代軟件開發最關心的是如何從需求中提出要實現的功能,決定數據格式,并將其組合在一起。舉一個簡單的列子,假設我們需要實現一個用于管理和采購辦公用品的OA系統。在這個OA系統中,我們假設某部門提出采購要求后,首先要檢查該部門的預算是否夠用。通常的做法是設計申請購買商品的登錄頁面和申請的流程,決定使用的數據格式,定義檢查數據正確性的函數,定義預算數據的格式和訪問它的接口,簡單的說就是,整個系統設計的過程就是將需求分解成一個個小的的功能,同時定義每個功能所需要的數據格式。
但是,需求是無時無刻不在變更的。如,假設需要從紙質文件的購買申請變為通過網頁來申請,或者需要新增能根據部門,物品類型來查看購買歷史紀錄功能,這時候就需要對基于傳統做法生成的軟件進行大幅修改。軟件的核心是功能,而需求又非常容易變更,所以圍繞功能設計軟件,會比較難于應對需求的變更,維護成本會比較高。