SlideShare a Scribd company logo
Introduction Summary References
SOFTWARE FRAMEWORKS
Muhammad Adil Raja
Roaming Researchers, Inc.
cbna
April 22, 2015
Introduction Summary References
OUTLINE I
1 INTRODUCTION
2 SUMMARY
3 REFERENCES
Introduction Summary References
INTRODUCTION
Software frameworks are one of the primary means for
large scale software reuse, and rapid application
development.
In this chapter we will examine the technologies that make
software frameworks possible.
The Tension between Reuse and Specialization.
Reuse of Code, Reuse of Concept.
High and Low Level Abstractions.
Some Example Frameworks.
Introduction Summary References
TENSION BETWEEN REUSE AND SPECIALIZATION
A truly general purpose tool cannot contain features
specific to any one application.
Solving most problems requires application specific
features.
How do you bridge the gap between general purpose and
application independent tools and an application that will
solve a real problem?
Introduction Summary References
REUSE OF CODE, REUSE OF CONCEPT
The solution comes from the two ways we have been using
inheritance from the beginning of the book.
Reuse of code.
Certain methods, call foundation methods, are defined in a
general purpose class.
These provide functionality that is common to many
applications.
Reuse of concept.
Other methods, called specialization methods, are defined
in a parent class, but overridden in child classes.
These provide the means to specialize an application to a
new situation.
Introduction Summary References
A SIMPLE EXAMPLE, A GUI SYSTEM
A simple example might be a framework for user
interfaces:
Class Window: methods.
foundation: setTitle, setWindowSize, moveWindowTo,
addMenu, repaint
specialization: mouseDown, keyPress, paint
class Childwindow: methods
paint, mouseDown, keyPress
The foundation method are applicable to any type of
window.
The deferred specialization methods are appropriate only
to one type of application.
Introduction Summary References
DEFERRED METHODS
By working with deferred methods, the application class
views the application in one way, and the child class in
another.
Introduction Summary References
REUSE OF HIGH LEVEL ABSTRACTIONS
Software frameworks provide a different type of reuse:
Conventional libraries of procedures provide a means for
reuse of low level abstractions (I/O libraries, math
functions, and so on).
Software frameworks provide a means for reuse of high
level abstractions, and still allow them to be specialized for
new situations.
Introduction Summary References
AN EXAMPLE OF A LOW LEVEL ABSTRACTION
SORTING EMPLOYEE RECORDS
Suppose we want to sort employee records. We could write the
following.
EXAMPLE
class Employee {
public :
s t r i n g name;
int salary ;
int startingYear ;
}
void sort ( Employee ∗ data [ ] , int n ) {
for ( int i = 1; i < n ; i ++) {
int j = i −1;
while ( j >= 0 &&
v [ j +1]−>startingYear < v [ j ]−>startingYear ) {
/ / swap elements
Employee ∗ temp = v [ j ] ;
v [ j ] = v [ j +1];
v [ j +1] = temp ;
j = j − 1;
}
}
}
But what happens if we want to change it?
Introduction Summary References
TYPES OF REUSE
We can reuse the idea of a merge sort, but cannot reuse
the binary without modifications to the original source
code.
Might want to sort on salary, instead of starting year.
Might want to do comparisons of string (e.g., name), not
integers.
Might want to sort a different type of structure.
To create an object-oriented software framework, we must
first ask ourselves what are the likely sources of change?
Introduction Summary References
A SORTING FRAMEWORK
EXAMPLE
class I n s e r t i o n S o r t e r {
public :
void sort ( ) {
int n = size ( ) ;
for ( int i = 1; i < n ; i ++) {
int j = i − 1;
while ( j >= 0 && lessThan ( j +1 , j ) ) {
swap( j , j +1);
j = j − 1;
}
}
}
private :
v irtual int size ( ) = 0; / / abstract methods
v irtual boolean lessThan ( int i , int j ) = 0;
v irtual void swap( int i , int j ) = 0;
}
The part that is common in made into a foundation method, the
part that changes are made into deferred methods.
Introduction Summary References
SPECIALIZING THE SORTING FRAMEWORK
To apply the framework to a new problem, we subclass and
override the deferred methods:
EXAMPLE
class EmployeeSorter : public I n s e r t i o n S o r t e r {
public :
EmployeeSorter ( Employee ∗ d [ ] , int n )
{ data = d ; sze = n ; }
private :
Employee ∗ data [ ] ;
int sze = n ;
v irtual int size ( ) { return sze ; }
v irtual bool lessThan ( int i , int j )
{ return data [ i ]−>startingYear < data [ j ]−>startingYear ; }
v irtual void swap ( int i , int j ) {
Employee ∗ temp = v [ i ] ;
v [ i ] = v [ j ] ;
v [ j ] = temp ;
}
}
Introduction Summary References
NOT ONE CLASS
The impression that a framework is always just one class is
wrong.
Often, a framework is a collection of many classes.
For example, a typical GUI framework might have.
Window classes.
Button or scroll bar classes.
Text box classes.
All can be specialized by the combination of foundation
methods for overall structure, and deferred methods for
specialization.
Introduction Summary References
FLEXIBILITY AND RIGIDITY
A framework can be tremendously helpful in allowing a
programmer to rapidly create new application, but only
when the application fits into the general structure
envisioned by the creator of the framework.
If an application falls outside that framework, then it can be
very difficult to overcome the framework.
For example, if the designer of the framework has not
encapsulated the right sources of variation in a method, or
has forgotten to declare a method as virtual, then it can be
very difficult to work with.
Introduction Summary References
AN EXAMPLE API
THE JAVA APPLET API
The Java Applet API is one simple example of a software
framework.
init() Invoked when the applet is initialized
start() Invoked to start the application
paint(Graphics) Invoked to repaint the window
stop() Invoked when the applet is halted
destroy() Invoked when the applet is terminated
Lots of
other classes for constructing buttons and menus, and so on.
Introduction Summary References
SIMULATION FRAMEWORK
Here is a framework like we might use in Chapter 7 (the
billiards game).
EXAMPLE
GraphicalObject = object
(∗ data f i e l d s ∗)
l i n k : GraphicalObject ;
region : Rect ;
(∗ i n i t i a l i z a t i o n function ∗)
procedure setRegion ( l e f t , top , r i gh t , bottom : integer ) ;
(∗ operations that graphical objects perform ∗)
procedure draw ;
procedure update ;
function i n t e r s e c t ( anObj : GraphicalObject ) : boolean ;
procedure hitBy ( anObj : GraphicalObject ) ;
end ;
Introduction Summary References
A GENERALIZED EVENT DRIVEN SIMULATION
FRAMEWORK I
A generalized discrete event-driven simulation can be formed
based around the class Event:
EXAMPLE
class Event {
public :
Event ( unsigned int t ) : time ( t ) { }
const unsigned int time ;
v irtual void processEvent ( ) = 0;
} ;
class eventComparison {
public :
bool operator ( ) ( event ∗ l e f t , event ∗ r i g h t )
{ return l e f t −>time > r ig h t −>time ; }
} ;
Introduction Summary References
A GENERALIZED EVENT DRIVEN SIMULATION
FRAMEWORK II
An event is an action that will take place at a specific time.
Discrete event driven simulations were the type of
application that helped drive the design of the first
object-oriented programming language, Simula. (Early
1960’s).
Introduction Summary References
THE SIMULATION CLASS I
CODE
class Simulation {
public :
Simulation ( ) : eventQueue ( ) , currentTime (0) { }
void scheduleEvent ( event ∗ newEvent ) { eventQueue . push ( newEvent ) ; }
void run ( ) ;
unsigned int currentTime ;
protected :
priority_queue <vector , eventComparison> eventQueue ;
} ;
void Simulation : : run ( ) {
/ / execute events u n t i l event queue becomes empty
while ( ! eventQueue . empty ( ) ) {
event ∗ nextEvent = eventQueue . top ( ) ;
eventQueue . pop ( ) ;
time = nextEvent−>time ;
nextEvent−>processEvent ( ) ;
delete nextEvent ;
}
}
Introduction Summary References
THE SIMULATION CLASS II
The book continues with the development of a simulation
based on this framework.
Introduction Summary References
SUMMARY
A framework is a way of organizing classes so as to solve
a class of related problems
The framework balances software reuse and the ability to
specialize a tool to a new application
The framework achieves this by combining inheritance of
code and inheritance of concept (overriding).
Frameworks can be developed for any application where
you can extract and generalize the ways in which code will
change.
Frameworks are great if your new application fits the
scheme of the designed, but very inflexible if it does not.
Introduction Summary References
REFERENCES
Images and content for developing these slides have been
taken from the follwoing book with the permission of the
author.
An Introduction to Object Oriented Programming, Timothy
Budd.
This presentation is developed with Beamer:
Darmstadt, spruce.

More Related Content

What's hot

A Comparative Analysis of Task Modeling Notations
A Comparative Analysis of Task Modeling NotationsA Comparative Analysis of Task Modeling Notations
A Comparative Analysis of Task Modeling Notations
Jean Vanderdonckt
 
Ch11lect1 ud
Ch11lect1 udCh11lect1 ud
Ch11lect1 ud
Ahmet Balkan
 
JAVA design patterns and Basic OOp concepts
JAVA design patterns and Basic OOp conceptsJAVA design patterns and Basic OOp concepts
JAVA design patterns and Basic OOp concepts
Rahul Malhotra
 
Design patterns
Design patternsDesign patterns
Design patterns
Luis Goldster
 
Lecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design PatternsLecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design Patterns
op205
 
Python: Common Design Patterns
Python: Common Design PatternsPython: Common Design Patterns
Python: Common Design Patterns
Damian T. Gordon
 
Ch10lect1 ud
Ch10lect1 udCh10lect1 ud
Ch10lect1 ud
Ahmet Balkan
 
[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture
Ivano Malavolta
 
Java Course 11: Design Patterns
Java Course 11: Design PatternsJava Course 11: Design Patterns
Java Course 11: Design Patterns
Anton Keks
 

What's hot (12)

A Comparative Analysis of Task Modeling Notations
A Comparative Analysis of Task Modeling NotationsA Comparative Analysis of Task Modeling Notations
A Comparative Analysis of Task Modeling Notations
 
Ch11lect1 ud
Ch11lect1 udCh11lect1 ud
Ch11lect1 ud
 
JAVA design patterns and Basic OOp concepts
JAVA design patterns and Basic OOp conceptsJAVA design patterns and Basic OOp concepts
JAVA design patterns and Basic OOp concepts
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Lecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design PatternsLecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design Patterns
 
Python: Common Design Patterns
Python: Common Design PatternsPython: Common Design Patterns
Python: Common Design Patterns
 
Ch08lect2 ud
Ch08lect2 udCh08lect2 ud
Ch08lect2 ud
 
Ch06lect1 ud
Ch06lect1 udCh06lect1 ud
Ch06lect1 ud
 
Ch08lect3 ud
Ch08lect3 udCh08lect3 ud
Ch08lect3 ud
 
Ch10lect1 ud
Ch10lect1 udCh10lect1 ud
Ch10lect1 ud
 
[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture[2016/2017] Introduction to Software Architecture
[2016/2017] Introduction to Software Architecture
 
Java Course 11: Design Patterns
Java Course 11: Design PatternsJava Course 11: Design Patterns
Java Course 11: Design Patterns
 

Viewers also liked

CSCI 383 Lecture 3 and 4: Abstraction
CSCI 383 Lecture 3 and 4: AbstractionCSCI 383 Lecture 3 and 4: Abstraction
CSCI 383 Lecture 3 and 4: Abstraction
JI Ruan
 
The power of abstraction
The power of abstractionThe power of abstraction
The power of abstractionACMBangalore
 
Abstracting and indexing_Dr. Guenther Eichhorn
Abstracting and indexing_Dr. Guenther EichhornAbstracting and indexing_Dr. Guenther Eichhorn
Abstracting and indexing_Dr. Guenther Eichhorn
Margarita Saydalieva
 
Abstraction and Encapsulation
Abstraction and EncapsulationAbstraction and Encapsulation
Abstraction and Encapsulation
Haris Bin Zahid
 
Abstracting
AbstractingAbstracting
Abstracting
Sheila Webber
 
Abstraction
AbstractionAbstraction
Abstraction
adil raja
 
E-Journals: usage, value, impact and cost
E-Journals: usage, value, impact and cost E-Journals: usage, value, impact and cost
E-Journals: usage, value, impact and cost
Research Information Network
 
SDN Abstractions
SDN AbstractionsSDN Abstractions
SDN Abstractions
martin_casado
 
1. indexing and abstracting
1. indexing and abstracting1. indexing and abstracting
1. indexing and abstractingMoses Mbanje
 
E Journals General Features And Characteristics
E Journals  General Features And CharacteristicsE Journals  General Features And Characteristics
E Journals General Features And Characteristics
Kishor Satpathy
 
Introduction to e journals
Introduction to e journalsIntroduction to e journals
Introduction to e journals
Kusturie Moodley
 
World Wide Web and Internet
World Wide Web and InternetWorld Wide Web and Internet
World Wide Web and InternetJanecatalla
 
PowerPoint presentation on Online Courses
PowerPoint presentation on Online Courses PowerPoint presentation on Online Courses
PowerPoint presentation on Online Courses kireland31
 
Presentation on World Wide Web (WWW)
Presentation on World Wide Web (WWW)Presentation on World Wide Web (WWW)
Presentation on World Wide Web (WWW)
Mohak Jain
 
journal presentation
 journal presentation journal presentation
journal presentation
Amlendra Yadav
 
E Learning Presentation
E Learning PresentationE Learning Presentation
E Learning PresentationLBG
 

Viewers also liked (19)

CSCI 383 Lecture 3 and 4: Abstraction
CSCI 383 Lecture 3 and 4: AbstractionCSCI 383 Lecture 3 and 4: Abstraction
CSCI 383 Lecture 3 and 4: Abstraction
 
The power of abstraction
The power of abstractionThe power of abstraction
The power of abstraction
 
Abstracting and indexing_Dr. Guenther Eichhorn
Abstracting and indexing_Dr. Guenther EichhornAbstracting and indexing_Dr. Guenther Eichhorn
Abstracting and indexing_Dr. Guenther Eichhorn
 
Abstraction and Encapsulation
Abstraction and EncapsulationAbstraction and Encapsulation
Abstraction and Encapsulation
 
Abstracting
AbstractingAbstracting
Abstracting
 
Abstraction
AbstractionAbstraction
Abstraction
 
E-Journals: usage, value, impact and cost
E-Journals: usage, value, impact and cost E-Journals: usage, value, impact and cost
E-Journals: usage, value, impact and cost
 
SDN Abstractions
SDN AbstractionsSDN Abstractions
SDN Abstractions
 
1. indexing and abstracting
1. indexing and abstracting1. indexing and abstracting
1. indexing and abstracting
 
E Journals General Features And Characteristics
E Journals  General Features And CharacteristicsE Journals  General Features And Characteristics
E Journals General Features And Characteristics
 
Abstracts & abstracting
Abstracts & abstractingAbstracts & abstracting
Abstracts & abstracting
 
Introduction to e journals
Introduction to e journalsIntroduction to e journals
Introduction to e journals
 
World wide web
World wide webWorld wide web
World wide web
 
E journals ppt latest
E   journals ppt latestE   journals ppt latest
E journals ppt latest
 
World Wide Web and Internet
World Wide Web and InternetWorld Wide Web and Internet
World Wide Web and Internet
 
PowerPoint presentation on Online Courses
PowerPoint presentation on Online Courses PowerPoint presentation on Online Courses
PowerPoint presentation on Online Courses
 
Presentation on World Wide Web (WWW)
Presentation on World Wide Web (WWW)Presentation on World Wide Web (WWW)
Presentation on World Wide Web (WWW)
 
journal presentation
 journal presentation journal presentation
journal presentation
 
E Learning Presentation
E Learning PresentationE Learning Presentation
E Learning Presentation
 

Similar to Software Frameworks

Design Patterns
Design PatternsDesign Patterns
Design Patterns
adil raja
 
TWINS: OOP and FP - Warburton
TWINS: OOP and FP - WarburtonTWINS: OOP and FP - Warburton
TWINS: OOP and FP - Warburton
Codemotion
 
14 operator overloading
14 operator overloading14 operator overloading
14 operator overloading
Docent Education
 
Twins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingTwins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional Programming
RichardWarburton
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Raffi Khatchadourian
 
Design patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjsDesign patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjs
Ravi Bhadauria
 
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
Akhil Mittal
 
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Make Mannan
 
4.1 Function Templates,Overlaoding Function Templates.pptx
4.1 Function Templates,Overlaoding Function Templates.pptx4.1 Function Templates,Overlaoding Function Templates.pptx
4.1 Function Templates,Overlaoding Function Templates.pptx
tirseishwaricomp
 
Interoduction to c++
Interoduction to c++Interoduction to c++
Interoduction to c++
Amresh Raj
 
Abstraction
Abstraction Abstraction
Abstraction
KrishnaChauhan499414
 
Abstraction
AbstractionAbstraction
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2
Savio Sebastian
 
Software development effort reduction with Co-op
Software development effort reduction with Co-opSoftware development effort reduction with Co-op
Software development effort reduction with Co-op
lbergmans
 
Object Oriented Principle&rsquo;s
Object Oriented Principle&rsquo;sObject Oriented Principle&rsquo;s
Object Oriented Principle&rsquo;s
vivek p s
 
Book management system
Book management systemBook management system
Book management system
SHARDA SHARAN
 
Oop concept in c++ by MUhammed Thanveer Melayi
Oop concept in c++ by MUhammed Thanveer MelayiOop concept in c++ by MUhammed Thanveer Melayi
Oop concept in c++ by MUhammed Thanveer Melayi
Muhammed Thanveer M
 
Restructuring functions with low cohesion
Restructuring functions with low cohesionRestructuring functions with low cohesion
Restructuring functions with low cohesion
Aditya Kumar Ghosh
 
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
NicheTech Com. Solutions Pvt. Ltd.
 

Similar to Software Frameworks (20)

Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
TWINS: OOP and FP - Warburton
TWINS: OOP and FP - WarburtonTWINS: OOP and FP - Warburton
TWINS: OOP and FP - Warburton
 
14 operator overloading
14 operator overloading14 operator overloading
14 operator overloading
 
Twins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingTwins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional Programming
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
 
Design patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjsDesign patterns in java script, jquery, angularjs
Design patterns in java script, jquery, angularjs
 
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
Diving in OOP (Day 1) : Polymorphism and Inheritance (Early Binding/Compile T...
 
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
 
4.1 Function Templates,Overlaoding Function Templates.pptx
4.1 Function Templates,Overlaoding Function Templates.pptx4.1 Function Templates,Overlaoding Function Templates.pptx
4.1 Function Templates,Overlaoding Function Templates.pptx
 
Interoduction to c++
Interoduction to c++Interoduction to c++
Interoduction to c++
 
Abstraction
Abstraction Abstraction
Abstraction
 
Abstraction
AbstractionAbstraction
Abstraction
 
Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2Design Patterns - Part 1 of 2
Design Patterns - Part 1 of 2
 
Software development effort reduction with Co-op
Software development effort reduction with Co-opSoftware development effort reduction with Co-op
Software development effort reduction with Co-op
 
Object Oriented Principle&rsquo;s
Object Oriented Principle&rsquo;sObject Oriented Principle&rsquo;s
Object Oriented Principle&rsquo;s
 
Book management system
Book management systemBook management system
Book management system
 
Oop concept in c++ by MUhammed Thanveer Melayi
Oop concept in c++ by MUhammed Thanveer MelayiOop concept in c++ by MUhammed Thanveer Melayi
Oop concept in c++ by MUhammed Thanveer Melayi
 
Restructuring functions with low cohesion
Restructuring functions with low cohesionRestructuring functions with low cohesion
Restructuring functions with low cohesion
 
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
Objective of c in IOS , iOS Live Project Training Ahmedabad, MCA Live Project...
 
OOP in java
OOP in javaOOP in java
OOP in java
 

More from adil raja

ANNs.pdf
ANNs.pdfANNs.pdf
ANNs.pdf
adil raja
 
A Software Requirements Specification
A Software Requirements SpecificationA Software Requirements Specification
A Software Requirements Specification
adil raja
 
NUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
NUAV - A Testbed for Development of Autonomous Unmanned Aerial VehiclesNUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
NUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
adil raja
 
DevOps Demystified
DevOps DemystifiedDevOps Demystified
DevOps Demystified
adil raja
 
On Research (And Development)
On Research (And Development)On Research (And Development)
On Research (And Development)
adil raja
 
Simulators as Drivers of Cutting Edge Research
Simulators as Drivers of Cutting Edge ResearchSimulators as Drivers of Cutting Edge Research
Simulators as Drivers of Cutting Edge Research
adil raja
 
The Knock Knock Protocol
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocol
adil raja
 
File Transfer Through Sockets
File Transfer Through SocketsFile Transfer Through Sockets
File Transfer Through Sockets
adil raja
 
Remote Command Execution
Remote Command ExecutionRemote Command Execution
Remote Command Execution
adil raja
 
CMM Level 3 Assessment of Xavor Pakistan
CMM Level 3 Assessment of Xavor PakistanCMM Level 3 Assessment of Xavor Pakistan
CMM Level 3 Assessment of Xavor Pakistan
adil raja
 
Data Warehousing
Data WarehousingData Warehousing
Data Warehousing
adil raja
 
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
adil raja
 
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
adil raja
 
Real-Time Non-Intrusive Speech Quality Estimation for VoIP
Real-Time Non-Intrusive Speech Quality Estimation for VoIPReal-Time Non-Intrusive Speech Quality Estimation for VoIP
Real-Time Non-Intrusive Speech Quality Estimation for VoIP
adil raja
 
VoIP
VoIPVoIP
VoIP
adil raja
 
ULMAN GUI Specifications
ULMAN GUI SpecificationsULMAN GUI Specifications
ULMAN GUI Specifications
adil raja
 
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
adil raja
 
ULMAN-GUI
ULMAN-GUIULMAN-GUI
ULMAN-GUI
adil raja
 
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
adil raja
 

More from adil raja (20)

ANNs.pdf
ANNs.pdfANNs.pdf
ANNs.pdf
 
A Software Requirements Specification
A Software Requirements SpecificationA Software Requirements Specification
A Software Requirements Specification
 
NUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
NUAV - A Testbed for Development of Autonomous Unmanned Aerial VehiclesNUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
NUAV - A Testbed for Development of Autonomous Unmanned Aerial Vehicles
 
DevOps Demystified
DevOps DemystifiedDevOps Demystified
DevOps Demystified
 
On Research (And Development)
On Research (And Development)On Research (And Development)
On Research (And Development)
 
Simulators as Drivers of Cutting Edge Research
Simulators as Drivers of Cutting Edge ResearchSimulators as Drivers of Cutting Edge Research
Simulators as Drivers of Cutting Edge Research
 
The Knock Knock Protocol
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocol
 
File Transfer Through Sockets
File Transfer Through SocketsFile Transfer Through Sockets
File Transfer Through Sockets
 
Remote Command Execution
Remote Command ExecutionRemote Command Execution
Remote Command Execution
 
Thesis
ThesisThesis
Thesis
 
CMM Level 3 Assessment of Xavor Pakistan
CMM Level 3 Assessment of Xavor PakistanCMM Level 3 Assessment of Xavor Pakistan
CMM Level 3 Assessment of Xavor Pakistan
 
Data Warehousing
Data WarehousingData Warehousing
Data Warehousing
 
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
 
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
Implementation of a Non-Intrusive Speech Quality Assessment Tool on a Mid-Net...
 
Real-Time Non-Intrusive Speech Quality Estimation for VoIP
Real-Time Non-Intrusive Speech Quality Estimation for VoIPReal-Time Non-Intrusive Speech Quality Estimation for VoIP
Real-Time Non-Intrusive Speech Quality Estimation for VoIP
 
VoIP
VoIPVoIP
VoIP
 
ULMAN GUI Specifications
ULMAN GUI SpecificationsULMAN GUI Specifications
ULMAN GUI Specifications
 
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
 
ULMAN-GUI
ULMAN-GUIULMAN-GUI
ULMAN-GUI
 
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
Modeling the Effect of Packet Loss on Speech Quality: Genetic Programming Bas...
 

Recently uploaded

APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 

Recently uploaded (20)

APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 

Software Frameworks

  • 1. Introduction Summary References SOFTWARE FRAMEWORKS Muhammad Adil Raja Roaming Researchers, Inc. cbna April 22, 2015
  • 2. Introduction Summary References OUTLINE I 1 INTRODUCTION 2 SUMMARY 3 REFERENCES
  • 3. Introduction Summary References INTRODUCTION Software frameworks are one of the primary means for large scale software reuse, and rapid application development. In this chapter we will examine the technologies that make software frameworks possible. The Tension between Reuse and Specialization. Reuse of Code, Reuse of Concept. High and Low Level Abstractions. Some Example Frameworks.
  • 4. Introduction Summary References TENSION BETWEEN REUSE AND SPECIALIZATION A truly general purpose tool cannot contain features specific to any one application. Solving most problems requires application specific features. How do you bridge the gap between general purpose and application independent tools and an application that will solve a real problem?
  • 5. Introduction Summary References REUSE OF CODE, REUSE OF CONCEPT The solution comes from the two ways we have been using inheritance from the beginning of the book. Reuse of code. Certain methods, call foundation methods, are defined in a general purpose class. These provide functionality that is common to many applications. Reuse of concept. Other methods, called specialization methods, are defined in a parent class, but overridden in child classes. These provide the means to specialize an application to a new situation.
  • 6. Introduction Summary References A SIMPLE EXAMPLE, A GUI SYSTEM A simple example might be a framework for user interfaces: Class Window: methods. foundation: setTitle, setWindowSize, moveWindowTo, addMenu, repaint specialization: mouseDown, keyPress, paint class Childwindow: methods paint, mouseDown, keyPress The foundation method are applicable to any type of window. The deferred specialization methods are appropriate only to one type of application.
  • 7. Introduction Summary References DEFERRED METHODS By working with deferred methods, the application class views the application in one way, and the child class in another.
  • 8. Introduction Summary References REUSE OF HIGH LEVEL ABSTRACTIONS Software frameworks provide a different type of reuse: Conventional libraries of procedures provide a means for reuse of low level abstractions (I/O libraries, math functions, and so on). Software frameworks provide a means for reuse of high level abstractions, and still allow them to be specialized for new situations.
  • 9. Introduction Summary References AN EXAMPLE OF A LOW LEVEL ABSTRACTION SORTING EMPLOYEE RECORDS Suppose we want to sort employee records. We could write the following. EXAMPLE class Employee { public : s t r i n g name; int salary ; int startingYear ; } void sort ( Employee ∗ data [ ] , int n ) { for ( int i = 1; i < n ; i ++) { int j = i −1; while ( j >= 0 && v [ j +1]−>startingYear < v [ j ]−>startingYear ) { / / swap elements Employee ∗ temp = v [ j ] ; v [ j ] = v [ j +1]; v [ j +1] = temp ; j = j − 1; } } } But what happens if we want to change it?
  • 10. Introduction Summary References TYPES OF REUSE We can reuse the idea of a merge sort, but cannot reuse the binary without modifications to the original source code. Might want to sort on salary, instead of starting year. Might want to do comparisons of string (e.g., name), not integers. Might want to sort a different type of structure. To create an object-oriented software framework, we must first ask ourselves what are the likely sources of change?
  • 11. Introduction Summary References A SORTING FRAMEWORK EXAMPLE class I n s e r t i o n S o r t e r { public : void sort ( ) { int n = size ( ) ; for ( int i = 1; i < n ; i ++) { int j = i − 1; while ( j >= 0 && lessThan ( j +1 , j ) ) { swap( j , j +1); j = j − 1; } } } private : v irtual int size ( ) = 0; / / abstract methods v irtual boolean lessThan ( int i , int j ) = 0; v irtual void swap( int i , int j ) = 0; } The part that is common in made into a foundation method, the part that changes are made into deferred methods.
  • 12. Introduction Summary References SPECIALIZING THE SORTING FRAMEWORK To apply the framework to a new problem, we subclass and override the deferred methods: EXAMPLE class EmployeeSorter : public I n s e r t i o n S o r t e r { public : EmployeeSorter ( Employee ∗ d [ ] , int n ) { data = d ; sze = n ; } private : Employee ∗ data [ ] ; int sze = n ; v irtual int size ( ) { return sze ; } v irtual bool lessThan ( int i , int j ) { return data [ i ]−>startingYear < data [ j ]−>startingYear ; } v irtual void swap ( int i , int j ) { Employee ∗ temp = v [ i ] ; v [ i ] = v [ j ] ; v [ j ] = temp ; } }
  • 13. Introduction Summary References NOT ONE CLASS The impression that a framework is always just one class is wrong. Often, a framework is a collection of many classes. For example, a typical GUI framework might have. Window classes. Button or scroll bar classes. Text box classes. All can be specialized by the combination of foundation methods for overall structure, and deferred methods for specialization.
  • 14. Introduction Summary References FLEXIBILITY AND RIGIDITY A framework can be tremendously helpful in allowing a programmer to rapidly create new application, but only when the application fits into the general structure envisioned by the creator of the framework. If an application falls outside that framework, then it can be very difficult to overcome the framework. For example, if the designer of the framework has not encapsulated the right sources of variation in a method, or has forgotten to declare a method as virtual, then it can be very difficult to work with.
  • 15. Introduction Summary References AN EXAMPLE API THE JAVA APPLET API The Java Applet API is one simple example of a software framework. init() Invoked when the applet is initialized start() Invoked to start the application paint(Graphics) Invoked to repaint the window stop() Invoked when the applet is halted destroy() Invoked when the applet is terminated Lots of other classes for constructing buttons and menus, and so on.
  • 16. Introduction Summary References SIMULATION FRAMEWORK Here is a framework like we might use in Chapter 7 (the billiards game). EXAMPLE GraphicalObject = object (∗ data f i e l d s ∗) l i n k : GraphicalObject ; region : Rect ; (∗ i n i t i a l i z a t i o n function ∗) procedure setRegion ( l e f t , top , r i gh t , bottom : integer ) ; (∗ operations that graphical objects perform ∗) procedure draw ; procedure update ; function i n t e r s e c t ( anObj : GraphicalObject ) : boolean ; procedure hitBy ( anObj : GraphicalObject ) ; end ;
  • 17. Introduction Summary References A GENERALIZED EVENT DRIVEN SIMULATION FRAMEWORK I A generalized discrete event-driven simulation can be formed based around the class Event: EXAMPLE class Event { public : Event ( unsigned int t ) : time ( t ) { } const unsigned int time ; v irtual void processEvent ( ) = 0; } ; class eventComparison { public : bool operator ( ) ( event ∗ l e f t , event ∗ r i g h t ) { return l e f t −>time > r ig h t −>time ; } } ;
  • 18. Introduction Summary References A GENERALIZED EVENT DRIVEN SIMULATION FRAMEWORK II An event is an action that will take place at a specific time. Discrete event driven simulations were the type of application that helped drive the design of the first object-oriented programming language, Simula. (Early 1960’s).
  • 19. Introduction Summary References THE SIMULATION CLASS I CODE class Simulation { public : Simulation ( ) : eventQueue ( ) , currentTime (0) { } void scheduleEvent ( event ∗ newEvent ) { eventQueue . push ( newEvent ) ; } void run ( ) ; unsigned int currentTime ; protected : priority_queue <vector , eventComparison> eventQueue ; } ; void Simulation : : run ( ) { / / execute events u n t i l event queue becomes empty while ( ! eventQueue . empty ( ) ) { event ∗ nextEvent = eventQueue . top ( ) ; eventQueue . pop ( ) ; time = nextEvent−>time ; nextEvent−>processEvent ( ) ; delete nextEvent ; } }
  • 20. Introduction Summary References THE SIMULATION CLASS II The book continues with the development of a simulation based on this framework.
  • 21. Introduction Summary References SUMMARY A framework is a way of organizing classes so as to solve a class of related problems The framework balances software reuse and the ability to specialize a tool to a new application The framework achieves this by combining inheritance of code and inheritance of concept (overriding). Frameworks can be developed for any application where you can extract and generalize the ways in which code will change. Frameworks are great if your new application fits the scheme of the designed, but very inflexible if it does not.
  • 22. Introduction Summary References REFERENCES Images and content for developing these slides have been taken from the follwoing book with the permission of the author. An Introduction to Object Oriented Programming, Timothy Budd. This presentation is developed with Beamer: Darmstadt, spruce.