Programming Languages and Paradigms
Download
Report
Transcript Programming Languages and Paradigms
Programming Languages
and Paradigms
Object-Oriented Programming
Object-Oriented Programming
Objects, classes, fields, methods
Encapsulation
Inheritance
Abstraction and reuse
Polymorphism and dynamic binding
Program units: Classes
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 2
Object
Definition: a thing that has identity, state,
and behavior
identity: a distinguished instance of a class
state: collection of values for its variables
behavior: capability to execute methods
* variables and methods are defined in a class
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 3
Class
Definition: a collection of data (fields/
variables) and methods that operate on
that data
6/15/2005
data/methods define the contents/capabilities
of the instances (objects) of the class
a class can be viewed as a factory for objects
a class defines a recipe for its objects
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 4
Instantiation
Object creation
Memory is allocated for the object’s fields
as defined in the class
Initialization is specified through a
constructor
6/15/2005
a special method invoked when objects are
created
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 5
Encapsulation
A key OO concept: “Information Hiding”
Key points
6/15/2005
The user of an object should have access only
to those methods (or data) that are essential
Unnecessary implementation details should be
hidden from the user
In Java/C++, use classes and access modifiers
(public, private, protected)
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 6
Inheritance
Inheritance:
Subclass relationship
programming language feature that allows for the
implicit definition of variables/methods for a class
through an existing class
B is a subclass of A
B inherits all definitions (variables/methods) in A
Superclass variables, subclass objects
6/15/2005
Polymorphism and dynamic binding
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 7
Abstraction
OOP is about abstraction
Encapsulation and Inheritance are
examples of abstraction
6/15/2005
What does the verb “abstract” mean?
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 8
Reuse
Inheritance encourages software reuse
Existing code need not be rewritten
Successful reuse occurs only through
careful planning and design
6/15/2005
when defining classes, anticipate future
modifications and extensions
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 9
Polymorphism
“Many forms”
Example:
allow several definitions under a single method name
“move” means something for a person object but
means something else for a car object
Dynamic binding:
6/15/2005
capability of an implementation to distinguish
between the different forms during run-time
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 10
Java and C++ Comparison
Program Structure and Execution
Encapsulation and Inheritance
Objects, Variables, and Arrays
Constructors
Methods, Operators, and Binding
Containers and Reuse
GUI Programming
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 11
Program Structure
Class definition similar in Java and C++
Java: two types of programs
application (with main() function)
applet (typically embedded in a web page)
C++
6/15/2005
a program is (still) a collection of functions
that may use objects and classes
main() function serves as driver
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 12
Program Execution
Java: Virtual Machine (VM)
programs: both compiled and interpreted
compiler produces .class from .java
VM loads .class file(s) as needed
C++: compiled, linked, and loaded
6/15/2005
modules separately compiled
linked to produce executable
static vs dynamic libraries
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 13
Encapsulation
Enforced through access keywords
In Java
public: for interface
private: to make implementation inaccessible
protected: access for subclasses only
each member is prefixed with a keyword
In C++
6/15/2005
public, private, and protected sections
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 14
Breaking Encapsulation
Possible in C++ through the friend keyword
A method or class may be declared as a friend of
an existing class
Allows access to private members
Java: package access-level (no specifier) allow
classes under the same package to access each
other’s attributes
6/15/2005
But private still means accessible to that class only
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 15
Inheritance
Feature that allows a class to be defined based
on another class
Java and C++ difference
methods and attributes are inherited
Java: public class A extends B { … }
C++: class A: public B { … }
(different types of inheritance)
Multiple inheritance possible in C++, not in Java
6/15/2005
But in Java, one may implement several interfaces
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 16
Objects and Identity
Questions:
How/when are objects created?
What is the relationship between a variable
and an object?
Difference between Java and C++
6/15/2005
distinction between primitive (built-in) type
variables and variables for objects
reference relationship between variable and
actual object
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 17
Variables for Built-in Types
Variables for built-in types (C++ and Java)
int x;
…
x = 5;
6/15/2005
X
X
5
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 18
Reference Variables
(in Java)
Reference type variables
X
Button x;
…
x = new Button(“click”);
6/15/2005
Button Object
X
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
“click”
L6: OOP
Slide 19
Variables That “hold” Objects
(in C++)
Declaration of an object variable allocates
space for the object
X
Button x(“click”);
“click”
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 20
Pointers (in C++)
Variables can be explicitly declared as
pointers to objects
X
Button *x;
…
x = new Button(“click”);
6/15/2005
Button Object
X
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
“click”
L6: OOP
Slide 21
Disposing of
Allocated Memory
In Java, garbage collection is automatic
Memory allocated objects are reclaimed when
no variables refer to them
Need to set reference variables to null when
the object is no longer needed
In C++, object destruction is the
programmer’s responsibility using the
delete keyword
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 22
delete in C++
There should be a delete for every new
SomeClass *x = new SomeClass(…);
// … use object pointed to by x
delete x; // done using object
Memory leak
6/15/2005
Occurs when you forget to delete
Wasted memory
Can this occur in Java?
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 23
Object Construction
Constructor
Default Constructor
place where you include code that initializes
the object
no additional info required
User-defined Constructor
6/15/2005
with parameters that specify values or sizes
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 24
Arrays
int x[20]; Button b[20];
Valid declarations in C++, not in Java
Creates 20 ints and 20 Button objects
In Java,
6/15/2005
Declaration and array creation separate
For object arrays, individual object creation
necessary
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 25
Pointers and Arrays
In C++, there is a close relationship
between pointers and arrays
Instead of int x[20]; can issue
int *x; x = new int[20];
to allow for dynamic allocation
6/15/2005
Usage of the array (e.g., x[3] = 5;) identical in
both cases
To deallocate, use delete [] x;
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 26
Constructors in Java and C++
In Java,
a constructor is invoked only through the new
keyword
recall that all object variables are references
In C++,
6/15/2005
a constructor is called upon variable declaration, or
explicitly through new with pointers, or in other
situations
other types of constructors
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 27
C++ Destructor
Special method whose signature is a ~
followed by the name of the class
e.g., ~SomeClass();
Particularly if the class contains pointers
and the constructor contains calls to new,
a destructor needs to be defined
6/15/2005
e.g., SomeClass() { A = new int[20]; }
~SomeClass() { delete [] A; }
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 28
C++ Control Over Copy and
Assignment
In C++, the semantics of “a = b”
(assignment) can be specified
In C++, there is a copy constructor
by defining the copy-assignment operator
specifies what happens during object
copying, e.g., when function parameters are
passed
There is more low-level control
6/15/2005
shallow copy vs deep copy
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 29
Methods
Defines object behavior
Static methods vs instance methods
Method overloading
within class, two methods with the same name
but different signatures
Method overriding
6/15/2005
same signatures across different classes
(subclass and superclass)
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 30
Operators
In C++, operators like =, +, *, ==, etc. can
be defined, just like methods
Example:
6/15/2005
class Matrix {
// ...
Matrix operator+(Matrix m) { … } // …
}
c = a + b; // equiv to c = a.operator+(b);
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 31
Method Binding
Let Teacher be a subclass of Employee
Employee variables can refer to Teachers
Also, suppose promote() is a method defined in
both classes
In Java, Employee e; … e = new Teacher();
In C++, Employee *e; … e = new Teacher;
e.promote() (or e->promote() ) calls which
promote() method?
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 32
Static vs Dynamic Binding
In C++, Employee’s promote() is called
Determined at compile time and deduced from
the type of the variable (static binding)
In Java, Teacher’s promote is called
Determined at run-time because the actual
type of the referred object is checked then
(dynamic binding)
* C++ uses virtual functions for dynamic binding
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 33
Static Binding
Pointer is typed to know the base class and is
ignorant of the structure or existence of the
derived classes
If the virtual keyword is NOT used, if a derived
class has its own variation on the
implementation of a base class member
function, it will NOT cause the derived class
version to be selected when a function is
invoked on an object of than class through a
variable declared in terms of the base class.
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 34
Another example
class Employee{
class Manager: public
Employee
public:
{
double salary()
public:
{return sal;}
double computeRaise()
double computeRaise()
{return 100;}
{return 25;}
Manager(double Salary) :
Employee(double salary)
Employee (salary)
{sal = salary;}
{}
private:
};
double sal;
};
L6: OOP
Copyright 2005, by the authors of these slides, and Ateneo de
6/15/2005
Manila University. All rights reserved.
Slide 35
Sample continued
Driver Code:
Manager * boss1 = new Manager(2000);
double boss1Salary =
boss1->salary(); // 2000
Employee *boss2 = new Manager(2300);
double *boss2Salary =
boss2->salary(); //2300
double boss1Raise =
boss1->computeRaise(); // 100
double boss2Raise = boss2->computeRaise(); // 25
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 36
C++ Run Time Binding
If the intent is for the selection of the
function to be determined by the object’s
class, not by the declaration of the pointer
used to address it:
6/15/2005
Declare some base class members to be virtual
If virtual, the compiler will deposit the “type
field” of the class in the object
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 37
Virtual Functions
Base class usually defines a body for a
virtual function.
Inherited by derived class as default if it
chooses not to override the
implementation
Virtual keyword in function declaration,
not in definition
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 38
Containers
Examples: Lists, Stacks, Files, etc.
Structures that “contain” elements
Often, the element’s type has little or
nothing to do with the containers’
operations
Possible room for re-use
6/15/2005
unified container code for a stack of integers,
a stack of webpages, a stack of strings, ...
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 39
Java and the Object
Hierarchy
All classes extend the Object class:
A variable of class Object can refer to any Java
object
Example:
6/15/2005
public class Stack {
Object A[]; int top; // …
void push(Object elt) // ...
}
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 40
C++ and Templates
Templates allow for a generic definition
parameterized definition, where the element
type is the parameter
Example:
6/15/2005
template<class T>
class Stack<T> {
T A[MAX]; int top;
public: void push(T element) // …
}
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 41
C++ Templates
<class T> indicates that a template is being
declared
T is the type name (can be a class)
Usage example:
Stack <int> iStack;
Stack <Cards> cStack;
where Cards is a user defined class
A type used as a template argument must provide
the interface expected by the template
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 42
Defining a Template
When defining a template member outside
of its class, it must be explicitly declared a
template
Example
6/15/2005
template <class T> Stack<T>::Stack()
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 43
C++ Standard Containers
vector : 1-D array of T
list : double linked list of T
dequeue : double-ended queue of T
queue : queue of T
stack : stack of T
map : associative array of T
set : set of T
bitset : set of booleans
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 44
Java Generics
Recent addition to Java
Similar to C++ templates
Why are templates/generics better than
using the Object class as a parameter?
6/15/2005
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 45
GUI Programming
In Java, GUI is part of its development kit
java.awt.* is a collection of classes that
support visual programming and graphics
visual objects (buttons, text fields, etc),
layout managers, events, etc.
In C++
6/15/2005
not part of the language
libraries dependent on platform (e.g., MFCs
and Motif)
Copyright 2005, by the authors of these slides, and Ateneo de
Manila University. All rights reserved.
L6: OOP
Slide 46