1Freshers Week Java Course
Part 2
An Introduction to
Objects and Classes in Java
Dr.-Ing. Norbert Völker
Lab Assistant: Roxanna Turner
Objects and Classes: Foundations
Procedural Programming
Procedural programming
procedures that implement tasks
sequence: read input, perform computations, change
state, return output
Development
breakdown into smaller and smaller tasks
refinement
control structures: sequencing, if-then-else, …
Example
Rectangle area calculation
Rectangle Area – Procedural Style
public class RectangleArea {
public static void main(String [] args) {
double x1 = 1.0, y1 = 3.0, x2 = 3.0, y2 = 6.0;
showRectangleArea(x1, y1, x2, y2);
}
public static void showRectangleArea(double x1, double y1,
double x2, double y2) {
double area = Math.abs((x2 - x1) * (y2 - y1));
System.out.println("Rectangle [(" + x1 + "," + y1 + "),(" + x2 + ","
+ y2 + ")] has area " + area);
}
}
The Idea behind the OO Approach
Define objects and classes in programming by abstracting
from real-world entities
a “class” is a category of objects
rectangles, cars, students, …, buffers, actions, …
an object is an element of a class
this rectangle, John’s car, a particular student, ...
models one particular entity
In Java, each object is an instance of exactly one class
Class Diagram Rectangle
Rectangle
x1
y1
x2
y2
area()
toString()
attributes
(“data”, “state”)
methods
class name
2Two Objects
r1 : Rectangle
x1= 1.0;
y1 = 3.0
x2 = 3.0
y2 = 6.0
r2 : Rectangle
x1 = -1.0
y1 = 2.0
x2 = -4.0
y2 = 1.0
Object Identity and State
Every object has an identity
Corresponds to reality.
My car” is different from “your car” even if it has the
same attributes (registration number, make, year, etc)
Objects have a state
Given by the current value of the attributes
Typically some attributes vary while others stay fixed
Class Rectangle might be used in a drawing program
coordinates can change as the rectangle is moved
around, stretched or shrunk
Methods
Methods allow
creation of objects, changing object state, finding out
information about objects
methods can call other methods!
Class Rectangle currently only defines introspection
methods
no methods for changing state as yet
add a method for moving rectangle horizontally
public void moveX (double x) { …}
OO Approach Remarks
Break system down into objects/classes
Your classes should model relevant aspects of reality
a “student” object in a Java program only reflects
certain aspects of real students
you need to decide what aspects are needed in your
program
Class definitions should aim for reusability
class Rectangle can be used in many different
situations
include those methods which are expected by other
developers who will be using your class
The Beginnings of Programming
with Objects and Classes in Java
Using Objects in Java
class Geometry {
public static void main(String[] args) {
Rectangle r1; // declaration of variable
r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
r1.moveX(-1.0);
System.out.println(r1 + " has area " + r1.area());
}
}
Exercise: draw a class diagram for class Geometry.
3Assigning a New Object
r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
creates a new Rectangle object by calling a “constructor”
and assigns it to variable r1
You can join a variable declaration with an assignment into
a single “initialization” statement:
Rectangle r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
x1=1.0
y1=3.0
x2=3.0
y2=6.0
r1
Aliasing
Describe the effect of method call
r1.moveX(-1.0);
Suppose we add the code below at the end of method
Geometry.main() ? What would be output?
Rectangle r2 = r1;
System.out.println(r2);
r1.moveX(1.0);
System.out.println(r2);
r1 = new Rectangle (0,0,0,0);
System.out.println(r2);
Encapsulation
We have used Rectangle objects without knowing about
the implementation of the class.
This is an example of encapsulation
Information about how an object solves tasks is
hidden inside the object.
Similar to “procedural abstraction” – you only need to
know a procedure signature to call it, not how it is
implemented.
Implementation: Rectangle.java
public class Rectangle {
double x1, x2, y1, y2;
Rectangle (double x1, double y1, double x2, double y2) { …}
double area() { … }
public String toString() {… }
public void moveX (double x) { …}
}
Attributes are also known as
“instance variables” in Java
Attributes
Attributes are realized in Java as instance variables.
Also called the “fields” of the class.
The type of an instance variable can either be
one of the eight primitive types in Java (byte, short, int,
long, float, double, char, boolean) or
a reference type
this is used to refer to objects
Method Implementation
double area() { return (Math.abs((x2 - x1) * (y2 - y1))); }
public String toString() {
return "Rectangle [(" + x1 + "," + y1 + "),(" + x2 + "," + y2 +
")]"; }
public void moveX (double x) {
x1 += x;
x2 += x; }
Note the difference between parameters and attributes
in method moveX().
Do you know the meaning of “void” ?
4Constructors
For the code above to work, the Java class Rectangle
must have a constructor method
Rectangle (double x1, double y1, double x2, double y2)
The name of the constructor method is the same as the
name of the class.
Same as the result type of the constructor.
In UML class diagrams, constructor methods are often
not shown.
Constructor Implementation
Rectangle (double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
The use of “this” in order avoids a name clash between
attributes and parameters.
Could also use parameter names that differ from
attribute names.
Static Attributes and Methods
Static attributes belong to the class, not particular objects
have the same value for each object of the class
For class Rectangle, we could add a static field count that
is intialized with 0 and is incremented by 1 whenever a
new rectangle is created.
Static methods (also called “class” methods) do not refer
to a particular object.
public static double sqrt(double number)
double sqrtTwo = Math.sqrt(2); //usage
Question: normal “instance method” call or static call?
System.out.println("Now Sort Array");
Arrays.sort(ray);
Constants
It is bad programming style to use hard coded numbers
in your code.
if (numberOfStudents > 100) { ….};
It is better to use variables, for example:
double maxCourseSize = 100;
if (numberOfStudents > maxCourseSize) { …}
Constants can be declared as static final fields in a class.
This protects against unwanted changes.
public static final maxCourseSize = 100;
From outside the class, access needs a prefix:
double circumference = Math.PI * 2 * radius;
Null
A variable of a reference type may be set to null.
This means that it does not refer to any object.
if (errorInInput) Student nextStudent = null;
You can check if the current value of a variable is null.
This is useful as some methods return null if they are
not able to return a valid object.
For example, showInputDialog returns null if the user
hits the “Cancel” button.
String input = JOptionPane.showInputDialog(
“Please enter account number”);
if (input == null) …
Packages
Libraries and code organisation.
5Java Library Packages
Java library classes are organised in packages.
http://java.sun.com/javase/6/docs/api/
Examples:
java.lang, java.util, java.net, java.util.regex
javax.swing
…
java.lang entities are automatically known to the compiler.
The full name of class String is java.lang.String
The large number of libraries in J2SE is one of the main
reasons behind the popularity of Java.
Exercises will make use of classes in java.util :
Random
and possibly ArrayList and TreeSet
Import Statements
The import statement makes classes accessible without
having to use the full long name, for example:
import java.util.Random
class TestRandom {
public static void main (String[]args) {
Random rGen = new Random(seed); …} }
Import statements must be placed before any class
declarations in the .java file,.
A file can have several import statements.
You can also import all classes from a package in one go:
import java.util.*
More on Import
Care has to be taken that this does not lead to a collision:
different packages might contain classes with the same
name.
Example [Eckel]:
import com.bruceeckel.simple.*;
import java.util.*;
The compiler will complain in this case if you try to
create a new object of class Vector as it does not know
which Vector class is meant.
Without the import, there is no clash:
java.util.Vector x = new java.util.Vector();
Packages and Directory Structure
All the .class files belonging to one package need to be in
the same directory.
The directory structure needs to correspond to the
package structure
For a package called “freshersWeek”, the files should
be in directory “freshersWeek”
For a package “ce832.exercises”, there should be a
directory “ce832” with a subdirectory “exercises”.
etc.
Packages: Compiling and Running
In order to compile from the command prompt, change
to the root directory of the package.
cd /ufs/csstaffc/users/norbert/src/
javac ce832/utilities/*.java
Running method ce832.utilities.MyRandom.main():
java ce832.utilities.MyRandom
For usage of the CLASSPATH environment variable, see
the online Java tutorial, section packages.
Check out Java IDEs (NetBeans, Eclipse, IntelliJ, …)
many advantages
do not move source files on the disk while the IDE is
running (use IDE refactor/renaming instead)
Organising your Own Classes
It is easiest to put all your java source files into one
directory and compile them with: javac *.java
BUT: putting all files into one directory is bad practice
for larger projects.
Use packages in order to group classes together.
package ce832.utilities;
public class MyRandom {
// …
The package declaration needs to be right at the start of
the .java file.
6Java Collections are Generic
Java API Documentation
Class ArrayList
Class TreeSet
These are generic classes
Type variable E stands for the collection elements
Can be substituted with other types in applications
For example, you could have
ArrayList
ArrayList>
TreeSet>>
...
Literature
Online Java Tutorial http://java.sun.com/docs/books/tutorial/
Cay Horstmann, Big Java, Wiley.
H.M. Deitel and P.J. Deitel: Java – How to program,
Bruce Eckel: Thinking in Java (Online available)
And many others!
Java 5 saw significant changes to the language, in
particular the introduction of generics.
Differences between Java 6 and Java 5 are mainly on
the level of libraries and implementation improvements.
The Java API documentation is your friend
http://java.sun.com/javase/6/docs/api/