Object-Oriented Programming in Java Topic : Objects and Classes

Download Report

Transcript Object-Oriented Programming in Java Topic : Objects and Classes

Air Force Institute of Technology
Electrical and Computer Engineering
Object-Oriented Programming in Java
Topic :
Objects and Classes (cont)
Object–Oriented Design
Maj Joel Young
[email protected]
4-Apr-16
Maj Joel Young
Object-Oriented
Programming
Design
Using Class Instances
• Accessing an instance method:
newGuy.raiseSalary( 10.0 );
• Accessing an instance attribute:
double hisSalary = newGuy._salary;
newSalary = this._salary * ( 1 + percent/100);
//”this” refers to current instance
• Note: direct access to other object’s attributes is discouraged
– (and in fact it is not allowed in above case due to private attribute)
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
2
Object-Oriented
Programming
Design
•
•
•
•
•
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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
3
Object-Oriented
Programming
Design
Constructors
• A quick quiz on constructors– can you spot the error?
class Employee
{
public Employee( String n, double s )
{
String _name = n;
double _salary = s;
}
…
private String _name;
private double _salary;
}
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
4
Object-Oriented
Programming
Design
Java Example
class Person
{
// Attributes
int m_age;
double m_gpa;
String m_name;
static public void
main(String args[])
{
// Create a Person instance
Person p1 =
new Person("Pyle",27,1.9);
Person p2;
// Operations
public Person(String name,
int age, double gpa)
{
m_age = age;
m_name = name;
m_gpa = gpa;
}
private void printName()
{
System.out.print(m_name);
}
4-Apr-16
// Print the name of
// the person
System.out.print("Name: ");
p1.printName();
p2 = p1;
// Print the same name again
System.out.print(" Name: ");
p2.printName();
}
} // End class Person
Air Force Institute of Technology
Electrical and Computer Engineering
5
Object-Oriented
Programming
Design
•
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.
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
6
Object-Oriented
Programming
Design
Packages
• Java code is distributed in separate packages (you can also
create your own packages)
• To access code in a package
– refer to class by full name
java.util.Vector v = new java.util.Vector();
– or import class into your program
import java.util.Vector
Vector v = new Vector();
– or import entire package
import java.util.*
• Package paths map to directory structure
java.util.Vector 
<CLASSPATH>\java\util\<vector package files>
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
7
Air Force Institute of Technology
Electrical and Computer Engineering
Object-Oriented Programming in Java
Topic :
Object–Oriented Design
Maj Joel Young
[email protected]
4-Apr-16
Maj Joel Young
Object-Oriented
Programming
Design
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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
9
Object-Oriented
Programming
Design
Object-Oriented Design
• Goal: decompose a programming task into data types or
class and define the functionality of these classes
• Sub-goals
– Identify classes
– Identify functionality of classes
– Identify relationships among classes
• A good design greatly reduces time required for
implementation and testing
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
10
Object-Oriented
Programming
Design
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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
11
Object-Oriented
Programming
Design
Object-Oriented vs. Traditional Design
Traditional
Object-Oriented
• Decomposition into sub-tasks
– Often results in numerous
procedures or functions
– Difficult to manage and
understand
• Task modules can simulate
objects by organizing related
tasks and attributes
– Only one instance (e.g. queue)
• Encapsulation achieved with
opaque types (e.g. Unix file
interface)
– No inheritance
4-Apr-16
• Decomposition into objects with
associated tasks
– Convenient clustering
– Data encapsulation helps
debugging
– Multiple instances with similar
behavior
– Inheritance captures
commonalities among related
classes of objects
Air Force Institute of Technology
Electrical and Computer Engineering
12
Object-Oriented
Programming
Design
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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
13
Object-Oriented
Programming
Design
Design Hints
• Don't use too many basic types in a class
– Group related types into a separate class and use that class instead
– Good
– Bad
class
{
–
–
–
–
–
–
–
}
•
•
•
•
4-Apr-16
Employee
private
private
private
private
private
private
private
String _lname;
String _fname;
char _initial;
String _street;
String _city;
String _state;
long _zip;
class Employee
{
private Name _name;
private Address _address;
private Date _hiredate;
}
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
Air Force Institute of Technology
Electrical and Computer Engineering
14
Object-Oriented
Programming
Design
Homework Discussion
• Compile and run the Person example code
• 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
• 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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
15
Object-Oriented
Programming
Design
Homework Assignment Due Monday
• COMACC Calculator Question and Answer Session
• Analyze the requirements for a Calculator program
– Provide a narrative discussion of the requirements and behavior
COMACC expects from the Calculator
– Prepare clarification questions. Proposing alternatives is a strong plus
– Discuss what is feasible in the next 3 weeks. Remember that you will
know more in the next few weeks
– Provide me this in hard copy with your email address on it
• Be prepared to:
– 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
4-Apr-16
Air Force Institute of Technology
Electrical and Computer Engineering
16