CIS3023: Programming Fundamentals for CIS Majors II Summer 2010

34
CIS3023: Programming Fundamentals for CIS Majors II Summer 2010 Ganesh Viswanathan Objects and Classes (contd.) Course Lecture Slides 19 May 2010

description

CIS3023: Programming Fundamentals for CIS Majors II Summer 2010. Objects and Classes (contd.). Course Lecture Slides 19 May 2010. Ganesh Viswanathan. Objects and Classes. - PowerPoint PPT Presentation

Transcript of CIS3023: Programming Fundamentals for CIS Majors II Summer 2010

Page 1: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

CIS3023: Programming Fundamentals for CIS Majors IISummer 2010

Ganesh Viswanathan

Objects and Classes (contd.)

Course Lecture Slides 19 May 2010

Page 2: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

Objects and Classes

Credits: Adapted from CIS3023 lecture slides (Spring 2010) by Dr Seema Bandyopadhyay,

University of Florida, Gainesville.

2

Page 3: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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();

Page 4: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

Trace Code

4

Circle myCircle = new Circle(5.0);

Circle yourCircle = new Circle();

yourCircle.radius = 100;

Declare myCircle

no valuemyCircle

animation

Page 5: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 6: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 7: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 8: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 9: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 10: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

Accessing ObjectsReferencing the object’s data:

Invoking the object’s method:

10

// objectRefVar.datamyCircle.radius

//objectRefVar.methodName(arguments)myCircle.getArea()

Page 11: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 12: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 13: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 14: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 15: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 16: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 17: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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.

Page 18: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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!

Page 19: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

Accessing private attributes

How can code in any other class access them?

Programmer can provide methods to get and set them.

19

Page 20: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 21: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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; } }

Page 22: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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! }

Page 23: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 24: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 25: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 26: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

Benefits of Information Hiding

• Allows Data Validation

• Allows control over the level of access given for an attribute

• Simplifies Code Maintenance

26

Page 27: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 28: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 29: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 30: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 31: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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

Page 32: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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());

Page 33: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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! }}

Page 34: CIS3023: Programming Fundamentals for CIS Majors II Summer  2010

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