By Assoc. Prof. Rangsit Sirirangsi Package, Component & Deployment Diagram Object Oriented Development with UML
By Assoc. Prof. Rangsit Sirirangsi
Package, Component & Deployment Diagram
Object Oriented Development with UML
นยาม packageเพอจดเกบสวนตาง ๆ ใหอยในรปของกลมทสามารถจดการไดงาย
วตถประสงคของการสราง package ไดอาแกรมแสดงมมมองดานบนสดของความตองการของระบบ แสดงความสมพนธแบบ Dependency ระหวางกน เพอแสดงลอจกการท างานของระบบทมความซบซอน
What is package Diagram?
Package Diagram
การออกแบบโครงสรางของระบบทมความยดหยนจะชวยเพมความสามารถในการจดการกบความเปลยนแปลงไดดขน
การเพมความยดหยนใหกบโครงสรางของระบบเชงวตถไดแก การออกแบบความสมพนธระหวางคลาสรวมไปถง package
Packages เปนเทคนคทเหมาะสมทจะใชกบระบบทมขนาดใหญ ซงสามารถทจะจดการไดโดยไมตองเจาะลกถงรายละเอยด ซงจะชวยใหนกออกแบบสามารถทจะท าความเขาใจกบระบบไดงายขน
Using a package to simplify a collaboration
Complex Collaboration
Identifying Sub -
Collaboration
Replacing
with Package
Dependency between Package
Package ใน UML ใชความสมพนธแบบ dependency นนคอความสมพนธแบบใดกตามทเกดขนระหวางคลาสใด ๆ ใน package ทตางกนจะสงผลใหเกด package dependency เสมอ
ความสมพนธแบบ dependency แสดงใหเหนวาหากมการเปลยนแปลงเกดขนในแพกเกจหนงอาจสงผลใหเกดความเปลยนแปลงในแพคเกจทเกยวของดวย
P2 P1
Difference View between Package & Class
ความสมพนธระหวาง Package น าเสนอมมมองในระดบบนสด ขณะทความสมพนธระหวางคลาสน าเสนอมมมองในระดบลาง
ทงสองมมมองน าเสนอระบบเดยวกน ดงนนตองสอดคลองกนเสมอ
General Guidelines
ก าหนดชอของ Packages ใหสอความหมายไดอยางชดเจน ประยกตใช Packages เพอลดความซบซอนของไดอาแกรม ในกรณทตองการระบถงระดบของสถาปตยกรรมทใชควรระบ Stereotypes ลงบน
Packages ควรระวง Cyclic Dependencies ทเกดขนระหวาง Packages Package Dependencies ควรสะทอนถงความสมพนธภายในเปนหลก Packages ควรมลกษณะเปน High Cohesion
Coupling & Cohesion Concepts
High Coupling & Loosely Cohesion
Loosely Coupling & High Cohesion
Java Package
java package เปนกลมของคลาส interface หรอ package ยอมทมลกษณะคลายกนหรอใกลเคยงกน
Package ในจาวาสามารถจดหมวดหมไดเปน 2 แบบ ไดแก built-in package และ user-defined package
built-in packages ไดแก lang, awt, javax, swing, net, io, util, sql etc.Advantage of Java Package1) Java package ถกใชในการจดหมวดหมคลาสและ interfaces เพอสะดวกตอการบ ารงรกษา
2) Java package จดเตรยมกลไกในการปองกนการเขาถงไว3) Java package ชวยลดความยงยากเกยวกบการตงชอ
Java Package
ตวอยาง Package ในจาวา
How to access package from another package?
การเขาถง package จากภายนอกสามารถท าได 3 วธ ไดแกimport package.*; กรณนทก ๆ คลาสและ interface ทอยภายใน package นจะถกเขาถงได แตไมรวมถง subpackages
import package.classname; กรณนมเพยง package.classname ทถกระบไวเทานนทสามารถเขาถงได
fully qualified name กรณนชอทถกระบไวเทานนทสามารถเขาถงได โดยไมจ าเปนตอง
import แตตองใช fully qualified name ทกครงทมการเขาถง class หรอinterface
import package.*;
package pack;
public class A {
public void msg() {
System.out.println("Hello");
}
}
package mypack;
import pack.*;
class B {
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
import package.classnamepackage pack;
public class A {
public void msg() {
System.out.println("Hello");
}
}
package mypack;
import pack.A;
class B {
public static void main(String args[]){
A obj = new A();
obj.msg();
}
}
Using fully qualified namepackage pack;
public class A {
public void msg() {
System.out.println("Hello");
}
}
package mypack;
class B {
public static void main(String args[]){
pack.A obj = new pack.A(); //using fully qualified name
obj.msg();
}
}
Package ทก ๆ คลาสตองเปนของ package หนง ๆ ในกรณทไมมการก าหนดไวจะเปนของpackage ทไมมการตงชอไว
ชอของ package เปน string (ทแยกดวย“.”) เชน java.lang, dk.itu.oop.lesson2.
ชอของคลาสเปนชอของ package ตามดวย “.” ตอทายดวยชอของคลาส เชน java.lang.String.
แตละคลาสสามารถประกาศ package ได เชน package dk.itu.oop.lesson3;
package com.itmju.oop.lesson3;
import com.itmju.oop.lesson1.Ball;
import java.awt.*;
import static java.lang.System.out;
public class MovingBall extends Ball {
private Component myComponent;
public MovingBall(String color) {
super(color);
out.println("A ball is created");
} //
...
}
Beginners guide to access...
ค าแนะน าสวนใหญ ไดแกก าหนดใหทกฟลดเปน private
สรางเมธอด getter ทก ๆ ฟลด แตเมธอด setter เทาทจ าเปน
package com.itmju.oop.lesson1;
public class Ball {
private int x, y;
private String color;
public Ball(String color) {
this.color = color;
x = 0;
y = 0;
}
public void move(int dx, int dy) {
x += dx;
y += dy;
}
public int getY() {
return y;
}
public int getX() {
return x;
}
}
Access Modifiers in java
Modifiers ในจาวาม 2 แบบ: access modifiers และ non-access modifiers access modifiers ในจาวาใชก าหนดขอบเขตในการเขาถงแอททรบวต เมธอด คอนสตรคเตอร หรอคลาส
แบงไดเปน 4 ชนดprivatedefaultprotectedpublic
สวน non-access modifiers ไดแก static, abstract, synchronized, native, volatile, transient และอน ๆ
private access modifier
กลไกในการเขาถงแบบ private สามารถเขาถงไดเฉพาะทอยภายในคลาสเดยวกนเทานน
public class A {
private int data=40;
private void msg() {
System.out.println("Hello");
}
}
class B {
public static void main(String args[]) {
A obj=new A();
System.out.println(obj.data) ; //Compile Time Error
obj.msg(); //Compile Time Error
}
}
default access modifier ในกรณทไมมการก าหนด modifier ไวจาวาจะใช default แทน ซงการเขาถงสามารถท าไดเฉพาะภายใน package เดยวกน
package pack;
class A {
void msg() {
System.out.println("Hello");
}
}
package mypack;
import pack.*;
class B {
public static void main(String args[]) {
A obj = new A(); //Compile Time Error
obj.msg(); //Compile Time Error
}
}
protected access modifier
สามารถเขาถงไดภายใน package เดยวกน และภายนอก package สามารถเขาไดเฉพาะจากกลไกของคลาสสบทอดเทานน สามารถประยกตใชงานไดกบแอททรบวต เมธอด และคอนสตรคเตอรเทานน
package pack;
class A {
void msg() { System.out.println("Hello"); }
}
package mypack;
import pack.*;
class B extends A {
public static void main(String args[]) {
B obj = new B();
obj.msg();
}
}
All Access Modifier
สรปการใชงานของ access modifiers ในจาวา
Access
Modifier
Within
class
Within
package
Outside
package by
subclass only
outside
package
Private Y N N N
Default Y Y N N
Protected Y Y Y N
Public Y Y Y Y
Access Modifiers
กลไกการเขาถง member ภายในคลาส A: private เขาถงไดเฉพาะภายในคลาส A default เขาถงไดเฉพาะใน package ตวเองไดแก คลาส A, B และ C
protected เขาถงไดภายใน package และ ภายใน subclasses เชน S
public เขาถงไดจากคลาสทงหมดกลไกการเขาถง member ภายในคลาส B: default คลาสจะมองเหนไดเฉพาะภายใน
package ของตวเอง ไดแก Package1
Package – Example
OrderCustomer
Location Item
Stock Item Order Item
Sales
Warehouse
Package Visibility
คลาสภายใน package สามารถก าหนดสทธในการเขาถงได
ในกรณทเปนคลาสแบบ Public จะถกเขาถงไดจาก packages อน ๆ
สวนคลาสทเปนแบบ private จะสามารถเขาถงไดโดยคลาสทอยภายใน package เดยวกนเทานน PackageB
Class B1
Class B2
PackageA
Class A1
Class A3
Class A2
Public visibility Private visibility
UML : import & access
Package import เปนความสมพนธโดยตรงระหวางคลาสและ imported package ซงการเรยกใชชอของสมาชกสามารถท าไดโดยไมตองระบชอของ Package ตามล าดบ นนคอ contents ของ imported package ถอเปนสวนหนงของ namespace X<<import>>Y<<import>>Z (Transitive)
สวนคยเวรด access หมายถง contents ของ imported package ไมไดเปนสวนหนงของ namespace แตเปนการอางถงโดยไมมการรวบรวมไวในnamespace เดยวกน X<<access>>Y<<access>>Z (Non - Transitive)
X Y
Import
«import»A
B +C-D
+E
A
B +C-D
+E
X Y
Y::C
Y::E
«import»
A
B +C-D
+E
X Y«access»
X Y
Access
«access»A
B +C-D
+E
Dependencies on Packages
java.sql
CourseCatalog<<subsystem>>
University Artifacts
ความสมพนธแบบ dependencies เกดขนในpackage ปกต
ดงนน CourseCatalog subsystem ไมสามารถ reuseไดโดยปราศจาก packages ทขนแกกน
CourseCatalog ขนอยกบ:
java.sql package ทใชในการเขาถงขอมลจากRDBMS
University Artifacts package ทใชในการเขาถงขอมลภายใน Course Registration System
SubSystem
SubSystem ใชน าเสนอพฤตกรรมของหนวยงานยอยในระบบการจดท า SubSystem เพอชวยใหขนตอนการพฒนาสามารถจดการไดงายบางครงถกนยามวาเปน Package ทประกอบดวย interfaces ตงแตหนงหรอมากกวาทใชส าหรบสนบสนนการใหบรการจาก SubSystem
SubSystem interface ไมใชสงเดยวกบ Java Interface แตเปนคลาสทถกเรยกใชโดย SubSystem
<<subsystem>>
Subsystem Name
Interface
Interface
Subsystem
Packages ประกอบไปดวยคลาสตาง ๆClient รองขอโดยการเรยกใชบรการจากคลาสทอยภายใน package เพอด าเนนการตามพฤตกรรมทก าหนดไว
SubSystem เปนการท างานรวมกนระหวางกลมของรนไทมออปเจคClient รองขอให SubSystem เองด าเนนการตามพฤตกรรมทก าหนดไว
SubSystem ถอจดกงกลางระหวาง package และคลาส มลกษณะเดยวกบ package ในกรณทมการจดกลมของคลาสอน ๆ ทใชงานรวมกน
มลกษณะเดยวกบคลาสเนองจากมพฤตกรรมทถกก าหนดไว โดยอาศยการท างานผาน interface ทก าหนดไว
Difference between Package & Subsystem
เปาหมายหลกของการสราง SubSystem กเพอหอหมหรอปกปดสวนทเปนพฤตกรรมการท างานไว เมอ Client รองขอการบรการจาก SubSystem จะไมมการตดตอโดยตรงกบสวนของการพฒนา (implementation)
Client ตองตดตอกบ SubSystem ผานกลไกของ interface ทก าหนดไวเทานน สวนทเปน Implementation ของ Subsystem จะถกปกปดไวจาก Client เสมอ
การท างานผาน interface คอการก าหนดใหทก ๆ คลาสภายใน SubSystem มลกษณะ invisible จากคลาสทอยภายนอก นนคอการใช package visibility ของโปรแกรมภาษาเชงวตถนนเอง
Encapsulation
Interface Based Programming
interface Iuser {
String getFirstName();
}
class User implements Iuser {
public String getFirstName() { return "foo“; }
}
class UserFactory {
public IUser getUser() {
return new User();
}
}
class Client {
public static void main(String[] args)
{
IUser user = new UserFactory().getUser();
System.out.println(" "+user.getFirstName());
}
}
class UserService implements Iuser {
public String getFirstName() {
return "bar"; }
}class UserFactory {
public IUser GetUser() {
return new UserService(); }
}
User
UserFactory
IUser
<<Interface>>
+getUser()
+getFirstName()
+getFirstName()
เปนผลตอเนองมาจาก encapsulation หากมการปกปดพฤตกรรมของ Subsystemทงหมดออกจากสวนอน ๆ การเปลยนแปลงเกดขนภายใน SubSystem ยอมจะไมสงผลกระทบตอสวนอน ๆ ตราบใดท interface ยงคงไมเปลยนแปลง
interface ใชปองกนไมใหระบบเกดความเสยหายอนเนองมาจากการเปลยนแปลงทเกดขนภายนอกระบบนนเอง
Insulation from change
เนองจาก Client ไมสามารถเขาถง SubSystem ไดโดยตรง ดงนนจงเปนเรองงายทจะเปลยนแปลงกลไกภายในหรอเปลยน SubSystem ทงหมดใหมได โดยไมสงผลกระทบตอ Client ตราบใดท interface ยงคงไมมการเปลยนแปลง
เชนในกรณของการเปลยนแปลง SubSystem ใหมดงรป สามารถใชในการอพเกรดสวนประกอบตาง ๆ ของระบบไดตามตองการ
Replaceable Implementation
SubSystem ปกปดรายละเอยดการท างานภายในออกจากสงทอยภายนอก นนหมายถง Client ทเรยกใช SubSystem ไมจ าเปนตองสนใจ How ของการท างานภายในแตอยางใด แตสนใจเฉพาะ What ของสงทตองการเทานน
ดงนนจงถอวา SubSystem ยกระดบของ abstraction ภายในระบบเพมขน ซงสงผลตอการท าความเขาใจการท างานของระบบงายขน
Abstraction
นอกจากขอดทงหมดซงเปนมมมองจาก SubSystem แลว ยงมขอดอน ๆ ไดแก การออกแบบ SubSystem อยางถกตองในสวนของพฤตกรรมและการท างานของระบบชวยใหเกดการ reuse ระหวางระบบได
SubSystem ทประกอบไปดวย package ของพฤตกรรมการท างานตาง ๆ พรอมกบ interface ทก าหนดไว เนองจากมลกษณะเปน abstract ตอกลไกการท างานภายใน ดงนนจงสะดวกตอการน าไปใชในระบบอน ๆ ไดโดยงาย
Reuse
การออกแบบ SubSystem ทดจะชวยใหผทมสวนเกยวของในการพฒนาระบบ สามารถมองเหนไดตงแต ภาพรวมของระบบจนถงรายละเอยดการท างานในทายทสด
ลกษณะเดยวกบกระบวนการแบบ Top-Down Design
เพมความสะดวกในการแบงงานของเปนระบบยอยตาง ๆ
Top Down Process with Subsystem
Subsystem Usage
SubSystem ใชแบงระบบออกเปนสวน ๆ ทไมขนตอกน :แยกงานแตละสวนออกจากกนอยางชดเจนพฒนาไดตราบใดทสวนทเปน interfaces ไมมการเปลยนแปลง
สามารถน าไปน าไปใชในลกษณะทเปน distributed ได เปาหมาย
เพอใหมลกษณะ Loose coupling เพอความ Portability ในกรณทตองการท างานใน
platform ทแตกตางกนใช interface เพอปองกนการเปลยนแปลง การพฒนาสามารถท าไดอยางอสระ
A
<<subsystem>>
B
<<subsystem>>
C
<<subsystem>>
Packages Vs. Subsystems
UIjava.awt
Member
Workflow
External System
Interface
Payment
Information
Toy
<<subsystem>>
Billing
System Interface
Sales
<<subsystem>>
Shipping
Company Interface
Implementation Diagrams
น าเสนอมมมองทเกยวของกบการพฒนาทประกอบไปดวยโครงสรางของซอรสโคด และโครงสรางการท างานในชวงเวลารนไทม
ประกอบไปดวยไดอาแกรมสองชนด ไดแกComponent diagramDeployment diagram
เปนการน าเทคนคเดมมาประยกตใชใหม โดยการแยกระบบออกเปนสวน ๆ ใหอยในรปของโมดล หรอ components ทสามารถน ากลบมาใชใหมได สรางซอฟตแวรจาก component ทมอยแลว สราง components ทสามารถน ากลบไปใชใหมในระบบทแตกตางกน แยกสวนการพฒนา components ออกจากการพฒนาระบบ
Component-based software development
A Software System
Pre-fabricated
Components
What is component ?
เปนสวนประกอบของซอฟตแวรทน ามาประกอบกนเปนแบบจ าลอง Component และสามารถน าไปใชไดทนทโดยไมจ าเปนตองมการแกไข
คณลกษณะของ Componentเปนซอฟตแวรขนาดเลกทสามารถประมวลผลไดดวยตวเอง และสามารถน าไปประกอบกบ Component อน ๆ ได
การน าไปใชถกด าเนนการผาน interface ทออกแบบไวเปนอยางดมความเปนอสระดงนนจงไมกอใหเกดปญหาเมอน าไปใชกบ Components อน สวนกลไกในการพฒนาภายในจะถกปกปดไวเสมอ
ใน UML Component ถอเปน SubSet ของ SubSystem
Benefits of CBSD
Reusability : สามารถน ากลบมาใชใหมไดFlexibility : เพมความยดหยนในการพฒนาระบบ สามารถใชงานไดหลากหลายMaintenance ease : เพมความสะดวกในการบ ารงรกษาTime Effective : เพมความรวดเรวในการพฒนาระบบCost Effective : ลดคาใชจายในการพฒนาระบบReliability : เนองจากผานการทดสอบมาแลวเปนอยางด Less Complexity : ผใชไมจ าเปนตองทราบรายละเอยดภายในของการพฒนาคอมโพเนนท
Component Diagram
เปนการน าเสนอโครงสรางความสมพนธระหวาง component ของระบบ และแสดงถงวธการท components ทประกอบกนเปน components ขนาดใหญหรอระบบทถกพฒนาขนชวยใหมองเหนภาพรวมของระบบทก าลงจะถกสรางขนชวยเพมระดบความเขาใจและการสอสารใหถกตองชดเจนยงขนชวยใหการจดสรรงานส าหรบทมงานพฒนาเปนไปอยางชดเจน
Component Diagram
รปแบบ component :<<executable>> โคดโปรแกรมทใชในการรน<<file>> แฟมขอมลทประกอบไปดวยซอรสโคด<<library>> static หรอ dynamic library<<table>> ตารางในฐานขอมล<<document>> เอกสาร
ใน UML 1.4 สญลกษณ component จะถกน าเสนอผานรปสเหลยมทประกอบดวยสองสเหลยมเลกทปรากฏอยดานซายมอ
Login.dll
jcomponentImageObserver
image
Component ไดอาแกรมประกอบไปดวย Component packages Components Interfaces Dependency relationships
เชนเดยวกบ Package การตดตอกบ Component จะถกก าหนดใหด าเนนการผาน interface โดยใชความสมพนธแบบ Dependency เสมอ
Concept of Component
Component Diagram
Component ไดอาแกรมเปนสวนทมความส าคญมากในการพฒนาระบบงานขนาดใหญ เพอใชส าหรบการน าเสนอคอมโพเนนททใชอยภายในระบบ คอมโพเนนทอาจมลกษณะคอนขางซบซอน เชน ในกรณทมการพฒนารวมกบActiveX หรอ JavaBeans เปนตน
Component ไดอาแกรมมกจะถกละเลยเสมอในทางปฏบต ทงนเนองมาจากการท างานทปรากฏในไดอาแกรมสวนใหญจะเปนออกแบบในระดบทลกลงไป และใชส าหรบการระบ configuration ของซอฟตแวรนนเอง
Component Dependencies
Dependency ในระดบของ source code จาก Component A ไปยง B จะหมายถงรปแบบของภาษาทก าหนดให dependency เกดจาก A ไปยง B
ในการ compiled อาจหมายถงวาหากมการเปลยนแปลงใน B เกดขนอาจตองการคอมไพล A ใหม
Dependencies ตองไมมลกษณะเปน transitive หาก A depends on B และ B depends on C สวนทเปน B จะมลกษณะเปน
เครองปองกนการเปลยนแปลงทเกดขนจาก A ไปยง C
RegistrarFinance
Component Diagram
Course Course
Offering
Student Professor
Course.dll
People.dll
Course
User
Register.exeBilling.exe
Billing
System
Deployment diagrams
deployment ไดอาแกรมจะเปนการแสดงสถาปตยกรรมแบบ run-time ของโปรเซสเซอร อปกรณและซอฟตแวรคอมโพเนนททรนอยบนสถาปตยกรรมนน ๆ รวมไปถง middleware ทท าหนาทในการเชอมตอกบคอมพวเตอรอน ๆ
จะถอเปนการก าหนดรายละเอยดขนตอนสดทาย ของระบบ ทเรยกวา System Topology โดยประกอบไปดวยรายละเอยดของฮารดแวรและซอฟตแวรทรนอยในหนวยนน ๆ
deployment ไดอาแกรมจะถกน าเสนอในรปของ graph ของโหนดทเชอมตอกนโดยมการตดตอระหวางกน โหนดอาจประกอบไปดวย component instances ซงแสดงใหเหนวาคอมโพเนนทจะท างานหรอ runs อยบน node นน ๆ ในท านองกลบกนคอมโพเนนทอาจประกอบไปดวยออปเจค ซงจะแสดงใหเหนวาออปเจคนนจะเปนสวนหนงของคอมโพเนนท
คณสมบตของ Deployment deployment ไดอาแกรมอาจใชในการแสดงใหเหนวา Component ใดทรนอยกบ nodes ใด และแสดงการเคลอนยายของ Component จาก node หนงไปยงnode อน ๆ
ใชสญลกษณ stereotype รวมกบความสมพนธแบบ dependency
Deployment diagrams for ?
จดประสงคในการสราง deployment ไดอาแกรมเพอแสดงรายละเอยดตาง ๆ ทเกยวของกบการตดตงระบบในรปของซอฟตแวรและฮารดแวรทเกยวของกน
แสดงรายละเอยดของ dependencies ทระบบทขนอยกบระบบเดมแสดงใหเหนถงโครงสรางพนฐานของ hardware/network ขององคกร
นอกจากใชส าหรบการน าเสนอ Topology ของระบบแลวยงสามารถใชเปนขอมลส าคญในการพจารณาการท างานดงตอไปน Performance Scalability Maintainability Portability
Deployment for ?
ระบบทเหมาะสมส าหรบการน าเสนอผาน Deployment ไดอาแกรม ไดแกEmbedded systems ทใชฮารดแวรตาง ๆ ควบคมการท างานClient/server systems ทมการแยกสวนของกลไกการตดตอกบผใชออกจากสวนทเปนขอมลของระบบ
Distributed systems ทประกอบไปดวยหลาย ๆ เซรฟเวอรทมความสามารถในการโอนยายขอมลจากโหนดหนงไปยงโหนดอน ๆ ได
Deployment : Client-Server
Deployment : Distributed System
MVC Architecture
server1:
client:
j1:Jsps1:Servlet server2:
browser: Internet
:WebServer
:DB
:ServletContainer
b1:Bean
Intranet
:html
:html
view:browser/jsp/servletcontroller: jsp/servletmodel: BeanObjects
Deployment diagrams V1
Deployment diagrams V2
Deployment diagrams V3
Deployment diagrams V4