83
Writing a Fraction Class
!"#$%&#'(#)%*(#'"&+(,#'-.)#/"%01234"-1.#1567(&8#75.#9"645.(&8#
8."&(#7-1%&:#*%;5(8<#8"#1".#%;;#&(%;#1567(&8#9%1#7(#&(4&(8(1.(,#
4&(9-8(;:#
=1#%44;-9%0"18#')(&(#.)(#4&(9-8-"1#"$#&(%;#1567(&8#-8#-64"&.%1.<#'(#
9%1#58(#ra#onal'numbers'."#8."&(#(>%9.#*%;5(8##
?)-8#)(;48#."#&(,59(#"&#(;-6-1%.(#&"51,3"@#(&&"&8#.)%.#9%1#"995&#
')(1#4(&$"&6-12#%&-.)6(09#"4(&%0"18#
A#&%0"1%;#1567(&#-8#%#1567(&#.)%.#9%1#7(#(>4&(88(,#%8#%#&%0" #"$#
.'"#-1.(2(&8B#CDE#
?)(#."4#*%;5(#-8#9%;;(,#.)(#numerator'%1,#.)(#7"F"6#*%;5(<#')-9)#
9%11".#7(#G(&"<#-8#9%;;(,#.)(#denominator#
11/4/16
84
Designing the Fraction Class
H(#'%1.#."#58(#"5&#&%0"1%;#1567(&8#%8#'(#'"5;,#58(#-1.(2(&8#%1,#
/"%012#4"-1.#*%;5(8#
?)58<#"5&#!"#$%&'(#9;%88#658.#4(&$"&6#.)(#$";;"'-12#"4(&%0"18B#
IJ K&(%.(#%#&%0"1%;#1567(&#
LJ A99(88#.)(#156(&%."&#%1,#,(1"6-1%."&#*%;5(8<#-1,-*-,5%;;:#
MJ N(.(&6-1(#-$#.)(#&%0"1%;#1567(&#-8#1(2%0*(#"&#G(&"#
OJ P(&$"&6#1"&6%;#6%.)(6%09%;#"4(&%0"18#"1#.'"#&%0"1%;#
1567(&8#Q%,,-0"1<#857.&%90"1<#65;04;-9%0"1<#,-*-8-"1<#
(>4"1(10%0"1R#
SJ T"2-9%;;:#9"64%&(#.'"#&%0"1%;#1567(&8#
UJ P&",59(#%#8.&-12#&(4&(8(1.%0"1#"$#.)(#&%0"1%;#1567(&#
?)(#"7V(9.8#"$#.)(#W&%90"1#9;%88#'-;;#7(#immutable#7(9%58(#1"1(#"$#
.)(#"4(&%0"18#6",-$:#.)(#"7V(9.8X#-18.%19(#*%&-%7;(8#
11/4/16
85
Required Data Attributes
Y(9%58(#%#&%0"1 %;#1 567(&#9"18-8.8#"$#.'"#-1.(2(&8<#'(#1((,#.'"#
-18.%19(#*%&-%7;(8#."#8."&(#.)"8(#*%;5(8B#
)*+,-.(/0*"#%'"12131
)*+,-.4*('0&(#%'"12151
11/4/16
A.#1"#06(#8)"5;,#.)(#&%0"1%;#1567(&#7(#9"1*(&.(,#."#%#/"%01234"-1.#
*%;5(#"&#'(#'-;;#;"8(#.)(#4&(9-8-"1#2%-1(,#$&"6#'"&+-12#'-.)#&%0"1%;#
1567(&8#
86
Representing Values Equivalently
!-21(,#*%;5(8#
Z(2%0*(#%1,#4"8-0*(#&%0"1%;#1567(&8#(%9)#)%*(#.'"#$"&68#.)%.#
9%1#7(#58(,#."#84(9-$:#.)(#9"&&(84"1,-12#*%;5(#
P"8-0*(#*%;5(8#9%1#7(#-1,-9%.(,#%8#1/2 or –1/–2<#%1,#1(2%0*(#*%;5(8#
%8#–2/5 or 2/–5#
H)(1#4(&$"&6-12#%1#%&-.)6(09#"4(&%0"1#"&#;"2-9%;;:#9"64%&-12#
.'"#&%0"1%; #15 67(&8<#-.#'-;;#7(#659)#(%8-(&#-$#'(#)%*(#%#8-12;(#'%:#
."#&(4&(8(1.#%#1(2%0*(#*%;5(#
W"&#8-64;-9-.:<#'(#9)""8(#."#8(.#"1;:#.)(#156(&%."&#."#%#1(2%0*(#
*%;5(#')(1#.)(#&%0"1%;#1567(&#-8#1(2%0*(<#%1,#7".)#.)(#156(&%."&#
%1,#,(1"6-1%."&#'-;;#7(#4"8-0*(#-1.(2(&8#')(1#.)(#&%0"1%;#1567(&#
-8#4"8-0*(##
11/4/16
87
Representing Values Equivalently
[\5-*%;(1.#$&%90"18#
W"&#(>%64;(<#IDO#9%1#7(#'&-F(1#%8#IDO<#LDE<#IUDUO<#"&#ILMDO]L#
=.#'-;;#7(#659)#(%8-(&#."#4(&$" &6#.)(#"4(&%0"1#-$#.)(#1567(&#-8#
8."&(,#-1#&(,59(,#$"&6#
11/4/16
88
The Constructor (1)
Y(9%58(#!"#$%&'(#"7V(9.8#%&(#-665.%7;(<#.)(-&#*%;5(8#658.#7(#8(.#
')(1#.)(:#%&(#9&(%.(,J#?)-8#&(\5-&(8#4%&%6(.(&#*%&-%7;(8#$"&#7".)#.)(#
156(&%."&#%1,#,(1"6-1%."&#
4*,1.1.&(&%.1.6)*+,71(/0*"#%'"714*('0&(#%'"8191
11/4/16
?)(#6(.)",#658.#9)(9+#$"&#84(9-%;#9%8(8B##
^(&"#,(1"6-1%."&8#
?)(#1567(&#&(4&(8(1.8#G(&"#"&#%#1(2%0*(#1567(&#
89
The Constructor
4*,1.1.&(&%.1.6)*+,71(/0*"#%'"1213714*('0&(#%'"12158191
1111&,14*('0&(#%'"12213191
11111111"#&)*1:*"';&<&)&'(=""'"6>;*('0&(#%'"1$#(('%1?*1@*"'->81
1111&,1(/0*"#%'"12213191
11111111)*+,-.(/0*"#%'"12131
11111111)*+,-.4*('0&(#%'"12151
1111*+)*191
11111111&,16(/0*"#%'"1A131#(414*('0&(#%'"1B2131'"1
111111111111(/0*"#%'"1B2131#(414*('0&(#%'"1A138191
11111111111)&C(121D51
11111111*+)*191
11111111111)&C(12151
11/4/16
90
The Constructor
1111#121#?)6(/0*"#%'"81
1111?121#?)64*('0&(#%'"81
1111EF&+*1#1G1?1H213191
11111111%*0IJ121#1
11111111%*0IK121?1
11111111#121%*0IK1
11111111?121%*0IJ1G1%*0IK1
1111)*+,-.(/0*"#%'"121#?)6(/0*"#%'"81111111L1?1M1)&C(1
1111)*+,-.4*('0&(#%'"121#?)64*('0&(#%'"8111L?1
11/4/16
91
Testing the Constructor
,"#$5121!"#$%&'(6571N81L1O%'"*41#)15PN1
,"#$Q121!"#$%&'(6DQ71DR81L1O%'"*41#)15PQ1
,"#$S121!"#$%&'(6DQ71R81L1O%'"*41#)1D5PQ1
,"#$R121!"#$%&'(6S71DT81L1O%'"*41#)1DSPT1
,"#$U121!"#$%&'(63715U81L1O%'"*41#)13P51
,"#$V121!"#$%&'(6N71381L1=""'"H1*W$*I%&'(1&)1"#&)*4-1
11/4/16
92
Comparing Fractions (1)
=1#P:.)"1<#'(#9%1#,(_1(#%1,#-64;(6(1.#6(.)",8#.)%.#'-;;#7(#9%;;(,#
%5."6%09%;;:#')(1#%#8.%1,%&,#P: .)" 1#" 4(&%."&#QX<#M<#22<#AR#-8#%44;-(,#
."#%1#-18.%19(#"$#.)(#9;%88#
W"&#(>%64;(<#."#.(8.#')(.)(&#.'"#$&%90"18#%&(#(\5%;<#'(#9"5;,#
-64;(6(1.#%#6(.)",B#
&)*Y/#+681%1,#58(#-.#%8#$";;"'8B#
&,1,"#$5-&)*Y/#+6,"#$Q8191
1111I"&(%6>ZF*1,"#$%&'()1#"*1*Y/#+->81
11/4/16
93
Comparing Fractions (2)
1
A5."6%09%;;:#9%;;8#.)-8#6(.)",#')(1#'(#9"64%&(#.'"#!"#$%&'(#
"7V(9.8#58-12#.)(#22#"4(&%."&B1
4*,1.1.*Y.1.6)*+,71"F)[#+/*8191
1111"*%/"(16)*+,-.(/0*"#%'"1221"F)[#+/*-(/0*"#%'"1#(41
111111111111)*+,-.4*('0&(#%'"1221"F)[#+/*-4*('0&(#%'"81
&,1,"#$51221,"#$Q191L1\#++)1,"#$5-.1.*Y.1.6,"#$Q81
1111I"&(%6>ZF*1,"#$%&'()1#"*1*Y/#+->81
11/4/16
`$#9"5&8(<#'(#'"5;,#4&($(&#."#58(#.)(#"4(&%."&#aa#
?)-8#-8#%9)-(*(,#7:#,(_1-12#.)(#84(9-%;#6(.)",B#1
1.1.*Y.1.6891
1
94
Special Methods
?)(1#.)(#.1.,+'#%.1.68#84(9-%;#6(.)",#-8#9%;;(,J#
b(&(#-8#%#,(_1-0"1#"$#.)%.#6(.)",B#
W121,+'#%6,"#$581
4*,1.1.,+'#%.1.6)*+,8191
1111"*%/"(1)*+,-.(/0*"#%'"1P1)*+,-.4*('0&(#%'"1
11/4/16
!"6(#84(9-%;#6(.)",8#%&(#9%;;(,#')(1#%1#-18.%19(#"$#.)(#9;%88#-8#
4%88(,#."#%#75-;.3-1#$5190"1J#W"&#(>%64;(<#8544"8(#:"5#%F(64.#."#
9"1*(&.#%#!"#$%&'(#"7V(9.#."#%#/"%012#4"-1.#1567(&#58-12#.)(#
,+'#%68#$5190"1B#
95
Common Special Methods
11/4/16
96
Common Special Methods
11/4/16
97
Addition of Fractions
A;;#"$#.)(#%&-.)6(09#"4(&%0"18#.)%.#9%1#7(#4(&$"&6(,#"1#%#!"#$%&'(#
"7V(9.#8)"5;,#&(.5&1#.)(#&(85;.#-1#%#1('#!"#$%&'(#"7V(9.#
W"&#(>%64;(<#')(1#.)(#8.%.(6(1.#7(;"'#-8#(>(95.(,<#,"#$5#8)"5;,#7(#
%,,(,#."#,"#$Q#%1,#.)(#&(85;.#&(.5&1(,#%8#%#1('#!"#$%&'(#"7V(9.#.)%.#
-8#%88-21(,#."#.)(#(*E!"#9#*%&-%7;(#
(*E!"#$121,"#$51X1,"#$Q1
11/4/16
98
Fractional Addition
W&"6#(;(6(1.%&:#%&-.)6(09<#:"5#+1"'#.)%.#.'"#$&%90"18#658.#)%*(#%#
9"66"1#,(1"6-1%."&#-1#"&,(&#."#%,,#.)(6J#=$#.)(:#,"#1".#)%*(#%#
9"66"1#,(1"6-1%."&<#'(#9%1#80;;#%,,#.)(6#58-12#.)(#$"&65;%B#
11/4/16
99
Defining the Method For Addition
4*,1.1.#44.1.6)*+,71"F)[#+/*8191
1111(/01216)*+,-.(/0*"#%'"1M1"F)[#+/*-.4*('0&(#%'"1X1
1111111)*+,-.4*('0&(#%'"1M1"F)[#+/*-.(/0*"#%'"81
11114*(121)*+,-.4*('0&(#%'"1M1"F)[#+/*-.4*('0&(#%'"1
1111"*%/"(1!"#$%&'(6(/0714*(81
11/4/16
100
Logic: Less Than
Z".(#.)%.#a / b < c / d'')(1#d · a < b · cJ#Qc5;04;:#7".)#8-,(8#'-.)#b ·
dJR#
Y%8(,#"1#.)-8#"78(&*%0"1<#.)(#;(88#.)%1#"4(&%0"1#-8#-64;(6(1.(,#7:#
.)(#.1.+%.1.6816(.)",#%8#$";;"'8B#
4*,1.1.+%.1.6)*+,71"F)[#+/*8191
1111"*%/"(16)*+,-.(/0*"#%'"1M1"F)[#+/*-.4*('0&(#%'"1111111111111111
111111111111)*+,-.4*('0&(#%'"1M1"F)[#+/*-.(/0*"#%'"81
11/4/16
101
!"#$%&'(-I]1
11/4/16
102
!"#$%&'(-I]1
11/4/16
103
!"#$%&'(-I]1
11/4/16
104
!"#$%&'(-I]
11/4/16
105
Checking Type
?"#(185&(#.)%.#*%&-%7;(8#%&(#.)(#9"&&(9.#.:4(<#P:.)"1#4&"*-,(8#.)(#
75-;.3-1#&)&()%#($*68#$5190"1#.)%.#9%1#7(#58(,#."#9)(9+#.)(#.:4(#"$#
"7V(9.#&($(&(19(,#7:#%#*%&-%7;(J#
W"&#(>%64;(<#.)(#9"18.&59."&#$"&#.)(#!"#$%&'(#9;%88#&(\5-&(8#.'"#
-1.(2(&8#
$+#))1!"#$%&'(191
11114*,1.1.&(&%.1.6)*+,71(/0*"#%'"714*('0&(#%'"8191
11111111&,16('%1&)&()%#($*6(/0*"#%'"71&(%81'"1
111111111111('%1&)&()%#($*64*('0&(#%'"71&(%88191
11111111111"#&)*1Z]I*=""'"1
111111111111116>ZF*1(/0*"#%'"1#(414*('0&(#%'"10/)%1?*1&(%*C*")->81
11/4/16
106
Summary: Classes and Objects
A#9;%88#,(89&-7(8#%#8(.#"$#"7V(9.8#'-.)#.)(#8%6(#7()%*-"&#
[*(&:#9;%88#)%8#%#457;-9#-1.(&$%9(B#%#9";;(90"1#"$#6(.)",8#.)&"52)#
')-9)#.)(#"7V(9.8#"$#.)(#9;%88#9%1#7(#6%1-45;%.(,#
[19%485;%0"1#-8#.)(#%9.#"$#4&"*-,-12#%#457;-9#-1.(&$%9(#%1,#)-,-12#
.)(#-64;(6(1.%0"1#,(.%-;8#
[19%485;%0"1#(1%7;(8#9)%12(8#-1#.)(#-64;(6(1.%0"1#'-.)"5.#
%@(9012#58(&8#"$#%#9;%88#
11/4/16
107
Summary: Variables and Methods
A1#"7V(9.X8#-18.%19(#*%&-%7;(8#8."&(#.)(#,%.%#&(\5-&(,#$"&#(>(95012#-.8#
6(.)",8#
[%9)#"7V(9.#"$#%#9;%88#)%8#-.8#"'1#8(.#"$#-18.%19(#*%&-%7;(8#
A1#-18.%19(#6(.)",#9%1#%99(88#.)(#-18.%19(#*%&-%7;(8#"$#.)(#"7V(9.#"1#
')-9)#-.#%9.8#
A#4&-*%.(#-18.%19(#*%&-%7;(#8)"5;,#"1;:#7(#%99(88(,#7:#.)(#6(.)",8#"$#
-.8#"'1#9;%88#
K;%88#*%&-%7;(8#)%*(#%#8-12;(#9"4:#"$#.)(#*%&-%7;(#8)%&(,#%6"12#%;;#"$#
.)(#-18.%19(8#"$#.)(#9;%88#
11/4/16
108
Summary: Method Headers, Data
c(.)",#b(%,(&8#
d"5#9%1#58(#6(.)",#)(%,(&8#%1,#6(.)",#9"66(1.8#."#84(9-$:#.)(#
457;-9#-1.(&$%9(#"$#%#9;%88#
A#65.%."&#6(.)",#9)%12(8#.)(#"7V(9.#"1#')-9)#-.#"4(&%.(8#
A1#%99(88"&#6(.)",#,"(8#1".#9)%12(#.)(#"7V(9.#"1#')-9)#-.#
"4(&%.(8#
N%.%#e(4&(8(1.%0"1#
W"&#(%9)#%99(88"&#6(.)",<#%1#"7V(9.#658.#(-.)(&#8."&(#"&#9"645.(#
.)(#&(85;.#
K"66"1;:<#.)(&(#-8#6"&(#.)%1#"1(#'%:#"$#&(4&(8(1012#.)(#,%.%#"$#
%1#"7V(9.<#%1,#:"5#658.#6%+(#%#9)"-9(#
Y(#85&(#.)%.#:"5&#,%.%#&(4&(8(1.%0"1#8544"&.8#6(.)",#9%;;8#-1#%1:#
"&,(&#
11/4/16
109
Summary: Constructors
A#9"18.&59."&#-1-0%;-G(8#.)(#"7V(9.X8#-18.%19(#*%&-%7;(8##
A#9"18.&59."&#-8#-1*"+(,#')(1#%1#"7V (9.#-8#9&(%.(,#
?)(#9"18.&59."&#-8#,(_1(,#58-12#.)(#84(9-%;#6(.)",#1%6(B#.1.&(&%.1
.68#
N($%5;.#%&256(1.8#9%1#7(#58(,#'-.)#%#9"18.&59."&#."#4&"*-,(#,-@(&(1.#
'%:8#"$#9&(%012#%1#"7V(9.#
11/4/16
110
Summary: Method Implementation
?)(#"7V(9.#"1#')-9)#%#6(.)",#-8#%44;-(,#-8#%5."6%09%;;:#4%88(,#."#.)(#
)*+,#4%&%6(.(&#*%&-%7;(#"$#.)(#6(.)",#
=1#%#6(.)",<#:"5#%99(88#-18.%19(#*%&-%7;(8#.)&"52)#.)(#)*+,#
4%&%6(.(&#*%&-%7;(#
11/4/16
111
Summary: Testing Classes
A#51-.#.(8.#*(&-_(8#.)%.#%#9;%88#'"&+8#9"&&(9.;:#-1#-8";%0"1<#"5.8-,(#%#
9"64;(.(#4&"2&%6#
?"#.(8.#%#9;%88<#58(#%1#(1*-&"16(1.#$"&#-1.(&%90*(#.(8012<#"&#'&-.(#%#
.(8.(&#9;%88#."#(>(95.(#.(8.#-18.&590"18#
N(.(&6-1-12#.)(#(>4(9.(,#&(85;.#-1#%,*%19(#-8#%1#-64"&.%1.#4%&.#"$#
.(8012#
11/4/16
112
Summary: Object Tracing
`7V(9.#.&%9-12#-8#58(,#."#*-85%;-G(#"7V(9.#7()%*-"&#
H&-.(#.)(#6(.)",8#"1#.)(#$&"1.#"$#%#9%&,<#%1,#.)(#-18.%19(#*%&-%7;(8#
"1#.)(#7%9+#
f4,%.(#.)(#*%;5(8#"$#.)(#-18.%19(#*%&-%7;(8#')(1#%#65.%."&#6(.)",#-8#
9%;;(,#
11/4/16
113
Summary: Patterns for Classes
A1#-18.%19(#*%&-%7;(#$"&#.)(#.".%;#-8#54,%.(,#-1#6(.)",8#.)%.#-19&(%8(#
"&#,(9&(%8(#.)(#.".%;#%6"51.#
A#9"51.(&#.)%.#9"51.8#(*(1.8#-8#-19&(6(1.(,#-1#6(.)",8#.)%.#
9"&&(84"1,#."#.)(#(*(1.8#
A1#"7V(9.#9%1#9";;(9.#".)(&#"7V(9.8#-1#%#;-8.#
A1#"7V(9.#4&"4(&.:#9%1#7(#%99(88(,#'-.)#%#2(F(&#6(.)",#%1,#9)%12(,#
'-.)#%#8(F(&#6(.)",#
=$#:"5&#"7V(9.#9%1#)%*(#"1(#"$#8(*(&%;#8.%.(8#.)%.#%@(9.#.)(#7()%*-"&<#
8544;:#%1#-18.%19(#*%&-%7;(#$"&#.)(#95&&(1.#8.%.(#
11/4/16
114
Summary: Patterns for Classes
?"#6",(;#%#6"*-12#"7V(9.<#:"5#1((,#."#8."&(#%1,#54,%.(#-.8#4"8-0"1#
11/4/16
115
Summary: Object References
A1#"7V(9.#&($(&(19(#84(9-_(8#.)(#;"9%0"1#"$#%1#"7V(9.#
c5;04;(#"7V(9.#*%&-%7;(8#9%1#9"1.%-1#&($(&(19(8#."#.)(#8%6(#"7V(9.#
f8(#.)(#&)#%1,#&)1('%1"4(&%."&8#."#.(8.#')(.)(&#.'"#*%&-%7;(8#%&(#
%;-%8(8#
?)(#^'((#&($(&(19(#&($(&8#."#1"#"7V(9.#
11/4/16
116
Summary: Defining Special Methods
?"#58(#%#8.%1,%&,#"4(&%."&#'-.)#"7V(9.8<#,(_1(#.)(#9"&&(84"1,-12#
84(9-%;#6(.)",#
N(_1(#.)(#84(9-%;#.1."*I".1.68#6(.)",#."#9&(%.(#%#8.&-12#
&(4&(8(1.%0"1#"$#%1#"7V(9.#
11/4/16