Post on 14-Dec-2015
Freshers 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
x1y1x2y2
area()toString()
attributes (“data”, “state”)
methods
class name
Two Objects
r1 : Rectangle
x1= 1.0;y1 = 3.0x2 = 3.0y2 = 6.0
r2 : Rectangle
x1 = -1.0y1 = 2.0x2 = -4.0y2 = 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.
Assigning 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.0y1=3.0x2=3.0y2=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” ?
Constructors For the code above to work, the Java class Rectangle
must have a constructor methodRectangle (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.
Java 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.regexjavax.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.
Java Collections are Generic Java API Documentation
Class ArrayList<E> Class TreeSet<E>
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<Integer> ArrayList<ArrayList<Boolean>> TreeSet<ArrayList<TreeSet<Integer>>> ...
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 friendhttp://java.sun.com/javase/6/docs/api/