การโปรแกรมเชิงวัตถุ และยูเอ็มแอล (UML)
UML
What is uml? โดย itmelody.com
UML (Unified Modeling Language) เป็นเครื่องมือใหม่ที่ได้รับการยอมรับเพิ่มขึ้นตลอดเวลา เริ่มประยุกต์ใช้กับระบบงานมากขึ้น เพราะเป็นเครื่องมือที่มีความหลากหลายในการแสดงแบบซอฟต์แวร์ เป็นโมเดลมาตรฐานที่ใช้หลักการออกแบบ OOP (Object Oriented Programming) รูปแบบของภาษามี Notation เป็นสัญลักษณ์สำหรับสื่อความหมาย มีกฎระเบียบที่มีความหมายต่อการเขียนโปรแกรม (Coding) ดังนั้นการใช้ UML จะต้องทราบความหมายของ Notation เช่น generalize, association, dependency, class และ package สิ่งเหล่านี้มีความจำเป็นต่อการตีความการออกแบบ ก่อนนำไป Implement ระบบงานจริง
+ itmelody.com
+ omg.org
+ Rational
+ agilemodeling.com
UML from techweb.com or wiki
An object-oriented analysis and design language from the Object Management Group (OMG). Many design methodologies for describing object-oriented systems were developed in the late 1980s. UML standardizes several Diagramming methods, including Grady Booch's work at Rational Software, Rumbaugh's Object Modeling Technique and Ivar Jacobson's work on use cases. There are nine kinds of Diagrams that are supported under UML.
Brief history of UML (ทั้ง 3 คน ทำงานใน Rational Rose Corporation)
1. Grady Booch
ซึ่งเป็นผู้นำแนวคิดแบบ Booch method ซึ่งเป็นวิธีการที่มีชื่อเสียงมาก มี Diagram จำนวนมากสำหรับใช้งาน แต่มีข้อเสียคือมีมากเกินความจำเป็น และยุ่งยากมากในการวาด digram ด้วยมือ แนวความคิดของ Booch จะทำการวิเคราะห์ทั้งแบบ Micro - และ Micro Development และอยู่บนพื้นฐานของการพัฒนาระบบงานแบบ Iteration and Incremental Process
2. Jame Rumbaugh
Object modeling Techniques(OMT) แนวความคิดนี้ถูกพัฒนาขึ้นที่ General Eletric ซึ่งเป็นที่ทำงานเดิมของ Jame Rumbaugh ประกอบด้วยโมเดลจำนวนมาก ครอบคลุมถึง Object Model, Dynamic Model, Functional Model, Use-case Model
3. Ivar Jacobson
Object Oriented Software Engineer(OOSE) เป็นรูปแบบวิธีการทำงานที่เน้น Requirement ด้วย มีพื้นฐานการทำงานอยู่บน Use-Case Model ซึ่ง Use-Case Model นี้ จะถูกใช้ตลอดทุกระยะในการพัฒนาระบบงาน

UML เป็นเรื่องใหม่ มีหนังสือให้ศึกษาไม่น้อย
1. การเขียนโปรแกรมเชิงวัตถุ :ผศ.ธวัชชัย งามสันติวงศ์
2. พัฒนาโมเดลยุคใหม่ UML :สุทริน วงศ์ศิริกุล
วิธีการ : ใช้โปรแกรม Dia สร้าง Diagram และ Export เป็น .java

ได้รับคำแนะนำโปรแกรม Dia จาก Thaiopensource.org ใน CD จันทรา

ประโยชน์ของยูเอ็มแอล (UML Advantage)
1. วงจรการพัฒนาที่สั้นที่สุด (Shortest Development life cycle)
2. เพิ่มผลผลิต (Increase productivity)
3. ปรับปรุงคุณภาพซอฟต์แวร์ (Improve software quality)
4. สนับสนุนระบบสืบทอดมรดก (Support legacy system)
5. ปรับปรุงการเชื่อมต่อทีมงาน (Improve team connectivity)
ทำไมต้องยูเอ็มแอล (Why UML?)
1. UML สามารถแสดงส่วนประกอบในการสร้างโปรเจคในรูปของโอโอพี (OOP)
2. เชื่อมแนวคิดกับการออกแบบระบบโดยใช้รหัสเชิงวัตถุ (Object Oriented Code)
3. ง่ายต่อการทำความเข้าใจและสามารถแปลงเป็นภาษาคอมพิวเตอร์ (Computer Language)
UML ประกอบด้วย 3 ส่วนหลักคือ Things, Relationships และ Diagrams
- ส่วน Things แบ่ง 4 ประเภท คือ Structural things, Behavioral things, Group things และ Annotational things
- ส่วน Relationships แบ่ง 3 ประเภท คือ Meaning, Structural และ Generalized/Specialized
- ส่วน Diagrams แบ่ง 6 ประเภท คือ Use case, Static strucure, Interaction, State, Activity และ Implementation
Thinks และ Relationships
วิชา Principles of Object Oriented Modeling and Design จาก New York University
Powerpoint เตรียมสอนเรื่อง UML ที่ http://www.cs.nyu.edu/courses/summer99/G22.3033-001/Lecture1/week1.htm
1.1 Thing : Class
:: อธิบายกลุ่มของวัตถุ
:: A common description of a set of objects.

เป็นสิ่งที่ใช้อธิบายกลุ่มของ object หรือ method ที่มีคุณสมบัติ การทำงาน และความสัมพันธ์ที่เหมือนกัน โดยสัญลักษณ์ที่ใช้วาด Class จะแบ่งเป็น 3 ส่วนคือ ชื่อคลาส(Name), แอตทริบริวต์(Attribute) และโอเปอร์เรชัน(Operation)
    class Student {
      private static int nextavailid = 1;
      public static int getnextavailid() {
        //
      }
    }
    
    import java.lang.Math; import java.util.Random; class Mathpack { private static long randomseed = 0; private final static double pi = 3.141592; public static double sin(double angle) { return Math.sin(angle); } public static double cos(double angle) { return Math.cos(angle); } static double random() { return new Random(randomseed).nextDouble(); } }
    << คำอธิบายลักษณะวัตถุ >> ช่วยอธิบายลักษณะเฉพาะของวัตถุ (Object) เช่น utility, redirect, build, link, target link, include, communicate
1.2 Thing : Interface
:: รวบรวมชื่อปฏิบัติการเป็นองค์ประกอบของคลาส
:: A collection of operations provided by a class of a component.

เป็นการนำ operation หรือ method ต่าง ๆ มาจัดกลุ่มเป็น collection โดยกลุ่มของ operation หรือ interface จะทำหน้าที่อธิบายพฤติกรรมของ element หรือ method ที่ใช้ใน interface อาจเป็นการอธิบายบางส่วน หรือทั้งหมด โดยปกติ interface จะถูกวาด ให้เชื่อมโยงกับ class หรือ component ที่ใช้ interface นั้น
interface มี attibute หรือ instance ได้ แต่ method จะต้องไม่มี static หรือ body { } เพราะมีหน้าที่ประกาศเท่านั้น หากถูก implements ในภายหลังค่อยกำหนดรายละเอียดพฤติกรรมลงไป
interface k00 {
  public int setvar();
}
class boy implements k00 { public static void main (String args[]) { } public int setvar() { } }
1.3 Thing : Collaboration
:: การรวมเป็นกลุ่มขององค์ประกอบย่อยที่สัมพันธ์
:: A collection of structural elements and behavioral elements.

ใช้กำหนดบทบาท และปฏิสัมพันธ์ที่ element หรือ method มีต่อกัน เป็นการหาพฤติกรรมในภาพรวมของกลุ่มของ element ใน class หนึ่ง ๆ อาจมีได้หลาย collaboration เช่น collaboration ของ การลงทะเบียน หรือ collaboration ของการบอกเพิ่ม-เลิกกระบวนวิชา หรือขอ Drop ทุกวิชา เป็นต้น สำหรับรายละเอียดที่อยู่ใน collaboration ให้ไปดูใน collaboration Diagram
1.4 Thing : Use case
:: ลำดับการปฏิบัติการของผู้กระทำ
:: A sequence actions. A structure superimposed (วางซ้อน) on top of behavioral things.

ใช้อธิบาย action ที่เกิดขึ้น โดยเรียกผู้กระทำ action ว่า actor สำหรับชื่อของ use case ที่เขียนในรูปวงรี มักเป็นกิจกรรม เช่น ซื้อ ขาย ยืม คืน พิมพ์รายงานยอดค้างชำระ จ่ายค่าปรับ อะไรทำนองนี้
1.5 Thing : Active class
:: คลาสที่สามารถเริ่ม thread หรือ process
:: A class whose objects can initiate a thread or a process

class ที่ object ใน class มีมากกว่า 1 process หรือมากกว่า 1 thread สามารถวาดสัญลักษณ์ได้เหมือนกับ class แต่เส้นรอบ class วาดด้วยเส้นที่หนากว่า
1.6 Thing : Component
:: แพกเกจของคลาสอาจมาในรูปคลาส อินเทอร์เพส หรือคลอราโบเรชั่น
:: A physical packaging of classes, interfaces and collaborations.

เป็นส่วนประกอบที่มีตัวตนจริง (Physical things) มิใช่ thing ที่เป็น logical thing แบบ thing ที่กล่าวมาข้างต้น เพราะ Component เป็นสิ่งที่มีในระบบ เช่น COM+, Java beans หรือ ไฟล์ที่เป็น source code เป็นต้น
1.7 Thing : Node
:: องค์ประกอบขณะประมวลผล
:: A physical element with memory and processing power.

เป็น element ที่เกิดขึ้นในช่วง runtime เท่านั้น โดยแสดงขนาดของทรัพยากร เช่นหน่วยความจำ หรือความสามารถในการประมวลผล เป็นต้น
1.8 Thing : Interaction
:: กริยาของข่าวสารระหว่างวัตถุ
:: The "verbs" of the models. A set of messages exchanged among a set of objects.

เป็นพฤติกรรมของ object ที่มีการแลกเปลี่ยนข่าวสาร(Messages) สำหรับสิ่งที่ต้องคำนึงถึง ในการใช้ interaction คือ จำนวนของ element ข่าวสารที่ส่งถึงกัน และลำดับการทำงาน เป็นต้น
1.9 Thing : State machine
:: สถานะของลำดับและวัตถุ
:: A sequence of states that an object goes through.

เป็นพฤติกรรมที่บอกให้ทราบลำดับขั้นตอนของ state ที่ object ตอบสนองต่อเหตุการณ์ต่าง ๆ
1.10 Thing : Package
:: กลุ่มก้อนที่ห่อรวมกันอย่างมีโครงสร้างและพฤติกรรม
:: A general-purpose mechanism for bundling (การห่อ) together structural, behavioral or other packages.

Grouping things คือการนำส่วนประกอบต่าง ๆ มารวมกันภายใต้เงื่อนไขบางประการ โดยเรียกกลุ่ม ๆ นี้ว่า Package
1.11 Thing : Note หรือ Page
:: ส่วนอธิบาย หรือหมายเหตุ
:: Explain the model, comments, constraints, page, server page, etc.

เป็นส่วนอธิบายรายละเอียดของ UML ซึ่งเป็นหมายเหตุ เพื่อใช้อธิบาย element อื่น ๆ ใน model สามารถใช้ Note กับ Model ใด ๆ ก็ได้ หรือใช้แสดงความสัมพันธ์ของ page ตัวอย่างข้างล่างนี้เป็นการใช้ note อธิบาย Class และใช้แสดงความสัมพันธ์ของ page
30 Slides
2.1 Relationship : Dependency
:: Change to one thing will affect the other.
:: ความสัมพันธ์เชิงความหมาย สนใจเรื่อง ความสัมพันธ์ของความหมาย เมื่อ thing หนึ่งเกิดการเปลี่ยนแปลงจะส่งผลกระทบต่ออีก thing หนึ่ง เช่น ความสัมพันธ์ของการรับคำสั่งซื้อของลูกค้า และการจัดซื้อวัตถุดิบ เป็นต้น
2.2 Relationship : Realization
:: A specification of a constract between two entities.
:: ความสัมพันธ์เชิงความหมาย ระหว่าง interfaces กับ class เป็นต้น
interface k00 {
  public int setvar();
}
class boy implements k00 { public static void main (String args[]) { } }
2.3 Relationship : Association
:: Set of links between objects.
:: ความสัมพันธ์เชิงโครงสร้าง อธิบายการเชื่อมโยงระหว่างวัตถุ อาจใช้กำหนดความสัมพันธ์ แบบ one to many หรือ one to one เป็นต้น หรืออาจใช้เพื่อแสดงความเชื่อมโยงวัตถุเท่านั้น ความสัมพันธ์อีกอย่างคือ Aggregation ใช้อธิบายความสัมพันธ์ของวัตถุทั้งหมด กับวัตถุบางส่วน เช่นความสัมพันธ์ของลูกค้ากับใบสั่งซื้อ แบบ one to many [ตย.]
2.4 Relationship : Generalization
:: Used for inheritance
:: ความสัมพันธ์เชิงสืบทอด ซึ่งเป็นความสัมพันธ์ของแม่กับลูก อาจสืบทอดพฤติกรรม หรือโครงสร้างของแม่ มาใช้ในลูก
class Jojo {
  public static void printnum() {
  }
}
class Boy extends Jojo { public static void main (String args[]) { printnum(); } }
 
3.1 Use case Diagram

Use case Diagram เป็น Diagram ที่ทำหน้าที่ Capture requirement 1. เป็นเทคนิคในการสร้างแบบจำลอง เพื่อใช้อธิบายหน้าที่ของระบบใหม่ หรือระบบปัจจุบัน 2. กระบวนการสร้าง Use case เป็นแบบวนซ้ำ (Iteration) 3. องค์ประกอบมี Use case, Actor, Use case Relation และ System 4. ความต้องการของระบบจะได้จาก ลูกค้า ผู้ใช้ + ผู้พัฒนาระบบ
Case Study of Bank
Open Account, Perform Task On Account, Close Account, Deposit Money, Withdraw Money, Transfer Money, Get Balance, Send-Out Monthly Statements
กระบวนการการพัฒนาโครงการ มีวัตถุประสงค์เพื่อสนับสนุนการทำงาน หรือความต้องการของ User เป็นหลัก และ User ไม่ได้หมายถึงคนเพียงอย่างเดียว อาจหมายถึงระบบอื่นที่อยู่ภายนอกระบบ (Some one or something such as other system out side the system)
User จะมีการกระทำ หรือกิจกรรมต่อระบบ เช่น การสอดบัตรพลาสติกลงในเครื่องอ่านบัตร การกดปุ่มที่ตอบสนองทางหน้าจอ ของเครื่องเอทีเอ็ม (ATM = Automatic Teller Machine) และ การรับเงินที่เครื่องส่งออกมา
คลิ๊กเพื่อขยาย

กรณีศึกษาระบบทะเบียน casereg


use_case01.gif
 
3.2 Class Diagram

Class Diagram ประกอยด้วย Class และความสัมพันธ์ระหว่าง Class เช่น Dependency, Generalization, Association เป็นต้น Class Diagram สามารถแสดงรายละเอียดว่ามี Method และ Attribute อย่างไร
Java Sample
public class regist48 {
  public regist() {  }
  public add() {  }
  public drop() {  }
}
public class regist49 extends regist48 {
  public scholar() {  }
}
คำอธิบาย
โปรแกรมลงทะเบียนของนักศึกษารหัส 48 มี 3 method ต่อมาในปี 49 จึงได้เพิ่ม method ใหม่เกี่ยวกับการให้ทุนการศึกษา ทำให้ต่อไปก็เรียก regist49 มาทำงาน โดยมีความสามารถเดิม ๆ ทั้ง 3 ที่ถูกเรียกใช้ได้ทันที
คลิ๊กเพื่อขยาย

โปรแกรม dia คือ โปรแกรมช่วยเขียนแผนภูมิแบบต่าง ๆ เช่น แผนภูมิคลาส แล้วสามารถ export เป็นแฟ้ม .java แยกตาม diagram อัตโนมัติ ตัวอย่างนี้มี class ชื่อ parent และ child ก็จะได้ source code เป็นภาษา java 2 แฟ้ม

Download : dia installer
 
3.3 Object Diagram

Object Diagram ประกอบด้วย Object และ Relation ระหว่าง Object โดยแต่ละ Object จะแสดง Instance ของแต่ละ class ที่มีในระบบ และความสัมพันธ์ระหว่าง Class เช่น Dependency, Generalization หรือ Association ซึ่งมีลักษณะเช่นเดียวกับ Class Diagram
ClassObject
- ประชาชน
- แม่น้ำ
- รถยนต์
- กีฬา
- บุรินทร์
- วัง
- นิสสัน
- โยคะ
http://www.agilemodeling.com
http://www.xml.com
 
3.4 Sequence Diagram

Sequence Diagram จะแสดงลำดับการทำงานของระบบ โดยมี Object และ เวลาเป็นตัวกำหนดลำดับของงาน และเน้นไปที่ instant ของ Oject
Sequence Diagram เป็น Diagram ซึ่งแสดงปฏิสัมพันธ์(Interaction) ระหว่าง Object ตามลำดับของเหตุการณ์ที่เกิดขึ้น ณ เวลาที่กำหนด message ที่เกิดขึ้นระหว่าง class จะสามารถนำไปสู่การสร้าง method ใน class ที่เกี่ยวข้องได้ จากตัวอย่าง Sequence ข้างต้นจะทำการ Design สำหรับการทำรายการบัญชีการเงินของธนาคาร โดยจะเริ่มจากหน้าจอ JSP ซึ่งถือเป็น User Interface(UI) ประเภทหนึ่ง จะทำหน้าที่ติดต่อกับผู้ใช้ เพื่อรับข้อมูลจากการใช้งานโดย User จากนั้น เมื่อกดปุ่มส่งคำสั่งใดๆ ผ่านหน้าจอ JSP ก็จะทำการเรียกใช้ Servlet โดยเรียกผ่าน Method doPost ของ Account Servlet และทำการส่งค่าและเรียกใช้ Class ต่างๆ ที่เกี่ยวข้องเพื่อทำการประมวลผลตาม business process ต่อไป Servlet และ Class ที่ทำการประมวลผลต่างๆ จึงเป็นตัวควบคุมการทำงาน หรือ Controller นั่นเอง ส่วน Class ที่ทำหน้าที่เก็บข้อมูลต่างๆ จะเรียกว่า Entity Class

ตัวอย่างระบบประกันคุณภาพ : sequence1.xls
ภาพตัวอย่างใน Google.com : http://images.google.co.th/images?q=sequence.gif+uml
1. Simple : ย้ายการควบคุมระหว่างวัตถุ
2. Synchronous : ติดต่อแบบรอคำตอบ ก่อนทำงานอื่นต่อไป
3. Asynchronous : ติดต่อแบบไม่รอคำตอบที่กลับมา

คลิ๊กเพื่อขยาย

 
3.5 Collaboration Diagram (ร่วมมือ ช่วยเหลือ รวบรวม)

Collaboration Diagram แสดงลำดับการทำงานของ วัตถุ ผู้เกี่ยวข้อง และกิจกรรม โดยลำดับการทำงานไม่ขึ้นกับเวลา เพราะการแสดงความสัมพันธ์ของ Object กับเวลาเป็นหน้าที่ของ Sequence Diagram

เส้นลูกศรครึ่งเดียว คือ ติดต่อแบบไม่รอคำตอบที่กลับมา
คลิ๊กเพื่อขยาย

Online Ordering
 
3.6 State Diagram

State Diagram ประกอบด้วย State ต่างๆ ของ Object และเหตุการณ์ต่างๆ ที่ทำให้สถานะของ Object เปลี่ยนและการกระทำที่เกิดขึ้นเมื่อสถานะของระบบเปลี่ยนไป สามารถบอกสถานะของ Object ได้ โดยจะให้ความสนใจว่า ณ เวลาใดๆ Object นั้นมี status เป็นแบบใด
คลิ๊กเพื่อขยาย

 
3.7 Activity Diagram

Activity Diagram แสดงลำดับ กิจกรรมของการทำงาน(Work Flow) สามารถแสดงทางเลือกที่เกิดขึ้นได้ Activity Diagram จะแสดงขั้นตอนการทำงานในการปฏิบัติการ โดยประกอบไปด้วยสถานะต่างๆ ที่เกิดขึ้นระหว่างการทำงาน และผลจากการทำงานในขั้นตอนต่าง ๆ
วงกลมสีดำ คือ จุดเริ่มต้น เรียก Initial State
วงกลมสีดำ มีวงล้อมอีกชั้น คือ จุดสิ้นสุด เรียก Final State
คลิ๊กเพื่อขยาย
 
3.8 Component Diagram

Component Diagram เป็น Diagram ซึ่งแสดงโครงสร้างทางกายภาพของ Software โดยจะประกอบด้วยองค์ประกอบซึ่งอยู่ในรูปต่างๆ เช่น Binary, text และ executeable ภายใน Component Diagram ก็จะมีความสัมพันธ์แสดงอยู่เช่นเดียวกับ Class Diagram, Object Diagram
 
3.9 Deployment Diagram

Deployment Diagram เป็นสิ่งที่สามารถทำการแสดงระบบสถาปัตยกรรมของ Hardware/Software ตลอดจนความสัมพันธ์ระหว่าง hardware/software
คลิ๊กเพื่อขยาย


Download : collaboration02.dia
Download : use_case03.dia
Dia - Diagram Drawing ใน ซีดีจันทรา (Download : Dia + GTK)
Dia (ไดอะ) เป็นโปรแกรมวาดภาพกราฟฟิกส์แบบเวกเตอร์ที่ออกแบบมา เพื่อให้ใช้ในการ เขียนไดอะแกรมโดยเฉพาะ สามารถเขียนไดอะแกรมได้หลายชนิดอย่างรวดเร็ว Dia มี ชุดออปเจคที่ช่วยในการวาด Entity Relationship Diagram, UML Diagram, Flowchart Diagram, Network Diagram ,วงจรไฟฟ้าอย่างง่าย ๆ รวมถึงไดอะแกรมอื่น นอกจากนี้ Dia ยังสามารถเพิ่มชุดออปเจคได้ด้วยการเขียนไฟล์ XML
แนะนำเว็บไซต์ (Web guides)
  1. http://www.uml.org ยอดเยี่ยม และเป็น official เกี่ยวกับเรื่องนี้
  2. http://dn.codegear.com/article/31863 ยอดเยี่ยม และละเอียดมาก ๆ
  3. http://www.omg.org/spec/UML/ มีเอกสารข้อกำหนดของ UML อย่างเป็นทางการ
  4. http://www-03.ibm.com/software/products/en/ratirhapfami รุ่นล่าสุด
  5. http://www.omg.org (Object Management Group)
  6. http://www.visualuml.com เครื่องมือช่วยเขียน UML
  7. http://www.essentialstrategies.com/publications/modeling/uml.htm
  8. http://www.objectsbydesign.com/projects/umltest/cfw-answers-1.html ข้อสอบเรื่อง UML

PDF Files
  1. https://www.utdallas.edu/~chung/SP/applying-uml-and-patterns.pdf 161 pages
  2. http://www.freebookcentre.net/programming-books-download/UML-a-tutorial.html 120 pages
  3. http://www.freebookcentre.net/programming-books-download/UML-Fundamentals.html 195 pages
  4. http://www.nyu.edu/classes/jcf/g22.2440-001_sp09/handouts/UMLBasics.pdf 11 pages