310 likes | 331 Views
Explore implementing class, state, activity, and sequence diagrams. Learn about inheritance, associations, and object-oriented concepts.
E N D
Chapter 5Implementing 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
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.
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
Package Package package com.abc.library; class ClassA …. { … }
Inheritance • Single inheritance can be easily implemented by super class and subclass in most OO programming languages, e.g. use extends in Java. • Multiple inheritances may not be supported in some OO programming languages. • Replace some of the inheritances by interfaces.
Inheritance Inheritance class SubClass extends BaseClass { … }
Inheritance (cont’d) Inheritance • interface BaseInterface { • // declaration of methods • …. • } • class ConcreteClass implements BaseInterface • { • // implementation of • // methods of the • // interface BaseInterface • … • }
Inheritance (cont’d) • class Class2 extends Class1 implements Interface3 { • … • define attributes from class3 • define operations from interface3 • }
One-to-one Association (cont’d) One-to-one Association • class ClassA { • ClassB _b; • // declare attributes • // for the • // association class • … • } • class ClassB { • ClassA _a; • … • }
One-to-many Association (cont’d) One-to-many Association • class ClassA { • Vector _b; // or hashtable • … • } • class ClassB { • ClassA _a; • // declare attributes • // for association • // class • }
One-to-many Association (cont’d) • import java.util.Vector; • class ClassA { • Vector _Bs; • public ClassA() { • _Bs = new Vector(); • … • } • public Enumeration getBs() { • return(_Bs.elements()); • }
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 • … • }
Qualified Association (cont’d) One-to-many Association • class ClassA { • Hashtable _b; • … • } • class ClassB { • ClassA _a; • // declare attributes • // for association • // class • … • }
Qualified Association (cont’d) import java.util.Hashtable; 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); }
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
Qualified Association (cont’d) • class Key { • int _key; • public Key(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
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.
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.
Example – One-to-many Association (cont’d) class Car { private int EngineNo; private int ChasisNo; private int OwnershipYear; private int OwnershipMonth; private int OwnershipDay; … }
Example - Many-to-many Association Example of objects and links Many-to-many Association
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); }
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
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; }
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
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); }
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
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]); }
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()); } } }
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.