cis3023: programming fundamentals for cis majors ii summer 2010
DESCRIPTION
CIS3023: Programming Fundamentals for CIS Majors II Summer 2010. Classes and Objects (contd .). Course Lecture Slides 19 May 2010. Ganesh Viswanathan. Classes and Objects. - PowerPoint PPT PresentationTRANSCRIPT
CIS3023: Programming Fundamentals for CIS Majors IISummer 2010
Ganesh Viswanathan
Classes and Objects (contd.)
Course Lecture Slides 19 May 2010
Classes and Objects
Credits: Adapted from CIS-3023 lecture slides (Spring 2010) by Dr Seema Bandyopadhyay,
University of Florida, Gainesville.
2
Object InstantiationDeclaring and Creating object in two steps
Declaring and Creating object in single step
3
// <ClassName> <objectRefVar>;
Circle myCircle;myCircle = new Circle();
// <ClassName> <objectRefVar> = new <ClassName>();
Circle myCircle = new Circle();
Trace Code
4
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
Declare myCircle
no valuemyCircle
animation
Trace Code, cont.
: Circle radius: 5.0
5
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
no valuemyCircle
Create a circle
animation
Trace Code, cont.
: Circle radius: 5.0
6
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
reference valuemyCircle
Assign object reference to myCircle
animation
Trace Code, cont.
: Circle radius: 5.0
7
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
reference valuemyCircle
no valueyourCircle
Declare yourCircle
animation
Trace Code, cont.
: Circle radius: 5.0
8
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
reference valuemyCircle
no valueyourCircle
: Circle radius: 1.0
Create a new Circle object
animation
Trace Code, cont.
: Circle radius: 5.0
9
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle( );
yourCircle.radius = 100;
reference valuemyCircle
reference valueyourCircle
: Circle radius: 1.0
Assign object reference to yourCircle
animation
Accessing ObjectsReferencing the object’s data:
Invoking the object’s method:
10
// objectRefVar.datamyCircle.radius
//objectRefVar.methodName(arguments)myCircle.getArea()
Trace Code, cont.
: Circle radius: 5.0
11
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle( );
yourCircle.radius = 100;
reference valuemyCircle
reference valueyourCircle
: Circle radius: 1.0
Assign object reference to yourCircle
animation
Trace Code, cont.
: Circle radius: 5.0
12
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
reference valuemyCircle
reference valueyourCircle
: Circle radius: 100.0
Change radius in yourCircle
animation
Value Type vs. Reference Type
13
1 Value type int i = 1 i
Reference type Circle c c reference
Created using new Circle()
c: Circle
radius = 1
Copying Variables
14
i
Primitive type assignment i = j Before:
1
j
2
i
After: 2
j
2
c1
Object type assignment c1 = c2
Before:
c2
c1
After:
c2
c1: Circle radius = 5
C2: Circle radius = 9
c1: Circle radius = 5
C2: Circle radius = 9
Information Hiding
In a well designed OO application, a class publicizes what it can do i.e. its method signatures
but hides the internal details both of how it performs these services (method bodies)
and the data (attributes) that it maintains in order to
support these services
15
Access Modifiers
16
class Circle { private double radius;
public Circle() { this(1.0);
}
public Circle(double newRadius) { radius = newRadius; }
public double getArea() { return radius * radius * 3.14159; } }
Typically:
Attributes are declared private
Methods are declared public
Visibility Modifiers
17
public– The class, data, or method is visible to any class
private – The data or methods can be accessed only by the declaring class.
Accessing private attributespublic class Driver {
public static void main(String[] args){
Circle s1, s2; s1 = new Circle(14);
s2 = new Circle(7);
System.out.println(“Radius = “, s1.radius);outcome = s2.getArea(); //ok!
}}
18
Illegal: because attribute radius is hidden or private!
Accessing private attributes
How can code in any other class access them?
Programmer can provide methods to get and set them.
19
Get/Set MethodsGet method or Accessor
A method that returns the value of an attributee.g., getUFID( ) { …
return studentUFID; }
Set method or MutatorA method that changes the value of an attributee.g., getUFID( ) { …
return studentUFID; }
Typically, have one get method and one set method per attribute.
20
Example Class Code
21
public class Circle { private double radius;
public double getRadius() {return radius;
} public void setRadius(double radius){
this.radius = radius; }
public Circle() { this(1.0); } public Circle(double r) { setRadius(r); } public getArea() { return 3.14*radius*radius; } }
Example Driver Code
22
public class Driver { Circle c1 = new Circle(14); Circle c2 = new Circle(7);
System.out.println(c1.getRadius()); //ok! c1.setRadius(5); //ok! boolean outcome = s2.getArea(); //ok! }
23
public class Circle { private double radius;
public double getRadius() {return radius;
} public void setRadius(double r){
if (r>0) radius = r; }
public Circle() { this(1.0); } public Circle(double r) { setRadius(r); } public getArea() { return 3.14*radius*radius; } }
Some more code
public class Student {private String name; private String ssn;private float gpa;
public Student(int i, String n) {setSsn(i); setName(n); setGpa(0.0f);
}
// other constructors and methods, not shown here
public String getName () { return name; }public void setName(String newName) { name = newName;}
public String getSsn () { return ssn; }public void setSsn(String s) { ssn = s;}
public float getGpa () { return gpa; }public void setGpa(float newGpa) { gpa = newGpa;}
}
24
Still more code
public class Student {private String name; private String ssn;private float gpa;
private int numDsFs;
public Student(int i, String n) {setSsn(i); setName(n); setGpa(0.0f); setNumDsFs(0);
}
// other methods, not shown here
public boolean isOnProbation() { if(numDsFs > 3) return true;else return false; }
public String getName () { return name; }public void setName(String newName) { name = newName;}public String getSsn () { return ssn; }
public float getGpa () { return gpa; }public void setGpa(float newGpa) { gpa = newGpa;}
public void setNumDsFs(int n) { numDsFs = n; }}
25
Lots more code
Benefits of Information Hiding
• Allows Data Validation
• Allows control over the level of access given for an attribute
• Simplifies Code Maintenance
26
Class attributes
Each instance of a class (called an object) has a copy of the attributes
Changing an attribute in one object doesn’t affect the attribute of another object
27
Class Attributes, cont.
Sometimes you may want some data to be shared among all instances.
Example: we want all Student objects to have a shared access to the total student enrollment count at the university.
28
Static Attributespublic class Student {
private String name; private String ssn;private float gpa;
private static int totalNumStudents = 0;
public Student(int i, String n) {setSsn(i); setName(n); setGpa(0.0f);totalNumStudents++;
}
// other constructors, accessors/mutators, and methods, not shown here
public int getTotalNumStudents() { return totalNumStudents;
} }
29
Static Attributes, cont.A static attribute is one whose value is shared by all
instances of that class.
It in essence belongs to the class as a whole.
30
Static Attributes, cont.
// Client code:
Student s1 = new Student();Student s2 = new Student();Student s3 = new Student();
System.out.println(s1.getTotalNumStudents());System.out.println(s2.getTotalNumStudents());System.out.println(s3.getTotalNumStudents());
All of these println statements will print the value 3.
31
Static Methods
32
public class Student { private String name; private static int totalNumStudents = 0;
// other attribute details omitted ...
public static int getTotalNumStudents() { return totalNumStudents; }}
// Client codeStudent s1 = new Student();Student s2 = new Student();Student s3 = new Student(); System.out.println(Student.getTotalNumStudents());System.out.println(s1.getTotalNumStudents());
Static Methods
may only access static attributes
33
class Student { private String name; // NOT static private static int totalStudents; public static void print() {
System.out.println(name + " is one of " + totalStudents + " students."); // ILLEGAL! }}
Get more info!
34
• Value Types and Reference Types: http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
• Creating and initializing objects: http://docstore.mik.ua/orelly/java-ent/jnut/ch03_02.htm
• (Online) Search keywords:• JAVA classes and objects• JAVA pass by reference or value