เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 131 เปนลบ (-) คือ String ไมเทากัน ขอความทางซายมีคารหสั asci นอยกวาขอความ ทางขวา เปน บวก (+) คือ String ไมเทากัน ขอ ความทางซา ยมีคารหัส asci มากกวาขอ ความ ทางขวา เปน ศนู ย (0) คือ String ทัง้ สองเทา กนั String str1 = \"Computer\"; String str2 = \"Programming\"; If (str1.compareTo(str2) < 0) System.out.println(“str2 more than str1.”); else if (str1.compareTo(str2) > 0) System.out.println(“str2 less than str1.”); else System.out.println(“str2 equals to str1.”); จากตัวอยางเปน การเปรยี บเทยี บ String 2 ตัว ซ่งึ มคี าใน String แตกตางกัน ทำใหผ ลลัพธท่ี เกิดขึน้ มีผลให expression ของคำส่ัง if อันแรกเปน True แสดงวาคาที่ไดจากการเปรียบเทยี บดว ย เมธอด compareTo(); มคี าเปนลบ (-) เนอ่ื งจาก str2 มคี า รหัส ascii มากกวา str1 นอกจากเมธอดตวั อยางเหลานแี้ ลว ยงั มเี มธอดอกี มากมายทส่ี ามารถเรียกใชไดทันที ทงั้ ในการ จัดการ String และการเปรียบเทียบ String สามารถศกึ ษาเพิม่ เตมิ ไดจ ากลง้ิ ดานลา ง https://docs.oracle.com/javase/8/docs/api/java/lang/String.html _________________________________________________________________________ เรียบเรียงโดย: อาจารยภ ูรวิ ฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
132 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) แบบฝก หัดบทที่ 9 1. จงเขียนโปรแกรมเพอ่ื กลบั ตัวอกั ษร (reverse) คำในประโยค นบั จำนวนคำ ในประโยคดวยวามกี ี่ คำ และหาวา มสี ระทง้ั หมดกีต่ วั เชน ปอ นประโยคที่ตอ งการ This is a book ผลลพั ธที่ไดคือ sihT si a koob มีท้งั หมด 4 คำ มสี ระท้ังหมด 5 ตวั ปอนประโยคทต่ี องการ This is a cat ผลลพั ธท ่ีไดค ือ sihT si a tac มีทงั้ หมด 4 คำ มสี ระทง้ั หมด 4 ตัว 2. เขียนโปรแกรมเพื่อรับขอ ความ String 2 ขอความที่มีความยาวเทากนั จากน้ันทำการเปรยี บเทียบ วา ทงั้ สองขอความมีตัวอกั ษรใดทเี่ หมือนกันบา งโดยแสดงผลทางจอภาพ 3.เขียนโปรแกรม Login โดยใหผ ูใ ชก รอก username และ password เพ่ือเขา สรู ะบบ หากผใู ชก รอก ขอ มลู ไมถูกตอ งครบ 3 คร้งั ใหแ สดงขอ ความเชน “Your account has been locked. Please, contact Admin.” _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูริวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 133 วิธีการสอนและกจิ กรรม 1. สอนแบบบรรยายโดยใชส ่ือประกอบการสอน 2. ใหน ักศกึ ษามสี วนรวมในกจิ กรรมระหวางการเรยี นการสอนโดยใชว ิธกี ารถาม-ตอบ 3. ปฏิบัติการเขียนโปรแกรมการใชงานคลาสสตรงิ เอกสารประกอบ เอกสารประกอบการสอน บทที่ 9 สตรงิ ส่อื การสอน ส่อื ประกอบการสอน ไฟลนำเสนอ power point บทท่ี 9 สตรงิ โสตทัศนวสั ดุ เครอ่ื งฉายโปรเจคเตอร งานทีม่ อบหมาย 1. ศกึ ษาการประกาศ String เมธอดในคลาส String และการเปรียบเทียบ String ดวยรูปแบบ ตา ง ๆ 2. แบบฝก หดั การเขยี นโปรแกรมโดยการใชงาน String ในรปู แบบตาง ๆ การวดั ผล 1. สังเกตพฤติกรรมการเรยี นในหอ งเรียน 2. สงั เกตพฤติกรรมการมสี ว นรว มในกจิ กรรมระหวางการเรียนการสอนในการถาม-ตอบ 3. ตรวจงานทมี่ อบหมาย 4. ทดสอบตามจุดประสงคก ารสอน บนั ทกึ การสอนและขอ สงั เกต …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภรู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
134 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) 135 สปั ดาหท ี่ 11 ใบเตรียมการสอน เวลา 4 ชว่ั โมง บทท่ี 10 เมธอด 10.1 การสรา งเมธอด 10.2 อากิวเมนตและพารามเิ ตอร 10.3 เมธอดท่ีมกี ารสง คา กลับ (Return keyword) 10.4 เมธอดและอาเรย 10.5 โอเวอรโหลดดง้ิ เมธอด (Overloading Method) จดุ ประสงคก ารสอน 10.1 เขาใจโครงสรา งและวิธีการสรางเมธอด 10.2 สามารถเรียกใชงานเมธอดไดอ ยางถกู ตอ ง 10.3 สามารถเขียนโปแกรมเพือ่ สง คา หรอื รับคา ในเมธอดได 10.4 เขาใจหลักการ overloading method และการใชงาน _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภ รู ิวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
136 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) บทที่ 10 เมธอด เมธอด คือ ระเบียบวิธใี นการทำงาน เปนกลุมของคำส่ังที่สรางขึน้ มาเพือ่ ทำหนาที่บางอยาง เปนสวนยอยภายในโปรแกรมชวยลดความซับซอนของโปรแกรม การสรางเมธอดจะสามารถทำให เรียกกลุมคำสั่งนั้นมาใชใหมไดโดยที่ไมตองเขียนคำสั่งขึ้นมาใหม เมธอดมีทั้งที่สรางขึ้นเอง และมีใน ไลบรารี่ของ Java ที่สามารถเรียกใชไดทนั ทีซึ่งมีตัวอยา งใหเห็นในบทท่ีผานมา เชน เมธอดในคลาส Scanner และคลาส String ดงั นน้ั ในบทนี้จะกลาวถึงเมธอดทีผ่ ูเขียนโปรแกรมสรางขน้ึ เอง ดงั ตอไปนี้ 10.1 การสรางเมธอด การสรา งเมธอดในภาษา Java นั้นจะสามารถเรียกใชจ ากสว นใดของโปรแกรมก็ได ข้นึ อยูกับ ขอบเขตและระดบั การเขา ถงึ ทไ่ี ดกำหนดไว โดยมีรปู แบบการสรางเมธอดดงั นี้ type name ( parameter1, parameter2, ... ) { statements } access_modifier type name ( parameter1, parameter2, ... ) { statements } โดยท่ี type คอื ประเภทของเมธอดท่ีสรา งขน้ึ เปน ไดท ้งั primitive datatype หรือ reference types และหากเมธอดไมมกี ารสง คา กลับจะมี type เปน void Name คอื ช่ือของเมธอด มีกฎการต้งั ชอ่ื เดยี วกบั การต้ังชื่อตวั แปร parameter คอื เปน ลิสตข องตัวแปรที่จะสงเขาไปใชในเมธอด โดยสามารถมไี ดต้ังแต 1 ข้นึ ไปหรอื ไมม ีก็ได access modifier คือ การกำหนดระดับการเขาถึงของเมธอด มี 4 แบบ คือ public protected private และ default (ไมกำหนด) _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูรวิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 137 รูปที่ 10.1 ตัวอยา งโปรแกรมการสรา งเมธอด จากรปู ที่ 10.1 เมธอด 2 เมธอด คอื sayGreeeting() เพ่ือใชแสดงขอความเมือ่ โปรแกรมเร่ิม ทำงาน และ summation() เปนเมธอดสำหรับการหาผลรวมของตวั เลขสองจำนวน การเรียกใชเมธอด ในภาษา Java นัน้ คือ การใชช่ือของเมธอดนั้นแลวตามดวยเครอ่ื งหมาย () และใส อากิวเมนตใหตรง ตามลำดับพารามิเตอรของเมธอด จะเห็นวาในตัวอยางมีการเรียกใชเมธอด summation() สองครงั้ โดยมไี มต อ งเขยี นโปรแกรมสำหรบั หาผลรวมขึน้ มาใหม ซ่ึงนเ้ี ปน วิธีการแยกกลมุ ของคำสง่ั ออกไปเพื่อ ลดความซบั ซอนและการนำกลบั มาใชใหมในหลกั การเขียนโปรแกรม นอกจากนี้ในตัวอยางยังมีคำสั่ง static ซึ่งเปนคำสั่งที่ทำใหเมธอดหรือตัวแปรใด ๆ เปนตัว แปรที่สามารถใชรวมกันภายในโปรแกรมได สำหรับการเรียกใช static เมธอด เมธอดท่เี รียกก็ตอ งเปน static เชน กัน เมอ่ื รันโปรแกรมตัวอยา งขา งตนจะไดผลลพั ธดงั รูปที่ 10.2 รูปท่ี 10.2 ผลลัพธการรนั ตัวอยางโปรแกรมการสรา งเมธอด _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูรวิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
138 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 10.2 อากิวเมนตและพารามิเตอร สำหรบั การสง คาหรือรบั คา ตวั แปรในเมธอดนั้น อากวิ เมนต คอื ตวั แปรทสี่ งไปยังเมธอดตอน ที่เมธอดถูกเรยี กใชง าน เชน summation (x, y); ซงึ่ ในท่ีนี้ x และ y คือ อากิวเมนต สวนพารามิเตอร เปนตัวแปรที่ถูกประกาศขึ้นภายในเมธอดเพื่อใชสำหรับรับคาจากอากิวเมนตที่สงเขามา จากรูปท่ี 10.1 จะเห็นวา อากวิ เมนตและพารามเิ ตอรในเมธอด summation(); น้ันเปนชอื่ เดยี วกัน แตตวั แปร x และ y นั้นถกู ประกาศไวใ นคนละเมธอด ดังน้ันตวั แปร x และ y จะมคี าในเฉพาะเมธอดทเี่ ปนเจา ของ ตัวแปรน้นั หรือบางครงั้ เรยี กวา ตวั แปรเฉพาะท่ี (local variable) นอกจากนกี้ ารสง อากิวเมนตไ ปยังเมธอดนน้ั จะตองสง ใหต รงกบั ลำดับพารามิเตอรแ ละชนิดตัว แปรในเมธอดท่ีเรียกใช ดังรปู ที่ 10.3 รปู ที่ 10.3 ตัวอยางโปรแกรมการสง คาอากิวเมนต จากรูปที่ 10.3 เปนการสรางเมธอดชื่อ summation(); และมีการรับคาพารามิเตอร 2 ตัว เปนชนิด double คือ ตัวแปร i และ j ดังนั้นเม่ือตองการเรียกใชเมธอดนีจ้ ะตองสงอากิวเมนตที่เปน คาขอมูลชนิด double ใหกับเมธอด summation(); เชนในคำสั่ง System.out.println(\"x + y = \"+summation(x,y)); สามารถสง อากวิ เมนตไปไดเนอื่ งจากตวั แปร x และ y เปน ชนดิ double สำหรับคำสั่ง System.out.println(\"a + b = \"+summation(a,b)); เปนการเรียกใชเมธอด summation(); เชนกัน เพียงแตตัวแปร a และ b นั้นเปนขนิด integer ซึ่งในตัวอยางนีโ้ ปรแกรมยงั _________________________________________________________________________ เรียบเรียงโดย: อาจารยภ ูริวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 139 สามารถทำงานไดโดยไมมีขอผิดพลาดเนื่องจากตัวแปรชนิด integer มีขนาดเล็กกวาตัวแปรชนิด double ผลลัพธก ารรันโปรแกรมเปน ไปตามรปู ท่ี 10.4 รูปท่ี 10.4 ผลลพั ธก ารรนั การสง คาอากิวเมนต จะสังเกตเห็นวาในรูปที่ 10.4 ผลลัพธที่ไดจะเปนขอมูลชนิด double ทั้งสองคำสั่งเพราะ เมธอด summation(); นั้นมีการคืนคากลับเปนชนิด double สำหรับการคืนคากลับจะกลาวถึงใน หวั ขอ ตอ ไป 10.3 เมธอดที่มีการสง คากลับ (Return keyword) เมธอดที่มีการสงคากลับ หมายถึง เมธอดจะมีการสงคากลับไปยังที่ที่เมธอดถูกเรียกใช โดยทั่วไปจะมีคำสั่ง return เปนคำสั่งสุดทายเมื่อเมธอดทำงานเสร็จสิ้นตามคำสั่งที่ถูกเขียนไว และ โปรแกรมจะทำงานคำส่ังอนื่ ตอ ไป ดงั รปู ที่ 10.5 รปู ที่ 10.5 ตัวอยา งโปรแกรมเมธอดคืนคา กลับ _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ ูรวิ ฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
140 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) จากตัวอยา งเปนโปรแกรมตรวจสอบเลขคูเ ลขค่ี โดยใหผใู ชกรอกขอ มูลเปน ตัวเลขจำนวนเต็ม (integer) 5 จำนวน จากนัน้ สงอากวิ เมนตไ ปตรวจสอบทเ่ี มธอด checkNumber(); หากตวั เลขท่ีรับคา มา modulo ดวย 2 แลวไดเศษเทากับ 0 แสดงวาเลขนัน้ จะเปนเลขคู ทำให expression ของคำสั่ง num % 2 == 0 ? true: false เปน true และคืนคาที่เปน boolean ไปยังที่ที่เรียกใชเมธอดน้ี ผลลัพธก ารรันโปรแกรมตามรปู ท่ี 10.6 รูปที่ 10.6 ผลลพั ธการรนั ตัวอยางโปรแกรมเมธอดคืนคา กลบั นอกจากนใ้ี นกรณีทต่ี องการนำคาที่คืนกลบั มาจากเมธอดไปประมวลผลตอ สามารถทำไดโ ดย การประกาศตวั แปรชนิดเดียวกนั เกบ็ คา ที่ถูกคืนกลับมานนั้ ได ดังรปู ท่ี 10.7 รปู ที่ 10.7 โปรแกรมเมธอดคืนคากลับแบบมีตัวแปรมารับ _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ รู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 141 จากตัวอยางมกี ารสรา งเมธอดช่ือวา findMax(); ใชส ำหรบั หาคา ทม่ี ากทีส่ ดุ ของตัวเลขจำนวน เต็ม 2 จำนวน โดยจะคืนคาที่มากกวากลับไปยังที่ที่เรียกใชในที่นี้คือ int max = findMax(x, y); ดังน้ันคา ที่คืนกลับไปจะถูกเกบ็ ไวในตัวแปร max และจะไดผ ลลัพธการรันโปรแกรม ดงั รูปที่ 10.8 รปู ท่ี 10.8 ผลลัพธการรันโปรแกรมเมธอดคืนคา กลับแบบมีตวั แปรมารบั 10.4 เมธอดและอาเรย ในการสงขอมูลแบบอาเรยเขาไปยังเมธอด ทำไดเ ชนเดยี วกนั กบั ตัวแปร โดยสามารถสง อาเรย 1 มติ ิ หรอื หลายมติ ิไปยงั เมธอด ตัวอยา งดังรูปที่ 10.9 รปู ที่ 10.9 โปรแกรมเมธอดกบั อาเรย _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภูริวฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
142 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) ในตวั อยา งเปน การสรางเมธอดช่ือ sort() สำหรบั การเรียงขอ มลู ท่ีอยใู นอาเรย 1 มิติ จะเห็น วา เมธอดน้รี ับพารามเิ ตอรมาเปน อาเรย และเมอ่ื ทำคำสง่ั ในเมธอดเสรจ็ สนิ้ แลวจงึ คนื คากลบั เปน อาเรย เชนเดิม นอกจากนี้ในตัวอยางยังมีการเรียกใชเมธอดชื่อ toString(); ซึ่งเปนเมธอดที่อยูในคลาส Arrays ท่ใี ชส ำหรับแปลงอาเรยใหเปน String ในการแสดงผลทางจอภาพไดผลลัพธด ังรูปท่ี 10.10 รูปท่ี 10.10 ผลลพั ธการรันโปรแกรมเมธอดกบั อาเรย 10.5 โอเวอรโ หลดดง้ิ เมธอด (Overloading Method) Overloading method หรือ method overloading คือ การเขียนหรือสรางเมธอดชื่อเดมิ ที่มีอยูแลวเพิ่มขึ้นมา เพื่อจุดประสงคการทำงานที่หลากหลาย โดยใชชื่อเมธอดเดิม แตมีขอแมวา จะตองสงอากิวเมนต หรือพารามิเตอรไปยังเมธอดแตละตัวไมเหมือนกัน เพื่อใหโปรแกรมเขาใจวา ตอ งการเรยี กใชเ มธอดใด ดังรูปท่ี 10.11 รูปท่ี 10.11 ตัวอยางโปรแกรม method overloading _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภูริวฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 143 จากตัวอยางจะเห็นวามีเมธอดที่ชื่อ findMax(); 2 เมธอด แตละเมธอดจะมีการรับ พารามิเตอรท่ีแตกตางกัน คือ อากิวเมนตที่สงมาเปน double, double โปรแกรมจะไปทำงานที่ findMax(); ที่รับพารามิเตอรตามที่อากิวเมนตสงมา และหากอากิวเมนตที่สงมาเปน int, int โปรแกรมจะไปทำงานทเ่ี มธอด findMax(); ที่รับพารามิเตอรแ บบ int, int _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู วิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
144 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) แบบฝก หดั บทที่ 10 1. จงเขยี นโปรแกรมเพอ่ื รบั คาขอ มลู เปนจำนวนเตม็ 10 จำนวนเก็บไวใ นตวั แปรอาเรย จากน้นั หาคา ขอ มลู ทมี่ คี าสูงสุดและตำ่ สุดทอ่ี ยใู นอาเรยโดยการสรางเมธอด ดงั น้ี findMax() เพ่อื หาคา สงู สุด findMin() เพื่อหาคาตำ่ สดุ 2. จงเขยี นโปรแกรมเพอ่ื คำนวณหาพนื้ ทข่ี องรปู ทรงเรขาคณติ คอื ทรงสามเหล่ยี ม ทรงกรวย และทรง กรม โดยตอ งสรา งเมธอดสำหรบั หาพ้ืนทขี่ องแตล ะรปู ทรงเรขาคณติ โดยมชี ือ่ เดยี วกันคอื findArea(); 3. จงเขยี นโปรแกรมเพื่อใชใ นการคำนวณหาคา จอดรถโดยกำหนดขอมูลเขา คือ เวลาเขา, เวลาออก โดยท่ี เวลาท่ใี ชจ อด = เวลาออก – เวลาเขา คิดคา จอดรถใน 3 ชวั่ โมงแรกชัว่ โมงละ 20 บาท ในกรณีทจ่ี อดไมถ ึง 30 นาทใี หปด ทง้ิ ถาเกนิ 30 นาที เศษของช่ัวโมงใหป ดขึ้น หากจอดรถที่เกินจาก 3 ชั่วโมงคิดชั่วโมงละ 30 บาทโดยใชวธิ ีปด เศษเชนเดียวกัน การรับขอมูลเขาควรใชรูปแบบในการจัดการขอมูล เชน การใชคลาส SimapleDateFormat โดยมีรปู แบบ String time = “16:00:00”; _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภูริวฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 145 วธิ กี ารสอนและกิจกรรม 1. สอนแบบบรรยายโดยใชสอื่ ประกอบการสอน 2. ใหนักศึกษามีสว นรวมในกจิ กรรมระหวางการเรียนการสอนโดยใชว ธิ กี ารถาม-ตอบ 3. ปฏบิ ัติการเขยี นโปรแกรมการสรางเมธดและการเรยี กใชเมธอด เอกสารประกอบ เอกสารประกอบการสอน บทท่ี 10 เมธอด สอื่ การสอน สอ่ื ประกอบการสอน ไฟลนำเสนอ power point บทท่ี 10 เมธอด โสตทัศนวสั ดุ เครอื่ งฉายโปรเจคเตอร งานทีม่ อบหมาย 1. ศกึ ษาการสรางเมธอด การเรยี กใชเมธอด การสง อากิวเมนตแ ละพารามิเตอร 2. ศึกษาการสราง method overloading และวธิ ีการเรียกใชง าน 3. แบบฝก หัดวิเคราะหและการเขยี นผงั งานสำหรับการเขียนโปรแกรมคอมพวิ เตอร การวัดผล 1. สังเกตพฤติกรรมการเรียนในหอ งเรยี น 2. สงั เกตพฤติกรรมการมสี วนรวมในกจิ กรรมระหวางการเรียนการสอนในการถาม-ตอบ 3. ตรวจงานทม่ี อบหมาย 4. ทดสอบตามจุดประสงคก ารสอน บันทึกการสอนและขอสังเกต …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… _________________________________________________________________________ เรียบเรียงโดย: อาจารยภรู วิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
146 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 147 สปั ดาหท ่ี 12 ใบเตรยี มการสอน เวลา 4 ชวั่ โมง บทที่ 11 การเขยี นโปรแกรมเชงิ วัตถุ 11.1 การเขียนโปรแกรมเชงิ วตั ถุ 11.2 คุณสมบัตขิ อง OOP 11.3 คลาสและออบเจค็ 11.4 การสรางคลาสและออบเจค็ 11.5 คอนสตรคั เตอร 11.6 คำส่ัง this และ Static จุดประสงคก ารสอน 11.1 เขา ใจหลักการของการเขียนโปรแกรมเชิงวตั ถุ 11.2 เขา ใจวิธกี ารสรางคลาส และออบเจ็ค 11.3 สามารถแสดงขอมลู ของออบเจ็คทสี่ รางขึน้ มาจากคลาสได _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูรวิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
148 เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) บทท่ี 11 การเขียนโปรแกรมเชงิ วัตถุ การเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming: OOP) ในภาษา Java เปน รปู แบบหนึง่ ในการเขียนโปรแกรมท่มี คี วามสำคัญ ซึ่งเปน การพฒั นาจากการเขียนโปรแกรมแบบเดมิ ที่ คุนเคยกนั คือ procedural programming ในบทนี้จะกลาวถึงคณุ สมบัติของ OOP การสรางคลาส และออบเจ็ค ดงั ตอไปน้ี 11.1 การเขียนโปรแกรมเชิงวตั ถุ OOP (Object-Oriented Programming) เปนวธิ กี ารเขียนโปรแกรมทอี่ าศยั แนวคิดของวตั ถุ ชิน้ หนึง่ มคี วามสามารถในการปกปองขอมลู และสืบทอดคุณสมบัติ ทำใหแนวคิดน้ีไดรับการยอมรับ และพัฒนาใชในระบบตาง ๆ มากกมาย เชน ระบบปฏิบัติการ window เปนตน แนวคิด OOP เปน การเขยี นโปรแกรมทเ่ี นนถึงปญ หาและองคป ระกอบของปญหา (เพือ่ แกป ญ หา) การเนนที่ปญหาและ องคประกอบของการแกป ญ หา (Problem Space) จะคลา ยกับการแกไ ขปญ หาและชีวติ ความเปนอยู ของมนุษยที่จะตองมี คน สัตว สิ่งของ เพื่อแกปญหา (มีหนาที่แกปญหา) มากกวาจะมองที่วิธีการ แกปญหานั้น ๆ หรือขั้นตอนในการแกปญหา (Solution Space) ซึ่งเปนวิธีการเขียนโปรแกรมแบบ เกา น่นั เอง อาลนั เคย (Alan Kay) เปนผบู กุ เบกิ แนวคิดการเขียนโปรแกรมเชงิ วัตถุ ไดเ สนอกฎ 5 ขอ ท่ี เปน แนวทางของภาษาคอมพวิ เตอรเ ชิงวัตถุ หรือท่เี รียกวา OOP ดงั นี้ ทกุ ๆ ส่ิงเปน วัตถุ (Everything is an Object) โปรแกรม ก็คือ กลุมของวัตถุท่ีสงขาวสารบอกกันและกันใหทำงาน (A Program is a Bunch of Object Telling Each Other What to do by Sending Messages) ในวัตถุแตละวัตถุจะตองมีหนวยความจำและประกอบไปดวยวัตถุอื่น ๆ (Each Object has Its Own Memory Made Up of Other Objects) วตั ถทุ ุกชนดิ จะตอ งจดั อยูใ นประเภทใดประเภทหนึง่ (Every Object has a Type) วัตถุที่จัดอยูในประเภทเดียวกันยอมไดรับขาวสารเหมือนกัน (All Objects of a Particular Type Can Receive the Same Messages) _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ รู วิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 149 OOP น้ัน ออบเจค็ จะประกอบไปดว ย 2 องคป ระกอบหลกั คือ ตวั แปรซึง่ เปนขอมลู หรือการ กำหนดคุณลักษณะของออบเจ็ค และเมธอดที่เปนฟงกช ั่นการทำงานที่ออบเจ็คที่สามารถทำได การ สรางออบเจค็ นัน้ จะอยูภ ายใตขอกำหนดของคลาส โดยคลาสจะเปนตัวกำหนดวา ออบเจค็ จะมีขอ มลู หรือคณุ ลกั ษณะอะไรบา งและสามารถทำอะไรไดบา ง ดงั นนั้ ออบเจค็ ท่ีสรางขน้ึ มาจากคลาส จะเรียกวา instances ของคลาส ในปจจุบันมีภาษาที่ใชในการเขียนโปรแกรมทีส่ นับสนุน OOP เชน Java C++ C# Python PHP Ruby และอื่น ๆ การเขียนโปรแกรมแบบ OOP นั้นเปนการพัฒนารูปแบบของการเขียน โปรแกรมไปอีกข้ันจากการเขยี นโปรแกรมแบบเดิมที่เราเคยเขียนคอื Procedural programming 11.2 คณุ สมบตั ขิ อง OOP การเขียนโปรแกรมแบบ OOP มีทั้งขอดีและขอเสียเมื่อเปรียบจากการเขียนโปรแกรมแบบเดิม โดยมคี ุณสมบัตทิ เี่ ปนจุดเดน ดังน้ี Code reuse: การนำโคดกลับมาใชใหม ไดอยางมีประสทิ ธิภาพ เมื่อผูเขียนโปรแกรมสราง วัตถุมีจำนวนมากพอก็สามารถนำวัตถุที่สรางขึ้นมาประกอบเปนวัตถุใหม หรือที่เรียกวา คอมโพสติ ชน่ั “Composition” Maintenance: งายตอการบำรุงรักษาและปรับปรุง เพราะแตละคลาสจะมีขอบเขตการ ทำงานและเมธอดของมนั เอง Classes: คลาสที่สรา งขึน้ นัน้ สามารถนำไปสรางเปน ออบเจ็คไดไมจ ำกัด และแตละออบเจ็ค มสี มาชกิ เปนของมันเอง Inheritance: คุณสมบัติการสืบทอด คลาสสามารถสืบทอดจากคลาสอื่นได ซึ่งเปนการ reuse code และพฒั นาตอ เดิมความสามารถจากคลาสเดิมท่ีมอี ยู โดยคลาสหลกั จะเรียกวา superclass และคลาสทสี่ บื ทอดคุณสมบตั ิจากคลาสอ่ืนเรยี กวา subclass Polymorphism: การพองรูป (Polymorphism) ก็คอื การถายทอดคณุ สมบตั ขิ องออบเจ็คที่ มีไดห ลากหลายรปู แบบมาทค่ี ลาสอื่นท่ีรบั คุณสมบตั ินน้ั มา (subclass) ซึ่งสามารถจัดการได จากคลาสตน ฉบบั (superclass) และคลาสท่สี บื ทอดมาน้นั สามารถกำหนดการกระทำท่ีเปน เอกลกั ษณข องตวั เองได _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูริวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
150 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) Encapsulation: เปนคุณสมบัตกิ ารหอหมุ เปนแนวคิดแบบนามธรรมที่วาผูใชไมจำเปนตอง ทราบวาเมธอดและตัวแปรในคลาสนั้นทำงานอยางไร แตมันสามารถทำงานไดสำเร็จและ ใหผลลพั ธทีต่ อ งการได ซึ่งคุณสมบัตนิ ้ผี ใู ชจ ะไมสามารถเขา ถงึ สถานะของออบเจ็คไดโดยตรง แตต องกระทำผานเมธอดทคี่ ลาสนั้นอนุญาตใิ หใชง านเทาน้นั Abstraction: คือการอธบิ ายการทำงานของคลาสและเมธอดในแบบนามธรรม เพื่อนำไปใช สำหรบั ออบเจค็ ทม่ี กี ารทำงานแตกตางกนั เชน ถามีคลาส pet แลว มีออบเจค็ 2 ตัวทีถ่ กู สรา ง ขึน้ มาจากคลาสนี้ คือ cat และ dog หากกำหนดใหความสามารถที่ออบเจ็คนั้นทำไดคือการ ออกเสียง (make noise) ดังนั้นออบเจ็ค cat และ dog จะมีการออกเสียงที่แตกตางกัน แต ทัง้ สองออบเจ็คถูกสรางขน้ึ มาจากคลาสเดยี วกัน 11.3 คลาสและออบเจค็ การเขียนโปรแกรมแบบ OOP มีสวนประกอบสำคัญ คือ คลาส และออบเจ็ค คลาส เปรยี บเสมอื นเปนพมิ พเขยี ว (blue print) ของออบเจ็ค ซึ่งในขั้นตอนการสรางคลาส จะตองประกอบ ไปดวยตัวแปรและเมธอดในการทำงาน จากนัน้ จงึ สรางออบเจค็ ขึ้นมาจากคลาสท่ีสรา งไว ดังนั้นการ สรา งคลาสกค็ ือการออกแบบรูปแบบของวัตถหุ นึง่ ทต่ี อ งการสรา งข้ึนมา เชน ถาตอ งการสรา งรถขึ้นมา 1 คัน ในรปู ท่ี 11.1 รปู ท่ี 11.1 ตัวอยางคลาส Car แหลง ทีม่ า: https://en.wikibooks.org/wiki/A- level_Computing_2009/AQA/Problem_Solving,_Programming,_Operating_Systems,_Databases_an d_Networking/Programming_Concepts/Object-oriented_programming_(OOP) _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 151 จากตัวอยางเปนรปู ที่แสดงใหเหน็ ถึงรายละเอยี ดของรถที่นำมาสรางเปน คลาส จะเหน็ ไดวา จะมี คุณสมบัติ (attribute) และเมธอด (method) เพอื่ อธบิ ายเก่ียวกับรถ ซง่ึ รถกจ็ ะมีคณุ สมบัติของ มนั เชน จำนวนเชื้อเพลงิ (fuel) ความเรว็ สงู สดุ (maxspeed) และอ่ืน ๆ และสว นของการทำงาน จะ เปนการเติมนำ้ มัน (refuel) การเพิ่มและลดความเร็ว (setSpeed) การขับเคลื่อนรถออกไป (drive) และสตารทหรอื หยุดเครอื่ งยนต เปนตน ซง่ึ สิ่งเหลานจ้ี ะถูกกำหนดไวใ นคลาส สามารถนำขอ มลู เหลาน้ี แปลงเปนคลาสในภาษา Java ไดด ังน้ี รปู ที่ 11.2 ตัวอยางโปรแกรมคลาส Car จากตัวอยา งเปนรูปแบบของการประกาศคลาสในภาษา Java ที่มีช่ือของคลาสคือ Car และ ภายในคลาสจะประกอบไปดวยตัวแปร สำหรับเก็บคาคุณสมบัติตาง ๆ ของรถยนต (attributes) และเมธอด (method) เปน ฟง กการทำงานท่ีรถยนตสามารถทำได แตม ีเพยี งแคค ลาสนนั้ โปรแกรมยัง _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
152 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) ไมสามารถทำได ดงั นัน้ ในหัวขอ ตอ ไปจะเปน การสรางออบเจ็คข้นึ มาจากคลาส และนำออบเจ็คนั้นไป มาใชงานเมธอดท่ีอยูใ นคลาส 11.4 การสรา งคลาสและออบเจ็ค การสรา งคลาส คลาสเปน การกำหนดสว นประกอบตา ง ๆ ท่ีจะนำไปสรางออบเจค็ คลาสจะประกอบ ไปดวยสองสวนหลักคอื ตัวแปร และเมธอด ตวั แปรใชส ำหรบั เกบ็ ขอ มูลตา ง ๆ เก่ยี วกับออบ เจค็ และเมธอดเปนการกำหนดฟง กช ันการทำงานของออบเจค็ ในภาษา Java มีรปู แบบการ สรา งคลาสตอไปนี้ class ClassName { // member variables // member methods } สำหรบั การสรา งคลาสจะใชค ำสง่ั class และตามดวยชอื่ คลาส ชอ่ื คลาสควรเร่ิมตน ดว ยตัวพิมพใ หญและมีหลักการต้งั ชือ่ เชนเดียวกับตวั แปร ภายในบลอ็ กของคลาสจะมสี มาชิก ทเี่ ปนตัวแปรและเมธอด หรืออยางใดอยางหนงึ่ ดงั รปู ท่ี 11.3 _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู ิวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) 153 รูปที่ 11.3 คลาส Person คลาส Person ประกอบดว ย 3 คณุ สมบัติ (attribute) คอื name เปน String สำหรับเกบ็ ชอื่ age เปน integer สำหรับเก็บาอายุ และ nationality เปน String สำหรับเก็บสัญชาติ มีเมธอด 3 เมธอด คือ setNationality() สำหรับกำหนดคาตัวแปร nationality เมธอด getNationality() สำหรับรับคาสัญชาติไปใชงาน และเมธอด showInfo() เปนเมธอดสำหรับแสดงขอมูลทั้งหมดของ ออบเจค็ เปนคาขอมลู ชนิด String ทางจอภาพ การสรา งและใชง านออบเจค็ เมื่อสรางคลาสเสร็จเรียบรอยแลว ขั้นตอนตอไปเปนการสรางออบเจ็ค โดยจะนำ คลาส Person มาสรางออบเจค็ ดังรปู ที่ 11.4 _________________________________________________________________________ เรียบเรียงโดย: อาจารยภ รู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
154 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) รูปท่ี 11.4 คลาส exPerson จากตวั อยางเปนการสรา งออบเจค็ จากคลาส Person ดวยคำสัง่ Person p1 = new Person(); Person p2 = new Person(); _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภูรวิ ฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 155 โดยที่ p1 และ p2 เปน ตวั แปรประเภทออบเจ็คของคลาส Person และออบเจ็คทั้ง สองน้ันเปนอิสระตอกนั โดยแตล ะออบเจ็คกจ็ ะมตี ัวแปรและเมธอดของมันเอง ในคำสั่งตอไป เปนการกำหนดคา ใหกับออบเจค็ ท้ังสองดวยคำสัง่ ตอ ไปน้ี p1.name = \"Puriwat Lertkrai\"; p1.age = 33; p1.nationality = \"Thai\"; p2.name = \"Captain America\"; p2.age = 34; p2.nationality = \"Americans\"; สำหรับการเขาถึงคุณสมบัติ (attribute) ของออบเจ็คในคลาส Person นั้นจะใช เครื่องหมาย dot (.) แลวตามดวยชื่อตัวแปรที่จะเขาถึง เชน p1.name = “Puriwat Lertkrai”; หมายถึง ออบเจ็ค p1 เขาถึงตัวแปร name และกำหนดคาใหกับตัวแปรเปน “Puriwat Lertkrai” เม่ือกำหนดคาใหกับออบเจ็คแลวสามารถแสดงผลขอมลู ของแออบเจ็ค ไดด ังน้ี p1.showInfo(); p2.showInfo(); p1.setNationality(\"Japanese\"); p1.showInfo(); _________________________________________________________________________ เรียบเรียงโดย: อาจารยภ ูรวิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
156 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) ในตวั อยางออบเจ็คท้งั สองเรยี กใชเ มธอดที่ชือ่ showInfo(); ซึ่งไดมีการสรางเมธอดนี้ ไวในคลาส Person เนื่องจากออบเจค็ ถกู สรา งขึ้นมาจากคลาส ดงั น้นั จึงหมายความวา เมธอด showInfo(); เปนความสามารถหน่ึงท่อี อบเจ็คสามารถทำได หรอื สามารถเรียกใชง านเมธอด ที่อยูใ นคลาส Person ได คำสั่งที่เรียกใชเมธอด setNationality(); เพื่อทำการกำหนดคาตวั แปร nationality ของออบเจ็ค p1 ใหมีคาเปน Japanese ผลลัทธการรันโปรแกรมนี้จะ ไดผ ล ดงั รูปท่ี 11.5 รปู ที่ 11.5 ผลลทั ธการรันโปรแกรม exPerson จะเห็นไดวามีการเรียกใชงานเมธอด showInfor(); ถึง 3 ครั้ง ในแตละครั้งจะเปน การแสดงขอมูลของออบเจ็คท่ีเรียกใชเมธอดนี้ แสดงใหเห็นวาออบเจ็คนั้นเปนอิสระตอกัน และเปนวิธกี ารใชค ุณสมบตั หิ ลกั ของการเขียนโปรแกรมแบบ OOP คือ การ reuse คำส่ังท่ีมี อยูแลว เพื่อลดความซำ้ ซอ นของการเขยี นโปรแกรม 11.5 คอนสตรคั เตอร คอนสตรคั เตอร (constructor) เมื่อกลาวถึงคลาสและเมธอดแลว อีกสิ่งหนึง่ ทขี่ าดไมไ ดเ ลยใน การเขียนโปรแกรมแบบ OOP คือ คอนสตรัคเตอร ซึ่งเปนเมธอดพิเศษที่จะทำงานเมื่อออบเจ็คถกู สรางขึ้น โดยทั่วไปจะใชคอนสตัคเตอรในการกำหนดคาเริม่ ตนใหกับออบเจค็ ในรูปที่ 11.3 ตัวอยาง คลาส Person นั้นไมมีการสรางคอนสตรัคเตอร ในกรณีที่ผูเขียนโปรแกรมไมไดระบุเมธอดนี้ไวใน _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูริวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) 157 คลาส ตัวคอมไพเลอรข องภาษา Java จะทำการสรางคอนสตรัคเตอรใหแบบอัตโนมัติ หรือท่ีเรียกวา default constructor ตอไปมาดูตวั อยา งของคลาส Person ในกรณที ี่มกี ารระบคุ อนสตคั เตอรไ ว ดัง รูปท่ี 11.6 รูปที่ 11.6 ตวั อยา ง Constructor คอนสตรัคเตอร คือ เมธอดพเิ ศษทม่ี ีชื่อเดยี วกันกบั ชือ่ คลาส จากรูปท่ี 11.6 ช่ือคลาสคอื Person ดังน้นั คอนสตรคั เตอรจงึ มีช่อื เปน Person เชน เดยี วกันและกำหนดระดับการเขาถงึ เปน public เสมอ คลาสแตล ะคลาสสามารถมไี ดมากกวา 1 คอนสตรัคเตอร วธิ นี ี้เรียกวา overloading constructor ซง่ึ เปน หลักการเดียวกันกบั overloading method ตัวอยางการสรา งออบเจ็ค เชน _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ ูรวิ ัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
158 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) Person p1 = new Person(); Person p2 = new Person(\"Puriwat\", 33, “Thai”); ในตัวอยางคำส่ังเปนการสรางออบเจ็ค 2 แบบ คอื แบบแรกเรยี กใช default constructor จะไมมีการสงอากวิ เมนตตามรปู แบบการรบั พารามเิ ตอรข องคอนสตรคั เตอรต วั แรก แบบทส่ี องเปน การสรางออบเจบ็ โดยกำหนดคา เรมิ่ ตน ใหก บั ออบเจค็ ทันที โดยการสง อากิวเมนตไ ปยงั คอนสตรัคเตอร ท่สี องตามรปู แบบของพารามิเตอรน นั้ 11.6 คำสง่ั this และ static คำส่งั this this เปนคำสงั่ สำหรบั การอา งถงึ คุณสมบตั ิ (attribute) ของออบเจ็คปจจบุ นั สำหรบั ตัวอยางคอนสตรัคเตอรจากรูปที่ 11.6 ไดใช this.name นั้นหมายถึง name ของออบเจ็ค ในขณะท่ี name นั้นจะเปนพารามเิ ตอรของเมธอด หากในขอบเขตของโปรแกรมน้ันไมมีช่ือ ของตัวแปรที่ซ้ำกันก็ไมจำเปนตองใชคำสั่ง this ก็ได เชนในเมธอด getNationality () นอกจากนีค้ ำส่ังนยี้ งั ถกู ใชในเรอ่ื งของ Inheritance คำสงั่ static static เปนคำสั่งที่ใชสำหรับกำหนดใหตัวแปรหรือเมธอด สามารถเขาถึงไดแบบ สาธารณะถาหากประกาศเปน public และถา นำไปใชก บั ออบเจค็ จะทำใหท กุ ออบเจค็ นัน้ อาง ถงึ ตัวแปรเดยี วกัน ตัวอยางการใชคำสง่ั static ดงั รปู ที่ 11.7 _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ รู ิวฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 159 รูปที่ 11.7 การใชค ำสั่ง static จากตวั อยางไดทำการเปลย่ี นตวั แปร age ในคลาส Person เปน static ดงั น้ันออบเจ็คทุกตัว ที่ถูกสรางขึ้นมาจากคลาสนี้จะใชตัวแปรนี้รวมกัน หรือหมายถึงหากมีออบเจ็คใดทำการกำหนดคา ใหกบั ตวั แปร age จะทำใหอ อบเจ็คอื่นมคี าตัวแปร age เปลีย่ นไปเปนคาเดยี วกัน นอกจากนี้ยังมีการสรางคลาสชื่อ StaticMember โดยมีคุณสมบัติ (attribute) เปน static และระดับการเขาถึงเปน public ทั้งหมด ดังนั้นออบเจ็คของคลาสนี้จะสามารถเขาถึงไดจ ากที่ใด ๆ โดย prefix ของคลาส เชน staticMember.NAME_PREFIX และ staticMember.displayName() และไดผ ลลพั ธก ารรนั โปรแกรมดงั รูปที่ 11.8 _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภรู ิวฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
160 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) รปู ท่ี 11.8 ผลลัพธตัวอยา งการใชค ำส่งั static ผลจากการรันโปรแกรม จะแสดงใหเห็นวาออบเจ็ค p1 และ p2 นั้นจะมีคาตัวแปร age เทา กนั คอื 70 เพราะตัวแปร age ถูกกำหนดคา ลา สุดท่ีคำส่งั p2.age = 70 _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภูรวิ ัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) 161 แบบฝกหดั บทที่ 11 1. จงสราง class ชือ่ SuperCar เพื่อเปนตัวแทนของ hero โดยที่ super car จะตองประกอบไปดวย ขอ มูลที่เปน Instance variable ของ super car คอื car brand, car color, car engine size, max speed และ country of origin และ SuperCar Class จะตองมี constructor เพื่อใชสำหรับการ กำหนดคา เรมิ่ ตน ใหก ับ 5 ตวั แปรดังกลา ว และมี getter() และ setter() เมธอดสำหรับแตละตัวแปร อกี อยางหนง่ึ SuperCar Class จะมี method ชื่อ getSuperCarInfo() เพ่อื แสดงขอ มลู ของรถแตละ คนั 2. จากขอที่ 1 จงสรางคลาสชื่อ mySuperCar เปนสวนติดตอกับผูใชเพื่อทำการรับขอมูลรถ 5 คัน จากผูใช โดยนำขอมูลของ Object มาเก็บไวใน ArrayList และแสดงผลขอมูลของรถท้ัง 5 คัน ทาง จอภาพ _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภูริวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
162 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) วธิ กี ารสอนและกจิ กรรม 1. สอนแบบบรรยายโดยใชสือ่ ประกอบการสอน 2. ใหน กั ศึกษามสี ว นรว มในกจิ กรรมระหวางการเรียนการสอนโดยใชว ธิ กี ารถาม-ตอบ 3. ปฏิบตั ิการเขียนโปรแกรมการสรา งคลาสและออบเจค็ เอกสารประกอบ เอกสารประกอบการสอน บทที่ 11 การเขยี นโปรแกรมเชงิ วตั ถุ สอื่ การสอน ส่ือประกอบการสอน ไฟลนำเสนอ power point บทที่ 11 การเขียนโปรแกรม เชิงวัตถุ โสตทศั นวสั ดุ เคร่อื งฉายโปรเจคเตอร งานทม่ี อบหมาย 1. ศกึ ษารูปแบบการเขียนโปรแกรมเชิงวตั ถุ การสรา งคลาส และการสรางออบเจ็ค 2. แบบฝก หดั การเขยี นโปรแกรมเชงิ วตั ถุ การวดั ผล 1. สังเกตพฤตกิ รรมการเรยี นในหอ งเรียน 2. สงั เกตพฤตกิ รรมการมสี วนรว มในกจิ กรรมระหวา งการเรียนการสอนในการถาม-ตอบ 3. ตรวจงานทม่ี อบหมาย 4. ทดสอบตามจุดประสงคก ารสอน บันทึกการสอนและขอสงั เกต …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………….. _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภูริวฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 163 สปั ดาหท ่ี 13 ใบเตรยี มการสอน เวลา 4 ช่วั โมง บทท่ี 12 การจดั การขอผดิ พลาด 12.1 เอ็กเซป็ ชั่น 12.2 คำสง่ั try-catch 12.3 คำสงั่ finally 12.4 คำสงั่ throws จดุ ประสงคก ารสอน 12.1 เขา ใจความแตกตา งระหวาง Error และ Exception 12.2 สามารถจดั การขอ ผิดพลาดโดยใชคำส่ัง try-catch และ finally ได 12.3 สามารถจัดการขอ ผิดพลาดโดยใชค ำสั่ง throw ได _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภูริวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
164 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) บทที่ 12 การจัดการขอผดิ พลาด การเขียนโปรแกรมนั้น ความผิดพลาดคือเรื่องปกติที่จะเกิดขึ้นไดทุกเมื่อ ในภาษา Java มี วธิ ีการจดั การขอ ผดิ พลาดทีอ่ าจจะเกดิ ขนึ้ ในระหวางท่โี ปรแกรมทำงานซึง่ เรยี กวา exception 12.1 เอ็กเซป็ ชั่น เอก็ เซ็ปช่นั (Exception) ในภาษา Java คอื การทโ่ี ปรแกรมพยายามจะทำงานบางอยาง แต เกิดขอ ผิดพลาดขึน้ แลวโปรแกรมไมสามารถจดั การขอผิดพลาดนัน้ ได และทำใหโปรแกรมหยุดทำงาน ยกตัวอยางเชน การหารดวยศูนย, การเปดขอมูลที่ไมม อี ยู หรือการใชชนิดขอมูลไมตรงกับที่กำหนด เปนตน exception สามารถแบงออกเปน 2 ประเภทใหญ ๆ คือ Runtime exception และ IO exception Runtime Exception Runtime exception เปน ขอ ผดิ พลาดท่ีเกดิ ขน้ึ ในขัน้ ตอนการเขียนโปรแกรม เชน o ArraylndexOutOfBounsException เปนความผิดพลาดที่เกิดจากการอางอิงถึง สมาชิกในอาเรยไมถูกตอง เชน มีการกำหนดขนาดของอาเรยไว 5 ตำแหนง แตมี การอางถงึ สมาชิกในตำแหนง ที่ 6 เปนตน o ArithmeticException เปนขอผิดพลาดที่เกิดจาการดำเนินการทางคณิตศาสตร เชน การหารดว ยศูนย เปน ตน o NullpointerException เปนความผิดพลาดที่เกิดจากการอางอิงถึงคาที่เปน Null เชน การเรียกใช Object ท่ยี งั ไมไ ดถ กู สรางขึน้ เปน ตน _________________________________________________________________________ เรียบเรียงโดย: อาจารยภูริวฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 165 IO Exception เปนขอ ผดิ พลาดท่ีภาษา Java กำหนดใหตอ งมีการจดั การหากมกี ารเรยี กใชเมธอดท่ีอาจเกิด ขอ ผดิ พลาดประเภทนี้ เชน o EOFException เปน ความผดิ พลาดทเี่ กดิ จากการระบจุ ดุ สน้ิ สุดของไฟลไมถกู ตอง o FileNotFoundException เปนความผิดพลาดทเ่ี กิดจากการไมพบ File ที่กำหนด การจัดการความผิดพลาดที่เกิดขึ้นโดยการใช Exception นั้นสามารถทำไดโดยการใชงาน ชดุ คำสง่ั 2 คำสัง่ คือ คำสง่ั try-catch หรอื catch block และคำส่ัง throws 12.2 คำสงั่ try-catch การทำงานที่คลายกับคำส่ัง if โดยที่หากตรวจพบความผิดพลาดในคำสั่งที่อยูหลังคำสั่ง try โปรแกรมจะทำการตรวจสอบที่คำสั่ง catch วาเปนความผิดพลาดประเภทใด และจะทำงานตาม ชุดคำสั่งที่อยูหลงั คำสั่ง catch ทต่ี รงกบั ขอ ผิดพลาด รูปแบบการใชง านคำสง่ั try-catch มีดังน้ี try { // try to do something } catch (Exception1 ex1) { // handle for exception 1 } ... } catch (ExceptionN exN) { // handle for exception N } finally { // Always proceed this block whether // an exception is thrown or not } _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูรวิ ัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
166 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) ในบลอ็ กคำส่งั try เปน สวนของโปรแกรมท่อี าจจะเกดิ exception ขนึ้ ในบล็อกคำสั่ง catch เปน การจัดการกับ exception แตละแบบ และบลอ็ กคำสัง่ finally โปรแกรมจะเขามาทำงานเสมือน ไมวาจะเกดิ exception ในบล็อกคำสง่ั try หรอื ไม สำหรบั ภาษา Java นนั้ มีไลบรารท่ี ่ีใชใ นการจดั การ กับ exception ที่ทำใหผูเขียนโปรแกรมสามารถจัดการกับขอผิดพลาดประเภทตาง ๆ ได สำหรับ ตัวอยางการจัดการขอผิดพลาดในบทนี้จะยกตัวอยางเพยี งบางสวนเทานั้น ตัวอยางเชน การจัดการ ขอผิดพลาดท่ีเกิดจากการรบั คา ขอมูลจากผใู ช ดงั รูปที่ 12.1 รปู ที่ 12.1 ตวั อยางการจดั การขอผิดพลาด จากตัวอยางโปรแกรมเปนการรับขอมูลจากผูใช โดยใหผูใชกรอกขอมูลเปนจำนวนเต็ม จากนั้นโปรแกรมจะอานคาขอมลู นน้ั เก็บไวในตวั แปร x ดวยคำส่งั x = reader.nextInt(); คำส่ังนี้ใช สำหรับอา นคาตัวเลขเทานั้น ซึ่งเปนไปไดวาผูใ ชอาจจะใสขอมลู อยางอื่นมาที่ไมใชตัวเลขซึ่งจะทำให เกิด InputMismacthException ตามผลลพั ธก ารรันในรูปที่ 13.2 รปู ที่ 12.2 ผลการรันท่ีเกิดขอผิดพลาด _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ รู ิวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) 167 จากรูปจะเหน็ ไดวา เม่ือผูใชก รอกขอ มูลเปน ขอความวา “Java” จะทำใหเ กิด exception ข้ึน พรอ มทั้งระบุชอ่ื ไฟลแ ละเลขบรรทดั ของโปรแกรมที่เกดิ ขอ ผิดพลาดขน้ึ เพื่อจัดการ exception ที่อาจเกิดขึ้น ผูเขียนโปรแกรมสามารถใชคำสั่ง try-catch ในการ ตรวจจบั exception โดยการปรับปรุงโปรแกรมใหสามารถจดั การกับ exception ดังรูปที่ 12.3 รูปที่ 12.3 ตวั อยา งการใชคำสั่ง try-catch จากในตัวอยางโปรแกรมขางตนใชคำสั่ง try-catch เพื่อตรวจสอบ excepton InputMismatchExcepton ถาเกิด exception นี้ขึ้น ในบล็อกคำสั่ง try จะทำการโยน (throw) exception มายังคำสั่ง catch แลวทำการแสดงรายละเอียดของออบเจ็ค e ดวยคำสั่ง System.out.println(“Exception occurred: “+ e); จะไดผ ลลัพธ ดังรปู ท่ี 12.4 รูปที่ 12.4 ผลการตรวจสอบ exception _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูริวฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
168 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) จะเหน็ ไดวา เม่ือผูใชก รอกขอ มลู ทไ่ี มใ ชตัวเลข โปรแกรมก็สามารถจัดการกับ exception น้ัน ไดโดยบอกผูใชวาเกิด exception ขึ้น ในกรณีนี้โปรแกรมจะไมหยุดทำงาน และยังสามารถทำงาน อยา งอืน่ ตอไปได ในตัวอยา งตอไปจะเปน การตรวจจบั exception ท่ีมีความซับซอ นขน้ึ ดังรปู ที่ 12.5 รูปที่ 12.5 ตวั อยา งการใชคำส่ัง try-catch ทีซ่ อ นกัน จากในตัวอยางจะเห็นไดวาอาจจะมีขอผิดพลาดที่เกิดขึ้นได 2 สิ่ง คือ การใสตัวเลขที่ไม ถูกตอง และ index ของอาเรยไมถูกตอง โดยทำการ catch exception เหลานั้น เพื่อใหโปรแกรม สามารถทำงานตอไดหากเกิดขอ ผดิ พลาดขึ้น แสดงใหเห็นวาคำสั่ง try-catch นั้นสามารถซอนกันได เชนเดียวกับคำส่งั if หรือ คำสั่ง for เปนตน ผลลพั ธการรันโปรแกรมจะไดแสดงผล ดังรปู ท่ี 12.6 รปู ที่ 12.6 ผลลัพธการรันตัวอยางการใชคำสง่ั try-catch ทซ่ี อนกัน _________________________________________________________________________ เรียบเรียงโดย: อาจารยภูรวิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพิวเตอร (11-413-202) 169 จากผลลพั ธการรนั โปรแกรมในตัวอยางนีผ้ ใู ชกรอกเลข 8 เขามาในโปรแกรม ซง่ึ จะทำใหเกิด ArrayIndexOutOfBoundsException ขึ้น เน่ืองจากอาเรยท ่ปี ระกาศไวม ี index ตั้งแต 0-4 เม่อื ผูใช กรอกขอมูลท่ไี มอ ยูในชว ง index ของอาเรยจงึ ทำใหเ กดิ exception ดังกลา วข้ึน 12.3 คำสง่ั finally สำหรบั คำสัง่ finally นั้นจะทำงานทุกครั้งไมวาจะเกิด exception ขึ้นหรือไม โดยสวนใหญ จะใชใ นงานสำคัญ เชน การปด ไฟล หรอื การปดการเช่อื มตอ ฐานขอมลู เมอ่ื โปรแกรมทำงานเสร็จส้ิน แลว ในตวั อยา งนี้จะเปนการใชค ำส่งั finally สำหรับการปดไฟล ดงั รปู ที่ 12.7 รูปท่ี 12.7 ตวั อยา งคำสั่ง finally _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ ูริวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
170 เอกสารประกอบการสอน วชิ าการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) ในตัวอยางเปนการเปด ไฟล Text.txt ในโฟลเดอรโปรเจค (project directory root) โดยมี การตรวจจับ exception 2 อยา งคอื FileNotFounException สำหรบั ในกรณีท่ีโปรแกรมไมพบไฟล ที่ตองการเปด และ IOException สำหรับกรณีที่พบไฟลแลวแตไมสามารถอานไฟลได ไมวาจะเกิด exception ใดข้ึนกต็ ามเมอ่ื ทำการเปดไฟลห รอื อา นไฟลแลว โปรแกรมจะตองทำการปดไฟลน ั้น ดงั นั้น ในคำสงั่ finally จึงมคี ำส่ังเพือ่ ใชใ นการปดไฟลด งั กลาว นอกจากนี้ในตัวอยางยังมีการใชคำสั่ง e.printStrackTrace(); เปนเมธอดที่ใชสำหรับ IDE เพือ่ บอกรายละเอียดเกี่ยวกบั ขอ ผดิ พลาด เชน บรรทดั ท่ีเกิดขอผิดพลาด และคลาสทีร่ นั ใชสำหรับการ debug โปรแกรม 12.4 คำสงั่ throws โดยปกติการเขยี นโปรแกรมจะมกี ารสรางเมธอดไวสำหรบั ทำงานเฉพาะบางอยางเปน จำนวน มากและมีการเรยี กใชกันไปมาระหวา งเมธอดดว ยกัน เชน เมธอด main(); เรียกใช เมธอด A(); และ เมธอด A(); เรียกใชเมธอด B(); ในกรณที ีบ่ างเมธอดอาจมีขอ ผดิ พลาดเกดิ ขึน้ จากเมธอดใดเมธอดหน่ึง ในโปรแกรมแลวไมม กี ารตรวจจับขอผดิ พลาด เมื่อขอ ผิดพลาดกลับไปยังเมธอด main(); โปรแกรมก็ จะไมสามารถทำงานตอได วิธีการที่งายที่สุดสำหรับการแกปญหานี้คือ การโยนความผิดปกติไปให เมธอดอ่นื จดั การกับขอ ผิดพลาดนั้นเอง ดวยการใชคำสง่ั throws ทส่ี ว นของการสรา งเมธอด ดังรูปท่ี 12.8 รปู ที่ 12.8 ตวั อยา งโปรแกรมการหาร _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภรู วิ ัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
เอกสารประกอบการสอน วิชาการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) 171 จากตวั อยางเปนโปรแกรมการหารโดยมีเมธอด divide(); ทที่ ำหนา ทีก่ ารหารเลขจำนวนเต็ม สองจำนวนถกู เรยี กใชจากเมธอด main(); จะสังเกตเหน็ วาอากวิ เมนตทสี่ ง มาคือ 10 และ 0 ตามลำดับ และเมื่อมีการหารเกิดขึ้นจะทำใหเกิดขอผิดพลาดที่เมธอด divide(); เปน ArithmeticException เนื่องจากมีการหารดวย 0 และ exception นี้ไมถูกตรวจสอบเมื่อโปรแกรมกลับไปทำงานที่เมธอด main(); จึงไมสามารถทำงานตอ ไปไดและไดผลลัทธ ดงั รปู ท่ี 12.9 รปู ท่ี 12.9 ผลลพั ธท เ่ี กิดจากการหารดว ยศูนย ในหัวขอนี้จะใชคำสั่ง throws เพื่อทำการโยน exception นี้ไปใหเมธอด main(); เปนคน จดั การกบั ขอ ผดิ พลาด โดยสามารถปรบั ปรงุ โปรแกรมไดตามตัวอยา งในรปู ท่ี 12.10 รูปที่ 12.10 ตัวอยางการใชค ำส่ัง throws _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภรู วิ ฒั น เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจัดการ
172 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) ในเมธอดหน่ึงๆ อาจจะไมมี หรือมี exception ที่อาจจะเกิดขึ้นไดหลายรูปแบบ ดังนั้นการ ระบุคำสั่ง throws อาจจะระบุคลาสของ exception ไดมากกวาหนึ่ง โดยมีเครื่องหมาย (,) แบง ระหวางชอ่ื คลาส เชน ตวั อยา งในรปู ท่ี 12.11 รูปท่ี 12.11 ตัวอยา งการใชค ำสั่ง throws แบบหลายคลาส ในเมธอด divide(); มีการใชคำสงั่ throws ทั้งหมด 3 คลาสดวยกัน ถงึ แมว า เมธอดน้ีอาจจะ เกดิ exception ไดห ลายคลาส แตก ารทำงานจริงจะมเี พียง exception คลาสเดยี วเทา นัน้ ที่สามารถ ถูกโยนออกมาได ขึ้นอยูกับวา เกิด exception คลาสอันไหนกอ น ดังนั้นลำดับของคลาส exception ทีร่ ะบใุ นคำสัง่ throws จะไมม ผี ลตอการทำงาน _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภ รู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) 173 เนื่องจากคลาส exception ประเภทตาง ๆ ในภาษา Java นั้นสืบทอดมาจากคลาส Exception ดังนั้นผูเขยี นโปรแกรมสามารถใชคำสัง่ catch ในการดักจับ exception ทั้งหมดได โดย ใชคำสงั่ ดงั นี้ catch (Exception e) { System.out.println(\"Exception type: \" + e); } ยังมี exception ประเภทอื่น ๆ อีกที่อาจจะเกิดขึ้น รายการ exception ทั้งหมดในภาษา Java สามารถศึกษาเพ่มิ เติมไดจากลิง้ ตอ ไปนี้ https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html _________________________________________________________________________ เรียบเรียงโดย: อาจารยภ รู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
174 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพวิ เตอร (11-413-202) แบบฝกหัดบทที่ 12 1. จากตวั อยา งโปรแกรมจงตอบคำถามตอ ไปนี้ 1.1 Exception ทเ่ี กิดขึน้ คอื คลาสใด และเพราะอะไรถงึ เกิด exception น้ีข้ึน 2.2 ทำการแกไ ขโปรแกรมดงั กลา วดว ยวธิ กี ารจดั การ exception 2. จงเขียนโปรแกรมรับขอมูล String จากผูใช เชน “123” หรือ “MIT” จากนั้นแปลงString เปน ตัวเลข สักเกตขอผิดพลาดที่เกิดขึ้น และแกไขตรวจจับขอผิดพลาดของโปรแกรมโดยใชคำสั่ง try- catch หรือ throws _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ รู ิวฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) 175 วิธกี ารสอนและกิจกรรม 1. สอนแบบบรรยายโดยใชส อ่ื ประกอบการสอน 2. ใหน ักศึกษามีสวนรว มในกจิ กรรมระหวางการเรียนการสอนโดยใชว ธิ กี ารถาม-ตอบ 3. ปฏิบัตกิ ารเขียนโปรแกรมการจัดการขอ ผดิ พลาด การตรวจจบั และการโยนขอผดิ พลาด เอกสารประกอบ เอกสารประกอบการสอน บทที่ 12 การจดั การขอ ผดิ พลาด สอ่ื การสอน สอื่ ประกอบการสอน ไฟลนำเสนอ power point บทท่ี 12 การจดั การ ขอผดิ พลาด โสตทัศนวัสดุ เคร่ืองฉายโปรเจคเตอร งานท่ีมอบหมาย 1. ศึกษาการจดั การขอผดิ พลาดโดยใชค ำสงั่ try-catch finally และคำสั่ง throws 2. แบบฝก หัดการเขยี นโปรแกรมเกีย่ วกบั การจดั การขอ ผดิ พลาดรูปแบบตา ง ๆ การวัดผล 1. สังเกตพฤติกรรมการเรยี นในหอ งเรียน 2. สงั เกตพฤตกิ รรมการมสี ว นรวมในกจิ กรรมระหวางการเรยี นการสอนในการถาม-ตอบ 3. ตรวจงานทม่ี อบหมาย 4. ทดสอบตามจดุ ประสงคก ารสอน บันทกึ การสอนและขอสงั เกต …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………… _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภรู ิวัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
176 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) _________________________________________________________________________ เรยี บเรยี งโดย: อาจารยภรู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 177 สัปดาหท่ี 14 ใบเตรียมการสอน เวลา 4 ชว่ั โมง บทที่ 13 การทำงานเกี่ยวกบั ไฟล 13.1 คลาส File 13.2 การสรา ง text file 13.3 การอานขอ มูลจาก text file 13.4 การเขียนขอมูลลง text file จดุ ประสงคการสอน 13.1 สามารถสรา งไฟล อานไฟล และเขียนไฟล 13.2 สามารถใชเ มธอดในคลาส File ไดอ ยา งถูกตอ ง _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภูริวัฒน เลศิ ไกร สาขาระบบสารสนเทศ คณะเทคโนโลยกี ารจดั การ
178 เอกสารประกอบการสอน วชิ าการเขียนโปรแกรมคอมพิวเตอร (11-413-202) บทที่ 13 การจัดการไฟล แฟมขอ มูลในเครื่องคอมพวิ เตอรสามารถนำมาใชงานผา นการจดั การดว ยวธิ กี ารทห่ี ลากหลาย ซึ่งภาษา Java มีคลาส File ใหผูเขียนโปรแกรมสามารถดำเนินการกับแฟมขอมูลเหลานั้นไดตาม ตอ งการ เชน ตรวจการมีอยขู องแฟม ตรวจวาเปนแฟม หรอื โฟลเดอร ขอขอมูลขนาดแฟม เปนตน ใน บทนีจ้ ะเปน การใชภาษา Java เพอ่ื จัดการกับ text file ซ่งึ เปนไฟลพนื้ ฐาน ดังน้ี 13.1 คลาส File คลาส File เปนคลาสที่อยูในไลบรารี่ของ Java ซึ่งจะมีเมธอดที่จะชวยใหผูเขียนโปรแกรม สามารถทำงานกบั ไฟลไ ด ตามตารางท่ี 13.1 ตารางที่ 13.1 เมธอดในคลาส File เมธอด คำอธิบาย canRead() ตรวจสอบวา ไฟลอ านไดห รือไม canWrite() ตรวจสอบวา ไฟลเ ขียนไดห รือไม exist() ตรวจสอบวา ไฟลท่อี างถึงมีอยูหรือไม getName() อานช่อื ของไฟล getPath() อานทีอ่ ยขู องไฟล isFile() ตรวจสอบวา ไฟลท อี่ างถึงเปนไฟลจ รงิ หรือไม length() ตรวจสอบขนาดของไฟล delete() สำหรบั ลบไฟล renameTo() สำหรบั เปลยี่ นชื่อไฟล นอกจากตวั อยา งเมธอดเหลานแ้ี ลว คลาส File ยังมีเมธอดอกี มากมายสามารถศึกษาเพม่ิ เติม ไดจ ากลง้ิ ตอ ไปนี้ https://docs.oracle.com/javase/8/docs/api/ _________________________________________________________________________ เรียบเรียงโดย: อาจารยภรู วิ ัฒน เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพิวเตอร (11-413-202) 179 13.2 การสราง text file การสราง text file ในภาษา Java จะเปนวิธีการสรางออบเจ็คของคลาส File โดยการใช คำส่งั new โดยมรี ปู แบบดงั น้ี File filename = new File (path); โดยท่ี filename คือ ชือ่ ของออบเจค็ คลาส File path คือ ท่อี ยแู ละชอ่ื ไฟล รูปที่ 13.1 ตวั อยางโปรแกรมสรา ง text file จากรปู ที่ 13.1 ตัวอยางโปรแกรมการสรา ง text file ชอ่ื text.txt โดยการใชค ลาส File และ ประกาศออบเจค็ ช่ือ file สำหรับคำสั่ง if เปน คำสัง่ สรางไฟล file.createNewFile() หาก expression ของคำสั่ง if เปน true จะทำการสรางไฟลใหมตามชื่อขางตนและแสดงขอความ “New File is created.” ทางหนาจอภาพ แตห าก expression ของ if เปน false แสดงวาไมสามารถสรา งไฟลใหม ได ซึ่งอาจเกิดจากไฟลนัน้ มีอยูแลว เปนตน นอกจากนี้ในการใชคำสั่งในการสรางไฟลจะตองมีการ ตรวจจับขอผิดพลาดสำหรับในกรณีที่ไมสามารถสรางไฟลได ก็ใหโปรแกรมแจง exception ที่อยูใ น _________________________________________________________________________ เรียบเรยี งโดย: อาจารยภ รู วิ ฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจดั การ
180 เอกสารประกอบการสอน วิชาการเขยี นโปรแกรมคอมพวิ เตอร (11-413-202) คลาส IOException ใหผ ูเขียนโปรแกรม ซ่งึ จะทำใหโปรแกรมสามารถทำงานในคำส่ังอน่ื ตอไปได ผล ลทั ธการรันตัวอยา งน้จี ะไดผล ดงั รปู ที่ 13.2 รปู ท่ี 13.2 ผลลการรนั โปรแกรมตวั อยางการสราง text file จากผลลัพธแสดงวาโปรแกรมสามารถสรา งไฟลชือ่ Text.txt ไดส ำเรจ็ ในตวั อยางโปรแกรม ไมไดระบุตำแหนง ที่อยู (path) ของไฟล Text.txt ไว ดังน้ันไฟลด ังกลา วจะถูกเก็บไวในโปรเจค โฟลเดอร ดงั รูปท่ี 13.3 รูปท่ี 13.3 ท่อี ยูไ ฟล Test.txt IntelliJ IDEA ทใ่ี ชส ำหรับเขยี นโปรแกรมภาษา Java แลว ยังสามารถเขียนขอ มลู ใน text file ไดอกี ดว ย ในรูปท่ี 13.4 ทดลองเพม่ิ ขอความเขาไปใน Test.txt ตวั อยาง ดังรปู ท่ี 13.4 รปู ท่ี 13.4 เพ่มิ ขอความใน Test.txt _________________________________________________________________________ เรยี บเรียงโดย: อาจารยภ ูริวฒั น เลิศไกร สาขาระบบสารสนเทศ คณะเทคโนโลยีการจัดการ
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228