210 likes | 317 Views
CSE115: Introduction to Computer Science I. Dr. Carl Alphonce 219 Bell Hall 645-4739 alphonce@buffalo.edu. Phones off Signs out. Announcements. Exam 2 – 2 weeks away covers material from exam 1 up to & including 10 / 21 review on Monday 10 / 24 exam on Wednesday 10 / 26. Agenda.
E N D
CSE115: Introduction to Computer Science I Dr. Carl Alphonce 219 Bell Hall 645-4739 alphonce@buffalo.edu
Phones off Signs out
Announcements • Exam 2 – 2 weeks away • covers material from exam 1 up to & including 10/21 • review on Monday 10/24 • exam on Wednesday 10/26
Agenda • association relationship (recap) • null • this
accessor/mutatordifferencesin function Information flowing in to method public void setCollar(Collar collar){ _collar = collar; } public Collar getCollar() { return _collar; } Information flowing out from method
accessor/mutator differencesin form public void setCollar (Collar collar) a.c.m. r.t.s. name parameter list public Collar getCollar () a.c.m. r.t.s. name parameter list a.c.m. = access control modifier r.t.s. = return type specification void = no value is returned by method (note difference with constructors: no r.t.s.)
Parameter list difference public void setCollar(Collar collar) public Collar getCollar() Accessors and mutators can be defined for any of the instance variables declared in a class. A mutator method needs a value to set the instance variable to. The mutator method is parameterized in its behavior. An accessor method always does the same thing: it returns the current value of the instance variable. The accessor method is therefore not parameterized in its behavior.
What about public/private? They are access control modifiers: they control access to members of a class (instance variables and methods are called members). A member which is public can be accessed from outside of the class definition. This is the least restrictive form of access control. A member which is private can only be accessed from inside the class definition. This is the most restrictive form of access control.
Why accessors/mutators? • Why use accessors and mutators, rather than just make instance variables public? • public grants both read/write access. With accessors/mutators you can be selective in allowing just one or the other (or both). • Accessors/mutators are methods, and can do more than simply grant read/write access to instance variables (Bank account example). • Accessors/mutators can exist for “virtual” instance variables: • Many graphical objects provide both a getLocation/setLocation pair, as well as a getCenterLocation/setCenterLocation pair. In reality, only one location is stored, the other is calculated. Which is stored? Who cares? The client of the code does not need to know – the methods will do the right thing. The implementation can even change and the methods will still work correctly.
Example 1 Shape s1 = new Shape(java.awt.Color.BLUE); Shape s2 = new Shape(java.awt.Color.RED); public class Shape { private java.awt.Color _color; public Shape(java.awt.Colorc) { _color = c; } ... }
Example 1 Shape s1 = new Shape(java.awt.Color.BLUE); Shape s2 = new Shape(java.awt.Color.RED); Shape BLUE _color s1 Shape RED _color s2
public class Shape { private java.awt.Color _color; public Shape(java.awt.Colorc) { _color = c; } public java.awt.ColorgetColor() { return _color; } public void setColor(java.awt.Colorc) { _color = c; } }
Example 1 Shape s1 = new Shape(java.awt.Color.BLUE); Shape s2 = new Shape(java.awt.Color.RED); s2.setColor(s1.getColor()); Shape BLUE _color s1 Shape RED _color s2
Result? • Both shapes have the same color (java.awt.Color.BLUE). • This is OK.
Example 2 Dog fido = new Dog(new Collar()); Dog dino = new Dog(new Collar()); Dog _collar fido Dog _collar dino
Example 2 Dog fido = new Dog(new Collar()); Dog dino = new Dog(new Collar()); dino.setCollar(fido.getCollar()); Dog _collar fido ??? Dog _collar dino
Result? • Both dogs have the same collar. • ?!? • Second collar is “lost”. • :-(
What could we do instead? • Try to express what the basic problem is, and what we could do instead, in plain English.
‘null’ • ‘null’ denotes the null reference, a reference which does not refer to any object. • We can use ‘null’ to solve the two dogs, one collar problem (see code on next slide):
removeCollar rather than getCollar public class Dog { private Collar _collar; public Dog(Collar collar) { _collar = collar; } public void setCollar(Collarcollar) { _collar = collar; } public Collar removeCollar() { Collar temp = _collar; _collar = null; return temp; } }