Top Banner
1 17-214 Principles of Software Construction: Objects, Design, and Concurrency Part 1: Designing classes Design for reuse: delegation and inheritance Charlie Garrod Chris Timperley
47

Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

Aug 06, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

1 17-214

PrinciplesofSoftwareConstruction: Objects,Design,andConcurrencyPart1:DesigningclassesDesignforreuse:delegationandinheritanceCharlieGarrodChrisTimperley

Page 2: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

2 17-214

Administrivia

•  Homework1gradedsoon•  Readingduetoday:EffectiveJava,Items17and50

–  OptionalreadingdueThursday–  RequiredreadingduenextTuesday

•  Homework2dueThursday11:59p.m.

Page 3: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

3 17-214

DesigngoalsforyourHomework1solution?

Functionalcorrectness Adherenceofimplementationtothespecifications

Robustness Abilitytohandleanomalousevents

Flexibility Abilitytoaccommodatechangesinspecifications

Reusability Abilitytobereusedinanotherapplication

Efficiency Satisfactionofspeedandstoragerequirements

Scalability Abilitytoserveasthebasisofalargerversionoftheapplication

Security Levelofconsiderationofapplicationsecurity

Source: Braude, Bernstein, Software Engineering. Wiley 2011

Page 4: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

4 17-214

OneHomework1solution…

classDocument{privatefinalStringurl;publicDocument(Stringurl){this.url=url;}publicdoublesimilarityTo(Documentd){…ourText=download(url);…theirText=download(d.url);…ourFreq=computeFrequencies(ourText);…theirFreq=computeFrequencies(theirText);returncosine(ourFreq,theirFreq);}…}

Page 5: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

5 17-214

ComparetoanotherHomework1solution…

classDocument{privatefinalStringurl;publicDocument(Stringurl){this.url=url;}publicdoublesimilarityTo(Documentd){…ourText=download(url);…theirText=download(d.url);…ourFreq=computeFreq(ourText);…theirFreq=computeFreq(theirText);returncosine(ourFreq,theirFreq);}…}

classDocument{privatefinal…frequencies;publicDocument(Stringurl){…ourText=download(url);frequencies=computeFrequencies(ourText);}publicdoublesimilarityTo(Documentd){returncosine(frequencies,d.frequencies);}…}

Page 6: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

6 17-214

UsingtheDocumentclass

Foreachurl:ConstructanewDocumentForeachpairofDocumentsd1,d2:Computed1.similarityTo(d2)…

•  Whatistherunningtimeofthis,fornurls?

Page 7: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

7 17-214

LatencyNumbersEveryProgrammerShouldKnowJeffDean,SeniorFellow,Google

PRIMITIVELATENCY:nsusmsL1cachereference0.5Branchmispredict5L2cachereference7Mutexlock/unlock25Mainmemoryreference100Compress1KbyteswithZippy3,0003Send1Kbytesover1Gbpsnetwork10,00010Read4KrandomlyfromSSD*150,000150Read1MBsequentiallyfrommemory250,000250Roundtripwithinsamedatacenter500,000500Read1MBsequentiallyfromSSD*1,000,0001,0001Diskseek10,000,00010,00010Read1MBsequentiallyfromdisk20,000,00020,00020SendpacketCA->Netherlands->CA150,000,000150,000150

Page 8: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

8 17-214

Thepoint

•  Constantsmatter•  Designgoalssometimesclearlysuggestonealternative

Page 9: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

9 17-214

KeyconceptsfromlastThursday

Page 10: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

10 17-214

KeyconceptsfromlastThursday

•  Testing–  Continuousintegration,practicaladvice–  Coveragemetrics,statementcoverage

•  ExceptionsinJava•  Behavioralsubtyping

–  LiskovSubstitutionPrinciple–  Thejava.lang.Objectcontracts

Page 11: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

11 17-214

Behavioralsubtyping

•  e.g.,Compiler-enforcedrulesinJava:–  Subtypescanadd,butnotremovemethods–  Concreteclassmustimplementallundefinedmethods–  Overridingmethodmustreturnsametypeorsubtype–  Overridingmethodmustacceptthesameparametertypes–  Overridingmethodmaynotthrowadditionalexceptions

•  Alsoappliestospecifiedbehavior.Subtypesmusthave:–  Sameorstrongerinvariants–  Sameorstrongerpostconditionsforallmethods–  Sameorweakerpreconditionsforallmethods

Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.

Barbara Liskov

This is called the Liskov Substitution Principle.

Page 12: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

12 17-214

ThisSquareisnotabehavioralsubtypeofRectangle

classRectangle{//@invarianth>0&&w>0;inth,w;Rectangle(inth,intw){ this.h=h;this.w=w;}

//@requiresfactor>0;

voidscale(intfactor){ w=w*factor; h=h*factor;}

//@requiresneww>0;//@ensuresw==neww&&h==old.h;

voidsetWidth(intneww){ w=neww;}

}

classSquareextendsRectangle{//@invarianth>0&&w>0;//@invarianth==w;

Square(intw){ super(w,w);}

//@requiresneww>0;//@ensuresw==neww&&h==neww;@OverridevoidsetWidth(intneww){w=neww;h=neww;}}

Page 13: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

13 17-214

Today

•  Designforreuse:delegationandinheritance–  Java-specificdetailsforinheritance

•  Anexerciseinequality

Page 14: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

14 17-214

Recallourearliersortingexample:

staticvoidsort(int[]list,booleanascending){…booleanmustSwap;if(ascending){mustSwap=list[i]>list[j];}else{mustSwap=list[i]<list[j];}…}

interfaceOrder{booleanlessThan(inti,intj);}finalOrderASCENDING=(i,j)->i<j;finalOrderDESCENDING=(i,j)->i>j;staticvoidsort(int[]list,Ordercmp){…booleanmustSwap=cmp.lessThan(list[i],list[j]);…}

Version A:

Version B':

Page 15: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

15 17-214

Delegation

•  Delegationissimplywhenoneobjectreliesonanotherobjectforsomesubsetofitsfunctionality–  e.g.here,theSorterisdelegatingfunctionalitytosomeOrder

•  Judiciousdelegationenablescodereuse

interfaceOrder{booleanlessThan(inti,intj);}finalOrderASCENDING=(i,j)->i<j;finalOrderDESCENDING=(i,j)->i>j;staticvoidsort(int[]list,Ordercmp){…booleanmustSwap=cmp.lessThan(list[i],list[j]);…}

Page 16: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

16 17-214

Delegation

•  Delegationissimplywhenoneobjectreliesonanotherobjectforsomesubsetofitsfunctionality–  e.g.here,theSorterisdelegatingfunctionalitytosomeOrder

•  Judiciousdelegationenablescodereuse–  Sortercanbereusedwitharbitrarysortorders–  Orderscanbereusedwitharbitraryclientcodethatneedstocompare

integersinterfaceOrder{booleanlessThan(inti,intj);}finalOrderASCENDING=(i,j)->i<j;finalOrderDESCENDING=(i,j)->i>j;staticvoidsort(int[]list,Ordercmp){…booleanmustSwap=cmp.lessThan(list[i],list[j]);…}

Page 17: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

17 17-214

Usingdelegationtoextendfunctionality

•  Considerthejava.util.List(excerpted):publicinterfaceList<E>{publicbooleanadd(Ee);publicEremove(intindex);publicvoidclear();…}

•  Supposewewantalistthatlogsitsoperationstotheconsole…

Page 18: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

18 17-214

Usingdelegationtoextendfunctionality

•  Onesolution:publicclassLoggingList<E>implementsList<E>{privatefinalList<E>list;publicLoggingList<E>(List<E>list){this.list=list;}publicbooleanadd(Ee){System.out.println("Adding"+e);returnlist.add(e);}publicEremove(intindex){System.out.println("Removingat"+index);returnlist.remove(index);}…

TheLoggingListiscomposedofaList,anddelegates(thenon-logging)functionalitytothatList

Page 19: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

19 17-214

Delegationanddesign

•  Smallinterfaceswithclearcontracts•  Classestoencapsulatealgorithms,behaviors

–  E.g.,theOrder

Page 20: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

20 17-214

Today

•  Designforreuse:delegationandinheritance–  Java-specificdetailsforinheritance

•  Anexerciseinequality

Page 21: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

21 17-214

Consider:typesofbankaccounts

publicinterfaceCheckingAccount{publiclonggetBalance();publicvoiddeposit(longamount);publicbooleanwithdraw(longamount);publicbooleantransfer(longamount,Account???target);publiclonggetFee();}

publicinterfaceSavingsAccount{publiclonggetBalance();publicvoiddeposit(longamount);publicbooleanwithdraw(longamount);publicbooleantransfer(longamount,Account???target);publicdoublegetInterestRate();}

Page 22: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

22 17-214

Interfaceinheritanceforanaccounttypehierarchy

publicinterfaceAccount{publiclonggetBalance();publicvoiddeposit(longamount);publicbooleanwithdraw(longamount);publicbooleantransfer(longamount,Accounttarget);publicvoidmonthlyAdjustment();}

publicinterfaceCheckingAccountextendsAccount{publiclonggetFee();}

publicinterfaceSavingsAccountextendsAccount{publicdoublegetInterestRate();}

publicinterfaceInterestCheckingAccountextendsCheckingAccount,SavingsAccount{}

Page 23: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

23 17-214

Thepowerofobject-orientedinterfaces

•  Subtypepolymorphism–  Differentkindsofobjectscanbetreateduniformlybyclientcode–  Eachobjectbehavesaccordingtoitstype

•  e.g.,ifyouaddnewkindofaccount,clientcodedoesnotchange:

Iftodayisthelastdayofthemonth:ForeachacctinallAccounts:acct.monthlyAdjustment();

Page 24: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

24 17-214

publicabstractclassAbstractAccount implementsAccount{protectedlongbalance=0;publiclonggetBalance(){ returnbalance;}abstractpublicvoidmonthlyAdjustment();//othermethods…

}publicclassCheckingAccountImpl extendsAbstractAccount implementsCheckingAccount{publicvoidmonthlyAdjustment(){ balance-=getFee();}publiclonggetFee(){…}

}

Implementationinheritanceforcodereuse

Page 25: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

25 17-214

publicabstractclassAbstractAccount implementsAccount{protectedlongbalance=0;publiclonggetBalance(){ returnbalance;}abstractpublicvoidmonthlyAdjustment();//othermethods…

}publicclassCheckingAccountImpl extendsAbstractAccount implementsCheckingAccount{publicvoidmonthlyAdjustment(){ balance-=getFee();}publiclonggetFee(){…}

}

Implementationinheritanceforcodereuse

protectedelementsarevisibleinsubclasses

anabstractclassismissingtheimplementationofone

ormoremethods

anabstractmethodislefttobe

implementedinasubclass

noneedtodefinegetBalance()–thecodeisinheritedfrom

AbstractAccount

Page 26: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

26 17-214

Inheritance:aglimpseatthehierarchy

•  ExamplesfromJava–  java.lang.Object–  Collectionslibrary

Page 27: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

27 17-214

JavaCollectionsAPI(excerpt)

Collection

List Set AbstractCollection

AbstractList

LinkedList

Vector

HashSet

AbstractSequentialList

AbstractSet

Cloneable

ArrayList

interfaces

Page 28: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

28 17-214

Theabstractjava.util.AbstractList<E>

abstractEget(inti);abstractintsize();booleanset(inti,Ee);//pseudo-abstractbooleanadd(Ee);//pseudo-abstractbooleanremove(Ee);//pseudo-abstractbooleanaddAll(Collection<?extendsE>c);booleanremoveAll(Collection<?>c);booleanretainAll(Collection<?>c);booleancontains(Ee);booleancontainsAll(Collection<?>c);voidclear();booleanisEmpty();Iterator<E>iterator();Object[]toArray()<T>T[]toArray(T[]a);…

Page 29: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

29 17-214

Usingjava.util.AbstractList<E>

publicclassReversedList<E>extendsjava.util.AbstractList<E>implementsjava.util.List<E>{privatefinalList<E>list;publicReversedList(List<E>list){this.list=list;}@Overridepublicintsize(){returnlist.size();}@OverridepublicEget(intindex){returnlist.get(size()-index-1);}}

Page 30: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

30 17-214

Benefitsofinheritance

•  Reuseofcode•  Modelingflexibility

Page 31: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

31 17-214

Inheritanceandsubtyping

•  Inheritanceisforpolymorphismandcodereuse–  Writecodeonceandonlyonce–  Superclassfeaturesimplicitlyavailablein

subclass

•  Subtypingisforpolymorphism–  Accessingobjectsthesameway,butgetting

differentbehavior–  Subtypeissubstitutableforsupertype

classAextendsB

classAimplementsBclassAextendsB

Page 32: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

32 17-214

Typicalrolesforinterfacesandclasses

•  Aninterfacedefinesexpectations/commitmentsforclients•  Aclassfulfillstheexpectationsofaninterface

–  Anabstractclassisaconvenienthybrid–  Asubclassspecializesaclass'simplementation

Page 33: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

33 17-214

Javadetails:extendedreusewithsuper

publicabstractclassAbstractAccountimplementsAccount{protectedlongbalance=0;publicbooleanwithdraw(longamount){//withdrawsmoneyfromaccount(codenotshown)}

}publicclassExpensiveCheckingAccountImpl extendsAbstractAccountimplementsCheckingAccount{publicbooleanwithdraw(longamount){ balance-=HUGE_ATM_FEE; booleansuccess=super.withdraw(amount) if(!success) balance+=HUGE_ATM_FEE; returnsuccess;}

}

Overrideswithdrawbutalsousesthesuperclasswithdrawmethod

Page 34: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

34 17-214

Javadetails:constructorswiththisandsuper

publicclassCheckingAccountImpl extendsAbstractAccountimplementsCheckingAccount{

privatelongfee;

publicCheckingAccountImpl(longinitialBalance,longfee){ super(initialBalance); this.fee=fee;}

publicCheckingAccountImpl(longinitialBalance){ this(initialBalance,500);}/*othermethods…*/} Invokesanother

constructorinthissameclass

Invokesaconstructorofthesuperclass.Mustbethe

firststatementoftheconstructor.

Page 35: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

35 17-214

Javadetails:final

•  Afinalfield:preventsreassignmenttothefieldafterinitialization

•  Afinalmethod:preventsoverridingthemethod•  Afinalclass:preventsextendingtheclass

–  e.g.,publicfinalclassCheckingAccountImpl{…

Page 36: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

36 17-214

Note:type-castinginJava

•  Sometimesyouwantadifferenttypethanyouhave–  e.g., doublepi=3.14; intindianaPi=(int)pi;

•  Usefulifyouknowyouhaveamorespecificsubtype:–  e.g., Accountacct=…;CheckingAccountcheckingAcct=(CheckingAccount)acct;longfee=checkingAcct.getFee();–  WillgetaClassCastExceptioniftypesareincompatible

•  Advice:avoiddowncastingtypes–  Never(?)downcastwithinsuperclasstoasubclass

Page 37: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

37 17-214

Note:instanceof

•  OperatorthattestswhetheranobjectisofagivenclasspublicvoiddoSomething(Accountacct){longadj=0;if(acctinstanceofCheckingAccount){checkingAcct=(CheckingAccount)acct;adj=checkingAcct.getFee();

}elseif(acctinstanceofSavingsAccount){savingsAcct=(SavingsAccount)acct;adj=savingsAcct.getInterest();

}…}

•  Advice:avoidinstanceofifpossible–  Never(?)useinstanceofinasuperclasstochecktypeagainstsubclass

Warning: This code is bad.

Page 38: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

38 17-214

Delegationvs.inheritancesummary

•  Inheritancecanimprovemodelingflexibility•  Usually,favorcomposition/delegationoverinheritance

–  Inheritanceviolatesinformationhiding–  Delegationsupportsinformationhiding

•  Designanddocumentforinheritance,orprohibitit–  Documentrequirementsforoverridinganymethod

Page 39: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

39 17-214

Today

•  Designforreuse:delegationandinheritance–  Java-specificdetailsforinheritance

•  Anexerciseinequality

Page 40: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

40 17-214

AnObjectmethodexercise

Provideallcodeneededforareasonableequalsmethod:publicfinalclassName{privatefinalStringfirst,last;publicName(Stringfirst,Stringlast){if(first==null||last==null)thrownewNullPointerException();this.first=first;this.last=last;}…}

Page 41: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

41 17-214

Whatdoesthefollowingcodeprint?

publicfinalclassName{privatefinalStringfirst,last;publicName(Stringfirst,Stringlast){if(first==null||last==null)thrownewNullPointerException();this.first=first;this.last=last;publicbooleanequals(Nameo){returnfirst.equals(o.first)&&last.equals(o.last);}publicinthashCode(){return31*first.hashCode()+last.hashCode();}publicstaticvoidmain(String[]args){Set<Name>s=newHashSet<>();s.add(newName("Mickey","Mouse"));System.out.println(s.contains(newName("Mickey","Mouse")));}}

(a)true(b)false(c)Itvaries(d)Noneoftheabove

Page 42: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

42 17-214

Whatdoesitprint?

(a)true(b)false(c)Itvaries(d)Noneoftheabove TheNameclassoverrideshashCodebutnotequals!ThetwoNameinstancesarethusunequal.

Page 43: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

43 17-214

Object.equalshasnotbeenoverridden

publicfinalclassName{privatefinalStringfirst,last;publicName(Stringfirst,Stringlast){if(first==null||last==null)thrownewNullPointerException();this.first=first;this.last=last;publicbooleanequals(Nameo){//Accidentaloverloadingreturnfirst.equals(o.first)&&last.equals(o.last);}publicinthashCode(){return31*first.hashCode()+last.hashCode();}publicstaticvoidmain(String[]args){Set<Name>s=newHashSet<>();s.add(newName("Mickey","Mouse"));System.out.println(s.contains(newName("Mickey","Mouse")));}}

Page 44: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

44 17-214

Javadetails:Dynamicmethoddispatch

1.  (Compiletime)Determinewhichclasstolookin2.  (Compiletime)Determinemethodsignaturetobeexecuted

1.  Findallaccessible,applicablemethods2.  Selectmostspecificmatchingmethod

Page 45: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

45 17-214

Javadetails:Dynamicmethoddispatch

1.  (Compiletime)Determinewhichclasstolookin2.  (Compiletime)Determinemethodsignaturetobeexecuted

1.  Findallaccessible,applicablemethods2.  Selectmostspecificmatchingmethod

3.  (Runtime)Determinedynamicclassofthereceiver4.  (Runtime)Fromdynamicclass,locatemethodtoinvoke

1.  Lookformethodwiththesamesignaturefoundinstep22.  Otherwisesearchinsuperclassandetc.

Page 46: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

46 17-214

Acorrectequalsimplementation

@Overridepublicbooleanequals(Objecto){if(!(oinstanceofName))returnfalse;Namen=(Name)o;returnn.first.equals(first)&&n.last.equals(last);}

Page 47: Principles of Software Construction: Objects, Design, and …€¦ · 10-09-2019  · Implementation inheritance for code reuse protected elements are visible in subclasses an abstract

47 17-214

Thelesson

•  AlwaysoverridehashCodeiffyouoverrideequals•  Alwaysuse@Overrideifyouintendtooverrideamethod

–  orletyourIDEgeneratethesemethodsforyou…