物件導向的三個特徵是繼承、封裝和多型。學習完設計模式後,我們對繼承有了一定的了解,接下來就是機房重構的學習了。在寫**過程中,我們會有意無意的用到封裝,那麼什麼是封裝?封裝有什麼好處?
我理解的就是將一段**拿出來放在乙個方法裡並給這個方法起個名,需要這段**時只需要叫這個方法的名就行,不必關心它的處理過程。在這裡這個處理過程就被封裝到了方法裡。
至於這樣做的好處,到現在會一目了然了吧。在**量上:用到這個方法時不用複製**了,**需要它就在**放它的名字就行,如果有引數的話,要給引數賦值(傳參詳見下篇部落格)。在整體**結構上:封裝前**只是為了特定的某個資料的處理,**利用率低,封裝後方法可以在需要的地方處理需要的資料,**更靈活,利用率也高了。
大概了解封裝方法後,我們就來看看它長什麼樣。在vb版機房收費系統的時候,我們的**是這樣的:
表查詢:
private sub cmdcha_click()
'清空表內容,保留表頭
msflexgrid1.rows = 2
'表連線
strsql3 = "select * from line_info where cardno='" & trim(txtkahao.text) & "'" 'line??
set mrc3 = executesql(strsql3, msgstring)
strsql = "select * from student_info where cardno='" & trim(txtkahao.text) & "'and status='使用'"
set mrc = executesql(strsql, msgstring)
'空值if txtkahao.text = "" then
msgbox "沒有資料或卡號不存在", , "提示"
txtkahao.setfocus
exit sub
end if
' 。。。。。。後面的邏輯省去了
end sub
每個事件裡用到了幾個查詢語句就放幾個查詢語句,以後再次用到時還得寫,查詢語句也僅限於對本次事件某些資料的處理。
在機房重構時我們的**可能是這樣的(dal層):
//新增退卡記錄
public int addcancel(cancelinfo cancel)
;return sqlhelper.excutenonquery(sql, sp);
}——————————————————————————(不在同一類裡)————————————————————————
//刪除商品
public int deletegoods(goodsinfo goods)
;return sqlhelper.excutenonquery(sql, sp);
}
由於有了分層的架構,不同的層又有不同的類,類裡sql語句放在了一起,根據功能封裝成了不同的方法。在這裡就用到了封裝,每個查詢都是乙個方法,根據查詢結果的型別,相應的方法要寫成對應的型別,將執行結果通過return返回給方法。這樣,方法就被完整的封裝了起來,用的時候呼叫方法名(有引數的話需要給引數值)就可以了。
現在意識到了吧,在我們剛寫dal層**時就用到了封裝。是不是省了很多**呢。
後續部落格會詳細講解封裝方法及引數使用。
初步認識c
iostream i即代表in輸入,o即代表out輸出的意思 using namespace std 引用命名空間 輸出數字1 cout 1 輸入 cin 變數 輸出數字1加空格 cout 1 輸入int型a,b,輸出a,b之和 includeusing namespace std int main...
C 延遲執行方法函式例項講解
需求分析 我們在做winform開發的時候,有時候需要讓程式休眠幾秒鐘,但是如果我們直接使用 thread.sleep 函式的話,頁面ui就會停止響應。怎麼樣解決呢,你可以把頁面涉及到表現ui的 放到乙個單執行緒處理,也可以採用我面的方法,加乙個小函式就ok了。if messagebox.show ...
re正規表示式講解 初步認識
f open r c users lenovo desktop 模特.txt r 1.常規提取文件內容方法 contacts for i in f name,local,height,weight,telephone i.split if len telephone 11 and telephone...