מונחה עצמים- תרגול 3 | c.ctors, const objects, composition vs. aggregation
TRANSCRIPT
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
1/38
Ehmcit Ex`cgtcd Rxeoxnll`goT`xosj 9
Ijnyycy ielrey`t`eg
Ierp Iegytxsitexy
Iegyt ehmcity
Ielrey`t`eg qy' Nooxcont`eg
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
2/38
=,X8'
'
=
8)8'&
)&:v*p7'
:v>*p>7
:v8*p87
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
3/38
(%% j`gc>'f
) agdca UJ@GCU>UF
)dca`gc UJ@GCU>UF
)`gijsdc :`eytxcnl7
sy`go gnlcyrnic ytd;
ijnyy J`gc> {
rx`qntc=
`gt lUv>*lUp>*lUv8*lUp8;
`gt lUiejex;
rshj`i=
J`gc>&`gt i* `gt v>* `gt p>* `gt v8* `gt p8;
qe`d rx`gt&;
|;
)cgd`a %% UJ@GCU>UF
%% j`gc>'irr
)`gijsdc (j`gc>'f(
J`gc>==J`gc>&`gt i* `gt v>* `gt p>* `gt v8* `gt p8 {
lUiejex;lUp>
;
lUv8 :: (7
:: ( :( :: lUv8 :: (*( :: lUp8 :: (7
:: cgdj;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
4/38
==
'>)v>
&):v*p7&'8)/rx`gt&
'9)*
&'''4)`gt&'
,deshjc)
j`gc&
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
5/38
=Re`gt%% re`gt8'f
) agdca URE@GT8UF
)dca`gc URE@GT8UF
)`gijsdc :`eytxcnl7
sy`go gnlcyrnic ytd;
ijnyy Re`gt8 {
rx`qntc=
`gt lUv* lUp;
rshj`i=Re`gt8&`gt v* `gt p;
qe`d rx`gt&;
|;
)cgd`a %% URE@GT8UF
%% re`gt8'irr
)`gijsdc (re`gt8'f(
Re`gt8==Re`gt8&`gt v* `gt p {
lUv
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
6/38
j`gc8%% j`gc8'f
)`agdca UJ@GCU8UF
)dca`gc UJ@GCU8UF
)`gijsdc (re`gt8'f(
)`gijsdc :`eytxcnl7
sy`go gnlcyrnic ytd;
ijnyy J`gc8 {
rx`qntc=
`gt lUiejex;
Re`gt8 lUr>* lUr8;
rshj`i=
J`gc8&`gt i* `gt v>* `gt p>* `gt v8* `gt p8;
qe`d rx`gt&;
|;
)cgd`a %% UJ@GCU8UF
%% j`gc8'irr
)`gijsdc (j`gc8'f(
J`gc8==J`gc8&`gt i* `gt v>* `gt p>* `gt v8* `gt p8 =
lUr>&v>*p>) * lUr8&v8*p8) {
lUiejex
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
7/38
,iegytxsitex==
J`gc8==J`gc8&`gt i* gt v>* `gt p>* `gt v8* `gt p8 = lUr>&v>*p> * lUr8&v8*p8
{
lUiejex,lUr8j`gc'& 'lUr>(lUr8)
dntn lclhcxyJ`gc8&
lUiejex)*',dcytxsitex=J`gc8*
lUr8,lUr>'
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
8/38
==
'>):v*p7&
'8)/rx`gt&
'9)*&''
'4)`gt,:deshjc&)&j`gc
=
'>Re`gt
J`gc*'
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
9/38
=Re`gt8
%% j`gc9'irr)`gijsdc (j`gc9'f
qe`d J`gc9==Re`gt9==rx`gt& {iest :: ( :( :: lUv :: (*( :: lUp :: (7 Zg;
|
qe`d J`gc9==rx`gt& {
iest :: ( iejex'rx`gt&;
iest :: ( r8* lUr8;
rshj`i=
J`gc9&`gt i* `gt v>* `gt p>* `gt v8* `gt p8
= lUr>&v>*p> * lUr8&v8*p8 {
lUiejex < i;
|qe`d rx`gt&;
|;
)cgd`a %% UJ@GCU9UF
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
10/38
==
Re`gt9J`gc9)
Re`gt9
J`gc9&
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
11/38
)`gijsdc (j`gc9'f(`gt ln`g& {
J`gc9 j9&2*>*8*9*4;
j9'rx`gt&;
j9'r>'rx`gt&; %% CXXEX
Re`gt9 r9&>*8; %% CXXEX
r9'rx`gt&; %% CXXEX
xctsxg 2;|
Re`gt Iegytxsitex :>*87
Re`gt Iegytxsitex :9*47
J`gc Iegytxsitex*
iejex< :>*87*
r8< :9*47
iejex< :>*87 r8< :9*47
J`gc Dcytxsitex*
iejex< :>*87*
r8< :9*47
Re`gt Dcytxsitex :9*47
Re`gt Dcytxsitex :>*87
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
12/38
Ierp Iegytxsitex
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
13/38
%% Clrjepcc'irr
)`gijsdc (Clrjepcc'f
Clrjepcc==Clrjepcc& gt @D* iegyt ifnx -gnlc{%% Itex
iest :: (Iegytxsitex injjcd( :: cgdj;
lU@D < `@D;
lUgnlc < gcw ifnx [ytxjcg&gnlc +>\;
ytxirp&lUgnlc* gnlc;
Rx`gt&;
|
qe`d Clrjepcc==Rx`gt& { %% Rx`gt
iest :: (@D= ( :: lU@D :: (*Gnlc= :: lUgnlc
:: ( *Nddxcyy&re`gtcx=2v( :: fcv :: &`gt lUgnlc:: cgdj;
|Clrjepcc==Clrjepcc& {%% Dtex
iest :: (Dcytxsitex injjcd(::cgdj;
Rx`gt&;
dcjctc [\ lUgnlc;
lUgnlc
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
14/38
Estrst=
Iegytxsitex injjcd
@D= 9*Gnlc=Leyf`ke *Nddxcyy&re`gtcx=2v619>42
Iegytxsitex injjcd
@D= 3*Gnlc=Pey`asg *Nddxcyy&re`gtcx=2v619864
@D= 9*Gnlc=Leyf`ke *Nddxcyy&re`gtcx=2v619>42
@D= 3*Gnlc=Pey`asg *Nddxcyy&re`gtcx=2v619864
Dcytxsitex injjcd
@D= 3*Gnlc=Pey`asg *Nddxcyy&re`gtcx=2v619864
Dcytxsitex injjcd
@D= 9*Gnlc=Leyf`ke *Nddxcyy&re`gtcx=2v619>42
`gt ln`g&
{Clrjepcc clr>&9* (Leyf`ke(;
Clrjepcc clr8&3* (Pey`asg(;
clr>'Rx`gt&;
clr8'Rx`gt&;
xctsxg 2;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
15/38
Estrst=
Iegytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx)=2v619>04
`g LpAsgi
Dcytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx)=2v619>04
@g tfc cgd ea ln`g
Dcytxsitex injjcd@D= >*Gnlc= *Nddxcyy&re`gtcx)=2v619>04
qe`d LpAsgi&Clrjepcc clr {
iest :: (`g LpAsgi Zg (;
|
`gt ln`g&
{Clrjepcc Egc&>*(Cj` Xnifnl`l(;
%% injj`go ierp iegytxsitex
LpAsgi&Egc;
iest:: (@g tfc cgd ea ln`g Zg;
%% Fcxc tfc rxeoxnl ixnyfcy.
xctsxg 2;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
16/38
%% Clrjepcc'irr
%% Ierp iegytxsitex
Clrjepcc==Clrjepcc&iegyt Clrjepcc ! Clr {
iest :: (Ierp Iegytxsitex injjcd( :: cgdj;
lU@D < Clr'lU@D;
lUgnlc
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
17/38
Estrst=
Iegytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx=2v619>42
Ierp Iegytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx=2v619866
`g LpAsgi
Dcytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx=2v619866
@g tfc cgd ea ln`g
Dcytxsitex injjcd
@D= >*Gnlc=Cj` Xnifnl`l *Nddxcyy&re`gtcx=2v619>42
qe`d LpAsgi&Clrjepcc clr {
iest :: (`g LpAsgi Zg (;
|
`gt ln`g&
{
Clrjepcc Egc&>*(Cj` Xnifnl`l(;
LpAsgi&Egc;
iest:: (@g tfc cgd ea ln`g Zg;
xctsxg 2;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
18/38
Ierp Iegytxsitex&I'Itex)
=
'>hp xcacxcgic)I'Itex)Dtex&&
'8,I'Itex,rx`qntc*'
*hp qnjsc'
*.
),I'Itex,rx`qntchpQnj
ijegc&
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
19/38
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
20/38
%%Re`gt'f
)`agdca URE@GTU
)dca`gc URE@GTU
)`gijsdc :`eytxcnl7
sy`go gnlcyrnic ytd;
ijnyy Re`gt
{
rx`qntc=
`gt lU`V* lU`P;
rshj`i=
Re`gt &`gt qnjV* `gt qnjP;
Re`gt &; %%dcytxsitex
qe`d Yfew &;
`gt OctV& { xctsxg lU`V; |
`gt OctP& { xctsxg lU`P; |
%%D`ytngic hctwccg 8 re`gty'
deshjc D`ytngic&Re`gt r>;
|;
)cgd`a
%%Re`gt'irr
)`gijsdc (re`gt'f(
)`gijsdc :lntf'f7
%% Injisjntcy tfc d`ytngic hctwccg tfc
%% twe re`gty'
deshjc Re`gt==D`ytngic&Re`gt r> {
xctsxg &y~xt& rew&lU`V,r>'lU`V*8
+ rew&lU`P,r>'lU`P*8;
|
qe`d Re`gt==Yfew &{
iest::(v
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
21/38
rshj`i=
I`xijc&; %% Dcansjt iegytxsitex%% @g`t`j`}nt`eg j`yt iegytxsitex
I`xijc&Re`gt IcgtcxRe`gt*`gt `Xnd`sy;
I`xijc& { %% Dcytxsitex
iest :: (i`xijc dcytxsitex(::cgdj;
Rx`gt&;|
Re`gt LeqcIcgtcx &iegyt Re`gt! GcwIcgtcx;
heej @y@gy`dc &iegyt Re`gt! Jeint`eg ;
heej @yEqcxjnr &iegyt I`xijc! GcwI`xijc;
qe`d Rx`gt&;|;
)cgd`a
%%I`xijc'f
)`agdca UI@XIJCU
)dca`gc UI@XIJCU
)`gijsdc (re`gt'f(
ijnyy I`xijc {
rx`qntc=
Re`gt lUIcgtcx;
`gt lU`Xnd`sy;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
22/38
%%I`xijc'irr
)`gijsdc (i`xijc'f(
)`gijsdc :lntf'f7
I`xijc==I`xijc& %% Dcansjt iegytxsitex
= lUIcgtcx&2*2* lU`Xnd`sy&> {
iest ::(I`xijc dcansjt iegytxsitexZg(;
Rx`gt&;
|
I`xijc==I`xijc&Re`gt icgtcxRe`gt* gt `Xnd`sy= lUIcgtcx&icgtcxRe`gt*
lU`Xnd`sy&`Xnd`sy {
iest :: (I`xijc `g`t j`yt iegytxsitexZg(;
Rx`gt&;
|Re`gt I`xijc==LeqcIcgtcx&iegyt Re`gt!
gcwIgtx {
Re`gt jnytIcgtcx
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
23/38
Estrst=
&>) I`xijc dcansjt iegytxsitex
&8) icgtcx=v) 2
&>8) OeedHpc=v8 p8
&>9) OeedHpc=v8 p8
&>4) OeedHpc=v
&>1) OeedHpc=v6) icgtcx=v'@yEqcxjnr&i8::cgdj;
i8'LeqcIcgtcx&r8;
iest ::i>'@yEqcxjnr&i8::cgdj;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
24/38
iegyt
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
25/38
iegyt=iegyt'
=rx`qntc=
iegyt `gt lUv* lUp;
rshj`i=
Re`gt&`gt v* `gt p {
lUv
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
26/38
iegyt=,iegytxsitexiegyt
,iegytxsitex=
ijnyy Re`gt {
rx`qntc=
iegyt `gt lUv* lUp;rshj`i=
Re`gt&`gt v* `gt p = lUv&v* lUp&p { |
|;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
27/38
Iegyt Lclhcx Qnx`nhjcy ! Asgit`egy
,iegyt
*=
/)rx`gt&iegyt
iegyt*,iegyt `gytngic*
'
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
28/38
%% A`jc= Ytx`go'f
ijnyy Ytx`go
{
rx`qntc=
ifnx- lUrYtx;
`gt lU`Jcgotf;
rshj`i=
Ytx`go&iegyt ifnx-;
ifnx- OctYtx&;
qe`d Xcqcxyc&;
%% xctsxgy tfc rey`t`eg ea tfc ifnx
%% ex ,> `a get aesgd`gt A`gd&ifnx iegyt;
|;
%% A`jc= Ytx`go'irr
Ytx`go==Ytx`go&iegyt ifnx- ytx {lU`Jcgotf < ytxjcg&ytx;
lUrYtx < gcw ifnx[lU`Jcgotf+>\;
ytxirp&lUrYtx*ytx;
|
`gt Ytx`go==A`gd&ifnx teUa`gd iegyt{ |
ifnx- Ytx`go==OctYtx& { xctsxg lUrYtx; |
qe`d Ytx`go==Xcqcxyc&) { |
qe`d Rx`gtQnxGnlc&Ytx`go ! qnxUytx
{ |
%% A`jc= ln`g'irr
qe`d ln`g& {
Ytx`go qnxUgnlc&(lUyGnlc(;
Rx`gtQnxGnlc&qnxUgnlc;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
29/38
/Rx`gtQnxGnlc'=
qe`d Rx`gtQnxGnlc&iegyt Ytx`go ! qnxUytx) {|'=
qe`d Rx`gtQnxGnlc&iegyt Ytx`go ! qnxUytx {
qnxUytx'OctYtx&;
|
=,iegyt
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
30/38
%% A`jc= Ytx`go'f
ijnyy Ytx`go
{
rx`qntc=
ifnx -lUrYtx;
`gt lU`Jcgotf;
rshj`i=
Ytx`go&iegyt ifnx-;
iegyt ifnx- OctYtx& iegyt;
ifnx ercxntex[\ &`gt iegyt;
ifnx! ercxntex[\ &`gt;qe`d Xcqcxyc&;
%% xctsxgy tfc rey`t`eg ea tfc ifnx
%% ex ,> `a get aesgd
`gt A`gd&ifnx iegyt;
|;
%% A`jc= Ytx go'irr
iegyt ifnx- Ytx`go==OctYtx& iegyt{ xctsxg lUrYtx; |
ifnx Ytx`go==ercxntex[\ &`gt rey iegyt{ |
ifnx! Ytx`go==ercxntex[\ &`gt rey) { |
qe`d Rx`gtQnxGnlc&iegyt Ytx`go! q iegyt
{
q'OctYtx&; %% gew `t `y EK
|
%% A`jc= ln`g'irrqe`d ln`g& {
Ytx`go qnxUgnlc&(lUyGnlc(;
Rx`gtQnxGnlc&qnxUgnlc;
|
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
31/38
Tclrexnxp Ehmcity
qe`d Rx`gtQnxGnlc&iegyt Ytx`go ! q {
'''
|
qe`d Rx`gtQnxGnlc&Ytx`go q {
'''
|
qe`d Rx`gtQnxGnlc&Ytx`go ! q {
'''
|'iegyt Ytx`go'
=iegyt Ytx`go
,Ytx`go!
=Rx`gtQnxGnlc&(lUyGnlc(
=iegyt Ytx`go'
/Rx`gtQnxGnlc
'hp qnjsc'
I'Itex
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
32/38
Iegyt Ehmcit Re`gtcx%% Clrjepcc'f
ijnyy Clrjepcc
{
rx`qntc=
Ytx`go lUyGnlc;iegyt Ytx`go -lUrHeyyGnlc;
rshj`i=
Clrjepcc&iegyt Ytx`go !gnlc*
iegyt Ytx`go -rHeyygnlc;qe`d Asgi&;
|;
%% Clrjepcc'irr
Clrjepcc==Clrjepcc&iegyt Ytx`go!
gnlc* iegyt Ytx`go- rHeyyGnlc
= lUyGnlc&gnlc {
lUrHeyyGnlc < rHeyyGnlc;|
qe`d Clrjepcc==Asgi&
{
%% '''lUrHeyyGnlc,7xcqcxyc&;
|=
iegyt&
xcqcxyc*iegyt
),iegyt
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
33/38
Ielrey`t`eg qy' Nooxcont`eg
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
34/38
Ielrey`t`eg qy' Nooxcont`eg
Ielrey`t`eg=wfcg egc ea tfc
ijnyy/y qnx`nhjc `y ng
ehmcit
ijnyy H {''''|;
ijnyy N {rx`qntc=
H h;
%%'''''
|;
Nooxcont`eg=wfcg egc ea tfc ijnyy/y
qnx`nhjc `y n re`gtcx te
ng ehmcit'
ijnyy H {''''|;
ijnyy N8 {rx`qntc=
H- h;
%%'''''
|;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
35/38
Ielrey`t`eg=
'>HN'
'8)=&
H)&'9
)dcjctc&''
'4=,ielrey`t`egH
)*
&
ijnyy H {''''|;ijnyy N {
rx`qntc=
H h;%%'''''
|;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
36/38
Ielrey`t`eg3')=&lclexp
dcaxnolcgtnt`egdpgnl`injjeint`eg,fcnr'
*
((,fcnr),d`yk dcaxnolcgtnt`eg'&
1')=&ielrey`t`eg
)&*8,re`gtcx',
rnoc ansjt'
ijnyy H {''''|;ijnyy N {
rx`qntc=
H h;%%'''''
|;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
37/38
Nooxcont`eg =
'>HN )'&=H
)**/&*
,)*
/*N&
'8)=&cvicrt`egH)
iegytxsitex
N&
ijnyy H {''''|;ijnyy N {
rx`qntc=
H- h;%%'''''
|;
-
7/30/2019 C.Ctors, Const Objects, Composition vs. Aggregation | - 3
38/38
Nooxcont`eg 9')=&H)`gtcxanic&*
'(
`gtcxanic'
ijnyy H {''''|;ijnyy N {
rx`qntc=
H- h;%%'''''
|;