Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert...

32
Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna

Transcript of Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert...

Page 1: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

Freshers Week Java Course

Part 2

An Introduction to Objects and Classes in Java

Dr.-Ing. Norbert Völker

Lab Assistant: Roxanna Turner

Page 2: 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

Page 3: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 4: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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);

}

}

Page 5: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 6: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

Class Diagram Rectangle

Rectangle

x1y1x2y2

area()toString()

attributes (“data”, “state”)

methods

class name

Page 7: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 8: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 9: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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) { …}

Page 10: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 11: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

The Beginnings of Programming with Objects and Classes in Java

Page 12: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 13: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 14: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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);

Page 15: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 16: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 17: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 18: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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” ?

Page 19: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 20: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 21: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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);

Page 22: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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;

Page 23: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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) …

Page 24: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

Packages

Libraries and code organisation.

Page 25: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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

Page 26: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.*

Page 27: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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();

Page 28: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 29: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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)

Page 30: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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.

Page 31: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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>>> ...

Page 32: Freshers Week Java Course Part 2 An Introduction to Objects and Classes in Java Dr.-Ing. Norbert Völker Lab Assistant: Roxanna Turner.

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/