180 likes | 256 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 – less than 2 weeks away covers material from exam 1 up to & including 10/15 review on Monday 10/18 exam on Wednesday 10/20. 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 – less than 2 weeks away • covers material from exam 1 up to & including 10/15 • review on Monday 10/18 • exam on Wednesday 10/20
Agenda • association relationship • null • this
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”. • :-(
‘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(Collar collar) { _collar = collar; } public Collar removeCollar() { Collar temp = _collar; _collar = null; return _collar; } }