Top Banner
Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุ (ต่อ) วิชา การเขียนโปรแกรมเชิงวัตถุ (4122309) สป. ที9 วันที23 ม.ค. 2563 โดย อ.ดร.นัฐพงศ์ ส่งเนียม http://www.siam2dev.net เนื้อหา 1. หลักการเชิงวัตถุ 2. การเขียนโปรแกรมเชิงวัตถุ 3. ความรู้เบื้องต้นเกี่ยวกับ Class 4. ความรู้เบื้องต้นเกี่ยวกับ Object 5. ความรู้เบื้องต้นการสร้าง Class ในภาษาจาวา 6. ความรู้เบื้องต้นการสร้าง Object ในภาษาจาวา 7. การสร้าง เมธอด Method 8. Setter / Getter Method 9. การสร้าง Instance 10. การเรียกใช้งาน Method 11. Constructor 12. Polymorphism 13. Overloading 14. Overloading Constructor Method 15. Overriding 16. แบบฝึกหัด 7.1
34

Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method...

Jul 05, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุ(ต่อ) วิชา การเขียนโปรแกรมเชิงวัตถุ(4122309) สป. ที่ 9 วันที่ 23 ม.ค. 2563 โดย อ.ดร.นัฐพงศ์ ส่งเนียม http://www.siam2dev.net

เนื้อหา

1. หลักการเชิงวัตถุ 2. การเขียนโปรแกรมเชิงวัตถุ 3. ความรู้เบื้องต้นเกี่ยวกับ Class 4. ความรู้เบื้องต้นเกี่ยวกับ Object 5. ความรู้เบื้องต้นการสร้าง Class ในภาษาจาวา 6. ความรู้เบื้องต้นการสร้าง Object ในภาษาจาวา 7. การสร้าง เมธอด Method 8. Setter / Getter Method 9. การสร้าง Instance 10. การเรียกใช้งาน Method 11. Constructor 12. Polymorphism 13. Overloading 14. Overloading Constructor Method 15. Overriding 16. แบบฝึกหัด 7.1

Page 2: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ทบทวน

สรุปคำศัพท์ ในบทนี้

1. Instantiation คือกระบวนการสร้างวัตถุจากคลาส 2. Polymorphism การพ้องรูป คือมีรูปเดียวกันกัน แต่พฤติกรรม หรือการกระทำต่างกัน 3. Inheritance การรับทอดมรดก หรือการถ่ายทอดมรดก จากคลาสพ่อแม่ไปยังคลาสลูก 4. Encapsulation การห่อหุ้ม ข้อมูลและวิธีการจัดการข้อมูลภายในที่เดียวกัน 5. Information hiding การซ่อนรายละเอียดเพ่ือไม่ให้ส่วนที่เกี่ยวข้องเข้าไปใช้งานส่วนนี้โดยไม่ได้รับ

อนุญาต 6. Setter / Getter Method 7. Modifier คำประกอบในภาษาจาวา public private protected default , .. 8. Data Member / Class Variables ตัวแปรของคลาส หรือ ข้อมูลสมาชิกของคลาส 9. Method Member เมธอดสมาชิกของคลาส 10. Void Method เมธอดที่ทำงานเสร็จสิ้นภายในตัวเอง โดยไม่ส่งผลลัพธ์กลับไปยังส่วนที่เรียกใช้ 11. Return Method เมธอดท่ีทำงานเสร็จสิ้น แล้วมีการส่งผลลัพธ์กลับไปยังส่วนที่เรียกใช้ 12. ซอฟต์แวร์เชิงวัตถุ 13. Constructor 14. Overloading Constructor 15. Overloading Method 16. Overriding Method

แนวทางในการพัฒนาระบบ

- แนวทางเชิงโครงสร้าง - แนวทางเชิงวัตถุ

หลักการเขียนโปรแกรมเชิงวัตถุ ตามแนวคิดของ Alan kay ซึ่งเป็นบุคคลที่นำเสนอหลักการเชิงวัตถุยุคแรก ๆ ก็ได้ให้ความเห็นว่า

• โปรแกรมเชิงวัตถุจะต้องมองทุกสิ่ง ทุกอย่างภายในโปรแกรมนั้นในเป็นวัตถุ

• ทุกสิ่งใน Program หรือ Software มองให้เป็นวัตถุ

• วัตถุ คือ สิ่งท่ีเราสนใจ ที่มี/ประกอบไปด้วยลักษณะ (Attribute) และ พฤติกรรม (behavior)

Page 3: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

• Attribute ลักษณะที่บ่งบอกถึงวัตถุนั้น ๆ เช่น วัตถุรถยนต์ มีสี มีล้อ มีตัวถัง มีเครื่อง สิ่งมีวัตถุนั้นมี หรือสิ่งท่ีมองเห็น เป็นลักษณะของวัตถุนั้น

• Behavior/Function ฟังก์ชัน หรือหน้าที่ พฤติกรรม ของวัตถุนั้น ๆ

วัตถุจะต้องมีหน้าที่ หรือ ฟังก์ชัน

• การสืบทอด / การรับทอดมรดก (Inheritance) คือ ถ่ายทอดคุณสมบัติ คุณลักษณะ หรือฟังก์ชัน จากพ่อแม่ไปสู่ลูก หรือจากวัตถุหนึ่งไปยังอีกหนึ่งได้ ซึ่งเป็นกลไกที่สำคัญ เป็นที่มาของการนำกลับไปใช้ใหม่ (Reusable) ได้ ซึ่งภาษาเชิงโครงสร้างทำไม่ได้ นั่นคือข้อดีของโปรแกรมเชิงวัตถุ ทีจ่ะต้องออกแบบให้สามารถขยาย หรือ นำกลับไปใช้งานได้ใหม่ในภายหลัง

• พอลิมอร์ฟิซึม (Polymorphism) โปรแกรมภาษาใดก็ตามที่จัดว่าเป็นเชิงวัตถุ โปรแกรมนั้นจะต้องมีความสามารถอีกอย่างหนึ่งคือ การพ้องรูป หรือ หนึ่งรูปหลายพฤติกรรม หรือ พอลิมอร์ฟิซึม เป็นอีกหนึ่งกลไกที่จะนำกลับมาใช้ใหม่

• การซ่อนรายละเอียด / การห่อหุ้ม (Information Hiding / Encapsulation)

Page 4: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

• Scenario สถานการณ์สมมติ

• บริการส่วนหน้า (Front-end)

• ลูกค้านำรถยนต์มาที่ศูนย์

• พนักงานรับแจ้งปัญหา อาการรถยนต์จากลูกค้า

• บริการซ่อม

• พนักงานแจ้งรายการซ่อม

• ช่างซ่อมตรวจอาการรถยนต์

• ช่างซ่อมรถยนต์

Page 5: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

• ช่างซ่อมเบิกอะไหล่

• ช่างซ่อมแจ้งการซ่อมเสร็จ ปิดงาน

• ฝ่ายบัญชี / การชำระเงิน / สั่งอะไหล่

• ส่งรายการที่ซ่อม ใบเสร็จให้ลูกค้า

• ลูกค้าชำระเงิน

• ลูกค้ารับรถยนต์กลับ

Unified Process

Use case (Analysis… Inception Phase)

Class Diagram (Analysis and Design … Elaboration Phase)

Implementation (Coding) (Implement … Construction Phase)

Testing (Implement … Construction Phase)

Deploy and Packaging (Transition Phase)

UML

• Use case Diagram

• Use case Description

• Class Diagram

Page 6: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ตวัอย่าง ระบบบริหารศูนยบ์ริการรถยนต์

การท างานของระบบบริหารศูนยบ์ริการรถยนต ์ เร่ิมจากลูกคา้โทรนดัและท าการส่งรถใหก้บัพนกังานที่รอรบับริการ

ตรวจสอบและซกัถามอาการเบื้องตน้เพือ่ส่งไปใหพ้นกังานรบัรถ และตรวจสอบอาการพรอ้มทัง้ตรวจสอบอะไหลท่ี่ตอ้ง

ใชถ้า้มอีะไหลช่่างซ่อมเป็นผูเ้บกิและท าการซ่อม และเมือ่ซ่อมเสร็จจะส่งรถกลบัคืนพรอ้มทัง้รายงานอะไหล่ทีใ่ชไ้ปใหก้บั

ทางฝ่ายบญัชีเพือ่คิดค่าบริการและส่งรายงานค่าใชจ้่ายกลบัไปยงัลูกคา้

ขัน้ตอนการสรา้งยูสเคส การท าใหแ้ผนภาพยูสเคส ประกอบดว้ย 5 ดงันี้

1. เร่ิมการท างานดว้ยแอ็คเตอรท์ี่ท าใหเ้กิดยูสเคส คือแอ็คเตอรลู์กคา้ แอค็เตอรข์องระบบประกอบดว้ย แอค็เตอร์

ลูกคา้ และ แอค็เตอรพ์นกังาน ดงันี้

− พนกังานบริการ เป็นชายแอค็เตอรข์องแอค็เตอรพ์นกังาน ท าหนา้ทีต่อ้นรบัลูกคา้ทีเ่ขา้มาตดิต่อกบัศูนยบ์ริการ

− พนกังานบญัช ี เป็นชายแอค็เตอรข์องแอค็เตอรพ์นกังาน ท าหนา้ทีค่ิดค านวณรายการเพือ่เปิดใบช าระเงนิใหก้บั

ลูกคา้

− ช่างซ่อม เป็นชายแอค็เตอรข์องแอค็เตอรพ์นกังาน ท าหนา้ทีซ่่อมรถ และตรวจสอบพรอ้มจดัหาอะไหลท่ีข่าด

2. เกิด Preconditions ส าหรบัแผนภาพยูสเคสนี้คือ แอ็คเตอรลู์กคา้น ารถเขา้มาที่ศูนยพ์รอ้มแจง้อาการเบื้องตน้

กบัแอค็เตอรพ์นกังานบริการ

3. การท างานในระบบดว้ยยูสเคส เป็นการวเิคราะหค์วามสมัพนัธร์ะหว่างยูสเคส และ ความสมัพนัธร์ะหว่างยูสเคส

กบัแอค็เตอร ์ยูสเคสในระบบ ประกอบดว้ย

1. ยูสเคสบริการส่วนหนา้ ท าการตรวจรบัรถจากลูกคา้พรอ้มแสดงรายการ อาการทีเ่กิดขึ้นของรถ เป็นใบแจง้ซ่อม

2. ยูสเคสรายงานการซ่อม ท าการแจง้รายการทัง้หมดพรอ้มทัง้อะไหล่ทีใ่ชแ้ละราคาเป็นใบแจง้หนี้ใหลู้กคา้

รบัทราบ

3. ยูสเคสตรวจสอบอาการรถ พนกังานช่างซ่อมตรวจสอบและเช็คอาการทีไ่ดร้บัแจง้พรอ้มทัง้จดัหาอะไหลเ่พือ่ท า

การซ่อม

4. ยูสเคสซ่อมรถ เป็นยูสเคสทีม่คีวามสมัพนัธแ์บบขยายกบัยูสเคสตรวจสอบรถ จะเกิดไดเ้มือ่มกีารตรวจสอบ

อาการของรถแลว้ค่อยท าการซ่อมรถ ท าการซ่อมรถ และแจง้กลบัเมือ่เสร็จสิ้น

5. ยูสเคสการช าระเงนิ เมือ่ลูกคา้ไดร้บัใบแจง้หนี้ท าการตรวจสอบรายการและช าระเงนิกบัพนกังานบญัชี

4. เกิด Postcondition เมือ่แผนภาพยูสเคสท างานเสร็จสิ้น คือ แอค็เตอรลู์กคา้ไดร้บัรถทีม่กีารซ่อมเรียบรอ้ยแลว้เป็น

การสิ้นสุดการท างานในระบบ

Page 7: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

5. จบการท างาน (ending) ดว้ยแอค็เตอรลู์กคา้ไดร้บัรถที่ซ่อมเสร็จเรียบรอ้ย

Use case diagram

การวิเคราะห์คลาสที่ได้จาก Use case Diagram จะประกอบไปด้วยคลาสต่าง ๆ ในระบบ ดังนี้

• พนักงานต้อนรับ

• ช่างซ่อม

• ฝ่ายบัญชี

• ลูกค้า

• รถยนต์

• ใบเสร็จ

วัตถุ

..T1 , T2 , T3 แทน รถยนต์

C1, C2 , C3 แทนลูกค้า

ความสัมพันธ์ (Relationship)

• ลูกค้าเป็นเจ้าของรถยนต์

• พนักงานรับแจ้งรายการซ่อมจากลูกค้า

• พนักงานต้อนรับลูกค้า

Page 8: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

• พนักงานรับเงินจากลูกค้า

• ลูกค้าส่งรถยนต์ให้พนักงาน

• ช่างซ่อมตรวจอาการรถยนต์

• ช่างซ่อมทำการซ่อมรถยนต์

• ช่างซ่อมเบิกอะไหล่รถยนต์

• ฝ่ายบัญชีออกใบเสร็จ

• ฯลฯ

แผนภาพคลาส (Class diagram)

*** ในความเป็นจริง นศ. ต้องใช้ CASE Tool ในการสร้างแผนภาพ เช่น Draw.IO หรือ Dia , Star UML ฯลฯ

*** ให้ นศ. เขียนแผนภาพคลาสนี้ให้ถูกต้องสมบูรณ์ ลงในสมุด

ลกูคา้ พนกังาน

รถยนต ์ ช่างซ่อม

Page 9: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ความสัมพันธ์ระหว่างคลาสลูกค้า กับรถยนต์

*** จากรูปนี้ ไม่ได้หมายถึง รถยนต์เป็นส่วนประกอบ ของลูกค้า แต่หมายถึงลูกค้าเป็นเจ้าของ รถยนต์

*** ระบบนี้เป็นระบบซ่อมรถยนต์ ดังนั้น เราจึงไม่ได้สนใจ (Problem Domain) ราคารถยนต์

สร้าง Project ใหม่ ตั้งชื่อ Car_Care_System

คลาสที่ใช้ในการทดสอบการทำงานในท่ีนี้คือ คลาส Car_Care_System

Car_Care_System Customer Car

has own

* *

Customer Car

เป็นเจ้าของ 1 * - custName: String - custAddress : String - aCar : Car

- BrandName: String - Color : String - Registration : String

+ setBrandName() + setColor() + setRegis() + getBrandName():String + getColor() : String + getRegis() : String

+ getName() : String + setName() + getAddress() : String + setAddress() + getaCar() : Car + setaCar() + payment()

Page 10: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

สร้างจาวาคลาส Customer.java

• Click ขวาที่ Package

• เลือก New

• เลือก Java Class

• ตั้งชื่อ Customer

• กด OK

Page 11: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

จะได้ไฟล์ .java 3 ไฟล์ ดังรูป

Page 12: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ไฟล์ Customer.java

Constructor Method เมธอดผู้สร้าง

*** จะมีชื่อเหมือนกับชื่อคลาส หรือ ชื่อเดียวกับชื่อคลาส จะถูกใช้งาน ตอนสร้างอินแสตนซ์ (Instantiation)

สำหรับใช้กำหนดค่าเริ่มต้นตอนสร้างวัตถุข้ึน เช่น เมื่อเปิดบัญชีธนาคาร จำเป็นต้องกำหนดค่าเงินฝากขั้นต่ำ

หรือ เมื่อเราสร้างลูกค้า อาจจะต้องกำหนดชื่อให้กับลูกค้า เป็นต้น

รูปแบบ

public method_name() { }

Page 13: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

*** method name เป็นชื่อเดียวกันกับชื่อคลาส ตัวอย่าง class Car{ //cunStructor Method public Car() { } } *** UML class diagram constructor ต้องขีดเส้นใต้ที่ชื่อเมธอด

Page 14: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

คลาส รถยนต์ Car

Page 15: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

Source Code : Class Car

package car_care_system; public class Car { // data member private String BrandName; private String Color; private String Registration; // Overloading Constructor Method public Car() {} public Car(String bd){ BrandName = bd; } public Car(String bd, String c) {BrandName = bd; Color = c;} // setter method public void setBrandName(String bd){

Page 16: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

BrandName = bd; } public void setColor(String c){ Color = c; } public void setRegistration(String r){ Registration = r; } // getter method public String getBranName() { return BrandName; } public String getColor() { return Color; } public String getRegistration () { return Registration; } }

Scenario สถานการณ์สมมติ

1. สร้างลูกค้า เป็น C1

2. สร้างลูกค้า เป็น C2 ที่มีชื่อ “สมชาย”

3. สร้างลูกคา้ เป็น C3 ที่มีชื่อและที่อยู่ ชื่อ “นัฐพงศ์ ” ที่อยู่ “กรุงเทพ”

สร้างในไฟล์ Car_Care_System

Page 17: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

มีข้อผิดพลาด อะไร ………. Syntax Error ผิดอะไร ? ขาด Keyword new

Customer c1 = new Customer();

เมื่อไปดูในคลาส Customer มีข้อผิดพลาด

Page 18: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ในคลาส Car_Care_System

คอนสตรัคเตอร์เมธอด จะถูกใช้งานเมื่อสร้างวัตถุ Overloading Constructor Method

Polymorphism

- Overloading

- Overriding

*** Overloading การสร้างเมธอดท่ีมีชื่อเดียวกัน ในคลาสเดียว เป็นหนึ่งในกลไก Polymorphism หรือ

การพ้องรูป ซึ่งเป็นกลไกท่ียอมให้นำกลับมาใช้ใหม่ได้ หมายถึงยอมให้สามารถสร้างเมธอดที่มีชื่อเดียวกันได้

หลาย ๆ เมธอด เพ่ือความยืดหยุ่นของโปรแกรม ตัวอย่าง

เราสามารถสร้างเมธอดในการฝากเงินได้หลายแบบ โดย จะต้องมีข้อแตกต่าง ในเรื่องต่อไปนี้ ชื่อเมธอดเหมือนกัน

• จำนวน parameter ต้องไม่ทำกัน

• ลำดับของ parameter ต้องไม่ตรงกัน

• ชนิดของ parameter ต้องไม่เหมือนกัน

• ชนิดของ การ return type ต้องไม่ตรงกัน ตัวอย่าง public void deposit() { … } public void deposit(double amt) { … } public void deposit(int amt) { …} pubic void deposit(float amt) { … }

Page 19: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

*** การที่ยอมให้มีการตั้งชื่อเดียวกัน ซ้ำ ๆ กันได้ เรียกว่า การพ้องรูป Polymorphism แบบ Overloading Method *** ถ้า constructor ซ้ำกัน เรียกว่า Overloading Constructor method

แผนภาพคลาส (class diagram)

Senario สถานการณ์สมมติ

1. สร้างลูกค้า

2. สร้างลูกค้าที่มีชื่อ “สมชาย”

3. สร้างลูกค้าที่มีชื่อ และที่อยู่ “นัฐพงศ์ ” ที่อยู่ “กรุงเทพ”

4. กำหนดชื่อ และ กำหนดที่อยู่ให้ ลูกค้า C1

5. กำหนดที่อยู่ให้ ลูกค้า C2

6. กำหนดรถยนต์ ให้ C1, C2,C3

Customer

- custName : String

- custAddress : String

- aCar : Car

- Customer()

- Customer(String n)

- Customer(String addr,String n)

Overloading

Constructor

method

Page 20: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

Senario สถานการณ์สมมติ

1. สร้างลูกค้า

2. สร้างลูกค้าที่มีชื่อ “สมชาย”

3. สร้างลูกค้าที่มีชื่อ และที่อยู่ “นัฐพงศ์ ” ที่อยู่ “กรุงเทพ”

4. กำหนดชื่อ และ กำหนดที่อยู่ให้ ลูกค้า C1

5. กำหนดที่อยู่ให้ ลูกค้า C2

6. กำหนดรถยนต์ ให้ C1, C2,C3

7. สร้างรถยนต์ คันที่ 1 Toyota

8. สร้างรถยนต์ คันที่ 2 Honda

9. กำหนดสี ยี่ห้อ เลขทะเบียน ให้ Toyota และ Honda

10. กำหนด รถยนต์ Toyota ให้ C1

11. กำหนด รถยนต์ Honda ให้ C2

12. ขอดูรถยนต์ ของลูกค้า C2

Page 21: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น
Page 22: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ผลลัพธ์

แบบฝึกหัด 7.1

ในระบบงานธนาคารแห่งหนึ่ง ลูกค้าของธนาคารมีบัญชีธนาคารได้หลายบัญชี โดยบัญชีธนาคาร แบ่ง

ออกเป็น 3 ประเภท 1. ออมทรัพย์ 2. กระแสรายวัน 3. ฝากประจำ โดยแต่ละบัญชี สามารถ ฝากเงิน ถอนเงิน

และขอดูยอดคงเหลือได้ จงเขียนแผนภาพยูสเคส แผนภาพคลาส และ เขียนโปรแกรม ตาม Scenario ที่

กำหนดให้ดังนี้

1. สร้างลูกค้า C1 , C2, C3

2. กำหนดชื่อ

3. กำหนดที่อยู่

4. กำหนดบัญชี (account)

5. ทำการฝากเงินของ C1, C2 , C3 เป็นจำนวน 100000 , 50000 , 10000 ตามลำดับ

6. ทำการถอนเงินของ C1 , C2, C3 เป็นจำนวน 2000 , 3000 , 5000 ตามลำดับ

7. แสดงยอดคงเหลือของแต่ละลูกค้า

ฝาก

ฝากผ่านเคาเตอร ์

Page 23: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

แผนภาพคลาส BankAccount_System

Customer BankAccount

- CustName : String - CustAddress : String - acct : BankAccount

1 * has

- Balance : double

+ BankAccount() + BankAccount(amt:double) + setBalance() + getBalance()

+ Customer() + Customer(n:String) + Customer(addr:String) + setName() + setAddress() + setAccount() + getName() + getAddress() + getAccount()

SavingAccount CurrentAccount

InterestAccount

Page 24: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

สร้าง Project ใหม่ ตั้งชื่อ BankAccount_System

คลาส BankAccount_System

Page 25: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

สร้าง Java Class

มีข้อผิดพลาด ตรง Constructor ตัวล่าง เนื่องจากจำนวน parameter เท่ากัน ชนิดต้องต่างกัน

Page 26: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น
Page 27: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

คลาสสมุดบัญชี BankAccount

Scenario

1. สร้างลูกค้า C1 , C2, C3

2. กำหนดชื่อ

3. กำหนดที่อยู่

4. กำหนดบัญชี (account)

5. ทำการเปิดบัญชีด้วยเงินของ C1, C2 , C3 เป็นจำนวน 100000 , 50000 , 10000 ตามลำดับ

6. ทำการฝากเงิน ด้วยเงินของ C1, C2 , C3 เป็นจำนวน 10000 , 20000 , 30000 ตามลำดับ

7. ทำการถอนเงินของ C1 , C2, C3 เป็นจำนวน 2000 , 3000 , 5000 ตามลำดับ

8. แสดงยอดคงเหลือของแต่ละลูกค้า

สร้าง ลูกค้า C1 C2 C3

Page 28: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

การฝากเงิน

Page 29: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

Scenario

1. สร้างลูกค้า C1 , C2, C3

2. กำหนดชื่อ

3. กำหนดที่อยู่

4. กำหนดบัญชี (account)

5. ทำการเปิดบัญชีด้วยเงินของ C1, C2 , C3 เป็นจำนวน 100000 , 50000 , 10000 ตามลำดับ

6. ทำการฝากเงิน ด้วยเงินของ C1, C2 , C3 เป็นจำนวน 10000 , 20000 , 30000 ตามลำดับ

7. ทำการถอนเงินของ C1 , C2, C3 เป็นจำนวน 2000 , 3000 , 5000 ตามลำดับ

8. แสดงยอดคงเหลือของแต่ละลูกค้า

ตรวจสอบยอดคงเหลือ

แสดงไปที่หน้าจอ

Page 30: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

ผลลัพธ์

SOURCE CODE :

File : BankAccount_System.java

package bankaccount_system; public class BankAccount_System { public static void main(String[] args) { Customer C1,C2,C3; C1 = new Customer(); C2 = new Customer("นัฐพงศ์ ส่งเนียม"); C3 = new Customer("สมชาย ใจดี" , "กรุงเทพ"); //--- กำหนดสมุดบัญชีให้ลูกค้า C1.setBankAccount(new BankAccount(100000));

Page 31: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

//--- สร้าง สมุดบัญชี BankAccount bc1 = new BankAccount(50000); BankAccount bc2 = new BankAccount(10000); //--- กำหนดบัญชี ให้ลกูค้าทั้งสองคน C2.setBankAccount(bc1); C3.setBankAccount(bc2); //--- การฝากเงิน หมายถึง ต้องเอาสมุดบัญีไปฝากเงิน โดยเพิ่มจากยอดเดิม C1.getBankAccount().deposit(10000.00d); C2.getBankAccount().deposit(20000.00d); C3.getBankAccount().deposit(30000.00d); //--- การถอนเงิน หมายถึง ต้องเอาสมุดบัญีไปถอนเงิน โดยหักจากบัญชีเดิม C1.getBankAccount().withdraw(2000.00d); C2.getBankAccount().withdraw(3000.00d); C3.getBankAccount().withdraw(5000.00d); //--- ตรวจสอบยอดเงินคงเหลือ System.out.println("ยอดเงินคงเหลือของลูกค้า คนที่ 1 : " + C1.getBankAccount().getBalance()); System.out.println("ยอดเงินคงเหลือของลูกค้า คนที่ 2 : " + C2.getBankAccount().getBalance()); System.out.println("ยอดเงินคงเหลือของลูกค้า คนที่ 3 : " + C3.getBankAccount().getBalance()); } }

SOURCE CODE :

File : Customer.java

Page 32: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

package bankaccount_system; public class Customer { private String custName; private String custAddress; private BankAccount acct; //--- Overloading Constructor Method public Customer() {} // empty constructor public Customer(String n) { custName = n; } public Customer(String addr, String n) { custAddress = addr; custName = n; } public Customer(BankAccount bc) { acct = bc; } //--- setter method public void setCustName(String n) { custName = n;} public void setCustAddress(String addr) { custAddress = addr;} public void setBankAccount(BankAccount bc) { acct = bc;} //--- getter method public String getCusName() {return custName;} public String getCusAddress() {return custAddress;} public BankAccount getBankAccount() {return acct;} }

SOURCE CODE :

File : BankAccount.java

package bankaccount_system; public class BankAccount {

Page 33: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น

// data member private double Balance; // Overloading Constructor method public BankAccount(){}; //empty constructor public BankAccount(double amt) { Balance = amt; } // overloading method public void deposit(double amt) {Balance += amt;} // ฝากแบบ double public void deposit(int amt) {Balance += amt;} // ฝากแบบ integer public void withdraw(double amt) {Balance -= amt;} //ถอนเงิน double public void withdraw(int amt) {Balance -= amt; } //ถอนเงิน integer //--- ขอดูยอดเงินคงเหลือ public double getBalance() {return Balance; } }

Component Diagram

Page 34: Workshop07: หลักการเขียนโปรแกรมเชิงวัตถุsiam2dev.net/E_Learning/OOP/Workshop07_OOP_PART_II... · 11. Return Method เมธอดที่ทำงานเสร็จสิ้น