Title: Object-Oriented Programming
1Object-Oriented Programming
2Object-Oriented Programming
- An object, similar to a real-world object, is an
entity with certain properties, and with the
ability to react in certain ways to events - An object-oriented program consists of a set of
objects, which can vary dynamically, and which
execute by acting and reacting to each other, in
much the same way that a real-world process
proceeds by the interaction of real-world objects
3Object-Oriented Programming
- Need to reuse software components as much as
possible - Need to maintain the independence of different
components (Encapsulation and Abstraction) - Need to modify program behavior with minimum
changes to existing code (Inheritance)
4Modification for Reuse
- Extension of data and/or operations
- Restriction of data and/or operations
- Redefinition of one or more of the operations
- Abstraction, or the collection of similar
operations from two different components into a
new component - Polymorphization, or the extension of the type of
data that operations can apply to
5Modification for Reuse
- Modifiability of components for reuse and
maintaining the independence of different
components sometimes be mutually incompatible
6Objects
- An object occupies memory and has a (modifiable)
local state represented by local variables, which
are not directly accessible to other objects - An object has a set of functions and procedures
through which the local state can be accessed and
changed. These are called methods
7Classes
- Objects can be declared by creating a pattern for
the local state and methods - This pattern is called a class, and it is
essentially just like a data type - An object is said to be an instance of a class
- The local variables representing an objects
state are called instance variables
8An Example
public class Complex public Complex() re
0 im 0 public Complex (double realpart,
double imagpart) re realpart im
imagpart public double realpart() return
re public double imaginarypart() return
im public Complex add( Complex c )
return new Complex(re c.realpart(), im
c.imaginarypart()) public Complex multiply
(Complex c) return new Complex(re
c.realpart() - im c.imaginarypart(),
re c.imaginarypart() im c.realpart())
private double re, im
9An Example
public class Complex public Complex() radius
0 angle 0 public Complex (double
realpart, double imagpart) radius
Math.sqrt(realpartrealpart imagpartimagpart)
angle Math.atan2(imagpart,realpart)
public double realpart() return radius
Math.cos(angle) public double
imaginarypart() return radius
Math.sin(angle) public Complex add( Complex
c ) return new Complex(realpart()
c.realpart(),
imaginarypart() c.imaginarypart()) public
Complex multiply (Complex c) return new
Complex(realpart() c.realpart()
- imaginarypart() c.imaginarypart(),
realpart() c.imaginarypart() imaginarypart()
c.realpart()) private double radius,
angle
10An Example
public class ComplexUser public static void
main(String args) Complex z,w z new
Complex (1,2) w new Complex (-1,1) z
z.add(w).multiply(z) System.out.println(z.r
ealpart()) System.out.println(z.imaginarypart
())
automatic garbage collection is needed
binary operation is not symmetric
11An Example
public class LinkableObject public
LinkableObject() link null public
LinkableObject(LinkableObject link)
this.link link public LinkableObject
next() return link public void linkTo(
LinkableObject p) link p private
LinkableObject link
12An Example
typedef struct ComplexStruct Complexstruct
ComplexStruct double re, im double
(realpart) (Complex this) double
(imaginarypart) (Complex this) Complex
(add) (Complex this, Complex c) Complex
(multiply) (Complex this, Complex c) typedef
struct LinkStruct LinkableObjectstruct
LinkStruct LinkableObject link
LinkableObject (next) (LinkableObject this)
void (linkTo) (LinkableObject this,
LinkableObject link)
no constructor
z z.add(z.w)
no protection
13Inheritance
- Inheritance is the major mechanism in
object-oriented languages that allows the sharing
of data and operations among classes, as well as
the ability to redefine these operations without
modifying existing code public class B extends
A
superclass
subclass
14An Example
public class Queue public void enqueue(int
x) public void dequeue() public
int front() public bool empty ()
public class Deque extends Queue
public void addFront(int x) public void
deleteRear()
15Subtypes
- Class definitions are also type definitions
- Subtype principle an object of a subtype may be
used anywhere an object of its supertype is legal - The subtype principle expresses the is-a
relation If A is a subclass of B, then every
object belonging to A also belonging to B, or
every A is-a B
16An Example
Queue qDeque dd new Deque()q
d q.enqueue(2).dequeue() q.addFront(2) //
error
17Class Hierarchy
- Inheritance establishes a hierarchy of classes
- At the top of Javas class hierarchy is the class
Object, which establishes behavior that is common
to all of Javas objects - By definition in Java all classes implicitly
extend class Object - Two examples of methods in Object are equals and
toString
18An Example
String s HelloString t new
String(Hello)// s t is false, but
s.equals(t) is true // the default is the same as
Complex z new Complex(1, 1)System.out.prin
tln(z) // the default prints the class name and
an // internal index. This example prints //
something like Complex_at_73d6a5
19An Example
public class Complex // public boolean
equals( Complex c ) return re c.realpart()
im c.imaginarypart() public String
toString () return re im I
Complex z new Complex(1, 1)Complex x
new Complex(1, 1) if (x.equals(z))
System.out.println(ok!) //
ok!System.out.println(z) // 1.0 1.0i
20An Example Version 1
public class Point public Point (double x,
double y) this.x x this.y y //
... private double x private double
y public class Circle public Circle( Point
c, double r) center c radius r
//... public double area() return
Math.PI radius radius private Point
center private double radius
21An Example Version 1
public class Rectangle public Rectangle (Point
c, double w, double h) center c width
w height h // ... public double
area() return width height private
Point center private double width private
double height
22An Example Version 2
public abstract class ClosedFigure public
ClosedFigure (Point c) center c // ...
public abstract double area() private
Point center
23An Example Version 2
public class Circle extends ClosedFigure
public Circle( Point c, double r) super(c)
radius r //... public double area()
return Math.PI radius radius private
double radius public class Rectangle extends
ClosedFigure public Rectangle (Point c, double
w, double h) super(c) width w height
h // ... public double area()
return width height private double width
private double height
24An Example Version 3
public abstract class ClosedFigure public
ClosedFigure (Point c) center c // ...
public abstract double area() protected
Point center // can be accessed by
subclasses public class Circle extends
ClosedFigure public Circle( Point c, double r)
center c radius r //...
25An Example Version 3
Point x, y ClosedFigure f Rectangle rCircle
cx new Point(0, 0)y new Point(1, -1)r
new Rectangle(x, 1, 1)c new Circle(y, 1) f
rf.area() // 1.0f cf.area() // 3.141592
26Inheritance Graph
- Inheritance hierarchy can be viewed as an
inheritance graph
ClosedFigure
ClosedFigure
Polygon
Ellipse
Rectangle
Circle
Rectangle
Circle
Triangle
Java provides only singleclass inheritance
Square
27Multiple Class Inheritance
A
A
A
B
C
B
C
D
D
shared inheritance
repeated inheritance
28An Example
public class LinkableObject public
LinkableObject( Object d ) link null item
d public LinkableObject( Object d,
LinkableObject link) this.link link item
d public LinkableObject next() return
link public void linkTo( LinkableObject p)
link p public Object data() return
item private LinkableObject link private
Object item
29An Example
LinkableObject r new LinkableObject(new
Double(1.2))LinkableObject i new
LinkableObject(new Integer(42)) LinkableObject c
new LinkableObject(new Complex(1, -1))
30An Example
public class Queue public Queue() rear
null public boolean empty() return rear
null public LinkableObject front()
return rear.next() public void dequeue()
if (front() rear) rear null else
rear.linkTo(front().next()) public void
enqueue( LinkableObject item) if (empty())
rear item rear.linkTo(item) else
item.linkTo(front()) rear.linkTo(item) rear
item private LinkableObject rear
31An Example
Queue q new Queue() q.enqueue(r) q.enqueue(i)
q.enqueue(c) q.dequeue() System.out.println(q.f
ront().data()) // prints 42
32Multiple Interface Inheritance
interface LinkableObject LinkableObject
next() void Linkto( LinkableObject
p) class LinkableComplex extends
Complex implements LinkableObject private
LinkableObject link public LinkableObject
next() return link public void
linkTo(LinkableObject p) link p public
LinkableComplex(double re, double im)
super(re, im) link null