Title: CS242 Advanced Programming Concepts in Java
1CS242Advanced Programming Concepts in Java
Prof. Searleman jets_at_clarkson.edu
2Outline
- Eclipse do the basic tutorial in the Java
Development User Guide (HelpWelcome) - Java Basics
- Primitives vs. Objects
- this vs. this() overloading constructors
- String immutable vs. mutable objects
- OOP concepts
- Composition, Inheritance, Use
- Methods common to all classes
- toString()
- Read OODP, Ch. 2 Effective Java, Ch. 3
- HW1 posted due Thursday, 9/6/07, in class
3Primitive typesnumbers literals
- Primitive types wrapper classes
- Literals
- important point the distinction between a
primitive and an Object
4float is not Float
- Consider
- float x
- Float y
- What is the difference between x y?
5Primitives Wrapper Classes
- float x
- Float y
- x 2.7f // ok
- y 2.7f // ERROR, why?
- y is a reference (currently NULL)
- y can refer to a Float object
- There are 3 constructors
6Wrapper class
- float x
- Float y
- y new Float(2.7f) // OK
- y new Float(2.7) // OK
- y new Float(2.7) // OK
- A wrapper class provides conversion
functionality useful in data structures, sorting
objects, etc.
7float is not Float
- float x 2.7f
- Float y new Float(2.7)
- What is the difference between x y?
- x is a primitive cant send a message to x
- y refers to an object responds to any message
appropriate for Float
8Circle class Point class
- files Circle.java
- Point.java
- 1 approach for testing include a main program
in each class - another approach write a separate test program
- TestCircle.java
9- public class Circle // This class is not
completely formulated yet - / private implementation (instance
variables) / - private float radius
- private Point center
- / constructor given radius and 2 ints/
- public Circle(float aRadius, int x, int y) /
implementation / - / accessor method /
- public float getRadius() return radius
- / mutator method /
- public void setRadius(float newRadius) radius
newRadius - / accessor method /
- public Point getCenter() return center
- / method which computes and returns the area
of the circle / - public float computeArea() / implementation
/
10Circle class, revisited
- public class Circle
- private float radius
- private Point center
- / constructs a circle with given radius
center / - public Circle(float radius, int x, int y)
-
- this.radius radius
- this.center new Point(x, y)
-
11Relationships between classes
public class Circle private float
radius private Point center
A Circle has a Point
UML Class Diagram
FilledCircle
12Relationships between classes
Object
A Circle is an Object
(inheritance)
IS-A
public class Circle / stuff / (everything
is an Object, except for a primitive value)
Circle
UML Class Diagram
13Overloading methods
- multiple versions of a method, distinguished by
their signatures (name argument list) - it is very common to overload constructors
- example
- public Circle(int x, int y) // creates unit
circle - public Circle(float radius, int x, inty)
14Uses of this
- this reference to current object
- this.radius
- this() way to call another
constructor in the same class
15Overloading constructors version 1
- public Circle(float radius, int x, int y)
- this.radius radius
- this.center new Point(x,y)
-
- public Circle(int x, int y)
- this(1.0f, x, y) / reuses code /
advantage can change the implementation without
changing all the other constructors
16Overloading constructors version 2
- public Circle(int x, int y)
- this.radius 1.0f
- this.center new Point(x,y)
-
- public Circle(float radius, int x, int y)
- this(x, y)
- this.radius radius
17this vs. this()
18String
- NOT an array of char
- immutable (i.e. cannot be changed)
- string literal enclosed in double quotes
- methods length(), equals(), toUpperCase(),
compareTo(), indexOf(), substring(), toString(),
trim(), replace(), - use the StringBuffer class if you want to modify
characters in the buffer
19- String myName Fred
- String yourName Wilma
- String s Hello, yourName
- s myName
- s s.trim()
- Effective Java, Chapter 2, p. 13
- Item 4 avoid creating duplicate objects
- String s new String(silly) // bad idea
- String s silly // much better
20Mutable vs Immutable Objects
- Circle c1 new Circle(1.5f, 0,0)
- The circle is mutable, that is, it can be
changed (for example, with setRadius) - String s1 Hello
- The string cannot be changed (can change the
reference s1, but not the string) - s1 s1.substring(3,5) // s1 refers to a new
String - StringBuffer sBuf1 Hello
- String buffers can be changed
- sBuf1 sBuf1.setCharAt(0, j) // now jello
21String operations
- Parsing strings is an important operation that we
will look at later (StringTokenizer) - Converting to a string is another important
operation
22Converting to a String toString() method
- System.out.println( Answer 42 )
- So the int value 42 is converted to a string
- with the method Integer.toString()
String
23Methods common to all objects
- cf. Effective Java, Chapter 3
- superclass java.lang.Object
- methods toString(), equals(), hashcode(),
finalize(), clone(), getClass(), wait(),
notify(), notifyAll()
24toString() method
- c1 new Circle(1.5f, 0, 0)
- System.out.println( c1 )
Prints Circle_at_1afa3 !!
25Item 9 Always override toString()
- Effective Java, Chapter 3, p. 42
- When practical, the toString method should
return all of the interesting info contained in
the object. - Note that toString should never print anything
26- public class Circle
- // other stuff
- public String toString() // 1st version
-
- return \n \t center
- center.getX() ,
- center.getY()
- \n \t radius radius
-
27- public class Circle
-
- public String toString()
-
- return \t center center
- \n \t radius radius
- // alternative implementation
- // other methods
28- Circle c1 new Circle(1.5f, 10, 20)
- System.out.println( c1 )
-
prints center lt10,20gt radius 1.5
29toString() called automatically
- System.out.println( Answer 42 )
- System.out.println( d1 )
- System.out.println( d1.topFace() )
- System.out.println( d1.toString() )
30Overriding toString()
- It is recommended that you specify the format of
the return value for classes associated with a
value, and to document your intentions. - examples
- phone number format (XXX) YYY-ZZZZ
- social-security number XXX-XX-XXXX
31Methods common to all objects
- cf. Effective Java, Chapter 3
- superclass java.lang.Object
- methods toString(), equals(), hashcode(),
finalize(), clone(), getClass(), wait(),
notify(), notifyAll() - Item 9 Always override toString()
32 is not equals()
- tests for equivalence (exactly same object)
- compare primitives using and !
- equals() tests whether 2 objects are equal in
value - compare objects using equals(), unless
- you intend to compare for equivalence
33- Integer n1 new Integer(42)
- Integer n2 new Integer(42)
- System.out.println( n1 n2 )
- prints false
- System.out.println( n1.equals(n2) )
- prints true
- n2 n1
- System.out.println( n1 n2 )
- now prints true
34Comparing things
- ! means not equivalent
- compare primitives using and !
- compare objects using equals()
- This is especially true when comparing two
strings! - unless, of course, you want to test for
equivalence
35- cat cat true
- String s1 cat
- String s2 c
- String s3 s2 at
- s1 s3 false
- s1.equals(s3) true
36OOP
- composition has-a relationship
- inheritance is-a relationship
- overloading methods
- overriding methods
- polymorphism many-shaped
37Polymorphism
- x1.draw()
- x2.draw()
- x3.draw()
- what happens depends on what type of object x is
Circle Square FilledCircle
38Relationships between classes
public class Circle / stuff / public class
FilledCircle extends Circle
Circle
(inheritance)
IS-A
A FilledCircle is a Circle
FilledCircle
UML Class Diagram
39- //// file Circle.java
- public class Circle
- private float radius
- private Point center
- / constructors, getRadius(), setRadius(),
- getCenter(), computeArea() /
-
- / want to create a subclass of Circle, namely
FilledCircle /
40Recall Uses of this
- this reference to current object
- this.radius
- this() way to call another
constructor in the same class -
41Uses of super
- super reference to the superclass
- super.radius // caution inaccessible
- super() way to call a constructor for the
superclass - public FilledCircle(float radius, int x, int y)
- super(radius, x, y)
42- //// file FilledCircle.java
- import java.awt.Color
- public class FilledCircle extends Circle
- private Color fillColor Color.black
- public FilledColor(float radius, int x, int y)
- super(radius, x, y)
-
- public FilledColor(
- float radius, int x, int y, Color
newFillColor) - super(radius, x, y)
- fillColor newFillColor
-
-
43UML class diagram
IS-A
IS-A
1
HAS-A
(composition)
IS-A
(inheritance)
44Inheritance
- A subclass inherits all instance variables and
all methods from its superclasses - e.g. FilledCircle inherits radius and center from
Circle along with the methods getRadius(),
setRadius(), computeArea(), etc.
45Packages
- default package
- access modifiers
- - public
- - private
- - protected
- - none (defaults to package access)
46- So FilledCircle cant directly manipulate radius
or center (only Circle can) - public everyone can use it
- private only within the class
- protected subclasses have access
- package everyone in same package
47- Overloading
- multiple versions of a method, distinguished by
their signatures - (name and argument list)
- Overriding
- when a subclass completely replaces a method that
it inherits from its superclass (same signature)
48IS-A
IS-A
HAS-A
1
IS-A
49methods toString(), equals(), getClass(),
methods constructors, get/setCenter(),
get/setRadius(), computeArea() toString()
methods constructors, get/setColor() toString()
50- public class FilledCircle
- extends Circle
-
- private Color fillColor Color.black
- public String toString()
-
- return super.toString()
- \n \t color fillColor
-
- // other methods for the class
51- Circle c1 new Circle(1.5f, 10, 20)
- FilledCircle fc1
- new FilledCircle(2.0f, 1, 1, Color.cyan)
- System.out.println( c1 )
- System.out.println( fc1 )
-
center lt10,20gt radius 1.5
center lt1,1gt radius 2.0 color
java.awt.Colorr0,g255,b255