在封裝類的過程中,會將類分為實體類和功能實現類。這樣會將乙個問題中需要用到的屬性放到實體類中,需要實現的功能放到功能類中。
實體類主要是用來存放屬性的,例項類中的方法主要是構造方法,獲取設定屬性的get、set方法,tostring()方法這種獲取屬性和設定屬性的方法。實體類在命名的時候一般會在類名之後加上實體類字尾(entity、model、bean、pojo、vo)
功能實現類裡則是一些實現我們需要的功能的**,比如對實體類中的屬性進行統計、計算等功能。
在封裝過程中的重點是找實體類,找實體類的簡單規則是在分析問題的過程中尋找名詞。
下面是我在練習類的封裝時做的幾個練習題
題目要求:描述乙個圖書館首先提取實體類,找問題中的名詞——書、卡、記錄,記錄是很容易被漏掉的乙個實體類進書、借書卡管理
借書、還書
查詢某書的借出記錄
查詢借書卡的借出記錄
顯示圖書列表(按借出次數排序)
然後開始思考每個實體類中包括的屬性:
書的實體類(bookmodel):書的編號、書名、借閱次數
卡的實體類(cardmodel):借閱卡的id、密碼
記錄的實體類(recordmodel):借閱卡的id、書的編號、是否歸還
ps:在設定記錄的實體類的時候,我還加了書名這個變數,在記錄中加書名這個變數在這個題目中沒有什麼問題,其實已經有了唯一的標識——書的編號,完全可以在書的實體類物件中找到其對應的書名,沒必要再在記錄中設定這樣乙個變數了。另外如果需要更改書名這個操作,那麼需要更改書的物件中的書名,還要更改記錄中對應的書的名字。如果記錄中只有書的編號,只需要修改書實體類的物件中的書名,記錄中需要用到書名再去根據書的編號去查詢就好了,在**之後的修改、增加功能方面更容易。在實體類中盡量不要定義多餘的變數,不然會增加修改**的工作量
功能類進書; 2. 借閱卡註冊; 3. 借書; 4. 還書; 5. 查詢記錄; 6. 顯示圖書
題目要求:實體類:車位、車、記錄乙個停車場,內有多個車位,可停入各種車輛
只有具備車牌並高度低於3公尺的車輛可停入
停入時開始計費,按每小時2元
查詢全部停車位的狀態
按車牌及停車位號取車,取車時收取停車費
查詢統計全部的收費記錄
ps:這個題車這個實體類不用也很容易實現,但是像這種原始資料(不是計算統計得來的資料)最好要存起來,以便以後增加功能時比較容易,比如增加乙個車型不同收費**不同的功能,如果你不儲存車的資料,那麼之前的資料因為沒有儲存車的資料,就沒什麼利用價值。
停車位:停車位序號、停車位狀態
車:車牌、車高
記錄:停車位序號、停放車牌號、停放時間、離開時間(車費)
功能類:
停車; 2. 取車、計算停車費; 3. 查詢停車位狀態; 4. 查詢全部記錄
有乙個水果銷售攤位,銷售3種水果,重量和單價各不相同,實現多次的銷售業務實體類:水果、進貨記錄、銷售記錄銷售時如果為顧客為女性銷售金額打8折
顯示當前各種水果的庫存數
查詢全部銷售記錄資訊
加入其它水果品種
新增進貨單
查詢指定日期間隔的銷售純利潤
每日17:00之後為5折**
按銷售數量排序顯示前三名
顯示當前各種水果的庫存數,成本單價,單價,累計銷售數量/金額,累計進貨數量/金額
水果:水果名、庫存、售價、進價
ps:在這個問題中有個累計銷售金額和累計進貨金額的問題,這兩個變數如果定義在水果類中會很好記錄,但是不推薦寫在水果實體類中,因為這就不是水果的共性,只是為了功能而增加的。
進貨記錄:水果名、進價、進貨量
ps:這裡像進貨的花費之類的可計算的、可統計的資料不必新增到實體類中,實體類中存放那些用於計算、統計的原始資料。
銷售記錄:水果名、售價、銷售量、銷售時間、銷售折扣
ps:這裡折扣最好是要存起來的,折扣就是乙個用於計算的原始資料,如果不存折扣,這樣的資料不完整,只是一次性的,沒有什麼價值。
功能類:進貨、銷售、查詢
思考:這裡在實現的時候我將進貨**設定為每次進貨**是不變的,但是實際過程中並不能保證每次進貨都是一樣的**,那要怎麼實現呢?
方法1:每次進貨的時候計算平均值,將平均值儲存到進貨價中
方法2:每次進貨都當做新水果,這種情況下就不能用水果名區分了,而是應該引入唯一的id來標記水果。
推薦使用第二種方法,第一種方法有侷限性,比如有水果壞了就沒法算了
練習題01 (封裝)
封裝 程式設計 已知乙個student類,如下 1 將student類進行封裝,即屬性均私有化,並提供get set方法 2 為student 類新增乙個getpostaddress 方法,要求返回student 物件的位址和郵編 3 定義乙個測試類,建立物件並為屬性賦值,將使用者的資訊進行展示 p...
python書中練習題 python練習題
1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...
python的練習題 Python練習題
1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...