01 - Class and Objects
01 - Class and Objects
Topic :
Objects and Classes
Java
Programming Object-Oriented Programming Principles
2
Java
Programming Characteristics of an Object
• State
– The internal attributes of a thing, and their values
• Behavior
– Operations that affect the state of a thing
– Operations a thing performs based on its state
– Methods describe how objects behave and how objects from other classes
can interact with an object
– Mutator methods change state of object -- setAttribute
– Accessor methods return state of object -- getAttribute
• Identity
– Given any two things, we can tell them apart from each other
– Implementation: Record ID, SS#, memory address, etc.
3
Java
Programming Object
• Real-world Example
– Cruise Control
– User Interface
– On/Off
– Set
– Increase
– Decrease
– Implementation
– State
– Desired speed
– Actual speed
– Operations
– Activate
– Deactivate
– Accelerate
– Decelerate
– Identity
– Unique instance for each vehicle
4
Java
Programming Object-Oriented Programming Principles
• Class
– Template from which an object is actually made
– Specifies operations and states for a type of object
– An object that conforms to a class description is an instance of that class
– There may be multiple instances (objects) created from a class
– Classes themselves are not “objects”
– It’s the difference between saying
– “Colleges offer courses” and “AFIT offers CSCE694”
– One is a general statement true for all colleges; the other is a specific
example
– Classes describe the general case,
– Objects are the specific instances
5
Java
Programming Object-Oriented Programming Principles
6
Java
Programming Class Relationships
• Association (uses)
– A class uses another class if it manipulates objects of that class
– Method of class A sends message to an object of class B
– Method of A creates, receives, or returns objects of class B
• Aggregation (has-a)
– Objects of class A contain objects of class B
– Special case of use
• Inheritance (is-a) (more on this later)
– If class A extends class B, class A inherits methods from class B
– Class A is a specialization of class B
* 1
uses has
is-a
* 4
Automobile Tire Manager
7
Java
Programming Class Relationships
Course
-name: String
-credits: int
+printRoster()
+enroll(newStudent: Student)
attends teaches
1..*
Student Professor
-name: String -name: String
-studentID: long -title: String
+printSchedule() +printCourseLoad()
8
Java
Programming Java Classes
9
Java
Programming Java Classes
class Person
{
// Attributes
private String m_name;
private int m_age;
Person
// Operations name: String
Person(String name, int age) age: integer
{
m_name = name;
m_age = age; printPerson()
} getAge()
public void printPerson()
{
System.out.print(“Name:”);
System.out.print(m_name);
System.out.print(“ Age:”);
System.out.println(m_age);
}
public int getAge()
{
return m_age;
}
}
10
Java
Programming Attributes
• Attributes
11
Java
Programming Java Classes – Attributes
class ExampleClass
{
// Valid class attributes (default initialization)
private short m_attackFlag; // Defaults to 0
private float Burst_Rate; // Defaults to 0.0
private boolean moving; // Defaults to false
12
Java
Programming Methods
13
Java
Programming Methods
Basic format: <visibility><type><name>(<params>)
{
<body>
}
class Employee
{
public Employee(String n, double s)
{
_name = n;
_salary = s;
}
public double salary()
{
return _salary;
}
public void raiseSalary(double percent)
{
_salary *= 1 + percent/100;
}
private String _name;
private double _salary;
}
14
Java
Programming Methods
• All parameters are passed by value
– must use objects to pass by reference
class Employee
{ …
public void swapSalary(Employee b)
{ double temp = _salary;
_salary = b.salary
b._salary = temp;
}
}
– cannot change the value passed as b, but can change the contents
– Wrong:
class Employee
{ …
public void assign(Employee b, Employee a)
{
b = a;
}
}
15
Java
Programming Scope/Visibility
private public
protected
16
Java
Programming Using Class Instances (objects)
• Creating an object
– Use the keyword new followed by a constructor
Employee newGuy = new Employee( “Tim”, 1000 );
– Constructors
– Default constructor used if none supplied by user
– User-defined constructors may be supplied
– Objects created using new are called “references”
• References
– Essentially a pointer without the C/C++ notation
– No explicit memory deallocation is required
– When used as function parameters, copies memory addresses … not the
objects (like C/C++)
17
Java
Programming Using Class Instances
18
Java
Programming Constructors
• Automatically called when object is created
• Same name as class -- e.g. Date();
• No return value
• May be more than one constructor per class
• Default constructor with no arguments should be specified
– initialize to reasonable default value
public Date()
{
_day = 1;
_month = 1;
_year = 1;
}
• Constructor with arguments -- initialize to user specified values
public Date( int d, int m, int y)
{
_day = d;
_month = m;
_year = y;
}
• Cannot be invoked on existing objects
19
Java
Programming Constructors
class Employee
{
public Employee( String n, double s )
{
String _name = n;
double _salary = s;
}
…
private String _name;
private double _salary;
}
20
Java
Programming Java Example
class Person static public void
{ main(String args[])
// Attributes {
int m_age; // Create a Person instance
double m_gpa; Person p1 =
String m_name; new
Person("Pyle",27,1.9);
// Operations Person p2;
public Person(String name,
// Print the name of
int age, double // the person
gpa) System.out.print("Name: ");
{ p1.printName();
m_age = age; p2 = p1;
m_name = name;
m_gpa = gpa; // Print the same name again
} System.out.print(" Name: ");
p2.printName();
private void printName() }
{
} // End class Person
System.out.print(m_name);
}
21
Java
Programming Class Attributes/Methods
• Class methods/attributes
– Use static keyword in front of declaration
Class MyMath
{…
static void add( int val1, int val2 );
}
– May be accessed by using ClassName.method() or ClassName.attribute notation
MyMath.add( 1, 3 );
– An instance of the class is not required for access
• Class-wide Attributes
– An attribute shared by all instances of a class
– If one instance changes it … all others see the change
– Analog: Global Variable … use SPARINGLY
• Class-wide Operation
– A “meta operation” … operates on the class, not instances of the class
– Typical application:
– Creating new class members, assigning class ID numbers, etc.
22
Java
Programming Packages
23
Java
Programming Development Process
• Analysis
– Transform vague understanding of a problem into a precise description of
the tasks to be solved
– Concerned with description of what must be done, not how it should be
done
• Design
– Structure programming tasks into classes and packages (logically
grouped clusters of objects)
– Specify operations and attributes of each class
– Specify relationships with other classes in the system
• Implementation
– Classes and operations are coded, tested, and integrated
– Object-orientation encourages evolutionary development since behavior
and state is encapsulated into objects with predefined interfaces – thus
objects or packages can be incrementally added and tested more easily
24
Java
Programming Object-Oriented Design
25
Java
Programming Object-Oriented Design
• Finding classes
– Look for nouns in problem analysis
– Many are good choices for classes
– Other classes may be necessary
• Finding operations
– Look for verbs in problem analysis
– Each operation must have exactly one class responsible for carrying it out
• Finding class relationships
– Association uses; a class uses another class if manipulates objects of
that class in any way; should be minimized
– Aggregation “has-a”, contains;
– Inheritance “is-a”, specialization; useful in select places
26
Java
Programming Object-Oriented vs. Traditional Design
Traditional Object-Oriented
27
Java
Programming Design Hints
• Always keep data private
– If user of the class has a need to both read and change a field (attribute),
the following 3 items must be implemented in the class
– A private data field
– A public field accessor method
– A public field mutator method
– Benefits
– Internal implementation can be changed without affecting any code
outside of the class
– Mutator methods can perform error-checking to ensure field is set
properly
– Accessors to fields with mutable objects
– Should return clone of object so that calling object can not modify
the field object contained in the class instance
• Always initialize data
– Avoids unexpected results
– Simplifies debugging
28
Java
Programming Design Hints
• Don't use too many basic types in a class
– Group related types into a separate class and use that class instead
– Bad – Good
class Employee class Employee
{ {
– private String _lname; private Name _name;
– private String _fname; private Address _address;
– private char _initial; private Date _hiredate;
– private String _street; }
– private String _city;
– private String _state;
– private long _zip;
}
• Not all fields need individual field accessors and mutators
• Use a standard format for class definitions
• Break up classes with too many responsibilities
• Make the names of your classes and methods reflect their responsibilities
29
Java
Programming Homework
• Compile and run the Person example code
• Analyze the requirements for a Calculator program
– Identify the classes, the operations, and the relationships
between classes
– Make stub code for all your classes and operations with
definitions
for the has-a relationships
– Remember each class goes in a separate file
• Write and test a swap method
– Create a simple class with one int data member
– Write a swap method for that class that swaps values:
– : static public void swap(mytype a, mytype b);
– Such that after swap(a,b) is called a looks like b looked and b looks
like a looked
30