一个面向对象设计的案例影片租借.ppt
《一个面向对象设计的案例影片租借.ppt》由会员分享,可在线阅读,更多相关《一个面向对象设计的案例影片租借.ppt(28页珍藏版)》请在三一文库上搜索。
1、一个面向对象设计的案例,影碟出租系统,问题描述,一个影片出租店需要计算每一位顾客的消费金额并打印报表 操作者提供给系统:顾客租借的影片、租期,系统根据租赁时间和影片类型计算费用 影片分普通片、儿童片和新片 常客还会有积分数,积分点数根据“租片种类是否为新片”而又不同,最初的类图,Movie:只是一个简单的纯数据类 Rental:表示某个顾客的一次租借记录 Customer:顾客,最初的交互图,Statement用于计算并将结果制作报表,Movie类,public class Movie public static final int CHILDRENS = 2; public static f
2、inal int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; / 名称 private int _priceCode; / 价格代号 public Movie(String title, int priceCode) _title = title; _priceCode = priceCode; public int getPriceCode() return _priceCode; ,public void setPriceCode(int arg) _priceCode = arg
3、; public String getTitle() return _title; ,Rental类,class Rental private Movie _movie; / 影片 private int _daysRented; / 租期 public Rental(Movie movie, int daysRented) _movie = movie; _daysRented = daysRented; public int getDaysRented() return _daysRented; public Movie getMovie() return _movie; ,Custome
4、r类,class Customer private String _name; / 姓名 private Vector _rentals = new Vector(); / 租借纪录 public Customer(String name) _name = name; public void addRental(Rental arg) _rentals.addElement(arg); public String getName() return _name; ,Customer类,case Movie.NEW_RELEASE: / 新片 thisAmount += each.getDaysR
5、ented()*3; break; case Movie.CHILDRENS: / 儿童片 thisAmount += 1.5; if(each.getDaysRented()3) thisAmount += (each.getDaysRented()-3)*1.5; break; / 累加常客积分 frequentRenterPoints +; if (each.getMovie().getPriceCode() = Movie.NEW_RELEASE) ,public String statement() double totalAmount = 0; / 总消费金额 int freque
6、ntRenterPoints = 0; / 常客积分 Enumeration rentals = _rentals.elements(); String result = “Rental Record for “ + getName() + “n“; while(rentals.hasMoreElements() double thisAmount = 0; Rental each = (Rental) rentals.nextElement(); / 取得一笔租借纪录 switch(each.getMovie().getPriceCode() case Movie.REGULAR: / 普通
7、片 thisAmount += 2; if(each.getDaysRented()2) thisAmount += (each.getDaysRented()-2)*1.5; break;,主程序,public static void main(String args) System.out.println(“Refactoring, a First Example, step1“); Movie m1 = new Movie(“Seven“, Movie.NEW_RELEASE); Movie m2 = new Movie(“Terminator“, Movie.REGULAR); Mov
8、ie m3 = new Movie(“Star Trek“, Movie.CHILDRENS); Rental r1 = new Rental(m1, 4); Rental r2 = new Rental(m1, 2); Rental r3 = new Rental(m3, 7); Rental r4 = new Rental(m2, 5); Rental r5 = new Rental(m3, 3); Customer c1 = new Customer(“jjhou“); c1.addRental(r1); c1.addRental(r4); 。 System.out.println(c1
9、.statement(); ,分解重组statement,public String statement() double totalAmount = 0; / 总金额 int frequentRenterPoints = 0; / 常客积分 Enumeration rentals = _rentals.elements(); String result = “Rental Record for “ + getName() + “n“; while(rentals.hasMoreElements() double thisAmount = 0; Rental each = (Rental) r
10、entals.nextElement(); / 取得一笔租借纪录 thisAmount = amountFor(each); / 计算一笔租片费用 ,分解重组statement,private double amountFor(Rental aRental) / 计算一笔租片费用 double result= 0; switch (aRental.getMovie().getPriceCode() case Movie.REGULAR: / 普通片 result += 2; if (aRental.getDaysRented() 2) result += (aRental.getDaysRen
11、ted() - 2) * 1.5; break; case Movie.NEW_RELEASE: / 新片 result += aRental.getDaysRented() * 3; break; case Movie.CHILDRENS: / 儿童片 result += 1.5; if (aRental.getDaysRented() 3) result += (aRental.getDaysRented() - 3) * 1.5; break; return result; ,职责分配,amountFor函数使用了很多来自Rental类的信息 将该函数移动到Rental类中,成为它权责之
12、内的服务,改名为getCharge() 积分计算同理,调整金额计算,double getCharge() double result = 0; switch (getMovie().getPriceCode() case Movie.REGULAR: result += 2; if (getDaysRented() 2) result += (getDaysRented() - 2) * 1.5; break; case Movie.NEW_RELEASE: result += getDaysRented() * 3; break; case Movie.CHILDRENS: result +
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 面向 对象 设计 案例 影片 租借
链接地址:https://www.31doc.com/p-2651988.html