![Page 1: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/1.jpg)
Chapter 11Chapter 11Chapter 11Chapter 11
Abstract Data Types and Abstract Data Types and Encapsulation Concepts
![Page 2: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/2.jpg)
Chapter 11 Topics
• The Concept of Abstraction
• Introduction to Data Abstraction
• Design Issues for Abstract Data Types
• Language Examples
• Parameterized Abstract Data Types
Copyright © 2006 Addison-Wesley. All rights reserved. 1-2
• Parameterized Abstract Data Types
• Encapsulation Constructs
• Naming Encapsulations
![Page 3: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/3.jpg)
The Concept of Abstraction
• An abstraction is a view or representation of an entity that includes only the most significant attributes
• The concept of abstraction is fundamental in programming (and computer science)
Copyright © 2006 Addison-Wesley. All rights reserved. 1-3
programming (and computer science)
• Nearly all programming languages support process abstraction with subprograms
• Nearly all programming languages designed since 1980 support data abstraction
![Page 4: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/4.jpg)
Stack implementation as data type
#include <stdio.h>
#include<ctype.h>
# define MAXSIZE 200
int stack[MAXSIZE];
int top;//index pointing to the
top of stack
void main()
void push(int y) {
if(top>MAXSIZE) {
printf(“STACK FULL");
}
else {
top++;
stack[top]=y; }
}void main()
{
void push(int);
int pop();
int topOne;
push(5);
push(10);
topOne=pop();
printf(“%d”,topOne);
}
}
int pop() {
int a;
if(top<=0) {
printf(“STACK EMPTY");
return 0; }
else {
a=stack[top];
top--; }
return(a);
}
Copyright © 2006 Addison-Wesley. All rights reserved. 1-4
![Page 5: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/5.jpg)
Introduction to Data Abstraction
• An abstract data type is a user-defined data type that satisfies the following two conditions:
– The representation of, and operations on, objects of the type are defined in a single
Copyright © 2006 Addison-Wesley. All rights reserved. 1-5
objects of the type are defined in a single syntactic unit
– The representation of objects of the type is hidden from the program units that use these objects, so the only operations possible are those provided in the type's definition
![Page 6: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/6.jpg)
Advantages of Data Abstraction
• Advantage of the first condition
– Program organization, modifiability (everything associated with a data structure is together), and separate compilation
• Advantage the second condition
Copyright © 2006 Addison-Wesley. All rights reserved. 1-6
• Advantage the second condition
– Reliability--by hiding the data representations, user code cannot directly access objects of the type or depend on the representation, allowing the representation to be changed without affecting user code
![Page 7: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/7.jpg)
Stack implementation as abstract data type
class stack {
public:
stack();
~stack(void);
void push(int num); // Adds Item to the top
int pop(void); // Returns Item from the top
protected:
int data[MaxSize]; // The actual Data array
}
void main() {
int topOne;
stack stk;
stk.push(5);
stk.push(10);
topOne = stk.pop();
}
Copyright © 2006 Addison-Wesley. All rights reserved. 1-7
![Page 8: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/8.jpg)
Design Issues
• A syntactic unit to define an ADT
• Built-in operations– Assignment
– Comparison
• Common operations
Copyright © 2006 Addison-Wesley. All rights reserved. 1-8
• Common operations– Iterators
– Accessors
– Constructors
– Destructors
• Parameterized ADTs
![Page 9: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/9.jpg)
Language Examples: C++
• Based on C struct type and Simula 67 classes
• The class is the encapsulation device
• Data members are the data defined in a class
• Member functions are the functions (methods)
Copyright © 2006 Addison-Wesley. All rights reserved. 1-9
• Member functions are the functions (methods) defined in a class.
• A member function can be defined in 2 ways
– the complete definition: header and body ->inlined
– only its header -> seperately compiled
![Page 10: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/10.jpg)
Language Examples: C++ (continued)
• All of the class instances of a class share a single copy of the member functions
• Each instance of a class has its own copy of the class data members
• Instances can be stack dynamic, or heap
Copyright © 2006 Addison-Wesley. All rights reserved. 1-10
• Instances can be stack dynamic, or heap dynamic
• Information Hiding
– Private clause for hidden entities
– Public clause for interface entities
– Protected clause for inheritance
![Page 11: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/11.jpg)
Language Examples: C++ (continued)
• Constructors:
– Functions to initialize the data members of instances (they do not create the objects)
– May also allocate storage if part of the object is heap-dynamic
Copyright © 2006 Addison-Wesley. All rights reserved. 1-11
is heap-dynamic
– Can include parameters to provide parameterization of the objects
– Implicitly called when an instance is created
– Can be explicitly called
– Name is the same as the class name
![Page 12: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/12.jpg)
Language Examples: C++ (continued)
• Destructors
– Functions to cleanup after an instance is destroyed; usually just to reclaim heap storage
– Implicitly called when the object’s lifetime ends
– Can be explicitly called
Copyright © 2006 Addison-Wesley. All rights reserved. 1-12
– Can be explicitly called
– Name is the class name, preceded by a tilde (~)
![Page 13: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/13.jpg)
An Example in C++
class stack {
private:
int *stackPtr, maxLen, topPtr;
public:
stack() { // a constructor
stackPtr = new int [100];
maxLen = 99;
void main( )
{
int topOne;
stack stk;
stk.push(42);
stk.push(17);
topOne = stk.top();maxLen = 99;
topPtr = -1;
};
~stack () {delete [] stackPtr;};
void push (int num) {…};
void pop () {…};
int top () {…};
int empty () {…};
}
topOne = stk.top();
stk.pop();
…
}
Copyright © 2006 Addison-Wesley. All rights reserved. 1-13
![Page 14: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/14.jpg)
Language Examples: C++ (continued)
• Friend functions or classes - to provide access to private members to some unrelated units or functions
– Necessary in C++
Copyright © 2006 Addison-Wesley. All rights reserved. 1-14
void PrintWeather(Temp &cTemp, Humid &cHumid)
{
std::cout << "The temperature is " <<
cTemp.m_nTemp << " and the humidity is " <<
cHumid.m_nHumid << std::endl;
}
![Page 15: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/15.jpg)
Friend function in C++
class Humid;
class Temp {
private:
int m_nTemp;
public:
Temp(int nTemp) { m_nTemp = nTemp; }
friend void PrintWeather(Temp &cTemp, Humid &cHumid);
Copyright © 2006 Addison-Wesley. All rights reserved. 1-15
friend void PrintWeather(Temp &cTemp, Humid &cHumid);
};
class Humid {
private:
int m_nHumid;
public:
Humid(int nHumid) { m_nHumid = nHumid; }
friend void PrintWeather(Temp &cTemp, Humid &cHumid);};
![Page 16: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/16.jpg)
Language Examples: Java
• Similar to C++, except:– All user-defined types are classes
– All objects are allocated from the heap and accessed through reference variables
– Individual entities in classes have access control modifiers (private or public), rather
Copyright © 2006 Addison-Wesley. All rights reserved. 1-16
control modifiers (private or public), rather than clauses
– Java has a second scoping mechanism, package scope, which can be used in place of friends• All entities in all classes in a package that do not have access control modifiers are visible throughout the package
![Page 17: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/17.jpg)
An Example in Java
class StackClass {
private:
private int [] stackRef;
private int maxLen, topIndex;
public StackClass() { // a constructor
stackRef = new int [100];
maxLen = 99;
Copyright © 2006 Addison-Wesley. All rights reserved. 1-17
maxLen = 99;
topPtr = -1;
};
public void push (int num) {…};
public void pop () {…};
public int top () {…};
public boolean empty () {…};
}
![Page 18: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/18.jpg)
An Example in Java
public class TestStack {
public static void main(String[] args) {
StackClass myStack = new StackClass();
myStack.push(42);
Copyright © 2006 Addison-Wesley. All rights reserved. 1-18
myStack.push(17);
System.out.println(“top of stack is:”+ myStack.top());
myStack.pop();
…
}
}
![Page 19: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/19.jpg)
Language Examples: C#
• Based on C++ and Java
• Adds two access modifiers, internal and protected internal
• All class instances are heap dynamic
• Default constructors are available for all
Copyright © 2006 Addison-Wesley. All rights reserved. 1-19
• Default constructors are available for all classes
• Garbage collection is used for most heap objects, so destructors are rarely used
• structs are lightweight classes that do not support inheritance
![Page 20: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/20.jpg)
Language Examples: C# (continued)
• Common solution to need for access to data members: accessor methods (getter and setter)
• C# provides properties as a way of implementing getters and setters without
Copyright © 2006 Addison-Wesley. All rights reserved. 1-20
implementing getters and setters without requiring explicit method calls
![Page 21: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/21.jpg)
C# Property Example
public class Weather {
public int DegreeDays { //** DegreeDays is a property
get {return degreeDays;}
set {degreeDays = value;}
}
private int degreeDays;
...
Copyright © 2006 Addison-Wesley. All rights reserved. 1-21
...
}
...
Weather w = new Weather();
int degreeDaysToday, oldDegreeDays;
...
w.DegreeDays = degreeDaysToday;
...
oldDegreeDays = w.DegreeDays;
![Page 22: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/22.jpg)
C# example
class CelsiusToFahrenhit
{
private double celsius;
public double celsius {
set { celsius = value; }
}
public double ToFahrenhit() {public double ToFahrenhit() {
return (celsius*9/5)+32;
}
}
static void Main(string[] args)
{
CelsiusToFahrenhit myCTOF = new CelsiusToFahrenhit();
myCTOF.Celsius = 37;
Console.WriteLine(myCTOF.ToFahrenhit());
}
Copyright © 2006 Addison-Wesley. All rights reserved. 1-22
![Page 23: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/23.jpg)
Parameterized Abstract Data Types
• Parameterized ADTs allow designing an ADT that can store any type elements
• Also known as generic classes
• C++ and Ada provide support for parameterized ADTs
Copyright © 2006 Addison-Wesley. All rights reserved. 1-23
parameterized ADTs
• Java 5.0 provides a restricted form of parameterized ADTs
• C# does not currently support parameterized classes
![Page 24: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/24.jpg)
Parameterized ADTs in C++
• Classes can be somewhat generic by writing parameterized constructor functions
template <class Type>class stack {private:
Type *stackPtr;…
Copyright © 2006 Addison-Wesley. All rights reserved. 1-24
…public:
stack (int size) {stk_ptr = new Type [size]; max_len = size - 1;top = -1;
}…
}stack<int> stk(100);
![Page 25: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/25.jpg)
Encapsulation Constructs
• Large programs have two special needs:
– Some means of organization, other than simply division into subprograms
– Some means of partial compilation (compilation units that are smaller than the whole program)
Copyright © 2006 Addison-Wesley. All rights reserved. 1-25
units that are smaller than the whole program)
• Obvious solution: a grouping of subprograms that are logically related into a unit that can be separately compiled (compilation units)
• Such collections are called encapsulation
![Page 26: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/26.jpg)
Encapsulation in C
• Files containing one or more subprograms can be independently compiled
• The interface is placed in a header file
• Problem: the linker does not check types
Copyright © 2006 Addison-Wesley. All rights reserved. 1-26
• Problem: the linker does not check types between a header and associated implementation
• #include preprocessor specification
![Page 27: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/27.jpg)
Encapsulation in C++
• Similar to C
• Addition of friend functions that have access to private members of the friend class
Copyright © 2006 Addison-Wesley. All rights reserved. 1-27
![Page 28: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/28.jpg)
C# Assemblies
• A collection of files that appear to be a single dynamic link library or executable
• Each file contains a module that can be separately compiled
• A DLL is a collection of classes and
Copyright © 2006 Addison-Wesley. All rights reserved. 1-28
• A DLL is a collection of classes and methods that are individually linked to an executing program
• C# has an access modifier called internal; an internal member of a class is visible to all classes in the assembly in which it appears
![Page 29: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/29.jpg)
Naming Encapsulations
• Large programs define many global names; need a way to divide into logical groupings
• A naming encapsulation is used to create a new scope for names
Copyright © 2006 Addison-Wesley. All rights reserved. 1-29
• C++ Namespaces
– Can place each library in its own namespace and qualify names used outside with the namespace
– C# also includes namespaces
![Page 30: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/30.jpg)
Namespaces in C++
Syntax
namespace identifier
{
entities
}
namespace::entities
#include <iostream>
using namespace std;
namespace first
{
int var = 5;
}
namespace second
Example:
namespace myNamespace
{
int a, b;
}
namespace::a
namespace::b
namespace second
{
double var = 3.1416;
}
int main () {
cout << first::var << endl;
cout << second::var <<
endl;
return 0;
}
Copyright © 2006 Addison-Wesley. All rights reserved. 1-30
![Page 31: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/31.jpg)
C++ example
#include <iostream>
using namespace std;
int main() {
float celsius;
Copyright © 2006 Addison-Wesley. All rights reserved. 1-31
float fahrenheit;
cout << "Enter Celsius temperature: ";
cin >> celsius;
fahrenheit = 1.8 * celsius + 32;
cout << "Fahrenheit = " << fahrenheit << endl;
return 0;
}
std::cout << "Enter Celsius temperature: ";std::cin >> celsius;
std::cout << "Fahrenheit = " << fahrenheit << std::endl;
![Page 32: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/32.jpg)
Naming Encapsulations (continued)
• Java Packages
– Packages can contain more than one class definition; classes in a package are partialfriends
– Clients of a package can use fully qualified
Copyright © 2006 Addison-Wesley. All rights reserved. 1-32
– Clients of a package can use fully qualified name or use the import declaration
![Page 33: Abstract Data Types and Encapsulation Concepts · Abstract Data Types and Encapsulation Concepts. Chapter 11 Topics • The Concept of Abstraction ... •The class is the encapsulation](https://reader035.vdocuments.site/reader035/viewer/2022062506/5f0a34c47e708231d42a8672/html5/thumbnails/33.jpg)
Summary
• The concept of ADTs and their use in program design was a milestone in the development of languages
• Two primary features of ADTs are the packaging of data with their associated operations and information hiding
Copyright © 2006 Addison-Wesley. All rights reserved. 1-33
information hiding
• C++ data abstraction is provided by classes
• Java’s data abstraction is similar to C++
• C++ allow parameterized ADTs
• C++, C#, and Java provide naming encapsulation