1.88k likes | 3.25k Views
การวิเคราะห์และออกแบบระบบเชิงวัตถุ (OOAD). โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com. บทที่ 6 Association Abstraction. Objectives ( วัตถุประสงค์ ) เพื่อให้สามารถสร้างความสัมพันธ์ระหว่าง class ต่าง ๆ ใน problem domain โดยใช้ Association Abstraction ได้
E N D
การวิเคราะห์และออกแบบระบบเชิงวัตถุ (OOAD) โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com
บทที่ 6Association Abstraction • Objectives (วัตถุประสงค์) • เพื่อให้สามารถสร้างความสัมพันธ์ระหว่าง class ต่าง ๆ ใน problem domain โดยใช้ Association Abstraction ได้ • เพื่อให้สามารถใส่ Cardinality ของความสัมพันธ์ในเชิง Association ได้ถูกต้อง • สามารถเขียนโปรแกรมแสดงความสัมพันธ์กับคลาส ได้
Abstraction • Classification Abstraction • Aggregation Abstraction • Generalization Abstraction • Association Abstraction Problem Domain Concept
Reviews • Is Member Of • Is Part Of • Is Kind Of • Is related to
Relationship (ความสัมพันธ์) • ตัวอย่างความสัมพันธ์ ต่าง ๆ ในชีวิตประจำวัน • แม่กับลูก • สามีรักภรรยา • นายกบริหารประเทศ • ตำรวจทำงานอยู่ที่สถานีตำรวจ • น้ำอยู่ในทะเล • ตำรวจใส่เครื่องแบบ • ปากกาอยู่บนโต๊ะทำงาน • นักเรียนลงทะเบียนเรียน
notice • เราสามารถจัดเอาความสัมพันธ์แบบ Aggregation เป็นความสัมพันธ์แบบ “is related to” ได้เช่นกัน เพราะการเป็นส่วนประกอบ หรือ การมีส่วนประกอบ ก็คือ ความสัมพันธ์เป็นเจ้าของ ( has a )นั่นเอง
Cardinality ใน Association Abstraction • ตัวอย่าง 6.1 , 6.2 Class Min Card Max Card ผู้หญิง 0 (โสด) 1 (แต่งงาน) ผู้ชาย 0 (โสด) 1 (แต่งงาน) แม่ 1 (ลูกมีแม่ได้คนเดียว) 1 (ลูกมีแม่ได้คนเดียว) ลูก 0 (เพราะแม่อาจไม่มีลูกก็ได้) N (มีได้มากกว่า 1 คน )
หลักในการเขียน Diagram แสดง Association • ในการเขียนภาพเพื่อแสดง Association นั้น มีหลักการเขียนดังนี้ • ลากเชื่อมต่อระหว่าง class ทั้งสอง • เขียนลูกศรเพื่อบอกทิศทางของการอ่านความสัมพันธ์ • พิจารณา Class ทีอยู่ติดกับหัวลูกศร หาค่า Min Card,Max Card • พิจารณา Class ทีอยู่อีกด้านของหัวลูกศร หาค่า Min Card,Max Card • จนได้ภาพของการแสดง Association ดังรูป
มี ลูก แม่ 1 มี ลูก แม่ 2 0..n มี ลูก แม่ 3 1..1 มี ลูก แม่ 4 1..1 0..n มี ลูก 5 แม่
ตัวอย่าง Association ต่าง ๆ 0..1 0..1 เป็นสามี-ภรรยา ผู้หญิง ผู้ชาย 0..1 0..1 เป็นสามี-ภรรยา ผู้หญิง ผู้ชาย 0..n 1..n ลงทะเบียน วิชา นักศึกษา
Association • ความสัมพันธ์ (Relationship) ระหว่าง instances ของ classes association name name direction Order Customer dateReceived issued by isPrepaid name * 1 number : String address price : Money creditRating( ) dispatch( ) Customer may make several orders Order comes from one customer
Associations • คลาสมากกว่า 1 คลาส สัมพันธ์กันด้วย “associations” • Association • เทียบได้กับ ER relationship ที่เชื่อมโยงความสัมพันธ์ระหว่างคลาส และแสดง จุดเชื่อมโยง (“links”) ระหว่าง วัตถุที่สร้างขึ้นจากคลาส
Naming associations • การตั้งชื่อ association • หลีกเลี่ยงชื่อที่ไม่สื่อความหมาย • associated_with, has, is_related_to • มักขึ้นต้นด้วยคำกิริยา เช่น • works_for, owns , issued by • มักตั้งชื่อในกรณีที่มอง Association จากซ้ายไปขวา หรือ จากบนลงล่างของ diagram
Person Car Name Address Telephone Manufacturer Model Registration Associations on Class Diagrams Owns
Links • วัตถุแต่ละวัตถุ สามารถเชื่อมโยงกันได้ โดยใช้ “links” • A link • เป็น instance ของ association • หมายเหตุ • an association สามารถดำรงอยู่ได้ ถึงแม้ว่าจะไม่มี instance (links) ของ association ดังกล่าว เช่นเดียวกับ คลาสที่สามารถดำรงอยู่ได้ ถึงแม้ว่าจะไม่มีวัตถุใดๆ ถูกสร้างขึ้นจากคลาสนั้นๆ
Objects & Links You:Person Me:Person Name=Jane Address=22 Holly Pl Telephone=62312198 Name=Dennis Address=41 High St Telephone=62661734 Owns Owns Owns Ours:Car Mine:Car Manufacturer=Mazda Model=626 Registration=YYX391 Manufacturer=Saab Model=95 Registration=YRT833
Order Customer dateReceived 1 * isPrepaid name address number : String price : Money creditRating( ) dispatch( ) Association Multiplicity • multiplicity • หมายถึง การพิจารณาจำนวน instances (objects) ของคลาสหนึ่ง ที่สามารถเชื่อมโยงกับ instance (object) ของคลาสที่เกี่ยวข้อง
Association Multiplicity 1 1..* Class Class exactly one one or more 0..1 * Class Class many (zero or more) zero or one/at most one 2 ..4 Class as specified
Example of Multiplicities * * Student University Body Heart 2-3 Bicycle Wheel * 1..* 1..* Account Owner * *
Associations, Objects & Classes • สำหรับ association ใดๆระหว่าง 2 วัตถุ สามารถมี link ได้ตั้งแต่ 0 ถึง 1 link • ระหว่าง 2 วัตถุ สามารถมี association ได้มากกว่า 1 association (Multiple Assoications) แต่ association เหล่านั้นจะต้องมีความแตกต่างในด้านความหมายของ association • Multiple associations ระหว่างคลาสกำหนดให้ ตั้งชื่อ associations
Roles • role • หมายถึง ชื่อที่กำหนดให้กับด้านปลายของ association ซึ่งระบุวิธีการในการที่คลาสมีส่วนร่วมใน association • ปกติชื่อของ role มักเกิดขึ้นเป็นคู่ (เช่นทั้งสองด้านของ association จะมีชื่อของ role • บังคับให้กำหนดชื่อของ Role กับ associations แบบreflexive (Reflexive associations)
Person Works for * Company Name Insurance no. Address Name Address employer employee Rolenames Role names • Role ระบุ ชื่อให้กับด้านปลายของ association
Association Names & Roles • association อาจมีชื่อได้เช่นเดียวกับชื่อของ role ที่กำหนดให้กับด้านปลายของความสัมพันธ์ • ถ้ามีการตั้งชื่อ association แล้วมักไม่มีการตั้งชื่อ role อีก • ถ้ามีการตั้งชื่อที่ปลายของ association (ได้แก่ roles) แล้วมักไม่มีการตั้งชื่อ association อีก
Person Name Insurance no. Address Manager Supervises Salesperson Role names • บังคับให้กำหนดชื่อของ Role ให้กับที่เกิดขึ้นระหว่าง link ของวัตถุที่สร้างจากคลาสเดียวกัน
A Reflexive Association • association ที่สร้างจากคลาสเดียวกัน Person Parent Name Address Telephone 2 Role name Child *
Ternary Associations • A ternary association • เป็น assocation ที่ประกอบด้วย 3 คลาส • เช่นเดียวกับแนวคิดของ ternary relationship ในER modelling และแนวคิดคล้ายๆ กัน • นำเสนอโดยใช้รูปสี่เหลี่ยขนมเปียกปูน เชื่อมโยงกับคลาสที่เกี่ยวข้อง
Ternary Associations Vendor Customer Product Sale Ternary association
Ternary Association Multiplicity • multiplicity ของ ternary associations • ซับซ้อนกกว่า binary และ unary associations • มักเป็น แบบ “many” สำหรับคลาสที่เกี่ยวข้อง participating
N-ary Associations • โดยทั่วไปแล้ว association อาจเชื่อมโยงกับคลาสจำนวนเท่าใดก็ได้ • ถ้าเชื่อมโยงคลาสมากกว่า 2 คลาสขึ้นไป (รวมทั้ง ternary) เรียกว่า “n-ary” associations • แต่ Associations ที่เชื่อมโยงมากกว่า 0 คลาสมักหาได้ยาก
Summary: Basic notation for associations Association name mult1 mult2 Class B Class A role_B role_A • ตัวอย่างเช่น contains * 1 Order Order Line line items
Association Classes • Link จะถูกพิจารณา เช่นเดียวกับการที่วัตถุถูกพิจารณาจาก attribute ของวัตถุนั้น • attribute ควรผูกติดอยู่กับ association โดยใช้ association class มากกว่าที่จะเป็นของวัตถุที่เชื่อมโยง เมื่อใดก็ตามที่whenever it exists or has meaning when the link itself exists (rather than just the objects linked) - มักเกิดขึ้นบ่อยกับ many-to-many associations
Association Classes Student Subject Enrolment ID Name Address Telephone Code Name Credit * * Result Mark Association class
Association Classes • association class สามารถมีส่วนร่วมใน associations อื่นๆ เช่นเดียวกับที่คลาสปกติสามารถมีได้
Association Classes Customer Product Purchase Name Address Telephone Number Name Price * * 0..1 Guarantee Date Length Conditions Claim * Association class
Qualified Associations • qualified association • หมายถึง association ที่ถูกทำให้ชัดเจนโดย attribute ที่เรียกว่า qualifier • พิจารณา qualified association เช่นเดียวกับแนวคิดของ weak entity type ใน ER
Unqualified Golf_Course Hole Name Location Number Length Par 1 * Qualified Golf_Course Hole 0..1 HoleNumber Name Location Length Par 1 Qualified Associations
Qualified Association Tournament Prize Year Position 0..1
Qualified association ABC Inc. President Roger Rabbit ABC Inc. Vice President Finances Joe Savemoney ABC Inc. Member of board John Walker ABC Inc. Member of board Susi Sanssouci ABC Inc. Member of board Karl Eichbaum XYZ Inc. President Donald Duck Organization Company Function Person *
Class Diagrams: Hints • class หนึ่งสามารถเป็นส่วนร่วมได้ในหลาย diagrams • Diagrams ควรจะแสดงแง่มุมเฉพาะด้าน • จำนวนคลาสไม่มากเกินไป • จำนวน associations ไม่มากเกินไป • ซ่อน attributes และ operations ที่ไม่จำเป็นต้องแสดง • อาจต้องมีการสร้าง diagram ซ้ำๆ กันหลายรอบ
Difference between attributes and associations • Conceptual perspective • ไม่แตกต่างกันมากนัก • Attributes เก็บค่าเดียว (single-valued) • Specification/implementation perspective • Attribute เก็บค่า (Value) ไม่ใช่ตัวอ้างอิง (References) • ไม่มีการ share ส่วนของ attribute values ในระหว่าง instances ที่สร้างจากคลาสเดียวกัน • Often: Stores simple objects • Numbers, Strings, Dates, Money objects
1..n 1..1 แสงอาทิตย์ พืช สังเคราะห์แสง 0..n 0..n ย่อยสลาย กิน 0..n 0..n 0..n กิน แบคที่เรีย ย่อยสลาย สัตว์ 0..n 0..n 0..n รูปแสดง Association ของห่วงโซ่อาหาร
Assignment 6 • จงสร้าง Class Diagram ที่แสดงถึง Association ที่มี Cardinality ที่ถูกต้องของความสัมพันธ์ดังต่อไปนี้ • นักเรียน – วิชาเรียน – อาจารย์ผู้สอน • ธนาคาร - สมุดบัญชี – ผู้ฝากเงิน • ห้องสมุด – บรรณารักษ์ – หนังสือ - หมวดหนังสือ • เครื่องบิน – พนักงาน – ผู้โดยสาร - อาหาร • ผู้จัดการ -ร้านอาหาร – ลูกค้า – อาหาร - โต๊ะอาหาร
นักเรียน – วิชาเรียน – อาจารย์ผู้สอน 0..n 0..n วิชาเรียน นักเรียน ลงทะเบียนเรียน 0..n 1..n เลือกสอนวิชา สอน 1..n 1..n อาจารย์ผู้สอน
ผู้จัดการ - ร้านอาหาร – ลูกค้า – อาหาร - โต๊ะอาหาร 1..n 1..n ร้านอาหาร ผู้จัดการ เป็นเจ้าของ 1..n จ่ายเงินค่าอาหาร MK นายตัน 1..n Oishi 1..n โต๊ะอาหาร 1..n ลูกค้า 1..1 กิน นาย ศรราม มี อาหาร 0..n นางสาว สุวนันท์
Aggregation Association Name Direction indicator Multiplicity Class Diagram with Multiple Classes Customer BankAccount account - firstName : String - balance : double - lastName : String 1 - account : BankAccount + BankAccount(initBalance:double) + getBalance : double + Customer(f:String, l:String) + deposit(amt : double) + getFirstName : String + withdraw(amt : double) + getLastName : String + setAccount( acct:BankAccount) + getAccount( ) : BankAccount Class Diagram of “Customer.java” and “BankAccount.java”
Customer Class in JAVA public class Customer { private String firstName; private String lastName; private BankAccount account; public Customer(String f, String l) { this.firstName = f; this.lastName = l; this.account = null; } public String getName() { return (this.firstName + " " + this.lastName); } public BankAccount getAccount() { returnthis.account; } publicvoid setAccount(BankAccount acct) { this.account = acct; } }
BankAccount Class in JAVA publicclass BankAccount { privatedouble balance = 0.0; public BankAccount(double amount) { balance = amount; } publicvoid deposit(double amount) { balance = balance + amount; } publicvoid withdrawn(double amount) { balance = balance - amount; } publicdouble getBalance() { return balance; } }
Programming with Multiple Classes publicclass TestBanking { publicstaticvoid main(String[] args) { Customer cust = new Customer("Joe","Goodman"); cust.setAccount(new BankAccount(3000.0)); System.out.println("customer : " + cust.getName() + " : open account with balance = " + cust.getAccount().getBalance() + " baht."); cust.getAccount().deposit(1250.25); System.out.println("customer : " + cust.getName() + " : deposit 1250.25 baht :" + " current balance = " + cust.getAccount().getBalance() + " baht."); cust.getAccount().withdrawn(500); } }
ผลการทำงานของโปรแกรม TestBanking ---------- Java Run ---------- customer : Joe Goodman : open account with balance = 3000.0 baht. customer : Joe Goodman : deposit 1250.25 baht : current balance = 4250.25 baht. Normal Termination Output completed (0 sec consumed).