程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 實例談談Java面向對象

實例談談Java面向對象

編輯:關於JAVA
 

java面向對象

大家都知道JAVA的核心就是面向對象思想,也就是OO,但是說起來很容易,真正想弄個透徹,並不是那麼容易的。說來說去面向對象的特征也就那幾個:抽象,封裝,繼承,多態,其實一個抽象就可能難倒70%-80%的程序員,包括什麼軟件工程師(我更喜歡JAVA程序員的職稱)。不是說簡單就容易,二分法算法很簡單吧,可是1947就出現的二分算法,直到1961年才有世界上第一個沒有BUG的二分算法(盜用下經典的例子啦)。還是別扯遠了,來個例子:

業務需求如下:
1.一個客戶可以有多套房子的房貸
2.簽署貸款合同以後要監控是否按照還貸計劃表來執行
3.自動還款,當多套房貸時,一次還款可能包括多個房貸的額度,需要自動匹配
4.可以提前還款
5.可以延長或縮短貸款的時間
6.利率可以調整
7.滯納金的問題

是不是看的有點頭昏呢,其實我對貸款買房業務也不了解,為了大致把問題用面向對象進行描述,那麼我們就開始進行問題抽象(這裡不包括領域驅動設計DDD)。

對象分析

首先我們知道肯定有一個事務用來表示貸款買房的人,用Coustomer來表示,他有什麼屬性呢,人我們就用姓名區分好了,因為他貸款要買房,肯定有一些錢(否則還是不要有買房的念頭吧)
房子就用House來表示,房子有什麼屬性呢,肯定有價格啦,利率啦,年限啦.每個月你要還多少,或者一年還多少(只有愛存不存ICBC,沒有愛還不還)。貸款就用Credit來表示,貸款就有客戶啦,還錢時間啦,房子啦。

你貸款銀行就會跟你簽合同,你跑不了了。合同就用agreement來表示,貸款合同有什麼屬性呢,合同肯定有貸款,是否壞賬標記,滯納金。

業務分析

客戶買房子,假設所購的房子已經付了首付(不然銀行不可能給你貸,除非你爸是李剛)。要跟銀行貸款,那麼就要和銀行簽訂貸款合同。
貸款買的房子可能不止一套,我們就不管銀監會的神馬限購令了。
客戶還款,你每隔多少時間還銀行錢,那麼就會自動根據利率給你匹配計算了(因為銀行工作的MM有點懶哦),如果還的錢不夠,那麼就會給你記壞賬了,你拖得太久
銀行就會通知你要付款,要是你沒有能力還了,銀行就會銷毀合同,收走你的房,花你的錢,搶你的女朋友,打你的娃(開玩笑啦)。
這裡我們的業務方法加了年限和利率的改變實現,主要是為了簡單易懂。最好使用JAVA DEGISN PATTER 中的Observer(觀察者設計模式)來實現,只要貸款監聽倒利率或年限改變,就會自動進行操作。
後面我們再用觀察者設計模式來解決這個問題。
package org.javaer.code.test;
import java.util.List;
import java.util.Map;
class Customer {
 /**
  * 客戶
  */
 private String username = “donglinmeimei”;
private double money = 0.0;
public String getUsername() {
  return username;
 }
public void setUsername(String username) {
  this.username = username;
 }
public double getMoney() {
  return money;
 }
public void setMoney(double money) {
  this.money = money;
 }
}
class House {
 /**
  * 房子
  */
 private String num = “3#116″;
private double price = 0.0;
private double rax = 0.0;// 利率
private int years = 0;// 年限
public String getNum() {
  return num;
 }
public void setNum(String num) {
  this.num = num;
 }
public double getPrice() {
  return price;
 }
public void setPrice(double price) {
  this.price = price;
 }
public double getRax() {
  return rax;
 }
public void setRax(double rax) {
  this.rax = rax;
 }
public int getYears() {
  return years;
 }
public void setYears(int years) {
  this.years = years;
 }
}
class Credit {
 /**
  * 貸款
  */
 private Customer customer;
 
 private int backTime;
private List<House> housees;
// 每月還多少
 private Map<House, Double> toPay;
public Customer getCustomer() {
  return customer;
 }
public void setCustomer(Customer customer) {
  this.customer = customer;
 }
public int getBackTime() {
  return backTime;
 }
public void setBackTime(int backTime) {
  this.backTime = backTime;
 }
public List<House> getHousees() {
  return housees;
 }
public void setHousees(List<House> housees) {
  this.housees = housees;
 }
public Map<House, Double> getToPay() {
  return toPay;
 }
public void setToPay(Map<House, Double> toPay) {
  this.toPay = toPay;
 }
}
class Agreement {
 /**
  * 合同
  */
 private Credit credit;
 private boolean isContinue;
// 滯納金
 private double amercement = 0.0;
 public Credit getCredit() {
  return credit;
 }
 public void setCredit(Credit credit) {
  this.credit = credit;
 }
 public boolean isContinue() {
  return isContinue;
 }
 public void setContinue(boolean isContinue) {
  this.isContinue = isContinue;
 }
 public double getAmercement() {
  return amercement;
 }
 public void setAmercement(double amercement) {
  this.amercement = amercement;
 }
 
}
interface BankService {
 // 買房,同時產生貸款和合同
 public void buyHousees(Customer customer, List<House> houseed);
// 還款,計算是否有滯納金
 public double payMoney(int backTime, Agreement agreement, double money,
   Customer customer);
// 改變利率
 public Map<House, Double> changeRax(House house, double rax);
// 改變年限
 public Map<House, Double> changeYears(House house, int backTime);
}
class BankServiceImpl implements BankService {
public void buyHousees(Customer customer, List<House> houseed) {
 }
public double payMoney(int backTime, Agreement agreement, double money,
   Customer customer) {
  return money;
 }
public Map<House, Double> changeRax(House house, double rax) {
  return null;
 }
public Map<House, Double> changeYears(House house, int backTime) {
  return null;
 }
}
public class Bank{
 public static void main(String[] args) {
  Customer customer = new Customer();
  customer.setUsername(“董林美美”);
  customer.setMoney(10);
 
  List<House> housees = new ArrayList<House>();
  House house = new House();
  house.setNum(“3#116″);
  house.setPrice(1500000);
  house.setRax(0.96);
  house.setYears(20);
  housees.add(house);
 
  House house1 = new House();
  house1.setNum(“4#112″);
  house1.setPrice(1100000);
  house.setRax(0.155);
  house.setYears(30);
  housees.add(house1);
 
  House house2 = new House();
  house2.setNum(“1#001″);
  house2.setPrice(2000000);
  house.setRax(0.12);
  house.setYears(100);
  housees.add(house2);
  
  BankService bs = new BankServiceImpl();
  Credit credit = bs.buyHousees(customer, housees);//買房
  Agreement agreement = bs.orderAgreement(customer, credit);//簽訂合同
  if(!agreement.isContinue())return;//合同作廢
  else{
   agreement.setAmercement(bs.payMoney(1, agreement, 111111, customer));//還款    
   for(Entry<House,Double> entry : agreement.getCredit().getToPay().entrySet()){
    if(agreement.getAmercement().get(entry.getKey())>=entry.getValue()/3){
     agreement.setContinue(false);
     System.out.println(agreement.getCredit().getCustomer().getUsername()+”,你的賬戶產生壞賬,合同終止”);
     break;
    }else{
 
            System.out.println(agreement.getAmercement().get(entry.getKey())>=0?
      agreement.getCredit().getCustomer().getUsername()+”,房子”+entry.getKey().getNum()+”的滯納金為:”+agreement.getAmercement():”");
    
    }
    Map<House,Double> topay = bs.changeRax(house2, 1.58);//改變利率
    Map<House,Double> topay = bs.changeYears(house2, 50);//改變年限
    System.out.println(agreement.getCredit().getCustomer().getUsername()+”,房 子”+entry.getKey().getNum()+”每月還款金額為:”+entry.getValue());
   
   }
  }
 
 
 }
}
文本內容長度有限制,所以例子就只寫這一個了,請大家原諒。
如果面對一個領域的問題,能夠進行事務抽象分析,那麼問題就好解決了。這需要很長時間的項目鍛煉,積累不少經驗才能做到。但是今天的一小步,明天的一大步(又涉嫌抄襲了),不要忽視平時的小小的成功。

都說JAVA程序員的三件法寶是Question ,DesignPattern ,framework,那麼接下來我就根據這幾個法寶來一一表達我的觀點。我說了希望大家來交流和拍板,大家共同學習,共同進步。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved