oop with using c++
TRANSCRIPT
-
8/8/2019 OOP With Using C++
1/103
I n t r o d u c t i o n t o
O b j e c t - O r i e n t e d P r o g r a m m i n g
U s i n g C + +
P e t e r M u l l e r
p m u e l l e r @ u u - g n a . m i t . e d u
G l o b e w i d e N e t w o r k A c a d e m y ( G N A )
w w w . g n a c a d e m y . o r g /
N o v e m b e r 1 8 , 1 9 9 6
-
8/8/2019 OOP With Using C++
2/103
-
8/8/2019 OOP With Using C++
3/103
C o n t e n t s
1 I n t r o d u c t i o n 1
2 A S u r v e y o f P r o g r a m m i n g T e c h n i q u e s 3
2 . 1 U n s t r u c t u r e d P r o g r a m m i n g . . . . . . . . . . . . . . . . . . . . . . . 3
2 . 2 P r o c e d u r a l P r o g r a m m i n g . . . . . . . . . . . . . . . . . . . . . . . . 4
2 . 3 M o d u l a r P r o g r a m m i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 . 4 A n E x a m p l e w i t h D a t a S t r u c t u r e s . . . . . . . . . . . . . . . . . . . 5
2 . 4 . 1 H a n d l i n g S i n g l e L i s t s . . . . . . . . . . . . . . . . . . . . . . . 5
2 . 4 . 2 H a n d l i n g M u l t i p l e L i s t s . . . . . . . . . . . . . . . . . . . . . 7
2 . 5 M o d u l a r P r o g r a m m i n g P r o b l e m s . . . . . . . . . . . . . . . . . . . . 7
2 . 5 . 1 E x p l i c i t C r e a t i o n a n d D e s t r u c t i o n . . . . . . . . . . . . . . . 8
2 . 5 . 2 D e c o u p l e d D a t a a n d O p e r a t i o n s . . . . . . . . . . . . . . . . 8
2 . 5 . 3 M i s s i n g T y p e S a f e t y . . . . . . . . . . . . . . . . . . . . . . . 9
2 . 5 . 4 S t r a t e g i e s a n d R e p r e s e n t a t i o n . . . . . . . . . . . . . . . . . . 9
2 . 6 O b j e c t - O r i e n t e d P r o g r a m m i n g . . . . . . . . . . . . . . . . . . . . . 1 0
2 . 7 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0
3 A b s t r a c t D a t a T y p e s 1 3
3 . 1 H a n d l i n g P r o b l e m s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3
3 . 2 P r o p e r t i e s o f A b s t r a c t D a t a T y p e s . . . . . . . . . . . . . . . . . . . 1 4
3 . 3 G e n e r i c A b s t r a c t D a t a T y p e s . . . . . . . . . . . . . . . . . . . . . . 1 6
3 . 4 N o t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 7
3 . 5 A b s t r a c t D a t a T y p e s a n d O b j e c t - O r i e n t a t i o n . . . . . . . . . . . . . 1 8
3 . 6 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 8
4 O b j e c t - O r i e n t e d C o n c e p t s 1 9
4 . 1 I m p l e m e n t a t i o n o f A b s t r a c t D a t a T y p e s . . . . . . . . . . . . . . . . 1 9
4 . 2 C l a s s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0
4 . 3 O b j e c t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1
4 . 4 M e s s a g e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2
4 . 5 S u m m a r y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2
4 . 6 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3
5 M o r e O b j e c t - O r i e n t e d C o n c e p t s 2 5
5 . 1 R e l a t i o n s h i p s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 5
5 . 2 I n h e r i t a n c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 7
5 . 3 M u l t i p l e I n h e r i t a n c e . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 9
5 . 4 A b s t r a c t C l a s s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1
5 . 5 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2
i
-
8/8/2019 OOP With Using C++
4/103
i i C O N T E N T S
6 E v e n M o r e O b j e c t - O r i e n t e d C o n c e p t s 3 5
6 . 1 G e n e r i c T y p e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5
6 . 2 S t a t i c a n d D y n a m i c B i n d i n g . . . . . . . . . . . . . . . . . . . . . . . 3 7
6 . 3 P o l y m o r p h i s m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 8
7 I n t r o d u c t i o n t o C + + 4 3
7 . 1 T h e C P r o g r a m m i n g L a n g u a g e . . . . . . . . . . . . . . . . . . . . . 4 3
7 . 1 . 1 D a t a T y p e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3
7 . 1 . 2 S t a t e m e n t s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4
7 . 1 . 3 E x p r e s s i o n s a n d O p e r a t o r s . . . . . . . . . . . . . . . . . . . 4 6
7 . 1 . 4 F u n c t i o n s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 9
7 . 1 . 5 P o i n t e r s a n d A r r a y s . . . . . . . . . . . . . . . . . . . . . . . 5 0
7 . 1 . 6 A F i r s t P r o g r a m . . . . . . . . . . . . . . . . . . . . . . . . . 5 1
7 . 2 W h a t N e x t ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2
8 F r o m C T o C + + 5 3
8 . 1 B a s i c E x t e n s i o n s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3
8 . 1 . 1 D a t a T y p e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3
8 . 1 . 2 F u n c t i o n s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5
8 . 2 F i r s t O b j e c t - o r i e n t e d E x t e n s i o n s . . . . . . . . . . . . . . . . . . . . 5 6
8 . 2 . 1 C l a s s e s a n d O b j e c t s . . . . . . . . . . . . . . . . . . . . . . . 5 6
8 . 2 . 2 C o n s t r u c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 8
8 . 2 . 3 D e s t r u c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 0
9 M o r e o n C + + 6 3
9 . 1 I n h e r i t a n c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3
9 . 1 . 1 T y p e s o f I n h e r i t a n c e . . . . . . . . . . . . . . . . . . . . . . . 6 3
9 . 1 . 2 C o n s t r u c t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4
9 . 1 . 3 D e s t r u c t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5
9 . 1 . 4 M u l t i p l e I n h e r i t a n c e . . . . . . . . . . . . . . . . . . . . . . . 6 5
9 . 2 P o l y m o r p h i s m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6
9 . 3 A b s t r a c t C l a s s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7
9 . 4 O p e r a t o r O v e r l o a d i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 6 8
9 . 5 F r i e n d s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 9
9 . 6 H o w t o W r i t e a P r o g r a m . . . . . . . . . . . . . . . . . . . . . . . . . 7 0
9 . 6 . 1 C o m p i l a t i o n S t e p s . . . . . . . . . . . . . . . . . . . . . . . . 7 0
9 . 6 . 2 A N o t e a b o u t S t y l e . . . . . . . . . . . . . . . . . . . . . . . . 7 1
9 . 7 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2
1 0 T h e L i s t { A C a s e S t u d y 7 3
1 0 . 1 G e n e r i c T y p e s ( T e m p l a t e s ) . . . . . . . . . . . . . . . . . . . . . . . 7 3
1 0 . 2 S h a p e a n d T r a v e r s a l . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4
1 0 . 3 P r o p e r t i e s o f S i n g l y L i n k e d L i s t s . . . . . . . . . . . . . . . . . . . . 7 5
1 0 . 4 S h a p e I m p l e m e n t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6
1 0 . 4 . 1 N o d e T e m p l a t e s . . . . . . . . . . . . . . . . . . . . . . . . . 7 6
1 0 . 4 . 2 L i s t T e m p l a t e s . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8
1 0 . 5 I t e r a t o r I m p l e m e n t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . 8 0
1 0 . 6 E x a m p l e U s a g e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3
1 0 . 7 D i s c u s s i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3
1 0 . 7 . 1 S e p a r a t i o n o f S h a p e a n d A c c e s s S t r a t e g i e s . . . . . . . . . . . 8 3
1 0 . 7 . 2 I t e r a t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4
1 0 . 8 E x c e r c i s e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5
B i b l i o g r a p h y 8 7
-
8/8/2019 OOP With Using C++
5/103
C O N T E N T S i i i
A S o l u t i o n s t o t h e E x c e r c i s e s 8 9
A . 1 A S u r v e y o f P r o g r a m m i n g T e c h n i q u e s . . . . . . . . . . . . . . . . . 8 9
A . 2 A b s t r a c t D a t a T y p e s . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 0
A . 3 O b j e c t - O r i e n t e d C o n c e p t s . . . . . . . . . . . . . . . . . . . . . . . . 9 1
A . 4 M o r e O b j e c t - O r i e n t e d C o n c e p t s . . . . . . . . . . . . . . . . . . . . . 9 2
A . 5 M o r e o n C + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4
A . 6 T h e L i s t { A C a s e S t u d y . . . . . . . . . . . . . . . . . . . . . . . . . 9 4
-
8/8/2019 OOP With Using C++
6/103
i v C O N T E N T S
-
8/8/2019 OOP With Using C++
7/103
P r e f a c e
T h e r s t c o u r s e O b j e c t - O r i e n t e d P r o g r a m m i n g U s i n g C + + w a s h e l d i n S u m m e r 1 9 9 4
a n d w a s b a s e d o n a s i m p l e A S C I I t u t o r i a l . A f t e r a c a l l f o r p a r t i c i p a t i o n , s e v e r a l
h i g h l y m o t i v a t e d p e o p l e f r o m a l l o v e r t h e w o r l d j o i n e d c o u r s e c o o r d i n a t o r M a r c u s
S p e h a s c o n s u l t a n t s a n d h a d p u s h e d t h e c o u r s e t o i t s s u c c e s s . B e s i d e s o f t h e m a n y
s t u d e n t s w h o s p e n d l o t s o f t h e i r t i m e t o h e l p d o i n g o r g a n i z a t i o n a l s t u .
T h e n , t h e \ b o m b " . T h e o r i g i n a l a u t h o r o f t h e u s e d A S C I I t u t o r i a l s t a n d s o n
h i s c o p y r i g h t a n d d e n i e s u s t o r e u s e h i s w o r k . U n f o r t u n a t e l y , M a r c u s w a s u n a b l e
t o s p e n d m o r e t i m e o n t h i s p r o j e c t a n d s o t h e m a i n d r i v i n g f o r c e w a s g o n e .
M y e x p e r i e n c e s m a d e a s c o n s u l t a n t f o r t h i s r s t c o u r s e h a v e l e a d t o m y d e c i s i o n
t h a t t h e c o u r s e m u s t b e o e r e d a g a i n . S o , i n S u m m e r 1 9 9 5 I ' v e j u s t a n n o u n c e d a
s e c o n d r o u n d , h o p i n g t h a t s o m e h o w a n e w t u t o r i a l c o u l d b e w r i t t e n . W e l l , h e r e i s
t h e r e s u l t . I h o p e , t h a t y o u n d t h i s t u t o r i a l u s e f u l a n d c l e a r . I f n o t , p l e a s e s e n d m e
a n o t e . T h e t u t o r i a l i s i n t e n d e d t o b e a g r o u p w o r k a n d n o t a w o r k o f o n e p e r s o n .
I t i s e s s e n t i a l , t h a t y o u e x p r e s s y o u r c o m m e n t s a n d s u g g e s t i o n s .
T h e c o u r s e a n d t h e t u t o r i a l c o u l d h a v e o n l y b e e n r e a l i z e d w i t h h e l p o f m a n y
p e o p l e . I w i s h t o t h a n k t h e p e o p l e f r o m t h e G l o b e w i d e N e t w o r k A c a d e m y ( G N A ) ,
e s p e c i a l l y J o s e p h W a n g a n d S u s a n n e R e a d i n g . T h e t u t o r i a l w a s p r o o f - r e a d b y
R i c a r d o N a s s i f , w h o h a s a l s o p a r t i c i p a t e d i n t h e r s t c o u r s e a n d w h o h a s f o l l o w e d
m e i n t h i s n e w o n e .
B e r l i n , G e r m a n y P e t e r M u l l e r
v
-
8/8/2019 OOP With Using C++
8/103
-
8/8/2019 OOP With Using C++
9/103
C h a p t e r 1
I n t r o d u c t i o n
T h i s t u t o r i a l i s a c o l l e c t i o n o f l e c t u r e s t o b e h e l d i n t h e o n - l i n e c o u r s e I n t r o d u c t i o n
t o O b j e c t - O r i e n t e d P r o g r a m m i n g U s i n g C + + . I n t h i s c o u r s e , o b j e c t - o r i e n t a t i o n i s
i n t r o d u c e d a s a n e w p r o g r a m m i n g c o n c e p t w h i c h s h o u l d h e l p y o u i n d e v e l o p i n g h i g h
q u a l i t y s o f t w a r e . O b j e c t - o r i e n t a t i o n i s a l s o i n t r o d u c e d a s a c o n c e p t w h i c h m a k e s
d e v e l o p i n g o f p r o j e c t s e a s i e r . H o w e v e r , t h i s i s n o t a c o u r s e f o r l e a r n i n g t h e C + +
p r o g r a m m i n g l a n g u a g e . I f y o u a r e i n t e r e s t e d i n l e a r n i n g t h e l a n g u a g e i t s e l f , y o u
m i g h t w a n t t o g o t h r o u g h o t h e r t u t o r i a l s , s u c h a s C + + : A n n o t a t i o n s
1
b y F r a n k
B r o k k e n a n d K a r e l K u b a t . I n t h i s t u t o r i a l o n l y t h o s e l a n g u a g e c o n c e p t s t h a t a r e
n e e d e d t o p r e s e n t c o d i n g e x a m p l e s a r e i n t r o d u c e d .
A n d w h a t m a k e s o b j e c t - o r i e n t a t i o n s u c h a h o t t o p i c ? T o b e h o n e s t , n o t e v e r y -
t h i n g t h a t i s s o l d u n d e r t h e t e r m o f o b j e c t - o r i e n t a t i o n i s r e a l l y n e w . F o r e x a m p l e ,
t h e r e a r e p r o g r a m s w r i t t e n i n p r o c e d u r a l l a n g u a g e s l i k e P a s c a l o r C w h i c h u s e
o b j e c t - o r i e n t e d c o n c e p t s . B u t t h e r e e x i s t a f e w i m p o r t a n t f e a t u r e s w h i c h t h e s e
l a n g u a g e s w o n ' t h a n d l e o r w o n ' t h a n d l e v e r y w e l l , r e s p e c t i v e l y .
S o m e p e o p l e w i l l s a y t h a t o b j e c t - o r i e n t a t i o n i s \ m o d e r n " . W h e n r e a d i n g a n -
n o u n c e m e n t s o f n e w p r o d u c t s e v e r y t h i n g s e e m s t o b e \ o b j e c t - o r i e n t e d " . \ O b j e c t s "
a r e e v e r y w h e r e . I n t h i s t u t o r i a l w e w i l l t r y t o o u t l i n e c h a r a c t e r i s t i c s o f o b j e c t -
o r i e n t a t i o n t o a l l o w y o u t o j u d g e t h o s e o b j e c t - o r i e n t e d p r o d u c t s .
T h e t u t o r i a l i s o r g a n i z e d a s f o l l o w s . C h a p t e r 2 p r e s e n t s a b r i e f o v e r v i e w o f
p r o c e d u r a l p r o g r a m m i n g t o r e f r e s h y o u r k n o w l e d g e i n t h a t a r e a . A b s t r a c t d a t a
t y p e s a r e i n t r o d u c e d i n c h a p t e r 3 a s a f u n d a m e n t a l c o n c e p t o f o b j e c t - o r i e n t a t i o n .
A f t e r t h a t w e c a n s t a r t t o d e n e g e n e r a l t e r m s a n d b e g i n n i n g t o v i e w t h e w o r l d a s
c o n s i s t i n g o f o b j e c t s ( c h a p t e r 4 ) . S u b s e q u e n t c h a p t e r s p r e s e n t f u n d a m e n t a l o b j e c t -
o r i e n t e d c o n c e p t s ( c h a p t e r s 5 a n d 6 ) . C h a p t e r s 7 t h r o u g h 9 i n t r o d u c e C + + a s a n
e x a m p l e o f a n o b j e c t - o r i e n t e d p r o g r a m m i n g l a n g u a g e w h i c h i s i n w i d e - s p r e a d u s e .
F i n a l l y c h a p t e r 1 0 d e m o n s t r a t e s h o w t o a p p l y o b j e c t - o r i e n t e d p r o g r a m m i n g t o a
r e a l e x a m p l e .
1
h t t p : / / w w w . i c c e . r u g . n l / d o c s / c p p . h t m l
1
-
8/8/2019 OOP With Using C++
10/103
-
8/8/2019 OOP With Using C++
11/103
C h a p t e r 2
A S u r v e y o f P r o g r a m m i n g
T e c h n i q u e s
P e t e r M u l l e r
G l o b e w i d e N e t w o r k A c a d e m y ( G N A )
p m u e l l e r @ u u - g n a . m i t . e d u
T h i s c h a p t e r i s a s h o r t s u r v e y o f p r o g r a m m i n g t e c h n i q u e s . W e u s e a s i m p l e e x -
a m p l e t o i l l u s t r a t e t h e p a r t i c u l a r p r o p e r t i e s a n d t o p o i n t o u t t h e i r m a i n i d e a s a n d
p r o b l e m s .
R o u g h l y s p e a k i n g , w e c a n d i s t i n g u i s h t h e f o l l o w i n g l e a r n i n g c u r v e o f s o m e o n e
w h o l e a r n s p r o g r a m :
U n s t r u c t u r e d p r o g r a m m i n g ,
p r o c e d u r a l p r o g r a m m i n g ,
m o d u l a r p r o g r a m m i n g a n d
o b j e c t - o r i e n t e d p r o g r a m m i n g .
T h i s c h a p t e r i s o r g a n i z e d a s f o l l o w s . S e c t i o n s 2 . 1 t o 2 . 3 b r i e y d e s c r i b e t h e r s t t h r e e
p r o g r a m m i n g t e c h n i q u e s . S u b s e q u e n t l y , w e p r e s e n t a s i m p l e e x a m p l e o f h o w m o d u -
l a r p r o g r a m m i n g c a n b e u s e d t o i m p l e m e n t a s i n g l y l i n k e d l i s t m o d u l e ( s e c t i o n 2 . 4 ) .
U s i n g t h i s w e s t a t e a f e w p r o b l e m s w i t h t h i s k i n d o f t e c h n i q u e i n s e c t i o n 2 . 5 . F i n a l l y ,
s e c t i o n 2 . 6 d e s c r i b e s t h e f o u r t h p r o g r a m m i n g t e c h n i q u e .
2 . 1 U n s t r u c t u r e d P r o g r a m m i n g
U s u a l l y , p e o p l e s t a r t l e a r n i n g p r o g r a m m i n g b y w r i t i n g s m a l l a n d s i m p l e p r o g r a m s
c o n s i s t i n g o n l y o f o n e m a i n p r o g r a m . H e r e \ m a i n p r o g r a m " s t a n d s f o r a s e q u e n c e
o f c o m m a n d s o r s t a t e m e n t s w h i c h m o d i f y d a t a w h i c h i s g l o b a l t h r o u g h o u t t h e w h o l e
p r o g r a m . W e c a n i l l u s t r a t e t h i s a s s h o w n i n F i g . 2 . 1 .
main programdata
program
F i g u r e 2 . 1 : U n s t r u c t u r e d p r o g r a m m i n g . T h e m a i n p r o g r a m d i r e c t l y o p e r a t e s o n
g l o b a l d a t a .
3
-
8/8/2019 OOP With Using C++
12/103
4 C H A P T E R 2 . A S U R V E Y O F P R O G R A M M I N G T E C H N I Q U E S
A s y o u s h o u l d a l l k n o w , t h i s p r o g r a m m i n g t e c h n i q u e s p r o v i d e t r e m e n d o u s d i s -
a d v a n t a g e s o n c e t h e p r o g r a m g e t s s u c i e n t l y l a r g e . F o r e x a m p l e , i f t h e s a m e s t a t e -
m e n t s e q u e n c e i s n e e d e d a t d i e r e n t l o c a t i o n s w i t h i n t h e p r o g r a m , t h e s e q u e n c e
m u s t b e c o p i e d . T h i s h a s l e a d t o t h e i d e a t o e x t r a c t t h e s e s e q u e n c e s , n a m e t h e m
a n d o e r i n g a t e c h n i q u e t o c a l l a n d r e t u r n f r o m t h e s e p r o c e d u r e s
2 . 2 P r o c e d u r a l P r o g r a m m i n g
W i t h p r o c e d u r a l p r o g r a m m i n g y o u a r e a b l e t o c o m b i n e r e t u r n i n g s e q u e n c e s o f s t a t e -
m e n t s i n t o o n e s i n g l e p l a c e . A p r o c e d u r e c a l l i s u s e d t o i n v o k e t h e p r o c e d u r e . A f t e r
t h e s e q u e n c e i s p r o c e s s e d , o w o f c o n t r o l p r o c e e d s r i g h t a f t e r t h e p o s i t i o n w h e r e
t h e c a l l w a s m a d e ( F i g . 2 . 2 ) .
main program procedure
F i g u r e 2 . 2 : E x e c u t i o n o f p r o c e d u r e s . A f t e r p r o c e s s i n g o w o f c o n t r o l s p r o c e e d w h e r e
t h e c a l l w a s m a d e .
W i t h i n t r o d u c i n g p a r a m e t e r s a s w e l l a s p r o c e d u r e s o f p r o c e d u r e s ( s u b p r o c e d u r e s )
p r o g r a m s c a n n o w b e w r i t t e n m o r e s t r u c t u r e d a n d e r r o r f r e e . F o r e x a m p l e , i f a
p r o c e d u r e i s c o r r e c t , e v e r y t i m e i t i s u s e d i t p r o d u c e s c o r r e c t r e s u l t s . C o n s e q u e n t l y ,
i n c a s e s o f e r r o r s y o u c a n n a r r o w y o u r s e a r c h t o t h o s e p l a c e s w h i c h a r e n o t p r o v e n
t o b e c o r r e c t .
N o w a p r o g r a m c a n b e v i e w e d a s a s e q u e n c e o f p r o c e d u r e c a l l s
1
. T h e m a i n
p r o g r a m i s r e s p o n s i b l e t o p a s s d a t a t o t h e i n d i v i d u a l c a l l s , t h e d a t a i s p r o c e s s e d b y
t h e p r o c e d u r e s a n d , o n c e t h e p r o g r a m h a s n i s h e d , t h e r e s u l t i n g d a t a i s p r e s e n t e d .
T h u s , t h e o w o f d a t a c a n b e i l l u s t r a t e d a s a h i e r a r c h i c a l g r a p h , a t r e e , a s s h o w n
i n F i g . 2 . 3 f o r a p r o g r a m w i t h n o s u b p r o c e d u r e s .
main program
procedure1 2procedure procedure3
data
program
F i g u r e 2 . 3 : P r o c e d u r a l p r o g r a m m i n g . T h e m a i n p r o g r a m c o o r d i n a t e s c a l l s t o p r o -
c e d u r e s a n d h a n d s o v e r a p p r o p r i a t e d a t a a s p a r a m e t e r s .
T o s u m u p : N o w w e h a v e a s i n g l e p r o g r a m w h i c h i s d e v i d e d i n t o s m a l l p i e c e s
c a l l e d p r o c e d u r e s . T o e n a b l e u s a g e o f g e n e r a l p r o c e d u r e s o r g r o u p s o f p r o c e d u r e s
a l s o i n o t h e r p r o g r a m s , t h e y m u s t b e s e p a r a t e l y a v a i l a b l e . F o r t h a t r e a s o n , m o d u l a r
p r o g r a m m i n g a l l o w s g r o u p i n g o f p r o c e d u r e s i n t o m o d u l e s .
1
W e d o n ' t r e g a r d p a r a l l e l i s m h e r e .
-
8/8/2019 OOP With Using C++
13/103
2 . 3 . M O D U L A R P R O G R A M M I N G 5
2 . 3 M o d u l a r P r o g r a m m i n g
W i t h m o d u l a r p r o g r a m m i n g p r o c e d u r e s o f a c o m m o n f u n c t i o n a l i t y a r e g r o u p e d
t o g e t h e r i n t o s e p a r a t e m o d u l e s . A p r o g r a m t h e r e f o r e n o l o n g e r c o n s i s t s o f o n l y o n e
s i n g l e p a r t . I t i s n o w d e v i d e d i n t o s e v e r a l s m a l l e r p a r t s w h i c h i n t e r a c t t h r o u g h
p r o c e d u r e c a l l s a n d w h i c h f o r m t h e w h o l e p r o g r a m ( F i g . 2 . 4 ) .
main program
module1 module 2
2data +1data + datadata
procedure1 2
procedure procedure3
data
program
F i g u r e 2 . 4 : M o d u l a r p r o g r a m m i n g . T h e m a i n p r o g r a m c o o r d i n a t e s c a l l s t o p r o c e -
d u r e s i n s e p a r a t e m o d u l e s a n d h a n d s o v e r a p p r o p r i a t e d a t a a s p a r a m e t e r s .
E a c h m o d u l e c a n h a v e i t s o w n d a t a . T h i s a l l o w s e a c h m o d u l e t o m a n a g e a n
i n t e r n a l s t a t e w h i c h i s m o d i e d b y c a l l s t o p r o c e d u r e s o f t h i s m o d u l e . H o w e v e r ,
t h e r e i s o n l y o n e s t a t e p e r m o d u l e a n d e a c h m o d u l e e x i s t s a t m o s t o n c e i n t h e
w h o l e p r o g r a m .
2 . 4 A n E x a m p l e w i t h D a t a S t r u c t u r e s
P r o g r a m s u s e d a t a s t r u c t u r e s t o s t o r e d a t a . S e v e r a l d a t a s t r u c t u r e s e x i s t , f o r e x -
a m p l e l i s t s , t r e e s , a r r a y s , s e t s , b a g s o r q u e u e s t o n a m e a f e w . E a c h o f t h e s e d a t a
s t r u c t u r e s c a n b e c h a r a c t e r i z e d b y t h e i r s t r u c t u r e a n d t h e i r a c c e s s m e t h o d s
2 . 4 . 1 H a n d l i n g S i n g l e L i s t s
Y o u a l l k n o w s i n g l y l i n k e d l i s t s w h i c h u s e a v e r y s i m p l e s t r u c t u r e , c o n s i s t i n g o f
e l e m e n t s w h i c h a r e s t r u n g t o g e t h e r , a s s h o w n i n F i g . 2 . 5 ) .
F i g u r e 2 . 5 : S t r u c t u r e o f a s i n g l y l i n k e d l i s t .
S i n g l y l i n k e d l i s t s j u s t p r o v i d e s a c c e s s m e t h o d s t o a p p e n d a n e w e l e m e n t t o
t h e i r e n d a n d t o d e l e t e t h e e l e m e n t a t t h e f r o n t . C o m p l e x d a t a s t r u c t u r e s m i g h t u s e
a l r e a d y e x i s t i n g o n e s . F o r e x a m p l e a q u e u e c a n b e s t r u c t u r e d l i k e a s i n g l y l i n k e d
l i s t . H o w e v e r , q u e u e s p r o v i d e a c c e s s m e t h o d s t o p u t a d a t a e l e m e n t a t t h e e n d a n d
t o g e t t h e r s t d a t a e l e m e n t ( r s t - i n r s t - o u t ( F I F O ) b e h a v i o u r ) .
W e w i l l n o w p r e s e n t a n e x a m p l e w h i c h w e u s e t o p r e s e n t s o m e d e s i g n c o n c e p t s .
S i n c e t h i s e x a m p l e i s j u s t u s e d t o i l l u s t r a t e t h e s e c o n c e p t s a n d p r o b l e m s i t i s n e i t h e r
-
8/8/2019 OOP With Using C++
14/103
6 C H A P T E R 2 . A S U R V E Y O F P R O G R A M M I N G T E C H N I Q U E S
c o m p l e t e n o r o p t i m a l . R e f e r t o c h a p t e r 1 0 f o r a c o m p l e t e o b j e c t - o r i e n t e d d i s c u s s i o n
a b o u t t h e d e s i g n o f d a t a s t r u c t u r e s .
S u p p o s e y o u w a n t t o p r o g r a m a l i s t i n a m o d u l a r p r o g r a m m i n g l a n g u a g e s u c h a s
C o r M o d u l a - 2 . A s y o u b e l i e v e t h a t l i s t s a r e a c o m m o n d a t a s t r u c t u r e , y o u d e c i d e
t o i m p l e m e n t i t i n a s e p a r a t e m o d u l e . T y p i c a l l y , t h i s r e q u i r e s t o w r i t e t w o l e s : t h e
i n t e r f a c e d e n i t i o n a n d t h e i m p l e m e n t a t i o n l e . W i t h i n t h i s c h a p t e r w e w i l l u s e a
v e r y s i m p l e p s e u d o c o d e w h i c h y o u s h o u l d u n d e r s t a n d i m m e d i a t e l y . L e t ' s a s s u m e ,
t h a t c o m m e n t s a r e e n c l o s e d i n \ / * . . . * / " . O u r i n t e r f a c e d e n i t i o n m i g h t t h e n l o o k
s i m i l a r t o t h a t b e l o w :
/ *
* I n t e r f a c e d e f i n i t i o n f o r a m o d u l e w h i c h i m p l e m e n t s
* a s i n g l y l i n k e d l i s t f o r s t o r i n g d a t a o f a n y t y p e .
* /
M O D U L E S i n g l y - L i n k e d - L i s t - 1
B O O L l i s t _ i n i t i a l i z e ( )
B O O L l i s t _ a p p e n d ( A N Y d a t a )
B O O L l i s t _ d e l e t e ( )
l i s t _ e n d ( )
A N Y l i s t _ g e t F i r s t ( )
A N Y l i s t _ g e t N e x t ( )
B O O L l i s t _ i s E m p t y ( )
E N D S i n g l y - L i n k e d - L i s t - 1
I n t e r f a c e d e n i t i o n s j u s t d e s c r i b e w h a t i s a v a i l a b l e a n d n o t h o w i t i s m a d e a v a i l -
a b l e . Y o u h i d e t h e i n f o r m a t i o n o f t h e i m p l e m e n t a t i o n i n t h e i m p l e m e n t a t i o n l e .
T h i s i s a f u n d a m e n t a l p r i n c i p l e i n s o f t w a r e e n g i n e e r i n g , s o l e t ' s r e p e a t i t : Y o u h i d e
i n f o r m a t i o n o f t h e a c t u a l i m p l e m e n t a t i o n ( i n f o r m a t i o n h i d i n g ) . T h i s e n a b l e s y o u
t o c h a n g e t h e i m p l e m e n t a t i o n , f o r e x a m p l e t o u s e a f a s t e r b u t m o r e m e m o r y c o n -
s u m i n g a l g o r i t h m f o r s t o r i n g e l e m e n t s w i t h o u t t h e n e e d t o c h a n g e o t h e r m o d u l e s o f
y o u r p r o g r a m : T h e c a l l s t o p r o v i d e d p r o c e d u r e s r e m a i n t h e s a m e .
T h e i d e a o f t h i s i n t e r f a c e i s a s f o l l o w s : B e f o r e u s i n g t h e l i s t o n e h a v e t o c a l l
l i s t i n i t i a l i z e ( ) t o i n i t i a l i z e v a r i a b l e s l o c a l t o t h e m o d u l e . T h e f o l l o w i n g t w o p r o -
c e d u r e s i m p l e m e n t t h e m e n t i o n e d a c c e s s m e t h o d s a p p e n d a n d d e l e t e . T h e a p p e n d
p r o c e d u r e n e e d s a m o r e d e t a i l e d d i s c u s s i o n . F u n c t i o n l i s t a p p e n d ( ) t a k e s o n e a r g u -
m e n t d a t a o f a r b i t r a r y t y p e . T h i s i s n e c e s s a r y s i n c e y o u w i s h t o u s e y o u r l i s t i n
s e v e r a l d i e r e n t e n v i r o n m e n t s , h e n c e , t h e t y p e o f t h e d a t a e l e m e n t s t o b e s t o r e d
i n t h e l i s t i s n o t k n o w n b e f o r e h a n d . C o n s e q u e n t l y , y o u h a v e t o u s e a s p e c i a l t y p e
A N Y w h i c h a l l o w s t o a s s i g n d a t a o f a n y t y p e t o i t
2
. T h e t h i r d p r o c e d u r e l i s t e n d ( )
n e e d s t o b e c a l l e d w h e n t h e p r o g r a m t e r m i n a t e s t o e n a b l e t h e m o d u l e t o c l e a n u p i t s
i n t e r n a l l y u s e d v a r i a b l e s . F o r e x a m p l e y o u m i g h t w a n t t o r e l e a s e a l l o c a t e d m e m o r y .
W i t h t h e n e x t t w o p r o c e d u r e s l i s t g e t F i r s t ( ) a n d l i s t g e t N e x t ( ) a s i m p l e m e c h -
a n i s m t o t r a v e r s e t h r o u g h t h e l i s t i s o e r e d . T r a v e r s i n g c a n b e d o n e u s i n g t h e
f o l l o w i n g l o o p :
A N Y d a t a
d a t a < - l i s t _ g e t F i r s t ( )
W H I L E d a t a I S V A L I D D O
2
N o t a l l r e a l l a n g u a g e s p r o v i d e s u c h a t y p e . I n C t h i s c a n b e e m u l a t e d w i t h p o i n t e r s
-
8/8/2019 OOP With Using C++
15/103
2 . 5 . M O D U L A R P R O G R A M M I N G P R O B L E M S 7
d o S o m e t h i n g ( d a t a )
d a t a < - l i s t _ g e t N e x t ( )
E N D
N o w y o u h a v e a l i s t m o d u l e w h i c h a l l o w s y o u t o u s e a l i s t w i t h a n y t y p e o f d a t a
e l e m e n t s . B u t w h a t , i f y o u n e e d m o r e t h a n o n e l i s t i n o n e o f y o u r p r o g r a m s ?
2 . 4 . 2 H a n d l i n g M u l t i p l e L i s t s
Y o u d e c i d e t o r e d e s i g n y o u r l i s t m o d u l e t o b e a b l e t o m a n a g e m o r e t h a n o n e l i s t .
Y o u t h e r e f o r e c r e a t e a n e w i n t e r f a c e d e s c r i p t i o n w h i c h n o w i n c l u d e s a d e n i t i o n f o r
a l i s t h a n d l e . T h i s h a n d l e i s u s e d i n e v e r y p r o v i d e d p r o c e d u r e t o u n i q u e l y i d e n t i f y
t h e l i s t i n q u e s t i o n . Y o u r i n t e r f a c e d e n i t i o n l e o f y o u r n e w l i s t m o d u l e l o o k s l i k e
t h i s :
/ *
* A l i s t m o d u l e f o r m o r e t h a n o n e l i s t .
* /
M O D U L E S i n g l y - L i n k e d - L i s t - 2
D E C L A R E T Y P E l i s t _ h a n d l e _ t
l i s t _ h a n d l e _ t l i s t _ c r e a t e ( )
l i s t _ d e s t r o y ( l i s t _ h a n d l e _ t t h i s )
B O O L l i s t _ a p p e n d ( l i s t _ h a n d l e _ t t h i s , A N Y d a t a )
A N Y l i s t _ g e t F i r s t ( l i s t _ h a n d l e _ t t h i s )
A N Y l i s t _ g e t N e x t ( l i s t _ h a n d l e _ t t h i s )
B O O L l i s t _ i s E m p t y ( l i s t _ h a n d l e _ t t h i s )
E N D S i n g l y - L i n k e d - L i s t - 2
Y o u u s e D E C L A R E T Y P E t o i n t r o d u c e a n e w t y p e l i s t h a n d l e t w h i c h r e p r e s e n t s
y o u r l i s t h a n d l e . W e d o n o t s p e c i f y , h o w t h i s h a n d l e i s a c t u a l l y r e p r e s e n t e d o r
e v e n i m p l e m e n t e d . Y o u a l s o h i d e t h e i m p l e m e n t a t i o n d e t a i l s o f t h i s t y p e i n y o u r
i m p l e m e n t a t i o n l e . N o t e t h e d i e r e n c e t o t h e p r e v i o u s v e r s i o n w h e r e y o u j u s t h i d e
f u n c t i o n s o r p r o c e d u r e s , r e s p e c t i v e l y . N o w y o u a l s o h i d e i n f o r m a t i o n f o r a n u s e r
d e n e d d a t a t y p e c a l l e d l i s t h a n d l e t
Y o u u s e l i s t c r e a t e ( ) t o o b t a i n a h a n d l e t o a n e w t h u s e m p t y l i s t . E v e r y o t h e r
p r o c e d u r e n o w c o n t a i n s t h e s p e c i a l p a r a m e t e r t h i s w h i c h j u s t i d e n t i e s t h e l i s t i n
q u e s t i o n . A l l p r o c e d u r e s n o w o p e r a t e o n t h i s h a n d l e r a t h e r t h a n a m o d u l e g l o b a l
l i s t .
N o w y o u m i g h t s a y , t h a t y o u c a n c r e a t e l i s t o b j e c t s . E a c h s u c h o b j e c t c a n b e
u n i q u e l y i d e n t i e d b y i t s h a n d l e a n d o n l y t h o s e m e t h o d s a r e a p p l i c a b l e w h i c h a r e
d e n e d t o o p e r a t e o n t h i s h a n d l e .
2 . 5 M o d u l a r P r o g r a m m i n g P r o b l e m s
T h e p r e v i o u s s e c t i o n s h o w s , t h a t y o u a l r e a d y p r o g r a m w i t h s o m e o b j e c t - o r i e n t e d
c o n c e p t s i n m i n d . H o w e v e r , t h e e x a m p l e i m p l i e s s o m e p r o b l e m s w h i c h w e w i l l
o u t l i n e n o w .
-
8/8/2019 OOP With Using C++
16/103
8 C H A P T E R 2 . A S U R V E Y O F P R O G R A M M I N G T E C H N I Q U E S
2 . 5 . 1 E x p l i c i t C r e a t i o n a n d D e s t r u c t i o n
I n t h e e x a m p l e e v e r y t i m e y o u w a n t t o u s e a l i s t , y o u e x p l i c i t l y h a v e t o d e c l a r e a
h a n d l e a n d p e r f o r m a c a l l t o l i s t c r e a t e ( ) t o o b t a i n a v a l i d o n e . A f t e r t h e u s e o f
t h e l i s t y o u m u s t e x p l i c i t l y c a l l l i s t d e s t r o y ( ) w i t h t h e h a n d l e o f t h e l i s t y o u w a n t
t o b e d e s t r o y e d . I f y o u w a n t t o u s e a l i s t w i t h i n a p r o c e d u r e , s a y , f o o ( ) y o u u s e t h e
f o l l o w i n g c o d e f r a m e :
P R O C E D U R E f o o ( ) B E G I N
l i s t _ h a n d l e _ t m y L i s t
m y L i s t < - l i s t _ c r e a t e ( )
/ * D o s o m e t h i n g w i t h m y L i s t * /
l i s t _ d e s t r o y ( m y L i s t )
E N D
L e t ' s c o m p a r e t h e l i s t w i t h o t h e r d a t a t y p e s , f o r e x a m p l e a n i n t e g e r . I n t e g e r s
a r e d e c l a r e d w i t h i n a p a r t i c u l a r s c o p e ( f o r e x a m p l e w i t h i n a p r o c e d u r e ) . O n c e
y o u ' v e d e n e d t h e m , y o u c a n u s e t h e m . O n c e y o u l e a v e t h e s c o p e ( f o r e x a m p l e
t h e p r o c e d u r e w h e r e t h e i n t e g e r w a s d e n e d ) t h e i n t e g e r i s l o s t . I t i s a u t o m a t i c a l l y
c r e a t e d a n d d e s t r o y e d . S o m e c o m p i l e r s e v e n i n i t i a l i z e n e w l y c r e a t e d i n t e g e r s t o a
s p e c i c v a l u e , t y p i c a l l y 0 ( z e r o ) .
W h e r e i s t h e d i e r e n c e t o l i s t \ o b j e c t s " ? T h e l i f e t i m e o f a l i s t i s a l s o d e n e d b y
i t s s c o p e , h e n c e , i t m u s t b e c r e a t e d o n c e t h e s c o p e i s e n t e r e d a n d d e s t r o y e d o n c e
i t i s l e f t . O n c r e a t i o n t i m e a l i s t s h o u l d b e i n i t i a l i z e d t o b e e m p t y . T h e r e f o r e w e
w o u l d l i k e t o b e a b l e t o d e n e a l i s t s i m i l a r t o t h e d e n i t i o n o f a n i n t e g e r . A c o d e
f r a m e f o r t h i s w o u l d l o o k l i k e t h i s :
P R O C E D U R E f o o ( ) B E G I N
l i s t _ h a n d l e _ t m y L i s t / * L i s t i s c r e a t e d a n d i n i t i a l i z e d * /
/ * D o s o m e t h i n g w i t h t h e m y L i s t * /
E N D / * m y L i s t i s d e s t r o y e d * /
T h e a d v a n t a g e i s , t h a t n o w t h e c o m p i l e r t a k e s c a r e o f c a l l i n g i n i t i a l i z a t i o n a n d
t e r m i n a t i o n p r o c e d u r e s a s a p p r o p r i a t e . F o r e x a m p l e , t h i s e n s u r e s t h a t t h e l i s t i s
c o r r e c t l y d e l e t e d , r e t u r n i n g r e s o u r c e s t o t h e p r o g r a m .
2 . 5 . 2 D e c o u p l e d D a t a a n d O p e r a t i o n s
D e c o u p l i n g o f d a t a a n d o p e r a t i o n s l e a d s u s u a l l y t o a s t r u c t u r e b a s e d o n t h e o p -
e r a t i o n s r a t h e r t h a n t h e d a t a : M o d u l e s g r o u p c o m m o n o p e r a t i o n s ( s u c h a s t h o s e
l i s t . . . ( ) o p e r a t i o n s ) t o g e t h e r . Y o u t h e n u s e t h e s e o p e r a t i o n s b y p r o v i d i n g e x p l i c i t l y
t h e d a t a t o t h e m o n w h i c h t h e y s h o u l d o p e r a t e . T h e r e s u l t i n g m o d u l e s t r u c t u r e
i s t h e r e f o r e o r i e n t e d o n t h e o p e r a t i o n s r a t h e r t h a n t h e a c t u a l d a t a . O n e c o u l d s a y
t h a t t h e d e n e d o p e r a t i o n s s p e c i f y t h e d a t a t o b e u s e d .
I n o b j e c t - o r i e n t a t i o n , s t r u c t u r e i s o r g a n i z e d b y t h e d a t a . Y o u c h o o s e t h e d a t a
r e p r e s e n t a t i o n s w h i c h b e s t t y o u r r e q u i r e m e n t s . C o n s e q u e n t l y , y o u r p r o g r a m s g e t
s t r u c t u r e d b y t h e d a t a r a t h e r t h a n o p e r a t i o n s . T h u s , i t i s e x a c t l y t h e o t h e r w a y
a r o u n d : D a t a s p e c i e s v a l i d o p e r a t i o n s . N o w m o d u l e s g r o u p d a t a r e p r e s e n t a t i o n s
t o g e t h e r .
-
8/8/2019 OOP With Using C++
17/103
2 . 5 . M O D U L A R P R O G R A M M I N G P R O B L E M S 9
2 . 5 . 3 M i s s i n g T y p e S a f e t y
I n o u r l i s t e x a m p l e w e h a v e t o u s e t h e s p e c i a l t y p e A N Y t o a l l o w t h e l i s t t o c a r r y
a n y d a t a w e l i k e . T h i s i m p l i e s , t h a t t h e c o m p i l e r c a n n o t g u a r a n t e e f o r t y p e s a f e t y .
C o n s i d e r t h e f o l l o w i n g e x a m p l e w h i c h t h e c o m p i l e r c a n n o t c h e c k f o r c o r r e c t n e s s :
P R O C E D U R E f o o ( ) B E G I N
S o m e D a t a T y p e d a t a 1
S o m e O t h e r T y p e d a t a 2
l i s t _ h a n d l e _ t m y L i s t
m y L i s t < - l i s t _ c r e a t e ( )
l i s t _ a p p e n d ( m y L i s t , d a t a 1 )
l i s t _ a p p e n d ( m y L i s t , d a t a 2 ) / * O o p s * /
l i s t _ d e s t r o y ( m y L i s t )
E N D
I t i s i n y o u r r e s p o n s i b i l i t y t o e n s u r e t h a t y o u r l i s t i s u s e d c o n s i s t e n t l y . A p o s s i b l e
s o l u t i o n i s t o a d d i t i o n a l l y a d d i n f o r m a t i o n a b o u t t h e t y p e t o e a c h l i s t e l e m e n t .
H o w e v e r , t h i s i m p l i e s m o r e o v e r h e a d a n d d o e s n o t p r e v e n t y o u f r o m k n o w i n g w h a t
y o u a r e d o i n g .
W h a t w e w o u l d l i k e t o h a v e i s a m e c h a n i s m w h i c h a l l o w s u s t o s p e c i f y o n w h i c h
d a t a t y p e t h e l i s t s h o u l d b e d e n e d . T h e o v e r a l l f u n c t i o n o f t h e l i s t i s a l w a y s t h e
s a m e , w h e t h e r w e s t o r e a p p l e s , n u m b e r s , c a r s o r e v e n l i s t s . T h e r e f o r e i t w o u l d b e
n i c e t o d e c l a r e a n e w l i s t w i t h s o m e t h i n g l i k e :
l i s t _ h a n d l e _ t < A p p l e > l i s t 1 / * a l i s t o f a p p l e s * /
l i s t _ h a n d l e _ t < C a r > l i s t 2 / * a l i s t o f c a r s * /
T h e c o r r e s p o n d i n g l i s t r o u t i n e s s h o u l d t h e n a u t o m a t i c a l l y r e t u r n t h e c o r r e c t
d a t a t y p e s . T h e c o m p i l e r s h o u l d b e a b l e t o c h e c k f o r t y p e c o n s i s t e n c y .
2 . 5 . 4 S t r a t e g i e s a n d R e p r e s e n t a t i o n
T h e l i s t e x a m p l e i m p l i e s o p e r a t i o n s t o t r a v e r s e t h r o u g h t h e l i s t . T y p i c a l l y a c u r s o r i s
u s e d f o r t h a t p u r p o s e w h i c h p o i n t s t o t h e c u r r e n t e l e m e n t . T h i s i m p l i e s a t r a v e r s i n g
s t r a t e g y w h i c h d e n e s t h e o r d e r i n w h i c h t h e e l e m e n t s o f t h e d a t a s t r u c t u r e a r e t o
b e v i s i t e d .
F o r a s i m p l e d a t a s t r u c t u r e l i k e t h e s i n g l y l i n k e d l i s t o n e c a n t h i n k o f o n l y o n e
t r a v e r s i n g s t r a t e g y . S t a r t i n g w i t h t h e l e f t m o s t e l e m e n t o n e s u c c e s s i v e l y v i s i t s t h e
r i g h t n e i g h b o u r s u n t i l o n e r e a c h e s t h e l a s t e l e m e n t . H o w e v e r , m o r e c o m p l e x d a t a
s t r u c t u r e s s u c h a s t r e e s c a n b e t r a v e r s e d u s i n g d i e r e n t s t r a t e g i e s . E v e n w o r s e ,
s o m e t i m e s t r a v e r s i n g s t r a t e g i e s d e p e n d o n t h e p a r t i c u l a r c o n t e x t i n w h i c h a d a t a
s t r u c t u r e i s u s e d . C o n s e q u e n t l y , i t m a k e s s e n s e t o s e p a r a t e t h e a c t u a l r e p r e s e n t a t i o n
o r s h a p e o f t h e d a t a s t r u c t u r e f r o m i t s t r a v e r s i n g s t r a t e g y . W e w i l l i n v e s t i g a t e t h i s
i n m o r e d e t a i l i n c h a p t e r 1 0 .
W h a t w e h a v e s h o w n w i t h t h e t r a v e r s i n g s t r a t e g y a p p l i e s t o o t h e r s t r a t e g i e s a s
w e l l . F o r e x a m p l e i n s e r t i o n m i g h t b e d o n e s u c h t h a t a n o r d e r o v e r t h e e l e m e n t s i s
a c h i e v e d o r n o t .
-
8/8/2019 OOP With Using C++
18/103
1 0 C H A P T E R 2 . A S U R V E Y O F P R O G R A M M I N G T E C H N I Q U E S
2 . 6 O b j e c t - O r i e n t e d P r o g r a m m i n g
O b j e c t - o r i e n t e d p r o g r a m m i n g s o l v e s s o m e o f t h e p r o b l e m s j u s t m e n t i o n e d . I n c o n -
t r a s t t o t h e o t h e r t e c h n i q u e s , w e n o w h a v e a w e b o f i n t e r a c t i n g o b j e c t s , e a c h h o u s e -
k e e p i n g i t s o w n s t a t e ( F i g . 2 . 6 ) .
object
object
object
object
data1
data3
data4
data2
program
F i g u r e 2 . 6 : O b j e c t - o r i e n t e d p r o g r a m m i n g . O b j e c t s o f t h e p r o g r a m i n t e r a c t b y
s e n d i n g m e s s a g e s t o e a c h o t h e r .
C o n s i d e r t h e m u l t i p l e l i s t s e x a m p l e a g a i n . T h e p r o b l e m h e r e w i t h m o d u l a r
p r o g r a m m i n g i s , t h a t y o u m u s t e x p l i c i t l y c r e a t e a n d d e s t r o y y o u r l i s t h a n d l e s . T h e n
y o u u s e t h e p r o c e d u r e s o f t h e m o d u l e t o m o d i f y e a c h o f y o u r h a n d l e s .
I n c o n t r a s t t o t h a t , i n o b j e c t - o r i e n t e d p r o g r a m m i n g w e w o u l d h a v e a s m a n y l i s t
o b j e c t s a s n e e d e d . I n s t e a d o f c a l l i n g a p r o c e d u r e w h i c h w e m u s t p r o v i d e w i t h t h e
c o r r e c t l i s t h a n d l e , w e w o u l d d i r e c t l y s e n d a m e s s a g e t o t h e l i s t o b j e c t i n q u e s t i o n .
R o u g h l y s p e a k i n g , e a c h o b j e c t i m p l e m e n t s i t s o w n m o d u l e a l l o w i n g f o r e x a m p l e
m a n y l i s t s t o c o e x i s t .
E a c h o b j e c t i s r e s p o n s i b l e t o i n i t i a l i z e a n d d e s t r o y i t s e l f c o r r e c t l y . C o n s e q u e n t l y ,
t h e r e i s n o l o n g e r t h e n e e d t o e x p l i c i t l y c a l l a c r e a t i o n o r t e r m i n a t i o n p r o c e d u r e .
Y o u m i g h t a s k : S o w h a t ? I s n ' t t h i s j u s t a m o r e f a n c i e r m o d u l a r p r o g r a m m i n g
t e c h n i q u e ? Y o u w e r e r i g h t , i f t h i s w o u l d b e a l l a b o u t o b j e c t - o r i e n t a t i o n . F o r t u -
n a t e l y , i t i s n o t . B e g i n n i n g w i t h t h e n e x t c h a p t e r s a d d i t i o n a l f e a t u r e s o f o b j e c t -
o r i e n t a t i o n a r e i n t r o d u c e d w h i c h m a k e s o b j e c t - o r i e n t e d p r o g r a m m i n g t o a n e w p r o -
g r a m m i n g t e c h n i q u e .
2 . 7 E x c e r c i s e s
1 . T h e l i s t e x a m p l e s i n c l u d e t h e s p e c i a l t y p e A N Y t o a l l o w a l i s t t o c a r r y d a t a
o f a n y t y p e . S u p p o s e y o u w a n t t o w r i t e a m o d u l e f o r a s p e c i a l i z e d l i s t o f
i n t e g e r s w h i c h p r o v i d e s t y p e c h e c k i n g . A l l y o u h a v e i s t h e i n t e r f a c e d e n i t i o n
o f m o d u l e S i n g l y - L i n k e d - L i s t - 2
( a ) H o w d o e s t h e i n t e r f a c e d e n i t i o n f o r a m o d u l e I n t e g e r - L i s t l o o k l i k e ?
( b ) D i s c u s s t h e p r o b l e m s w h i c h a r e i n t r o d u c e d w i t h u s i n g t y p e A N Y f o r l i s t
e l e m e n t s i n m o d u l e S i n g l y - L i n k e d - L i s t - 2
( c ) W h a t a r e p o s s i b l e s o l u t i o n s t o t h e s e p r o b l e m s ?
-
8/8/2019 OOP With Using C++
19/103
2 . 7 . E X C E R C I S E S 1 1
2 . W h a t a r e t h e m a i n c o n c e p t u a l d i e r e n c e s b e t w e e n o b j e c t - o r i e n t e d p r o g r a m -
m i n g a n d t h e o t h e r p r o g r a m m i n g t e c h n i q u e s ?
3 . I f y o u a r e f a m i l i a r w i t h a m o d u l a r p r o g r a m m i n g l a n g u a g e t r y t o i m p l e m e n t
m o d u l e S i n g l y - L i n k e d - L i s t - 2 . S u b s e q u e n t l y , i m p l e m e n t a l i s t o f i n t e g e r s a n d
a l i s t o f i n t e g e r l i s t s w i t h h e l p o f t h i s m o d u l e .
-
8/8/2019 OOP With Using C++
20/103
1 2 C H A P T E R 2 . A S U R V E Y O F P R O G R A M M I N G T E C H N I Q U E S
-
8/8/2019 OOP With Using C++
21/103
C h a p t e r 3
A b s t r a c t D a t a T y p e s
P e t e r M u l l e r
G l o b e w i d e N e t w o r k A c a d e m y ( G N A )
p m u e l l e r @ u u - g n a . m i t . e d u
S o m e a u t h o r s d e s c r i b e o b j e c t - o r i e n t e d p r o g r a m m i n g a s p r o g r a m m i n g a b s t r a c t
d a t a t y p e s a n d t h e i r r e l a t i o n s h i p s . W i t h i n t h i s s e c t i o n w e i n t r o d u c e a b s t r a c t d a t a
t y p e s a s a b a s i c c o n c e p t f o r o b j e c t - o r i e n t a t i o n a n d w e e x p l o r e c o n c e p t s u s e d i n t h e
l i s t e x a m p l e o f t h e l a s t s e c t i o n i n m o r e d e t a i l .
3 . 1 H a n d l i n g P r o b l e m s
T h e r s t t h i n g w i t h w h i c h o n e i s c o n f r o n t e d w h e n w r i t i n g p r o g r a m s i s t h e p r o b l e m
T y p i c a l l y y o u a r e c o n f r o n t e d w i t h \ r e a l - l i f e " p r o b l e m s a n d y o u w a n t t o m a k e l i f e
e a s i e r b y p r o v i d i n g a p r o g r a m f o r t h e p r o b l e m . H o w e v e r , r e a l - l i f e p r o b l e m s a r e
n e b u l o u s a n d t h e r s t t h i n g y o u h a v e t o d o i s t o t r y t o u n d e r s t a n d t h e p r o b l e m t o
s e p a r a t e n e c e s s a r y f r o m u n n e c e s s a r y d e t a i l s : Y o u t r y t o o b t a i n y o u r o w n a b s t r a c t
v i e w , o r m o d e l , o f t h e p r o b l e m . T h i s p r o c e s s o f m o d e l i n g i s c a l l e d a b s t r a c t i o n a n d
i s i l l u s t r a t e d i n F i g u r e 3 . 1 .
Problem
Abstraction
Model
F i g u r e 3 . 1 : C r e a t e a m o d e l f r o m a p r o b l e m w i t h a b s t r a c t i o n .
T h e m o d e l d e n e s a n a b s t r a c t v i e w t o t h e p r o b l e m . T h i s i m p l i e s t h a t t h e m o d e l
f o c u s s e s o n l y o n p r o b l e m r e l a t e d s t u a n d t h a t y o u t r y t o d e n e p r o p e r t i e s o f t h e
p r o b l e m . T h e s e p r o p e r t i e s i n c l u d e
1 3
-
8/8/2019 OOP With Using C++
22/103
1 4 C H A P T E R 3 . A B S T R A C T D A T A T Y P E S
t h e d a t a w h i c h a r e a e c t e d a n d
t h e o p e r a t i o n s w h i c h a r e i d e n t i e d
b y t h e p r o b l e m .
A s a n e x a m p l e c o n s i d e r t h e a d m i n i s t r a t i o n o f e m p l o y e e s i n a n i n s t i t u t i o n . T h e
h e a d o f t h e a d m i n i s t r a t i o n c o m e s t o y o u a n d a s k y o u t o c r e a t e a p r o g r a m w h i c h
a l l o w s t o a d m i n i s t e r t h e e m p l o y e e s . W e l l , t h i s i s n o t v e r y s p e c i c . F o r e x a m p l e ,
w h a t e m p l o y e e i n f o r m a t i o n i s n e e d e d b y t h e a d m i n i s t r a t i o n ? W h a t t a s k s s h o u l d
b e a l l o w e d ? E m p l o y e e s a r e r e a l p e r s o n s w h i c h c a n b e c h a r a c t e r i z e d w i t h m a n y
p r o p e r t i e s v e r y f e w a r e :
n a m e ,
s i z e ,
d a t e o f b i r t h ,
s h a p e ,
s o c i a l n u m b e r ,
r o o m n u m b e r ,
h a i r c o l o u r ,
h o b b i e s .
C e r t a i n l y n o t a l l o f t h e s e p r o p e r t i e s a r e n e c e s s a r y t o s o l v e t h e a d m i n i s t r a t i o n
p r o b l e m . O n l y s o m e o f t h e m a r e p r o b l e m s p e c i c . C o n s e q u e n t l y y o u c r e a t e a m o d e l
o f a n e m p l o y e e f o r t h e p r o b l e m . T h i s m o d e l o n l y i m p l i e s p r o p e r t i e s w h i c h a r e
n e e d e d t o f u l l l t h e r e q u i r e m e n t s o f t h e a d m i n i s t r a t i o n , f o r i n s t a n c e n a m e , d a t e o f
b i r t h a n d s o c i a l n u m b e r . T h e s e p r o p e r t i e s a r e c a l l e d t h e d a t a o f t h e ( e m p l o y e e )
m o d e l . N o w y o u h a v e d e s c r i b e d r e a l p e r s o n s w i t h h e l p o f a n a b s t r a c t e m p l o y e e .
O f c o u r s e , t h e p u r e d e s c r i p t i o n i s n o t e n o u g h . T h e r e m u s t b e s o m e o p e r a t i o n s
d e n e d w i t h w h i c h t h e a d m i n i s t r a t i o n i s a b l e t o h a n d l e t h e a b s t r a c t e m p l o y e e s . F o r
e x a m p l e , t h e r e m u s t b e a n o p e r a t i o n w h i c h a l l o w s t o c r e a t e a n e w e m p l o y e e o n c e a
n e w p e r s o n e n t e r s t h e i n s t i t u t i o n . C o n s e q u e n t l y , y o u h a v e t o i d e n t i f y t h e o p e r a t i o n s
w h i c h s h o u l d b e a b l e t o b e p e r f o r m e d o n a n a b s t r a c t e m p l o y e e . Y o u a l s o d e c i d e t o
a l l o w a c c e s s t o t h e e m p l o y e e s ' d a t a o n l y w i t h a s s o c i a t e d o p e r a t i o n s . T h i s a l l o w s
y o u t o e n s u r e t h a t d a t a e l e m e n t s a r e a l w a y s i n a p r o p e r s t a t e . F o r e x a m p l e y o u a r e
a b l e t o c h e c k i f a p r o v i d e d d a t e i s v a l i d .
T o s u m u p , a b s t r a c t i o n i s t h e s t r u c t u r i n g o f a n e b u l o u s p r o b l e m i n t o w e l l - d e n e d
e n t i t i e s b y d e n i n g t h e i r d a t a a n d o p e r a t i o n s . C o n s e q u e n t l y , t h e s e e n t i t i e s c o m b i n e
d a t a a n d o p e r a t i o n s . T h e y a r e n o t d e c o u p l e d f r o m e a c h o t h e r .
3 . 2 P r o p e r t i e s o f A b s t r a c t D a t a T y p e s
T h e e x a m p l e o f t h e p r e v i o u s s e c t i o n s h o w s , t h a t w i t h a b s t r a c t i o n y o u c r e a t e a
w e l l - d e n e d e n t i t y w h i c h c a n b e p r o p e r l y h a n d l e d . T h e s e e n t i t i e s d e n e t h e d a t a
s t r u c t u r e o f a s e t o f i t e m s . F o r e x a m p l e , e a c h a d m i n i s t e r e d e m p l o y e e h a s a n a m e ,
d a t e o f b i r t h a n d s o c i a l n u m b e r .
T h e d a t a s t r u c t u r e c a n o n l y b e a c c e s s e d w i t h d e n e d o p e r a t i o n s . T h i s s e t o f
o p e r a t i o n s i s c a l l e d i n t e r f a c e a n d i s e x p o r t e d b y t h e e n t i t y . A n e n t i t y w i t h t h e
p r o p e r t i e s j u s t d e s c r i b e d i s c a l l e d a n a b s t r a c t d a t a t y p e ( A D T ) .
F i g u r e 3 . 2 s h o w s a n A D T w h i c h c o n s i s t s o f a n a b s t r a c t d a t a s t r u c t u r e a n d o p e r -
a t i o n s . O n l y t h e o p e r a t i o n s a r e v i e w a b l e f r o m t h e o u t s i d e a n d d e n e t h e i n t e r f a c e .
O n c e a n e w e m p l o y e e i s \ c r e a t e d " t h e d a t a s t r u c t u r e i s l l e d w i t h a c t u a l v a l u e s :
Y o u n o w h a v e a n i n s t a n c e o f a n a b s t r a c t e m p l o y e e . Y o u c a n c r e a t e a s m a n y i n s t a n c e s
o f a n a b s t r a c t e m p l o y e e a s n e e d e d t o d e s c r i b e e v e r y r e a l e m p l o y e d p e r s o n .
L e t ' s t r y t o p u t t h e c h a r a c t e r i s t i c s o f a n A D T i n a m o r e f o r m a l w a y :
-
8/8/2019 OOP With Using C++
23/103
3 . 2 . P R O P E R T I E S O F A B S T R A C T D A T A T Y P E S 1 5
operations
abstract data structure
interface
abstract data type
F i g u r e 3 . 2 : A n a b s t r a c t d a t a t y p e ( A D T ) .
D e n i t i o n 3 . 2 . 1 ( A b s t r a c t D a t a T y p e ) A n a b s t r a c t d a t a t y p e ( A D T ) i s
c h a r a c t e r i z e d b y t h e f o l l o w i n g p r o p e r t i e s :
1 . I t e x p o r t s a t y p e
2 . I t e x p o r t s a s e t o f o p e r a t i o n s . T h i s s e t i s c a l l e d i n t e r f a c e
3 . O p e r a t i o n s o f t h e i n t e r f a c e a r e t h e o n e a n d o n l y a c c e s s m e c h a n i s m t o t h e
t y p e ' s d a t a s t r u c t u r e .
4 . A x i o m s a n d p r e c o n d i t i o n s d e n e t h e a p p l i c a t i o n d o m a i n o f t h e t y p e .
W i t h t h e r s t p r o p e r t y i t i s p o s s i b l e t o c r e a t e m o r e t h a n o n e i n s t a n c e o f a n A D T a s
e x e m p l i e d w i t h t h e e m p l o y e e e x a m p l e . Y o u m i g h t a l s o r e m e m b e r t h e l i s t e x a m p l e
o f c h a p t e r 2 . I n t h e r s t v e r s i o n w e h a v e i m p l e m e n t e d a l i s t a s a m o d u l e a n d w e r e
o n l y a b l e t o u s e o n e l i s t a t a t i m e . T h e s e c o n d v e r s i o n i n t r o d u c e s t h e \ h a n d l e "
a s a r e f e r e n c e t o a \ l i s t o b j e c t " . F r o m w h a t w e h a v e l e a r n e d n o w , t h e h a n d l e i n
c o n j u n c t i o n w i t h t h e o p e r a t i o n s d e n e d i n t h e l i s t m o d u l e d e n e s a n A D T L i s t
1 . W h e n w e u s e t h e h a n d l e w e d e n e t h e c o r r e s p o n d i n g v a r i a b l e t o b e o f t y p e
L i s t
2 . T h e i n t e r f a c e t o i n s t a n c e s o f t y p e L i s t i s d e n e d b y t h e i n t e r f a c e d e n i t i o n
l e .
3 . S i n c e t h e i n t e r f a c e d e n i t i o n l e d o e s n o t i n c l u d e t h e a c t u a l r e p r e s e n t a t i o n o f
t h e h a n d l e , i t c a n n o t b e m o d i e d d i r e c t l y .
4 . T h e a p p l i c a t i o n d o m a i n i s d e n e d b y t h e s e m a n t i c a l m e a n i n g o f p r o v i d e d
o p e r a t i o n s . A x i o m s a n d p r e c o n d i t i o n s i n c l u d e s t a t e m e n t s s u c h a s
\ A n e m p t y l i s t i s a l i s t . "
\ L e t l = ( d 1 , d 2 , d 3 , . . . , d N ) b e a l i s t . T h e n l . a p p e n d ( d M ) r e s u l t s i n
l = ( d 1 , d 2 , d 3 , . . . , d N , d M ) . "
\ T h e r s t e l e m e n t o f a l i s t c a n o n l y b e d e l e t e d i f t h e l i s t i s n o t e m p t y . "
H o w e v e r , a l l o f t h e s e p r o p e r t i e s a r e o n l y v a l i d d u e t o o u r u n d e r s t a n d i n g o f a n d
o u r d i s c i p l i n e i n u s i n g t h e l i s t m o d u l e . I t i s i n o u r r e s p o n s i b i l i t y t o u s e i n s t a n c e s o f
L i s t a c c o r d i n g t o t h e s e r u l e s .
I m p o r t a n c e o f D a t a S t r u c t u r e E n c a p s u l a t i o n
T h e p r i n c i p l e o f h i d i n g t h e u s e d d a t a s t r u c t u r e a n d t o o n l y p r o v i d e a w e l l - d e n e d
i n t e r f a c e i s k n o w n a s e n c a p s u l a t i o n . W h y i s i t s o i m p o r t a n t t o e n c a p s u l a t e t h e d a t a
s t r u c t u r e ?
T o a n s w e r t h i s q u e s t i o n c o n s i d e r t h e f o l l o w i n g m a t h e m a t i c a l e x a m p l e w h e r e w e
w a n t t o d e n e a n A D T f o r c o m p l e x n u m b e r s . F o r t h e f o l l o w i n g i t i s e n o u g h t o k n o w
t h a t c o m p l e x n u m b e r s c o n s i s t s o f t w o p a r t s : r e a l p a r t a n d i m a g i n a r y p a r t . B o t h
p a r t s a r e r e p r e s e n t e d b y r e a l n u m b e r s . C o m p l e x n u m b e r s d e n e s e v e r a l o p e r a t i o n s :
-
8/8/2019 OOP With Using C++
24/103
1 6 C H A P T E R 3 . A B S T R A C T D A T A T Y P E S
a d d i t i o n , s u b s t r a c t i o n , m u l t i p l i c a t i o n o r d i v i s i o n t o n a m e a f e w . A x i o m s a n d p r e -
c o n d i t i o n s a r e v a l i d a s d e n e d b y t h e m a t h e m a t i c a l d e n i t i o n o f c o m p l e x n u m b e r s .
F o r e x a m p l e , i t e x i s t s a n e u t r a l e l e m e n t f o r a d d i t i o n .
T o r e p r e s e n t a c o m p l e x n u m b e r i t i s n e c e s s a r y t o d e n e t h e d a t a s t r u c t u r e t o
b e u s e d b y i t s A D T . O n e c a n t h i n k o f a t l e a s t t w o p o s s i b i l i t i e s t o d o t h i s :
B o t h p a r t s a r e s t o r e d i n a t w o - v a l u e d a r r a y w h e r e t h e r s t v a l u e i n d i c a t e s t h e
r e a l p a r t a n d t h e s e c o n d v a l u e t h e i m a g i n a r y p a r t o f t h e c o m p l e x n u m b e r . I f
x d e n o t e s t h e r e a l p a r t a n d y t h e i m a g i n a r y p a r t , y o u c o u l d t h i n k o f a c c e s s i n g
t h e m v i a a r r a y s u b s c r i p t i o n : x = c 0 ] a n d y = c 1 ] .
B o t h p a r t s a r e s t o r e d i n a t w o - v a l u e d r e c o r d . I f t h e e l e m e n t n a m e o f t h e r e a l
p a r t i s r a n d t h a t o f t h e i m a g i n a r y p a r t i s i x a n d y c a n b e o b t a i n e d w i t h :
x = c . r a n d y = c i
P o i n t 3 o f t h e A D T d e n i t i o n s a y s t h a t f o r e a c h a c c e s s t o t h e d a t a s t r u c t u r e
t h e r e m u s t b e a n o p e r a t i o n d e n e d . T h e a b o v e a c c e s s e x a m p l e s s e e m t o c o n t r a d i c t
t h i s r e q u i r e m e n t . I s t h i s r e a l l y t r u e ?
H a v e a g a i n a l o o k t o t h e p e r f o r m e d c o m p a r i s o n . L e t ' s s t i c k t o t h e r e a l p a r t . I n
t h e r s t v e r s i o n , x e q u a l s c 0 ] . I n t h e s e c o n d v e r s i o n , x e q u a l s c . r . I n b o t h c a s e s
x e q u a l s \ s o m e t h i n g " . I t i s t h i s \ s o m e t h i n g " w h i c h d i e r s f r o m t h e a c t u a l d a t a
s t r u c t u r e u s e d . B u t i n b o t h c a s e s t h e p e r f o r m e d o p e r a t i o n \ e q u a l " h a s t h e s a m e
m e a n i n g t o d e c l a r e x t o b e e q u a l t o t h e r e a l p a r t o f t h e c o m p l e x n u m b e r c : b o t h
c a s e s a r c h i e v e t h e s a m e s e m a n t i c s .
I f y o u t h i n k o f m o r e c o m p l e x o p e r a t i o n s t h e i m p a c t o f d e c o u p l i n g d a t a s t r u c t u r e s
f r o m o p e r a t i o n s b e c o m e s e v e n m o r e c l e a r . F o r e x a m p l e t h e a d d i t i o n o f t w o c o m p l e x
n u m b e r s r e q u i r e s t o p e r f o r m a n a d d i t i o n f o r e a c h p a r t . C o n s e q u e n t l y , y o u m u s t
a c c e s s t h e v a l u e o f e a c h p a r t w h i c h i s d i e r e n t f o r e a c h v e r s i o n . B y p r o v i d i n g
a n o p e r a t i o n \ a d d " y o u c a n e n c a p s u l a t e t h e s e d e t a i l s f r o m i t s a c t u a l u s e . I n a n
a p p l i c a t i o n c o n t e x t y o u s i m p l y \ a d d t o c o m p l e x n u m b e r s " r e g a r d l e s s o f h o w t h i s
f u n c t i o n a l i t y i s a c t u a l l y a r c h i e v e d .
O n c e y o u h a v e c r e a t e d a n A D T f o r c o m p l e x n u m b e r s , s a y C o m p l e x , y o u c a n u s e
i t s i m i l a r l y t o w e l l - k n o w n d a t a t y p e s s u c h a s i n t e g e r s .
L e t ' s s u m m a r i z e t h i s : T h e s e p a r a t i o n o f d a t a s t r u c t u r e s a n d o p e r a t i o n s a n d t h e
c o n s t r a i n t t o o n l y a c c e s s t h e d a t a s t r u c t u r e v i a a w e l l - d e n e d i n t e r f a c e a l l o w s t o
c h o o s e d a t a s t r u c t u r e s a p p r o p r i a t e f o r t h e a p p l i c a t i o n e n v i r o n m e n t .
3 . 3 G e n e r i c A b s t r a c t D a t a T y p e s
A D T s a r e u s e d t o d e n e a n e w t y p e f r o m w h i c h i n s t a n c e s c a n b e c r e a t e d . A s s h o w n
i n t h e l i s t e x a m p l e , s o m e t i m e s t h e s e i n s t a n c e s s h o u l d o p e r a t e o n o t h e r d a t a t y p e s a s
w e l l . F o r i n s t a n c e , o n e c a n t h i n k o f l i s t s o f a p p l e s , c a r s o r e v e n l i s t s . T h e s e m a n t i c a l
d e n i t i o n o f a l i s t i s a l w a y s t h e s a m e . O n l y t h e t y p e o f t h e d a t a e l e m e n t s c h a n g e
a c c o r d i n g t o w h a t t y p e t h e l i s t s h o u l d o p e r a t e o n .
T h i s a d d i t i o n a l i n f o r m a t i o n c o u l d b e s p e c i e d b y a g e n e r i c p a r a m e t e r w h i c h i s
s p e c i e d a t i n s t a n c e c r e a t i o n t i m e . T h u s a n i n s t a n c e o f a g e n e r i c A D T i s a c t u a l l y a n
i n s t a n c e o f a p a r t i c u l a r v a r i a n t o f t h e a c c o r d i n g A D T . A l i s t o f a p p l e s c a n t h e r e f o r e
b e d e c l a r e d a s f o l l o w s :
L i s t < A p p l e > l i s t O f A p p l e s
T h e a n g l e b r a c k e t s n o w e n c l o s e t h e d a t a t y p e o f w h i c h a v a r i a n t o f t h e g e n e r i c
A D T L i s t s h o u l d b e c r e a t e d . l i s t O f A p p l e s o e r s t h e s a m e i n t e r f a c e a s a n y o t h e r
l i s t , b u t o p e r a t e s o n i n s t a n c e s o f t y p e A p p l e
-
8/8/2019 OOP With Using C++
25/103
3 . 4 . N O T A T I O N 1 7
3 . 4 N o t a t i o n
A s A D T s p r o v i d e a n a b s t r a c t v i e w t o d e s c r i b e p r o p e r t i e s o f s e t s o f e n t i t i e s , t h e i r u s e
i s i n d e p e n d e n t f r o m a p a r t i c u l a r p r o g r a m m i n g l a n g u a g e . W e t h e r e f o r e i n t r o d u c e
a n o t a t i o n h e r e w h i c h i s a d o p t e d f r o m 3 ] . E a c h A D T d e s c r i p t i o n c o n s i s t s o f t w o
p a r t s :
D a t a : T h i s p a r t d e s c r i b e s t h e s t r u c t u r e o f t h e d a t a u s e d i n t h e A D T i n a n
i n f o r m a l w a y .
O p e r a t i o n s : T h i s p a r t d e s c r i b e s v a l i d o p e r a t i o n s f o r t h i s A D T , h e n c e , i t
d e s c r i b e s i t s i n t e r f a c e . W e u s e t h e s p e c i a l o p e r a t i o n c o n s t r u c t o r t o d e s c r i b e
t h e a c t i o n s w h i c h a r e t o b e p e r f o r m e d o n c e a n e n t i t y o f t h i s A D T i s c r e a t e d
a n d d e s t r u c t o r t o d e s c r i b e t h e a c t i o n s w h i c h a r e t o b e p e r f o r m e d o n c e a n
e n t i t y i s d e s t r o y e d . F o r e a c h o p e r a t i o n t h e p r o v i d e d a r g u m e n t s a s w e l l a s
p r e c o n d i t i o n s a n d p o s t c o n d i t i o n s a r e g i v e n .
A s a n e x a m p l e t h e d e s c r i p t i o n o f t h e A D T I n t e g e r i s p r e s e n t e d . L e t k b e a n i n t e g e r
e x p r e s s i o n :
A D T I n t e g e r i s
D a t a
A s e q u e n c e o f d i g i t s o p t i o n a l l y p r e x e d b y a p l u s o r m i n u s s i g n . W e r e f e r
t o t h i s s i g n e d w h o l e n u m b e r a s N
O p e r a t i o n s
c o n s t r u c t o r C r e a t e s a n e w i n t e g e r .
a d d ( k ) C r e a t e s a n e w i n t e g e r w h i c h i s t h e s u m o f N a n d k
C o n s e q u e n t l y , t h e p o s t c o n d i t i o n o f t h i s o p e r a t i o n i s s u m = N + k
D o n ' t c o n f u s e t h i s w i t h a s s i g n s t a t e m e n t s a s u s e d i n p r o g r a m m i n g
l a n g u a g e s ! I t i s r a t h e r a m a t h e m a t i c a l e q u a t i o n w h i c h y i e l d s \ t r u e "
f o r e a c h v a l u e s u m N a n d k a f t e r a d d h a s b e e n p e r f o r m e d .
s u b ( k ) S i m i l a r t o a d d , t h i s o p e r a t i o n c r e a t e s a n e w i n t e g e r o f t h e d i f -
f e r e n c e o f b o t h i n t e g e r v a l u e s . T h e r e f o r e t h e p o s t c o n d i t i o n f o r t h i s
o p e r a t i o n i s s u m = N - k
s e t ( k ) S e t N t o k . T h e p o s t c o n d i t i o n f o r t h i s o p e r a t i o n i s N = k
e n d
T h e d e s c r i p t i o n a b o v e i s a s p e c i c a t i o n f o r t h e A D T I n t e g e r . P l e a s e n o t i c e , t h a t w e
u s e w o r d s f o r n a m e s o f o p e r a t i o n s s u c h a s \ a d d " . W e c o u l d u s e t h e m o r e i n t u i t i v e
\ + " s i g n i n s t e a d , b u t t h i s m a y l e a d t o s o m e c o n f u s i o n : Y o u m u s t d i s t i n g u i s h t h e
o p e r a t i o n \ + " f r o m t h e m a t h e m a t i c a l u s e o f \ + " i n t h e p o s t c o n d i t i o n . T h e n a m e
o f t h e o p e r a t i o n i s j u s t s y n t a x w h e r e a s t h e s e m a n t i c s i s d e s c r i b e d b y t h e a s s o c i a t e d
p r e - a n d p o s t c o n d i t i o n s . H o w e v e r , i t i s a l w a y s a g o o d i d e a t o c o m b i n e b o t h t o m a k e
r e a d i n g o f A D T s p e c i c a t i o n s e a s i e r .
R e a l p r o g r a m m i n g l a n g u a g e s a r e f r e e t o c h o o s e a n a r b i t r a r y i m p l e m e n t a t i o n
f o r a n A D T . F o r e x a m p l e , t h e y m i g h t i m p l e m e n t t h e o p e r a t i o n a d d w i t h t h e i n x
o p e r a t o r \ + " l e a d i n g t o a m o r e i n t u i t i v e l o o k f o r a d d i t i o n o f i n t e g e r s .
-
8/8/2019 OOP With Using C++
26/103
1 8 C H A P T E R 3 . A B S T R A C T D A T A T Y P E S
3 . 5 A b s t r a c t D a t a T y p e s a n d O b j e c t - O r i e n t a t i o n
A D T s a l l o w s t h e c r e a t i o n o f i n s t a n c e s w i t h w e l l - d e n e d p r o p e r t i e s a n d b e h a v i o u r .
I n o b j e c t - o r i e n t a t i o n A D T s a r e r e f e r r e d t o a s c l a s s e s . T h e r e f o r e a c l a s s d e n e s
p r o p e r t i e s o f o b j e c t s w h i c h a r e t h e i n s t a n c e s i n a n o b j e c t - o r i e n t e d e n v i r o n m e n t .
A D T s d e n e f u n c t i o n a l i t y b y p u t t i n g m a i n e m p h a s i s o n t h e i n v o l v e d d a t a , t h e i r
s t r u c t u r e , o p e r a t i o n s a s w e l l a s a x i o m s a n d p r e c o n d i t i o n s . C o n s e q u e n t l y , o b j e c t -
o r i e n t e d p r o g r a m m i n g i s \ p r o g r a m m i n g w i t h A D T s " : c o m b i n i n g f u n c t i o n a l i t y o f
d i e r e n t A D T s t o s o l v e a p r o b l e m . T h e r e f o r e i n s t a n c e s ( o b j e c t s ) o f A D T s ( c l a s s e s )
a r e d y n a m i c a l l y c r e a t e d , d e s t r o y e d a n d u s e d .
3 . 6 E x c e r c i s e s
1 . A D T I n t e g e r
( a ) W h y a r e t h e r e n o p r e c o n d i t i o n s f o r o p e r a t i o n s a d d a n d s u b ?
( b ) O b v i o u s l y , t h e A D T d e s c r i p t i o n o f I n t e g e r i s i n c o m p l e t e . A d d m e t h o d s
m u l d i v a n d a n y o t h e r o n e . D e s c r i b e t h e i r i m p a c t s b y s p e c i f y i n g p r e -
a n d p o s t c o n d i t i o n s .
2 . D e s i g n a n A D T F r a c t i o n w h i c h d e s c r i b e s p r o p e r t i e s o f f r a c t i o n s .
( a ) W h a t d a t a s t r u c t u r e s c a n b e u s e d ? W h a t a r e i t s e l e m e n t s ?
( b ) W h a t d o e s t h e i n t e r f a c e l o o k l i k e ?
( c ) N a m e a f e w a x i o m s a n d p r e c o n d i t i o n s .
3 . D e s c r i b e i n y o u r o w n w o r d s p r o p e r t i e s o f a b s t r a c t d a t a t y p e s .
4 . W h y i s i t n e c e s s a r y t o i n c l u d e a x i o m s a n d p r e c o n d i t i o n s t o t h e d e n i t i o n o f
a n a b s t r a c t d a t a t y p e ?
5 . D e s c r i b e i n y o u r o w n w o r d s t h e r e l a t i o n s h i p b e t w e e n
i n s t a n c e a n d a b s t r a c t d a t a t y p e ,
g e n e r i c a b s t r a c t d a t a t y p e a n d c o r r e s p o n d i n g a b s t r a c t d a t a t y p e ,
i n s t a n c e s o f a g e n e r i c a b s t r a c t d a t a t y p e .
-
8/8/2019 OOP With Using C++
27/103
C h a p t e r 4
O b j e c t - O r i e n t e d C o n c e p t s
P e t e r M u l l e r
G l o b e w i d e N e t w o r k A c a d e m y ( G N A )
p m u e l l e r @ u u - g n a . m i t . e d u
T h e p r e v i o u s s e c t i o n s a l r e a d y i n t r o d u c e s o m e \ o b j e c t - o r i e n t e d " c o n c e p t s . H o w -
e v e r , t h e y w e r e a p p l i e d i n a n p r o c e d u r a l e n v i r o n m e n t o r i n a v e r b a l m a n n e r . I n t h i s
s e c t i o n w e i n v e s t i g a t e t h e s e c o n c e p t s i n m o r e d e t a i l a n d g i v e t h e m n a m e s a s u s e d
i n e x i s t i n g o b j e c t - o r i e n t e d p r o g r a m m i n g l a n g u a g e s .
4 . 1 I m p l e m e n t a t i o n o f A b s t r a c t D a t a T y p e s
T h e l a s t s e c t i o n i n t r o d u c e s a b s t r a c t d a t a t y p e s ( A D T s ) a s a n a b s t r a c t v i e w t o d e n e
p r o p e r t i e s o f a s e t o f e n t i t i e s . O b j e c t - o r i e n t e d p r o g r a m m i n g l a n g u a g e s m u s t a l l o w
t o i m p l e m e n t t h e s e t y p e s . C o n s e q u e n t l y , o n c e a n A D T i s i m p l e m e n t e d w e h a v e a
p a r t i c u l a r r e p r e s e n t a t i o n o f i t a v a i l a b l e .
C o n s i d e r a g a i n t h e A D T I n t e g e r . P r o g r a m m i n g l a n g u a g e s s u c h a s P a s c a l , C ,
M o d u l a - 2 a n d o t h e r s a l r e a d y o e r a n i m p l e m e n t a t i o n f o r i t . S o m e t i m e s i t i s c a l l e d
i n t o r i n t e g e r . O n c e y o u ' v e c r e a t e d a v a r i a b l e o f t h i s t y p e y o u c a n u s e i t s p r o v i d e d
o p e r a t i o n s . F o r e x a m p l e , y o u c a n a d d t w o i n t e g e r s :
i n t i , j , k / * D e f i n e t h r e e i n t e g e r s * /
i = 1 / * A s s i g n 1 t o i n t e g e r i * /
j = 2 / * A s s i g n 2 t o i n t e g e r j * /
k = i + j / * A s s i g n t h e s u m o f i a n d j t o k * /
L e t ' s p l a y w i t h t h e a b o v e c o d e f r a g m e n t a n d o u t l i n e t h e r e l a t i o n s h i p t o t h e A D T
I n t e g e r . T h e r s t l i n e d e n e s t h r e e i n s t a n c e s i j a n d k o f t y p e I n t e g e r . C o n s e q u e n t l y ,
f o r e a c h i n s t a n c e t h e s p e c i a l o p e r a t i o n c o n s t r u c t o r s h o u l d b e c a l l e d . I n o u r e x a m p l e ,
t h i s i s i n t e r n a l l y d o n e b y t h e c o m p i l e r . T h e c o m p i l e r r e s e r v e s m e m o r y t o h o l d t h e
v a l u e o f a n i n t e g e r a n d \ b i n d s " t h e c o r r e s p o n d i n g n a m e t o i t . I f y o u r e f e r t o i y o u
a c t u a l l y r e f e r t o t h i s m e m o r y a r e a w h i c h w a s \ c o n s t r u c t e d " b y t h e d e n i t i o n o f
i . O p t i o n a l l y , c o m p i l e r s m i g h t c h o o s e t o i n i t i a l i z e t h e m e m o r y , f o r e x a m p l e , t h e y
m i g h t s e t i t t o 0 ( z e r o ) .
T h e n e x t l i n e
i = 1
s e t s t h e v a l u e o f i t o b e 1 . T h e r e f o r e w e c a n d e s c r i b e t h i s l i n e w i t h h e l p o f t h e A D T
n o t a t i o n a s f o l l o w s :
1 9
-
8/8/2019 OOP With Using C++
28/103
2 0 C H A P T E R 4 . O B J E C T - O R I E N T E D C O N C E P T S
P e r f o r m o p e r a t i o n s e t w i t h a r g u m e n t 1 o n t h e I n t e g e r i n s t a n c e i . T h i s i s w r i t t e n a s
f o l l o w s : i . s e t ( 1 )
W e n o w h a v e a r e p r e s e n t a t i o n a t t w o l e v e l s . T h e r s t l e v e l i s t h e A D T l e v e l w h e r e
w e e x p r e s s e v e r y t h i n g w h a t i s d o n e t o a n i n s t a n c e o f t h i s A D T b y t h e i n v o c a t i o n o f
d e n e d o p e r a t i o n s . A t t h i s l e v e l , p r e - a n d p o s t c o n d i t i o n s a r e u s e d t o d e s c r i b e w h a t
a c t u a l l y h a p p e n s . I n t h e f o l l o w i n g e x a m p l e , t h e s e c o n d i t i o n s a r e e n c l o s e d i n c u r l y
b r a c k e t s .
f P r e c o n d i t i o n : i = n w h e r e n 2 I n t e g e r g
i . s e t ( 1 )
f P o s t c o n d i t i o n : i = 1 g
D o n ' t f o r g e t t h a t w e c u r r e n t l y t a l k a b o u t t h e A D T l e v e l ! C o n s e q u e n t l y , t h e c o n d i -
t i o n s a r e m a t h e m a t i c a l c o n d i t i o n s .
T h e s e c o n d l e v e l i s t h e i m p l e m e n t a t i o n l e v e l , w h e r e a n a c t u a l r e p r e s e n t a t i o n i s
c h o s e n f o r t h e o p e r a t i o n . I n C t h e e q u a l s i g n \ = " i m p l e m e n t s t h e s e t ( ) o p e r a t i o n .
H o w e v e r , i n P a s c a l t h e f o l l o w i n g r e p r e s e n t a t i o n w a s c h o s e n :
i : = 1
I n e i t h e r c a s e , t h e A D T o p e r a t i o n s e t i s i m p l e m e n t e d .
L e t ' s s t r e s s t h e s e l e v e l s a l i t t l e b i t f u r t h e r a n d h a v e a l o o k t o t h e l i n e
k = i + j
O b v i o u s l y , \ + " w a s c h o s e n t o i m p l e m e n t t h e a d d o p e r a t i o n . W e c o u l d r e a d t h e p a r t
\ i + j " a s \ a d d t h e v a l u e o f j t o t h e v a l u e o f i " , t h u s a t t h e A D T l e v e l t h i s r e s u l t s
i n
f P r e c o n d i t i o n : L e t i = n
1
a n d j = n
2
w i t h n
1
n
2
2 I n t e g e r g
i . a d d ( j )
f P o s t c o n d i t i o n : i = n
1
a n d j = n
2
g
T h e p o s t c o n d i t i o n e n s u r e s t h a t i a n d j d o n o t c h a n g e t h e i r v a l u e s . P l e a s e r e c a l l t h e
s p e c i c a t i o n o f a d d . I t s a y s t h a t a n e w I n t e g e r i s c r e a t e d o f w h i c h t h e v a l u e i s t h e
s u m . C o n s e q u e n t l y , w e m u s t p r o v i d e a m e c h a n i s m t o a c c e s s t h i s n e w i n s t a n c e . W e
d o t h i s w i t h t h e s e t o p e r a t i o n a p p l i e d o n i n s t a n c e k
f P r e c o n d i t i o n : L e t k = n w h e r e n 2 I n t e g e r g
k . s e t ( i . a d d ( j ) )
f P o s t c o n d i t i o n : k = i + j g
A s y o u c a n s e e , s o m e p r o g r a m m i n g l a n g u a g e s c h o o s e a r e p r e s e n t a t i o n w h i c h a l m o s t
e q u a l s t h e m a t h e m a t i c a l f o r m u l a t i o n u s e d i n t h e p r e - a n d p o s t c o n d i t i o n s . T h i s
m a k e s i t s o m e t i m e s d i c u l t t o n o t m i x u p b o t h l e v e l s .
4 . 2 C l a s s
A c l a s s i s a n a c t u a l r e p r e s e n t a t i o n o f a n A D T . I t t h e r e f o r e p r o v i d e s i m p l e m e n t a t i o n
d e t a i l s f o r t h e u s e d d a t a s t r u c t u r e a n d o p e r a t i o n s . W e p l a y w i t h t h e A D T I n t e g e r
a n d d e s i g n o u r o w n c l a s s f o r i t :
-
8/8/2019 OOP With Using C++
29/103
4 . 3 . O B J E C T 2 1
c l a s s I n t e g e r {
a t t r i b u t e s :
i n t i
m e t h o d s :
s e t V a l u e ( i n t n )
I n t e g e r a d d V a l u e ( I n t e g e r j )
}
I n t h e e x a m p l e a b o v e a s w e l l a s i n e x a m p l e s w h i c h f o l l o w w e u s e a n o t a t i o n w h i c h
i s n o t p r o g r a m m i n g l a n g u a g e s p e c i c . I n t h i s n o t a t i o n c l a s s f g d e n o t e s t h e
d e n i t i o n o f a c l a s s . E n c l o s e d i n t h e c u r l y b r a c k e t s a r e t w o s e c t i o n s a t t r i b u t e s :
a n d m e t h o d s : w h i c h d e n e t h e i m p l e m e n t a t i o n o f t h e d a t a s t r u c t u r e a n d o p e r a t i o n s
o f t h e c o r r e s p o n d i n g A D T . A g a i n w e d i s t i n g u i s h t h e t w o l e v e l s w i t h d i e r e n t t e r m s :
A t t h e i m p l e m e n t a t i o n l e v e l w e s p e a k o f \ a t t r i b u t e s " w h i c h a r e e l e m e n t s o f t h e
d a t a s t r u c t u r e a t t h e A D T l e v e l . T h e s a m e a p p l i e s t o \ m e t h o d s " w h i c h a r e t h e
i m p l e m e n t a t i o n o f t h e A D T o p e r a t i o n s .
I n o u r e x a m p l e , t h e d a t a s t r u c t u r e c o n s i s t s o f o n l y o n e e l e m e n t : a s i g n e d s e -
q u e n c e o f d i g i t s . T h e c o r r e s p o n d i n g a t t r i b u t e i s a n o r d i n a r y i n t e g e r o f a p r o g r a m -
m i n g l a n g u a g e
1
. W e o n l y d e n e t w o m e t h o d s s e t V a l u e ( ) a n d a d d V a l u e ( ) r e p r e s e n t -
i n g t h e t w o o p e r a t i o n s s e t a n d a d d
D e n i t i o n 4 . 2 . 1 ( C l a s s ) A c l a s s i s t h e i m p l e m e n t a t i o n o f a n a b s t r a c t d a t a t y p e
( A D T ) . I t d e n e s a t t r i b u t e s a n d m e t h o d s w h i c h i m p l e m e n t t h e d a t a s t r u c t u r e
a n d o p e r a t i o n s o f t h e A D T , r e s p e c t i v e l y .
I n s t a n c e s o f c l a s s e s a r e c a l l e d o b j e c t s . C o n s e q u e n t l y , c l a s s e s d e n e p r o p e r t i e s
a n d b e h a v i o u r o f s e t s o f o b j e c t s .
4 . 3 O b j e c t
R e c a l l t h e e m p l o y e e e x a m p l e o f c h a p t e r 3 . W e h a v e t a l k e d o f i n s t a n c e s o f a b s t r a c t
e m p l o y e e s . T h e s e i n s t a n c e s a r e a c t u a l \ e x a m p l e s " o f a n a b s t r a c t e m p l o y e e , h e n c e ,
t h e y c o n t a i n a c t u a l v a l u e s t o r e p r e s e n t a p a r t i c u l a r e m p l o y e e . W e c a l l t h e s e i n -
s t a n c e s o b j e c t s
O b j e c t s a r e u n i q u e l y i d e n t i a b l e b y a n a m e . T h e r e f o r e y o u c o u l d h a v e t w o
d i s t i n g u i s h a b l e o b j e c t s w i t h t h e s a m e s e t o f v a l u e s . T h i s i s s i m i l a r t o \ t r a d i t i o n a l "
p r o g r a m m i n g l a n g u a g e s w h e r e y o u c o u l d h a v e , s a y t w o i n t e g e r s i a n d j b o t h o f w h i c h
e q u a l t o \ 2 " . P l e a s e n o t i c e t h e u s e o f \ i " a n d \ j " i n t h e l a s t s e n t e n c e t o n a m e t h e
t w o i n t e g e r s . W e r e f e r t o t h e s e t o f v a l u e s a t a p a r t i c u l a r t i m e a s t h e s t a t e o f t h e
o b j e c t .
D e n i t i o n 4 . 3 . 1 ( O b j e c t ) A n o b j e c t i s a n i n s t a n c e o f a c l a s s . I t c a n b e u n i q u e l y
i d e n t i e d b y i t s n a m e a n d i t d e n e s a s t a t e w h i c h i s r e p r e s e n t e d b y t h e v a l u e s o f
i t s a t t r i b u t e s a t a p a r t i c u l a r t i m e .
T h e s t a t e o f t h e o b j e c t c h a n g e s a c c o r d i n g t o t h e m e t h o d s w h i c h a r e a p p l i e d t o i t .
W e r e f e r t o t h e s e p o s s i b l e s e q u e n c e o f s t a t e c h a n g e s a s t h e b e h a v i o u r o f t h e o b j e c t :
D e n i t i o n 4 . 3 . 2 ( B e h a v i o u r ) T h e b e h a v i o u r o f a n o b j e c t i s d e n e d b y t h e s e t
o f m e t h o d s w h i c h c a n b e a p p l i e d o n i t .
1
Y o u m i g h t a s k , w h y w e s h o u l d d e c l a r e a n I n t e g e r c l a s s i f t h e r e i s a l r e a d y a n i n t e g e r t y p e
a v a i l a b l e . W e c o m e b a c k t o t h i s w h e n w e t a l k a b o u t i n h e r i t a n c e
-
8/8/2019 OOP With Using C++
30/103
2 2 C H A P T E R 4 . O B J E C T - O R I E N T E D C O N C E P T S
W e n o w h a v e t w o m a i n c o n c e p t s o f o b j e c t - o r i e n t a t i o n i n t r o d u c e d , c l a s s a n d o b -
j e c t . O b j e c t - o r i e n t e d p r o g r a m m i n g i s t h e r e f o r e t h e i m p l e m e n t a t i o n o f a b s t r a c t d a t a
t y p e s o r , i n m o r e s i m p l e w o r d s , t h e w r i t i n g o f c l a s s e s . A t r u n t i m e i n s t a n c e s o f t h e s e
c l a s s e s , t h e o b j e c t s , a c h i e v e t h e g o a l o f t h e p r o g r a m b y c h a n g i n g t h e i r s t a t e s . C o n -
s e q u e n t l y , y o u c a n t h i n k o f y o u r r u n n i n g p r o g r a m a s a c o l l e c t i o n o f o b j e c t s . T h e
q u e s t i o n a r i s e s o f h o w t h e s e o b j e c t s i n t e r a c t ? W e t h e r e f o r e i n t r o d u c e t h e c o n c e p t
o f a m e s s a g e i n t h e n e x t s e c t i o n .
4 . 4 M e s s a g e
A r u n n i n g p r o g r a m i s a p o o l o f o b j e c t s w h e r e o b j e c t s a r e c r e a t e d , d e s t r o y e d a n d
i n t e r a c t i n g . T h i s i n t e r a c t i n g i s b a s e d o n m e s s a g e s w h i c h a r e s e n t f r o m o n e o b j e c t
t o a n o t h e r a s k i n g t h e r e c i p i e n t t o a p p l y a m e t h o d o n i t s e l f . T o g i v e y o u a n u n d e r -
s t a n d i n g o f t h i s c o m m u n i c a t i o n , l e t ' s c o m e b a c k t o t h e c l a s s I n t e g e r p r e s e n t e d i n
s e c t i o n 4 . 2 . I n o u r p s e u d o p r o g r a m m i n g l a n g u a g e w e c o u l d c r e a t e n e w o b j e c t s a n d
i n v o k e m e t h o d s o n t h e m . F o r e x a m p l e , w e c o u l d u s e
I n t e g e r i / * D e f i n e a n e w i n t e g e r o b j e c t * /
i . s e t V a l u e ( 1 ) / * S e t i t s v a l u e t o 1 * /
t o e x p r e s s t h e f a c t , t h a t t h e i n t e g e r o b j e c t i s h o u l d s e t i t s v a l u e t o 1 . T h i s i s
t h e m e s s a g e \ A p p l y m e t h o d s e t V a l u e w i t h a r g u m e n t 1 o n y o u r s e l f . " s e n t t o o b j e c t
i . W e n o t a t e t h e s e n d i n g o f a m e s s a g e w i t h \ . " . T h i s n o t a t i o n i s a l s o u s e d i n C + +
o t h e r o b j e c t - o r i e n t e d l a n g u a g e s m i g h t u s e o t h e r n o t a t i o n s , f o r e x a m p l e \ - > "
S e n d i n g a m e s s a g e a s k i n g a n o b j e c t t o a p p l y a m e t h o d i s s i m i l a r t o a p r o c e d u r e
c a l l i n \ t r a d i t i o n a l " p r o g r a m m i n g l a n g u a g e s . H o w e v e r , i n o b j e c t - o r i e n t a t i o n t h e r e
i s a v i e w o f a u t o n o m o u s o b j e c t s w h i c h c o m m u n i c a t e w i t h e a c h o t h e r b y e x c h a n g i n g
m e s s a g e s . O b j e c t s r e a c t w h e n t h e y r e c e i v e m e s s a g e s b y a p p l y i n g m e t h o d s o n t h e m -
s e l v e s . T h e y a l s o m a y d e n y t h e e x e c u t i o n o f a m e t h o d , f o r e x a m p l e i f t h e c a l l i n g
o b j e c t i s n o t a l l o w e d t o e x e c u t e t h e r e q u e s t e d m e t h o d .
I n o u r e x a m p l e , t h e m e s s a g e a n d t h e m e t h o d w h i c h s h o u l d b e a p p l i e d o n c e t h e
m e s s a g e i s r e c e i v e d h a v e t h e s a m e n a m e : W e s e n d \ s e t V a l u e w i t h a r g u m e n t 1 " t o
o b j e c t i w h i c h a p p l i e s \ s e t V a l u e ( 1 ) " .
D e n i t i o n 4 . 4 . 1 ( M e s s a g e ) A m e s s a g e i s a r e q u e s t t o a n o b j e c t t o i n v o k e o n e
o f i t s m e t h o d s . A m e s s a g e t h e r e f o r e c o n t a i n s
t h e n a m e o f t h e m e t h o d a n d
t h e a r g u m e n t s o f t h e m e t h o d .
C o n s e q u e n t l y , i n v o c a t i o n o f a m e t h o d i s j u s t a r e a c t i o n c a u s e d b y r e c e i p t o f a
m e s s a g e . T h i s i s o n l y p o s s i b l e , i f t h e m e t h o d i s a c t u a l l y k n o w n t o t h e o b j e c t .
D e n i t i o n 4 . 4 . 2 ( M e t h o d ) A m e t h o d i s a s s o c i a t e d w i t h a c l a s s . A n o b j e c t i n -
v o k e s m e t h o d s a s a r e a c t i o n t o r e c e i p t o f a m e s s a g e .
4 . 5 S u m m a r y
T o v i e w a p r o g r a m a s a c o l l e c t i o n o f i n t e r a c t i n g o b j e c t s i s a f u n d a m e n t a l p r i n c i p l e
i n o b j e c t - o r i e n t e d p r o g r a m m i n g . O b j e c t s i n t h i s c o l l e c t i o n r e a c t u p o n r e c e i p t o f
m e s s a g e s , c h a n g i n g t h e i r s t a t e a c c o r d i n g t o i n v o c a t i o n o f m e t h o d s w h i c h m i g h t
c a u s e o t h e r m e s s