Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Defining Classes 1
This slide set was compiled from the Absolute Java textbook and the
instructor’s own class materials.
SWE 510: Object Oriented Programming in Java
1
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Primitive Data Types versus
Abstract Data Types (Classes)
Primitive data types
a single piece of data
byte, char, short, int, long, float, double, boolean
Variables declared before their use:
a
b
int a = 10, b = 20;
10
Classes
20
a collection of multiple pieces of data + methods
Objects defined before their use (“instantiation”)
Including the same methods
Including the same set of data, but
Maintaining different values in each piece of data
MyClass object1 = new MyClass( );
object1
MyClass object2 = new MyClass( );
data
10
object1.data = 10;
object2
data
20
object2.data = 20;
method( )
SWE 510: Object Oriented Programming in Java
method( )
4
Primitive Data Types versus
Classes—comparison
“Primitive” data type (String is not primitive in java, but to some extent we
can treat it like one)
String can be used like a primitive data type
String myString;
myString = “test string”;
String myString = “test string”;
String myString = someOtherString;
Abstract data type (class)
The String class is much more powerful than a primitive type
String myString = new String (“test string”);
myString.length();
myString.valueOf();
myString.equals(someOtherString);
myString.compareTo(someOtherString);
myString.split(regularExpression);
SWE 510: Object Oriented Programming in Java
5
Java Doc
Google
Use Google to locate the particular class or language feature of
interest
Dive Straight in
Go straight to the Java documentation
http://download.oracle.com/javase/6/docs/
http://download.oracle.com/javase/6/docs/api/
SWE 510: Object Oriented Programming in Java
6
The Contents of a Class Definition
A class definition specifies the data items and
methods that all of its objects will have
These data items and methods are
sometimes called members of the object
Data items are called fields or instance
variables
Instance variable declarations and method
definitions can be placed in any order within
the class definition
Methods define an object’s behavior
Members, Instance Variables, and
Methods
public class Course {
public String department;
public int number;
public char section;
public int enrollment;
public int limit;
public double textPrice1;
public double textPrice2;
public double courseFee;
//
//
//
//
//
//
//
//
SWE, IAS, CS, etc
course number
A, B, C ...
the current enrollment
max number of students
primary textbook
secondary textbook
laboratory fee
public int availableSpace( ) {
return limit - enrollment;
}
members
public double capacity( ) {
return ( double )enrollment / limit;
}
public double totalExpenditure( ) {
return textPrice1 + textPrice2 + courseFee;
}
Instance
variables:
(data members)
Each object has
its own
values in these
variables.
Methods:
Each object has the
same methods
(actions, computations).
}
SWE 510: Object Oriented Programming in Java
8
Object Instantiation with new
Declare a reference variable (a box that contains a
reference to a new instance.)
ClassName object;
object has no reference yet, (= null).
Create a new instance from a given class.
object = new ClassName( );
object has a reference to a new instance.
Declare a reference variable and initialize it with a
reference to a new instance created from a given
class
ClassName object = new ClassName( );
SWE 510: Object Oriented Programming in Java
9
Class Instantiation--Example
public class CourseDemo {
public static void main( String[] args ) {
Course myCourse1 = new Course( );
Course myCourse2 = new Course( );
myCourse1.department = "CSS";
myCourse1.number = 161;
myCourse1.section = 'A';
myCourse1.textPrice1 = 111.75;
myCourse1.textPrice2 = 37.95;
myCourse1.courseFee = 15;
Multiple pieces of
public class Course {
public String department;
public int number;
public char section;
data public double textPrice1;
public double textPrice2;
public double courseFee;
Method
myCourse2.department = "CSS";
myCourse2.number = 451;
myCourse2.section = 'A';
myCourse2.textPrice1 = 88.50;
myCourse2.textPrice2 = 67.50;
myCourse2.courseFee = 0;
//
//
//
//
//
//
CSS, IAS, BUS, NRS, EDU
course number
A, B, C ...
primary textbook
secondary textbook
laboratory fee
public double totalExpenditure( ) {
return textPrice1 + textPrice2 + courseFee;
}
}
System.out.println( "myCourse1(" + myCourse1.department +
myCourse1.number + myCourse1.section +
") needs $" + myCourse1.totalExpenditure( ) );
System.out.println( "myCourse2(" + myCourse2.department +
myCourse2.number + myCourse2.section +
") needs $" + myCourse2.totalExpenditure( ) );
}
}
instantiated
instantiated
myCourse2
myCourse1
department: CSS
number: 451
section: A
textPrice1: $88.50
textPrice2: $67.50
courseFee: $0
totalExpenditure( )
156.0 = 88.50 +67.50 + 0
department: CSS
number: 161
section: A
textPrice1: $111.75
textPrice2: $37.95
courseFee: $15
totalExpenditure( )
164.7 = 117.75 + 37.95 + 15
myCourse1(CSS161A) needs $164.7
myCourse2(CSS451A) needs $156.0
SWE 510: Object Oriented Programming in Java
10
The this Parameter
All instance variables are understood to have
<the calling object>. in front of them
If an explicit name for the calling object is
needed, the keyword this can be used
myInstanceVariable always means and is
always interchangeable with
this.myInstanceVariable
The this Parameter
this must be used if a parameter or other
local variable with the same name is used in
the method
Otherwise, all instances of the variable name
will be interpreted as local
int someVariable = this.someVariable
local
instance
The this Parameter
The this parameter is a kind of hidden
parameter
Even though it does not appear on the
parameter list of a method, it is still a
parameter
When a method is invoked, the calling object
is automatically plugged in for this
A Constructor has a this Parameter
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Constructors
A constructor is a special kind of method that
is designed to initialize the instance variables
for an object:
Public ClassName(anyParameters){code}
A constructor must have the same name as
the class
A constructor has no type returned, not even
void
Constructors are typically overloaded
Constructors
A constructor is called when an object of the class is created
using new:
ClassName objectName = new ClassName(anyArgs);
The name of the constructor and its parenthesized list of
arguments (if any) must follow the new operator
This is the only valid way to invoke a constructor: a
constructor cannot be invoked like an ordinary method
If a constructor is invoked again (using new), the first object is
discarded and an entirely new object is created
If you need to change the values of instance variables of the
object, use mutator methods instead
You Can Invoke Another Method in a
Constructor
The first action taken by a constructor is to create an
object with instance variables
Therefore, it is legal to invoke another method within
the definition of a constructor, since it has the newly
created object as its calling object
For example, mutator methods can be used to set the
values of the instance variables
It is even possible for one constructor to invoke
another
Include a No-Argument Constructor
If you do not include any constructors in your
class, Java will automatically create a default
or no-argument constructor that takes no
arguments, performs no initializations, but
allows the object to be created
If you include even one constructor in your
class, Java will not provide this default
constructor
If you include any constructors in your class,
be sure to provide your own no-argument
constructor as well
Default Variable Initializations
Instance variables are automatically initialized
in Java
boolean types are initialized to false
Other primitives are initialized to the zero of
their type
Class types are initialized to null
However, it is a better practice to explicitly
initialize instance variables in a constructor
Note: Local variables are not automatically
initialized
Accessing Instance Variables
Declaring an instance variable in a class
public type instanceVariable;
// accessible from any methods (main( ))
private type instanceVariable; // accessible from methods in the same class
Examples:
public
public
public
public
String department;
int number;
char section;
int enrollment;
Assigning a value to an instance variable of a given object
objectName.instanceVariable = expression;
Examples:
myCourse1.department = "CSS";
myCourse1.number = 161;
myCourse1.section = 'A';
myCourse1.enrollment = 24;
Reading the value of an instance of a given object
Operator objectName.instanceVariable operator
Example:
System.out.println( "myCourse1 = " + myCourse1.department +
myCourse1.number + ")" );
SWE 510: Object Oriented Programming in Java
20
Class Names and Files
Each class should be coded in a separate file whose
name is the same as the class name + .java postfix.
Example
Source code
Course.java
CourseDemo.java
Compilation (from DOS/Linux command line.)
javac Course.java
javac CourseDemo.java
Compiled code
javac CourseDemo.java
javac Course.java
Either order is fine. Compiling CourseDemo.java first
automatically compiles Course.java, too.
Course.class
CourseDemo.class
Execution (from DOS/Linux command line.)
java CourseDemo
Start with the class name that includes main( ).
SWE 510: Object Oriented Programming in Java
21
Information Hiding and Encapsulation
Information hiding is the practice of separating how to
use a class from the details of its implementation
Abstraction is another term used to express the
concept of discarding details in order to avoid
information overload
Encapsulation means that the data and methods of a
class are combined into a single unit (i.e., a class
object), which hides the implementation details
Knowing the details is unnecessary because
interaction with the object occurs via a welldefined and simple interface
In Java, hiding details is done by marking them
private
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
A Couple of Important Acronyms:
API and ADT
The API or application programming
interface for a class is a description of
how to use the class
A
programmer need only read the
API in order to use a well designed
class
An ADT or abstract data type is a data
type that is written using good
information-hiding techniques
Encapsulation
public and private Modifiers
The modifier public means that there are no
restrictions on where an instance variable or
method can be used
The modifier private means that an
instance variable or method cannot be
accessed by name outside of the class
It is considered good programming practice to
make all instance variables private
Most methods are public, and thus provide
controlled access to the object
Usually, methods are private only if used
as helping methods for other methods in the
class
public and private
Public
Methods and instance variables
accessible from outside of their
css263.method1( )
class
public class Course
public type method1( ) {
}
css263.method2( )
Private
public type method2( ) {
}
css263.utility( )
Methods and instance variables
accessible within their class
css263.department
css263.number
css263.enrollment
private type utility( ) {
}
public String department;
public int number;
private int enrollment;
private int gradeAverage;
SWE 510: Object Oriented Programming in Java
27
Encapsulating Data in Class
Which design is more secured from malicious attacks?
public class Course
css161.method1( )
public type method1( ) {
public type method1( ) {
css263.method1( )
}
css161.utility( )
public class Course
}
public type method2( ) {
public type method2( ) {
}
}
public type utility( ) {
private type utility( ) {
}
}
css161.number = 263 public String department;
private String department;
public int number;
private int number;
public int enrollment;
private int enrollment;
public int gradeAverage;
private int gradeAverage;
SWE 510: Object Oriented Programming in Java
28
Accessor and Mutator Methods
Accessor methods allow the programmer to obtain
the value of an object's instance variables
The data can be accessed but not changed
The name of an accessor method typically starts
with the word get
Mutator methods allow the programmer to change
the value of an object's instance variables in a
controlled manner
Incoming data is typically tested and/or filtered
The name of a mutator method typically starts with
the word set
Mutator Methods Can Return a
Boolean Value
Some mutator methods issue an error
message and end the program
whenever they are given values that
aren't sensible
An alternative approach is to have the
mutator test the values, but to never
have it end the program
Instead, have it return a boolean value,
and have the calling program handle the
cases where the changes do not make
sense
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Overloading
Overloading--two or more methods in the
same class have the same method name
Overloading--Rules
All definitions of the method name
must have different signatures
A signature consists of the name of a method
together with its parameter list
Differing signatures must have different
numbers and/or types of parameters
The signature does not include the type
returned
Java does not permit methods with the same
signature and different return types in the
same class
Overloading—example
Familiar overloaded method
System.out.println()
System.out.println(boolean)
System.out.println(char)
System.out.println(char[])
System.out.println(double)
System.out.println(float)
System.out.println(int)
System.out.println(long)
System.out.println(java.lang.Object)
System.out.println(java.lang.String)
SWE 510: Object Oriented Programming in Java
34
Overloading and Automatic Type
Conversion
If Java cannot find a method signature that
exactly matches a method invocation, it will
try to use automatic type conversion
The interaction of overloading and automatic
type conversion can have unintended results
In some cases of overloading, because of
automatic type conversion, a single method
invocation can be resolved in multiple ways
Ambiguous method invocations will produce
an error in Java
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Outline
Introduction/Overview
Constructors
Information Hiding
Overloading
Recursion
Homework!
Odds and Ends
More About Methods
Two kinds of methods
Methods that only perform an action
public void methodName( ) { /* body */ }
Example
Nothing to return
public void writeOutput( )
{
System.out.println(month + " " + day + ", " + year);
}
Methods that compute and return a result
pubic type methodName( ) {
/* body */
return a_value_of_type;
}
Example
The same data type
A variable, a constant, an expression, or an object
public double totalExpenditure( ) {
return textPrice1 + textPrice2 + courseFee;
}
SWE 510: Object Oriented Programming in Java
38
return Statement
Method to perform an action
void Method( )
Method to perform an action
Return is not necessary but
Return is necessary to return a
may be added to end the
method before all its code is
ended
Example
public void writeMesssage( ) {
System.out.println( “status” );
if ( ) {
System.out.println( “nothing” );
return;
}
else if ( error == true )
System.out.print( “ab” );
System.out.println( “normal” );
}
type Method( )
value to a calling method.
Example
public double totalExpenditure( ) {
return textPrice1 + textPrice2 + courseFee;
}
SWE 510: Object Oriented Programming in Java
39
Any Method Can Be Used As a
void Method
A method that returns a value can also
perform an action
If you want the action performed, but do not
need the returned value, you can invoke the
method as if it were a void method, and the
returned value will be discarded:
objectName.returnedValueMethod();
SWE 510: Object Oriented Programming in Java
40
Methods That Return a Boolean Value
An invocation of a method that returns a
value of type boolean returns either
true or false
Therefore, it is common practice to use
an invocation of such a method to
control statements and loops where a
Boolean expression is expected
if-else
statements, while loops, etc.