Object Oriented Development with UML Package, Component ... · Coupling & Cohesion Concepts...

Preview:

Citation preview

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