1. 1
Chapter 5
Implementing UML
Specification
(Part I)
Object-Oriented Technology
From Diagram to Code with Visual Paradigm for UML
Curtis H.K. Tsang, Clarence S.W. Lau and Y.K.
Leung
McGraw-Hill Education (Asia), 2005
2. 2
Objectives
After you have read this chapter, you
should be able to
implement a class diagram;
implement a state diagram;
implement an activity diagram; and
implement sequence and
collaboration diagrams.
3. 3
Class
class SampleClass {
private int privateAttribute;
protected double protectedAttribute;
long packageAttribute;
public boolean publicAttribute;
public boolean publicMethod(int parameter1) {
…
}
private float privateMethod(byte parameter1,float parameter2) {
…
}
protected double protectedMethod() {
…
}
void packageMethod(short parameter1) {
…
}
}
A Single Class
4. 4
Inheritance
Single inheritance can be easily implemented by
super class and subclass in most OO programming
languages.
Multiple inheritances may not be supported in some
OO programming languages.
Replace some of the inheritances by interfaces.
12. 12
One-to-many Association
(cont’d)
// remove the link between ClassB object to this
// object
public void removeB(ClassB b) {
_Bs.remove(b);
}
public void addB(ClassB b) {
_Bs.add(b);
}
// other functions for searching objects in the
// vector
…
}
13. 13
Qualified Association (cont’d)
class ClassA {
Hashtable _b;
…
}
class ClassB {
ClassA _a;
// declare attributes
// for association
// class
…
}
One-to-many
Association
14. 14
Qualified Association (cont’d)
class ClassA {
private Hashtable _Bs;
public ClassA() {
_Bs = new Hashtable();
}
public Enumeration getBs() {
return(_Bs.elements());
}
public void addB(ClassB b, int key) {
_ClassBs.put(new Key(key), b);
}
15. 15
Qualified Association (cont’d)
public void removeClassB(ClassB b) {
_ClassBs.remove(b);
}
public ClassB getClassB(int key) {
return((ClassB) _Bs.get(new Key(key)));
}
} // ClassA
16. 16
Qualified Association (cont’d)
class Key {
int _key;
public ClassB(int key) {
_key = key;
}
public boolean equals(Object obj) {
if (obj instanceof Key)
return(((Key) obj)._key == _key);
else
return(false);
}
public int hashCode() {
return(_key);
}
}// Key
17. 17
Many-to-many Association
(cont’d)
Many-to-many Association
If the association does not have additional
attributes, we can use a vector or a
hashtable on each side.
If the association has attribute(s), a distinct
association class is needed for holding the
links between the objects and storing the
additional attributes of the association.
18. 18
Implementation of Association Class
One-to-one association. Assign the
attributes of the association class to
one of the classes of the association.
One-to-many association. Assign the
attributes of the association class to the
class on the many side.
Many-to-many association. Implement
the association class as a distinct class.
20. 20
Example – One-to-many Association
(cont’d)
class Car {
private int EngineNo;
private int ChasisNo;
private int OwnershipYear;
private int OwnershipMonth;
private int OwnershipDay;
…
}
22. 22
Example – Many-to-many
Association (cont’d)
class School {
private String _name;
private Vector _registrations;
public School(String name) {
_name = name;
_registrations = new Vector();
}
public void setName(String name) {
_name = name;
}
public String getName() {
return(_name);
}
23. 23
Example – Many-to-many
Association (cont’d)
// school class continues
public void addRegistration(Registration reg) {
_registrations.add(reg);
}
public void removeRegistration(Registration reg) {
_registrations.remove(reg);
}
public Enumeration getStudents() {
int i;
Vector students = new Vector();
for (i = 0; i < _registrations.size(); i++)
students.add(((Registration) _registrations.elementAt(i)).getStudent());
return(students.elements());
}
} // school
24. 24
Example – Many-to-many
Association (cont’d)
class Person {
private String _name;
private Vector _registrations;
public Person(String name) {
_name = name;
_registrations = new Vector();
}
String getName() {
return(_name);
}
void setName(String name) {
_name = name;
}
25. 25
Example – Many-to-many
Association (cont’d)
// Class Person continues
public void addRegistration(Registration reg) {
_registrations.add(reg);
}
public void removeRegistration(Registration reg) {
_registrations.remove(reg);
}
public Enumeration getSchools() {
int i;
Vector schools = new Vector();
for (i = 0; i < _registrations.size(); i++)
schools.add(((Registration) _registrations.elementAt(i)).getSchool());
return(schools.elements());
}
} // Person
26. 26
Example – Many-to-many
Association (cont’d)
class Registration {
private Person _student;
private School _school;
private int _studentNo;
private Registration(Person student, School school, int studentNo) {
_school = school;
_student = student;
_studentNo = studentNo;
}
static public void register(Person student, School school, int studentNo) {
Registration reg = new Registration(student, school, studentNo);
school.addRegistration(reg);
student.addRegistration(reg);
}
27. 27
Example – Many-to-many
Association (cont’d)
// Class Registration continues
public void deregister() {
this._school.removeRegistration(this);
this._student.removeRegistration(this);
}
public School getSchool() {
return(_school);
}
public Person getStudent() {
return(_student);
}
} // class Registration
28. 28
Example – Many-to-many
Association (cont’d)
public class Main3 {
public static void main(String argv[]) {
int i;
String schoolNames[] = {"TWGS", "KCTS", "LKP", "CMT", "KKY"};
String studentNames[] = {"Peter Chan", "Alan Tong", "John Lee", "Venice
Tsui", "Mary Lui"};
Person students[] = new Person[5];
School schools[] = new School[5];
for (i = 0; i < 5; i++) {
students[i] = new Person(studentNames[i]);
schools[i] = new School(schoolNames[i]);
}
29. 29
Example – Many-to-many
Association (cont’d)
Registration.register(students[0], schools[0], 1241);
Registration.register(students[1], schools[1], 1234);
Registration.register(students[2], schools[1], 1111);
Registration.register(students[3], schools[2], 9878);
Registration.register(students[4], schools[3], 6782);
Registration.register(students[4], schools[4], 9807);
Registration.register(students[4], schools[0], 9080);
Enumeration s = Registration.getSchools("Mary Lui");
System.out.println("Mary Lui studies in the following schools:");
for (;s.hasMoreElements();) {
System.out.println (((School) s.nextElement()).getName());
}
}
}
30. 30
Composition & Aggregation
Aggregation can be implemented as a plain
association.
Composition is a special case of aggregation. The
parts of the whole object is deleted before the whole
object is deleted.
31. 31
Persistent Classes
Persistent objects have long life spans and need to
be stored in permanent storage media, such as hard
disk.
Usually a database system is used to store the
persistent objects.
Two choices of database technologies: OO database
vs Relational database.
Relational database is more mature and commonly
used technology.
Need to map the classes into database tables if
relational database is used.