บทที่ 1 บทนำ 1.1 ความเป็นมาและความสำคัญของปัญหา แนวความคิดในการเขียนโปรแกรมชิงวัตถุ (Object-Oriented Programming) เป็นการ เขียนโปรแกรมเป็นส่วนๆ และนำส่วนต่างๆ มาเชื่อมต่อกันแต่ละส่วนอธิบายได้ในเชิงวัตถุ ซึ่ง ประกอบไปด้วยกลุ่มข้อมูล (Attribute) และ พฤติกรรม (Behavior) และจากการพิจารณาทุกสิ่ง ทุกอย่างเป็นวัตถุ ซึ่งเป็นหลักการที่จะใกล้เคียงกับธรรมชาติของมนุษย์มาก จากแนวคิดดังกล่าวมี ผลให้เกิดการทำงานที่รวดเร็ว สามารถนำซอฟต์แวร์กลับมาใช้ใหม่ได้ หรือที่เรียกว่า ซอฟต์แวร์ รียูส (Software Reuse) การเปลี่ยนแปลงแก้ไขทำได้ง่าย มีผลิตผลและความน่าเชื่อถือ สูง และสามารถจะป้องกันการเกิดปัญหาวิกฤตซอฟต์แวร์ที่ประกอบไปด้วยปัญหาความซับซ้อน ของซอฟต์แวร์ ปัญหาการควบคุมเวลาและค่าใช้จ่ายในการพัฒนาซอฟต์แวร์ ปัญหาคุณภาพของ ซอฟต์แวร์ไม่ได้ตามที่ต้องการ จากแนวความคิดในการแก้ปัญหาของการเขียนโปรแกรมเชิงวัตถุที่พิจารณาถึงองค์ประกอบ ปัญหาและองค์ประกอบของปัญหา (Problem Space) ซึ่งแตกต่างจากแนวคิดในการแก้ปัญหาของ การเขียนโปรแกรมแบบเก่าที่ค้นหาวิธีการแก้ปัญหา (Solution Space) ผู้พัฒนาซอฟต์แวร์ที่ขาด ความรู้ความเข้าใจในแนวคิดการแก้ปัญหาแบบใหม่ และขาดทักษะ ความชำนาญในการพัฒนา ซอฟต์แวร์เชิงวัตถุ จะทำให้การพัฒนาซอฟต์แวร์มีผลิตผลและความน่าเชื่อถือต่ำ ผู้พัฒนาซอฟต์แวร์และผู้ที่สนใจเรียนรู้ ควรศึกษาทำความเข้าใจในแนวคิดการแก้ปัญหาของ การเขียนโปรแกรมเชิงวัตถุ และฝึกฝน พัฒนาทักษะและความชำนาญในการเขียนโปรแกรมเชิง วัตถุเพื่อสามารถพัฒนาซอฟต์แวร์ที่มีผลิตผลและความน่าเชื่อถือต่อไปได้ โดยควรมีสื่อที่น่าสนใจ นำเสนอข้อมูลและให้ผู้ใช้ได้ฝึกฝน สร้างทักษะและความชำนาญในการเขียนโปรแกรมเชิงวัตถุ เกมนักรบจะมีส่วนที่ให้ผู้ใช้ได้เล่นเกมซึ่งเป็นส่วนที่ดึงดูดความสนใจจากผู้ใช้ และมีส่วนที่ ให้ผู้ใช้ได้มีโอกาสฝึกเขียนโปรแกรมเพื่อสร้างหรือปรับปรุงโรบ็อทซึ่งเป็นส่วนที่ช่วยสร้างทักษะ และความชำนาญในการเขียนโปรแกรมเชิงวัตถุ และยังมีส่วนนำเสนอข้อมูลที่เป็นแนวคิดในการ เขียนโปรแกรมเชิงวัตถุซึ่งจะช่วยให้ผู้ใช้เข้าใจแนวคิดในการแก้ปัญหาของการเขียนโปรแกรมเชิง วัตถุด้วย 2 1.2 วัตถุประสงค์ 1.2.1 เพื่อพัฒนาเกมนักรบ ที่ให้ผู้เล่นได้ควบคุมโรบ็อทโดยการเขียนโปรแกรมเชิงวัตถุด้วย ภาษาจาวา และให้มีส่วนของการนำเสนอความรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ ที่มีประสิทธิ ภาพในการทำงานดี 1.2.2 เพื่อหาประสิทธิภาพของเกมนักรบที่ได้พัฒนาขึ้น 1.3 สมมติฐานการวิจัย 1.3.1 เกมที่พัฒนาขึ้นได้รับการประเมินประสิทธิภาพในระดับดีขึ้นไป 1.4 ขอบเขตการวิจัย ระบบที่พัฒนาในสารนิพนธ์นี้มีขอบเขตดังนี้ 1.4.1 เป็นการพัฒนาด้วยภาษาจาวา รุ่นมาตรฐานที่ทำงานบนเครื่องคอมพิวเตอร์ทั่วไป 1.4.2 เป็นการพัฒนาภายใต้แนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.4.3 เกมแบ่งเป็น 2 ส่วนหลัก ๆ ดังนี้ 1.4.2.1 ให้ผู้เล่นเลือกโรบ็อทมาจัดสร้างเป็นทีมและเลือกทีมที่จัดไว้แล้วมาเล่น 1.4.2.2 ให้ผู้เล่นสามารถสร้างหรือปรับปรุงโรบ็อท ด้วยการเขียนโปรแกรมโดย ใช้แนวคิดการเขียนโปรแกรมเชิงวัตถุด้วยภาษาจาวา เพื่อควบคุมโรบ็อท 1.4.4 ในส่วนของการสร้างหรือปรับปรุงโรบ็อทนี้จะมีส่วนนำเสนอความรู้แนวคิดการเขียน โปรแกรมเชิงวัตถุ ที่สอดคล้องกับคำที่เขียนโปรแกรมลงไป โดยข้อมูลที่นำเสนอประกอบไปด้วย 1.4.3.1 ข้อความอธิบายความหมายของคำที่สอดคล้องกับคำเฉพาะของแนวคิดการเขียน โปรแกรมเชิงวัตถุ 1.4.3.2 ตัวอย่างโปรแกรมที่เกี่ยวข้องกับคำที่สอดคล้องกับคำเฉพาะของแนวคิดการเขียน โปรแกรมเชิงวัตถุ 1.4.3.3 ภาพสัญลักษณ์ยูเอ็มแอลที่เกี่ยวข้องกับคำที่สอดคล้องกับคำเฉพาะของแนวคิดการ เขียนโปรแกรมเชิงวัตถุ 1.5 ข้อตกลงเบื้องต้น 1.5.1 พัฒนาเกมโดยใช้ภาษาจาวา และแนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.5.2 พัฒนาเกมโดยใช้ระบบปฏิบัติการ Microsoft Windows 3 1.6 นิยามศัพท์ 1.6.1 โรบ็อท (Robot) หมายถึง วัตถุหรือ สิ่งต่าง ๆ ที่ถูกกำหนดให้อยู่ในทีมใดๆ และอยู่ใน ชนิดใดชนิดหนึ่ง ซึ่งสามารถนำไปใช้ร่วมกันในการต่อสู้ โดยโรบ็อท จะมีข้อมูลและพฤติกรรม เฉพาะตัว 1.6.2 ทีม หมายถึง กลุ่มของโรบ็อท ที่มีสถานะความเป็นกลุ่มเดียวกันจะไม่ทำลายกันเอง 1.6.3 ประสิทธิภาพ หมายถึง ผลจากการประเมินโดยกลุ่มผู้เล่นเกม ด้วยแบบประเมินที่ผู้วิจัย สร้างขึ้น 1.7 ประโยชน์ที่คาดว่าจะได้รับ 1.7.1 ผู้เล่นมีความรู้ ทักษะความชำนาญ และความเข้าใจที่ถูกต้องในแนวคิดการเขียน โปรแกรมเชิงวัตถุ ด้วยภาษาจาวา เพิ่มขึ้น 1.7.2 สร้างแรงจูงใจ และลดระยะเวลาในการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.7.3 เป็นการสนับสนุน เผยแพร่การศึกษาและการนำไปใช้ของแนวคิดการเขียนโปรแกรม เชิงวัตถุ บทที่ 2 ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง การพัฒนาเกมนักรบเพื่อส่งเสริมการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ ผู้พัฒนาได้ทำการศึกษา ทฤษฎีและเทคโนโลยีต่าง ๆ ที่เกี่ยวข้องกับการพัฒนา ที่สามารถนำมาประยุกต์ใช้กับงาน ได้ โดยแบ่งออกเป็นหัวข้อต่าง ๆ ดังต่อไปนี้ คือ 2.1 ภาษาจาวา 2.2 แนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) 2.3 ยูเอ็มแอล (Unified Modeling Language หรือ UML ) 2.4 วิศวกรรมซอฟต์แวร์เชิงวัตถุ (Object Oriented Software Engineering) 2.1 ภาษาจาวา (Java) 2.1.1 พื้นฐานภาษาจาวา ภาษา จาวา ถูกพัฒนาขึ้นโดยบริษัท ซันไมโครซิสเต็ม (Sun Microsystems) โดยมี ประกาศให้เป็นภาษาสำหรับสร้างโปรแกรมเพื่อใช้งานบนอินเทอร์เน็ตมีจุดเด่นที่เมื่อสร้างขึ้นบน เครื่องคอมพิวเตอร์เครื่องหนึ่งแล้ว สามารถ นำไปทำงานบนเครื่องคอมพิวเตอร์ต่างระบบได้ โดย ไม่ต้องคอมไพล์โปรแกรมใหม่ ภาษาจาวาถูกออกแบบให้มีลักษณะดังต่อไปนี้ (วีระศักดิ์, 2543: 1) 2.1.1.1 เป็นภาษาที่ง่าย ในการเรียนรู้และใช้งานในแง่ต่าง ๆ ดังนี้ ก) ภาษา จาวา นำไวยากรณ์ภาษาส่วนใหญ่มาจากภาษา C และ C++ ฉะนั้นผู้ที่คุ้นเคยกับภาษา C หรือ C++ อยู่ก่อนแล้ว จะเข้าใจภาษาจาวา ได้ง่ายใช้เวลาศึกษาไม่นาน ข) ภาษา จาวา มีกลไกของภาษาจำนวนไม่มากและไม่ซับซ้อน โดยตัดกล ไกของภาษา C และ C++ ที่ยุ่งยากออกไป อีกทั้ง ภาษา จาวา ถูกออกแบบให้เป็นภาษาเชิงวัตถุอย่าง รอบคอบกว่าภาษา C และ C++ ซึ่งกลไกที่ซับซ้อนและไม่ชัดเจน ง่ายต่อการเกิดความผิดพลาด จะ ถูกตัดออกไป เช่น มัลติเพิลอินเฮอร์ริแทนซ์ (Multiple Inheritance) 5 ค. ภาษาจาวา จะทำการตรวจสอบเกี่ยวกับ ชนิดข้อมูล เพื่อช่วยให้โปรแกรม ทำงานโดยไม่มีความผิดพลาดเกี่ยวกับชนิดข้อมูล ซึ่งภาษาจาวา ได้สร้างกฎเกณฑ์เกี่ยวกับการ เปลี่ยนแปลงชนิดข้อมูลโดยอัตโนมัติซึ่งช่วยเปลี่ยนแปลงชนิดข้อมูลที่แตกต่างกัน ช่วยให้การเขียน โปรแกรมทำได้ง่ายขึ้น 2.1.1.2 โปรแกรมที่สร้างด้วยภาษาจาวา จะไม่มีความผิดพลาดจากข้อบกพร่องของ ภาษา หมายถึง โปรแกรมจะต้องไม่ล้มเหลวลง ด้วยความผิดปกติเล็กน้อยที่ไม่เกี่ยวกับตรรกะของ โปรแกรมซึ่งทำให้ภาษาจาวา มีความแข็งแกร่งคงทน (Robust) ด้วยวิธีการดังนี้ ก) ภาษาจาวาเน้นการใช้กลไกการดักจับข้อผิดพลาด (Exception Handling) เพื่อให้โปรแกรมสามารถจัดการกับความผิดปกติบางอย่างที่เกิดขึ้นในขณะที่โปรแกรม ทำงาน ช่วยให้โปรแกรมสามารถทำงานต่อไปได้โดยไม่ต้องหยุดการทำงานลง ข) ภาษาจาวา ตัดกลไกบางอย่างของ ภาษา C และ C++ ที่อาจก่อให้เกิดข้อ ผิดพลาดโดยไม่ระวังได้เช่นการตัดการอ้างถึงที่อยู่ (Address) ของ ตัวแปร และการใช้ ตัวชี้ (Pointer) สำหรับอ่านหรือเขียนข้อมูลลงหน่วยความจำโดยตรง ค) ภาษาจาวาไม่มีกลไกสำหรับคืนหน่วยความจำที่ขอมาขณะโปรแกรม ทำงานแต่ ภาษาจาวา อาศัยการทำงานของตัวกำจัดขยะ (Automatic Garbage Collector) ทำหน้าที่เก็บหน่วยความจำที่ไม่สามารถอ้างถึงได้แล้ว กลับมาใช้งานใหม่ ง) ภาษาจาวา เป็นภาษาที่เน้นความถูกต้องของชนิดข้อมูลที่ใช้ในโปรแกรม คอมไพเลอร์ของภาษาจาวา จะทำการตรวจสอบว่าโปรแกรมจัดการกับชนิดข้อมูลถูกต้องหรือไม่ซึ่ง ความผิดพลาดที่เกี่ยวกับชนิดข้อมูลจะ ถูกปฏิเสธตั่งแต่การคอมไพล์ ฉะนั้นความผิดพลาดชนิดนี้ จะไม่ข้ามไปเกิดขึ้นขณะที่โปรแกรมทำงาน 2.1.1.3 ภาษาจาวา มักจะถูกส่งผ่านระบบเครือข่ายไปทำงานบนเครื่องคอมพิวเตอร์ ของผู้อื่นซึ่งผู้รับจะต้องมั่นใจได้ว่าสิ่งที่รับมาจะไม่ก่อให้เกิดความเสียหายใด ๆ ต่อระบบนั้น ๆ โดย ภาษาจาวา ถือว่าเป็นภาษาที่มีความปลอดภัยสูง ซึ่งถูกออกแบบมาเพื่อความปลอดภัยมากกว่าภาษา อื่นโดยแบ่งการป้องกันออกเป็นหลายระดับดังนี้ ก) จาการที่ภาษาจาวา ไม่ยอมให้อ้างถึงค่าในหน่วยความจำผ่านทาง ตัวชี้ตำแหน่งที่อยู่ และจะทำการตรวจสอบว่าการอ้างถึงสมาชิกใน อะเรย์ (Array) อยู่ในขอบเขต หรือไม่ โปรแกรมจึงไม่สามารถเขียนหรืออ่านค่าในหน่วยความจำที่ไม่มีสิทธิ์จะอ้างถึง การเปลี่ยน แปลงโปรแกรม หรือค่าในหน่วยความจำ เพื่อสร้างโปรแกรมที่ไม่ปลอดภัยด้วยวิธีนี้จะไม่เกิดขึ้น ข) ตัวแปลภาษาจาวา มี การตรวจสอบไบต์โค้ด (Byte Code) ทำหน้าที่ ตรวจสอบโปรแกรมที่จะถูกทำงานว่ามีคำสั่งผิดปกติหรือมีการทำงานที่ไม่สมควรหรือไม่ 6 ค) ภาษาจาวา มีระบบรักษาความปลอดภัยที่เรียกว่า แซ็นด์บอกซ์โมเดล (Sandbox Model) คือโปรแกรมที่ถูกนำมาจากเครื่องอื่นผ่านเครือข่ายจะถือว่าเป็นโปรแกรมที่ไม่ น่าไว้ใจจะถูกเก็บอยู่ในภาวะที่เรียกว่า แซ็นด์บอกซ์ (Sandbox) ซึ่งมีข้อจำกัดหลาอย่างเช่น ไม่สามารถอ่าน หรือเขียนไฟล์ได้ 2.1.1.4 จุดมุ่งหมายสำคัญของการออกแบบภาษาจาวาคือโปรแกรมต้องสามารถ ทำงานบนเครื่องต่างระบบกันได้เป็นคุณสมบัติของการไม่ขึ้นกับระบบ (Platform Independent) ซึ่งภาษาจาวา ใช้วิธีการแปลภาษาทั้งแบบคอมไพล์ และแบบ อินเตอร์พรีท (Interpret) (วีระศักดิ์, 2543: 6) ภาษาจาวา นำแนวความคิดการสร้างเครื่องจักรสมมติ (Java Virtual Machine) มาใช้ เพื่อ ให้โปรแกรมไม่ขึ้นกับระบบโดยคอมไพเลอร์ (Compiler) ทำการแปลภาษาให้เป็นโปรแกรมของ เครื่องจักรสมมติ แล้วนำโปรแกรมนั้นมาทำงานด้วยเครื่องจักรสมมติที่จำลองขึ้นด้วย จาวา อิน เตอร์พรีทเตอร์ (Java Interpreter) ภาพที่ 2-1 แสดงการทำงานของเครื่องจักรสมมติ ซึ่งวิธีนี้โปรแกรมภาษาจาวาจะถูกคอมไพล์ โดยจาวาคอมไพล์เลอร์ (Java Compiler) ได้ เป็นโปรแกรมของ เครื่องจักรสมมติ สามารถนำไปทำงานบนเครื่องใด ๆ ที่มีจาวา อิน เตอร์พรีทเตอร์ (Java Interpreter) ได้จึงมีคุณสมบัติไม่ขึ้นกับระบบ โปรแกรมของ เครื่องจักร สมมติ จะทำงานได้เร็วกว่าการใช้ จาวา อินเตอร์พรีทเตอร์ เพียงอย่างเดียว โดยการคอมไพล์ ถูก แยกออกไปจากการเอ็กซีคิว (Execute) และด้วยการออกแบบคำสั่งของ เครื่องจักรสมมติ ให้ใกล้ เคียงกับคำสั่งของหน่วยประมวลผลทั่วไป จาวา อินเตอร์พรีทเตอร์ จึงเปลี่ยนคำสั่งของเครื่องจักร สมมติ ไปสู่คำสั่งของหน่วยประมลผลที่ใช้งานได้ง่าย การทำการแปลภาษาด้วย อินเตอร์พรีทเตอร์ ของภาษาจาวาจึงทำงานได้เร็วกว่าอินเตอร์พรีทเตอร์ ของภาษาอื่น ๆ ชุดคำสั่งของ เครื่องจักรสมมติ ถูกออกแบบมาเพื่อสนับสนุนการทำงานของการเขียน โปรแกรมเชิงวัตถุจึงมีคำสั่งเกี่ยวกับการสร้างวัตถุ (Object) และการอ้างถึงสมาชิกในวัตถุ ซึ่งไม่มี ในหน่วยประมวลผลทั่วไปภาษาจาวาเป็นภาษาที่เน้นความถูกต้องเกี่ยวกับชนิดข้อมูล (Type) จึงมี คำสั่งสำหรับคำนวณชนิดข้อมูลพื้นฐานแต่ละชนิด Java Program Java Compiler JVM Java Interpreter 7 เครื่องจักรสมมติ ถูกออกแบบให้สามารถจำลองได้บนตัวประมวลผลทั่วไป ซึ่งมีปัญหาเรื่อง ขนาดของหน่วยความจำรีจีสเตอร์ (Register) ที่ไม่เท่ากัน ฉะนั้น เครื่องจักรสมมติ จะทำการ คำนวณทั้งหมดบนหน่วยความจำแบบสเตค (Stacks) 2.1.2 การสร้างโปรแกรมภาษาจาวา จาวา แอปพลิเคชั่น (Java Application) คือ โปรแกรม ที่สร้างขึ้นด้วยภาษาจาวาเพื่อถูกทำงานโดยจาวา อินเตอร์พรีทเตอร์ ต้องเป็นโปรแกรมที่ สมบูรณ์ มี main() เป็นจุดเริ่มต้น และ สามารถควบคุมการดำเนินไปของตัวเองได้ การทำงาน ของภาษาจาวาภายใต้ จาวา อินเตอร์พรีทเตอร์ ทำได้โดยไม่ต้องมีโปรแกรมอื่นช่วย โดยที่ส่วน หัวของโปรแกรม main() ต้องประกอบด้วย ประโยคดังนี้ (วีระศักดิ์, 2543: 17) public static void mani(String args[ ]) ดังตัวอย่างต่อไปนี้ //Hello.java class Hello { public static void main(String args[]) { System.out.println("Hello") ; } } ขั้นตอนการสร้างและทำงาน จาวา แอปพลิเคชั่น จะเริ่มจากใช้ เอดดิเตอร์ เขียนโปรแกรม สำหรับ จาวา แอปพลิเคชั่น และบันทักไฟล์ไว้ มีนามสกุล .java จากนั้นใช้คำสั่ง javac.exe ทำการ คอมไพล์ จะได้ผลลัพธ์เป็นไฟล์นามสกุล .class ซึ่งเมื่อต้องการให้ทำงานก็ส่ง ไฟล์นามสกุล .class ให้กับ java.exe 2.1.3 ภาษาจาวากับการเขียนโปรแกรมเชิงวัตถุ การเขียนโปรแกรมโดยให้มีรูปแบบเป็น ลักษณะเชิงวัตถุ ต้องอาศัยภาษา คอมพิวเตอร์ที่ถูกออกแบบมาให้มีลักษณะพิเศษและเอื้อประโยชน์ สำหรับการเขียนโปรแกรมแบบเชิงวัตถุโดยเฉพาะ ภาษาเชิงวัตถุมีคลาส (Class) เป็นโครงสร้าง หลักของโปรแกรม แต่ละคลาสอาจมีสมาชิกเป็นข้อมูลหรือฟังก์ชัน (Function) โดยที่ฟังก์ชันใน ภาษาเชิงวัตถุ เราจะเรียกว่า เมธทอด (Method) หรือ โอเปอเรชั่น (Operation) คลาสจะถูก กำหนดขึ้นโปรแกรม โดยใช้คำว่า “class” ตามด้วยชื่อคลาส และส่วนของโปรแกรมที่กำหนด สมาชิกของคลาสซึ่งอยู่ระหว่างเครื่องหมาย “{“ กับ “}” ในไฟล์ของภาษาจาวาหนึ่งอาจมีคลาส มากกว่าหนึ่งคลาสได้ แต่เมื่อถูกคอมไพล์แล้วจะได้ ไฟล์นามสกุล .class สำหรับแต่ละคลาสโดยมี ชื่อเหมือนกับคลาสนั้น ๆ ด้วยเหตุว่าเพื่อให้โปรแกรมมีขนาดเล็ก และใช้วิธี ไดนามิค ลิงค์ 8 (Dynamic Linked) คือ คลาสที่ถูกอ้างอิงถึงจะถูกโหลดเข้าสู่ จาวา อินเตอร์พรีทเตอร์ ขณะที่ โปรแกรมทำงาน แม้โปรแกรมจะทำงานช้ากว่าเพราะเสียเวลาโหลดคลาส แต่จะมีเฉพาะคลาสที่ถูก ใช้จริง ๆ เท่านั้นที่ถูกโหลด แต่มีข้อดีที่บางคลาสอาจถูกใช้ร่วมมันโดยโปรแกรมหลาย ๆ โปรแกรม ได้ (วีระศักดิ์, 2543: 22) 2.1.3.1 ไฟล์ และคลาส ก) โครงสร้างของคลาส ทุกโปรแกรมที่สร้างจากภาษาจาวาต้องสามารถ สร้างคลาสให้ได้อย่างน้อยหนึ่งคลาส จึงจะถือว่าเป็นภาษาจาวา และเนื่องจากโปรแกรมตามแนว ความคิดเชิงวัตถุต้องทำงานด้วยวัตถุ และคลาสก็เป็นส่วนเริ่มต้นจองวัตถุโดยมีรูปแบบโครงสร้าง ดังนี้ ข) ข้อมูลในคลาสหรือตัวแปร (Data Member) การเก็บข้อมูลภายในคลา สมีรูปแบบการกำหนดดังนี้ Access_Level final static Data_Type Data_Name 1. Acces_Level คือระดับการเข้าถึงตัวแปรที่กำหนด มีการเข้าถึง 4 รูปแบบ คือ public เป็นระดับการเข้าถึงข้อมูลที่ไม่มีข้อจำกัด private เป็นระดับการเข้าถึงข้อมูลภายในคลาสเท่านั้น protected เป็นระดับการเข้าถึงข้อมูลภายในคลาสหรือวัตถุ และคลาสที่สืบทอดมา แต่ต้องอยู่ใน เพกเกจ(Package)เดียวกัน ถ้าไม่กำหนดเป็นระดับการเข้าถึงข้อมูลภายในคลาสหรือวัตถุใน เพกเกจเดียวกัน 2. final ใช้บอกว่าตัวแปรตัวนั้นเราไม่สามารถเข้าไปทำการเปลี่ยนแปลงค่าด้วยวิธีใดๆ ได้ เป็นการประกาศค่าสุดท้ายของตัวแปรนั้น ๆ และใช้งานตลอดทั้งโปรแกรม 3. static ถ้า กำหนดไว้หน้าตัวแปรใด ตัวแปรนั้นจะถูกโหลดเข้าไปอยู่ในหน่วยความจำพร้อมที่จะใช้งานได้ทันที 2.1.3.2 วัตถุ และการสร้างวัตถุ วัตถุสร้างขึ้นจากขั้นตอนสองขั้นตอน คือขั้นตอนแรก ทำการประกาศชื่อตัวแปรอ้างถึง (Reference Variable) คือขั้นตอนที่ใช้กำหนดชื่อตัวแปรเพื่อใช้ class Class_Name { Data_member Method_member } 9 ในการอ้างถึงไปยังพื้นที่ในหน่วยความจำ โดยพื้นที่ส่วนนี้เป็นส่วนที่จัดเก็บวัตถุที่สร้างขึ้นมาใน ภายหลัง โดยมีรูปแบบการกำหนดดังนี้ Class Name Reference Name ขั้นตอนที่สองการสร้างวัตถุ (Instance of Class) วัตถุจะเป็นพื้นที่ในหน่วยความจำซึ่งสร้าง ตามแบบโครงร่างของคลาสใดๆ ดังนั้นวัตถุจะอ้างถึงพื้นที่ที่สามารถเก็บข้อมูล และประมวลผลซึ่ง มีรูปแบบดังนี้ new Class_Constructor( Parameter_List ) ในภาษาจาวาตัวแปรอ้างถึงและวัตถุมีความสัมพันธ์ซึ่งกันและกัน โดยตัวแปรอ้างถึง ถูกกำหนดขึ้น เพื่อประโยชน์ในการอ้างไปยังตำแหน่งของวัตถุที่อยู่ในหน่วยความจำ โดย ในหน่วยความจำบนเครื่องคอมพิวเตอร์ บางครั้งสามารถสร้างวัตถุได้หลายๆวัตถุของการทำงานแต่ ละครั้ง จึงจำเป็นต้องใช้ชื่อตัวแปรอ้างถึงเพื่อให้สามารถเข้าใช้งานข้อมูลและเมธทอด ในวัตถุได้ 2.2 แนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) โดยทั่วไปแล้วในระบบที่ซับซ้อนจะประกอบด้วยวัตถุจำนวนมากที่ทำงานร่วมกัน และการ สร้างโปรแกรมที่คำนวณผลลัพธ์การทำงานของวัตถุทั้งหมดออกมาโดยตรงจะยากกว่าการสร้าง โปรแกรมที่จำลองการทำงานของแต่ละวัตถุไปที่ละขั้นจนกว่าจะได้คำตอบ แนวคิดในการสร้าง โปรแกรมที่ประกอบขึ้นจากวัตถุเป็นหลักนี้เรียกว่า การเขียนโปรแกรมเชิงวัตถุ ซึ่งโดยแท้จริงแล้ว การเขียนโปรแกรมเชิงวัตถุ ก็คือเทคนิควิธีการเขียนโปรแกรมแบบหนึ่ง(ธวัชชัย, 2545) แนวความคิดแบบใหม่ที่ใช้ในการเขียนโปรแกรมเป็น การเน้นถึงปัญหาและองค์ประกอบ ของปัญหา การเน้นที่ปัญหาและองค์ประกอบการการแก้ปัญหา (Problem Space) จะคล้ายกับการ แก้ไขปัญหาในการดำรงชีวิตประจำวันของมนุษย์ มากกว่าที่จะมองหาวิธีการแก้ปัญหานั้น ๆ หรือ ขั้นตอนในการแก้ปัญหา (Solution Space) ซึ่งเป็นการเขียนโปรแกรมแบบเก่า 2.2.1 การเขียนโปรแกรมเชิงวัตถุหลักการสำคัญสำหรับการออกแบบงานเชิงวัตถุคือ การค้นหาวัตถุ และจำแนกวัตถุนั้น ๆ ออกเป็นส่วนที่มีการเปลี่ยนแปลงและส่วนที่อยู่คงที่ ซึ่งวัตถุที่ ไม่มีการเปลี่ยนแปลงอยู่คงที่ สามารถนำมาใช้ได้เมื่อมีการปรับปรุงระบบงานใหม่ ซึ่งเป็นความจำเป็นที่ต้องมีการออกแบบระบบงานเพื่อให้ทราบถึงส่วนที่มีการเปลี่ยนแปลง และส่วนที่ไม่มีการ เปลี่ยนแปลง แนวคิดการเขียนโปรแกรมเชิงวัตถุ อาลัน เคร์ ซึ่งเป็นผู้บุกเบิกแนวความคิดการเขียน 10 โปรแกรมเชิงวัตถุคนหนึ่ง ได้เสนอกฎ 5 ข้อที่เป็นแนวทางของภาษาคอมพิวเตอร์เชิงวัตถุ ดังนี้ (ธวัชชัย, 2545: 10) 2.2.1.1 ทุก ๆ สิ่งเป็นวัตถุ คือ องค์ประกอบของโปรแกรมคอมพิวเตอร์ทุก ๆ ส่วนจะ ต้องเป็นวัตถุ 2.2.1.2 โปรแกรม คือ กลุ่มของวัตถุที่ส่งข่าวสารบอกซึ่งกันและกันให้ทำงาน โปรแกรม ในความหมายของการเขียนโปรแกรมเชิงวัตถุ ก็คือ กลุ่มของวัตถุที่ส่งข้อความข่าวสาร หรือ เมสเสจ (Message) ถึงกันและกันเพื่อบอกให้วัตถุทำงาน ดั้งนั้นวัตถุจะไม่ทำงานถ้าไม่มีข่าว สาร 2.2.1.3 วัตถุแต่ละวัตถุ จะต้องมีหน่วยความจำและประกอบไปด้วยวัตถุอื่น ๆ วัตถุจะ ต้องมีหน่วยความจำของมันเองซึ่งอาจประกอบขึ้นจากวัตถุอื่นๆ ได้ ซึ่งหมายถึง วัตถุสามารถ ประกอบจากวัตถุอื่น ๆ ได้ ซึ่งเป็น คุณ สมบัติการถ่ายทอดห รือที่เรียกว่า อิน เฮอร์ริ แทนซ์(Inheritance) และคุณสมบัติขององค์ประกอบหรือที่เรียกว่า คอมโพสิชั่น (Composition) 2.2.1.4 วัตถุทุกชนิดจะต้องจัดอยู่ในประเภทใดประเภทหนึ่งวัตถุ ที่สร้างขึ้นจะต้องมี ชนิดหรือประเภท ซึ่งหมายถึง วัตถุทุกชนิดจะต้องสามารถจัดเป็นกลุ่มได้กลุ่มของวัตถุ ก็คือ คลาส นั่นเอง ในการเขียนโปรแกรมเชิงวัตถุจะต้องเขียนคลาสขึ้นมาก่อนแล้วจังสร้างวัตถุภายหลัง ซึ่ง วัตถุจะอยู่ในคลาสใด ๆ โดยที่วัตถุที่เกิดจากคลาสเดียวกันจะมีคุณสมบัติพื้นฐานเหมือนกัน 2.2.1.5 วัตถุที่จัดอยู่ในประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกันการเขียน โปรแกรมเชิงวัตถุมีประสิทธิภาพที่ดีเพราะชนิดของวัตถุมิได้กำหนดอยู่อย่างโดด ๆ แต่สามารถจัด เป็นกลุ่มได้ซึ่งวัตถุในกลุ่มเดียวกันจะได้รับข่าวสารเหมือนกันซึ่งเป็นพื้นฐานของการพ้องรูปหรือ โพลีมอร์ฟิซึม (Polymorphism) 2.2.2 ก ารเก็ บ ข้ อ มู ล ใน โม ดู ล แ ล ะก ารซ่ อ น ข่ าวส าร(Data Encapsulation and Information Hiding) ปัญหาหนึ่งในระบบงานคอมพิวเตอร์คือการแก้ไขข้อมูลในระบบใหญ่ ๆ ที่ มีการใช้ข้อมูลร่วมกัน การแก้ไขปรับปรุงข้อมูลจะไม่ทราบได้ว่าโมดูลใดแก้ไขส่วนข้อมูลใดอย่าง ไร ดังนั้นจึงเกิดแนวคิดที่จะนำข้อมูลให้อยู่ในโมดูลนั่น ๆ ซึ่งก็เป็นการเก็บข้อมูลไว้ภายใน (Data Encapsulation) เพื่อป้องกันการแก้ไขโดยส่วนของโปรแกรมที่ไม่ได้รับอนุญาต ซึ่งจะมีการ กำหนดหน้าที่ส่วนที่ทำหน้าที่แก้ไขข้อมูลโดยเฉพาะให้โมดูลที่ต้องการแก้ไขข้อมูลเรียกใช้ นอก จากข้อมูลแล้วส่วนของโมดูลเองก็อาจถูกเรียกใช้โดยไม่เหมาะสมได้ฉะนั้นการซ่อนส่วนของโมดูล ที่สมควรซ่อนและเปิดเผยส่วนที่ควรเปิดเผย เพื่อป้องกันจึงต้องมีการป้องกันส่วนของโมดูลที่ไม่สม ควรให้ผู้อื่นมาใช้ กลไกนี้เรียกว่าการซ่อนข่าวสาร (Information Hiding) 11 2.2.3 การเชื่อมต่อ (Interface) ในการเขียนโปรแกรมเชิงวัตถุ ในวัตถุจะต้องมีการเชื่อมต่อ เป็นส่วนที่วัตถุนั้น ๆ จะให้บริการหรือเป็นส่วนที่บอกว่าวัตถุนั้น ๆ สามารถทำอะไรได้บ้าง ซึ่งเรียก ว่าเมธทอดซึ่งมีข้อดีคือการเปลี่ยนแปลงที่เกิดขึ้นภายในวัตถุจะไม่กระทบต่ออินเตอร์เฟส (Interface) ดังนั้นภายในวัตถุผู้เขียนคำสั่งสามารถดัดแปลงแก้ไข หรือเพิ่มเติมได้ตลอดเวลา และ ภายในวัตถุสามารถเก็บค่าต่าง ๆ ได้ด้วย ซึ่งถือเป็นจุดเด่นของการเขียนโปรแกรมเชิงวัตถุ เพราะผู้ ใช้สามารถเรียกใช้วัตถุต่าง ๆ โดยไม่จำเป็นต้องทราบกลไกการทำงานภายใน ผู้ใช้สามารถเรียกใช้ วัตถุได้ด้วยการส่งข่าวสาร ไปยังวัตถุที่ต้องการ 2.2.4 วงจรชีวิตของวัตถุ จุดเด่นของการเขียนโปรแกรมเชิงวัตถุที่สำคัญก็คือการทำข้อมูลให้ อยู่ในรูปของ เอ็บสแตค(Abstract) เพื่อนำกลับมาใช้ใหม่ การถ่ายทอดคุณสมบัติ และการ พ้องรูป และการเขียนโปรแกรมเชิงวัตถุจะจัดเก็บข้อมูลไว้ในวัตถุ ดังนั้นวงจรชีวิตของวัตถุจึงเป็น สิ่งสำคัญเพราะหมายถึงข้อมูลด้วย (ธวัชชัย, 2545: 20) ในภาษาจาวา วัตถุจะถูกสร้างในส่วนของหน่วยความจำที่เรียกว่า ฮีป (Heap) เมื่อใช้คำสั่ง นิว (new) เพื่อสร้างวัตถุขึ้นในฮีป และอ้างถึงโดยตำแหน่ง เมื่อต้องการใช้ก็จะอ้างถึงตำแหน่งของ วัตถุ และภาษาจาวายังมีกาเบจคอเล็กเตอร์ (Garbage Collector) เมื่อส่วนของหน่วยความจำเต็ม การเบจคอเล็กเตอร์ จะถูกเรียกใช้งานโดยอัตโนมัติ ซึ่งจะคืนหน่วยความจำที่ไม่ได้ใช้ให้กับ คอมพิวเตอร์โดยการพิจารณาจากการอ้างอิงถึงวัตถุ (Reference) ถ้าวัตถุใดไม่มีการอ้างอิงถึงแสดง ว่าวัตถุนั้นไม่ได้ใช้งานแล้ว ก็จะถูกกาเบจคอเล็กเตอร์ ยกเลิกการใช้งานไปด้วย 2.2.5 การฝังตัวของวัตถุ (Persistence) การฝังตัวของวัตถุ (Persistence) ก่อนที่จะออกจาก โปรแกรมจะมีวิธีการที่จะทำให้คอมพิวเตอร์จัดเก็บข้อมูลล่าสุด เมื่อเข้ามาใช้งานคราวหน้า คอมพิวเตอร์ก็จะสามารถจำข้อมูลครั้งสุดท้ายได้อย่างถูกต้องซึ่ง ในภาษาจาวามีคำสั่ง ซีรีไลเซชั่น (Serialization) ที่จะทำการแปลงวัตถุให้อยู่ในรูปของบิตและไบต์ 2.2.6 คลาสและวัตถุ (Class and Object) คลาสเป็นตัวกำหนดรายละเอียดที่จะสร้างวัตถุ ออกมาใช้แต่โปรแกรมเมอร์ไม่สามารถใช้ประโยชน์จากคลาสได้โดยตรง ในการเขียนโปรแกรม เชิงวัตถุ คลาสจะถูกนิยามโดยข้อมูล และ พฤติกรรม ที่คลาสจะกระทำกับข้อมูลเมื่อคลาสหนึ่ง ๆ ถูกเรียกใช้ คลาสจะสร้างวัตถุขึ้นมาทำงานแทนคลาสที่ถูกเรียกใช้ (ธวัชชัย, 2545: 25) วัตถุคือสิ่งใดๆ ก็ตามซึ่งมีคุณลักษณะ (State) บ่งบอกถึงความเป็นตัวของมันเองในขณะนั้น และสามารถแสดงพฤติกรรม (Behavior) ของตัวเองออกมาได้ไม่ว่าจะเป็นคำว่าวัตถุหรือคำว่า อ็อบเจ็กต์ถือว่าเป็นสิ่งเดียวกันในแนวคิดของภาษาคอมพิวเตอร์เชิงวัตถุ (วีระศักดิ์, 2543: 143) โดยทั่วไปวัตถุใดๆมักจะมีส่วนประกอบที่สำคัญอยู่สองประการ ประการแรกคือคุณ ลักษณะ (State) คือสิ่งที่สามารถบ่งบอกถึงความเป็นวัตถุ และอยู่ภายในตัววัตถุซึ่งสามารถ เปลี่ยน 12 แปลง ได้ เช่น วัตถุรถจักรยานมีคุณลักษณะหลายประการด้วยกัน เช่น สี ความสูง น้ำหนัก เป็นต้น ประการที่สองคือ พฤติกรรม (Behavior) คืออาการที่วัตถุใดๆ แสดงออกมาหรือถูกให้แสดงออก มา เช่น การเคลื่อนที่ของรถจักรยาน โดยพฤติกรรมใดๆ ของวัตถุนั้นจะมีผลเชื่อมโยงไปถึงข้อมูล คุณลักษณะภายในตัววัตถุเองด้วย ในภาษาจาวานั้นคลาสประกอบไปด้วย ชนิดของคลาส, ชื่อของคลาส, ตัวแปรของคลาส และ พฤติกรรม ชนิดของคลาสนั้นอาจจะเป็นพับลิค (Public) หรือ ไพรเวท (Private) ถ้าเป็น พับลิค หมายถึงคลาสที่มองเห็นได้โดยคลาสที่อยู่ภายนอกหรือภายในเพกเกจ แต่ถ้าเป็น ไพรเวท คลาสที่อยู่นอกเพกเกจจะไม่สามารถเรียกใช้คลาสนี้ การอ้างถึงตัวแปรแบบ พับลิค ของอีกวัตถุ หนึ่งสามารถทำได้โดยใช้ชื่อ วัตถุ นั้นแล้วตามด้วยจุดและชื่อตัวแปร แต่ถ้าเป็นการอ้างถึงตัวแปรที่ ถูกประกาศ ไว้ในคลาสก็สามารถอ้างถึงชื่อตัวแปรได้โดยตรง 2.2.6.1 การสร้างคลาส การสร้างคลาสให้ขึ้นต้นด้วยคำว่าคลาส (class) แล้วตามด้วย ชื่อคลาส และตามด้วยข้อความระหว่าง { } ซึ่งเป็นคำสั่งที่บอกว่าคลาสนี้มีลักษณะ ข้อมูลอย่างไร การสร้างวัตถุ การสร้างวัตถุขึ้นมาใหม่นั่นเองโดยมีคำสั่งนิว (New Operator) ก็คือ คำสั่ง ที่ช่วยในการ สร้างวัตถุ ใหม่ขึ้นมานั่นเอง ชื่อคลาสที่ตามหลัง คำสั่งนิว (New Operator) นี้จะเป็น ตัวบ่งชี้ว่าเรากำลัง สร้างวัตถุของคลาสอะไรขึ้นมาและคอนสตัคตอร์ (Constructor) ที่มีเครื่อง หมายกำหนด (Signature) เดียวกับ ตัวแปร ที่อยู่ในวงเล็บหลังชื่อคลาสจะถูกเรียกโดยอัตโนมัติ หลังจากที่วัตถุ ถูกสร้างขึ้น โดย คำสั่งนิว จะคืน ค่า อ้างอิงของวัตถุ ที่เพิ่งถูกสร้างออกมา และถ้า เราไม่เก็บค่านั้นไว้ในตัวแปร เราก็จะไม่มีโอกาสเรียกใช้ วัตถุ ตัวนั้นอีก 2.2.6.3 พฤติกรรม (Method) พฤติกรรม ในภาษาจาวานั้นก็เปรียบได้กับฟังก์ชั่น ในภาษาC นั่นเอง โดยทั่วไปแล้วควรจะ กำหนด ให้ พฤติกรรม ทำอะไรอย่างหนึ่งเท่าที่เราต้องการ การสร้างพฤติกรรม ให้ใหญ่และซับซ้อนมาก ๆ จะทำให้วัตถุประสงค์ของแนวคิดการเขียน โปรแกรมเชิงวัตถุ นั้นถูกบดบังลงได้ องค์ประกอบสำคัญของ พฤติกรรม นั้นมีดังนี้ ก) ชื่อของพฤติกรรม ชื่อของ พฤติกรรม นั้นมีกฎเกณฑ์ในการตั้งเหมือนกับ ชื่อของตัวแปรนั่นเอง หลักการตั้งชื่อ พฤติกรรม นี้มิใช่กฎบังคับ แต่ผู้เขียนโปรแกรมจาวาโดยส่วน มากใช้กันเพื่อทำให้โปรแกรมอ่านง่าย ซึ่งจะตั้งให้เป็นคำกิริยาหลาย ๆ คำซึ่งแสดงถึงหน้าที่ของ พฤติกรรม นั้น ๆ คำแรกจะถูกเขียนด้วยตัว ตัวอักษรตัวเล็ก ทั้งหมดและตัวอักษรตัวแรกของคำถัด ไปแต่ละคำจะเป็นตัว ตัวใหญ่ และที่เหลือจะเป็นตัว ตัวเล็ก เช่น พฤติกรรม getClassSched() ข) อาร์กิวเมนต์ (Argument) อาจจะเป็นตัวแปรพื้นฐานของจาวา หรืออาจ จะเป็นวัตถุ ก็ได้ เราสามารถกำหนดพฤติกรรม ให้รับ อาร์กิวเมนต์ (Argument) ได้ 13 ค) พฤติกรรม (Method) ตัวขอบเขต เป็นตัวกำหนดอย่างแท้จริงว่า พฤติ กรรม นี้ทำหน้าที่อะไร ภายใน ขอบเขตของพฤติกรรม เราสามารถ จะประกาศ ตัวแปรขึ้นมาเพื่อใช้ งานชั่วคราวซึ่ง ช่วงชีวิต ของตัวแปรเหล่านี้จะอยู่ภายใน พฤติกรรม นี้เท่านั้น ภายในขอบเขตของ พฤติกรรม เราสามารถเรียกใช้ พฤติกรรม อื่นของ วัตถุนั้นหรือของวัตถุอื่นที่อยู่ภายใน ขอบเขต ของพฤติกรรม นั้นได้ด้วย ขอบเขตของขอบเขตของพฤติกรรม นั้นจะถูกกำหนดด้วยเครื่องหมาย ปีกกาเปิดและปิดหนึ่งคู่ “{“ “}” ง) การคืนค่า (Return) หลังจาก พฤติกรรม ทำงานจนถึงบรรทัดสุดท้าย แล้วก็จะคืนค่า กลับไปหาส่วนของโปรแกรมที่เรียก หากต้องการให้ พฤติกรรม ส่งค่าคืนไปยังผู้ เรียก ก็สามารถใส่ ประโยคการคืนค่า เข้าไปได้ หลังจากที่ ประโยคการคืนค่า ได้ถูก ทำงาน แล้ว ก็ จะหลุดออกจาก ขอบเขตของพฤติกรรม นั้นทันที โปรแกรมส่วนที่กระทำการเรียก ก็สามารถรับค่า คืนค่า นั้นได้โดยการใส่ ตัวแปรตามด้วยเครื่องหมายเท่ากับไว้ด้านซ้ายของ พฤติกรรมที่เรียก ถ้าไม่ มีค่าที่จะคืนค่าก็ต้องใส่ คำว่า void ไว้ตรงตำแหน่งของชนิด 2.2.7 คอนสทรัคเตอร์ (Constructor) ทุกๆ ครั้งที่วัตถุ ถูกเริ่มทำงาน จะมี พฤติกรรมหนึ่งที่ ถูกเรียกเสมอซึ่ง พฤติกรรม นั้นก็คือ คอนสทรัคเตอร์ เมธทอด (Constructor Method) นั่นเอง โดย คอนสทรัคเตอร์ นั้นจะไม่สามารถถูกเรียกโดยตรงโดยโปรแกรมเมอร์ได้ แต่จะถูกเรียกโดย อัตโนมัติหลังจากที่ วัตถุ ถูกเริ่มทำงาน ขึ้นมา วัตถุประสงค์ที่มี คอนสทรัคเตอร์ ขึ้นมานี้ก็เพื่อให้ผู้ เขียนโปรแกรมเขียนสิ่งที่ต้องทำหลังจากที่ วัตถุถูกสร้างในทันทีโดยที่ไม่ต้องเขียน พฤติกรรม เพื่อ ที่เริ่มทำงาน ต่างหาก และถ้าทำแบบนั้นผู้เขียนโปรแกรมจะต้องเสียเวลาเพิ่มขึ้นในการเรียก พฤติ กรรม ที่ต้องการให้เริ่มทำงาน (วีระศักดิ์, 2543: 147) 2.2.8 ชนิดของตัวแปร ตัวแปร หมายถึง ตัวที่เก็บค่า ๆ หนึ่งซึ่งค่านั้นอาจจะเปลี่ยนแปลงไป ตามสถานการณ์ ในภาษาจาวาตัวแปรอาจจำแนกได้ 2 ประเภท (ธวัชชัย, 2545: 29) 2.2.8.1 ตัวแปรพื้นฐาน (Primitive Data Type) ตัวแปรพื้นฐานมีอยู่ 8 ชนิดคือ Boolean, char, byte, int, short, long, float และ double ตัวแปรประเภทนี้จะถูกออกแบบให้ เก็บข้อมูลไว้ในสแตค ซึ่งทำงานได้รวดเร็วกว่าข้อมูลที่เก็บในฮีป ซึ่งต้องใช้ตัวแปรอ้างอิงถึงวัตถุ แทนการเรียกใช้โดยตรง 2.2.8.2 ตัวแปรแอบสแตค เดต้า ไทป์ (Abstract Data Type) แอบสแตค เดต้า ไทป์ เป็นกรอบของวัตถุ ที่ผู้เขียนโปรแกรม สามารถกำหนดชนิดของข้อมูลขึ้นมาใหม่ได้ตามต้องการ เมื่อต้องการเรียกใช้วัตถุชนิดนี้จะใช้ผ่านตัวแปรที่เรียกว่าตัวแปรอ้างอิง เช่น String f; ซึ่งอธิบายได้ ดังภาพ 14 ภาพที่ 2-2 แสดงการอ้างอิงถึงวัตถุ 2.2.9 การนำคลาสกลับมาใช้งานอีก การนำคลาสกลับมาใช้งานอีกหรือที่เรียกว่าซอฟต์แวร์ รียูส นับเป็นจุดเด่นของการเขียนโปรแกรมเชิงวัตถุซึ่งทำได้ หลายวิธีแต่วิธีที่มีประสิทธิภาพดีคือ การทำ คอมโพสิตชั่น(Composition) และ การสืบทอดคุณสมบัติ (Inheritance) (ธวัชชัย, 2545: 138) 2.2.9.1 คอมโพสิตชั่น (Composition) เป็นการพัฒนาโปรแกรมที่อาศัยองค์ ประกอบเล็ก ๆ ซึ่งอาจถือเป็นหน่วยพื้นฐานนำมาประกอบกันลักษณะเช่นนี้เรียกว่า คอมโพ สิตชั่น ภาพที่ 2-3 แสดงความสัมพันธ์ระหว่างคลาสแบบคอมโพสิต f reference String 15 2.2.9.2 การสืบทอดคุณสมบัติ (Inheritance) การสืบทอดคุณสมบัติจะใช้กับคลาสที่ อยู่ในกลุ่มเดียวกัน มีความสัมพันธ์ ในลักษณะของคลาสแม่ (Super Class) และคลาสลูก (Sub Class) โดย คลาสผู้กำหนดคุณสมบัติเรียกว่า คลาสแม่ และ คลาสที่รับคุณสมบัติเรียกว่า คลาสลูก ภาพที่ 2-4 แสดงการสืบทอดคุณสมบัติ คลาสลูก จะได้รับการถ่ายทอดคุณสมบัติซึ่งก็คือตัวแปรและเมธทอด จากคลาส แม่ทุก ๆ ตัวแปรและเมธทอด และ คลาสลูก อาจเพิ่มเติมตัวแปรและเมธทอด ได้ตามต้องการ ซึ่งมีแนวทาง ในการใช้คุณสมบัติการถ่ายทอดได้ดังนี้ ก) คลาสลูก จะไม่ได้รับการสืบทอดคอนคอนสทรัคเตอร์ ของคลาสแม่ ดั้งนั้นจะต้องเขียน คอนสทรัคเตอร์ หรือใช้ ดีฟอลต์คอนสตรัคเตอร์ (Default Constructor) ข) ตัวแปรหรือเมธทอดที่เป็นไพรเวท จะไม่ได้รับการสืบทอดคุณสมบัติ โดยทั่วไปแล้ว คลาสลูก จะได้รับการสืบทอดคุณสมบัติทุกอย่างซึ่งสามารถเรียกใช้งานได้ทันทีโดย ไม่ต้องมีการเขียนซ้ำ แต่ถ้าเมธทอดใดมีการเขียนซ้ำใน คลาสลูก อีกแสดงว่ามีการปรับปรุงเปลี่ยน แปลงเมธทอดดังกล่าวเรียกว่าการ โอเวอร์ไรดิง (Overriding) นอกจากนี้ยังมีเมธทอด โอเวอร์ โหลดดิ้ง (Overloading) ซึ่งเป็นเมธทอดที่มีชื่อเหมือน แต่สามารถทำงานได้แตกต่างกันโดยอาศัย พารามิเตอร์ (Parameter) ที่ส่งค่าและชนิดของการ คืนค่า เป็นตัวกำหนด 2.2.9.3 คอมโพสิตชัน(Composition) และอากิเกชั่น (Aggregation) ความแตกต่าง จะพิจารณาจากส่วนประกอบต่าง ๆ หากสามารถแยกส่วนประกอบออกโดยไม่มีผลกระทบการ ทำงานของคลาสถ้าแยกส่วนประกอบออกบางส่วนแล้วยังคงทำงานได้ส่วนประกอบนั้นจะกำหนด ให้มีความสัมพันธ์แบบ อากิเกชั่น แต่ถ้าแยกส่วนประกอบออกบางส่วนแล้วไม่สามารถทำงานได้ ก็จะมีความสัมพันธ์แบบ คอมโพสิตชัน 16 2.2.10 การพ้องรูป (Polymorphism) การพ้องรูป (Polymorphism) เป็นคุณสมบัติประการ หนึ่งที่สนับสนุนการนำคลาสกลับมาใช้งานอีก ซึ่งเป็นผลจากการสืบทอดคุณสมบัติ การพ้องรูปมี วัตถุประสงค์คือการแยกส่วนของ อินเตอร์เฟส และอิมพลีเม็นเทชั่น (Implementation) ออกจาก กัน การพ้องรูป ในการเขียนโปรแกรมเชิงวัตถุในปัจจุบันที่เด่นชัดมีอยู่ 2 แบบ (ธวัชชัย, 2545: 173) 2.2.10.1 โอเวอร์โหลดดิ้ง เป็นการพ้องรูปที่มีลักษณะชื่อเมธทอดเดียวกันอาศัยพารา มิเตอร์ เป็นตัวจำแนกความแตกต่าง ซึ่งภายในแต่ละเมธทอดอาจทำงานต่างกัน 2.2.10.2 โอเวอร์ไรดิง เป็นการพ้องรูปที่มีลักษณะของ คลาสแม่ และ คลาสลูก ที่มี เมธทอด ที่มีชื่อและ เหมือนกัน 2.2.11 เอ็บสแตค (Abstract) ส่วนขยาย เอ็บสแตค ที่ไว้หน้าคลาสและเมธทอด เพื่อกำหนด คลาสและเมธทอดนั้น ๆ ให้เป็นเอ็บสแตค เพื่อแยก อินเตอร์เฟส และคำขยายเมธทอด (static, void) ในคลาสแม่ออกจากวิธีการทำงานโดยนำวิธีการทำงานมาไว้ในคลาสลูก ซึ่งการเขียนเอ็บส แตค ที่คลาสจะบังคับให้ผู้ใช้ต้องแยกอินเตอร์เฟส (Interface) และการทำงานออกจากกันอย่างเต็ม รูปแบบ โดยสรุปแล้ว เอ็บสแตคคลาส (Abstract Class) คือคลาสที่มีเมธทอดใดเมธทอดหนึ่งเป็น เอ็บสแตค และ เอ็บสแตคเมธทอด (Abstract Method) คือเมธทอดที่ไม่ระบุการทำงานใด ๆ รอ ให้คลาสลูกทำการ โอเวอร์ไรดิง เมธทอดนั้นและ วัตถุประสงค์ของ เอ็บสแตค เพื่อให้คลาสแม่ เป็นผู้กำหนดอินเตอร์เฟส และให้คลาสลูกกำหนดวิธีการทำงาน 2.3 ยูเอ็มแอล (Unified Modeling Language หรือ UML) ยูเอ็มแอล (UML) เป็นภาพสัญลักษณ์ สำหรับการวาดแผนผังของการพัฒนาซอฟต์แวร์ สามารถใช้วาดแผนผังเพื่ออธิบายขอบเขตของปัญหา หรือเพื่อช่วยออกแบบซอฟต์แวร์ เป็นมาตร ฐานสากลที่ใช้ในการอธิบายซอฟท์แวร์ในรูปของไดอะแกรม (Diagram) ตัวมาตรฐาน ยูเอ็มแอล กำหนดโดยโอเอ็มจี (OMG หรือ Object Management Group) ซึ่งภาพสัญลักษณ์ ยูเอ็มแอล มีพื้นฐานพัฒนามาจาก ภาพสัญลักษณ์ของโอเอ็มที (OMT), บูช (Boosh) และ จาค๊อบสัน (Jacobson) การวิเคราะห์และออกแบบระบบเชิงวัตถุนั้นเป็นวิธีที่นิยมกันมาในปัจจุบันและมีแนวโน้มที่ จะแทนที่การออกแบบระบบแบบเดิม กระบวนการพัฒนาระบบตามแบบวิธี เรชั่นแน็ล ยูนิไฟ โพรเซส (Rational Unified Process) เป็นกระบวนที่ครอบคลุมกระบวนการพัฒนาระบบ ทั้งหมด โดยมองเป็นกระบวนการในภาพรวมโดยการพิจารณาทั้งงานด้านการบริหารและงานด้าน เทคนิค กระบวนการพัฒนาจะมีลักษณะการทำซ้ำ (Iterative) และการเพิ่มขึ้น (Incremental) ดัง นั้นงานที่ทำจะไม่มีมากในคราวเดียวในตอนสุดท้ายของโพรเจ็กต์ (Project) แต่จะมีการแบ่งงาน 17 ออกเป็นช่วง ๆ (Phase) ในช่วงของการสร้างระบบ (Construction Phase) การทดสอบและการ รวบรวมส่วนย่อยเข้ากับระบบรวม จะมีการทำซ้ำหลาย ๆ ครั้ง เพื่อจะให้ได้โปรแกรมที่มีคุณภาพ และตรงตามความต้องการ ในการทำซ้ำแต่ละรอบ จะประกอบด้วย การวิเคราะห์ (Analysis) การออกแบบ (Design) การอิมพลีเมนต์ (Implement) และการทดสอบ (Testing) ช่วงของการ พัฒนาระบบ จะช่วยให้เห็นภาพรวมของระบบ และสนับสนุนการทำงานแบบคอมโพเน็นต์ เบส (Component Based) 2.3.1 ส่วนประกอบของ ยูเอ็มแอล (UML) ประกอบด้วยส่วนต่าง ๆ ดังนี้ ระบบงานทั้งหมด อาจมีหลายส่วนที่ต้องพิจารณา เพราะอาจมีขอบข่ายงานที่กว้างและซับซ้อนการอธิบายกระบวน การทำงานต่าง ๆ ของระบบไม่สามารถอธิบายได้เพียงแค่มุมมองเดียว (View) ดังนั้น การมอง ระบบควรจะต้องมีมุมมองต่าง ๆ กัน เช่น มุมมองด้าน ฟังก์ชันแน็ล (Functional), น็อน ฟังก์ชันแน็ล (Non Functional), มุมมองขององค์กร เป็นต้น ซึ่งแต่ละ ไดอะแกรม (Diagram) สามารถที่จะมีมุมมองได้มากกว่าหนึ่งมุมมองก็เพื่อมาอธิบายภาพรวมของระบบ โดยอาจเป็นมุม มองของผู้ใช้ระบบ ผู้เขียนโปรแกรมพัฒนาระบบ ซึ่งแต่ละมุมมองทำให้ผู้ทำเข้าใจระบบในแง่มุมที่ ต่าง ๆ กัน มุมมอง (View) ต่าง ๆ ของ ยูเอ็มแอล มีดังนี้ 2.3.1.1 ยูสเคสวิว(Use Case View) เป็นการมองระบบจากผู้ใช้ภายนอก หรือผู้ใช้ ระบบ ซึ่งไดอะแกรมที่ใช้อธิบาย คือ ยูสเคสไดอะแกรม (Use-Case Diagram) ตัวอย่างผู้ใช้ระบบ ภายนอก เช่น ลูกค้า, ผู้ออกแบบ, ผู้ทดสอบระบบ, นักเรียน, อาจารย์ เป็นต้นยูสเคส (Use Case) ใน ยูสเคสไดอะแกรม เป็นการทำงานของระบบที่ผู้ใช้ต้องการ ซึ่งได้มาจากการสำรวจความ ต้องการของผู้ใช้ ยูสเคสไดอะแกรม เป็นตัวกำหนดเป้าหมายของระบบ จึงเป็นส่วนกลางของ มุม มอง อื่น ๆ ที่จะต้องมีการทำงานต่าง ๆ ครบตามที่กำหนดไว้ใน ยูสเคสไดอะแกรม 2.3.1.2 ลอจิคัลวิว (Logical View) ใช้อธิบายว่าสามารถที่จะจัดการทำงานของ ระบบให้เป็นไปตามที่ต้องการได้อย่างไรและมีบริการอะไรให้กับผู้ใช้บ้าง ลอจิคัลวิว ต่างจาก ยูสเคส วิว เนื่องจากเป็นมุมมองของผู้ออกแบบและพัฒนาระบบ โดยจะแสดงในรูปแบบของโครง สร้างแบบสแตติก (Static) เช่น คลาส, อ็อบเจ็กต์, ความสัมพันธ์ระหว่างการทำงานร่วมกันแบบได นามิก คอลาโบเรชัน (Dynamic Collaboration) ซึ่งเกิดเมื่ออ็อบเจ็กต์ ส่งแมสเสจ ระหว่างการ ทำงาน โครงสร้างแบบสแตติก (Static) จะอธิบายโดยใช้ คลาสไดอะแกรม (Class Diagram) และ อ็อบเจ็กต์ไดอะแกรม (Object Diagram) ส่วนการทำงานร่วมกันแบบไดนามิกจะอธิบายโดยใช้ สเตทไดอะแกรม (State Diagram) ซีเควนซ์ไดอะแกรม (Sequence Diagram) คอลาโบเรชันได อะแกรม (Collaboration Diagram) และแอคติวิตี้ไดอะแกรม (Activity Diagram) 18 2.3.1.3 คอมโพเนนต์วิว (Component View) บอกถึงการสร้างและความขึ้นต่อกัน ของโมดูลซึ่งเป็นส่วนที่ผู้พัฒนาระบบต้องคำนึงถึง ว่าในแต่ละคอมโพเนนต์ประกอบด้วยโครง สร้างและความขึ้นต่อกันตลอดจนข้อมูลต่าง ๆ เช่นความต้องการทรัพยากรของคอมโพเนนต์นั้น มี อะไรบ้าง โดยใช้คอมโพเนนต์ไดอะแกรม (Component Diagram) ในการอธิบาย 2.3.1.4 ดีพลอยเมนต์วิว (Deployment View) เป็นการแสดงการจัดระบบในระดับ กายภาพ (Physical) ให้เหมาะสม เช่นการเชื่อมต่อระหว่างคอมพิวเตอร์และโหนดต่าง ๆ และรวม ถึงการแมป (Map) คอมโพเนนต์ (Component) ต่าง ๆ ในระดับโครงสร้างทางกายภาพ เช่น ลำดับการของหรือโปรแกรมในแต่ละเครื่องคอมพิวเตอร์ ใช้สำหรับผู้พัฒนาระบบ ผู้ร่วมพัฒนา ระบบ ผู้ทดสอบระบบอธิบายโดยดีพลอยเมนต์ ไดอะแกรม (Deployment Diagram) 2.3.1.5 โปรเซสวิว(Process View) ไดอะแกรม (Diagram) เป็นกราฟซึ่งแสดงโดย สัญลักษณ์ที่จัดเรียงขึ้นเพื่อใช้อธิบายระบบในมุมมองต่าง ๆ ในระบบหนึ่ง ๆ จะประกอบไปด้วย หลาย ๆ ไดอะแกรม แต่ละไดอะแกรม ยังสามารถมองในหลาย ๆ มุมมองด้วย 2.3.2 ใน ยูเอ็มแอล จะมีไดอะแกรม ต่าง ๆ ดังนี้ 2.3.2.1 ยูสเคสไดอะแกรม (Use Case Diagram) ส่วนประกอบสำคัญในยูสเคสได อะแกรม คือ ยูสเคส (Use Case) แอ๊กเตอร์ (Actor) และเส้นแสดงความสัมพันธ์ (Relationship) ในการสร้าง ยูสเคสไดอะแกรม สิ่งที่สำคัญ คือ การค้นหาว่าระบบทำอะไรได้บ้าง โดยไม่สนว่าข้าง ในสิ่งที่ระบบต้องทำได้เหล่านั้นมีกลไกการทำงานอย่างไรหรือใช้เทคนิคการสร้างอย่างไรเปรียบ เสมือนเป็น “กล่องดำ” (Black Box) โดยยูสเคสไดอะแกรม จะแสดงความสัมพันธ์ระหว่างผู้ใช้ งาน กับระบบ ซึ่งจะมีผู้กระทำจากภายนอกระบบ เรียกว่า แอ๊กเตอร์ กระทำกับระบบ โดยติดต่อ ผ่าน ยูสเคส ต่าง ๆ ที่เกี่ยวข้อง และจะใช้ในการสื่อสารกับผู้ใช้ เพื่ออธิบายถึงฟังก์ชันการทำงาน หลักของระบบ ใน ยูสเคสไดอะแกรม ก็คือการทำงานต่างๆ ที่ผู้ใช้ต้องการ ซึ่งจะได้มาจากการสอบ ถามจากผู้ใช้ ยูสเคส (Use Case) เป็น ความสามารถหรือฟังก์ชัน (Function) ที่ระบบซอฟต์แวร์จะต้อง ทำได้ เช่น ค้นหาข้อมูลของนักศึกษา สรุปคุณสมบัติของยูสเคสคือ ยูสเคส จะต้องถูกกระทำโดย แอ็กเตอร์ และเป็นผู้ติดต่อกับระบบตามยูสเคส ที่กำหนดไว้ และยูสเคส รับข้อมูลจากแอ็กเตอร์ และส่งข้อมูลให้แอ็กเตอร์ นั่นคือแอ็กเตอร์ กระทำกับยูสเคส โดยการส่งข้อมูลเข้าสู่ระบบตาม ยูสเคส หรือรอรับค่าที่ระบบจะส่งกลับให้ ยูสเคส ถือว่าเป็นการรวบรวมคุณลักษณะความต้องการในระบบอย่างสมบูรณ์ เปรียบเสมือน เป็นการสรุปความต้องการของผู้ใช้ ออกเป็นข้อ ๆ อย่างครบถ้วน 19 แอ็กเตอร์ (Actor) คือ ผู้ที่กระทำกับยูสเคส หรือใช้งานยูสเคส นั้น ๆ เช่น นักศึกษา อาจารย์ เจ้าหน้าที่ไม่ใช่ส่วนประกอบของระบบ แต่เป็นส่วนที่ใช้ติดต่อกับระบบ ซึ่งอาจเป็นเพียงการป้อน ข้อมูลเข้าสู่ระบบ หรือการส่งข้อมูลออกจากระบบ หรืออาจเป็นทั้งสองอย่าง แอ็กเตอร์ ในระบบแบ่งได้เป็น 2 ประเภทโดยประเภทแรกคือ แอ๊กเตอร์หลัก หมายถึง แอ็กเตอร์ ที่มีความสำคัญโดยตรงต่อความสามารถหลักของระบบซึ่งถูกแสดงด้วยยูสเคส ผู้ใช้งาน ระบบจะให้ความสำคัญกับงานที่แอ๊กเตอร์หลักจะต้องกระทำมากที่สุด ส่วนประเภทที่สองคือ แอ๊กเตอร์รอง หมายถึงแอ็กเตอร์ ที่มีหน้าที่ความสำคัญรองลงไปจากแอ็กเตอร์หลัก ความสัมพันธ์ระหว่างยูสเคส มีอยู่ 2 ชนิดแตกต่างกันออกไปได้แก่ ความสัมพันธ์แบบขยาย (Extend Relationship) ยูสเคส หนึ่งอาจถูกช่วยเหลือโดยการทำงานยูสเคสอื่น สัญลักษณ์ในยูเอ็ม แอล คือลูกศรเส้นประที่ชี้จากยูสเคสแรกไปยังยูสเคส ที่ถูกช่วยเหลือหรือถูกขยาย โดยมีคำว่า “extend” อยู่ในเครื่องหมายสเตริโอไทป์ (Stereotype) <
ศึกษาและโหลดฟรีเป็นตัวอย่างเกี่ยวกับงานวิจัย all free download research
วันเสาร์ที่ 18 เมษายน พ.ศ. 2552
การส่งเสริมการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ
บทที่ 1 บทนำ 1.1 ความเป็นมาและความสำคัญของปัญหา แนวความคิดในการเขียนโปรแกรมชิงวัตถุ (Object-Oriented Programming) เป็นการ เขียนโปรแกรมเป็นส่วนๆ และนำส่วนต่างๆ มาเชื่อมต่อกันแต่ละส่วนอธิบายได้ในเชิงวัตถุ ซึ่ง ประกอบไปด้วยกลุ่มข้อมูล (Attribute) และ พฤติกรรม (Behavior) และจากการพิจารณาทุกสิ่ง ทุกอย่างเป็นวัตถุ ซึ่งเป็นหลักการที่จะใกล้เคียงกับธรรมชาติของมนุษย์มาก จากแนวคิดดังกล่าวมี ผลให้เกิดการทำงานที่รวดเร็ว สามารถนำซอฟต์แวร์กลับมาใช้ใหม่ได้ หรือที่เรียกว่า ซอฟต์แวร์ รียูส (Software Reuse) การเปลี่ยนแปลงแก้ไขทำได้ง่าย มีผลิตผลและความน่าเชื่อถือ สูง และสามารถจะป้องกันการเกิดปัญหาวิกฤตซอฟต์แวร์ที่ประกอบไปด้วยปัญหาความซับซ้อน ของซอฟต์แวร์ ปัญหาการควบคุมเวลาและค่าใช้จ่ายในการพัฒนาซอฟต์แวร์ ปัญหาคุณภาพของ ซอฟต์แวร์ไม่ได้ตามที่ต้องการ จากแนวความคิดในการแก้ปัญหาของการเขียนโปรแกรมเชิงวัตถุที่พิจารณาถึงองค์ประกอบ ปัญหาและองค์ประกอบของปัญหา (Problem Space) ซึ่งแตกต่างจากแนวคิดในการแก้ปัญหาของ การเขียนโปรแกรมแบบเก่าที่ค้นหาวิธีการแก้ปัญหา (Solution Space) ผู้พัฒนาซอฟต์แวร์ที่ขาด ความรู้ความเข้าใจในแนวคิดการแก้ปัญหาแบบใหม่ และขาดทักษะ ความชำนาญในการพัฒนา ซอฟต์แวร์เชิงวัตถุ จะทำให้การพัฒนาซอฟต์แวร์มีผลิตผลและความน่าเชื่อถือต่ำ ผู้พัฒนาซอฟต์แวร์และผู้ที่สนใจเรียนรู้ ควรศึกษาทำความเข้าใจในแนวคิดการแก้ปัญหาของ การเขียนโปรแกรมเชิงวัตถุ และฝึกฝน พัฒนาทักษะและความชำนาญในการเขียนโปรแกรมเชิง วัตถุเพื่อสามารถพัฒนาซอฟต์แวร์ที่มีผลิตผลและความน่าเชื่อถือต่อไปได้ โดยควรมีสื่อที่น่าสนใจ นำเสนอข้อมูลและให้ผู้ใช้ได้ฝึกฝน สร้างทักษะและความชำนาญในการเขียนโปรแกรมเชิงวัตถุ เกมนักรบจะมีส่วนที่ให้ผู้ใช้ได้เล่นเกมซึ่งเป็นส่วนที่ดึงดูดความสนใจจากผู้ใช้ และมีส่วนที่ ให้ผู้ใช้ได้มีโอกาสฝึกเขียนโปรแกรมเพื่อสร้างหรือปรับปรุงโรบ็อทซึ่งเป็นส่วนที่ช่วยสร้างทักษะ และความชำนาญในการเขียนโปรแกรมเชิงวัตถุ และยังมีส่วนนำเสนอข้อมูลที่เป็นแนวคิดในการ เขียนโปรแกรมเชิงวัตถุซึ่งจะช่วยให้ผู้ใช้เข้าใจแนวคิดในการแก้ปัญหาของการเขียนโปรแกรมเชิง วัตถุด้วย 2 1.2 วัตถุประสงค์ 1.2.1 เพื่อพัฒนาเกมนักรบ ที่ให้ผู้เล่นได้ควบคุมโรบ็อทโดยการเขียนโปรแกรมเชิงวัตถุด้วย ภาษาจาวา และให้มีส่วนของการนำเสนอความรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ ที่มีประสิทธิ ภาพในการทำงานดี 1.2.2 เพื่อหาประสิทธิภาพของเกมนักรบที่ได้พัฒนาขึ้น 1.3 สมมติฐานการวิจัย 1.3.1 เกมที่พัฒนาขึ้นได้รับการประเมินประสิทธิภาพในระดับดีขึ้นไป 1.4 ขอบเขตการวิจัย ระบบที่พัฒนาในสารนิพนธ์นี้มีขอบเขตดังนี้ 1.4.1 เป็นการพัฒนาด้วยภาษาจาวา รุ่นมาตรฐานที่ทำงานบนเครื่องคอมพิวเตอร์ทั่วไป 1.4.2 เป็นการพัฒนาภายใต้แนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.4.3 เกมแบ่งเป็น 2 ส่วนหลัก ๆ ดังนี้ 1.4.2.1 ให้ผู้เล่นเลือกโรบ็อทมาจัดสร้างเป็นทีมและเลือกทีมที่จัดไว้แล้วมาเล่น 1.4.2.2 ให้ผู้เล่นสามารถสร้างหรือปรับปรุงโรบ็อท ด้วยการเขียนโปรแกรมโดย ใช้แนวคิดการเขียนโปรแกรมเชิงวัตถุด้วยภาษาจาวา เพื่อควบคุมโรบ็อท 1.4.4 ในส่วนของการสร้างหรือปรับปรุงโรบ็อทนี้จะมีส่วนนำเสนอความรู้แนวคิดการเขียน โปรแกรมเชิงวัตถุ ที่สอดคล้องกับคำที่เขียนโปรแกรมลงไป โดยข้อมูลที่นำเสนอประกอบไปด้วย 1.4.3.1 ข้อความอธิบายความหมายของคำที่สอดคล้องกับคำเฉพาะของแนวคิดการเขียน โปรแกรมเชิงวัตถุ 1.4.3.2 ตัวอย่างโปรแกรมที่เกี่ยวข้องกับคำที่สอดคล้องกับคำเฉพาะของแนวคิดการเขียน โปรแกรมเชิงวัตถุ 1.4.3.3 ภาพสัญลักษณ์ยูเอ็มแอลที่เกี่ยวข้องกับคำที่สอดคล้องกับคำเฉพาะของแนวคิดการ เขียนโปรแกรมเชิงวัตถุ 1.5 ข้อตกลงเบื้องต้น 1.5.1 พัฒนาเกมโดยใช้ภาษาจาวา และแนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.5.2 พัฒนาเกมโดยใช้ระบบปฏิบัติการ Microsoft Windows 3 1.6 นิยามศัพท์ 1.6.1 โรบ็อท (Robot) หมายถึง วัตถุหรือ สิ่งต่าง ๆ ที่ถูกกำหนดให้อยู่ในทีมใดๆ และอยู่ใน ชนิดใดชนิดหนึ่ง ซึ่งสามารถนำไปใช้ร่วมกันในการต่อสู้ โดยโรบ็อท จะมีข้อมูลและพฤติกรรม เฉพาะตัว 1.6.2 ทีม หมายถึง กลุ่มของโรบ็อท ที่มีสถานะความเป็นกลุ่มเดียวกันจะไม่ทำลายกันเอง 1.6.3 ประสิทธิภาพ หมายถึง ผลจากการประเมินโดยกลุ่มผู้เล่นเกม ด้วยแบบประเมินที่ผู้วิจัย สร้างขึ้น 1.7 ประโยชน์ที่คาดว่าจะได้รับ 1.7.1 ผู้เล่นมีความรู้ ทักษะความชำนาญ และความเข้าใจที่ถูกต้องในแนวคิดการเขียน โปรแกรมเชิงวัตถุ ด้วยภาษาจาวา เพิ่มขึ้น 1.7.2 สร้างแรงจูงใจ และลดระยะเวลาในการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ 1.7.3 เป็นการสนับสนุน เผยแพร่การศึกษาและการนำไปใช้ของแนวคิดการเขียนโปรแกรม เชิงวัตถุ บทที่ 2 ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง การพัฒนาเกมนักรบเพื่อส่งเสริมการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุ ผู้พัฒนาได้ทำการศึกษา ทฤษฎีและเทคโนโลยีต่าง ๆ ที่เกี่ยวข้องกับการพัฒนา ที่สามารถนำมาประยุกต์ใช้กับงาน ได้ โดยแบ่งออกเป็นหัวข้อต่าง ๆ ดังต่อไปนี้ คือ 2.1 ภาษาจาวา 2.2 แนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) 2.3 ยูเอ็มแอล (Unified Modeling Language หรือ UML ) 2.4 วิศวกรรมซอฟต์แวร์เชิงวัตถุ (Object Oriented Software Engineering) 2.1 ภาษาจาวา (Java) 2.1.1 พื้นฐานภาษาจาวา ภาษา จาวา ถูกพัฒนาขึ้นโดยบริษัท ซันไมโครซิสเต็ม (Sun Microsystems) โดยมี ประกาศให้เป็นภาษาสำหรับสร้างโปรแกรมเพื่อใช้งานบนอินเทอร์เน็ตมีจุดเด่นที่เมื่อสร้างขึ้นบน เครื่องคอมพิวเตอร์เครื่องหนึ่งแล้ว สามารถ นำไปทำงานบนเครื่องคอมพิวเตอร์ต่างระบบได้ โดย ไม่ต้องคอมไพล์โปรแกรมใหม่ ภาษาจาวาถูกออกแบบให้มีลักษณะดังต่อไปนี้ (วีระศักดิ์, 2543: 1) 2.1.1.1 เป็นภาษาที่ง่าย ในการเรียนรู้และใช้งานในแง่ต่าง ๆ ดังนี้ ก) ภาษา จาวา นำไวยากรณ์ภาษาส่วนใหญ่มาจากภาษา C และ C++ ฉะนั้นผู้ที่คุ้นเคยกับภาษา C หรือ C++ อยู่ก่อนแล้ว จะเข้าใจภาษาจาวา ได้ง่ายใช้เวลาศึกษาไม่นาน ข) ภาษา จาวา มีกลไกของภาษาจำนวนไม่มากและไม่ซับซ้อน โดยตัดกล ไกของภาษา C และ C++ ที่ยุ่งยากออกไป อีกทั้ง ภาษา จาวา ถูกออกแบบให้เป็นภาษาเชิงวัตถุอย่าง รอบคอบกว่าภาษา C และ C++ ซึ่งกลไกที่ซับซ้อนและไม่ชัดเจน ง่ายต่อการเกิดความผิดพลาด จะ ถูกตัดออกไป เช่น มัลติเพิลอินเฮอร์ริแทนซ์ (Multiple Inheritance) 5 ค. ภาษาจาวา จะทำการตรวจสอบเกี่ยวกับ ชนิดข้อมูล เพื่อช่วยให้โปรแกรม ทำงานโดยไม่มีความผิดพลาดเกี่ยวกับชนิดข้อมูล ซึ่งภาษาจาวา ได้สร้างกฎเกณฑ์เกี่ยวกับการ เปลี่ยนแปลงชนิดข้อมูลโดยอัตโนมัติซึ่งช่วยเปลี่ยนแปลงชนิดข้อมูลที่แตกต่างกัน ช่วยให้การเขียน โปรแกรมทำได้ง่ายขึ้น 2.1.1.2 โปรแกรมที่สร้างด้วยภาษาจาวา จะไม่มีความผิดพลาดจากข้อบกพร่องของ ภาษา หมายถึง โปรแกรมจะต้องไม่ล้มเหลวลง ด้วยความผิดปกติเล็กน้อยที่ไม่เกี่ยวกับตรรกะของ โปรแกรมซึ่งทำให้ภาษาจาวา มีความแข็งแกร่งคงทน (Robust) ด้วยวิธีการดังนี้ ก) ภาษาจาวาเน้นการใช้กลไกการดักจับข้อผิดพลาด (Exception Handling) เพื่อให้โปรแกรมสามารถจัดการกับความผิดปกติบางอย่างที่เกิดขึ้นในขณะที่โปรแกรม ทำงาน ช่วยให้โปรแกรมสามารถทำงานต่อไปได้โดยไม่ต้องหยุดการทำงานลง ข) ภาษาจาวา ตัดกลไกบางอย่างของ ภาษา C และ C++ ที่อาจก่อให้เกิดข้อ ผิดพลาดโดยไม่ระวังได้เช่นการตัดการอ้างถึงที่อยู่ (Address) ของ ตัวแปร และการใช้ ตัวชี้ (Pointer) สำหรับอ่านหรือเขียนข้อมูลลงหน่วยความจำโดยตรง ค) ภาษาจาวาไม่มีกลไกสำหรับคืนหน่วยความจำที่ขอมาขณะโปรแกรม ทำงานแต่ ภาษาจาวา อาศัยการทำงานของตัวกำจัดขยะ (Automatic Garbage Collector) ทำหน้าที่เก็บหน่วยความจำที่ไม่สามารถอ้างถึงได้แล้ว กลับมาใช้งานใหม่ ง) ภาษาจาวา เป็นภาษาที่เน้นความถูกต้องของชนิดข้อมูลที่ใช้ในโปรแกรม คอมไพเลอร์ของภาษาจาวา จะทำการตรวจสอบว่าโปรแกรมจัดการกับชนิดข้อมูลถูกต้องหรือไม่ซึ่ง ความผิดพลาดที่เกี่ยวกับชนิดข้อมูลจะ ถูกปฏิเสธตั่งแต่การคอมไพล์ ฉะนั้นความผิดพลาดชนิดนี้ จะไม่ข้ามไปเกิดขึ้นขณะที่โปรแกรมทำงาน 2.1.1.3 ภาษาจาวา มักจะถูกส่งผ่านระบบเครือข่ายไปทำงานบนเครื่องคอมพิวเตอร์ ของผู้อื่นซึ่งผู้รับจะต้องมั่นใจได้ว่าสิ่งที่รับมาจะไม่ก่อให้เกิดความเสียหายใด ๆ ต่อระบบนั้น ๆ โดย ภาษาจาวา ถือว่าเป็นภาษาที่มีความปลอดภัยสูง ซึ่งถูกออกแบบมาเพื่อความปลอดภัยมากกว่าภาษา อื่นโดยแบ่งการป้องกันออกเป็นหลายระดับดังนี้ ก) จาการที่ภาษาจาวา ไม่ยอมให้อ้างถึงค่าในหน่วยความจำผ่านทาง ตัวชี้ตำแหน่งที่อยู่ และจะทำการตรวจสอบว่าการอ้างถึงสมาชิกใน อะเรย์ (Array) อยู่ในขอบเขต หรือไม่ โปรแกรมจึงไม่สามารถเขียนหรืออ่านค่าในหน่วยความจำที่ไม่มีสิทธิ์จะอ้างถึง การเปลี่ยน แปลงโปรแกรม หรือค่าในหน่วยความจำ เพื่อสร้างโปรแกรมที่ไม่ปลอดภัยด้วยวิธีนี้จะไม่เกิดขึ้น ข) ตัวแปลภาษาจาวา มี การตรวจสอบไบต์โค้ด (Byte Code) ทำหน้าที่ ตรวจสอบโปรแกรมที่จะถูกทำงานว่ามีคำสั่งผิดปกติหรือมีการทำงานที่ไม่สมควรหรือไม่ 6 ค) ภาษาจาวา มีระบบรักษาความปลอดภัยที่เรียกว่า แซ็นด์บอกซ์โมเดล (Sandbox Model) คือโปรแกรมที่ถูกนำมาจากเครื่องอื่นผ่านเครือข่ายจะถือว่าเป็นโปรแกรมที่ไม่ น่าไว้ใจจะถูกเก็บอยู่ในภาวะที่เรียกว่า แซ็นด์บอกซ์ (Sandbox) ซึ่งมีข้อจำกัดหลาอย่างเช่น ไม่สามารถอ่าน หรือเขียนไฟล์ได้ 2.1.1.4 จุดมุ่งหมายสำคัญของการออกแบบภาษาจาวาคือโปรแกรมต้องสามารถ ทำงานบนเครื่องต่างระบบกันได้เป็นคุณสมบัติของการไม่ขึ้นกับระบบ (Platform Independent) ซึ่งภาษาจาวา ใช้วิธีการแปลภาษาทั้งแบบคอมไพล์ และแบบ อินเตอร์พรีท (Interpret) (วีระศักดิ์, 2543: 6) ภาษาจาวา นำแนวความคิดการสร้างเครื่องจักรสมมติ (Java Virtual Machine) มาใช้ เพื่อ ให้โปรแกรมไม่ขึ้นกับระบบโดยคอมไพเลอร์ (Compiler) ทำการแปลภาษาให้เป็นโปรแกรมของ เครื่องจักรสมมติ แล้วนำโปรแกรมนั้นมาทำงานด้วยเครื่องจักรสมมติที่จำลองขึ้นด้วย จาวา อิน เตอร์พรีทเตอร์ (Java Interpreter) ภาพที่ 2-1 แสดงการทำงานของเครื่องจักรสมมติ ซึ่งวิธีนี้โปรแกรมภาษาจาวาจะถูกคอมไพล์ โดยจาวาคอมไพล์เลอร์ (Java Compiler) ได้ เป็นโปรแกรมของ เครื่องจักรสมมติ สามารถนำไปทำงานบนเครื่องใด ๆ ที่มีจาวา อิน เตอร์พรีทเตอร์ (Java Interpreter) ได้จึงมีคุณสมบัติไม่ขึ้นกับระบบ โปรแกรมของ เครื่องจักร สมมติ จะทำงานได้เร็วกว่าการใช้ จาวา อินเตอร์พรีทเตอร์ เพียงอย่างเดียว โดยการคอมไพล์ ถูก แยกออกไปจากการเอ็กซีคิว (Execute) และด้วยการออกแบบคำสั่งของ เครื่องจักรสมมติ ให้ใกล้ เคียงกับคำสั่งของหน่วยประมวลผลทั่วไป จาวา อินเตอร์พรีทเตอร์ จึงเปลี่ยนคำสั่งของเครื่องจักร สมมติ ไปสู่คำสั่งของหน่วยประมลผลที่ใช้งานได้ง่าย การทำการแปลภาษาด้วย อินเตอร์พรีทเตอร์ ของภาษาจาวาจึงทำงานได้เร็วกว่าอินเตอร์พรีทเตอร์ ของภาษาอื่น ๆ ชุดคำสั่งของ เครื่องจักรสมมติ ถูกออกแบบมาเพื่อสนับสนุนการทำงานของการเขียน โปรแกรมเชิงวัตถุจึงมีคำสั่งเกี่ยวกับการสร้างวัตถุ (Object) และการอ้างถึงสมาชิกในวัตถุ ซึ่งไม่มี ในหน่วยประมวลผลทั่วไปภาษาจาวาเป็นภาษาที่เน้นความถูกต้องเกี่ยวกับชนิดข้อมูล (Type) จึงมี คำสั่งสำหรับคำนวณชนิดข้อมูลพื้นฐานแต่ละชนิด Java Program Java Compiler JVM Java Interpreter 7 เครื่องจักรสมมติ ถูกออกแบบให้สามารถจำลองได้บนตัวประมวลผลทั่วไป ซึ่งมีปัญหาเรื่อง ขนาดของหน่วยความจำรีจีสเตอร์ (Register) ที่ไม่เท่ากัน ฉะนั้น เครื่องจักรสมมติ จะทำการ คำนวณทั้งหมดบนหน่วยความจำแบบสเตค (Stacks) 2.1.2 การสร้างโปรแกรมภาษาจาวา จาวา แอปพลิเคชั่น (Java Application) คือ โปรแกรม ที่สร้างขึ้นด้วยภาษาจาวาเพื่อถูกทำงานโดยจาวา อินเตอร์พรีทเตอร์ ต้องเป็นโปรแกรมที่ สมบูรณ์ มี main() เป็นจุดเริ่มต้น และ สามารถควบคุมการดำเนินไปของตัวเองได้ การทำงาน ของภาษาจาวาภายใต้ จาวา อินเตอร์พรีทเตอร์ ทำได้โดยไม่ต้องมีโปรแกรมอื่นช่วย โดยที่ส่วน หัวของโปรแกรม main() ต้องประกอบด้วย ประโยคดังนี้ (วีระศักดิ์, 2543: 17) public static void mani(String args[ ]) ดังตัวอย่างต่อไปนี้ //Hello.java class Hello { public static void main(String args[]) { System.out.println("Hello") ; } } ขั้นตอนการสร้างและทำงาน จาวา แอปพลิเคชั่น จะเริ่มจากใช้ เอดดิเตอร์ เขียนโปรแกรม สำหรับ จาวา แอปพลิเคชั่น และบันทักไฟล์ไว้ มีนามสกุล .java จากนั้นใช้คำสั่ง javac.exe ทำการ คอมไพล์ จะได้ผลลัพธ์เป็นไฟล์นามสกุล .class ซึ่งเมื่อต้องการให้ทำงานก็ส่ง ไฟล์นามสกุล .class ให้กับ java.exe 2.1.3 ภาษาจาวากับการเขียนโปรแกรมเชิงวัตถุ การเขียนโปรแกรมโดยให้มีรูปแบบเป็น ลักษณะเชิงวัตถุ ต้องอาศัยภาษา คอมพิวเตอร์ที่ถูกออกแบบมาให้มีลักษณะพิเศษและเอื้อประโยชน์ สำหรับการเขียนโปรแกรมแบบเชิงวัตถุโดยเฉพาะ ภาษาเชิงวัตถุมีคลาส (Class) เป็นโครงสร้าง หลักของโปรแกรม แต่ละคลาสอาจมีสมาชิกเป็นข้อมูลหรือฟังก์ชัน (Function) โดยที่ฟังก์ชันใน ภาษาเชิงวัตถุ เราจะเรียกว่า เมธทอด (Method) หรือ โอเปอเรชั่น (Operation) คลาสจะถูก กำหนดขึ้นโปรแกรม โดยใช้คำว่า “class” ตามด้วยชื่อคลาส และส่วนของโปรแกรมที่กำหนด สมาชิกของคลาสซึ่งอยู่ระหว่างเครื่องหมาย “{“ กับ “}” ในไฟล์ของภาษาจาวาหนึ่งอาจมีคลาส มากกว่าหนึ่งคลาสได้ แต่เมื่อถูกคอมไพล์แล้วจะได้ ไฟล์นามสกุล .class สำหรับแต่ละคลาสโดยมี ชื่อเหมือนกับคลาสนั้น ๆ ด้วยเหตุว่าเพื่อให้โปรแกรมมีขนาดเล็ก และใช้วิธี ไดนามิค ลิงค์ 8 (Dynamic Linked) คือ คลาสที่ถูกอ้างอิงถึงจะถูกโหลดเข้าสู่ จาวา อินเตอร์พรีทเตอร์ ขณะที่ โปรแกรมทำงาน แม้โปรแกรมจะทำงานช้ากว่าเพราะเสียเวลาโหลดคลาส แต่จะมีเฉพาะคลาสที่ถูก ใช้จริง ๆ เท่านั้นที่ถูกโหลด แต่มีข้อดีที่บางคลาสอาจถูกใช้ร่วมมันโดยโปรแกรมหลาย ๆ โปรแกรม ได้ (วีระศักดิ์, 2543: 22) 2.1.3.1 ไฟล์ และคลาส ก) โครงสร้างของคลาส ทุกโปรแกรมที่สร้างจากภาษาจาวาต้องสามารถ สร้างคลาสให้ได้อย่างน้อยหนึ่งคลาส จึงจะถือว่าเป็นภาษาจาวา และเนื่องจากโปรแกรมตามแนว ความคิดเชิงวัตถุต้องทำงานด้วยวัตถุ และคลาสก็เป็นส่วนเริ่มต้นจองวัตถุโดยมีรูปแบบโครงสร้าง ดังนี้ ข) ข้อมูลในคลาสหรือตัวแปร (Data Member) การเก็บข้อมูลภายในคลา สมีรูปแบบการกำหนดดังนี้ Access_Level final static Data_Type Data_Name 1. Acces_Level คือระดับการเข้าถึงตัวแปรที่กำหนด มีการเข้าถึง 4 รูปแบบ คือ public เป็นระดับการเข้าถึงข้อมูลที่ไม่มีข้อจำกัด private เป็นระดับการเข้าถึงข้อมูลภายในคลาสเท่านั้น protected เป็นระดับการเข้าถึงข้อมูลภายในคลาสหรือวัตถุ และคลาสที่สืบทอดมา แต่ต้องอยู่ใน เพกเกจ(Package)เดียวกัน ถ้าไม่กำหนดเป็นระดับการเข้าถึงข้อมูลภายในคลาสหรือวัตถุใน เพกเกจเดียวกัน 2. final ใช้บอกว่าตัวแปรตัวนั้นเราไม่สามารถเข้าไปทำการเปลี่ยนแปลงค่าด้วยวิธีใดๆ ได้ เป็นการประกาศค่าสุดท้ายของตัวแปรนั้น ๆ และใช้งานตลอดทั้งโปรแกรม 3. static ถ้า กำหนดไว้หน้าตัวแปรใด ตัวแปรนั้นจะถูกโหลดเข้าไปอยู่ในหน่วยความจำพร้อมที่จะใช้งานได้ทันที 2.1.3.2 วัตถุ และการสร้างวัตถุ วัตถุสร้างขึ้นจากขั้นตอนสองขั้นตอน คือขั้นตอนแรก ทำการประกาศชื่อตัวแปรอ้างถึง (Reference Variable) คือขั้นตอนที่ใช้กำหนดชื่อตัวแปรเพื่อใช้ class Class_Name { Data_member Method_member } 9 ในการอ้างถึงไปยังพื้นที่ในหน่วยความจำ โดยพื้นที่ส่วนนี้เป็นส่วนที่จัดเก็บวัตถุที่สร้างขึ้นมาใน ภายหลัง โดยมีรูปแบบการกำหนดดังนี้ Class Name Reference Name ขั้นตอนที่สองการสร้างวัตถุ (Instance of Class) วัตถุจะเป็นพื้นที่ในหน่วยความจำซึ่งสร้าง ตามแบบโครงร่างของคลาสใดๆ ดังนั้นวัตถุจะอ้างถึงพื้นที่ที่สามารถเก็บข้อมูล และประมวลผลซึ่ง มีรูปแบบดังนี้ new Class_Constructor( Parameter_List ) ในภาษาจาวาตัวแปรอ้างถึงและวัตถุมีความสัมพันธ์ซึ่งกันและกัน โดยตัวแปรอ้างถึง ถูกกำหนดขึ้น เพื่อประโยชน์ในการอ้างไปยังตำแหน่งของวัตถุที่อยู่ในหน่วยความจำ โดย ในหน่วยความจำบนเครื่องคอมพิวเตอร์ บางครั้งสามารถสร้างวัตถุได้หลายๆวัตถุของการทำงานแต่ ละครั้ง จึงจำเป็นต้องใช้ชื่อตัวแปรอ้างถึงเพื่อให้สามารถเข้าใช้งานข้อมูลและเมธทอด ในวัตถุได้ 2.2 แนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) โดยทั่วไปแล้วในระบบที่ซับซ้อนจะประกอบด้วยวัตถุจำนวนมากที่ทำงานร่วมกัน และการ สร้างโปรแกรมที่คำนวณผลลัพธ์การทำงานของวัตถุทั้งหมดออกมาโดยตรงจะยากกว่าการสร้าง โปรแกรมที่จำลองการทำงานของแต่ละวัตถุไปที่ละขั้นจนกว่าจะได้คำตอบ แนวคิดในการสร้าง โปรแกรมที่ประกอบขึ้นจากวัตถุเป็นหลักนี้เรียกว่า การเขียนโปรแกรมเชิงวัตถุ ซึ่งโดยแท้จริงแล้ว การเขียนโปรแกรมเชิงวัตถุ ก็คือเทคนิควิธีการเขียนโปรแกรมแบบหนึ่ง(ธวัชชัย, 2545) แนวความคิดแบบใหม่ที่ใช้ในการเขียนโปรแกรมเป็น การเน้นถึงปัญหาและองค์ประกอบ ของปัญหา การเน้นที่ปัญหาและองค์ประกอบการการแก้ปัญหา (Problem Space) จะคล้ายกับการ แก้ไขปัญหาในการดำรงชีวิตประจำวันของมนุษย์ มากกว่าที่จะมองหาวิธีการแก้ปัญหานั้น ๆ หรือ ขั้นตอนในการแก้ปัญหา (Solution Space) ซึ่งเป็นการเขียนโปรแกรมแบบเก่า 2.2.1 การเขียนโปรแกรมเชิงวัตถุหลักการสำคัญสำหรับการออกแบบงานเชิงวัตถุคือ การค้นหาวัตถุ และจำแนกวัตถุนั้น ๆ ออกเป็นส่วนที่มีการเปลี่ยนแปลงและส่วนที่อยู่คงที่ ซึ่งวัตถุที่ ไม่มีการเปลี่ยนแปลงอยู่คงที่ สามารถนำมาใช้ได้เมื่อมีการปรับปรุงระบบงานใหม่ ซึ่งเป็นความจำเป็นที่ต้องมีการออกแบบระบบงานเพื่อให้ทราบถึงส่วนที่มีการเปลี่ยนแปลง และส่วนที่ไม่มีการ เปลี่ยนแปลง แนวคิดการเขียนโปรแกรมเชิงวัตถุ อาลัน เคร์ ซึ่งเป็นผู้บุกเบิกแนวความคิดการเขียน 10 โปรแกรมเชิงวัตถุคนหนึ่ง ได้เสนอกฎ 5 ข้อที่เป็นแนวทางของภาษาคอมพิวเตอร์เชิงวัตถุ ดังนี้ (ธวัชชัย, 2545: 10) 2.2.1.1 ทุก ๆ สิ่งเป็นวัตถุ คือ องค์ประกอบของโปรแกรมคอมพิวเตอร์ทุก ๆ ส่วนจะ ต้องเป็นวัตถุ 2.2.1.2 โปรแกรม คือ กลุ่มของวัตถุที่ส่งข่าวสารบอกซึ่งกันและกันให้ทำงาน โปรแกรม ในความหมายของการเขียนโปรแกรมเชิงวัตถุ ก็คือ กลุ่มของวัตถุที่ส่งข้อความข่าวสาร หรือ เมสเสจ (Message) ถึงกันและกันเพื่อบอกให้วัตถุทำงาน ดั้งนั้นวัตถุจะไม่ทำงานถ้าไม่มีข่าว สาร 2.2.1.3 วัตถุแต่ละวัตถุ จะต้องมีหน่วยความจำและประกอบไปด้วยวัตถุอื่น ๆ วัตถุจะ ต้องมีหน่วยความจำของมันเองซึ่งอาจประกอบขึ้นจากวัตถุอื่นๆ ได้ ซึ่งหมายถึง วัตถุสามารถ ประกอบจากวัตถุอื่น ๆ ได้ ซึ่งเป็น คุณ สมบัติการถ่ายทอดห รือที่เรียกว่า อิน เฮอร์ริ แทนซ์(Inheritance) และคุณสมบัติขององค์ประกอบหรือที่เรียกว่า คอมโพสิชั่น (Composition) 2.2.1.4 วัตถุทุกชนิดจะต้องจัดอยู่ในประเภทใดประเภทหนึ่งวัตถุ ที่สร้างขึ้นจะต้องมี ชนิดหรือประเภท ซึ่งหมายถึง วัตถุทุกชนิดจะต้องสามารถจัดเป็นกลุ่มได้กลุ่มของวัตถุ ก็คือ คลาส นั่นเอง ในการเขียนโปรแกรมเชิงวัตถุจะต้องเขียนคลาสขึ้นมาก่อนแล้วจังสร้างวัตถุภายหลัง ซึ่ง วัตถุจะอยู่ในคลาสใด ๆ โดยที่วัตถุที่เกิดจากคลาสเดียวกันจะมีคุณสมบัติพื้นฐานเหมือนกัน 2.2.1.5 วัตถุที่จัดอยู่ในประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกันการเขียน โปรแกรมเชิงวัตถุมีประสิทธิภาพที่ดีเพราะชนิดของวัตถุมิได้กำหนดอยู่อย่างโดด ๆ แต่สามารถจัด เป็นกลุ่มได้ซึ่งวัตถุในกลุ่มเดียวกันจะได้รับข่าวสารเหมือนกันซึ่งเป็นพื้นฐานของการพ้องรูปหรือ โพลีมอร์ฟิซึม (Polymorphism) 2.2.2 ก ารเก็ บ ข้ อ มู ล ใน โม ดู ล แ ล ะก ารซ่ อ น ข่ าวส าร(Data Encapsulation and Information Hiding) ปัญหาหนึ่งในระบบงานคอมพิวเตอร์คือการแก้ไขข้อมูลในระบบใหญ่ ๆ ที่ มีการใช้ข้อมูลร่วมกัน การแก้ไขปรับปรุงข้อมูลจะไม่ทราบได้ว่าโมดูลใดแก้ไขส่วนข้อมูลใดอย่าง ไร ดังนั้นจึงเกิดแนวคิดที่จะนำข้อมูลให้อยู่ในโมดูลนั่น ๆ ซึ่งก็เป็นการเก็บข้อมูลไว้ภายใน (Data Encapsulation) เพื่อป้องกันการแก้ไขโดยส่วนของโปรแกรมที่ไม่ได้รับอนุญาต ซึ่งจะมีการ กำหนดหน้าที่ส่วนที่ทำหน้าที่แก้ไขข้อมูลโดยเฉพาะให้โมดูลที่ต้องการแก้ไขข้อมูลเรียกใช้ นอก จากข้อมูลแล้วส่วนของโมดูลเองก็อาจถูกเรียกใช้โดยไม่เหมาะสมได้ฉะนั้นการซ่อนส่วนของโมดูล ที่สมควรซ่อนและเปิดเผยส่วนที่ควรเปิดเผย เพื่อป้องกันจึงต้องมีการป้องกันส่วนของโมดูลที่ไม่สม ควรให้ผู้อื่นมาใช้ กลไกนี้เรียกว่าการซ่อนข่าวสาร (Information Hiding) 11 2.2.3 การเชื่อมต่อ (Interface) ในการเขียนโปรแกรมเชิงวัตถุ ในวัตถุจะต้องมีการเชื่อมต่อ เป็นส่วนที่วัตถุนั้น ๆ จะให้บริการหรือเป็นส่วนที่บอกว่าวัตถุนั้น ๆ สามารถทำอะไรได้บ้าง ซึ่งเรียก ว่าเมธทอดซึ่งมีข้อดีคือการเปลี่ยนแปลงที่เกิดขึ้นภายในวัตถุจะไม่กระทบต่ออินเตอร์เฟส (Interface) ดังนั้นภายในวัตถุผู้เขียนคำสั่งสามารถดัดแปลงแก้ไข หรือเพิ่มเติมได้ตลอดเวลา และ ภายในวัตถุสามารถเก็บค่าต่าง ๆ ได้ด้วย ซึ่งถือเป็นจุดเด่นของการเขียนโปรแกรมเชิงวัตถุ เพราะผู้ ใช้สามารถเรียกใช้วัตถุต่าง ๆ โดยไม่จำเป็นต้องทราบกลไกการทำงานภายใน ผู้ใช้สามารถเรียกใช้ วัตถุได้ด้วยการส่งข่าวสาร ไปยังวัตถุที่ต้องการ 2.2.4 วงจรชีวิตของวัตถุ จุดเด่นของการเขียนโปรแกรมเชิงวัตถุที่สำคัญก็คือการทำข้อมูลให้ อยู่ในรูปของ เอ็บสแตค(Abstract) เพื่อนำกลับมาใช้ใหม่ การถ่ายทอดคุณสมบัติ และการ พ้องรูป และการเขียนโปรแกรมเชิงวัตถุจะจัดเก็บข้อมูลไว้ในวัตถุ ดังนั้นวงจรชีวิตของวัตถุจึงเป็น สิ่งสำคัญเพราะหมายถึงข้อมูลด้วย (ธวัชชัย, 2545: 20) ในภาษาจาวา วัตถุจะถูกสร้างในส่วนของหน่วยความจำที่เรียกว่า ฮีป (Heap) เมื่อใช้คำสั่ง นิว (new) เพื่อสร้างวัตถุขึ้นในฮีป และอ้างถึงโดยตำแหน่ง เมื่อต้องการใช้ก็จะอ้างถึงตำแหน่งของ วัตถุ และภาษาจาวายังมีกาเบจคอเล็กเตอร์ (Garbage Collector) เมื่อส่วนของหน่วยความจำเต็ม การเบจคอเล็กเตอร์ จะถูกเรียกใช้งานโดยอัตโนมัติ ซึ่งจะคืนหน่วยความจำที่ไม่ได้ใช้ให้กับ คอมพิวเตอร์โดยการพิจารณาจากการอ้างอิงถึงวัตถุ (Reference) ถ้าวัตถุใดไม่มีการอ้างอิงถึงแสดง ว่าวัตถุนั้นไม่ได้ใช้งานแล้ว ก็จะถูกกาเบจคอเล็กเตอร์ ยกเลิกการใช้งานไปด้วย 2.2.5 การฝังตัวของวัตถุ (Persistence) การฝังตัวของวัตถุ (Persistence) ก่อนที่จะออกจาก โปรแกรมจะมีวิธีการที่จะทำให้คอมพิวเตอร์จัดเก็บข้อมูลล่าสุด เมื่อเข้ามาใช้งานคราวหน้า คอมพิวเตอร์ก็จะสามารถจำข้อมูลครั้งสุดท้ายได้อย่างถูกต้องซึ่ง ในภาษาจาวามีคำสั่ง ซีรีไลเซชั่น (Serialization) ที่จะทำการแปลงวัตถุให้อยู่ในรูปของบิตและไบต์ 2.2.6 คลาสและวัตถุ (Class and Object) คลาสเป็นตัวกำหนดรายละเอียดที่จะสร้างวัตถุ ออกมาใช้แต่โปรแกรมเมอร์ไม่สามารถใช้ประโยชน์จากคลาสได้โดยตรง ในการเขียนโปรแกรม เชิงวัตถุ คลาสจะถูกนิยามโดยข้อมูล และ พฤติกรรม ที่คลาสจะกระทำกับข้อมูลเมื่อคลาสหนึ่ง ๆ ถูกเรียกใช้ คลาสจะสร้างวัตถุขึ้นมาทำงานแทนคลาสที่ถูกเรียกใช้ (ธวัชชัย, 2545: 25) วัตถุคือสิ่งใดๆ ก็ตามซึ่งมีคุณลักษณะ (State) บ่งบอกถึงความเป็นตัวของมันเองในขณะนั้น และสามารถแสดงพฤติกรรม (Behavior) ของตัวเองออกมาได้ไม่ว่าจะเป็นคำว่าวัตถุหรือคำว่า อ็อบเจ็กต์ถือว่าเป็นสิ่งเดียวกันในแนวคิดของภาษาคอมพิวเตอร์เชิงวัตถุ (วีระศักดิ์, 2543: 143) โดยทั่วไปวัตถุใดๆมักจะมีส่วนประกอบที่สำคัญอยู่สองประการ ประการแรกคือคุณ ลักษณะ (State) คือสิ่งที่สามารถบ่งบอกถึงความเป็นวัตถุ และอยู่ภายในตัววัตถุซึ่งสามารถ เปลี่ยน 12 แปลง ได้ เช่น วัตถุรถจักรยานมีคุณลักษณะหลายประการด้วยกัน เช่น สี ความสูง น้ำหนัก เป็นต้น ประการที่สองคือ พฤติกรรม (Behavior) คืออาการที่วัตถุใดๆ แสดงออกมาหรือถูกให้แสดงออก มา เช่น การเคลื่อนที่ของรถจักรยาน โดยพฤติกรรมใดๆ ของวัตถุนั้นจะมีผลเชื่อมโยงไปถึงข้อมูล คุณลักษณะภายในตัววัตถุเองด้วย ในภาษาจาวานั้นคลาสประกอบไปด้วย ชนิดของคลาส, ชื่อของคลาส, ตัวแปรของคลาส และ พฤติกรรม ชนิดของคลาสนั้นอาจจะเป็นพับลิค (Public) หรือ ไพรเวท (Private) ถ้าเป็น พับลิค หมายถึงคลาสที่มองเห็นได้โดยคลาสที่อยู่ภายนอกหรือภายในเพกเกจ แต่ถ้าเป็น ไพรเวท คลาสที่อยู่นอกเพกเกจจะไม่สามารถเรียกใช้คลาสนี้ การอ้างถึงตัวแปรแบบ พับลิค ของอีกวัตถุ หนึ่งสามารถทำได้โดยใช้ชื่อ วัตถุ นั้นแล้วตามด้วยจุดและชื่อตัวแปร แต่ถ้าเป็นการอ้างถึงตัวแปรที่ ถูกประกาศ ไว้ในคลาสก็สามารถอ้างถึงชื่อตัวแปรได้โดยตรง 2.2.6.1 การสร้างคลาส การสร้างคลาสให้ขึ้นต้นด้วยคำว่าคลาส (class) แล้วตามด้วย ชื่อคลาส และตามด้วยข้อความระหว่าง { } ซึ่งเป็นคำสั่งที่บอกว่าคลาสนี้มีลักษณะ ข้อมูลอย่างไร การสร้างวัตถุ การสร้างวัตถุขึ้นมาใหม่นั่นเองโดยมีคำสั่งนิว (New Operator) ก็คือ คำสั่ง ที่ช่วยในการ สร้างวัตถุ ใหม่ขึ้นมานั่นเอง ชื่อคลาสที่ตามหลัง คำสั่งนิว (New Operator) นี้จะเป็น ตัวบ่งชี้ว่าเรากำลัง สร้างวัตถุของคลาสอะไรขึ้นมาและคอนสตัคตอร์ (Constructor) ที่มีเครื่อง หมายกำหนด (Signature) เดียวกับ ตัวแปร ที่อยู่ในวงเล็บหลังชื่อคลาสจะถูกเรียกโดยอัตโนมัติ หลังจากที่วัตถุ ถูกสร้างขึ้น โดย คำสั่งนิว จะคืน ค่า อ้างอิงของวัตถุ ที่เพิ่งถูกสร้างออกมา และถ้า เราไม่เก็บค่านั้นไว้ในตัวแปร เราก็จะไม่มีโอกาสเรียกใช้ วัตถุ ตัวนั้นอีก 2.2.6.3 พฤติกรรม (Method) พฤติกรรม ในภาษาจาวานั้นก็เปรียบได้กับฟังก์ชั่น ในภาษาC นั่นเอง โดยทั่วไปแล้วควรจะ กำหนด ให้ พฤติกรรม ทำอะไรอย่างหนึ่งเท่าที่เราต้องการ การสร้างพฤติกรรม ให้ใหญ่และซับซ้อนมาก ๆ จะทำให้วัตถุประสงค์ของแนวคิดการเขียน โปรแกรมเชิงวัตถุ นั้นถูกบดบังลงได้ องค์ประกอบสำคัญของ พฤติกรรม นั้นมีดังนี้ ก) ชื่อของพฤติกรรม ชื่อของ พฤติกรรม นั้นมีกฎเกณฑ์ในการตั้งเหมือนกับ ชื่อของตัวแปรนั่นเอง หลักการตั้งชื่อ พฤติกรรม นี้มิใช่กฎบังคับ แต่ผู้เขียนโปรแกรมจาวาโดยส่วน มากใช้กันเพื่อทำให้โปรแกรมอ่านง่าย ซึ่งจะตั้งให้เป็นคำกิริยาหลาย ๆ คำซึ่งแสดงถึงหน้าที่ของ พฤติกรรม นั้น ๆ คำแรกจะถูกเขียนด้วยตัว ตัวอักษรตัวเล็ก ทั้งหมดและตัวอักษรตัวแรกของคำถัด ไปแต่ละคำจะเป็นตัว ตัวใหญ่ และที่เหลือจะเป็นตัว ตัวเล็ก เช่น พฤติกรรม getClassSched() ข) อาร์กิวเมนต์ (Argument) อาจจะเป็นตัวแปรพื้นฐานของจาวา หรืออาจ จะเป็นวัตถุ ก็ได้ เราสามารถกำหนดพฤติกรรม ให้รับ อาร์กิวเมนต์ (Argument) ได้ 13 ค) พฤติกรรม (Method) ตัวขอบเขต เป็นตัวกำหนดอย่างแท้จริงว่า พฤติ กรรม นี้ทำหน้าที่อะไร ภายใน ขอบเขตของพฤติกรรม เราสามารถ จะประกาศ ตัวแปรขึ้นมาเพื่อใช้ งานชั่วคราวซึ่ง ช่วงชีวิต ของตัวแปรเหล่านี้จะอยู่ภายใน พฤติกรรม นี้เท่านั้น ภายในขอบเขตของ พฤติกรรม เราสามารถเรียกใช้ พฤติกรรม อื่นของ วัตถุนั้นหรือของวัตถุอื่นที่อยู่ภายใน ขอบเขต ของพฤติกรรม นั้นได้ด้วย ขอบเขตของขอบเขตของพฤติกรรม นั้นจะถูกกำหนดด้วยเครื่องหมาย ปีกกาเปิดและปิดหนึ่งคู่ “{“ “}” ง) การคืนค่า (Return) หลังจาก พฤติกรรม ทำงานจนถึงบรรทัดสุดท้าย แล้วก็จะคืนค่า กลับไปหาส่วนของโปรแกรมที่เรียก หากต้องการให้ พฤติกรรม ส่งค่าคืนไปยังผู้ เรียก ก็สามารถใส่ ประโยคการคืนค่า เข้าไปได้ หลังจากที่ ประโยคการคืนค่า ได้ถูก ทำงาน แล้ว ก็ จะหลุดออกจาก ขอบเขตของพฤติกรรม นั้นทันที โปรแกรมส่วนที่กระทำการเรียก ก็สามารถรับค่า คืนค่า นั้นได้โดยการใส่ ตัวแปรตามด้วยเครื่องหมายเท่ากับไว้ด้านซ้ายของ พฤติกรรมที่เรียก ถ้าไม่ มีค่าที่จะคืนค่าก็ต้องใส่ คำว่า void ไว้ตรงตำแหน่งของชนิด 2.2.7 คอนสทรัคเตอร์ (Constructor) ทุกๆ ครั้งที่วัตถุ ถูกเริ่มทำงาน จะมี พฤติกรรมหนึ่งที่ ถูกเรียกเสมอซึ่ง พฤติกรรม นั้นก็คือ คอนสทรัคเตอร์ เมธทอด (Constructor Method) นั่นเอง โดย คอนสทรัคเตอร์ นั้นจะไม่สามารถถูกเรียกโดยตรงโดยโปรแกรมเมอร์ได้ แต่จะถูกเรียกโดย อัตโนมัติหลังจากที่ วัตถุ ถูกเริ่มทำงาน ขึ้นมา วัตถุประสงค์ที่มี คอนสทรัคเตอร์ ขึ้นมานี้ก็เพื่อให้ผู้ เขียนโปรแกรมเขียนสิ่งที่ต้องทำหลังจากที่ วัตถุถูกสร้างในทันทีโดยที่ไม่ต้องเขียน พฤติกรรม เพื่อ ที่เริ่มทำงาน ต่างหาก และถ้าทำแบบนั้นผู้เขียนโปรแกรมจะต้องเสียเวลาเพิ่มขึ้นในการเรียก พฤติ กรรม ที่ต้องการให้เริ่มทำงาน (วีระศักดิ์, 2543: 147) 2.2.8 ชนิดของตัวแปร ตัวแปร หมายถึง ตัวที่เก็บค่า ๆ หนึ่งซึ่งค่านั้นอาจจะเปลี่ยนแปลงไป ตามสถานการณ์ ในภาษาจาวาตัวแปรอาจจำแนกได้ 2 ประเภท (ธวัชชัย, 2545: 29) 2.2.8.1 ตัวแปรพื้นฐาน (Primitive Data Type) ตัวแปรพื้นฐานมีอยู่ 8 ชนิดคือ Boolean, char, byte, int, short, long, float และ double ตัวแปรประเภทนี้จะถูกออกแบบให้ เก็บข้อมูลไว้ในสแตค ซึ่งทำงานได้รวดเร็วกว่าข้อมูลที่เก็บในฮีป ซึ่งต้องใช้ตัวแปรอ้างอิงถึงวัตถุ แทนการเรียกใช้โดยตรง 2.2.8.2 ตัวแปรแอบสแตค เดต้า ไทป์ (Abstract Data Type) แอบสแตค เดต้า ไทป์ เป็นกรอบของวัตถุ ที่ผู้เขียนโปรแกรม สามารถกำหนดชนิดของข้อมูลขึ้นมาใหม่ได้ตามต้องการ เมื่อต้องการเรียกใช้วัตถุชนิดนี้จะใช้ผ่านตัวแปรที่เรียกว่าตัวแปรอ้างอิง เช่น String f; ซึ่งอธิบายได้ ดังภาพ 14 ภาพที่ 2-2 แสดงการอ้างอิงถึงวัตถุ 2.2.9 การนำคลาสกลับมาใช้งานอีก การนำคลาสกลับมาใช้งานอีกหรือที่เรียกว่าซอฟต์แวร์ รียูส นับเป็นจุดเด่นของการเขียนโปรแกรมเชิงวัตถุซึ่งทำได้ หลายวิธีแต่วิธีที่มีประสิทธิภาพดีคือ การทำ คอมโพสิตชั่น(Composition) และ การสืบทอดคุณสมบัติ (Inheritance) (ธวัชชัย, 2545: 138) 2.2.9.1 คอมโพสิตชั่น (Composition) เป็นการพัฒนาโปรแกรมที่อาศัยองค์ ประกอบเล็ก ๆ ซึ่งอาจถือเป็นหน่วยพื้นฐานนำมาประกอบกันลักษณะเช่นนี้เรียกว่า คอมโพ สิตชั่น ภาพที่ 2-3 แสดงความสัมพันธ์ระหว่างคลาสแบบคอมโพสิต f reference String 15 2.2.9.2 การสืบทอดคุณสมบัติ (Inheritance) การสืบทอดคุณสมบัติจะใช้กับคลาสที่ อยู่ในกลุ่มเดียวกัน มีความสัมพันธ์ ในลักษณะของคลาสแม่ (Super Class) และคลาสลูก (Sub Class) โดย คลาสผู้กำหนดคุณสมบัติเรียกว่า คลาสแม่ และ คลาสที่รับคุณสมบัติเรียกว่า คลาสลูก ภาพที่ 2-4 แสดงการสืบทอดคุณสมบัติ คลาสลูก จะได้รับการถ่ายทอดคุณสมบัติซึ่งก็คือตัวแปรและเมธทอด จากคลาส แม่ทุก ๆ ตัวแปรและเมธทอด และ คลาสลูก อาจเพิ่มเติมตัวแปรและเมธทอด ได้ตามต้องการ ซึ่งมีแนวทาง ในการใช้คุณสมบัติการถ่ายทอดได้ดังนี้ ก) คลาสลูก จะไม่ได้รับการสืบทอดคอนคอนสทรัคเตอร์ ของคลาสแม่ ดั้งนั้นจะต้องเขียน คอนสทรัคเตอร์ หรือใช้ ดีฟอลต์คอนสตรัคเตอร์ (Default Constructor) ข) ตัวแปรหรือเมธทอดที่เป็นไพรเวท จะไม่ได้รับการสืบทอดคุณสมบัติ โดยทั่วไปแล้ว คลาสลูก จะได้รับการสืบทอดคุณสมบัติทุกอย่างซึ่งสามารถเรียกใช้งานได้ทันทีโดย ไม่ต้องมีการเขียนซ้ำ แต่ถ้าเมธทอดใดมีการเขียนซ้ำใน คลาสลูก อีกแสดงว่ามีการปรับปรุงเปลี่ยน แปลงเมธทอดดังกล่าวเรียกว่าการ โอเวอร์ไรดิง (Overriding) นอกจากนี้ยังมีเมธทอด โอเวอร์ โหลดดิ้ง (Overloading) ซึ่งเป็นเมธทอดที่มีชื่อเหมือน แต่สามารถทำงานได้แตกต่างกันโดยอาศัย พารามิเตอร์ (Parameter) ที่ส่งค่าและชนิดของการ คืนค่า เป็นตัวกำหนด 2.2.9.3 คอมโพสิตชัน(Composition) และอากิเกชั่น (Aggregation) ความแตกต่าง จะพิจารณาจากส่วนประกอบต่าง ๆ หากสามารถแยกส่วนประกอบออกโดยไม่มีผลกระทบการ ทำงานของคลาสถ้าแยกส่วนประกอบออกบางส่วนแล้วยังคงทำงานได้ส่วนประกอบนั้นจะกำหนด ให้มีความสัมพันธ์แบบ อากิเกชั่น แต่ถ้าแยกส่วนประกอบออกบางส่วนแล้วไม่สามารถทำงานได้ ก็จะมีความสัมพันธ์แบบ คอมโพสิตชัน 16 2.2.10 การพ้องรูป (Polymorphism) การพ้องรูป (Polymorphism) เป็นคุณสมบัติประการ หนึ่งที่สนับสนุนการนำคลาสกลับมาใช้งานอีก ซึ่งเป็นผลจากการสืบทอดคุณสมบัติ การพ้องรูปมี วัตถุประสงค์คือการแยกส่วนของ อินเตอร์เฟส และอิมพลีเม็นเทชั่น (Implementation) ออกจาก กัน การพ้องรูป ในการเขียนโปรแกรมเชิงวัตถุในปัจจุบันที่เด่นชัดมีอยู่ 2 แบบ (ธวัชชัย, 2545: 173) 2.2.10.1 โอเวอร์โหลดดิ้ง เป็นการพ้องรูปที่มีลักษณะชื่อเมธทอดเดียวกันอาศัยพารา มิเตอร์ เป็นตัวจำแนกความแตกต่าง ซึ่งภายในแต่ละเมธทอดอาจทำงานต่างกัน 2.2.10.2 โอเวอร์ไรดิง เป็นการพ้องรูปที่มีลักษณะของ คลาสแม่ และ คลาสลูก ที่มี เมธทอด ที่มีชื่อและ เหมือนกัน 2.2.11 เอ็บสแตค (Abstract) ส่วนขยาย เอ็บสแตค ที่ไว้หน้าคลาสและเมธทอด เพื่อกำหนด คลาสและเมธทอดนั้น ๆ ให้เป็นเอ็บสแตค เพื่อแยก อินเตอร์เฟส และคำขยายเมธทอด (static, void) ในคลาสแม่ออกจากวิธีการทำงานโดยนำวิธีการทำงานมาไว้ในคลาสลูก ซึ่งการเขียนเอ็บส แตค ที่คลาสจะบังคับให้ผู้ใช้ต้องแยกอินเตอร์เฟส (Interface) และการทำงานออกจากกันอย่างเต็ม รูปแบบ โดยสรุปแล้ว เอ็บสแตคคลาส (Abstract Class) คือคลาสที่มีเมธทอดใดเมธทอดหนึ่งเป็น เอ็บสแตค และ เอ็บสแตคเมธทอด (Abstract Method) คือเมธทอดที่ไม่ระบุการทำงานใด ๆ รอ ให้คลาสลูกทำการ โอเวอร์ไรดิง เมธทอดนั้นและ วัตถุประสงค์ของ เอ็บสแตค เพื่อให้คลาสแม่ เป็นผู้กำหนดอินเตอร์เฟส และให้คลาสลูกกำหนดวิธีการทำงาน 2.3 ยูเอ็มแอล (Unified Modeling Language หรือ UML) ยูเอ็มแอล (UML) เป็นภาพสัญลักษณ์ สำหรับการวาดแผนผังของการพัฒนาซอฟต์แวร์ สามารถใช้วาดแผนผังเพื่ออธิบายขอบเขตของปัญหา หรือเพื่อช่วยออกแบบซอฟต์แวร์ เป็นมาตร ฐานสากลที่ใช้ในการอธิบายซอฟท์แวร์ในรูปของไดอะแกรม (Diagram) ตัวมาตรฐาน ยูเอ็มแอล กำหนดโดยโอเอ็มจี (OMG หรือ Object Management Group) ซึ่งภาพสัญลักษณ์ ยูเอ็มแอล มีพื้นฐานพัฒนามาจาก ภาพสัญลักษณ์ของโอเอ็มที (OMT), บูช (Boosh) และ จาค๊อบสัน (Jacobson) การวิเคราะห์และออกแบบระบบเชิงวัตถุนั้นเป็นวิธีที่นิยมกันมาในปัจจุบันและมีแนวโน้มที่ จะแทนที่การออกแบบระบบแบบเดิม กระบวนการพัฒนาระบบตามแบบวิธี เรชั่นแน็ล ยูนิไฟ โพรเซส (Rational Unified Process) เป็นกระบวนที่ครอบคลุมกระบวนการพัฒนาระบบ ทั้งหมด โดยมองเป็นกระบวนการในภาพรวมโดยการพิจารณาทั้งงานด้านการบริหารและงานด้าน เทคนิค กระบวนการพัฒนาจะมีลักษณะการทำซ้ำ (Iterative) และการเพิ่มขึ้น (Incremental) ดัง นั้นงานที่ทำจะไม่มีมากในคราวเดียวในตอนสุดท้ายของโพรเจ็กต์ (Project) แต่จะมีการแบ่งงาน 17 ออกเป็นช่วง ๆ (Phase) ในช่วงของการสร้างระบบ (Construction Phase) การทดสอบและการ รวบรวมส่วนย่อยเข้ากับระบบรวม จะมีการทำซ้ำหลาย ๆ ครั้ง เพื่อจะให้ได้โปรแกรมที่มีคุณภาพ และตรงตามความต้องการ ในการทำซ้ำแต่ละรอบ จะประกอบด้วย การวิเคราะห์ (Analysis) การออกแบบ (Design) การอิมพลีเมนต์ (Implement) และการทดสอบ (Testing) ช่วงของการ พัฒนาระบบ จะช่วยให้เห็นภาพรวมของระบบ และสนับสนุนการทำงานแบบคอมโพเน็นต์ เบส (Component Based) 2.3.1 ส่วนประกอบของ ยูเอ็มแอล (UML) ประกอบด้วยส่วนต่าง ๆ ดังนี้ ระบบงานทั้งหมด อาจมีหลายส่วนที่ต้องพิจารณา เพราะอาจมีขอบข่ายงานที่กว้างและซับซ้อนการอธิบายกระบวน การทำงานต่าง ๆ ของระบบไม่สามารถอธิบายได้เพียงแค่มุมมองเดียว (View) ดังนั้น การมอง ระบบควรจะต้องมีมุมมองต่าง ๆ กัน เช่น มุมมองด้าน ฟังก์ชันแน็ล (Functional), น็อน ฟังก์ชันแน็ล (Non Functional), มุมมองขององค์กร เป็นต้น ซึ่งแต่ละ ไดอะแกรม (Diagram) สามารถที่จะมีมุมมองได้มากกว่าหนึ่งมุมมองก็เพื่อมาอธิบายภาพรวมของระบบ โดยอาจเป็นมุม มองของผู้ใช้ระบบ ผู้เขียนโปรแกรมพัฒนาระบบ ซึ่งแต่ละมุมมองทำให้ผู้ทำเข้าใจระบบในแง่มุมที่ ต่าง ๆ กัน มุมมอง (View) ต่าง ๆ ของ ยูเอ็มแอล มีดังนี้ 2.3.1.1 ยูสเคสวิว(Use Case View) เป็นการมองระบบจากผู้ใช้ภายนอก หรือผู้ใช้ ระบบ ซึ่งไดอะแกรมที่ใช้อธิบาย คือ ยูสเคสไดอะแกรม (Use-Case Diagram) ตัวอย่างผู้ใช้ระบบ ภายนอก เช่น ลูกค้า, ผู้ออกแบบ, ผู้ทดสอบระบบ, นักเรียน, อาจารย์ เป็นต้นยูสเคส (Use Case) ใน ยูสเคสไดอะแกรม เป็นการทำงานของระบบที่ผู้ใช้ต้องการ ซึ่งได้มาจากการสำรวจความ ต้องการของผู้ใช้ ยูสเคสไดอะแกรม เป็นตัวกำหนดเป้าหมายของระบบ จึงเป็นส่วนกลางของ มุม มอง อื่น ๆ ที่จะต้องมีการทำงานต่าง ๆ ครบตามที่กำหนดไว้ใน ยูสเคสไดอะแกรม 2.3.1.2 ลอจิคัลวิว (Logical View) ใช้อธิบายว่าสามารถที่จะจัดการทำงานของ ระบบให้เป็นไปตามที่ต้องการได้อย่างไรและมีบริการอะไรให้กับผู้ใช้บ้าง ลอจิคัลวิว ต่างจาก ยูสเคส วิว เนื่องจากเป็นมุมมองของผู้ออกแบบและพัฒนาระบบ โดยจะแสดงในรูปแบบของโครง สร้างแบบสแตติก (Static) เช่น คลาส, อ็อบเจ็กต์, ความสัมพันธ์ระหว่างการทำงานร่วมกันแบบได นามิก คอลาโบเรชัน (Dynamic Collaboration) ซึ่งเกิดเมื่ออ็อบเจ็กต์ ส่งแมสเสจ ระหว่างการ ทำงาน โครงสร้างแบบสแตติก (Static) จะอธิบายโดยใช้ คลาสไดอะแกรม (Class Diagram) และ อ็อบเจ็กต์ไดอะแกรม (Object Diagram) ส่วนการทำงานร่วมกันแบบไดนามิกจะอธิบายโดยใช้ สเตทไดอะแกรม (State Diagram) ซีเควนซ์ไดอะแกรม (Sequence Diagram) คอลาโบเรชันได อะแกรม (Collaboration Diagram) และแอคติวิตี้ไดอะแกรม (Activity Diagram) 18 2.3.1.3 คอมโพเนนต์วิว (Component View) บอกถึงการสร้างและความขึ้นต่อกัน ของโมดูลซึ่งเป็นส่วนที่ผู้พัฒนาระบบต้องคำนึงถึง ว่าในแต่ละคอมโพเนนต์ประกอบด้วยโครง สร้างและความขึ้นต่อกันตลอดจนข้อมูลต่าง ๆ เช่นความต้องการทรัพยากรของคอมโพเนนต์นั้น มี อะไรบ้าง โดยใช้คอมโพเนนต์ไดอะแกรม (Component Diagram) ในการอธิบาย 2.3.1.4 ดีพลอยเมนต์วิว (Deployment View) เป็นการแสดงการจัดระบบในระดับ กายภาพ (Physical) ให้เหมาะสม เช่นการเชื่อมต่อระหว่างคอมพิวเตอร์และโหนดต่าง ๆ และรวม ถึงการแมป (Map) คอมโพเนนต์ (Component) ต่าง ๆ ในระดับโครงสร้างทางกายภาพ เช่น ลำดับการของหรือโปรแกรมในแต่ละเครื่องคอมพิวเตอร์ ใช้สำหรับผู้พัฒนาระบบ ผู้ร่วมพัฒนา ระบบ ผู้ทดสอบระบบอธิบายโดยดีพลอยเมนต์ ไดอะแกรม (Deployment Diagram) 2.3.1.5 โปรเซสวิว(Process View) ไดอะแกรม (Diagram) เป็นกราฟซึ่งแสดงโดย สัญลักษณ์ที่จัดเรียงขึ้นเพื่อใช้อธิบายระบบในมุมมองต่าง ๆ ในระบบหนึ่ง ๆ จะประกอบไปด้วย หลาย ๆ ไดอะแกรม แต่ละไดอะแกรม ยังสามารถมองในหลาย ๆ มุมมองด้วย 2.3.2 ใน ยูเอ็มแอล จะมีไดอะแกรม ต่าง ๆ ดังนี้ 2.3.2.1 ยูสเคสไดอะแกรม (Use Case Diagram) ส่วนประกอบสำคัญในยูสเคสได อะแกรม คือ ยูสเคส (Use Case) แอ๊กเตอร์ (Actor) และเส้นแสดงความสัมพันธ์ (Relationship) ในการสร้าง ยูสเคสไดอะแกรม สิ่งที่สำคัญ คือ การค้นหาว่าระบบทำอะไรได้บ้าง โดยไม่สนว่าข้าง ในสิ่งที่ระบบต้องทำได้เหล่านั้นมีกลไกการทำงานอย่างไรหรือใช้เทคนิคการสร้างอย่างไรเปรียบ เสมือนเป็น “กล่องดำ” (Black Box) โดยยูสเคสไดอะแกรม จะแสดงความสัมพันธ์ระหว่างผู้ใช้ งาน กับระบบ ซึ่งจะมีผู้กระทำจากภายนอกระบบ เรียกว่า แอ๊กเตอร์ กระทำกับระบบ โดยติดต่อ ผ่าน ยูสเคส ต่าง ๆ ที่เกี่ยวข้อง และจะใช้ในการสื่อสารกับผู้ใช้ เพื่ออธิบายถึงฟังก์ชันการทำงาน หลักของระบบ ใน ยูสเคสไดอะแกรม ก็คือการทำงานต่างๆ ที่ผู้ใช้ต้องการ ซึ่งจะได้มาจากการสอบ ถามจากผู้ใช้ ยูสเคส (Use Case) เป็น ความสามารถหรือฟังก์ชัน (Function) ที่ระบบซอฟต์แวร์จะต้อง ทำได้ เช่น ค้นหาข้อมูลของนักศึกษา สรุปคุณสมบัติของยูสเคสคือ ยูสเคส จะต้องถูกกระทำโดย แอ็กเตอร์ และเป็นผู้ติดต่อกับระบบตามยูสเคส ที่กำหนดไว้ และยูสเคส รับข้อมูลจากแอ็กเตอร์ และส่งข้อมูลให้แอ็กเตอร์ นั่นคือแอ็กเตอร์ กระทำกับยูสเคส โดยการส่งข้อมูลเข้าสู่ระบบตาม ยูสเคส หรือรอรับค่าที่ระบบจะส่งกลับให้ ยูสเคส ถือว่าเป็นการรวบรวมคุณลักษณะความต้องการในระบบอย่างสมบูรณ์ เปรียบเสมือน เป็นการสรุปความต้องการของผู้ใช้ ออกเป็นข้อ ๆ อย่างครบถ้วน 19 แอ็กเตอร์ (Actor) คือ ผู้ที่กระทำกับยูสเคส หรือใช้งานยูสเคส นั้น ๆ เช่น นักศึกษา อาจารย์ เจ้าหน้าที่ไม่ใช่ส่วนประกอบของระบบ แต่เป็นส่วนที่ใช้ติดต่อกับระบบ ซึ่งอาจเป็นเพียงการป้อน ข้อมูลเข้าสู่ระบบ หรือการส่งข้อมูลออกจากระบบ หรืออาจเป็นทั้งสองอย่าง แอ็กเตอร์ ในระบบแบ่งได้เป็น 2 ประเภทโดยประเภทแรกคือ แอ๊กเตอร์หลัก หมายถึง แอ็กเตอร์ ที่มีความสำคัญโดยตรงต่อความสามารถหลักของระบบซึ่งถูกแสดงด้วยยูสเคส ผู้ใช้งาน ระบบจะให้ความสำคัญกับงานที่แอ๊กเตอร์หลักจะต้องกระทำมากที่สุด ส่วนประเภทที่สองคือ แอ๊กเตอร์รอง หมายถึงแอ็กเตอร์ ที่มีหน้าที่ความสำคัญรองลงไปจากแอ็กเตอร์หลัก ความสัมพันธ์ระหว่างยูสเคส มีอยู่ 2 ชนิดแตกต่างกันออกไปได้แก่ ความสัมพันธ์แบบขยาย (Extend Relationship) ยูสเคส หนึ่งอาจถูกช่วยเหลือโดยการทำงานยูสเคสอื่น สัญลักษณ์ในยูเอ็ม แอล คือลูกศรเส้นประที่ชี้จากยูสเคสแรกไปยังยูสเคส ที่ถูกช่วยเหลือหรือถูกขยาย โดยมีคำว่า “extend” อยู่ในเครื่องหมายสเตริโอไทป์ (Stereotype) <
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
เป็น website ที่ดีมากครับ ผมเข้ามาอ่านทุกวันเลย
ตอบลบ