Title: Chapter 7 Classes and Methods III: Static Methods and Variables
1Chapter 7Classes and Methods IIIStatic Methods
and Variables
- Lecture Slides to Accompany
- An Introduction to Computer Science Using Java
(2nd Edition) - by
- S.N. Kamin, D. Mickunas, E. Reingold
2Chapter Preview
- In this chapter we will
- describe user-defined classes
- instance variables
- constructors
- instance methods
- present several examples of classes
- discuss the concepts of mutability and visibility
- describe method overloading
3Object-Oriented Programming
- OOP supports the view that programs are composed
of interacting objects - Objects are composed of
- values known as attributes or instance variables
- operations (actions) that can be performed on
these values know as instance methods - Messages requesting an action or value are sent
to objects - Objects respond to messages that are in their
protocols or interfaces
4Objects
- Encapsulate data values within a single entity
- Their behavior is often general enough to allow
reuse in a variety of situations - Often form a basis from which other objects can
be derived using a mechanism known as inheritance - Are a type container that is stored on the system
heap - A client is program that uses an object
5(No Transcript)
6Client Rights
- To declare variables of the class type
- To create instances of the class using
constructors - To send messages to instances of the class by
invoking class instance methods - To know the class public interface
- instance method names
- parameter number and types
- return types
- To know the instance methods that alter (mutate)
the instance
7Class Rights
- To define the class public interface
- To hide all the implementation details from the
client - To protect internal data from client access
- To change implementation details at any time,
provided the public interface remains intact - To change the public interface with client
concurrence
8Revised Class Definition
- public class name
- declarations of instance variables
- constructor definitions
- method definitions
-
- Every class needs one or more constructor
definitions
9Revised Class Definition
- Instance variables
- local data contained in class
- Method definitions
- describe the class interface and how it responds
to each client message - Constructors definitions
- describe how to initialize instance variables in
a new object
10Constructors
- Look like regular instance methods
- Never have a return type
- Always have the same name as the class name
- May have parameters
- Default constructors have no parameters
- Constructors can be overloaded (more than one
definition in the same class)
11Constructors
- public class Clock
- int hour,
- minute
- // constructor
- public Clock( )
- hour 12
- minute 0
-
- // other methods follow
-
12Using Constructors
- // c1 set to 1200
- Clock c1 new Clock()
- // c1 set to 830
- c1.setHour(8)
- c1.setMinute(30)
- // c2 set to 1200 c1 still 830
- Clock c2 new Clock()
13Overloading Constructors
- Classes can have more than one constructor
- All constructors have the same name (the class
name) - Each constructor differs from the others in
either the number or types of its arguments - new is used when using a constructor to create a
new object
14Overloading Constructors
- We could add the following to Clock
- public Clock(int h, int m)
- hour h
- minute m
-
- A client program could contain
- Clock c1 new Clock(8, 20)
- Which is the same as writing
- Clock c1 new Clock( )
- c1.setHour(8)
- c1.setMinute(20)
15Overloaded Clock Constructors
- public class Clock
- int hour, minute
- public Clock ()
- hour 12
- minute 0
-
- public Clock (int h, int m)
- hour h
- minute m
-
-
16Using Constructors
- Clock c1 new Clock( ) // c1 set to 1200
- Clock c2 new Clock(8, 20) // c2 set to 820
- Clock c3 new Clock() // c3 set to 820
- c3.setHour(8)
- C3/setMinute(20)
17Overloading Methods
- Methods can also be overloaded
- This allows different versions of the method in
the same class - Each method variant must differ from the others
by the number or types of its parameters - Overloading allows methods with the same name to
have different return types
18Methods Calling Other Methods
- Methods are allowed to call other methods in the
same class without specifying an explicit
receiver - This allows overloaded methods to call one
another without repeating redundant code - Example
- public void display (DrawingBox d, int r)
- display(d, d.getDrawableWidth()/2,
- d.getDrawableHeight()/2, r)
19Dot Notation
- We can also use dot notation to view instance
variables of the same class that are different
from the receiver - Example
- public boolean priorTo (Clock c)
- return (hour lt c.hour
- hour c.hour
- minute lt c.minute)
-
20this Avoiding Variable Name Collisions
- this can be used to distinguish between
references to instance variables and local
identifiers or arguments - public void set (int hour, int minute)
- int totalMinutes (hour 60 minutes)
- this.minute totalMinutes 60
-
- this.minute refers to the instance variable
minute not the method argument
21this Passing the Receiver as an Argument
- this can be used to send a message to the
current receiver of the message without
explicitly naming the receiver - public boolean after (Clock c)
- return c.priorTo(this)
-
- this is used as if it were a variable referring
to the receiver of the message
22this Chaining Constructors
- this can be used to simplify constructor code
by allowing one constructor to call another - We can rewrite the clock constructors as
- public Clock ( )
- this(12,0)
-
- public Clock (int hour, int minute)
- set(hour, minute)
23Visibility Qualifiers
- public int x // client creating instance o of
this - // class can access x by writing
o.x - private int y // no can access y directly,
access - // provided though class methods
- To enforce complete information hiding all
instance variables should be declared using
private - The default visibility of instance variables lies
between private and public (explained later in
the text)
24Visibility Qualifiers and Methods
- By default class methods are also accessible to
some classes but not others - Visibility qualifiers should also be used in
method declarations - Examples
- public void f( ) // Any client using object o
- // can send it a message
- // by writing o.f( )
- private void g( ) // No client can send g to
- // the object except another
- // method from this class
25Visibility and UML Diagrams
- In UML diagrams
- private variables and methods are indicated using
a leading minus sign as a prefix - public variables and methods are indicates using
a leading plus sign as a prefix - a blank prefix means that the variables and
methods are not annotated and will have their
default visibility
26Mutation
- An object can be changed by assigning a new value
to one or more of its instance variables - Example
- d new DrawingBox()
- c new Clock()
- c.set(10, 20)
- c.display(d, 50, 50, 50)
- c.set(5, 40)
27(No Transcript)
28Mutability
- Transforming an object from one state to another
- Only objects can be mutated, primitive values are
not (e.g. x4 does not change x) - Objects are only mutable if its interface
includes mutating methods
29Nonmutation
- Creating a new object similar to original, but
including the desired change - Note the return type is Clock, not void
- Example
- public Clock set_nonmut
- (int hour, int Minute)
- return new Clock(hour, minute)
30What would happen?
- Consider the effects on the heap if the following
sequence of statements was executed - Clock c1 new Clock()
- Clock c2 c1
- c1.set(4, 30)
- c2.set(5, 40)
31Heap After Assigning c1 to c2
32Class Association
- Used to achieve certain desired behavior
- Association (or acquaintance)
- classes and objects are linked in a manner that
allows the object to remain visible to clients - classes can be linked when a client passes an
object as a message argument to another object
33Object Containing Reference to Another Object
34UML Class Diagram for Clock-DrawingBox
Association
35UML Class Diagram for Clock-DrawingBox
Association
36Class Containment
- Composition (or aggregation)
- an object of one class is constructed from
objects of other classes so that only the
composite object is visible to clients - the component objects are internal to the
containing object - Aggregation is a weaker form of containment and
will not be used in this text
37UML Class Diagram for Clock-DrawingBox
Composition
38Representation Independence
- In OOP the representation of data is
encapsulated, this means that the data
representation may be changed without affecting
the previous class behavior - Clients should not be able to detect that a
change has occurred - Sometimes this is know as implementation
independence
39main
- Every Java program needs a class containing a
static method called main - Static methods (or class methods) are special
methods that do not require receivers - Static methods cannot refer to class instance
variables, but can be invoked when no class
instances exist - Static methods will be discussed in more detail
in Chapter 10