CSci 581: Obj.-Oriented Design & Programming
Spring Semester 1999
Lecture Notes
A Second Look at Classes
This Web document was based on a set of "slides" created by the
instructor for use in the Fall 1997 offering of the object-oriented
design and programming course. That set was, in turn, based on a set
of slides created by Timothy Budd to supplement chapter 20 of his
textbook An Introduction to Object-Oriented Programming,
Second Edition (Addison-Wesley, 1997).
What is a Class?
- A "cookie cutter" used for making clones of some object
- A generalization of a record
- A mechanism for variable scoping and encapsulation
- A special kind of type
- A special kind of object
Classes as Types
What is a type?
- application programmer's view:
- set of values with common attributes and operations
- object-oriented view:
- behavior specifications
- compiler view:
- set of syntactic constraints on expressions (uses)
- semantics/verification view:
- set of invariants that instances of the type must satisfy
- systems programming view:
- protective mechanism wrapped around the bits
- implementation view:
- description of how the bits are stored in memory
Implications of Classes for Types
The is-a relation produces some subtle
issues
- Programmer analyzing program may not know final type of
object (may be subclass)
- Inheritance only ensures that interface
maintained, not other properties of execution
- Subclasses not guaranteed to preserve all aspects of parent (may
take longer, perform actions in different sequence, etc).
- Testing of program, even proof of correctness, may be
invalidated by replacement of methods
Classes as Objects
If a class is an object it must have responsibilities.
What are these responsibilities?
- Maintain information about the class (instance size, methods)
- Generate new copies of the class
- But, if a class is an object and every object is an instance of
some class, what is the class of a class?
Classes as Objects in Java
- Root class of the inheritance hierarchy is class
Object
- There is a "class object" associated with each class
- Parent class of all class objects is
Class
- One instance of class
Class
for each class loaded
onto the machine
- Method
Object.getClass
returns the class for the
object -- instance of type Class
- If
X
is a class, them X.class
is constant
that refers to its Class
object
- Class
Class
has several useful methods:
-
getName
returns the name of the class as a string
-
forName
loads the class with the fully qualified
(including package) class name string and returns the class
-
newInstance
creates a new instance of the class
(applies the no-argument constructor)
-
getSuperclass
returns the superclass of the class
- other methods to return the interfaces, constructors, methods,
fields, etc.
- Reflection API (
java.lang.reflect
package) provides
additional capabilities
- Java Beans API (
java.beans
package) gives additional
support for reusable components
Class Data
Often it is useful to have a single data area
shared by all instances of a class.
- Known as a class variable
- Important problem: who initializes this value?
- avoid failing to initialize
- avoid multiple initialization
- Mechanism differs among languages
- Java uses standard variable initializers for simple
initialization
- Java also uses
static
blocks for more complex
initialization
UP to CSCI 581 Lecture Notes root document?
Copyright © 1999, H. Conrad Cunningham
Last modified: Wed Apr 21 15:12:06 CDT