Download presentation
Presentation is loading. Please wait.
Published byAlonso Setter Modified over 9 years ago
1
CSE115: Introduction to Computer Science I Dr. Carl Alphonce 219 Bell Hall 645-4739 alphonce@buffalo.edu 1
2
Association No necessary lifetime link Two implementations: –The first is very similar to composition, but differs in one crucial respect: where the target class is instantiated. –The second, which decouples lifetimes completely, is a bit more complex but also more flexible.
3
Revisiting Clifford Dog-Tail relationship is COMPOSITION –Dog takes responsibility for creating a Tail Dog-Collar relationship is ASSOCIATION –Dog takes NO responsibility for creating Collar
4
First implementation 3 changes to source class: 1.Declaration of instance variable 2.Assignment of existing instance to the instance variable 3.Parameter of constructor is of same type as instance variable 1 2 3
5
Dog – Collar example in Java public class Dog { private Collar _collar; public Dog(Collar collar) { _collar = collar; } 1 2 3
6
Essence of association one object can communicate with another object there is no necessary lifetime link between the two objects the objects in the relationship can change over time
7
Lifetime issue in constructor implementation the source class (Dog) does not create an instance of the target (Collar) class there is a lifetime dependency: the target (Collar) object must exist before the source (Dog) object can be created: – a Collar object must be provided in the constructor of the Dog object.
8
This occurs in this particular implementation of the relationship, but is not an essential characteristic of the relationship. Lifetime issue (continued)
9
Changing a property value We want to be able to set a new value for the property (e.g. give Clifford a new collar). How can we do that? –Using a “mutator” method.
10
Association relationship (take 2) We’ve seen one implementation of “knows a” – using a parameter in constructor: public class Dog { private Collar _collar; public Dog(Collar collar) { _collar = collar; } Now we will see a more flexible implementation.
11
Association via constructor and mutator method public class Dog { private Collar _collar; public Dog(Collar c) { _collar = c; } public void setCollar(Collar c) { _collar = c; }
12
Constructor/mutator similarity Similarity: both set the value of the instance variable. Difference: constructor sets value when Dog object is created mutator changes the value at some later point in time public class Dog { private Collar _collar; public Dog(Collar c) { _collar = c; } public void setCollar(Collar x) { _collar = x; }
13
On blackboard object diagram & memory diagram for: clifford.Collar smallCollar; smallCollar = new clifford.Collar(); clifford.Dog fido; fido = new clifford.Dog(smallCollar); clifford.Collar mediumCollar; mediumCollar = new clifford.Collar(); fido.setCollar(mediumCollar);
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.