SlideShare a Scribd company logo
1
What is object-oriented paradigm?
2
A Simple Shooting Game
3
Object-Oriented Programming
 Think from the perspectives of data (“things”)
and their interactions with the external world
Object
Data
Method: interface and message
Class
 The need to handle similar “things”
American, French, Chinese, Korean  abstraction
Chinese: northerners, southerners  inheritance
Dynamic binding, polymorphism
4
What OOP Allows You?
 You analyze the objects with which you are
working (attributes and tasks on them)
 You pass messages to objects, requesting them
to take action
 The same message works differently when
applied to the various objects
 A method can work with different types of data,
without the need for separate method names
 Objects can inherit traits of previously created
objects
 Information can be hidden better
(Object-Oriented Programming Using C++)
5
Outline
 The Concept of Abstraction (Sec. 11.1)
 Introduction to Data Abstraction (Sec. 11.2)
 Design Issues (Sec. 11.3)
 Language Examples (Sec. 11.4)
 Parameterized Abstract Data Types (Sec. 11.5)
 Encapsulation Constructs (Sec. 11.6)
 Naming Encapsulations (Sec. 11.7)
6
Abstraction
 Two types of abstractions:
Process abstraction: subprograms
Data abstraction
 Floating-point data type as data abstraction
The programming language will provide (1) a way of
creating variables of the floating-point data type, and
(2) a set of operators for manipulating variables
Abstract away and hide the information of how the
floating-point number is presented and stored
 Need to allow programmers to do the same
Allow them to specify the data and the operators
7
Abstraction Data Type
 Abstract data type: a user-defined data type
Declaration of the type and protocol of operations on
objects of the type, i.e., type’s interface, are defined
in a syntactic unit; interface indep. of implementation
Representation of objects of the type is hidden from
program units that use these objects; only possible
operations are those provided in type's definition
class data type int
object variable i, j, k
method operators +, -, *, /
y = stack1.top()+3; vs y = (-x) + 3;
8
Advantages of Data Abstraction
 Advantage of having interface independent of
object representation or implementation of
operations:
Program organization, modifiability (everything
associated with a data structure is together),
separate compilation
 Advantage of 2nd condition (info. hiding)
Reliability: By hiding 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
9
Language Requirements for ADTs
 A syntactic unit to encapsulate type definition
 A method of making type names and
subprogram headers visible to clients, while
hiding actual definitions
 Some primitive operations that are built into the
language processor
 Example: an abstract data type for stack
create(stack), destroy(stack), empty(stack),
push(stack, element), pop(stack), top(stack)
Stack may be implemented with array, linked list, ...
10
Outline
 The Concept of Abstraction (Sec. 11.1)
 Introduction to Data Abstraction (Sec. 11.2)
 Design Issues (Sec. 11.3)
 Language Examples (Sec. 11.4)
 Parameterized Abstract Data Types (Sec. 11.5)
 Encapsulation Constructs (Sec. 11.6)
 Naming Encapsulations (Sec. 11.7)
11
Abstract Data Types in C++
 Based on C struct type and Simula 67
classes
 The class is the encapsulation device
All of the class instances of a class share a single
copy of the member functions
Each instance has own copy of class data members
Instances can be static, stack dynamic, heap
dynamic
 Information hiding
Private clause for hidden entities
Public clause for interface entities
Protected clause for inheritance (Chapter 12)
12
Member Functions Defined in Class
class Stack {
private:
int *stackPtr, maxLen, topPtr;
public:
Stack() { // a constructor
stackPtr = new int [100];
maxLen = 99; topPtr = -1; };
~Stack () {delete [] stackPtr;};
void push (int num) {…};
void pop () {…};
int top () {…};
int empty () {…};
}
Implicitly inlined  code
placed in caller’s code
13
Language Examples: C++ (cont.)
 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
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
14
Language Examples: C++ (cont.)
 Destructors
Functions to clean up after an instance is destroyed;
usually just to reclaim heap storage
Implicitly called when the object’s lifetime ends
Can be explicitly called
Name is the class name, preceded by a tilde (~)
 Friend functions or classes: to allow access to
private members to some unrelated units or
functions (see Section 11.6.4)
Necessary in C++
15
Uses of the Stack Class
void main()
{
int topOne;
Stack stk; //create an instance of
the Stack class
stk.push(42); // c.f., stk += 42
stk.push(17);
topOne = stk.top(); // c.f., &stk
stk.pop();
...
}
16
Member Func. Defined Separately
// Stack.h - header file for Stack class
class Stack {
private:
int *stackPtr, maxLen, topPtr;
public:
Stack(); //** A constructor
~Stack(); //** A destructor
void push(int);
void pop();
int top();
int empty();
}
17
Member Func. Defined Separately
// Stack.cpp - implementation for Stack
#include <iostream.h>
#include "Stack.h"
using std::cout;
Stack::Stack() { //** A constructor
stackPtr = new int [100];
maxLen = 99; topPtr = -1;}
Stack::~Stack() {delete[] stackPtr;};
void Stack::push(int number) {
if (topPtr == maxLen)
cerr << "Error in push--stack is fulln";
else stackPtr[++topPtr] = number;}
...
18
Abstract Data Types in Java
 Similar to C++, except:
All user-defined types are classes
All objects are allocated from the heap and accessed
through reference variables
Methods must be defined completely in a class
 an abstract data type in Java is defined and
declared in a single syntactic unit
Individual entities in classes have access control
modifiers (private or public), rather than clauses
No destructor  implicit garbage collection
19
An Example in Java
class StackClass {
private int [] stackRef;
private int maxLen, topIndex;
public StackClass() { // a constructor
stackRef = new int [100];
maxLen = 99; topPtr = -1;};
public void push (int num) {…};
public void pop () {…};
public int top () {…};
public boolean empty () {…};
}
20
An Example in Java
public class TstStack {
public static void main(String[] args) {
StackClass myStack = new StackClass();
myStack.push(42);
myStack.push(29);
System.out.println(“:“+myStack.top());
myStack.pop();
myStack.empty();
}
}
21
“Hello World!” Compared
(http://en.wikibooks.org/wiki/Hello_world_program)
C
#include <stdio.h>
int main(void){
print("Hello world!");
}
C++
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World!"<<endl;
}
Java
public class HelloWorld {
public static void
main(String[] args){
System.out.println
("Hello world!");
}
}
Ruby
puts 'Hello, world!'
or
class String
def say
puts self
end
end
'Hello, world!'.say
22
Outline
 The Concept of Abstraction (Sec. 11.1)
 Introduction to Data Abstraction (Sec. 11.2)
 Design Issues (Sec. 11.3)
 Language Examples (Sec. 11.4)
 Parameterized Abstract Data Types (Sec. 11.5)
 Encapsulation Constructs (Sec. 11.6)
 Naming Encapsulations (Sec. 11.7)
23
Parameterized ADTs
 Parameterized abstract data types allow
designing an ADT that can store any type
elements (among other things): only an issue for
static typed languages
 Also known as generic classes
 C++, Ada, Java 5.0, and C# 2005 provide
support for parameterized ADTs
24
Parameterized ADTs in C++
 Make Stack class generic in stack size by
writing parameterized constructor function
class Stack {
...
Stack (int size) {
stk_ptr = new int [size];
max_len = size - 1; top = -1; };
...
}
Stack stk(150);
25
Parameterized ADTs in C++ (cont.)
 Parameterize element type by templated class
template <class Type>
class Stack {
private:
Type *stackPtr;
int maxLen, topPtr;
public:
Stack(int size) {
stackPtr = new Type[size];
maxLen = size-1; topPtr = -1; }
...
Stack<double> stk(150);
Instantiated by compiler
26
Outline
 The Concept of Abstraction (Sec. 11.1)
 Introduction to Data Abstraction (Sec. 11.2)
 Design Issues (Sec. 11.3)
 Language Examples (Sec. 11.4)
 Parameterized Abstract Data Types (Sec. 11.5)
 Encapsulation Constructs (Sec. 11.6)
 Naming Encapsulations (Sec. 11.7)
27
Generalized Encapsulation
 Enclosure for an abstract data type defines a
SINGLE data type and its operations
 How about defining a more generalized
encapsulation construct that can define any
number of entries/types, any of which can be
selectively specified to be visible outside the
enclosing unit
Abstract data type is thus a special case
28
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)
 Obvious solution: a grouping of logically related
code and data into a unit that can be separately
compiled (compilation units)
 Such collections are called encapsulation
Example: libraries
29
Means of Encapsulation: Nested
Subprograms
 Organizing programs by nesting subprogram
definitions inside the logically larger
subprograms that use them
 Nested subprograms are supported in Ada,
Fortran 95, Python, and Ruby
30
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 between a header
and associated implementation
 #include preprocessor specification:
Used to include header files in client programs to
reference to compiled version of implementation file,
which is linked as libraries
31
Encapsulation in C++
 Can define header and code files, similar to
those of C
 Or, classes can be used for encapsulation
The class header file has only the prototypes of the
member functions
The member definitions are defined in a separate file
 Separate interface from implementation
 Friends provide a way to grant access to private
members of a class
Example: vector object multiplied by matrix object
32
Friend Functions in C++
class Matrix;
class Vector {
friend Vector multiply(const Matrix&,
const Vector&);
... }
class Matrix {
friend Vector multiply(const Matrix&,
const Vector&);
... }
Vector multiply(const Matrix& ml,
const Vector& vl) {
... }
33
Naming Encapsulations
 Encapsulation discussed so far is to provide a
way to organize programs into logical units for
separate compilation
 On the other hand, large programs define many
global names; need a way to avoid name
conflicts in libraries and client programs
developed by different programmers
 A naming encapsulation is used to create a new
scope for names
34
Naming Encapsulations (cont.)
 C++ namespaces
Can place each library in its own namespace and
qualify names used outside with the namespace
namespace MyStack {
... // stack declarations
}
Can be referenced in three ways:
MyStack::topPtr
using MyStack::topPtr; p = topPtr;
using namespace MyStack; p = topPtr;
C# also includes namespaces
35
Naming Encapsulations (cont.)
 Java Packages
Packages can contain more than one class definition;
classes in a package are partial friends
Clients of a package can use fully qualified name,
e.g., myStack.topPtr, or use import declaration,
e.g., import myStack.*;
 Ada Packages
Packages are defined in hierarchies which
correspond to file hierarchies
Visibility from a program unit is gained with the with
clause
36
Naming Encapsulations (cont.)
 Ruby classes are name encapsulations, but
Ruby also has modules
 Module:
Encapsulate libraries of related constants and
methods, whose names in a separate namespace
Unlike classes  cannot be instantiated or
subclassed, and they cannot define variables
Methods defined in a module must include the
module’s name
Access to the contents of a module is requested with
the require method
37
Ruby Modules
module MyStuff
PI = 3.1415
def MyStuff.mymethod1(p1)
...
end
def MyStuff.mymethod(p2)
...
end
end
Require ‘myStuffMod’
myStuff.mymethod1(x)
38
Summary
 Concept of ADTs and the use in program design
was a milestone in languages development
Two primary features are packaging of data with their
associated operations and information hiding
 C++ data abstraction is provided by classes
 Java’s data abstraction is similar to C++
 Ada, C++, Java 5.0, and C# 2005 support
parameterized ADTs
 C++, C#, Java, Ada, and Ruby provide naming
encapsulations

More Related Content

PDF
A COMPLETE FILE FOR C++
PPTX
Object oriented programming in C++
PDF
Classes and objects
PPT
Object-Oriented Programming Using C++
PPTX
Classes and objects
PPTX
classes and objects in C++
PPT
Object and class
PPTX
A COMPLETE FILE FOR C++
Object oriented programming in C++
Classes and objects
Object-Oriented Programming Using C++
Classes and objects
classes and objects in C++
Object and class

What's hot (20)

PPT
4 Classes & Objects
PDF
C++ Object oriented concepts & programming
PPTX
Data members and member functions
PPTX
Classes and objects in c++
PPTX
Classes and objects till 16 aug
PDF
Object oriented concepts
PPT
CLASSES AND OBJECTS IN C++ +2 COMPUTER SCIENCE
PPT
11 Using classes and objects
PPTX
Oop c++class(final).ppt
PPT
Java: Objects and Object References
PPT
Chapter 7 - Defining Your Own Classes - Part II
PDF
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
PPTX
C++ And Object in lecture3
PPTX
oop lecture 3
DOC
My c++
PPTX
Lecture 4. mte 407
PDF
Class and Objects in Java
PPTX
Pi j3.2 polymorphism
PDF
Object Oriented Programming With C++
PDF
Inheritance
4 Classes & Objects
C++ Object oriented concepts & programming
Data members and member functions
Classes and objects in c++
Classes and objects till 16 aug
Object oriented concepts
CLASSES AND OBJECTS IN C++ +2 COMPUTER SCIENCE
11 Using classes and objects
Oop c++class(final).ppt
Java: Objects and Object References
Chapter 7 - Defining Your Own Classes - Part II
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
C++ And Object in lecture3
oop lecture 3
My c++
Lecture 4. mte 407
Class and Objects in Java
Pi j3.2 polymorphism
Object Oriented Programming With C++
Inheritance
Ad

Viewers also liked (13)

PDF
Propositional logic
PPT
Communication primitives
PDF
Object Oriented Programming
PDF
CS9222 ADVANCED OPERATING SYSTEMS
PDF
Deductive Databases
DOC
Software Evaluation Checklist
PPT
Aggrement protocols
PDF
CS9222 ADVANCED OPERATING SYSTEMS
PPT
Chapter24
PPT
Syntax and semantics of propositional logic
PPTX
Java generics
PPT
Cipher techniques
PPT
Advantages and disadvantages of multimedia
Propositional logic
Communication primitives
Object Oriented Programming
CS9222 ADVANCED OPERATING SYSTEMS
Deductive Databases
Software Evaluation Checklist
Aggrement protocols
CS9222 ADVANCED OPERATING SYSTEMS
Chapter24
Syntax and semantics of propositional logic
Java generics
Cipher techniques
Advantages and disadvantages of multimedia
Ad

Similar to Object oriented programming using c++ (20)

PDF
Introduction to c#
PDF
Introduction To Csharp
PPTX
Chapter 2 OOP using C++ (Introduction).pptx
PPT
C++ classes
PDF
PPT
Introduction to csharp
PPT
Introduction to csharp
PPT
Introduction to csharp
PPT
Topic12ADTS_GenericDataStructures.ppt
PPT
Topic12ADTS_GenericDataStructures.ppt
PDF
C# Summer course - Lecture 3
PPTX
5. c sharp language overview part ii
PPT
Data structure and problem solving ch01.ppt
PPT
Introduction to csharp
PPT
Introduction to csharp
PPT
Introduction to-csharp-1229579367461426-1
PPT
Introduction To Csharp
PPT
Introduction to csharp
PPS
Introduction to CSharp
PPTX
Computer programming(C++): Structures
Introduction to c#
Introduction To Csharp
Chapter 2 OOP using C++ (Introduction).pptx
C++ classes
Introduction to csharp
Introduction to csharp
Introduction to csharp
Topic12ADTS_GenericDataStructures.ppt
Topic12ADTS_GenericDataStructures.ppt
C# Summer course - Lecture 3
5. c sharp language overview part ii
Data structure and problem solving ch01.ppt
Introduction to csharp
Introduction to csharp
Introduction to-csharp-1229579367461426-1
Introduction To Csharp
Introduction to csharp
Introduction to CSharp
Computer programming(C++): Structures

More from Hoang Nguyen (20)

PPTX
Rest api to integrate with your site
PPTX
How to build a rest api
PPTX
Api crash
PPTX
Smm and caching
PPTX
Optimizing shared caches in chip multiprocessors
PPTX
How analysis services caching works
PPTX
Hardware managed cache
PPTX
Directory based cache coherence
PPTX
Cache recap
PPTX
Python your new best friend
PPTX
Python language data types
PPTX
Python basics
PPTX
Programming for engineers in python
PPTX
Learning python
PPTX
Extending burp with python
PPTX
Cobol, lisp, and python
PPTX
Object oriented analysis
PPTX
Object model
PPTX
Data structures and algorithms
PPT
Data abstraction the walls
Rest api to integrate with your site
How to build a rest api
Api crash
Smm and caching
Optimizing shared caches in chip multiprocessors
How analysis services caching works
Hardware managed cache
Directory based cache coherence
Cache recap
Python your new best friend
Python language data types
Python basics
Programming for engineers in python
Learning python
Extending burp with python
Cobol, lisp, and python
Object oriented analysis
Object model
Data structures and algorithms
Data abstraction the walls

Recently uploaded (20)

PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Approach and Philosophy of On baking technology
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
A Presentation on Artificial Intelligence
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Encapsulation_ Review paper, used for researhc scholars
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Spectral efficient network and resource selection model in 5G networks
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Approach and Philosophy of On baking technology
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Review of recent advances in non-invasive hemoglobin estimation
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Diabetes mellitus diagnosis method based random forest with bat algorithm
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
Reach Out and Touch Someone: Haptics and Empathic Computing
NewMind AI Weekly Chronicles - August'25 Week I
Advanced methodologies resolving dimensionality complications for autism neur...
A Presentation on Artificial Intelligence
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Encapsulation_ Review paper, used for researhc scholars

Object oriented programming using c++

  • 3. 3 Object-Oriented Programming  Think from the perspectives of data (“things”) and their interactions with the external world Object Data Method: interface and message Class  The need to handle similar “things” American, French, Chinese, Korean  abstraction Chinese: northerners, southerners  inheritance Dynamic binding, polymorphism
  • 4. 4 What OOP Allows You?  You analyze the objects with which you are working (attributes and tasks on them)  You pass messages to objects, requesting them to take action  The same message works differently when applied to the various objects  A method can work with different types of data, without the need for separate method names  Objects can inherit traits of previously created objects  Information can be hidden better (Object-Oriented Programming Using C++)
  • 5. 5 Outline  The Concept of Abstraction (Sec. 11.1)  Introduction to Data Abstraction (Sec. 11.2)  Design Issues (Sec. 11.3)  Language Examples (Sec. 11.4)  Parameterized Abstract Data Types (Sec. 11.5)  Encapsulation Constructs (Sec. 11.6)  Naming Encapsulations (Sec. 11.7)
  • 6. 6 Abstraction  Two types of abstractions: Process abstraction: subprograms Data abstraction  Floating-point data type as data abstraction The programming language will provide (1) a way of creating variables of the floating-point data type, and (2) a set of operators for manipulating variables Abstract away and hide the information of how the floating-point number is presented and stored  Need to allow programmers to do the same Allow them to specify the data and the operators
  • 7. 7 Abstraction Data Type  Abstract data type: a user-defined data type Declaration of the type and protocol of operations on objects of the type, i.e., type’s interface, are defined in a syntactic unit; interface indep. of implementation Representation of objects of the type is hidden from program units that use these objects; only possible operations are those provided in type's definition class data type int object variable i, j, k method operators +, -, *, / y = stack1.top()+3; vs y = (-x) + 3;
  • 8. 8 Advantages of Data Abstraction  Advantage of having interface independent of object representation or implementation of operations: Program organization, modifiability (everything associated with a data structure is together), separate compilation  Advantage of 2nd condition (info. hiding) Reliability: By hiding 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
  • 9. 9 Language Requirements for ADTs  A syntactic unit to encapsulate type definition  A method of making type names and subprogram headers visible to clients, while hiding actual definitions  Some primitive operations that are built into the language processor  Example: an abstract data type for stack create(stack), destroy(stack), empty(stack), push(stack, element), pop(stack), top(stack) Stack may be implemented with array, linked list, ...
  • 10. 10 Outline  The Concept of Abstraction (Sec. 11.1)  Introduction to Data Abstraction (Sec. 11.2)  Design Issues (Sec. 11.3)  Language Examples (Sec. 11.4)  Parameterized Abstract Data Types (Sec. 11.5)  Encapsulation Constructs (Sec. 11.6)  Naming Encapsulations (Sec. 11.7)
  • 11. 11 Abstract Data Types in C++  Based on C struct type and Simula 67 classes  The class is the encapsulation device All of the class instances of a class share a single copy of the member functions Each instance has own copy of class data members Instances can be static, stack dynamic, heap dynamic  Information hiding Private clause for hidden entities Public clause for interface entities Protected clause for inheritance (Chapter 12)
  • 12. 12 Member Functions Defined in Class class Stack { private: int *stackPtr, maxLen, topPtr; public: Stack() { // a constructor stackPtr = new int [100]; maxLen = 99; topPtr = -1; }; ~Stack () {delete [] stackPtr;}; void push (int num) {…}; void pop () {…}; int top () {…}; int empty () {…}; } Implicitly inlined  code placed in caller’s code
  • 13. 13 Language Examples: C++ (cont.)  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 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
  • 14. 14 Language Examples: C++ (cont.)  Destructors Functions to clean up after an instance is destroyed; usually just to reclaim heap storage Implicitly called when the object’s lifetime ends Can be explicitly called Name is the class name, preceded by a tilde (~)  Friend functions or classes: to allow access to private members to some unrelated units or functions (see Section 11.6.4) Necessary in C++
  • 15. 15 Uses of the Stack Class void main() { int topOne; Stack stk; //create an instance of the Stack class stk.push(42); // c.f., stk += 42 stk.push(17); topOne = stk.top(); // c.f., &stk stk.pop(); ... }
  • 16. 16 Member Func. Defined Separately // Stack.h - header file for Stack class class Stack { private: int *stackPtr, maxLen, topPtr; public: Stack(); //** A constructor ~Stack(); //** A destructor void push(int); void pop(); int top(); int empty(); }
  • 17. 17 Member Func. Defined Separately // Stack.cpp - implementation for Stack #include <iostream.h> #include "Stack.h" using std::cout; Stack::Stack() { //** A constructor stackPtr = new int [100]; maxLen = 99; topPtr = -1;} Stack::~Stack() {delete[] stackPtr;}; void Stack::push(int number) { if (topPtr == maxLen) cerr << "Error in push--stack is fulln"; else stackPtr[++topPtr] = number;} ...
  • 18. 18 Abstract Data Types in Java  Similar to C++, except: All user-defined types are classes All objects are allocated from the heap and accessed through reference variables Methods must be defined completely in a class  an abstract data type in Java is defined and declared in a single syntactic unit Individual entities in classes have access control modifiers (private or public), rather than clauses No destructor  implicit garbage collection
  • 19. 19 An Example in Java class StackClass { private int [] stackRef; private int maxLen, topIndex; public StackClass() { // a constructor stackRef = new int [100]; maxLen = 99; topPtr = -1;}; public void push (int num) {…}; public void pop () {…}; public int top () {…}; public boolean empty () {…}; }
  • 20. 20 An Example in Java public class TstStack { public static void main(String[] args) { StackClass myStack = new StackClass(); myStack.push(42); myStack.push(29); System.out.println(“:“+myStack.top()); myStack.pop(); myStack.empty(); } }
  • 21. 21 “Hello World!” Compared (http://en.wikibooks.org/wiki/Hello_world_program) C #include <stdio.h> int main(void){ print("Hello world!"); } C++ #include <iostream> using namespace std; int main(){ cout<<"Hello World!"<<endl; } Java public class HelloWorld { public static void main(String[] args){ System.out.println ("Hello world!"); } } Ruby puts 'Hello, world!' or class String def say puts self end end 'Hello, world!'.say
  • 22. 22 Outline  The Concept of Abstraction (Sec. 11.1)  Introduction to Data Abstraction (Sec. 11.2)  Design Issues (Sec. 11.3)  Language Examples (Sec. 11.4)  Parameterized Abstract Data Types (Sec. 11.5)  Encapsulation Constructs (Sec. 11.6)  Naming Encapsulations (Sec. 11.7)
  • 23. 23 Parameterized ADTs  Parameterized abstract data types allow designing an ADT that can store any type elements (among other things): only an issue for static typed languages  Also known as generic classes  C++, Ada, Java 5.0, and C# 2005 provide support for parameterized ADTs
  • 24. 24 Parameterized ADTs in C++  Make Stack class generic in stack size by writing parameterized constructor function class Stack { ... Stack (int size) { stk_ptr = new int [size]; max_len = size - 1; top = -1; }; ... } Stack stk(150);
  • 25. 25 Parameterized ADTs in C++ (cont.)  Parameterize element type by templated class template <class Type> class Stack { private: Type *stackPtr; int maxLen, topPtr; public: Stack(int size) { stackPtr = new Type[size]; maxLen = size-1; topPtr = -1; } ... Stack<double> stk(150); Instantiated by compiler
  • 26. 26 Outline  The Concept of Abstraction (Sec. 11.1)  Introduction to Data Abstraction (Sec. 11.2)  Design Issues (Sec. 11.3)  Language Examples (Sec. 11.4)  Parameterized Abstract Data Types (Sec. 11.5)  Encapsulation Constructs (Sec. 11.6)  Naming Encapsulations (Sec. 11.7)
  • 27. 27 Generalized Encapsulation  Enclosure for an abstract data type defines a SINGLE data type and its operations  How about defining a more generalized encapsulation construct that can define any number of entries/types, any of which can be selectively specified to be visible outside the enclosing unit Abstract data type is thus a special case
  • 28. 28 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)  Obvious solution: a grouping of logically related code and data into a unit that can be separately compiled (compilation units)  Such collections are called encapsulation Example: libraries
  • 29. 29 Means of Encapsulation: Nested Subprograms  Organizing programs by nesting subprogram definitions inside the logically larger subprograms that use them  Nested subprograms are supported in Ada, Fortran 95, Python, and Ruby
  • 30. 30 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 between a header and associated implementation  #include preprocessor specification: Used to include header files in client programs to reference to compiled version of implementation file, which is linked as libraries
  • 31. 31 Encapsulation in C++  Can define header and code files, similar to those of C  Or, classes can be used for encapsulation The class header file has only the prototypes of the member functions The member definitions are defined in a separate file  Separate interface from implementation  Friends provide a way to grant access to private members of a class Example: vector object multiplied by matrix object
  • 32. 32 Friend Functions in C++ class Matrix; class Vector { friend Vector multiply(const Matrix&, const Vector&); ... } class Matrix { friend Vector multiply(const Matrix&, const Vector&); ... } Vector multiply(const Matrix& ml, const Vector& vl) { ... }
  • 33. 33 Naming Encapsulations  Encapsulation discussed so far is to provide a way to organize programs into logical units for separate compilation  On the other hand, large programs define many global names; need a way to avoid name conflicts in libraries and client programs developed by different programmers  A naming encapsulation is used to create a new scope for names
  • 34. 34 Naming Encapsulations (cont.)  C++ namespaces Can place each library in its own namespace and qualify names used outside with the namespace namespace MyStack { ... // stack declarations } Can be referenced in three ways: MyStack::topPtr using MyStack::topPtr; p = topPtr; using namespace MyStack; p = topPtr; C# also includes namespaces
  • 35. 35 Naming Encapsulations (cont.)  Java Packages Packages can contain more than one class definition; classes in a package are partial friends Clients of a package can use fully qualified name, e.g., myStack.topPtr, or use import declaration, e.g., import myStack.*;  Ada Packages Packages are defined in hierarchies which correspond to file hierarchies Visibility from a program unit is gained with the with clause
  • 36. 36 Naming Encapsulations (cont.)  Ruby classes are name encapsulations, but Ruby also has modules  Module: Encapsulate libraries of related constants and methods, whose names in a separate namespace Unlike classes  cannot be instantiated or subclassed, and they cannot define variables Methods defined in a module must include the module’s name Access to the contents of a module is requested with the require method
  • 37. 37 Ruby Modules module MyStuff PI = 3.1415 def MyStuff.mymethod1(p1) ... end def MyStuff.mymethod(p2) ... end end Require ‘myStuffMod’ myStuff.mymethod1(x)
  • 38. 38 Summary  Concept of ADTs and the use in program design was a milestone in languages development Two primary features are packaging of data with their associated operations and information hiding  C++ data abstraction is provided by classes  Java’s data abstraction is similar to C++  Ada, C++, Java 5.0, and C# 2005 support parameterized ADTs  C++, C#, Java, Ada, and Ruby provide naming encapsulations

Editor's Notes

  • #2: A set of objects interacting to solve a problem An object consists of data together with a set of methods to perform operations Objects are well-defined units whose descriptions are isolated in reuable classes  OOP
  • #3: How will you program this game, in terms of C and C++?