95
จากตวั อย่างที่ผ่านมาจะพบว่ามีรหัสตน้ ฉบบั เป็ นจานวนมากท่ีผูเ้ ขียนโปรแกรมเร่ิมต้น
อาจจะยงั ไม่เขา้ ใจ แต่ไม่ตอ้ งกงั วลเพราะส่วนของรหัสตน้ ฉบบั ที่มากข้ึนดงั กล่าวน้ันเป็ นส่วนที่
โปรแกรมเน็ตบีนสร้างมาให้ ซ่ึงในตวั อย่างน้ีผูเ้ ขียนโปรแกรมไม่ตอ้ งเขียนเอง เพียงแต่ระบุชื่อ
ฟอร์มท่ีตอ้ งการสิ่งต่าง ๆ ทุก ๆ หมายเลขที่แสดงให้เห็นในตวั อยา่ งที่ 3.8 น้นั จะถูกสร้างเองโดย
อตั โนมตั ิท้งั หมด การเขียนโปรแกรมแบบน้ีจะเป็ นการเขียนโปรแกรมภาษาจาวาโดยวธิ ีลดั ที่ทาให้
ไดแ้ อพพลิเคชนั อยา่ งรวดเร็ว โดยผเู้ ขียนโปรแกรมเขียนรหสั ตน้ ฉบบั นอ้ ย ตามแนวทางของการ
เขียนโปรแกรมภาษาในยุคที่ 4 การประยุกตใ์ ชใ้ นลาดบั ต่อไปจะละคาสั่งส่วนของรหัสโปรแกรม
บางส่วนเอาไว้ เพราะเป็นส่วนท่ีโปรแกรมเน็ตบีนสร้างอตั โนมตั ิให้แลว้ ตวั อยา่ งที่นามาอา้ งจะเนน้
การใชง้ านส่วนท่ีเป็นแนวคิดและส่วนการจดั การในเน้ือหาเชิงวตั ถุเทา่ น้นั
สรุป
โปรแกรมภาษาจาวาเป็ นโปรแกรมภาษาท่ีกาลงั ไดร้ ับความนิยมในปัจจุบนั สามารถดาวน์
โหลดได้ท่ี http://www.oracle.com/technetwork/java/index.html โดยไม่เสียค่าใช้จ่าย การพฒั นา
โปรแกรมดว้ ยภาษาจาวา สามารถพฒั นาดว้ ยเคร่ืองมือท่ีเป็นอิดิเตอร์ทว่ั ไป และพฒั นาดว้ ยเคร่ืองมือ
ท่ีเป็ นไอดีอีทูล ที่สามารถพฒั นาโปรแกรมได้รวดเร็ว ตามแนวทางการพฒั นาแบบยุคท่ี 4 (4th
Generation Language) ที่เป็ นท่ีนิยมในปัจจุบนั หลกั การเขียนตน้ ฉบบั และรูปแบบไวยากรณ์
(Syntax) ของภาษามีความคลา้ ยคลึงกบั ภาษาซีเป็ นอยา่ งมาก ยกเวน้ ส่วนที่ดาเนินการกบั ออ็ บเจกต์
เท่าน้นั ชนิดของขอ้ มูลที่มีในภาษาจาวาจะประกอบดว้ ย 2 ประเภทหลกั คือ ขอ้ มูลพ้ืนฐาน และ
ขอ้ มูลแบบอา้ งอิง โครงสร้างของการเขียนโปรแกรมจะเขียนโปรแกรมโดยใชค้ ลาส ซ่ึงคลาสท่ีจะ
ให้รันโปรแกรมได้ จะตอ้ งต้งั ช่ือให้ตรงกบั ช่ือแฟ้ มที่บนั ทึก และตอ้ งมีเมธอด main อยดู่ ว้ ยเสมอ
ส่วนของการควบคุมส่วนยอ่ ย ๆ ของโปรแกรมยงั มีหลกั การทางานตามลาดบั เง่ือนไข และการวน
ซ้ า เช่นเดียวกันกับการเขียนโปรแกรมภาษาเชิงโครงสร้าง นอกจากน้ันการพัฒนาโดยใช้
โปรแกรมเน็ตบีน ยงั ช่วยใหพ้ ฒั นาส่วนการติดต่อกบั ผใู้ ชง้ ่ายข้ึน
96
แบบฝึ กหดั ท้ายบท
1. Write Once Run Anywhere หมายถึงอยา่ งไร
2. จงบอกวธิ ีการดาวนโ์ หลดโปรแกรมภาษาจาวา
3. จงอธิบายวธิ ีการติดต้งั โปรแกรมภาษาจาวา
4. จงอธิบายวธิ ีการคอมไพลแ์ ละรันโปรแกรมดว้ ยภาษาจาวา
5. จงยกตวั อยา่ งตวั ดาเนินการดว้ ยภาษาจาวาอยา่ งนอ้ ย 10 ตวั ดาเนินการ
6. จงยกตวั อยา่ งโครงโปรแกรมในการคานวณเพอ่ื แสดงสูตรคูณจากแม่ 2-12
7. จงยกตวั อยา่ งโครงโปรแกรมในการคานวณเพือ่ แสดงสูตรคูณจากแม่ 2-12 โดยใชล้ ูป for
8. จงยกตวั อยา่ งโครงโปรแกรมแสดงสูตรคูณจากแม่ 2-12 โดยใชล้ ูป do..while
9. จงอธิบายและยกตวั อยา่ งโครงสร้างขอ้ มูลท่ีเป็น abstract data type ของภาษาจาวา
10. จงอธิบายและยกตวั อยา่ งโครงสร้างขอ้ มลู แบบ Array, Vector, และ Hash element
11. จงสรุปประวตั ิของภาษาจาวา
12. จงรูปแบบแฟ้ มของภาษาจาวา
13. จงเขียนโปรแกรมแสดงสูตรคูณจากแม่ 2-12 โดยใชจ้ าวาสวงิ
14. จงเขียนโปรแกรมรับขอ้ มูลคะแนนนกั ศึกษาอยา่ งนอ้ ย 10 คนหลงั จากน้นั หาค่าผลรวม
คา่ เฉล่ีย และฐานนิยมของคะแนนชุดดงั กล่าว
15. จงอธิบายความสาคญั ของจาวเวอร์ชวลแมชชีน วา่ มีความสาคญั ตอ่ การเขียนโปรแกรมดว้ ย
ภาษาจาวาอยา่ งไรบา้ ง
97
เอกสารอ้างองิ
กิตติ ภกั ดีวฒั นกุล. (2543 ก). JAVA ฉบับพนื้ ฐาน. กรุงเทพฯ: ไทยเจริญการพมิ พ.์
_________. (2543 ข). JAVA ฉบบั โปรแกรมเมอร์. กรุงเทพฯ: ไทยเจริญการพิมพ.์
ธีรวฒั น์ ประกอบผล. (2552). คู่มอื การเขียนโปรแกรมภาษา Java. กรุงเทพฯ: ซคั เซส มีเดีย.
_________. (2545). การโปรแกรมภาษาซีสาหรับงานวทิ ยาศาสตร์. กรุงเทพฯ: ส.ส.ท.
_________. (2553). คู่มอื การเขยี นโปรแกรมภาษา Java. กรุงเทพฯ: ซิมพลิฟลาย.
พนิดา พานิชกุล. (2554). การเขียนโปรแกรมคอมพวิ เตอร์เบือ้ งต้นด้วยภาษาจาวา. พิมพค์ ร้ังท่ี 5.
กรุงเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
Brett Spell. (2000). Professional Java Programming. USA: Wrox Press Ltd. Arden House, 1102
Warwick Road, Acocks Green, Birmingham, B27 6BH, UK.
Bruce Eckel. (2000). Thinking in Java. 2nd . USA: Prentice Hall PTR Prentice-Hall.
David Etheridge. (2009). Java:The Fundamentals of Objects and Classes-An Introduction to
Java Programming. Ventus Publishing Aps. [Online]. Available:
http://www.BookBoon.com.
“Characters”.(2009). [Online] Available: java.sun.com/docs/books/tutorial/java/data
/characters.html.
“Files I/O”. (2009). [Online]. Available : http://java.sun.com/docs/books/tutorial/essential/io/
fileio.html.
“Getting Started”. (2009). [Online]. Available : http://java.sun.com/docs/books/tutorial
/getStarted/index.html.
“How to read from standard input”. (2009). [Online]. Available : www.java2s.com/
Code/Java/Development-Class/Commandlineinput.htm.
Itemelody. (2007). “ค่าคงท่ี และชนิดข้อมูล” . (Literal & Data Type) . [Online]. Available :
http://www.itmelody.com/tu/java3.html.
Javaunkies.org. (2007). Java Basics: Data Types [Online]. Available :
http://www.javajunkies.org/index.pl?lastnode_id=888&node_id=893.
“JDKTM 6 Documentation”.(2009). [Online] Available: http://java.sun.com/javase/6/docs/
index.html.
98
“Java Operators”. (2009). [Online]. Available : http://www.ibiblio.org/java
/course/week2/03.html.
“JavaTM Platform, Standard Edition 6 Overview”. (2009). [Online] Available:
http://java.sun.com/javase/6/docs/technotes/guides/index.html.
“Lesson: Basic I/O”. (2009). [Online]. Available: http://java.sun.com/docs/books
/tutorial/essential/io/index.html.
“Lesson: Exceptions”. (2009). [Online]. Available: http://java.sun.com/docs/books/tutorial
/essential/exceptions/.
“Lesson: Numbers and Strings”. (2009). [Online]. Available: http://java.sun.com/docs/books
/tutorial/java/data/index.html.
“Lesson 3:Loop”. (2007). [Online]. Available: http://www.cprogramming.com
/tutorial/lesson3.html.
“Operators”. (2009). [Online]. Available: http://java.sun.com/docs/books/tutorial/java
/nutsandbolts/operators.html.
“Reading and writing text files”. (2009). [Online]. Available: http://www.javapractices.com/
topic/TopicAction.do?Id=42.
Robert Eckstein, Morc Loy and Dave Wood. (1988). Java Swing. USA: O'Reilly & Associates.
Robert Lafore. (2003). Data Structures & Algorithms in Java second Edition . 2nd . USA:
Sams Publishing. 201 West 103rd Street, Indeanapolis, Indiana.
Simol Kendal. (2009). Object Orientted Programming using Java. Ventus Publishing Aps.
[Online]. Available: http://www.BookBoon.com.
Sun Microsystems.(2007 A). “Class ButtonGroup” [Online]. Available: http://java.sun.com/j2se
/1.4.2/docs/api/javax/swing/ButtonGroup.html.
_________. (2007 B). “Class JCheckBox” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JCheckBox.html
_________. (2007 C). “Class JDesktopPane” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JDesktopPane.html.
_________. (2007 D). “Class JInternalFrame” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JInternalFrame.html.
99
_________. (2007 E). “Class JList” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JList.html
_________. (2007 F). “Class JProgressBar” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JProgressBar.html.
_________. (2007 G). “Class ScrollBar” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JScrollBar.html.
_________. (2007 H). “Class JSlider” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JSlider.html.
_________. (2007 I). “Class JSpinner” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JSpinner.html.
_________. (2007 J). “Class JSplitPane” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JSplitPane.html.
_________. (2007 K). “Class JTabbedPane” [Online]. Available: http://java.sun.com
/j2se/1.4.2/docs/api/javax/swing/JTabbedPane.html.
_________. (2007 L). “Primitive Data Types”. [Online]. Available : http://java.sun.com
/docs/books/tutorial/java/nutsandbolts/datatypes.html.
_________. (2007 M). “What Is a Class” . [Online]. Available. http://java.sun.com
/docs/books/tutorial/java/concepts/class.html
_________. (2007 N). “Class JSplitPane” [Online]. Available: http://java.sun.com/j2se/1.4.2/
docs/api/javax/swing/JSplitPane.html.
Wikipedia. (2011). “Object-oriented programming”. [Online] Available:
http://en.wikipedia.org/wiki/Object-oriented_programming.
Y. Daniel Liang. (2007). Introduction to Java Programming. USA: Pearson Prentice Hall
Pearson Education, Inc.
บทที่ 4
การจาลองสรรพสิ่งด้วยแนวคดิ เชิงวตั ถุ
การเขียนโปรแกรมเชิงวตั ถุ เริ่มตน้ จากแนวคิดของการออกแบบโปรแกรม โดยเริ่มคิดจาก
สิ่งที่เป็นรูปธรรมในชีวติ ประจาวนั แลว้ จึงเริ่มคิดเขา้ หาสิ่งท่ีเป็ นนามธรรม ข้นั แรกตอ้ งเรียนรู้วา่ สิ่ง
ใดบา้ งท่ีเรียกวา่ วตั ถุ หลงั จากน้นั จึงเรียนรู้สิ่งที่เป็ นองคป์ ระกอบของวตั ถุ แลว้ จึงแปลงจากส่ิงที่เป็ น
วตั ถุใหเ้ ป็นคลาส และแปลงเป็นส่วนของรหสั โปรแกรมต่อไป บทน้ีนาเสนอแนวคิดของการจาลอง
สรรพสิ่งด้วยแนวคิดเชิงวตั ถุ โดยเร่ิมจากกาหนดส่ิงที่เป็ นวตั ถุ การสร้างคลาส การสร้างวตั ถุ
แนวคิดเรื่องความสัมพนั ธ์ของคลาส การรับทอดคุณสมบตั ิ และการขบั เคลื่อนการทางานของวตั ถุ
ซ่ึงเป็นแนวคิดของการเขียนโปรแกรมเชิงวตั ถุเบ้ืองตน้
วตั ถุ
ความหมายของวตั ถุ
เคย์ ฮอร์ทแมนน์ (Cay Horstmann, 2002, p. 39) กล่าวา่ วตั ถุ (Object) คือ ส่ิงท่ีมีอยจู่ ริงใน
โปรแกรมคอมพิวเตอร์ซ่ึงมีลกั ษณะประจาตวั อยู่ 3 อยา่ งคือ สถานะ (State) พฤติกรรม (Behavior)
และ รูปลกั ษณะ (Identity)
พนิดา พานิชกุล (2548, หน้า 5) กล่าวว่า หลกั การเขียนโปรแกรมเชิงวตั ถุ ซ่ึงมองทุกส่ิง
ทุกอยา่ งเป็นวตั ถุในชีวติ ประจาวนั ของมนุษย์ ที่มองทุกส่ิงท่ีอยรู่ อบตวั เราเป็ นวตั ถุเสมอ ในโลกของ
ความเป็นจริงแลว้ วตั ถุที่เราสนใจมี 2 ประเภทคือ ส่ิงที่จบั ตอ้ งไดแ้ ละสิ่งที่จบั ตอ้ งไม่ได้ และพนิดา
ยงั กล่าวอีกวา่ (พนิดา พานิชกุล, 2548, หนา้ 9) โดยพ้ืนฐานแลว้ วตั ถุจะตอ้ งมีองคป์ ระกอบ 2 อยา่ ง
ไดแ้ ก่คุณลกั ษณะ (Attribute) และการดาเนินการ (Operation/Method)
พิเชษฐ์ ศิริรัตนไพศาลกุล (2553, หน้า 138) กล่าว่า อ็อบเจกตท์ ่ีเกิดมาจากคลาสเรียกว่า
อินสแตน(Instance) โดยส่วนประกอบท่ีสืบทอดมาจากคลาสคือตวั แปรต่างๆ ในคลาส ซ่ึงตวั แปร
ยงั แบง่ ไดเ้ ป็นคลาสวาริเอเบิล (Class Variable) กบั อินสแตนวาริเอเบิล(Instance Variable)
กิติพงษ์ กลมกล่อม (2552, หนา้ 5) คาวา่ Object Orientation มาจากคาวา่ Object ซ่ึงแปลวา่
วตั ถุท้งั ที่จบั ตอ้ งไดแ้ ละไม่ได้ ส่วนคาวา่ Orientation มาจากคาวา่ Orient ซ่ึงเป็ นคากริยาแปลวา่ นา
101
ทางไปหรือนาไป เมื่อนาคาท้งั สองมารวมกนั แลว้ จะหมายถึง การใชว้ ตั ถุหรือแนวคิดเก่ียวกบั วตั ถุ
เป็นแนวทางไปพิจารณาความเป็นจริงตา่ งๆ ท่ีเกิดข้ึนในโลก
จากความหมายของวตั ถุที่ได้กล่าวแลว้ เบ้ืองต้น สรุปได้ว่า วตั ถุ คือ สรรพสิ่งท้งั ที่เป็ น
รูปธรรมที่สามารถจบั ตอ้ งไดแ้ ละนามธรรมซ่ึงไม่สามารถจบั ตอ้ งได้ เช่น วตั ถุท่ีเป็ นรูปธรรม ไดแ้ ก่
คน สัตว์ ส่ิงของ รถยนต์ ที่อย่อู าศยั พาหนะ หรือวตั ถุท่ีเป็ นนามธรรมไดแ้ ก่ กฎหมาย ประเพณี
ความดี ความเป็นเจา้ ของ เป็นตน้
ส่วนประกอบของวตั ถุ
กิติพงษ์ กลมกล่อม (2552, หน้า 8-10) กล่าวว่าวตั ถุทุกตวั จะต้องมีองค์ประกอบ 3
องคป์ ระกอบไดแ้ ก่ แอตทริบิวต์ เมธอด และความเป็นเป็นปัจเจกเจก (Unique Identity)
- แอตทริบิวตค์ ือส่ิงท่ีใชใ้ นการบรรยายคุณลกั ษณะของวตั ถุ
- เมธอดคือกิจกรรม (Activities) เกิดข้ึนจากการกระทาและโตต้ อบกนั ของวตั ถุต่างๆ
ของระบบ
- ความเป็ นปัจเจก คือ ทุกวตั ถุท่ีอย่ใู นคลาสเดียวกนั จะตอ้ งมีเอกลกั ษณ์ประจาตวั ที่
สามารถจาแนกความแตกต่างระหวา่ งวตั ถุได้
วาย. แดเนียล เหลียง (Y. Daniel Liang, 2007, p. 215) กล่าววา่ วตั ถุมีองคป์ ระกอบคือ ความ
เป็ นปัจเจก สถานะ (State) และพฤติกรรม (Behavior) ซ่ึงสถานะคือสิ่งที่แทนฟิ ลด์ของขอ้ มูล (รู้จกั
กนั ในนามของคุณลกั ษณะอีกดว้ ย) ดว้ ยคา่ ปัจจุบนั ของวตั ถุน้นั ๆ ส่วนพฤติกรรมถูกกาหนดโดยเซต
ของกระบวนการ การกระตุน้ วตั ถุหมายถึงการสง่ั ใหว้ ตั ถุทางาน
วตั ถุประกอบดว้ ย แอตทริบิวต์ เมธอด และความเป็ นเอกลกั ษณ์ที่แสดงความเป็ นปัจเจก
ของวตั ถุ รายละเอียดตอ่ ไปน้ีนาเสนอเฉพาะแอตทริบิวตแ์ ละเมธอดเท่าน้นั เน่ืองจากวา่ การสร้างวตั ถุ
ตา่ งๆ จากคลาสน้นั จะมีความเป็นเอกลกั ษณ์เฉพาะอยแู่ ลว้
1. แอตทริบิวต์ (Attribute)
พนิดา พานิชกุล (2548, หนา้ 9) แอตทริบิวต์ หรือเรียกไดอ้ ีกอยา่ งวา่ Object Data เป็ นสิ่งท่ี
ใชบ้ รรยายคุณลกั ษณะของวตั ถุ ซ่ึงหากเป็ นวตั ถุท่ีอยใู่ นคลาสเดียวกนั จะมีคุณลกั ษณะเหมือนกนั
แอตทริบิวต์หรือคุณสมบตั ิของวตั ถุคือ ขอ้ มูลของวตั ถุน้นั ๆ ที่มีอยู่ เช่น วตั ถุรถยนต์ จะประกอบ
ดว้ ยขอ้ มูลภายในไดแ้ ก่ จานวนลอ้ สี วสั ดุที่นามาใช้ รุ่น ยห่ี อ้ เป็นตน้
ยาคอบ เฟน (Yacov Fain, 2004, p. 22) คลาสในจาวาอาจมีเมธอดและแอตทริบิว เมธอด
กาหนดการกระทาซ่ึงคลาสจดั เตรียมไว้ ส่วนแอตทริบิวตใ์ ชส้ าหรับอธิบายคลาส
ดงั น้นั แอตทริบิวต์ คือ ขอ้ มูล (Data) ลกั ษณะประจาของแต่ละวตั ถุ คุณสมบตั ิของวตั ถุ
ตวั อยา่ งของวตั ถุอื่น ๆ เช่น
102
- คน มีแอตทริบิว คือ ช่ือ, สกลุ , ท่ีอย,ู่ วนั เกิด,เพศ,เบอร์โทรศพั ท์
- สุนขั มีแอตทริบิว คือ ช่ือ,สี,พนั ธุ์
- จกั รยาน มีแอตทริบิว คือ ลอ้ ,สี,เกียร์
2. เมธอด (method)
พนิดา พานิชกุล (2548, หนา้ 9) กล่าววา่ วตั ถุทุกชนิดจะมีพฤติกรรม (Behavior) ซ่ึงแสดง
หน้าท่ีของตนร่วมกับวตั ถุอ่ืน ๆ ที่มีหน้าที่ต่างกัน และการเขียนโปรแกรมแบบเก่าจะถือว่า
พฤติกรรมดงั กล่าวเป็น Procedure, Function หรือ Subroutine แต่การเขียนโปรแกรมเชิงวตั ถุเรียกวา่
เมธอด หรือในข้นั ตอนการวเิ คราะห์ระบบจะเรียกวา่ โอเปอเรชนั
เมธอด คือ ฟังก์ชนั โมดูล หรือตวั ดาเนินการของแต่ละวตั ถุที่ทาหน้าท่ีอย่างใดอยา่ งหน่ึง
ให้กบั วตั ถุน้นั ๆ บางทีเรียกว่าพฤติกรรมที่วตั ถุแสดงออกมาได้ ซ่ึงอาจเรียกด้วยช่ืออยา่ งอื่น เช่น
โปรซีเดอร์ (Procedure) ฟังก์ชนั (Function) สับรูทีน (Subroutine) โอเปอร์ชนั (Operation) เป็ นตน้
ตวั อยา่ ง เช่น
- วตั ถุรถยนตจ์ ะมีเมธอดไดแ้ ก่ วงิ่ เล้ียวซา้ ย เล้ียวขวา ถอยหลงั เป็นตน้
- วตั ถุของคน มีเมธอด คือ การเดิน,การยนื ,มีรถ
- สุนขั มีเมธอด คือ การเห่า,การหายใจ,การกระดิกหาง
- จกั รยาน มีเมธอด คือ การเบรก,การเร่ง,การชะลอ
เพ่ือความเขา้ ใจมากข้ึนจงพิจารณาตวั อยา่ งที่ 4.3 และ 4.4 ยกตวั อยา่ งการคิดในแนวคิด
เชิงวตั ถุ คุณสมบตั ิ และเมธอด
ตัวอย่างที่ 4.1 จงยกตวั อยา่ งแอตทริบิวตแ์ ละเมธอดของวตั ถุต่อไปน้ี
- แมว
- นายแพทย์
- หนงั สือ
- ระเบียบการแตง่ กาย
แนวคดิ การตอบคาถาม
แมว :
แอตทริบวิ ต์ : สีขน สีตา น้าหนกั สายพนั ธุ์ เป็นตน้
เมธอด : กิน นอน เดิน วงิ่ ขบั ถ่าย จบั หนู เป็นตน้
103
นายแพทย์ :
แอตทริบิวต์ : ชื่อ สกุล หมายเลขบตั รประจาตวั หมายเลขทะเบียนของแพทย์
ประเภทของแพทย์ สถานที่ทางาน เป็นตน้
เมธอด : กิน นอน เที่ยว รักษาคนไข้ ฉีดยา เป็นตน้
หนังสือ:
แอตทริบิวต์ : จานวนหน้า ประเภท ราคา วสั ดุที่พิมพ์ ปี ท่ีพิมพ์ สานักพิมพ์
เป็ นตน้
เมธอด : คงสภาพอยู่ ฉีกขาด แสดงชื่อและรายละเอียดตนเอง เป็นตน้
ระเบียบการแต่งกาย :
แอตทริบิวต์ : ชื่อระเบียบ จานวนขอ้ ขอ้ มูลการบงั คบั กบั ใคร มาตรการลงโทษ
เป็ นตน้
เมธอด : บงั คบั ใช้ ลงโทษผฝู้ ่ าฝืน การแสดงชื่อตนเอง เป็นตน้
จากรายละเอียดเกี่ยวกบั วตั ถุ แอตทริบิวต์ และเมธอด ท่ีไดก้ ล่าวมา หากนามาเขียนให้ง่าย
ต่อการเข้าใจ และคล้ายกับคลาสไดอะแกรมต่อไป สามารถแทนแนวคิดเกี่ยวกับวตั ถุให้เป็ น
รูปภาพโดยแบ่งส่วนของการนาเสนอออกเป็ น 3 ส่วนคือ ช่ือวตั ถุ แอตทริบิวตต์ ่างๆ และเมธอด
ท้งั หมด อาจแสดงไดด้ งั ภาพน้ี
ช่ือวตั ถุ:
แอตทริบิวต์ :
เมธอด :
ภาพที่ 4.1 ภาพแสดงการจาลองแนวคิดการแบ่งสิ่งท่ีเก่ียวขอ้ งเป็นภาพ
ตวั อยา่ งเช่น
ชื่อวตั ถุ: รถจกั รยาน
แอตทริบวิ ต์ : ลอ้ สี เกียร์ โครง บนั ได
เมธอด : การเบรก การเร่ง การชะลอ
ภาพท่ี 4.2 ภาพแสดงการจาลองแนวคิดการแบ่งส่วนของวตั ถุจกั รยาน
104
ตัวอย่างท่ี 4.2 จากตวั อย่างที่ 4.1 จงนาวตั ถุ แอตทริบิวต์ และเมธอด ของแมว และระเบียบการ
แตง่ กาย มาเขียนในรูปแบบต่อไปน้ี
ช่ือวตั ถุ:
แอตทริบิวต์ :
เมธอด :
ภาพที่ 4.3 ภาพแสดงการจาลองแนวคิดการแบง่ ส่วนของตวั อยา่ งที่ 4.2
แนวคิดการตอบคาถามดงั น้ี
แมว :
ช่ือวตั ถุ: แมว
แอตทริบวิ ต์: สีขน สีตา น้าหนกั สายพนั ธุ์
เมธอด : กิน นอน เดิน วงิ่ ขบั ถ่าย จบั หนู
ภาพท่ี 4.4 ภาพแสดงการจาลองแนวคิดการแบง่ ส่วนของแมว
105
ระเบยี บการแต่งกาย :
ช่ือวตั ถุ: ระเบียบการแต่งกาย
แอตทริบิวต์: ชื่อระเบียบ จานวนขอ้
ขอ้ มลู การบงั คบั กบั ใคร มาตรการลงโทษ
เมธอด : บงั คบั ใช้ ลงโทษผฝู้ ่ าฝืน การแสดง
ชื่อตนเอง
ภาพที่ 4.5 ภาพแสดงการจาลองแนวคิดการแบง่ ส่วนของระเบียบการแต่งกาย
ตัวอย่างที่ 3.3 จงเขียนแสดงคุณสมบตั ิและเมธอดของโปรแกรมเครื่องคิดเลข
ช่ือวตั ถุ: เคร่ืองคิดเลข
แอตทริบวิ ต์: ยหี่ อ้ , สี, ราคา, จานวนป่ ุม
เมธอด : บวก, ลบ, คูณ และหาร
ภาพที่ 4.6 ภาพแสดงการจาลองแนวคิดการแบง่ ส่วนของเครื่องคิดเลข
คลาส
บริษทั ซนั ไมโครซิสเตม็ (Sun Microsystems ,2007) กล่าววา่ คลาสคือพิมพเ์ ขียวซ่ึงจะตอ้ ง
ถูกสร้างข้ึนมาจากคลาสเดี่ยว วีกีพีเดีย (Wikipedia, 2007) กล่าววา่ คลาส คือ การเขียนโปรแกรม
ภาษาคอมพิวเตอร์ซ่ึงจดั กลุ่มเก่ียวกบั ฟิ ลดแ์ ละเมธอด พนิดา พานิชกุล (2548, หนา้ 7) กล่าววา่ คลาส
คือ กลุ่มของวตั ถุที่ลกั ษณะคลา้ ยกนั ตามที่ใหค้ วามคิดรวบยอดไว้ (Concept)
106
ยาคอบ เฟน(Yacov Fain, 2007, p. 215-216) กล่าววา่ คลาส คือ แม่แบบ(Template) หรือ
พิมพเ์ ขียว(Blueprint) ซ่ึงกาหนดว่าวตั ถุ(Object) จะมีขอ้ มูล(Data) และเมธอดอะไรและยาคอบ
ยงั ใหแ้ นวคิดเป็นแผนภาพดงั น้ี
Class Name: Circle
Data Field : radius is _________
Method : getArea
ภาพที่ 4.7 ภาพแสดงแม่แบบของวตั ถุของ Circle
วตั ถุของคลาส Circle จานวน 3 วตั ถุ
Circle Object1 Circle Object2 Circle Object3
Data Field : radius is 10 Data Field : radius is 5 Data Field : radius is 30
Method : getArea Method : getArea Method : getArea
ไซมอล เคนดลั (Simol Kendal, 2009, p.20-21) กล่าวไวว้ า่ ในการเขียนโปรแกรมเชิงวตั ถุ
น้นั จะตอ้ งกาหนดคุณลกั ษณะของกลุ่มหรือประเภท(Class) ของวตั ถุ และหลงั จากน้นั จะทาการ
สร้างวตั ถุเด่ียว (Individual Object) จากคลาสที่สร้างไว้ ซ่ึงเป็นไปตามแนวคิดท่ีเป็นภาพดงั น้ี
Class
Object1 Object1 Object1
ภาพที่ 4.8 ภาพแสดงการใชง้ านคลาสของไซมอล
107
ไซมอล ไดก้ ล่าวสรุปไวอ้ ีกว่า คลาส คือการออกแบบซอฟต์แวร์ ซ่ึงอธิบายคุณลกั ษณะ
ทว่ั ไปของบางสิ่งบางอย่างที่เป็ นกระบวนการออกแบบ(Modelling) ซอฟต์แวร์ท่ีจะใช้งานต่อไป
ส่วนวตั ถุเด่ียวจะถูกสร้างจากคลาสที่ออกแบบไวข้ องแต่ละส่ิงแต่ละอย่างท่ีใช้งานจริง(Actual
Thing)
ดงั น้ัน คลาส (Class) คือ พิมพ์เขียวของวตั ถุ หรือแม่แบบสาหรับท่ีจะสร้างวตั ถุต่าง ๆ
ข้ึนมา เน่ืองจากการเขียนโปรแกรมแบบน้ีจะตอ้ งสร้างวตั ถุข้ึนมาก่อนแลว้ จึงเรียกใชง้ านเมธอดต่าง
ๆ ท่ีมีอยขู่ องแต่ละวตั ถุ แนวคิดของคลาสสาหรับผูเ้ ริ่มตน้ เขียนโปรแกรมแบบน้ีให้พิจารณาจากที่
เป็ นรูปธรรมไปหานามธรรม ดงั น้นั การออกแบบคลาสน้นั ผเู้ ขียนแนะนาวา่ ใหพ้ ิจารณาจากวตั ถุท่ี
เห็นไดง้ ่าย ๆ ไปสู่ส่ิงท่ีเป็ นนามธรรม คือ คลาสในรูปแบบการประยุกตใ์ ช้ น่าจะทาความเขา้ ใจได้
ง่ายข้ึน ใหพ้ จิ ารณาจากภาพเพ่อื แยกความแตกต่างระหวา่ งคลาสและวตั ถุ
ภาพที่ 4.9 แสดงขอ้ แตกต่างระหวา่ งคลาสและวตั ถุเก่ียวกบั คน
(ที่มา : จากสไลดเ์ ร่ือง Object Oriented Programming, Tal Pasternak, ISIS )
จากนิยามของคลาสท่ีกล่าวไปแลว้ คลาสคือแม่แบบของวตั ถุ เช่นดงั ภาพ จะพบว่าคลาส
ผหู้ ญิงเป็ นแม่แบบของ Jane และคนอื่นๆ ที่เป็ นผหู้ ญิงท้งั หมด ซ่ึง Jane และเพื่อน ๆ ต่างเป็ นวตั ถุ
ของคลาสผหู้ ญิงเป็ นตน้ ขอ้ ที่น่าสังเกตคือเมื่อกล่าวถึงคลาสผหู้ ญิงจะมองภาพผหู้ ญิงไม่ออก แต่ถา้
พิจารณาช่ือคน เช่น Jane จะสามารถเดินไดด้ าเนินการต่าง ๆ ได้ แต่คลาสผหู้ ญิงไม่สามารถทางาน
อะไรไดเ้ ลย เป็นเพียงแมแ่ บบใหแ้ ก่วตั ถุของ Jane และเพื่อน ๆ เท่าน้นั หากตอ้ งการให้มีชีวติ ทางาน
ข้ึนมาจริงตอ้ งนาคลาสผหู้ ญิงมาสร้างเป็ นวตั ถุข้ึนมาเสียก่อน ซ่ึงหลกั น้ีเป็ นหลกั ท่ีสาคญั ยิง่ ของการ
ออกแบบและเขียนโปรแกรมเชิงวตั ถุ
108
ตวั อย่างท่ี 4.4 กาหนดใหม้ ีคาต่อไปน้ี ควาย ควายช่ือเผือกและควายช่ือฉ่า จงนามาเขียนจาแนกเป็น
ภาพตามแนวคิดของคลาสและวตั ถุ
แนวคิดการแสดง : ควาย เป็ นแนวคิดเชิงนามธรรมที่ไม่มีตวั ตน กล่าวคือในโลกของควาสเป็นจริง
เราไมส่ ามารถเดินหาวตั ถุควายในทอ้ งนาได้ ดงั น้นั ควายจึงเป็นแมแ่ บบของควายท่ีมีตวั ตนจริงๆ
ส่วน ควายชื่อเผอื ก และควายชื่อฉ่า คือควายที่มีตวั ตนอยจู่ ริงในโลกเราสามารถเดินหาได้
อยา่ งไรกต็ ามควายท่ีมีช่ือแต่ละตวั เหล่าน้ีก็เกิดจากแม่แบบที่ช่ือควาย ซ่ึงคุณลกั ษณะและการกระทา
ตา่ งๆ ที่ควายทาได้ ควายท่ีมีชื่อเหล่าน้ีสามารถทาไดท้ ้งั หมด
ดงั น้ีการเขียนรูปภาพไดด้ งั น้ี
ภาพท่ี 4.10 แสดงคลาสและวตั ถุควาย
ตวั อย่างที่ 4.5 จากวตั ถุท่ีกาหนดใหต้ ่อไปน้ีจงแยกวา่ วตั ถุใดอยใู่ นคลาสใด
วตั ถุ: ปลาทู กบ ปลากระป๋ อง แมว หมา เสือ คอมพวิ เตอร์ ปากกา ดินสอ
สมุด ไมบ้ รรทดั ปู กบไสไม้ สิ่ว เล่ือย บา้ น ตึก ทาวน์เฮ้าส์ แมนชัน หอพกั สายไฟ หลอดไฟ
ตะเกียง
แนวคดิ ของการหาคาตอบ
การจาแนกคลาสน้นั ควรแบ่งวตั ถุออกเป็ นกลุ่ม ๆ ซ่ึงจากที่โจทยก์ าหนดควรแบ่งคลาส
ออกเป็นดงั น้ี
1. สัตว์ - ปลาทู กบ แมว หมา เสือ ปู
2. ของใช้ - คอมพิวเตอร์ ปากกา ดินสอ สมุด ไมบ้ รรทดั
กบไสไม้ สิ่ว เล่ือย ตะเกียง
109
3. ทอ่ี ยู่อาศัย -บา้ น ตึก ทาวนเ์ ฮา้ ส์ แมนชนั หอพกั
4. อปุ กรณ์ไฟฟ้ า - สายไฟ หลอดไฟ คอมพวิ เตอร์
5. สัตว์นา้ - ปลาทู
6. สัตว์ครึ่งบกคร่ึงนา้ - กบ
7. สัตว์ป่ า - เสือ กบ
8. เครื่องเขยี น - ปากกา สมุด ดินสอ ไมบ้ รรทดั
9. อาหาร – ปลาทู ปลากระป๋ อง กบ
การตดั สินวา่ สิ่งใดเป็ นวตั ถุส่ิงใดเป็ นคลาสน้นั ข้ึนอยกู่ บั การนาไปใช้และจุดสนใจของ
ผใู้ ชง้ านวตั ถุหรือคลาสน้นั ๆ เช่น หากพจิ ารณาคลาสเคร่ืองเขียนในตวั อยา่ งที่ 4.6 น้นั ประกอบดว้ ย
วตั ถุท่ียกตวั อย่างอยู่ในคลาสได้แก่ ปากกา สมุด ดินสอ ไมบ้ รรทดั หากพิจารณาเฉพาะปากกา
จะพบว่า ปากกาอาจเป็ นคลาสได้ เพราะว่าปากกามีหลากหลายชนิด เช่น ปากกาหมึกซึม
ปากกาลูกลื่น ปากกาอื่น ๆ อีก เป็นตน้ ดงั น้นั ดว้ ยเหตุผลของการใชง้ านคลาส หรือวตั ถุน้นั จะข้ึนอยู่
การนาไปใช้
ตัวอย่างที่ 4.6 จงแยกส่ิงตอ่ ไปน้ีวา่ อยใู่ นคลาสใด เพราะเหตุใด
Ship, TwoMainStreet, CruiseShip, Mansion, Cruise90938, VacationTrip, House,
PanamaShip89032, Bird, Ellipse, Animal, 2DFigure, Circle
แนวทางการตอบ
จากโจทยส์ ามารถแยกประเภทไดด้ งั น้ี
1. คลาส Ship-CruiseShip, Cruise90938, VocationTrip, PananmaShip89032
2. คลาส House-Mansion, TwoMainStreet
3. คลาส 2DFigure-Ellipse, Circle
4. คลาส Animal-Bird
ตวั อย่างท่ี 4.7 จงระบุรายละเอียดของคลาส ผลไม้ โดยแทนดว้ ยแผนภาพ
แนวคิด ใหก้ าหนดดงั น้ี
ชื่อคลาส : Fruit
แอททริบิวต์ : 1. น้าหนกั weight : Float
2. รสชาติ testy : String
110
3. สี color : String
4. ราคา price : double
เมธอด : 1. สุกได้ Ripe() : void
2. ร่วงได้ Fall() : void
3. เน่าได้ Fail(): void
คลาสไดอะแกรม
ภาพที่ 4.11 แสดงคลาสไดอะแกรมของตวั อยา่ งท่ี 4.7
วธิ ีการเปลยี่ นแนวคดิ เชิงวตั ถุเป็ นคลาสไดอะแกรม
จากความรู้ท่ีผ่านมาในบทที่แลว้ และการสร้างวตั ถุใด ๆ จะตอ้ งสร้างคลาสก่อนเสมอ
เน่ืองจากคลาสเป็นแม่แบบหรือพิมพเ์ ขียวของวตั ถุ แต่ในทางปฏิบตั ิแลว้ การท่ีจะสร้างคลาสใดๆ ได้
น้นั ผสู้ ร้างจะตอ้ งจินตนาการเห็นภาพหรือพิจารณาวตั ถุใหเ้ ป็ นรูปธรรมเพื่อไปออกแบบคลาสได้
ขอใหพ้ จิ ารณาตวั อยา่ งของเสือเฒา่ เชียร์คาน ตอ่ ไปน้ี
ภาพที่ 4.12 แสดงภาพที่เสือเฒ่าเชียร์คาน
111
ช่ือวัตถุ คือ เสือโคร่งชื่อ เชียร์คาน เป็ นเสือเพศผู้ ตวั สีเหลืองลายดาพาดกลอน ตาสีฟ้ า
สามารถสตั วอ์ ่ืนกินเป็นอาหารได้ นอนหลบั ได้ และขบั ถ่ายได้
แนวคดิ เชิงวตั ถุ
ชื่อวตั ถุ : เสือโคร่งเชียร์คาน
คุณสมบัติ : ตวั สีเหลืองลายดาพาดกลอน, ตาสีฟ้ า, มีเพศเป็ นเพศผ,ู้ มีขาส่ีขา, มีหางหน่ึง
หาง
พฤตกิ รรม : จบั สตั วอ์ ่ืน, กิน, นอน, ขบั ถ่าย
จากภาพและแนวคิดเชิงวตั ถุ จะพบว่าการมองท่ีตัววตั ถุของเสือทาให้สามารถเห็น
คุณลกั ษณะและพฤติกรรม ซ่ึงเป็ นแอตทริบิวต์และเมธอดไดอ้ ย่างชดั เจน อยา่ งไรก็ตามก่อนที่จะ
เป็นตวั เสือเชียร์คานข้ึนมาไดจ้ ะตอ้ งมีแม่แบบหรือรูปแบบของเสือโดยทวั่ ไปข้ึนมาก่อน เพราะการ
คิดและเขียนโปรแกรมเชิงวตั ถุตอ้ งยึดหลกั น้ีเสมอ ดงั น้ัน เอกสารประกอบการสอนเล่มน้ีจึงให้
จดจาข้นั ตอนของการคิดในทางสวนกลบั คือ ก่อนออกแบบคลาสให้พจิ ารณาหาวัตถุให้พบก่อนแล้ว
นาเอาวตั ถุน้ัน ๆ มาคดิ เป็ นแม่แบบ โดยมีแนวคิดและข้นั ตอนการเปลี่ยนจากวตั ถุเป็นคลาสไดด้ งั น้ี
1. ให้พิจารณาว่าวตั ถุน้นั เป็ นวตั ถุชนิดอะไร เช่นในภาพเสือเชียร์คาน เป็ นวตั ถุชนิด เสือ
เป็นตน้ หลงั จากน้นั กาหนดใหเ้ ป็นช่ือภาษาองั กฤษ ซ่ึงในกรณีน้ี เสือ คือ Tiger เป็นตน้
2. ให้เปล่ียนคุณสมบตั ิเป็ นภาษาอังกฤษ โดยระบุชนิดขอ้ มูลของคุณสมบตั ิดงั กล่าว โดย
ให้ยึดหลกั ของขอ้ มูลพ้ืนฐาน (Primitive type) พร้อมท้งั พิจารณาดว้ ยวา่ คุณลกั ษณะดงั กล่าวเป็ น
แบบ public private หรือ protected หากสามารถทาได้ หรือหากไม่แน่ใจใหร้ ะบุเป็ นแบบ public
เอาไวก้ ่อนก็ได้ เช่น ในกรณีตวั อยา่ งน้ีจะไดด้ งั น้ี
คุณสมบตั ิ : String bodyColor (ตวั สีเหลืองลายดาพาดกลอน), String eyesColor (ตาสี
ฟ้ า), Boolean Sex (มีเพศเป็ นเพศผู)้ , int numberOfLegs (มีขาสี่ขา), int numberOfTail (มีหางหน่ึง
หาง)
3. ใหเ้ ปลี่ยนชื่อพฤติกรรมหรือเมธอดเป็ นภาษาองั กฤษ พร้อมระบุค่าท่ีคืน (Return Type)
ระบุการเขา้ ถึง (Access Modifier) และพารามิเตอร์ (Parameter) หากสามารถทาไดห้ รือหากยงั ไม่
สามารถระบุไดใ้ หร้ ะบุการเขา้ ถึงเป็ น void และยงั ไม่ตอ้ งระบุพารามิเตอร์ก็ได้ เช่นตวั อยา่ งของเสือ
เชียร์คานจะไดด้ งั น้ี
พฤติกรรม : void catch()-จบั สัตวอ์ ื่น, void eat-กิน, void sleep-นอน, void defecate-
ขบั ถ่าย
112
4. นาเอาส่วนท่ีเปล่ียนแปลงแลว้ มาสร้างเป็ นคลาสตามสัญลกั ษณ์ของคลาสไดอะแกรม
ซ่ึงในตวั อยา่ งท่ีกล่าวมาจะไดค้ ลาสไดอะแกรมดงั น้ี
ภาพที่ 4.13 แสดงคลาสไดอะแกรมเสือ
5. หลงั จากน้นั ใหพ้ ิจารณาใหล้ ะเอียดวา่ แต่ละเมธอดท่ีสร้างข้ึนมีหนา้ อะไร ตอ้ งเขา้ ถึงแบบ
ใด และจาเป็ นตอ้ งมีการคืนค่าหรือไม่ หรือจาเป็ นตอ้ งมีพารามิเตอร์ในการทางานดว้ ยหรือไม่ ซ่ึง
รายละเอียดในเรื่องน้ีจะกล่าวในบทต่อไป ในบทน้ีตอ้ งการให้ผอู้ ่านสามารถแปลงจากแนวคิดเชิง
วตั ถุเป็นคลาสไดอะแกรมไดเ้ ท่าน้นั
เมื่อไดค้ ลาสแลว้ หากจะนามาสร้างวตั ถุตามแนวคิดของการสร้างวตั ถุสามารถนามาสร้าง
ไดด้ งั น้ี
Tiger Cheerkarn = new Tiger();
Cheerkarn.bodyColor= “เหลืองลายพาดกลอน”;
Cheerkarn.eyesColor= “สีฟ้ า”;
Cheerkarn.Sex=true;//หมายถึงเพศผู้
Cheerkarn.numberOfLegs=4;
Cheerkarn.numberOfTail=1;
หรือเรียกใชเ้ มธอดใหท้ างานดงั น้ี
Cheerkarn.catch();
Cheerkarn.eat();
113
Cheerkarn.sleep();
Cheerkarn.defecate();
สาหรับอีกแนวทางหน่ึงเม่ือสามารถคิดรายละเอียดคร่าว ๆ ของวตั ถุหรือคลาสโดยระบุวา่ มี
แอตทริบิวต์ได้ชัดเจน และเมธอดได้ชัดเจนแล้ว ทาให้สามารถแปลงเป็ นสัญลักษณ์คลาส
ไดอะแกรม ไดง้ ่ายดงั ตวั อยา่ งท่ี 4.8
ตัวอย่างที่ 4.8 จากตวั อยา่ งที่ 4.3 ระเบียบการแตง่ กาย มีรูปแบบเชิงวตั ถุดงั น้ี
แนวการวิเคราะห์
ระเบียบการแต่งกาย
แอตทริบิวต:์ ชื่อระเบียบ จานวนขอ้ ขอ้ มูลการบงั คบั กบั ใคร
มาตรการลงโทษ
เมธอด :บงั คบั ใช้ ลงโทษผฝู้ ่ าฝืน การแสดงชื่อตนเอง
ภาพที่ 4.14 แสดงแนวการวเิ คราะห์วตั ถุระเบียบการแตง่ กาย
วิธีการแปลงเป็ นคลาสไดอะแกรม ให้ดาเนินการเช่นเดียวกนั กบั การมองภาพเสือ ซ่ึงใน
ตวั อยา่ งน้ีจะไดร้ ายละเอียดการแปลงดงั น้ี
dressingRule:ระเบียบการแต่งกาย
แอตทริบิวต:์ String name-ช่ือระเบียบ,
int number-จานวนขอ้ ,
String usingFor-ขอ้ มลู การบงั คบั กบั ใคร
String punishMethod-มาตรการลงโทษ
เมธอด :void forceOrder()-บงั คบั ใช้
void punishing()-ลงโทษผฝู้ ่ าฝืน
String showName()-การแสดงช่ือตนเอง
ภาพท่ี 4.15 แสดงรายละเอียดวตั ถุระเบียบการแตง่ กาย
114
จากส่ิงท่ีวเิ คราะห์ได้ จึงนามาแสดงเป็นคลาสไดอะแกรมดงั น้ี
ภาพที่ 4.16 แสดงคลาสไดอะแกรมของตวั อยา่ งท่ี 4.8
ตัวอย่างท่ี 4.9 จงเขียนคลาสไดอะแกรมของโปรแกรมเครื่องคิดเลขท่ีมีหนา้ ท่ีการทางาน บวก ลบ
คูณ และหาร และแสดงผลลพั ธ์ได้ โดยมีคุณลกั ษณะที่สามารถกาหนดค่าตวั เลขตวั แรก ตวั เลขตวั ท่ี
สอง และผลของการคานวณ
แนวการวเิ คราะห์
เคร่ืองคิดเลข
แอตทริบิวต:์ ตวั เลขตวั แรก
ตวั เลขตวั ท่ีสอง
ผลการคานวณ
เมธอด :บวก
ลบ
คูณ
หาร
แสดงผล
ภาพที่ 4.17 แสดงแนวการวเิ คราะห์วตั ถุเครื่องคิดเลข
115
การแปลงสู่รายละเอียด
Calculator:เครื่องคิดเลข
แอตทริบิวต:์ double firstNumber-ตวั เลขตวั แรก
double-secondNumber-ตวั เลขตวั ท่ีสอง
double result-ผลการคานวณ
เมธอด :double plus(double a, double b)-บวก
double minus(double a, double b)-ลบ
double multiply(double a, double b)-คูณ
double divide(double a, double b)-หาร
double showResult()-แสดงผล
ภาพที่ 4.18 แสดงแนวการวเิ คราะห์รายละเอียดของวตั ถุเคร่ืองคิดเลข
คลาสไดอะแกรมท่ีสมบูรณ์
ภาพท่ี 4.19 แสดงคลาสไดอะแกรมของตวั อยา่ งท่ี 4.9
ตวั อยา่ งน้ีนาเสนอการพิจารณาว่า ตวั แปรที่อยู่ซ่ึงคือแอตทริบิวต์น้นั เป็ น - ซ่ึงทาให้ผูท้ ี่
นาเอาคลาสน้ีไปใช้ไม่สามารถกาหนดค่าให้กบั firstNumber, secondNumber และ result ได้
โดยตรง ในการออกแบบผูท้ ่ีนาเอาไปสร้างเป็ นวตั ถุน้นั จะใช้งานผา่ นการคานวณและส่ังแสดงผล
การคานวณโดยเมธอด showResult() เทา่ น้นั
116
จากตวั อยา่ งน้ีทาใหเ้ ห็นความยงุ่ ยากในการพจิ ารณาแอตทริบิวตแ์ ละเมธอดของแต่ละคลาส
มากข้ึนตามลาดบั โดยเฉพาะอย่างยิ่งหากเป็ นโปรแกรมคอมพิวเตอร์ที่จะตอ้ งเขียนข้ึนมาน้นั ตอ้ ง
พิจารณาใหถ้ ่ีถว้ นสาหรับการออกแบบ ใหศ้ ึกษาแนวทางจากตวั อยา่ งต่อไปน้ี
ตัวอย่างที่ 4.10 จงออกแบบโปรแกรมถอนเงินจากคลงั
แนวคิด จากตวั อยา่ งน้ีทาใหส้ ามารถพิจารณาเก่ียวกบั วตั ถุท่ีเก่ียวขอ้ งกบั โปรแกรมน้ีไดอ้ ยา่ งหยาบ
ที่สุดคือ คลงั เกบ็ เงิน และผถู้ อนเงิน ซ่ึงกาหนดรายละเอียดเชิงวตั ถุไดด้ งั น้ี
คลงั
แอตทริบิวต:์
จานวนเงินท่ีเหลือในคลงั
เมธอด :
ถอน
แสดงยอดเงินปัจจุบนั
ภาพที่ 4.20 แสดงการวเิ คราะห์วตั ถุคลงั
ผถู้ อนเงิน
แอตทริบิวต:์
ช่ือ
รหสั เจา้ หนา้ ที่
จานวนเงินที่ถอน
เมธอด :
ถอน
แสดงจานวนเงินที่ถอน
ภาพท่ี 4.21 แสดงการวเิ คราะห์วตั ถุผถู้ อนเงิน
117
วเิ คราะห์เพ่อื กาหนดรายละเอียดก่อนการเปล่ียนเป็ นคลาสไดอะแกรม
TreasuryReserv:คลงั
แอตทริบิวต:์
double balance-จานวนเงินที่เหลือในคลงั
เมธอด :
double withdraw(double withdrowNumber)-ถอน
double showBalance()-แสดงยอดเงินปัจจุบนั
ภาพที่ 4.22 แสดงการวเิ คราะห์รายละเอียดของวตั ถุคลงั
Withdrower:ผถู้ อนเงิน
แอตทริบิวต:์
String NameSurname-ชื่อ-สกุล
int idCode-รหสั เจา้ หนา้ ท่ี
double totalWithdraw-จานวนเงินท่ีถอน
เมธอด :
double withdraw(double money)-ถอน
double showWithdraw()-แสดงจานวนเงินท่ีถอน
ภาพที่ 4.23 แสดงการวเิ คราะห์รายละเอีดยของวตั ถุผถู้ อนเงิน
คลาสไดอะแกรมที่สมบรู ณ์
ภาพที่ 4.24 คลาสไดอะแกรมของคลาสคลงั
118
ภาพท่ี 4.25 แสดงคลาสไดอะแกรมของคลาสผถู้ อนเงิน
จากตวั อยา่ งน้ีทาใหท้ ราบไดว้ า่ การจดั การคลาสไดอะแกรมของแต่ละโปรแกรมหรืองาน
แต่ละงานสามารถสร้างคลาสท่ีเก่ียวขอ้ งตามส่วนของวตั ถุท่ีจะเกิดข้ึนซ่ึงในตวั อย่างน้ีเป็ นการ
วิเคราะห์เพียงหยาบ ๆ เท่าน้นั หากตอ้ งเขียนโปรแกรมน้ีใชง้ านจริงอาจตอ้ งมีคลาสหลกั อีกหน่ึง
คลาสท่ีจะมาเรียกใชง้ านคลาสท้งั สองอีกตอ่ หน่ึง
การออกแบบคลาสและการสร้างวตั ถุ
การเขียนโปรแกรมเชิงวตั ถุน้นั เร่ิมท่ีการออกแบบคลาส หลงั จากน้นั นาคลาสท่ีออกแบบมา
สร้างวตั ถุ แลว้ เรียกใชเ้ มธอดท่ีมีในวตั ถุท่ีสร้างข้ึนดว้ ยแม่แบบของคลาสน้นั ๆ รายละเอียดต่อไปน้ี
นาเสนอการออกแบบคลาสท่ีตอ้ งการตามคลาสไดอะแกรมท่ีไดว้ ิเคราะห์ไว้ และในส่วนสุดทา้ ย
นาเสนอการสร้างวตั ถุเพือ่ ใชง้ าน
การออกแบบคลาส
การอธิบายเน้ือหาดงั กล่าว จะเร่ิมจากการนาคลาสไดอะแกรมในภาพท่ี 2.16 ที่
อธิบายโครงสร้างของคลาสของภาษาจาวาน้นั จะมีองคป์ ระกอบหยาบๆ คือ ส่วนการนาแพคเกจมา
ใชง้ าน และส่วนของตวั คลาส ซ่ึงหากนามาเขียนให้ละเอียดเพื่อใหเ้ ห็นภาพของการสร้างส่วนต่างๆ
ที่สาคญั ไดด้ งั น้ี
119
ส่วนการ import packages แฟ้ มนามสกลุ .java
ส่วนของช่ือคลาส
ส่วนของแอตทริบิวต์
ส่วนของเมธอดต่างๆ ในคลาส
ส่วนของแอทริบิวต์
ส่วนการจบคลาส
ภาพท่ี 4.26 แสดงโครงสร้างของการออกแบบคลาสเด่ียวโดยละเอียด
- ส่วนท่ี 1 น้นั เป็นการเรียกใชง้ านนาเขา้ แพคเกจท่ีจะนามาใชร้ ่วมกบั คลาสท่ีออกแบบไว้
- ส่วนที่ 2 เป็นส่วนการกาหนดช่ือคลาสตามรูปแบบของภาษาจาวา
- ส่วนที่ 3 เป็ นส่วนของการกาหนดแอทริบิวต์ ซ่ึงอาจนาไปกาหนดไวห้ ลงั จากเมธอด
หรือแทรกระหว่างเมธอดต่างๆ ในโปรแกรมได้ ตวั อย่างเช่น หากใช้งาน javax.Swing ใน
โปรแกรมเน็ตบีนจะสร้างส่วนน้ีในตอนทา้ ยก่อนจบคลาสเสมอ
- ส่วนที่ 4 เป็ นส่วนของการกาหนดเมธอดต่างๆ ซ่ึงในแต่ละคลาสจะกาหนดเมธอดได้
ตามท่ีตอ้ งการ
- ส่วนที่ 5 เป็ นส่วนการจบคลาส โดยท่ีหลงั จากจบคลาสแรกแลว้ สามารถกาหนดคลาส
ภายในไดอ้ ีก (Inner Class) เป็นคลาสใหม่ตอ่ เน่ืองไปไดอ้ ีก
จากแนวคิดของวตั ถุท่ีกล่าวไปแลว้ ตวั อยา่ งของวตั ถุแมว สามารถนามาออกแบบเป็ นคลาส
cat ได้ ซ่ึงคลาสน้ีจะประกอบไปดว้ ย
แอตทริบิวต์ : hairColor, eyesColor, weight, และ type
เมธอด : eat() rest() walk() feces() catch()
การกาหนดการเขา้ ถึงดว้ ย + ถา้ เป็ น public, - ถา้ เป็ น private และ # ถา้ เป็ น protected ดงั น้นั
นามาเขียนใหแ้ ทนดว้ ยรูปภาพท่ีเรียกวา่ คลาสไดอะแกรม (class diagram) ดงั น้ี
120
ภาพท่ี 4.27 แสดงการออกแบบคลาสไดอะแกรมของแมว
ตวั อยา่ งการสร้างคลาสแมว ตามคลาสไดอะแกรมจะไดต้ วั อยา่ งโปรแกรมดงั น้ี
public class cat{ //เริ่มคลาส
String hairColor;
String eyesColor;
double weight;
String type ;
public void eat()
{
//เขียนรหสั ตน้ ฉบบั
}
public void rest()
{
}
public void walk()
{
//เขียนรหสั ตน้ ฉบบั
121
}
public void feces()
{
//เขียนรหสั ตน้ ฉบบั
}
public void catch()
{
//เขียนรหสั ตน้ ฉบบั
}
} //จบคลาส
การสร้างคลาสน้ันสามารถระบุคียเ์ วิร์ด เพื่อการเขา้ ถึงดงั ตวั อย่างที่ผ่านมา ในการเขา้ ถึง
แอตทริบิวตแ์ ละตวั แปรใชเ้ มธอด set และ get แต่ละแอตทริบิวต์ ในตวั อยา่ งดงั กล่าว สร้างเมธอด
sethairColor และเมธอด getColor เพ่ือให้ผทู้ ี่จะนาคลาสน้ีไปสร้างวตั ถุไดใ้ ชส้ าหรับสื่อสารหรือ
กาหนดและรับคา่ จากวตั ถุท่ีสร้าง สามารถเขียนไดด้ งั น้ี
public class cat{ //เริ่มคลาส
String hairColor;
String eyesColor;
double weight;
String type ;
public void eat()
{
//เขียนรหสั ตน้ ฉบบั
}
public void rest()
{
}
public void walk()
{
//เขียนรหสั ตน้ ฉบบั
122
}
public void feces()
{
//เขียนรหสั ตน้ ฉบบั
}
public void catch()
{
//เขียนรหสั ตน้ ฉบบั
}
public void sethairColor(String s){
hairColor = s;
}
public String gethairColor(String s){
return s
}
} //จบคลาส
สาหรับแอตทริบิวตอ์ ื่นๆ หากตอ้ งการใหต้ ิดต่อสื่อสารกนั ไดผ้ า่ นเมธอดดงั กล่าวก็สามารถ
เขียนติดต่อไดเ้ ช่นเดียวกนั
การสร้างวตั ถุ
การสร้างวตั ถุจากคลาสโดยการเรียกใชต้ วั สร้าง (Constructor) ของคลาสดว้ ยการเรียก
คาสั่งดาเนินการ new ดงั น้ี new ClassName(Argument) ตวั อยา่ งเช่น new Circle() สร้างวตั ถุจาก
คลาส Circle ดว้ ยการเรียกใชต้ วั สร้างตวั แรกของคลาส Circle (Yacov Fain, 2007, p. 216) ซ่ึงหาก
เขียนรูปแบบการดาเนินการจะไดร้ ูปแบบดงั น้ี
ชื่อคลาส ตัวแปรวัตถุ = new ชื่อคลาส();
ตวั อยา่ ง จากคลาส cat ที่สร้างข้ึนสามารถนามาสร้างเป็ นวตั ถุโดยกาหนดใหช้ ่ือวตั ถุคือ
blackcat เป็นวตั ถุชนิดแมว และกาหนดช่ือใหเ้ ป็นแมวดา ดงั น้ี
cat blackcat = new cat()
123
จากการประกาศเพอ่ื สร้างวตั ถุดงั กล่าว หลงั จากน้ีสามารถท่ีจะเรียกใชเ้ มธอดของคลาส cat
ไดท้ ุกเมธอด ซ่ึงการอา้ งถึงจะตอ้ งอา้ งถึงวตั ถุท่ีสร้างข้ึนมาก่อนแลว้ ตามดว้ ยจุดและเรียกใช้เมธอด
ดงั น้ี
blackcat.walk(); เรียกใชเ้ มธอด เดิน
blackcat.eat(); เรียกใชเ้ มธอด กิน
ดงั น้ันจากโปรแกรมของคลาสแมว สามารถนามาเขียนโปรแกรมโดยกาหนดเมธอด main
เพอ่ื เรียกใชง้ านดงั น้ี
public class cat{ //เริ่มคลาส
String hairColor;
String eyesColor;
double weight;
String type ;
public static void main(String args[]) { //เมธอดหลกั สาหรับรันโปรแกรม
cat blackcat = new cat(); //สร้างวตั ถุของ cat
blackcat.eat();
blackcat.rest();
blackcat.walk();
blackcat. feces();
blackcat.catch();
}
public void eat()
{
//เขียนรหสั ตน้ ฉบบั
}
public void rest()
{
}
public void walk()
{
124
//เขียนรหสั ตน้ ฉบบั
}
public void feces()
{
//เขียนรหสั ตน้ ฉบบั
}
public void catch()
{
//เขียนรหสั ตน้ ฉบบั
}
public void sethairColor(String s){
hairColor = s;
}
public String gethairColor(String s){
return s
}
} //จบคลาส
การเรียกใชง้ านเพื่อสร้างวตั ถุของคลาสน้นั อาจสร้างแฟ้ ม .java ข้ึนมาเรียกใชโ้ ดยเฉพาะก็
ไดเ้ ช่นกนั ตวั อยา่ ง เช่น หากไม่เขียนเมธอด main ในแฟ้ มเดียวกนั แต่มาใชโ้ ปรแกรม runcat.java
เรียกใชง้ านกท็ าไดเ้ ช่นกนั ดงั น้ี
public class runcat{ //เริ่มคลาส
public static void main(String args[]) { //เมธอดหลกั สาหรับรันโปรแกรมเพอ่ื สร้างวตั ถุ
cat blackcat = new cat(); //สร้างวตั ถุ
blackcat.eat();
blackcat.rest();
blackcat.walk();
blackcat. feces();
blackcat.catch();
}
} //จบคลาส
125
ตัวอย่างที่ 4.11 กาหนดใหใ้ นทุ่งนามีควายจานวนสองตวั คือควายช่ือฉ่าและควายช่ือเผอื ก จงเขียน
โปรแกรมเพื่อใหค้ วายท้งั สองเดินอยใู่ นทุ่งนาดงั กล่าว โดยใชแ้ นวทางของคลาส แอทริบิวตแ์ ละเมธ
อดจากตวั อยา่ งท่ีผา่ นมา
แนวคิดการหาคาตอบ :
1. สร้างคลาสจากคลาสควาย ท่ีแสดงในตวั อยา่ งที่ 4.4 กาหนดชื่อคลาสเป็น Buffalo
2. กาหนดแอทริบิวต์ ชื่อ : Name:String สีของขา:legColor:String, สีลาตวั :bodyColor,
จานวนเขา:hornNumber:int, ขนาดลาตัว:bodySize:float และเมธอด เดิน:walk(), นอน:rest(),
กิน:eat(), วงิ่ :running()
3. สร้างส่วนการใชง้ านคลาส Field เพ่ือสร้างวตั ถุและรันเมธอดการเดินของควายท้งั สอง
แนวทางของรหสั โปรแกรมจะไดด้ งั น้ี
คลาส Buffalo
public class Buffalo {
String name;
String legColor;
String bodyColor;
int hornNumber;
float bodySize;
public void walk()
{
System.out.println("ฉนั กาลงั เดิน ฉนั คือ :"+this.getName());
}
public void rest()
{
System.out.println("ฉนั กาลงั นอน ฉนั คือ :"+this.getName());
}
public void eat()
{
System.out.println("ฉนั กาลงั กิน ฉนั คือ :"+this.getName());
126
}
public void running()
{
System.out.println("ฉนั กาลงั วงิ่ ฉนั คือ :"+this.getName());
}
public String getBodyColor() {
return bodyColor;
}
public void setBodyColor(String bodyColor) {
this.bodyColor = bodyColor;
}
public float getBodySize() {
return bodySize;
}
public void setBodySize(float bodySize) {
this.bodySize = bodySize;
}
public int getHornNumber() {
return hornNumber;
}
public void setHornNumber(int hornNumber) {
this.hornNumber = hornNumber;
}
127
public String getLegColor() {
return legColor;
}
public void setLegColor(String legColor) {
this.legColor = legColor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
คลาส Field สาหรับรันโปรแกรม
public class Field {
public static void main(String args[]){
Buffalo chaum =new Buffalo();
Buffalo pheak =new Buffalo();
chaum.setName("ฉ่า");
pheak.setName("เผอื ก");
chaum.walk();
pheak.walk();
}
}
128
ผลการรันโปรแกรมน้ี จะแสดงดงั น้ี
ฉนั กาลงั เดิน ฉนั คือ : ฉ่า
ฉนั กาลงั เดิน ฉนั คือ : เผอื ก
คุณสมบตั ิอ่ืนๆ ท่ีมีประสิทธิภาพของการเขียนโปรแกรมเชิงวตั ถุยงั มีอีก เช่น ความสัมพนั ธ์
ของคลาส (Class Relation) อินเทอร์เฟส (Interface) โอเวอร์โหลด (Overload) โอเวอร์ไรด์
(Override) และภาวะพหุสัณฐาน (Polymorphism) รายละเอียดของแนวคิดและวิธีการออกแบบและ
เขียนโปรแกรมจะนาเสนอในบทต่อๆ ไป
สรุป
การเขียนโปรแกรมเชิงวตั ถุ เป็นการมองงานหรือโปรแกรมเป็ นวตั ถุ โดยที่โปรแกรมแต่ละ
โปรแกรมจะรวมท้งั ขอ้ มูลและฟังก์ชนั งานเขา้ ดว้ ยกนั เรียกขอ้ มูลวา่ แอตทริบิวต์และฟังก์ชนั ของ
งานวา่ เมธอด การออกแบบโปรแกรมจะใชค้ ลาสเป็ นแม่แบบของวตั ถุที่ประกอบดว้ ยแอททริบิวต์
และเมธอดให้ครบตามท่ีจะใช้งานก่อน หลงั จากน้นั จะเขียนโปรแกรมข้ึนมาอีก เพ่ือสร้างวตั ถุให้
เรียกใช้ เมธอดท่ีออกแบบไวเ้ พ่ือดาเนินการตามที่ตอ้ งการ แต่ละเมธอดจะมีโครงสร้างการควบคุม
เป็ นแบบ เรียงลาดบั เง่ือนไข และวนซ้าคลา้ ยกบั โปรแกรมแบบโครงสร้าง ขีดความสามารถของ
โปรแกรมเชิงวตั ถุ คือ การสืบทอดคุณสมบตั ิ การโอเวอร์โหลด การโอเวอร์ไรด์ การห่อหุ้ม การ
พอ้ งรูป สามารถนาไปประกอบเพื่อสร้าง ดีไซน์แพทเทอร์น เฟรมเวิร์ก ประกอบกนั เป็ นโปรแกรม
ที่มีขนาดใหญ่ที่มีขีดความสามารถสูงข้ึน
129
แบบฝึ กหดั ท้ายบท
1. จงบอกความหมายและหนา้ ท่ีของ วตั ถุ แอตทริบิวต์ เมธอด คลาส
2. จงระบุแอตทริบิวตแ์ ละเมธอดของนก ไก่ และเป็ด
3. จงระบุแอตทริบิวตแ์ ละเมธอดของการทารายการของการฝาก ถอน และโอนเงิน
4. จงยกตวั อยา่ งวตั ถุของคลาสท่ีเก่ียวกบั สิ่งก่อสร้าง พาหนะ อาหาร ชนิดละ 5 วตั ถุ
5. จงออกแบบและเขียนโครงโปรแกรมยองคลาสยานพาหนะ
6. จงออกแบบคลาสเป็ดพร้อมท้งั เขียนโครงโปรแกรม
7. กาหนดวตั ถุของจกั รยานเสือภูเขา จงออกแบบคลาสของวตั ถุน้ี
8. จงอธิบายแนวคิดของความสัมพนั ธ์แบบการใชง้ าน (usage) พร้อมท้งั ยกตวั อยา่ งประกอบ
9. จงอธิบายแนวคิดความสมั พนั ธ์แบบมี (has-a) พร้อมท้งั ยกตวั อยา่ งประกอบ
10. จงอธิบายแนวคิดความสัมพนั ธ์แบบเป็น (is-a) พร้อมท้งั ยกตวั อยา่ งประกอบ
11. จงอธิบายวา่ คลาสตอ่ ไปน้ีมีความสมั พนั ธ์กนั แบบใด นกกบั นกกระจิบ หมูกบั เลา้
12. จงอธิบายวา่ ความสมั พนั ธ์ระหวา่ งเจา้ ของบญั ชีธนาคารกบั การถอนเงินมีความสมั พนั ธ์กนั
แบบใดเพราะเหตุใด
13. จงออกแบบคลาสและวตั ถุของอาหารที่จะข้ึนโตะ๊ ในตอนเยน็ พร้อมท้งั อธิบายวา่ วตั ถุแต่ละ
ชนิดในโตะ๊ อาหารที่กาหนดข้ึนน้นั มีความสมั พนั ธ์กนั อยา่ งไร
14. จงออกแบบฟอร์มจากโปรแกรมดว้ ยเน็ตบีนพร้อมสร้างป่ ุม(JButton) หน่ึงป่ ุม หลงั จากน้นั
รหสั โปรแกรมมาอธิบายวา่ ส่วนใดเป็นแอตทริบิวต์ ส่วนใดเป็นเมธอด และส่วนใดเป็ นการสร้าง
วตั ถุ
15. จงอธิบายวา่ การตดั สินสรรพส่ิงใดๆ วา่ เป็นวตั ถุหรือคลาส มีหลกั เกณฑอ์ ยา่ งไร เพราะเหตุ
ใด
130
เอกสารอ้างองิ
กิตติ ภกั ดีวฒั นะกุล และกิตติพงษ์ กลมกล่อม. (2548). คัมภีร์ การวิเคราห์และออกแบบเชิงวัตถุ
ด้วย UML. กรุเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
กิตติ ภกั ดีวฒั นะกุล และ ศิริวรรณ อมั พรดนยั . (2544). Oject-Oriented ฉบับพนื้ ฐาน. กรุงเทพฯ:
KTP Comp&Consult.
กิตติพงษ์ กลมกล่อม. (2552). การวเิ คราะห์และออกแบบระบบเชิงวตั ถุด้วย UML. กรุเทพฯ: เคทีพี
แอนด์ คอนซลั ท.์
นุกลู กระจาย. (2540). การเขียนโปรแกรมในดอสและวนิ โดว์ด้วยบอร์แลนด์ C++ 5.0. กรุงเทพฯ:
ซีเอด็ ยเู คชนั .
พนิดา พานิชกุล. (2548). Object-Oriented ฉบับพนื้ ฐาน. กรุงเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
_______. (2554). การเขียนโปรแกรมคอมพิวเตอร์เบื้องต้นด้วยภาษาจาวา. พิมพ์คร้ังท่ี 5.
กรุงเทพฯ: เคทีพี แอนด์ คอนซลั ท.์
พเิ ชษฐ์ ศิริรัตนไพศาลกุล. (2553). หลกั การเขียนโปรแกรมเบอื้ งต้นด้วยภาษา JAVA. กรุงเทพฯ:
ซีเอด็ ยเู คชนั .
Brett Spell. (2000). Professional Java Programming. USA: Wrox Press Ltd. Arden House, 1102
Warwick Road, Acocks Green, Birmingham, B27 6BH, UK.
Bruce Eckel. (2000). Thinking in Java. 2nd . USA: Prentice Hall PTR Prentice-Hall.
Cay Horstmann. (2002). Object-Oriented Design & Patterns. USA: John Wiley & Sons.
David Etheridge. (2009). Java:The Fundamentals of Objects and Classes-An Introduction to
Java Programming. Ventus Publishing Aps. [Online]. Available:
http://www.BookBoon.com
Simol Kendal. (2009). Object Orientted Programming using Java. Ventus Publishing Aps.
[Online]. Available: http://www.BookBoon.com
Y. Daniel Liang. (2007). Introduction to Java Programming. USA: Pearson Prentice Hall
Pearson Education, Inc.
Yacov Fain. (2004). JavaTM Programming for kid, parents and grandparents. [Online].
Available: http://www.BookBoon.com.
บทที่ 5
การใช้งานคลาสและเมธอด
สิ่งที่จำเป็ นสำหรับกำรเขียนโปรแกรมเชิงวตั ถุ คือ วตั ถุ และส่ิงท่ีจำเป็ นสำหรับวตั ถุ คือ
คลำส ซ่ึงเป็ นแม่แบบของวตั ถุ ดังน้ัน ข้นั แรกสุดคือกำรคิดกำรทำงำนทุกอย่ำงด้วยกำรจำลอง
แนวคิดใหเ้ ป็นวตั ถุ เพ่ือกระทำกบั กบั งำนท่ีตอ้ งกำรเขียนโปรแกรม หลงั จำกน้นั จึงออกแบบคลำสท่ี
ประกอบดว้ ยแอตทริบิวและเมธอดสำหรับใชง้ ำน เมื่อตอ้ งกำรให้โปรแกรมทำงำนจะสร้ำงวตั ถุจำก
คลำสท่ีออกแบบไว้ โดยที่แตล่ ะคลำสอำจนำมำสร้ำงเป็นวตั ถุไดห้ ลำย ๆ วตั ถุสำหรับทำงำนได้และ
ขบั เคลื่อนกำรทำงำนตำมแนวทำงของกำรเขียนโปรแกรมดว้ ยภำษำจำวำ ดงั น้ันเพ่ือเน้นย้ำให้ผู้
ศึกษำไดใ้ ชง้ ำนคลำสไดอ้ ยำ่ งแม่นยำจึงนำเสนอกำรเขียนโปรแกรมโดยอำศยั กำรออกแบบคลำส
เพยี งคลำสเดียวเพอ่ื สร้ำงวตั ถุต้งั แต่หน่ึงวตั ถุข้ึนไปเพ่ือขบั เคลื่อนกำรทำงำนของโปรแกรมใหส้ ำเร็จ
ตำมที่กำหนดไว้ พร้อมกนั น้ีจะนำเสนอควำมรู้เก่ียวกบั เมธอดและพิเศษไดแ้ ก่ตวั สร้ำง (Constructor)
และกำรสร้ำงควำมสำมำรถของเมธอดที่เรียกวำ่ กำรโอเวอร์โหลดดิ้ง (Overloading) อีกดว้ ย
การใช้งานคลาสโดยไม่สร้างวตั ถุ
จำกเน้ือหำของบทที่ผ่ำนมำพบวำ่ คลำสเป็ นเพียงพิมพเ์ ขียวหรือแม่แบบของวตั ถุ ขณะที่
วตั ถุคือตวั อยำ่ งหน่ึงของคลำส โปรแกรมที่เขียนดว้ ยเชิงวตั ถุจะตอ้ งสร้ำงคลำสก่อนเสมอ และสิ่งท่ี
ควรระลึกไวต้ ลอดเวลำ คือ คลำสไม่สำมำรถรันหรือทำงำนได้ ผูเ้ ขียนโปรแกรมตอ้ งนำคลำสที่
สร้ำงไวม้ ำสร้ำงเป็นวตั ถุเสียก่อน
กำรเขียนโปรแกรมดว้ ยภำษำจำวำแบบพ้นื ฐำนน้นั หำกโปรแกรมขนำดเล็กและไม่ซบั ซอ้ น
ผเู้ ขียนโปรแกรมอำจไม่จำเป็ นตอ้ งเรียนรู้กำรสร้ำงคลำสหรือสร้ำงวตั ถุใด ๆ ก็ได้ เพียงแต่สร้ำง
เมธอด main() ข้ึนมำเพียงเมธอดเดียวก็สำมำรถทำงำนได้ แต่หำกโปรแกรมมีควำมซบั ซอ้ นมำกข้ึน
และตอ้ งใช้งำนคลำสจำนวนมำกข้ึน กำรเขียนโปรแกรมด้วยคลำสเพียงคลำสเดียวไม่สำมำรถ
ทำงำนได้ ดงั น้นั ตอ่ ไปน้ีเป็ นวิธีกำรออกแบบคลำสเพียงคลำสเดียว โดยกำรเรียกใชง้ ำนเมธอดแบบ
ถำวร (Static) คือเมธอด main()
132
แอลเลน บี. ดอวน์ ีย์ (Allen B. Downey, 2011, p. 103) กล่ำววำ่ ทุกคร้ังที่มีกำรกำหนดคลำส
ก็จะสร้ำงวตั ถุท่ีมีช่ือเดียวกนั กบั คลำส เช่นเม่ือกำหนดคลำสช่ือ Hello ก็จะสร้ำงคลำสชื่อ Hello ดว้ ย
ซ่ึงแอลเลนไดก้ ำหนดควำมสำคญั เกี่ยวกบั คลำสต่อไปอีกวำ่
- กำรสร้ำงคลำสจะเป็นกำรสร้ำงวตั ถุที่มีชื่อเดียวกบั คลำส
- คลำสเป็ นแม่แบบของวตั ถุ : มนั จะกำหนดตวั แปรตวั อยำ่ ง (Instance) วตั ถุท่ีมีตวั แปร
อะไรบำ้ ง และมีเมธอดอะไรบำ้ งท่ีสำมำรถทำงำนได้
- ทุกๆ วตั ถุเป็ นเจำ้ ของวตั ถุบำงชนิด (Some Object Type) ดงั น้นั มนั คือตวั อยำ่ ง(Instance)
ของบำงคลำส
- เมื่อมีกำรเรียกใช้คำส่ัง new เพ่ือสร้ำงวตั ถุจำวำเรียกเมธอดพิเศษชื่อว่ำ ตวั สร้ำง
(Constructor) เพื่อติดต้งั (Initiate) ตวั แปรตวั อยำ่ ง ซ่ึงสำมำรถเตรียมหน่ึงหรือมำกกวำ่ หน่ึงตวั สร้ำง
เป็ นส่วนหน่ึงของคลำสได้
- แต่ละเมธอดสำมำรถทำงำนตำมท่ีคลำสกำหนดไวใ้ นคลำสน้นั ๆ
ต่อไปน้ีจะแสดงรำยละเอียดและตวั อยำ่ งของกำรใชง้ ำนกำรเรียกใชง้ ำนโปรแกรมดว้ ยกำร
ไม่สร้ำงวตั ถุ และกำรเรียกใชง้ ำนโปรแกรดว้ ยกำรสร้ำงวตั ถุ
1. การเขยี นโปรแกรมด้วยการเรียกเมธอด main()
กำรเขียนโปรแกรมแบบน้ีเหมำะกบั โปรแกรมที่ไม่มีควำมซบั ซ้อนมำก และถือวำ่ ยงั ไม่ได้
ใชค้ วำมสำมำรถเชิงกำรเขียนโปรแกรมเชิงวตั ถุ ซ่ึงกำรใชง้ ำนแบบน้ีจะสร้ำงคลำสเพียงหน่ึงคลำส
ต้งั ชื่อคลำสใหเ้ หมือนกนั กบั ช่ือของแฟ้ มท่ีเก็บในดิสก์ และกำหนดเมธอด main() ทำใหโ้ ปรแกรม
ภำษำจำวำสำมำรถรันทำงำนได้
ยำคอบ (Yacov Fain, 2007, p. 219) กล่ำววำ่ โดยปกติแลว้ เจวีเอม็ (JVM: Java Virtual
Machine) จะเรียกเมธอด main() ของคลำสหลกั สำหรับใชง้ ำน ซ่ึงหำกมิใช่คลำสหลกั เพียงคลำส
เดียวและมีตอ้ ง main() ตรงตำมขอ้ กำหนดในเรื่องชื่อไฟลต์ รงกบั ช่ือคลำสอีกดว้ ย ใหส้ ังเกตตวั อยำ่ ง
โปรแกรมต่อไปน้ี
133
ตัวอย่างท่ี 5.1 จงเขียนโปรแกรม ShowName.java เพอื่ แสดง ชื่อ นำมสกลุ และท่ีอยู่
คลาสไดอะแกรม
ภาพท่ี 5.1 คลำสไดอะแกรมของตวั อยำ่ งท่ี 5.1
โปรแกรม:
public class ShowName {
public static void main(String args[]){
System.out.println("Name : Apiridee");
System.out.println("Surname : SukSumrarn.");
System.out.println("Address : Bankok Thailand.");
}
}
ผลกำรรัน แสดงดงั น้ี
Name : Apiridee
Surname : SukSumrarn.
Address : Bankok Thailand.
คาอธิบาย โปรแกรมน้ีรันได้ ดว้ ยเง่ือนไข ดงั น้ี
1. ชื่อของคลำสคือ ShowName ซ่ึงตรงกบั ช่ือคลำส
2. ชื่อโปรแกรม จะตอ้ งชื่อวำ่ ShowName.java
3. มีเมธอด main()
หำกไมส่ อดคลอ้ งกนั ท้งั สำมส่วนน้ีโปรแกรมจะไมส่ ำมำรถรันทำงำนได้
134
ตวั อย่างท่ี 5.2 จงเขียนโปรแกรมรับค่ำตวั เลขจำกผใู้ ชส้ องคำ่ หลงั จำกน้นั คำนวณและแสดงผลลพั ธ์
คลาสไดอะแกรม
ภาพท่ี 5.2 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.2
โปรแกรม:
public class PlusNumber {
public static void main(String args[]) throws IOException
{
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);
int number1,number2,total;
System.out.println("Input Number 1:");
number1=Integer.parseInt(stdin.readLine());
System.out.println("Input Number 2 :");
number2=Integer.parseInt(stdin.readLine());
total=number1+number2;
System.out.println("Total :"+total);
}
}
ผลกำรรัน จะใหผ้ ใู้ ชป้ ้ อนตวั เลขสองคำ่ หลงั จำกน้นั จะแสดงผลรวม ตวั อยำ่ งกำรรันดงั น้ี
Input Number 1: 300
Input Number 2 : 700
Total :1000
คาอธิบาย โปรแกรมน้ียงั คงมีแนวคิดคลำ้ ยกนั กบั โปรแกรมแรกที่ทุกอยำ่ งจะทำงำนภำยใตเ้ มธอด
main อย่ำงเดียว ซ่ึงหำกพิจำรณำให้ถี่ถ้วนแล้วจะพบว่ำกำรเขียนโปรแกรมน้ียงั ไม่ได้ใช้
ควำมสำมำรถของกำรเขียนโปรแกรมเชิงวตั ถุเลย
135
กำรเขียนโปรแกรมตำมแนวคิดน้ีอำจกล่ำวไดว้ ำ่ เป็ นกำรออกแบบและเขียนโปรแกรมเป็ น
แบบโครงสร้ำง ท่ีแบง่ ส่วนตำ่ ง ๆ ออกเป็นส่วน ๆ แลว้ ทำงำนตอ่ เนื่องกนั ไป ท่ีสำคญั คือ โปรแกรม
มีควำมยุ่งยำกในกำรใช้งำนมำกข้ึนหำกมีส่วนกำรทำงำนท่ีซบั ซ้อนมำกข้ึน เช่น อำจกำหนดให้มี
เมธอดกำรทำงำน เช่น กำรรับค่ำ กำรคำนวณ และกำรแสดงผล ซ่ึงโปรแกรมในขอ้ 5.2 น้ีอำจแบ่ง
ส่วนกำรทำงำนเป็นส่วน ๆ ไดด้ งั ตวั อยำ่ งท่ี 5.3 ตอ่ ไปน้ี
ตวั อย่างที่ 5.3 จำกตวั อยำ่ งที่ 5.2 จงออกแบบใหโ้ ปรแกรมมีส่วนกำรรับคำ่ กำรคำนวณ และกำร
แสดงผล และส่วนโปรแกรมหลกั เรียกใชง้ ำนส่วนตำ่ ง ๆ เหล่ำน้นั ดว้ ย main()
คลาสไดอะแกรม
ภาพที่ 5.3 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.3
โปรแกรม :
import java.io.*;
public class PlusNumberStructure {
private static int number1,number2,total;
public static void main(String args[]) throws IOException
{
inputNumber();
calculateNumber();
showTotal();
}
public static void inputNumber() throws IOException{
136
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);
System.out.println("Input Number 1:");
number1=Integer.parseInt(stdin.readLine());
System.out.println("Input Number 2 :");
number2=Integer.parseInt(stdin.readLine());
}
public static void calculateNumber(){
total=number1+number2;
}
public static void showTotal(){
System.out.println("Total :"+total);
}
}
ผลกำรรัน จะไดด้ งั เดิมคือกำรใหผ้ ใู้ ชป้ ้ อนค่ำสองค่ำ แลว้ แสดงผลรวมออกมำ ตวั อยำ่ งกำรรันดงั น้ี
Input Number 1: 400
Input Number 2 : 600
Total :1000
คาอธิบาย ถึงแมว้ ำ่ โปรแกรมน้ีจะทำงำนไดเ้ ช่นเดียวกนั และน่ำจะมีประสิทธิภำพมำกกวำ่ โปรแกรม
แรก และสนบั สนุนกำรแบ่งงำนออกเป็ นส่วน ๆ คลำ้ ยกบั กำรใชง้ ำนเชิงวตั ถุแลว้ แต่ควำมจริงแลว้
เป็นเพยี งส่วนเล็กนอ้ ยที่ไดใ้ ชค้ ุณสมบตั ิของกำรเขียนโปรแกรมเชิงวตั ถุเท่ำน้นั กำรเขียนโปรแกรม
เช่นน้ี เป็ นเพียงกำรเขียนโปรแกรมแบบโครงสร้ำงเท่ำน้นั เนื่องจำกกำรใชง้ ำนโปรแกรมน้นั มีกำร
เรียกใช้ เมธอด inputNumber(), calculateNumber() และ showTotal() ผำ่ น main() และกำรใชง้ ำน
ตวั แปรร่วมกนั ท้งั หมด อีกท้งั ในกำรเรียกใชง้ ำนเมธอดยงั ตอ้ งใชง้ ำนผำ่ น keyword แบบ static ที่
เมื่อระบุคียเ์ วอร์ดน้ีจะใหต้ วั แปรและเมธอดต่ำง ๆ ใช้เน้ือที่หน่วยควำมจำอยตู่ ลอดเวลำกำรใชง้ ำน
จนกระทงั่ จบโปรแกรม ทำใหไ้ ม่เหมำะและเป็ นส่ิงที่ไม่ควรใชส้ ำหรับกำรเขียนโปรแกรมเชิงวตั ถุ
และทำให้โปรแกรมขำดควำมยืดหยุ่นเท่ำท่ี ควรไม่เหมำะที่ จะนำไปสื บทอดคุ ณสมบัติ หรื อ
ดำเนินกำรอ่ืน ๆ เชิงควำมสมั พนั ธ์ของคลำสตอ่ ไป
อย่ำงไรก็ตำมกำรเขียนโปรแกรมด้วยภำษำจำวำแบบน้ีก็อำจเหมำะสำหรับกำรเขียน
โปรแกรมแบบส้นั ๆ หรือใชส้ ำหรับเรียนรู้ภำษำจำวำเบ้ืองตน้ เท่ำน้นั เพรำะโดยธรรมชำติของภำษำ
137
จำวำแลว้ หำกเขียนโปรแกรมที่มีเง่ือนไขท่ี ช่ือโปรแกรมช่ือเดียวกนั กบั ช่ือคลำส และมี main() ที่
เป็ น static อยดู่ ว้ ยจะสำมำรถรันโปรแกรมให้ทำงำนไดโ้ ดย ตวั แปลภำษำจะสร้ำงวตั ถุให้เองโดย
อตั โนมตั ิอยู่แลว้ และหำกมีแอตทริบิวตอ์ ยู่หรือเมธอดอยเู่ พ่ือแบ่งงำนออกเป็ นส่วนย่อย ๆ จะตอ้ ง
ระบุคียเ์ วริ ์ด static อยดู่ ว้ ยดงั ตวั อยำ่ งที่ 5.3 ที่ผำ่ นมำ
2. การเขยี นโปรแกรมด้วยการสร้างวตั ถุ
จำกเน้ือหำที่ผำ่ นมำทำใหท้ รำบวำ่ คลำสที่ออกแบบไวจ้ ะรันไดก้ ็ต่อเมื่อมีกำรสร้ำงวตั ถุข้ึน
มำแลว้ เรียกใชง้ ำนเมธอดใหข้ บั เคล่ือนโปรแกรม กำรใชง้ ำนคลำสแบบไมต่ อ้ งสร้ำงวตั ถุน้นั เป็ นกำร
มองโปรแกรมแบบโครงสร้ำง และมีกำรใชง้ ำนผำ่ นฟังกช์ นั เทำ่ น้นั ไม่เป็ นไปตำมหลกั ของกำรเขียน
โปรแกรมเชิงวตั ถุเทำ่ ท่ีควร ซ่ึงกำรเขียนโปรแกรมเชิงวตั ถุน้นั ผเู้ ขียนโปรแกรมจะตอ้ งระลึกเสมอวำ่
อะไรคือวตั ถุ จะมีแอตทริบิวตอ์ ะไร และจะมีเมธอดอะไรในกำรทำงำน จำกคลำสไดอะแกรมใน
ตวั อยำ่ งท่ี 5.1 สำมำรถนำมำออกแบบใหอ้ ยใู่ นรูปแบบที่จะเป็ นกำรเขียนโปรแกรมเชิงวตั ถุคือ จะมี
เมธอดสำหรับกำรแสดงผล และเมธอด main()
ภาพที่ 5.4 คลำสไดอะแกรม ShowNameOO ของตวั อยำ่ งที่ 5.1 เม่ือเขียนใหม่
ในเมธอด main() จะมีกำรสร้ำงวตั ถุชนิด ShowNameOO ข้ึนมำแลว้ เรียกใชง้ ำนเมธอด
ShowName() อีกคร้ัง ซ่ึงทำใหไ้ ม่ตอ้ งระบุคียเ์ วิร์ด static เช่นเดียวกบั ตวั อยำ่ งท่ี 5.3 ท่ีผำ่ นมำ กำร
ออกแบบและเขียนโปรแกรมโดยปรับแนวคิดของตวั อยำ่ งที่ 5.1 มำเป็ นเชิงวตั ถุแสดงดงั ตวั อยำ่ งที่
5.4
ตัวอย่างท่ี 5.4 จงปรับตวั อยำ่ งที่ 5.1 ใหแ้ สดงเป็นกำรเขียนโปรแกรมเชิงวตั ถุ
โปรแกรม :
public class ShowNameOO {
public static void main(String args[]){
ShowNameOO obj=new ShowNameOO();
obj.showName();
138
}
public void showName(){
System.out.println("Name : Apiridee");
System.out.println("Surname : SukSumrarn.");
System.out.println("Address : Bankok Thailand.");
}
}
ผลการรันจะไดผ้ ลเช่นเดิมแตร่ ูปแบบการเขียนโปรแกรมจะเป็ นแนวคิดเชิงวตั ถุสมบูรณ์แบบเพราะ
มีเมธอดและการสร้างวตั ถุใชง้ าน โดยโปรแกรมน้ีจะสร้างวตั ถุ ของตนเอง
ShowNameOO obj=new ShowNameOO();
คาอธิบาย obj เป็ นวตั ถุ ที่เกิดจำกแม่แบบของคลำส ShowNameOO ซ่ึงกำรสร้ำงเช่นน้ีเหมำะกบั
กำรทำงำนของคลำสท่ียงั ไม่เกิดควำมสัมพนั ธ์กนั ตวั อยำ่ งท่ี 5.5 แสดงตวั อย่ำงกำรเรียกใช้งำน
ในกรณีมีควำมสมั พนั ธ์ของคลำสเกิดข้ึน ซ่ึงในรำยละเอียดของควำมสัมพนั ธ์ท่ีมำกกวำ่ น้ีจะนำเสนอ
ในบทตอ่ ไป
ตัวอย่างที่ 5.5 จำกตัวอย่ำงท่ี 5.4 จงเขียนโปรแกรมแยกเป็ นสองโปรแกรม คือ คลำส
ShowNameOO1 ที่มีเมธอด showName() อยู่ และคลำส showNameApp สำหรับสร้ำงวตั ถุชนิด
ShowNameOO1 แลว้ เรียกใชเ้ มธอดแสดงชื่อเช่นเดิม
คลาสไดอะแกรม
ภาพท่ี 5.5 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.5
โปรแกรแกรม :
public class ShowNameOO1 {
public void showName(){
139
System.out.println("Name : Apiridee");
System.out.println("Surname : SukSumrarn.");
System.out.println("Address : Bankok Thailand.");
}
}
คลาสท่ีใชร้ ัน
public class ShowNameApp {
public static void main(String args[]){
ShowNameOO1 obj=new ShowNameOO1();
obj.showName();
}
}
ผลกำรรันจะไดเ้ ช่นเหมือนกบั ที่ผำ่ นมำ
คาอธิบาย กำรทำงำนเช่นน้ีทำใหส้ ำมำรถสร้ำงคลำสในลกั ษณะของควำมสัมพนั ธ์กนั หลำย ๆ คลำส
และสร้ำงวตั ถุของแต่ละคลำสเพื่อใชง้ ำนได้
ตัวอย่างท่ี 5.6 จงเปลี่ยนกำรเขียนโปรแกรมแบบโครงสร้ำงของตวั อยำ่ งที่ 5.3 เป็นกำรเขียน
โปรแกรมโดยกำรสร้ำงเป็นวตั ถุและเรียกใชง้ ำนเมธอดตำ่ ง ๆ ดงั กล่ำวใหท้ ำงำนไดด้ งั เดิม
คลาสไดอะแกรมได้ดงั น้ี
ภาพที่ 5.6 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.6
140
โปรแกรม :
public class PlusNumberOO {
private int number1,number2,total;
public static void main(String args[]) throws IOException
{
PlusNumberOO calculator = new PlusNumberOO();
calculator.inputNumber();
calculator.calculateNumber();
calculator.showTotal();
}
public void inputNumber() throws IOException{
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);
System.out.println("Input Number 1:");
number1=Integer.parseInt(stdin.readLine());
System.out.println("Input Number 2 :");
number2=Integer.parseInt(stdin.readLine());
}
public void calculateNumber(){
total=number1+number2;
}
public void showTotal(){
System.out.println("Total :"+total);
}
}
ผลกำรรันจะไดด้ งั เดิม
คาอธิบาย กำรทำงำนจะบงั คบั ให้ผูใ้ ช้เขียนโปรแกรมโดยตอ้ งสร้ำงวตั ถุข้ึนมำใช้งำนก่อนแล้ว
เรียกใชเ้ มธอดท่ีทำงำน เพรำะในลกั ษณะของกำรออกแบบคลำสแลว้ จะบงั คบั ไม่ให้ main() เขำ้ ถึง
141
ตวั แปร number1, number2 ไดโ้ ดยตรง ซ่ึงคุณสมบตั ิน้ี เรียกวำ่ กำรปกป้ อง protected ตวั แปรไวใ้ ห้
ทำงำนไดเ้ สมอ ลกั ษณะของกำรทำงำนเช่นตวั อยำ่ งที่ 5.3 จะไม่สำมำรถเขียนโปรแกรม (คลำส) ให้
มีกำรเช่ือมโยงกนั กำรทำงำนเพื่อประสำนกนั ไดโ้ ดยไม่สร้ำงวตั ถุก่อนไม่ได้ ซ่ึงทำให้โปรแกรมไม่
ยดื หยุน่ กำรเขียนโปรแกรมเชิงวตั ถุจะมีควำมยืดหยนุ่ และทำให้ทำงำนประสำนกนั ได้ ซ่ึงสำมำรถ
แยกคลำสทำงำนออกไดเ้ ช่นตวั อยำ่ งท่ี 5.7
ตัวอย่างที่ 5.7 จำกตวั อยำ่ งที่ 5.6 จงแยกกำรทำงำนออกเป็ นสองคลำสใหส้ ำมำรถทำงำนไดด้ งั เดิม
คลาสไดอะแกรม
ภาพท่ี 5.7 คลำสไดอะแกรมของตวั อยำ่ งที่ 5.7
โปรแกรม :
คลำสทำงำน
public class PlusNumberOO1 {
private int number1,number2,total;
public void inputNumber() throws IOException{
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(reader);
System.out.println("Input Number 1:");
number1=Integer.parseInt(stdin.readLine());
System.out.println("Input Number 2 :");
number2=Integer.parseInt(stdin.readLine());
}
public void calculateNumber(){
142
total=number1+number2;
}
public void showTotal(){
System.out.println("Total :"+total);
}
}
คลำสสำหรับรัน
import java.io.*;
public class PlusNumberApp {
public static void main(String args[]) throws IOException
{
PlusNumberOO1 calculator = new PlusNumberOO1();
calculator.inputNumber();
calculator.calculateNumber();
calculator.showTotal();
}
}
ผลกำรรันไดด้ งั เดิมที่ผำ่ นมำ
คาอธิบาย ถึงแมก้ ำรทำงำนของโปรแกรมน้ีจะเหมือนกนั กบั ตวั อยำ่ งที่ผำ่ นมำ แต่ควำมยืดหยุน่ และ
แนวคิดของกำรแยกคลำสออกมำทำงำนในลกั ษณะน้ี เป็ นกำรฝึ กให้เขียนโปรแกรมแบบเชิงวตั ถุได้
ง่ำยข้ึน เพรำะไดค้ ิดแยกเป็ นส่วน ๆ ดงั น้นั ต่อไปน้ีรูปแบบกำรเขียนโปรแกรมเชิงวตั ถุที่ตอ้ งสร้ำง
วตั ถุตำมแนวทำงน้ีจะถูกนำไปใชใ้ นกำรศึกษำจำกหนงั สือเล่มน้ีต่อไปทุก ๆ บท
เมธอด
ส่วนน้ีจะนำเสนอ ควำมหมำยของเมธอด โครงสร้ำงของเมธอด ประเภทของเมธอด และ
กำรแสดงตวั อยำ่ งกำรใชง้ ำนเมธอดแบบตำ่ งๆ
ความหมายของเมธอด
เมธอดคือระเบียบวิธีในกำรทำงำนของงำนใดงำนหน่ึงซ่ึงประกอบด้วยข้นั ตอนต่ำงๆ
มำกมำยทำงำนน้นั บรรลุผลไดข้ ้นั ตอนต่ำงๆ เหล่ำน้นั ก็เปรียบเสมือนกบั คำส่ังต่ำงๆ ของภำษำจำวำ
143
ที่นำมำประกอบรวมกนั เขำ้ เพ่ือให้ 1 เมธอดสำมำรทำงำน 1 อยำ่ ง (พนิดำ พำนิชกุล, 2554, หนำ้
214)
พิเชษฐ์ ศิริรัตนไพศำลกุล (2553, หน้ำ 140) กล่ำว่ำ เมธอด เป็ นกระบวนกำรในกำร
ประมวลผลหรือส่งใหโ้ ปรแกรมทำงำนต่ำงๆ ตำมหนำ้ ท่ีที่เรำส่ังไวใ้ นเมธอด ซ่ึงยอ่ มเก่ียวขอ้ งกบั ตวั
แปรท่ีอยใู่ นออ็ บเจก็ ตน์ ้นั ๆ เมธอดถูกแบง่ ออกเป็น 2 ชนิดคือ
- คลำสเมธอด (Class Method) คือ เมธอดท่ีสำมำรถประมวลผลไดเ้ องโดยไม่จำเป็ นตอ้ ง
สร้ำงอ็อบเจกตใ์ ดๆ ข้ึนมำใช้เลย (เหมือนเมธอด main()) ไม่ตอ้ งสร้ำงอ็อบเจ็กต์ใดๆ
มำเรียกใชเ้ ลย กำรประกำศคลำ้ ยเมธอดก็ทำไดเ้ ช่นเดียวกนั กบั คลำสวำริเบิลคือตอ้ งใช้
คำสงั่ static นำหนำ้ เสมอ
- อินสแตนซ์เมธอด (Instance Method) คือ เมธอดที่ตอ้ งสร้ำงอ็อบเจ็กตข์ ้ึนมำก่อนถึงจะ
เรียกใชเ้ มธอดน้นั ได้ กำรประกำศกท็ ำไดป้ กติทวั่ ไปไมต่ อ้ งคำนึงถึงคำวำ่ static นำหนำ้
ดงั น้ัน เมธอด (Method) หมำยถึง ส่วนของโปรแกรมย่อย โมดูล หรือฟังก์ชัน เพื่อใช้
สำหรับลดควำมซบั ซอ้ นของโปรแกรมท่ีทำหนำ้ ที่อยำ่ งใดอยำ่ งหน่ึงเพ่ือสนบั สนุนโปรแกรมหลกั ที่
เขียนข้ึน วตั ถุประสงคข์ องกำรสร้ำงเมธอดเพ่ือแบง่ งำนโปรแกรมท่ีมีขนำดใหญ่ให้มีกลุ่มโปรแกรม
ยอ่ ย ๆ ลงมำ เมธอดมีประโยชนห์ ลำยประกำรเช่น
1. ทำให้ไม่ตอ้ งเขียนคำส่ังเดิมซ้ำกนั หลำย ๆ คร้ัง เพรำะหำกเป็ นกลุ่มคำส่ังที่ยำว ๆ ใน
โปรแกรมย่ิงจะทำให้โปรแกรมมีขนำดใหญ่ข้ึน เมธอดจะสร้ำงกลุ่มคำสั่งไวเ้ พียงชุดเดียวแล้ว
เรียกใชโ้ ดยไม่ตอ้ งเขียนกลุ่มคำสงั่ น้นั อีก
2. ทำใหต้ รวจหำท่ีผิดของโปรแกรมง่ำยข้ึนเน่ืองจำกกำรจดั กำรโดยใชเ้ มธอดจะแบ่งงำน
ออกเป็ นส่วน ๆ เรำทรำบว่ำแต่ละส่วนทำหน้ำที่อยำ่ งไร ดงั น้ันจึงเป็ นกำรง่ำยในกำรที่จะหำท่ีผิด
ของโปรแกรมวำ่ มำจำกงำนส่วนใด
3. ทำใหโ้ ปรแกรมมีขนำดเล็กลงเน่ืองเพรำะไม่ตอ้ งเขียนคำสั่งซ้ำ ๆ กนั นนั่ เอง ตลอดจน
สำมำรถแบ่งเกบ็ เอำไวใ้ นโปรแกรมยอ่ ยอื่น ๆ ไดอ้ ีก จึงทำใหโ้ ปรแกรมมีขนำดเล็กลง
4. ทำให้กำรเรียกใชเ้ มธอดไปใชง้ ำนไดก้ บั โปรแกรมอ่ืน ๆ ไดอ้ ีก ซ่ึงเป็ นกำรสร้ำงงำน
ข้ึนมำคร้ังเดียว แลว้ สำมำรถเรียกใชง้ ำนไดห้ ลำย ๆ คร้ังอยำ่ งคุม้ คำ่
5. ทำให้สำมำรถแยกงำนกนั ทำได้ หำกเป็ นระบบงำนขนำดใหญ่จะสำมำรถทำงำนได้
อยำ่ งอิสระ
6. เม่ือมีกำรสืบทอดคุณสมบัติทำให้สำมำรถนำไปใช้งำนได้โดยคุณสมบัติของ
กำรสืบทอด รวมถึงสำมำรถเขียนคำสั่งใหม่เพม่ิ เติมเขำ้ ไปได้
โครงสร้างของเมธอด
144
พนิดำ พำนิชกุล (2554, หน้ำ 215) กล่ำวว่ำ โครงสร้ำงทว่ั ไปของเมธอด (ยกเวน้
main()) มีรูปแบบดงั น้ี
Visibility return_data_type methodName(Parameter_list)
{...คำสงั่ อ่ืนๆ ภำยใน Method ... }
โดยที่ Visibility หรือ Accessibility ไดแ้ ก่
- public คือกำรสร้ำงเมธอดเพือ่ สำมำรถนำไปใชไ้ ดก้ บั ทุกคลำส
- private คือ กำรสร้ำงเมธอดเพื่อใชง้ ำนภำยในคลำสที่มีเมธอดน้นั อยเู่ ท่ำน้นั ไม่สำมำรถ
นำไปใชใ้ นคลำสอ่ืนๆ ได้
- protected คือกำรสร้ำงเมธอดเพื่อให้สำมำรถนำไปใช้ในคลำสอ่ืนๆไดเ้ ม่ือคลำสน้ัน
ขยำยมำจำกคลำสดงั กล่ำว
- default คือ ไม่ไดก้ ำหนดค่ำ Accessibility ไวห้ มำยถึง สร้ำงเมธอดเพื่อสำมำรถเรียกใช้
งำนไดจ้ ำกคลำสอ่ืนๆ ภำยในแพคเกจเดียวกนั
return_data_type ไดแ้ ก่กำรกำหนดชนิดของผลลพั ธ์ท่ีเมธอดน้นั จะส่งค่ำกลบั ใน 1 เมธ
อด จะตอ้ งส่งผลลพั ธ์อย่ำงน้อย 1 ค่ำกลบั ไปยงั คำสั่งที่เรียกมำ (ยกเวน้ คียเ์ วิร์ด เป็ น void) ท้งั น้ี
return_data_type อำจเป็ นชนิดทว่ั ไป (เช่น integer, character) หรือเป็ นชนิดซบั ซ้อนเช่น Array
หรือ Object กไ็ ด้
Parameter_list เป็ นชื่อของตวั แปรท่ีรับขอ้ มูลที่ส่งมำจำกคำสั่งอื่นที่มำเรียกใชง้ ำน ถำ้
ไม่มีกำรส่งค่ำมำให้ก็ไม่จำเป็ นต้องมีก็ได้ กรณีท่ีมี parameter_list มำกกว่ำหน่ึงตวั ให้คนั่ ด้วย
เครื่องหมำยคอมมำ (Comma) (,) ตวั แปรท่ีระบุแตล่ ะตวั จะตอ้ งระบุชนิดตวั แปรนำหนำ้ เสมอ
นอกจำกน้ันธีรวฒั น์ ประกอบผล (2552, หน้ำ 124) ได้กล่ำวว่ำ โปรแกรมทุก
โปรแกรมจะตอ้ งมีเมธอดที่ชื่อวำ่ main() ซ่ึงถือวำ่ เป็นเมธอดหลกั ของโปรแกรม ในเมธอดหน่ึงๆ จะ
ประกอบดว้ ยสองส่วนใหญ่ๆ คือ ส่วนหวั (Header) และส่วนสเตทเมนต์ หรือเรียกวำ่ Body ซ่ึงเก็บ
กำรทำงำนต่ำงๆ เอำไว้ ดงั เมธอด main() ต่อไปน้ี
Header------> public static void main(String args[]){
Body------> System.out.println(“Hello World”);
}
รูปแบบของเมธอดเป็นดงั น้ี
Modifier Return_Type MethodName(Parameter_list)
{
ชุดคำส่ังหรือสเตทเมนตต์ ่ำง