30
A Small Exercise A Small Exercise Suppose you need to implement a movie rental Suppose you need to implement a movie rental system system Your movie rental system must deal with Your movie rental system must deal with Three kind of movie rental Three kind of movie rental New release ($3) New release ($3) Regular ($2) Regular ($2) Children ($2) Children ($2) A movie, of course, can have several copies A movie, of course, can have several copies A customer can ask for a statement A customer can ask for a statement Please write down Please write down the draft classes, some primary methods in each the draft classes, some primary methods in each class class A main() to show how your classes are used. A main() to show how your classes are used. 1

A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

  • View
    217

  • Download
    2

Embed Size (px)

Citation preview

Page 1: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

A Small Exercise A Small Exercise

Suppose you need to implement a movie rental systemSuppose you need to implement a movie rental system

Your movie rental system must deal withYour movie rental system must deal with Three kind of movie rental Three kind of movie rental

New release ($3)New release ($3)

Regular ($2)Regular ($2)

Children ($2)Children ($2) A movie, of course, can have several copiesA movie, of course, can have several copies A customer can ask for a statementA customer can ask for a statement

Please write down Please write down the draft classes, some primary methods in each class the draft classes, some primary methods in each class A main() to show how your classes are used.A main() to show how your classes are used.

11

Page 2: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

22

an examplean exampleThe movie rental systemThe movie rental system

Please take time to read movie-p05.javaPlease take time to read movie-p05.java

write down your thoughts write down your thoughts Why is it bad from your experience?Why is it bad from your experience? How you plan to change it? (Compare it with your How you plan to change it? (Compare it with your

version, which is better?)version, which is better?)

Page 3: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

33

Page 4: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

44

movie-p05 movie-p05 的問題的問題not well designed, poorly writtennot well designed, poorly writtenhard to changehard to changeImage a future change – customer wants a new Image a future change – customer wants a new function called function called htmlStatement()htmlStatement()

1.1. You will find you cannot reuse any code in p05 You will find you cannot reuse any code in p05 formally. formally.

2.2. Eventually, you copy-paste Eventually, you copy-paste statement() statement() and modify it and modify it into a new into a new htmlStatement()htmlStatement()

3.3. Some time in the future, you need to change the rule Some time in the future, you need to change the rule of computing frequent renter points of computing frequent renter points

You need to change two places and maintain the You need to change two places and maintain the consistency at two places.consistency at two places.

Page 5: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

55

As time goes byAs time goes by

As time goes by, programmers come and go and As time goes by, programmers come and go and movie-p05 becomes chaotic movie-p05 becomes chaotic Every fix can be done at once. There are too Every fix can be done at once. There are too many places to fix anytime a change request is many places to fix anytime a change request is made by customer because more and more made by customer because more and more places should remain consistentplaces should remain consistentWhenWhencost(fixingcost(fixing ++ debug+testing) > cost(rework)debug+testing) > cost(rework)it is time to rebuildit is time to rebuildIt is called software entropy(It is called software entropy( 熵熵 ))changes to a bad code is hardchanges to a bad code is hard

Page 6: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

66

LetLet moviemovie––p05 can deal with p05 can deal with Change (The first step)Change (The first step)

ChangeChange movie-p05 113-130 into a movie-p05 113-130 into a method of customermethod of customer Each ->Each -> aRentalaRental

LogicLogic :: centralize the part of code that is centralize the part of code that is subject to change in the futuresubject to change in the future

Result is inResult is in movie-p11.javamovie-p11.java

Page 7: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

77

Review movie-p11 againReview movie-p11 again

Do you have any unpleasant feeling about the Do you have any unpleasant feeling about the amountFor()amountFor() in Customer? in Customer?amountFor uses two many information from amountFor uses two many information from other classes.other classes.In most cases, a method should be on the object In most cases, a method should be on the object whose data it uses.whose data it uses.We move We move amountFor() amountFor() to Rental class to to Rental class to become a method become a method getCharge()getCharge()remove temp variable remove temp variable thisAmount thisAmount see movie-p21.javasee movie-p21.java

Page 8: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

88

p19p19

Page 9: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

99

p24p24

Page 10: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1010

Movie-p21.javaMovie-p21.java

NowNow ,, inin movie-p21.java, movie-p21.java, statement() statement() becomes much better becomes much better

Besides, 101-106 include another part of Besides, 101-106 include another part of code that is subject to changecode that is subject to change

We change it into another method of We change it into another method of Rental class Rental class getFrequentRenterPoints() getFrequentRenterPoints()

see movie-p25.javasee movie-p25.java

Page 11: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1111

movie-P25.javamovie-P25.java

Page 12: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1212

p30p30

Page 13: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1313

Remove temp variablesRemove temp variables

temp variables can be a problem, which temp variables can be a problem, which encourage long routinesencourage long routines

remove temps totalAmounts and remove temps totalAmounts and frequentRenterPointsfrequentRenterPoints

see movie-p33.javasee movie-p33.java

In movie-p33.java a htmlStatement() In movie-p33.java a htmlStatement() method is added. -> now if we want to method is added. -> now if we want to change rule, only one place should be change rule, only one place should be changed. changed.

Page 14: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1414

movie-p33movie-p33

Page 15: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1515

Review movie-p33.javaReview movie-p33.java

Is this code perfect now? not yetIs this code perfect now? not yetIt is a bad idea to do a switch based on an It is a bad idea to do a switch based on an attribute of another objectattribute of another objectFor example, when a new movie class called For example, when a new movie class called Adult is added, changes areAdult is added, changes are Change the definition in movie class.Change the definition in movie class. Rental::getCharge() should be changed Rental::getCharge() should be changed

Let’s move getCharge(), Let’s move getCharge(), getFrequentRenterPoints() getFrequentRenterPoints() 的 的 code code 搬到 搬到 movie classmovie classsee movie-p37.javasee movie-p37.java

Page 16: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1616

p36p36

Page 17: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1717

p37p37

Page 18: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1818

Review of movie-p37Review of movie-p37

So, how about it now? perfect? not yetSo, how about it now? perfect? not yetswitch in getCharge() is a typical bad code which switch in getCharge() is a typical bad code which cannot answer changes well.cannot answer changes well.In practice, such switch() can occurs in several In practice, such switch() can occurs in several places (recall that when polymorphism is places (recall that when polymorphism is introduced). Each switch must be kept introduced). Each switch must be kept consistentconsistent 。。Often, a switch that will change from time to time Often, a switch that will change from time to time satisfies the precondition of subclassing. We satisfies the precondition of subclassing. We can replace it by polymorphism and inheritance can replace it by polymorphism and inheritance

Page 19: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

1919

Move each branch of switch to subclasses Move each branch of switch to subclasses getCharge getCharge 中中We replace switch statement with polymorphismWe replace switch statement with polymorphismFeeling good? (Feeling good? ( 自我感覺良好嗎自我感覺良好嗎 ?)?)

Page 20: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2020

UnfortunatelyUnfortunately ,, such inheritance structure has flaw. such inheritance structure has flaw. However, amateur OO analysts will most reach such However, amateur OO analysts will most reach such kind of results kind of results In this application, a movie object may change its In this application, a movie object may change its classification during life timeclassification during life time E.g., suppose a new release film Q changes to a regular E.g., suppose a new release film Q changes to a regular

moviemovie Consequently, what will you do?Consequently, what will you do?

New a regular movie PNew a regular movie PClone the data of Q to PClone the data of Q to PDestroy QDestroy QThat’s it? (No. take a look at the main())That’s it? (No. take a look at the main())

An object cannot change its class during life timeAn object cannot change its class during life time

Page 21: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2121

state design patternstate design pattern

Page 22: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2222

The correct answer is change movie-p37 The correct answer is change movie-p37 to movie-p52.java using state design to movie-p52.java using state design patternpattern

Please see movie-p52.javaPlease see movie-p52.java

Page 23: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2323

p51 Fig1.16p51 Fig1.16

Page 24: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2424

p51 F1.17p51 F1.17

Page 25: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2525

Refactoring (Refactoring ( 重構)重構)The above technique is called refactoring, The above technique is called refactoring, a mechanism to improve architecture of a mechanism to improve architecture of as-build codes.as-build codes.

change is based on step by step and each change is based on step by step and each step is validated by all the testing cases.step is validated by all the testing cases.

It is of course, not cost-freeIt is of course, not cost-free

Page 26: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2626

Design PatternsDesign Patterns

過去,在實做各種各類的軟體過程中,許多人累積了寶貴過去,在實做各種各類的軟體過程中,許多人累積了寶貴的物件導向分析經驗。經過蒐集整理,這些寶貴的繼承架的物件導向分析經驗。經過蒐集整理,這些寶貴的繼承架構,構, class diagramclass diagram ,物件互動架構等等,被蒐集成所謂,物件互動架構等等,被蒐集成所謂的 的 design patternsdesign patterns 。。When you encounter some problems in OOAD or OOP. When you encounter some problems in OOAD or OOP. It is rare that your problem is new. It is rare that your problem is new.

Some people collects these problems and solution into a Some people collects these problems and solution into a some form of reuses.some form of reuses.

design patterns are one kind of reuse, but not code design patterns are one kind of reuse, but not code reuse. Instead, it is a kind of pattern reuse.reuse. Instead, it is a kind of pattern reuse.

Page 27: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2727

DiscussionDiscussion

The main purpose of OOAD is to make our code The main purpose of OOAD is to make our code easy to maintain, change, and evolve,easy to maintain, change, and evolve,Good analysis is difficultGood analysis is difficultDon’t expect you will become a OOAD expert Don’t expect you will become a OOAD expert because you take the course.because you take the course.Typically, having analysis is better than no Typically, having analysis is better than no analysis. Recall the integrity of architecture and analysis. Recall the integrity of architecture and thought. thought.

Page 28: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2828

DiscussionDiscussionGood architecture != good performanceGood architecture != good performanceIn most cases, good architecture may have worse performance. In most cases, good architecture may have worse performance. In some design concerns, some classes will be merged to increase In some design concerns, some classes will be merged to increase performance (if they are found to be guilty of the blame)performance (if they are found to be guilty of the blame)Programmers that can write good and clean OO code are hard to Programmers that can write good and clean OO code are hard to find.find.Good analysis, of course, can be used to create good teamwork Good analysis, of course, can be used to create good teamwork (WBS work breaking structure)(WBS work breaking structure)Good analyst can smell the change in system design and make the Good analyst can smell the change in system design and make the part OO lypart OO lyDon’t overdesign. If the change will not occurs within 100 years, Don’t overdesign. If the change will not occurs within 100 years, make the part Ooly is a waste of time.make the part Ooly is a waste of time.Good OOAD must eventually demonstrate at the level of code. Good OOAD must eventually demonstrate at the level of code. Extensive programming experience is required.Extensive programming experience is required.

Page 29: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

2929

DiscussionDiscussion

In a software development project. How much efforts In a software development project. How much efforts should be put in OOAD?should be put in OOAD?

What type of software you build (what kind of market you are What type of software you build (what kind of market you are in)?in)?

e.g. there is no need for analysis for most researche.g. there is no need for analysis for most research Is evolveability very important in your area?Is evolveability very important in your area? is technology changing very fast in your area?is technology changing very fast in your area? How long is your design/code typically out of date and thrown How long is your design/code typically out of date and thrown

away?away? what is the scale of your software?what is the scale of your software? what is the total cost of your software?what is the total cost of your software? Are documentation/process important in your company?Are documentation/process important in your company? Have your programmers high transition rate?Have your programmers high transition rate? How much quality you care?How much quality you care? 6 month design/planning, 3 month coding, 3 month testing6 month design/planning, 3 month coding, 3 month testing

Page 30: A Small Exercise Suppose you need to implement a movie rental system Your movie rental system must deal with Three kind of movie rental Three kind of movie

3030

ThanksThanks

Q & AQ & A