# Freshers Week Java Course Part 2

Λογισμικό & κατασκευή λογ/κού

7 Ιουν 2012 (πριν από 6 χρόνια και 1 μήνα)

456 εμφανίσεις

Freshers Week Java Course
Part 2 Objects and Classes: Foundations
An Introduction to
Objects and Classes in Java
Dr.-Ing. Norbert Völker
Lab Assistant: Roxanna Turner
Rectangle Area – Procedural Style
Procedural Programming
 Procedural programming
public class RectangleArea {
public static void main(String [] args) {
 sequence: read input, perform computations, change
double x1 = 1.0, y1 = 3.0, x2 = 3.0, y2 = 6.0;
state, return output
showRectangleArea(x1, y1, x2, y2);
 Development
}
 breakdown into smaller and smaller tasks
public static void showRectangleArea(double x1, double y1,
 refinement
double x2, double y2) {
 control structures: sequencing, if-then-else, …
double area = Math.abs((x2 - x1) * (y2 - y1));
 Example
System.out.println("Rectangle [(" + x1 + "," + y1 + "),(" + x2 + ","
 Rectangle area calculation + y2 + ")] has area " + area);
}
}
The Idea behind the OO Approach Class Diagram Rectangle
 Define objects and classes in programming by abstracting
from real-world entities
Rectangle class name
 a “class” is a category of objects
 rectangles, cars, students, …, buffers, actions, … x1
attributes
y1
 an object is an element of a class
(“data”, “state”)
x2
 this rectangle, John’s car, a particular student, ...
y2
 models one particular entity
 In Java, each object is an instance of exactly one class
area()
methods
toString()
1Two Objects Object Identity and State
 Every object has an identity
 Corresponds to reality.
r1 : Rectangle r2 : Rectangle
 My car” is different from “your car” even if it has the
same attributes (registration number, make, year, etc)
x1= 1.0; x1 = -1.0
y1 = 3.0 y1 = 2.0  Objects have a state
 Given by the current value of the attributes
x2 = 3.0 x2 = -4.0
y2 = 6.0 y2 = 1.0  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 OO Approach Remarks
 Methods allow  Break system down into objects/classes
 creation of objects, changing object state, finding out  Your classes should model relevant aspects of reality
 a “student” object in a Java program only reflects
 methods can call other methods! certain aspects of real students
 Class Rectangle currently only defines introspection  you need to decide what aspects are needed in your
methods program
 no methods for changing state as yet  Class definitions should aim for reusability
 class Rectangle can be used in many different
 add a method for moving rectangle horizontally
situations
public void moveX (double x) { …}
 include those methods which are expected by other
developers who will be using your class
Using Objects in Java
class Geometry {
The Beginnings of Programming
public static void main(String[] args) {
with Objects and Classes in Java
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.
2Assigning a New Object Aliasing
 Describe the effect of method call
r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
r1.moveX(-1.0);
 creates a new Rectangle object by calling a “constructor”
and assigns it to variable r1
 Suppose we add the code below at the end of method
Geometry.main() ? What would be output?
x1=1.0
Rectangle r2 = r1;
r1 y1=3.0
System.out.println(r2);
x2=3.0
y2=6.0
r1.moveX(1.0);
System.out.println(r2);
r1 = new Rectangle (0,0,0,0);
 You can join a variable declaration with an assignment into
a single “initialization” statement:
System.out.println(r2);
Rectangle r1 = new Rectangle (1.0, 3.0, 3.0, 6.0);
Encapsulation Implementation: Rectangle.java
 We have used Rectangle objects without knowing about
Attributes are also known as
the implementation of the class.
“instance variables” in Java
public class Rectangle {
 This is an example of encapsulation
double x1, x2, y1, y2;
hidden inside the object.
Rectangle (double x1, double y1, double x2, double y2) { …}
 Similar to “procedural abstraction” – you only need to
double area() { … }
know a procedure signature to call it, not how it is
public String toString() {… }
implemented.
public void moveX (double x) { …}
}
Attributes Method Implementation
 Attributes are realized in Java as instance variables. double area() { return (Math.abs((x2 - x1) * (y2 - y1))); }
 Also called the “fields” of the class.
public String toString() {
 The type of an instance variable can either be
return "Rectangle [(" + x1 + "," + y1 + "),(" + x2 + "," + y2 +
 one of the eight primitive types in Java (byte, short, int,
")]"; }
long, float, double, char, boolean) or
 a reference type
public void moveX (double x) {
 this is used to refer to objects x1 += x;
x2 += x; }
 Note the difference between parameters and attributes
in method moveX().
 Do you know the meaning of “void” ?
3Constructors Constructor Implementation
 For the code above to work, the Java class Rectangle
Rectangle (double x1, double y1, double x2, double y2) {
must have a constructor method
this.x1 = x1;
Rectangle (double x1, double y1, double x2, double y2)
this.y1 = y1;
this.x2 = x2;
 The name of the constructor method is the same as the
name of the class. this.y2 = y2;
}
 Same as the result type of the constructor.
 In UML class diagrams, constructor methods are often
not shown.  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 Constants
 Static attributes belong to the class, not particular objects
 It is bad programming style to use hard coded numbers
 have the same value for each object of the class
 For class Rectangle, we could add a static field count that
if (numberOfStudents > 100) { ….};
is intialized with 0 and is incremented by 1 whenever a
 It is better to use variables, for example:
new rectangle is created.
double maxCourseSize = 100;
 Static methods (also called “class” methods) do not refer
if (numberOfStudents > maxCourseSize) { …}
to a particular object.
 Constants can be declared as static final fields in a class.
public static double sqrt(double number)
This protects against unwanted changes.
double sqrtTwo = Math.sqrt(2); //usage
public static final maxCourseSize = 100;
 Question: normal “instance method” call or static call?
 From outside the class, access needs a prefix:
System.out.println("Now Sort Array");
double circumference = Math.PI * 2 * radius;
Arrays.sort(ray);
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;
Packages
 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.
Libraries and code organisation.
For example, showInputDialog returns null if the user
hits the “Cancel” button.
String input = JOptionPane.showInputDialog(
if (input == null) …
4Java Library Packages Import Statements
 Java library classes are organised in packages.
 The import statement makes classes accessible without
http://java.sun.com/javase/6/docs/api/
having to use the full long name, for example:
 Examples:
import java.util.Random
java.lang, java.util, java.net, java.util.regex
class TestRandom {
javax.swing
public static void main (String[]args) {

Random rGen = new Random(seed); …} }
 java.lang entities are automatically known to the compiler.
 Import statements must be placed before any class
 The full name of class String is java.lang.String
declarations in the .java file,.
 The large number of libraries in J2SE is one of the main
reasons behind the popularity of Java.  A file can have several import statements.
 Exercises will make use of classes in java.util :
 You can also import all classes from a package in one go:
 Random
import java.util.*
 and possibly ArrayList and TreeSet
More on Import Packages and Directory Structure
 Care has to be taken that this does not lead to a collision:  All the .class files belonging to one package need to be in
different packages might contain classes with the same the same directory.
name.
 The directory structure needs to correspond to the
 Example [Eckel]: package structure
import com.bruceeckel.simple.*;  For a package called “freshersWeek”, the files should
be in directory “freshersWeek”
import java.util.*;
 For a package “ce832.exercises”, there should be a
The compiler will complain in this case if you try to
directory “ce832” with a subdirectory “exercises”.
create a new object of class Vector as it does not know
which Vector class is meant.  etc.
 Without the import, there is no clash:
java.util.Vector x = new java.util.Vector();
Packages: Compiling and Running Organising your Own Classes
 In order to compile from the command prompt, change  It is easiest to put all your java source files into one
to the root directory of the package. directory and compile them with: javac *.java
cd /ufs/csstaffc/users/norbert/src/  BUT: putting all files into one directory is bad practice
for larger projects.
javac ce832/utilities/*.java
 Use packages in order to group classes together.
 Running method ce832.utilities.MyRandom.main():
package ce832.utilities;
java ce832.utilities.MyRandom
public class MyRandom {
 For usage of the CLASSPATH environment variable, see
the online Java tutorial, section packages. // …
 Check out Java IDEs (NetBeans, Eclipse, IntelliJ, …)  The package declaration needs to be right at the start of
the .java file.
 do not move source files on the disk while the IDE is
5Java Collections are Generic Literature
 Java API Documentation
 Online Java Tutorial http://java.sun.com/docs/books/tutorial/
 Cay Horstmann, Big Java, Wiley.
 Class ArrayList<E>
 H.M. Deitel and P.J. Deitel: Java – How to program,
 Class TreeSet<E>
 Bruce Eckel: Thinking in Java (Online available)
 These are generic classes
 And many others!
 Type variable E stands for the collection elements
 Can be substituted with other types in applications  Java 5 saw significant changes to the language, in
 For example, you could have particular the introduction of generics.
 Differences between Java 6 and Java 5 are mainly on
 ArrayList<Integer>
the level of libraries and implementation improvements.
 ArrayList<ArrayList<Boolean>>
 The Java API documentation is your friend
 TreeSet<ArrayList<TreeSet<Integer>>>
http://java.sun.com/javase/6/docs/api/
 ...
6