Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore โปรแกรมเชิงวัตถุเบื้องต้น

โปรแกรมเชิงวัตถุเบื้องต้น

Published by panyaponphrandkaew2545, 2020-02-11 08:32:16

Description: โปรแกรมเชิงวัตถุเบื้องต้น

Search

Read the Text Version

บทท่ี 1 การเขียนโปรแกรมบนระบบมาตรฐานเปิ ด ความเป็ นมาและและนิยามของระบบมาตรฐานเปิ ด อสุ าหกรรมซอฟตแ์ วรน์ นั้ มีดการพฒั นาไปอยา่ งกวา้ งขวางและหลากหลายรูปแบบ ตงั้ แตอ่ ดตี จนถงึ ปัจจบุ นั จงึ เป็นเหตใุ หม้ คี วามหลากหลายทงั้ มาตรฐาน และความ นยิ มในการใชง้ าน ทงั้ หมดนีม้ ีการวิวฒั นาการไปตามแนวทางและมาตรฐานของ ตนเอง ทงั้ นีห้ ากเง่ือนไขการนาไปใชง้ านอยภู่ ายใตก้ ฎหมายลขิ สิทธิ์ \"ซอฟตแ์ วรท์ ่ีมี ลิขสิทธิ์ (License Software) \" สว่ นอกี กลมุ่ หน่งึ คอื ผนู้ ิยมซอฟตแ์ วรแ์ บบเปิดเผยรหสั (Open Source Software ) ซง่ึ เป็นซอฟตเ์ เวรท์ ่มี ีเง่ือนไขการนาไปใชอ้ ีกทางหน่งึ ใน สว่ นขอซอฟตแ์ วรท์ ่ีมีลขิ สทิ ธิ์นนั้ ถา้ ตอ้ งการนามาใชจ้ ะตอ้ งซอื้ ลิขสทิ ธิ์ตามเง่ือนไขของ ผเู้ ป็นเจา้ ของลขิ สทิ ธิ์ สว่ นระบบซอฟตแ์ วรแ์ บบเปิดเผยรหสั นนั้ จะมีเง่อื นไขในการ นามาใชโ้ ดยไม่ตอ้ งเสยี คา่ ใชจ้ ่ายใด ๆ ภายใตข้ อ้ ตกลงของบทบญั ญตั ขิ องระบบ ซอฟตแ์ วรแ์ บบเปิดรหสั (Directors,2012) ภายหลงั เกิดปัญหาวา่ ไดม้ กี าร นาระบบซอฟตแ์ วรแ์ บบเปิดเผยรหสั ออกไปขายหรอื ทาผิดเง่ือนไขเสียเองทาใหผ้ ูุ พฒั นาหรอื ผใู้ ชซ้ อฟตแ์ วรป์ ระเภทดงั กลา่ วเกิดความกงั วนถึงอนาคตของการใช้ ซอฟตแ์ วรป์ ระเภทดงั กลา่ ว จงึ เกิดระบบมาตรฐานเปิด(Open Standard) ขีน้ โดย ซอฟตแ์ วรน์ นั้ มีเจา้ ของลิขสิทธิ์ท่ีชดั เจนแตไ่ ดอ้ ทุ ิศซอฟตแ์ วรด์ งั กลา่ วดว้ ย จงึ ทาให้ ไดร้ บั คววามนิยมอยา่ งมากในปัจจบุ นั ดงั คานิยามของระบบมาตรฐานเปิดตอ่ ไปนี้ ระบบมาตรฐานเปิ ด (Open Standard System)

นิยามคาวา่ \"ระบบมาตรฐานเปิด (Open Standard System) คือ กฏและขอ้ กาหนด ซง่ึ รวบรวมคาอธิบาย คณุ ลกั ษณะของการออกแบบหรอื การดาเนินงานของโปรแกรมหรอื อปุ กรณท์ ่ีนาไป แสดงผล หรอื เพ่ือการเผยแพร่ ทาใหผ้ นู้ าไปใชม้ คี วามอสิ ระในการนาไปใช้ มาตรฐาน เปิดมีการเจรญิ เตบิ โตอยา่ งนวดเรว็ โดยมคี วามรว่ มมือกนั ทางาน และสง่ เสรมิ ให้ อปุ กรณข์ องผผู้ ลิตค่ายหนง่ึ สามารถทางานรว่ มกบั อปุ ระกรณจ์ ากผผู้ ลติ ท่ีแตกต่างกนั ได้ ระบบมาตรฐานเปิดนนั้ เป็นมาตรฐานท่ีเป็นกรรมสิทธิ์ของบรษิ ัทท่ีนาเสนอออกสู่ ตลาดและผลกั ดนั ใหม้ าตรฐานของเอง ไดร้ บั ความนิยมดว้ ยความเตม็ ใจของบรษิ ัทท่ี ไดอ้ ทุ ิศใหบ้ คุ คลท่วั ไปใชโ้ ดยไมม่ คี า่ ใชจ้ า่ ยใด ๆ (Haas, 2012 ) นอกจากนี้ (Java Programming Language ) ซง่ึ ในท่ีนีก้ ลา่ วถงึ เพียงสว่ นท่ีจะนามาใชเ้ พ่ือการพฒั นา โปรแกรมเพ่ือการศกึ ษาในหนงั สือ เลม่ นีเ้ ท่านนั้ การกาหนดสภาพแวดลอ้ มในการใชง้ านจาวา ส่ิงท่จี ะตอ้ งคานงึ ถึงในการสรา้ งระบบงานใด ๆ ก็ตาม คือ สภาพแวดลอ้ มท่จี าเป้น ตอ้ งใชใ้ นการพฒั นาระบบ ซง่ึ ในความเป็นจรงิ แลว้ การกาหนดคา่ ตา่ ง ๆ ในปัจจบุ นั นี้ สามารถ ทาไดง้ า่ ยกวา่ ยคุ ก่อนมากในท่นี ีจ้ ะกลา่ วถึงการเลอื กใชโ้ ปรแกรมหรอื เครอ่ื งมือในการเขียนโปรแกรมดว้ ยภาษาจาวา ซง่ึ เราสามารถใชเ้ คร่อื งมือตงั้ เเต่ โปรแกรมโนต้ แพด้ (Notepad) ไปจนถึงเอดิเตอรอ์ ่ืนๆ ท่สี รา้ งขนี้ มารองรบั อย่าง หลากหลายและการท่ีจะเลอื กใชน้ นั้ จะตอ้ งคานงึ ถึงความยากง่ายในการกาหนดคา่ การใชง้ าน ตลอดจนรองรบั อนาคตไดเ้ ป็นอยา่ งดี ในท่นี ีจ้ ะขอเลอื กเครอ่ื งมอื ท่ีไดร้ บั ความนยิ มอยา่ สงู สามารถนามาใชไ้ ดโ้ ดยไมต่ อ้ งเสียค่าใชจ้ ่ายใดๆ และถือวา่ เป็น ระบบมาตรฐานเปิดตวั หนง่ึ เอดเิ ตอรต์ วั นีจ้ ะทางานในลกั ษณะเฟรมเวิรก์ (Framework) มากกวา่ ท่ีจะเป็นเพียงเอดิเตอรเ์ พียงอยา่ งเดียว ทาใหส้ ามารถติดตงั้

สว่ นเสรมิ (Add-on หรอื Plug-in )ไดห้ ลากหลายและทางานเบด็ เสรจ็ ในตวั เช่น เอดิ เตอรอ์ ีคลิปส์ (Eclipse) เป็นเครอ่ื งมอื ในการพฒั นาภาษาจาวาตามปกติ ตอ่ มาเรา ตอ้ งการใช้ GWT (Google Web Tools Kit ) หรอื Web Service อ่ืนๆ เรากน็ ามา กาหนดเป็นสว่ นใหญ่ๆ คอื การดาวนโ์ หลดและติดตงั้ JDK และการดาวนโ์ หลดและ ตดิ ตงั้ อีคิปส์ (Eclipse) ทงั้ หมดนีจ้ ะสามารถติดตงั้ บนระบบปฏบิ ตั ิการท่เี ลือกใช้ ใน ท่นี ีจ้ ะขอกลา่ วถงึ เฉพาะการติดตงั้ บนระบบปฏบิ ตั กิ ารวินโดวเ์ ท่านนั้ การดาวนโ์ หลดและตดิ ตัง้ Java Development (JDK) เราสามารถดาวนโ์ หลด JDK ไดจ่ ากเวบ็ ไซตท์ ่ปี รากฏ โดยพบา่ ลิงกท์ ่กี าหนดใหด้ าวน์ โหลด http;//www.oracle.com/technetwork/java/javase/downloads/index.html Java Development Kit (JDK) คือ ชดุ เคร่อื งมอื ท่ีใชใ้ นการพฒั นาภาษาจาวา หาก พบวา่ ยงั ไมม่ ีการตดิ ตงั้ เราจะตอ้ งทาการดาวนโ์ หลด JDK มาเสียกอ่ น ซง่ึ มนั จะ ประกอบไปดว้ ย Java Compiler Java Debugger, Java Doc และ Java Interpreter หรอื Java VM นอกจากนีJ้ DK ประกอบดว้ ย 3 รุน่ ยอ่ ยท่ีจะนามาพฒั นา ดว้ ยภาษาจาวาดงั กลา่ ว(Wigipedia,2555) Java SE (Standard Edition) สาหรบั พฒั นาโปรแกรมบนคอมพิวเตอรเ์ ดสกท์ อ็ ป ท่วั ไป Java ME (Micro Edition) สาหรบั พฒั นาโปรแกรมบนอปุ กรณพ์ กพา เชน่ โทรศพั มอื ถือหรอื พีดีเอ สว่ นมากใชเ้ ขียนโปรแกรม Java EE (Enterprise Edition) สาหรบั พฒั นาโปรแกรมในองคก์ ารณใ์ หญ่ๆ หรอื มี ขอบเขตของโครงการขนาดใหญ่

การใชง้ านจรงิ นนั้ เรามกั นิยมติดตงั้ โดยเลอื ก J2SE เพ่ือสนองความตอ้ งการในการ พฒั นาขนั้ พืน้ ฐาน เเตถ่ า้ จะเลือก J2EE นนั้ จะเหมาะกบั การใชง้ านในระดบั ใหญ่หรอื มที ีมงานมาก สว่ น J2ME นนั้ เหมาะกบั การพฒั นาบนมือถือ ซง่ึ ระยะตอ่ มาไดร้ บั ความนิยมนอ้ ย เน่ืองจากมีรูปแบบการพฒั นาอ่ืนๆ ท่ไี ดร้ บั ความนยิ มมากกวา่ เชน่ การเขียนโปรแกรมบนมือถือสมารต์ โฟน เช่น ไอโฟนท่ีใชก้ ารพฒั นาดว้ ยภาษา Objective-C หรอื คลาสอ่นื ๆ ท่พี ฒั นาขนึ้ มาเฉพาะเจาะจงกบั สมารต์ โฟนชนิดนนั้ ๆ มากกวา่ การใช้ J2ME เชน่ การพฒั นาบนระบบปฏบิ ตั ิการแอนดรอยด์ (Android) เป็น ตน้ หลักการทางานพนื้ ฐานของภาษาจาวา ภาษาจาวา เป็นภาษาท่ีมหี ลกั การทางานท่ีสามารถนาไปใชไ้ ดก้ บั ทกุ ระบบปฏบิ ตั ิการ หรอื Write-One Run-Anywhere หากระบบปฏบิ ตั ิการนนั้ ๆ มสี ว่ นของ JVM (Java Vitual Machine) ก็จะสามารถทางานรนั โปรแกรมไดโ้ ดยไมต่ อ้ งนาไปดดั แปลง โปรแกรมหรอื ทาการคอมไพลใ์ หม่ สว่ นของผพู้ ฒั นาโปรแกรมนนั้ จะเก่ียวขอ้ งกบั ผทู้ ่ี เขียนโปรแกรมมากท่ีสดุ ท่ีจะพฒั นาโปรแกรมขนึ้ มาไดใ้ นสว่ นของแอปพลิเคชนั บน ระบบปฏบิ ตั ิการตา่ ง ๆ จะมี JVM ทาหนา้ ท่ีตีความหมายเป็น Native-Code ท่ที าให้ CPU บนระบบปฏบิ ตั ิการตา่ ง ๆ สามารถทาการประมวนผลได้ รูปแบบการทางาน พืน้ ฐานของภาษาจาวาบนระบบปฏิบตั กิ ารตา่ ง ๆ ซง่ึ เราจะตอ้ งทาการกาหนดคา่ เรม่ิ ตน้ เเตใ่ นปัจจบุ นั นีม้ ีเอดเิ ตอรท์ ่ชี ว่ ยลดภาระการกาหนดคา่ ตา่ ง ๆ ใหส้ ามารถ ทางานไดส้ ะดวกขนึ้ ดงั เอดิเตอรอ์ ีปคลิปสท์ ่เี ม่ือลงโปรแกรมเสรจ็ แลว้ ก็สามารถเขียน โปรเเกรมบนเอดเิ ตอรไ์ ดเ้ ลยไมต่ อ้ งกาหนดเสน้ ทาง (Path) เพ่ือใหท้ าการรนั โปรแกรม ได้ แตเ่ อดิเตอรช์ นิดนีจ้ ะทาการเช่ือโยงไปยงั JVM เม่ือมีการสรา้ งโปรแกรมเจกตท์ กุ ครงั้

การตดิ ตัง้ เอดเิ ตอรอ์ คี ลปิ ส์ อีคลิปส์ (Eclipse) นนั้ เป็นตวั เอดเิ ตอรแ์ บบเฟรมเวริ ก์ เป็นเคร่อื งมอื สาหรบั การเขยี น โปรแกรมการคอมไพลโ์ ปรแกรมและส่งั ใหโ้ ปรแกรมทางาน (run) ได้ และยงั สามารถ ติดตงั้ เครง่ืิ มือเสรมิ ไดห้ ลากหลายชนิดตามจดุ ประสงคท์ ่ีเเตกตา่ งกนั ของผใู้ ชง้ าน หลงั จากการดาวนโ์ หลดเสรจ็ เราจะทาการแตกไฟล์ (.zip) เพ่ือนาไปใชง้ าน โดยไม่ ตอ้ งตดิ ตงั้ โปรแกรมใด ๆ เพียงแตน่ าโฟลเดอร์ Eclipse.exe ภายใตก้ ารโฟลเดอร์ Eclipse ไดท้ นั ที หากไมม่ กี ารติดตงั้ JDK ก็จะขนึ้ ขอ้ ความเตือนและไมส่ ามารถใช้ งานได้ จะสงั เกตเหน็ วา่ เราจะตอ้ งมี Java Runtime Environment (JRE) ซง่ึ เป็น สภาพแวดลอ้ มท่ีตอ้ งมีการรนั เอดเิ ตอร์ ซง่ึ มีสว่ นของ Java Virtual Machine (JVM) เพ่ือใหส้ ามารถเอก็ ซีคิวตโ์ ปรแกรมท่พี ฒั นาจากภาษาจาวาได้ แต่ถา้ เป็น JDK จะ ประกอบไปดว้ ยชดุ ของซอฟตแ์ วรซ์ ง่ึ สามารถพฒั นาดว้ ยภาษาจาวาได้ โดยมี สว่ นประกอบอ่นื ๆ ท่จี าเป็นตอ้ งใชเ้ พ่ือการพฒั นาโปรแกรมดว้ ยภาษานี้ ดงั นนั้ เราจงึ ควรท่จี ะเลือกตดตงั้ JDK กอ่ นเสมอ การทางานของเอดิเตอร์ Eclipse หลงั จาก ติดตงั้ จนเสณจ้ สมบรู ณแ์ ลว้ ในการเปิดใชง้ านครงั้ แรกเราจะตอ้ งกาหนดคา่ สภาพเเว ดลอ้ มตา่ ง ๆ ของอีคลิปสก์ ่อน เช่น การกาหนดเสน้ ทาง (Path) ท่จี ะเรยี กใชง้ าน JDK การกาหนดพืน้ ท่ีทางาน (Workplace) ซง่ึ เป็นสว่ นท่ีเก็บรวบรวมโปรเจกต์ แพก็ เกจ ฯลฯ และสว่ นอ่นื ๆ ท่คี วรกาหนดไวต้ งั้ เเตต่ น้ ดงั จะไดก้ ลา่ วตอ่ ไป เม่อื คลกิ OK เราจะ พบหนา้ Welcome เพ่ือใหผ้ ตู้ ดั สนิ ใจวา่ ควรจะเรม่ิ ตน้ อยา่ งไร เชน่ สามารถท่ีจะดู ลกั ษณะความสามารถ (Overview) สอนการใชง้ าน (Tutorial) ตวั อยา่ ง (Example) และสง่ิ ใหมาของโปรแกรมนี้ (What's new?) เป็นตน้ ถา้ นกั พฒั นาโปรแกรมปิดสว่ นนี้ ก็จะเขา้ สหู่ นา้ หลกั ท่ีมกั นิยมใชใ้ นการพฒั นาโปรแกรม ซง่ึ แบง่ หนจ้ อหลกั ตามมมุ มอง ของโปเจกตท์ ่ตี อ้ งพฒั นาโดยการกาหนดมมุ มอง โดยเลือก Wiondows -> Open

Perspective,แลว้ เลอื กมมุ มองการพฒั นาไดเ้ อง แต่ในท่นี ีจ้ ะพบมมุ มองท่ีระบบ กาหนดใหเ้ ป็น Java EE ซง่ึ เป็นมมุ มองกาหนดเรม่ิ ตน้ เราจะพบวใ่ นเบอื้ งตน้ นีจ้ ะมี มมุ มองท่ีพรอ้ มใหเ้ ราพฒั นาโปรเเกรมดว้ ยภาษาจาวาไดเ้ ลยดงั กลา่ วเปน้ ลาดบั ขนั้ ตอนตอ่ ไปนี้ สร้างโปรเจกต์ (Project) การสรา้ งโปรเจกต์ คือการ กาหนดคา่ เช่ือโยงแฟม้ ตา่ ง ๆ ภายใตโ้ ปรเจกต์ ท่ีกาหนด โดยมีการรวบรวมทงั้ เเพ็กเกจ (Package) แฟม้ ตน้ ฉบบั (.java) รวมถงึ แฟม้ ท่ีทาการ คอมไพลแ์ ลว้ (.class) แต่ในสว่ นนีร้ ะบบจะซอ่ นไวไ้ มป่ รากฏใหเ้ ห็นในโครงสรา้ งของ โปรเจกตด์ งั ตวั อยา่ งเลือก File->New->Java Project หลงั จากนนั้ จะพบช่ือโปรเจกต์ ท่กี าหนดขนึ้ เป็นระดบั ชนั้ แรก (Top Hierarchy) โดยจะปรากฏ src รวมทงั้ JRE Library เป็นโครงสรา้ งภายใตโ้ ปรเจกตท์ าใหเ้ ราสามารถใชร้ นั โปรแกรมได้ สร้างโครงสร้างแพก็ เกจ (Package) เราจะสามารถสรา้ ง Package ไดโ้ ดยการคลิกขวา (Right Click) - > Package แลว้ กาหนดช่ือโดยการใสจ่ ดุ ค่นั ระหวา่ งช่ือ ซง่ึ ในความเป็นจรงิ แลว้ คอื แหลง่ เก็บแฟ้ม .Java ในโฟลเดอรท์ ่ีเป็นสดั สว่ นเพ่ือความสะดวกในการจดั โครงสรา้ งใหเ้ ป็นระบบ สร้างคลาส (Class) หลงั จากการกาหนดโครงสรา้ งแลว้ จะทาการ คลกิ ขวา (Right Click) บรเิ วณ Package ท่กี าหนดไวแ้ ลว้ กาหนดช่ือคลาส (.java) ทารความเข้าใจเกยี่ วกบั System.out.println()

ในท่ีนีจ้ ะขอกลา่ ว พอใหไ้ ดเ้ หภ็ าพโดยไมล่ งไปในรายละเอียด มากนกั ในบมนี้ การ ทางานของคาส่งั System.out.println() โดยปกตริ ะบบหรอื คอมไพเลอรใ์ ด ๆ ท่สี รา้ ง ขนึ้ นนั้ จะมีชดุ คาส่งั มาตรฐานท่สี รา้ งขนึ้ เพ่ือใหน้ กั พฒั นาหรอื โปรแกรมเมอรส์ ามารถ พฒั นาตอ่ ไปได้ java.lang.System ซง่ึ มีคลาส System ทาหนา้ ท่ีรบั ผดิ ชอบอยใู่ น คลาสนี้ เวลานามาใชง้ านเราจงึ ไมต่ อ้ งอา้ งอิงแพก็ เกจ (Package) ดงั กลา่ วเพราะ ภาษาจาวาถือวา่ เป็นคลาสมาตรฐานท่ีรูจ้ กั จึงไมต่ อ้ ง Import มาไวใ้ นสว่ นหวั ขอ้ ของ โปรแกรมเน่ืองจากไดม้ าจากระบบนนั้ เอง ในท่ีนีเ้ ราจะพบวา่ ลกั ษณะรูปแบบการเขียน โปรแกรมนนั้ จะใชด้ อท (.) แทนตาแหน่งของ Path น่นั เอง การใช้เอกสารเพอ่ื การบนั ทกึ และช่วยเหลอื (API Doc) ในภาษาจาวามีการเตรยี มกลไกในการสรา้ งคลาสและอนิ เตอรเ์ ฟสเพ่อื การจดั การทา เอกสาร (Javadoc) เพียงเราทาการบนั ทกึ ขอ้ ความในเคร่อื งหมาย/** Java document */ ซง่ึ สว่ นท่ีสรา้ งขนึ้ จะมลี กั ษณะคลา้ ยการคอมเมนตโ์ ปรแกรม เเตถ่ กู นาไปใชส้ รา้ งเอกสารเพ่ือการอธิบบายความเป็นมาของคลาสตา่ ง ๆ ในลกั ษณะของ เอกสารบนั ทกึ และชว่ ยเหลือสาหรบั นกั พฒั นาโปรเเกรม บทท่ี 2 ภาษาจาวาพนื้ ฐาน ภาษา JAVA เบอื้ งต้น เนือ้ หาในหนา้ นี้ จะเป็นเนือ้ หาท่ีครอบคลมุ การเรยี น Java แทบจะทงั้ หมด เนือ้ หา พืน้ ฐาน มนั จะอดั แน่นมากในบทนีส้ านวน หรอื ท่ีเราเรยี กวา่ Java syntax และคอน เซป็ หลกั ๆ นนั้ ยืมมาจาก C++ อยา่ งมากมายก่ายกองก็วา่ ได้ ดงั นี้ ในบทนีจ้ งึ อาจดู เหมือนกาลงั เรยี นภาษา C++ แทนท่ีจะเป็นการเรยี น Java ก็ได้ ก่อนท่เี ราจะเรม่ิ บทเรยี น ขอบอกไวก้ อ่ นวา่ บทเรยี น Java นี้ เขียนขนึ้ เพ่ือคนท่ีไมเ่ คยเรยี น ไมเ่ คย

สมั ผสั กบั Java มาก่อนเลย จงึ คอ่ นขา้ งละเอียดมาก ก่อนจะเขา้ สบู่ ทเรยี น เรามาทราบองคป์ ระกอบของจาวาก่อนนะคะ วา่ มีอะไรบา้ ง องคป์ ระกอบ Java • Java เป็นภาษาท่มี อี สิ ระในเร่อื งของรูปแบบ หมายความวา่ ในการพิมพ์ source code เราจะยอ่ หนา้ หรอื ไมย่ ่อหนา้ จะวรรค 1 เคาะ หรอื ก่ีเคาะ โปรแกรมก็ run ได้ เหมอื นเดิมทกุ ประการ ไมเ่ ช่ือก็จงทดลองกบั โปรแกรม HelloWorld.java ดกู ็ได!้ แต่ ทา่ นควรยดึ แบบแผนท่ีดี (หวั ขอ้ ถดั ไป)จะดีกวา่ มิฉะนนั้ จะไลด่ ู ตรวจสอบ แกไ้ ขโคด้ ลาบาก • Java มีองคป์ ระกอบและไวยากรณค์ ลา้ ย C และ C++ • Primitive Data Types มี boolean, byte, short, char, int, float จงเลอื กใชใ้ หเ้ หมาะสม โปรแกรมจงึ จะทางานอยา่ งมีประสทิ ธิภาพ (รนั เรว็ ไมเ่ ปลือง เนือ้ ท่ีฮารด์ ดสิ ก์ ผลลพั ธถ์ กู ตอ้ งเท่ียงตรง โดยเฉพาะทศนยิ มดว้ ย ฯลฯ) • Operators แตล่ ะคตู่ อ่ ไปนีต้ อ้ ง เขียน/พิมพ์ ติดกนั : ==, !=, <=, >=, &&, || ลกั ษณะและไวยากรณข์ อง Java Comments มี 3 แบบ // /* */ /** */ อนั ท่จี รงิ เราไมใ่ ช้ Comment เลยก็ได้ เพราะมนั เป็นแคห่ มายเหตุ หรอื คาอธิบาย

เทา่ นนั้ คอมฯ ไมน่ ามาประมวลผลเลย แตส่ าหรบั โปรแกรมเมอรร์ ะดบั อาชีพ เขียน โปรแกรมใหญ่ๆ บางบรรทดั บางบล็อกของโคด้ ท่สี าคญั เขาจะทา Comment ไวก้ นั ลืม ง่ายตอ่ การแกไ้ ขปรบั ปรุงใน 3 ปี 5 ปี ขา้ งหนา้ เป็นตน้ หรอื แมแ้ ตเ่ จอ bug ใน ปัจจบุ นั ก็จะหาสาเหตขุ อง bug ไดง้ า่ ยขนึ้ • เคร่ืองหมายสาคัญ ; เรยี กวา่ statement separator { } เรยี กวา่ statement grouper โครงสร้างคุมโปรแกรม • การเขียนโปรแกรมเรยี กวา่ coding • โปรแกรมประกอบดว้ ยหลายๆ statements (ประโยคคาส่งั ) • แต่ละ statement สนิ้ สดุ ดว้ ยเครอ่ื งหมาย ; (semicolon) • โดยท่วั ไป โปรแกรมทางานอะไรก่อน อะไรหลงั ย่อมเป็นไปตามลาดบั เดียวกนั กบั ลาดบั ของ statements ในโปรแกรมนนั้ • ในบางกรณีท่เี ราไมต่ อ้ งการใหโ้ ปรแกรมทางานตามลาดบั เดียวกนั กบั ลาดบั ของ statements เราก็ตอ้ งใช้ if, if…else, switch…case, และ loopsเชน่ for, while, do…while เพ่ือเบ่ยี งหรอื ขา้ มบาง statements ไป • การเขียน loops ถา้ เขียนไมถ่ กู ตอ้ ง อาจ run วนไมห่ ยดุ (เรยี กว่า infinite loop) จง กด Ctrl+C ใหห้ ยดุ แลว้ แกไ้ ข Methods* (วิธีการ)

Method คือ บลอ็ กหรอื กลมุ่ ของโคด้ ส่งั ใหค้ อมฯ กระทาอะไรสกั อย่างคา Method ใน ภาษา Java ตรงกบั คา Function หรอื Procedure ในภาษาอ่ืนๆ การเรยี กใช้ Method Methods ตา่ งๆ เม่ือเราเขียนขนึ้ แลว้ กอ็ ยเู่ ฉยๆ อย่างนนั้ แหละ ถา้ เราตอ้ งการใหม้ นั ทางานกม็ ี 3 วธิ ี ดงั นี้ 1) สรา้ ง variable เพ่ือรบั คา่ สง่ กลบั ของ method ต.ย. int larger = max(3, 4); หรอื 2) ใช้ statement ต.ย. System.out.println(“Hello World!”); หรอื 3) คลิก ดบั เบลิ คลกิ แดรก หรอื กระทาใดๆ ตอ่ วตั ถุ (ป่ มุ / button / ฯลฯ) หรอื โปรแกรมทางานเองก็ได้ ต.ย. public void actionPerformed(ActionEvent event) //เมธอดนีท้ างานเม่ือ ผใู้ ชค้ ลิกป่มุ ต.ย. public static void main(String[] args) //เมธอดนีท้ างานเองเม่อื เรม่ิ run Application

ต.ย. public void paint(Graphics g) //เมธอดนีท้ างานเองเม่อื ลาดบั การรนั มาถึง statement นี้ Overloaded methods จากโคด้ ขา้ งซา้ ย เราเรยี กใชเ้ มธอด max() ไดด้ งั นี้ static int max (int num1, int num2) ต.ย. int larger = max(3, 4); { หรอื if (num1 > num2) ต.ย. double larger = max(3.5, return num1; 4.7); else ก็ได้ return num2; } ดงั นนั้ max() จงึ เป็น static double max (double num1, Overloaded method double num2) เพราะใชไ้ ดก้ บั type { (หรอื จานวน parameter) ท่ตี า่ งกนั if (num1 > num2) ในกรณีนี้ int ก็ได้ double ก็ได้ return num1; else return num2;

} แนวคดิ พนื้ ฐานของ OOP (Object-Oriented Programming) • Class (จาพวก) คือ บลอ็ กของโปรแกรมท่ีกาหนดลกั ษณะ (variables) และพฤติกรรม (methods) กวา้ งๆ หลวมๆ ท่วั ๆ ไป ของ สิง่ ทงั้ หมดใน จาพวก เดียวกนั • Object (ส่ิง) คอื บลอ็ กของโปรแกรมท่กี าหนดลกั ษณะ (variables) และพฤตกิ รรม (methods) เฉพาะเจาะจง ของสิง่ ใดๆ เพียง สิ่ง เดียว เทา่ นนั้ ขอใหม้ องวา่ Class (จาพวก) เป็นเพียงโครงสรา้ งกวา้ งๆ หลวมๆ เทา่ นนั้ เราตอ้ ง สรา้ ง Object ของ Class นนั้ ก่อน (ระบสุ ิง่ ใดสิ่งหนง่ึ วา่ อยใู่ นจาพวกนนั้ ) แลว้ เขียนคาส่งั ให้ Object (สิง่ ) นนั้ ทางาน (เรยี กใชเ้ มธอดของ Object นนั้ ) — สรุปกค็ ือ เราส่งั ให้ Object ทางาน เราไมส่ ่งั ให้ Class ทางาน ส่หี ลักการสาคัญของโปรแกรมเชิงวัตถุ (OOP) • Abstraction การนิยาม variables และ methods ท่จี าเป็น มาสรา้ ง class แม่ • Polymorphism การใช้ object เรยี กใช้ method ช่ือเดียวกนั เช่น d.speak(); s.speak(); แต่สามารถทางานไดห้ ลายอยา่ งซง่ึ คลา้ ยกนั

แต่ก็แตกตา่ งกนั ในรายละเอียด (d.speak(); “ฮง่ -ฮ่ง-ฮง่ ” s.speak(); “ขอมอบเพลงนีเ้ พ่ือคณุ ”) • Inheritance การสรา้ ง class ลกู โดยวิธีสืบทอด variables และ methods ของ class แม่ สง่ ผลใหเ้ ขียนโปรแกรมง่ายขนึ้ เรว็ ขนึ้ ผิดพลาด นอ้ ยลง • Encapsulation การซอ่ นบาง variables และ methods (เชน่ ประกาศ เป็น private ภายใน class) ไมใ่ หค้ นอ่นื เขา้ ถึง หรอื แกไ้ ขได้ (ไม่ จาเป็นตอ้ งรู/้ เขา้ ถึง ก็ใชโ้ ปรแกรมไดง้ ่าย สะดวก ถา้ รูจ้ ะงง เกะกะ สบั สน ใชโ้ ปรแกรมยาก เปรยี บเสมอื นรถยนต์ เขาซอ่ นเคร่อื งยนต์ แบตเตอร่ี สายไฟ หมอ้ นา้ และอ่ืนๆ ท่เี กะกะไวใ้ ตฝ้ ากระโปรงรถ โผลแ่ ต่พวงมาลยั เกียร์ ใหค้ นขบั ใชก้ ็พอ) ทม่ี าของ Polymorphism ในภาษา OOP • ภาษาพดู ท่ีใชก้ นั มี Polymorphism อยมู่ ากมาย เชน่ พ่อส่งั ลกู 3 คน: “ไปทาการบา้ นเด๋ยี วนี”้ เม่อื ไดย้ ิน คนนอ้ ง ป.1 ก็ไป คดั ลายมอื คนกลาง ม.3 ก็ไป ทาเลข คนโต ม.6 ก็ไป ทาแคลคลู สั • ภาษาคอมพวิ เตอรแ์ บบ OOP นนั้ method หน่งึ สามารถทาให้ เกิดการกระทาท่ีแตกต่างกนั สาหรบั แตล่ ะ object เชน่ กรณีของ method speak()* สาหรบั object dog ก็คือ dog.speak() จะใหผ้ ลลพั ธบ์ นจอ “ฮง่ ฮ่ง ฮ่ง”

สาหรบั object cat ก็คือ cat.speak() จะใหผ้ ลลพั ธบ์ นจอ “เมีย้ ว เมยี้ ว เมีย้ ว” สาหรบั object singer ก็คอื singer.speak() จะใหผ้ ลลพั ธบ์ น จอ “ขอมอบเพลงนีเ้ พ่ือคณุ ” • จากตวั อยา่ งขา้ งตน้ ลกู 3 คนอาจอยเู่ ฉยๆ กไ็ ด้ เพราะไมแ่ น่ใจ วา่ พอ่ ส่งั ใคร? ส่งั ลกู คนไหน? (ไปทาการบา้ นเด๋ยี วนี)้ แตเ่ ดา ความประสงคข์ องพอ่ ได้ ทกุ คนก็ปฏิบตั (ิ มนษุ ยเ์ ดาเกง่ จรงิ ๆ!) แต่ ผลของการปฏิบตั ิก็ไมไ่ ดเ้ หมอื นกนั เสียทีเดียว เพราะเป็นคนละ คนกนั ความสามารถไมเ่ หมือนกนั • อนั ท่ีจรงิ James Gosling (และผตู้ น้ คิด OOP) จงใจเลียนแบบ ภาษาพดู โดยหวงั วา่ จะทาให้ Java เป็นเร่อื งง่ายๆ อนั เป็นยอด ปรารถนาของโปรแกรมเมอรท์ กุ คน อยา่ งไรก็ตาม ภาษาพดู มกั กากวม จงึ แกไ้ ขจดุ อ่อนนีโ้ ดยตงั้ กฎวา่ ทกุ method เม่อื นามาใช้ ตอ้ งระบชุ ่ือ object ไวข้ า้ งหนา้ (ค่นั ดว้ ย จดุ ) เพราะ ตระหนกั ดีวา่ คอมพิวเตอรเ์ ถรตรงในทกุ กรณี (คอมพิวเตอรไ์ ม่ เดา) หลงั จากท่ีไดเ้ รยี นรู้ ภาษา Java เบือ้ งตน้ กนั ไปแลว้ ตอ่ ไปจะเป็นการเขา้ สว่ นเนือ้ หาท่ี เป็น Java OOp OOp คืออะไรคงสงสยั กนั ละ่ สิ มนั มาไดย้ งั ไง แลว้ มนั มาอยขู่ า้ งหลงั Java ทาไม งนั้ เราไปทาความรูจกั กบั OOp กนั เลยนะคะ Object oriented programming (โดยใช้ syntax แบบ C++)

OOP คือการมองทกุ อยา่ งใหเ้ ป็น object ซง่ึ แบง่ ไดเ้ ป็น 1. Object ท่เี ป็น รูปธรรม เช่น คน, ใบรายการสนิ คา้ 2. Object ท่เี ป็น นามธรรม เชน่ ความเป็นเจา้ ของ, เท่ียวบิน เป็นตน้ ทกุ object จะประกอบดว้ ย 2 สว่ นคือ 1. Attribute (object data) – เป็นสว่ นท่ีใชใ้ นการเก็บขอ้ มลู ตา่ งๆของ object เชน่ รถ มี attribute คือ ย่ีหอ้ รถ, ช่ือรุน่ , สี เป็นตน้ 2. Method (object behavior) – เป็นสิ่งท่ี object นนั้ สามารถทาได้ เช่น รถ สามารถ เพ่มิ ความเรว็ , ชะลอความเรว็ , หยดุ , เปล่ยี นเกียร์ เป็นตน้ หลกั การสาคญั ของ OOP 1. Data hiding คอื ปกปิด source code สว่ นหน่งึ ไวไ้ มใ่ หผ้ ทู้ ่ีไมเ่ ก่ียวขอ้ งสามารถ เขา้ ถึง หรอื แกไ้ ขขอ้ มลู ไดโ้ ดยตรง ซง่ึ จะตอ้ งบอกคาสงวนในการควบคมุ การเขา้ ถึง ขอ้ มลู – Public สามารถเขา้ ถึงไดจ้ ากทกุ ๆท่ีของโปรแกรม – Private ไมส่ ามารถเขา้ ถงึ ไดจ้ ากภายนอก class สว่ นมากจะใชก้ บั attribute ของ class 2. encapsulation น่นั คือ attribute ตา่ งๆภายใน class นนั้ จะไมส่ ามารถถกู เปล่ียนแปลงคา่ ไดจ้ ากภายนอก class การเปลยี่ นแปลงคา่ ของ attribute จะสามารถ ทาไดจ้ ากการเรยี ก method ภายใน class เทา่ นนั้ ซงึ คือการกาหนดดว้ ยคาสงวน private น่นั เอง 3. inheritance & reusable คอื การ นา source code สว่ นท่ีมีการใชซ้ า้ ๆนากลบั มา ใชใ้ หม่ การนากลบั มาใชใ้ หม่ แบง่ ไดเ้ ป็น 2 กรณี 3.1 inheritance (การสบื ทอดจากคลาสหลกั / is-a relationship)

– superclass (base class/classหลกั )/subclass (derived class/classสืบทอด) – superclass อาจเรยี กไดว้ า่ เป็น classพอ่ – subclass อาจเรยี กไดว้ า่ เป็น class ลกู class ลกู จะมี attribute/method เพ่ิมเตมิ จากclass พอ่ สามารถเป็นไดท้ งั้ single inheritance คลาสลกู มคี ลาสพอ่ เพียงคลาสเดียว และ multiple inheritance คลาสลกู มีคลาสพ่อหลายคลาส เชน่ ในระบบของโรงพยาบาล – คลาสพนกั งาน จะประกอบดว้ ย attribute ช่ือ/รหสั ประจาตวั พนกั งาน – คลาสหมอ จะประกอบดว้ ย ช่ือ/รหสั ประจาตวั พนกั งาน/สาขาท่ีเชียวชาญ จะเห็นไดว้ า่ มีกานซา้ ซอ้ นของการใช้ attribute ของ class ทงั้ 2 เน่ืองจากคลาส พนกั งานมแี ต่ attribute ท่เี หมอื นกนั กบั attribute ของ คลาสหมอ ดงั นนั้ เราสามารถ ทาให้ คลาสพนกั งาน เปน้ superclass ของ คลาสหมอได้ 3.2 composition (has-a relationship) เป็นการนา class ท่มี อี ยเู่ ดมิ มาเป็น attribute ของ class ใหม่ เช่น คลาสรถยนต์ ประกอบดว้ ย คลาสเคร่อื งยนต์ คลาสตวั ถงั คลาส ลอ้ รถ 4. polymorphism ใชไ้ ดก้ บั การสบื ทอดแบบ is-a เท่านนั้ คือการท่ีคลาสพอ่ มี method ท่ีภายในไมม่ ีการ implement ใดๆ เม่ือคลาสลกู สบื ทอดคณุ สมบตั ไิ ป คลาส ลกู ไดม้ กี ารเพ่มิ สว่ นของการ implement ใน method นนั้ *object ของคลาสท่มี คี ลาสพ่อคลาสเดยี วกนั ทงั้ ๆท่เี รยี ก method ช่ือเดียวกนั กลบั ได้ ผลลพั ธท์ ่แี ตกต่างกนั โดย obj ของคลาสก็จะดู method นีภ้ ายในคลาสของตนเทา่ นนั้ เช่น คลาสรูปภาพ มี method drawPicture ซง่ึ เป็น functionท่วี า่ งเปลา่ ไว้ (เรยี กวา่ เป็น abstract function) เม่อื คลาสวงกลมมาสืบทอดตอ่ จากคลาสรูปภาพ method ท่ี ช่ือ drawPicture ไดเ้ พ่ิมสว่ นของการ implement เป็นการวาดวงกลม และมีคลาส สีเ่ หลี่ยม สืบทอดตอ่ จากคลาสรูปภาพ แต่ method drawPicture ของคลาสสี่เหลย่ี ม

ไดเ้ พ่มิ สว่ นของการ implement เป็นการวาดรูปสเ่ี หลีย่ มให้ เม่ือobj ของคลาสวงกลม มาเรยี กใช้ method drawPicture จะไดร้ ูปวงกลม ถา้ obj คลาสส่เี หล่ยี มมาเรยี กใช้ method drawPicture จะไดร้ ูปสีเ่ หลย่ี ม ความสัมพนั ธร์ ะหว่างคลาส 1. association เป็นความสมั พนั ธแ์ บบรูจ้ กั กนั เฉยๆ สามารถทางานแยกกนั ไดอ้ ยา่ ง อสิ ระ แตป่ ระกอบกนั เพ่ือใหไ้ ดก้ ารทางานท่ีสมบรู ณ์ อาจรูจ้ กั เพ่ือใหเ้ รยี กใชง้ าน method ท่ีมีในอีกคลาสได้ เชน่ คลาสของพนกั งานตอ้ งรูจ้ กั คลาสคานวณยอดเงนิ เพ่ือท่ีจะสามารถใช้ method ท่เี ป็นการคานวณเงนิ เดือนในคลาสคานวณยอดเงนิ ได้ เน่ืองจากภายในคลาสพนกั งานไมม่ สี ว่ นของการคานวณเงินเดือน และ คลาสคานวณ ยอดเงนิ เป็นคลาสท่จี ะเก็บ method ท่ใี ชใ้ นการคานวณเก่ียวกบั ยอดเงนิ ตา่ งๆภายใน บรษิ ัท 2. aggregation สมั พนั ธก์ นั เชิงเป็นสว่ นประกอบ 2.1 composition เป็นความสมั พนั ธท์ ่คี ลาส 1 หรอื มากกวา่ 1 เป็นสว่ นประกอบยอ่ ย ของคลาสท่มี ขี นาดใหญ่กวา่ และสว่ นประกอบนี้ คลาสใหญ่ไมส่ ามารถขาดได้ เช่น คลาสรถ ตอ้ งมี คลาสลอ้ /คลาสเคร่อื งยนต์ เป็นตน้ ถา้ ขาดส่งิ พวกนีร้ ถก็จะไมส่ ามารถ เรยี กไดว้ า่ เป็นรถ 2.2 contain เป็นความสมั พนั ธท์ ่คี ลาส 1 หรอื มากกวา่ 1 เป็นสว่ นประกอบยอ่ ยของ คลาสท่ีมขี นาดใหญ่กวา่ และสว่ นประกอบนี้ คลาสใหญ่สามารถขาดได้ ขาดไปก็ไม่ สง่ ผลตอ่ คลาสนนั้ เชน่ คลาสรถ มีคลาสคนขบั รถ อยเู่ ป็นสว่ นประกอบดว้ ยแตถ่ า้ รถ ขาดคนขบั ไป รถก็ยงั สามารถเรยี กไดว้ า่ เป็นรถอยู่ Interface และ implement Interface คือสว่ นท่ีประกาศเป็น public สามารถเขา้ ถึงไดจ้ ากภายนอกคลาส เป็น สว่ นท่ีเปิดใหร้ บั รูว้ า่ คลาสนีท้ าอะไรไดบ้ า้ ง ซง่ึ ไมจ่ าเป็นตอ้ งรบั รูว้ า่ คลาสนีท้ างานอย่าง

1 โดยใชก้ ระบวนการอะไร Implement คือสว่ นท่ีประกาศเป็น private หรอื โคด้ ตา่ งๆภายใน method ของคลาส เป็นสว่ นท่ีถกู ซอ่ นไวไ้ มส่ ามารถเหน็ ไดจ้ ากภายนอกคลาส ถา้ เกิดมกี ารเปลยี่ นแปลง implement จะไมม่ ีผลกระทบตอ่ user เพราะ user ตดิ ตอ่ คลาสผา่ น interface เทา่ นนั้ เช่น เตาปิ้งขนมปัง เปิดใหผ้ คู้ นรบั รูวา่ ถา้ ใสข่ นมปังลงในเตาปิ้งแลว้ ขนมปังจะถกู ทา ใหก้ รอบ ถือวา่ น่ีเป็นสว่ นของ interface คอื ทกุ คนรบั รูว้ า่ มนั ทาอะไรได้ แตก่ ารท่เี ตา ปิ้งใชว้ ธิ ีการใหค้ วามรอ้ นผา่ นขดลวดแลว้ สง่ ความรอ้ นไปยงั ขนามปังจนทาใหข้ นมปัง กรอบน่นั ผใู้ ชเ้ ตาปิ้งขนมปังไมจ่ าเป็นตอ้ งรบั รูใ้ นสว่ นนี้ ถือวา่ วธิ ีกานท่ีทาใหข้ นมปัง กรอบนีเ้ ป็นสว่ นของ implement Class เป็นแมแ่ บบของ object ก่อนท่ีจะสรา้ ง object ไดก้ ็ตอ้ งมี class เสียกอ่ น object เป็น object ของ classใดก็จะมีคณุ สมบตั ิ(attribute) และสามารถทาพฤตกิ รรม (method) ไดเ้ หมือนท่ี class มี เชน่ Class number { Private value; Public number(){ }; Public void setValue(int v) { value = v}; Public void getValue() {return value}; } Main program {

number a; ประกาศ object ช่ือ a เป็น type number a.setValue(10); obj ‘a’ สามารถเรยี กใช้ method ตา่ งๆท่มี ีใน class number ได้ a.getValue(); } Constructor เป็น method พเิ ศษในคลาสทีจะกาหนดคา่ เรม่ิ ตน้ ใหแ้ ก่ attribute ตา่ งๆภายในคลาส ขอ้ กาหนดของ constructor 1. เป็น method ท่ชี ่ือเดยี วกบั ช่ือคลาส 2. ไมม่ ีการ return คา่ ใดๆ 3. ประกาศการเขา้ ถึงเป็นแบบ public แบ่งประเภทของ constructor เป็ น 1. default constructor เป็น constructor ท่ไี มม่ ีสว่ นของ implement ภายใน เชน่ Class number { Private value; Public number(){ }; Public void setValue(int v) { value = v}; Public void getValue() {return value}; } Main program { number a = new number(); สรา้ ง object แบบ dynamic โดยเรยี กใช้ default

constructor } *object แบบ dynamic เป็นการจองพนื้ ท่ีในหน่วยความจาตอน runtime 2. multiple constructor เป็น constructor ท่มี ีสว่ น implement ภายในซง่ึ อาจมกี าร รบั คา่ parameter หรอื ไมม่ ีกไ็ ด้ เช่น Class number { Private value; Public number(){ value = 0}; Public number(int v){value = v;}; Public void setValue(int v) { value = v;}; Public void getValue() {return value}; } Main program { number a = new number(); สรา้ ง object แบบ dynamic โดยเรยี กใช้ constructor ท่ไี มม่ กี ารรบั parameter attribute ช่ือvalueมีคา่ เป็น 0 number a = new number(9); สรา้ ง object แบบ dynamic โดยเรยี กใช้ constructor ท่มี กี ารรบั parameter attribute ช่ือvalueมีคา่ เป็น 9 } Overloading method

คือ method ท่ใี ชช้ ่ือซา้ กนั แตค่ า่ parameter ท่รี บั มคี วามแตกตา่ งกนั ซง่ึ โปรแกรมจะ เลือกวา่ เป็นการเรยี ก method ใดโดยดจู าก parameter ท่รี บั เขา้ มา เช่น Public getStudentName(string StudentLastName); Public getStudentName(int StudentNO); ดงั นนั้ เพ่ือท่ีจะใหผ้ ใู้ ชส้ ามารถเขา้ ถงึ method ไดผ้ ใู้ ชจ้ ะตอ้ งรู้ 1. ช่ือของ method 2. Parameter ของ method การเรยี ก method ของ object นนั้ คลา้ ยกบั การ call function แต่ oop จะเป็นการให้ object นนั้ ทา method ของตนเอง เชน่ Line 1: Employee em01; Line 2: em01.setName(“David”); Line 2 เป็นการสง่ message ให้ object ของ Employee ท่ชี ่ือวา่ em01 เรยี กใช้ method setName ของตวั มนั เองซง่ึ มี argument เป็น “David” รูปแบบการเรยี กใช้ method : ช่ือobject . ช่ือmethod Accessor คอื method ท่ใี ห้ read หรอื write attribute ใน คลาสนนั้ ๆ ซง่ึ มกั จะตงั้ ช่ือเป็น Set….() เป็นการ write คา่ ให้ attribute Get….(return…. ;) เป็นการ read คา่ ใน attribute การส่ือสารระหว่าง object การท่ี object 2 ประเภทจะตดิ ตอ่ ส่อื สารกนั ได้ จะตอ้ งมี object ตวั หน่งึ เป็น sender ซง่ึ เป็นผสู้ ง่ message ไปยงั object อีกตวั หน่งึ ซง่ึ เป็น receiver โดยท่ี sender จะตอ้ ง รูจ้ กั กบั object ท่เี ป็น receiver เสียกอ่ น แลว้ object ท่เี ป็น receiver เม่อื ไดร้ บั message จะ return value กลบั มาให้ sender หรอื ไมก่ ็ได้

เช่น กรณีท่ีมกี าร return value : object School สง่ messageสอบถามรายช่ือ นกั เรยี น ไปยงั object Student object Student ก็จะสง่ ขอ้ มลู รายช่ือนกั เรยี นทงั้ หมด กลบั ไป กรณีท่ไี มม่ ีการ return value : object School สง่ messageตอ้ งการเปล่ียนช่ือ นกั เรยี น ท่ีมรี หสั ประจาตวั คือ XX เป็นช่ือ YYY ไปยงั object Student object Student จะทาการเปล่ยี น attribute ช่ือของนกั เรยี นท่มี ีรหสั 1 เป็นช่ือท่ีกาหนด โดยท่ี object School ไมส่ นใจวา่ object Student จะ return คา่ ใด ๆกลบั มา บทท่ี 3 อารเ์ รย์ (Array) ข้อมูลชนิดอารเ์ รย์ อารเ์ รย์ คือ ขอ้ มลู ท่ีประกอบไปดว้ ยรายการชนดิ ขอ้ มลู เดียวกนั จานวนหน่งึ แตล่ ะ รายการเรยี กวา่ เซลล์ (Cell) และแตล่ ะเซลลจ์ ะมี อินเดก็ ซ์ (Index) สาหรบั ใชเ้ พ่ืออา้ ง ถงึ ขอ้ มลู ตวั แปรอารเ์ รย์ (Array) หรอื เรยี กอีกช่ือหน่งึ วา่ ตวั แปรชดุ เป็นการจองพืน้ ท่ีใน หน่วยความ จาใหก้ บั ตวั แปร เพ่อื ใหต้ วั แปรนนั้ สามารถรบั ขอ้ มลู หรอื เก็บขอ้ มลู ได้ มากกวา่ 1 คา่ โดยคา่ แต่ละคา่ นนั้ จะถกู เก็บลงยงั พืน้ ท่ขี องหนว่ ยความจาท่ีแตกตา่ ง กนั พนื้ ท่ใี นหนว่ ยความจาจะใชห้ มายเลขลาดบั เป็นตวั จาแนกความแตกตา่ งของ คา่ ตวั แปรแตล่ ะพนื้ ท่ดี ว้ ยการระบหุ มายเลขลาดบั ท่ีเรยี กวา่ ดชั นี (Index) กากบั ตามหลงั ช่ือตวั แปร โดยใชห้ มายเลขลาดบั ตงั้ แต่ 0, 1, 2, … เป็นตน้ ไป นิยาม/ความหมาย (Definition) อารเ์ รย์ เป็นโครงสรา้ งขอ้ มลู ท่ใี ชเ้ ก็บขอ้ มลู ชนิดเดยี วกนั เป็นกลมุ่ หรอื ชดุ ท่ี เรยี งติดต่อกนั เป็นแถว มีขอบเขตจากดั และมีขนาดคงท่ี ขอ้ มลู ชนดิ เดยี วกนั คือ ขอ้ มลู ทกุ ตวั ท่ีอยใู่ นอารเ์ รยจ์ ะตอ้ งเป็นขอ้ มลู ชนิดเดียวกนั

เท่านนั้ เชน่ ถา้ เป็นอารเ์ รยช์ นิดจานวนเตม็ ขอ้ มลู ทกุ ตวั ในอารเ์ รยก์ ็ตอ้ งเป็นชนิด จานวนเต็ม ไม่สามารถเก็บขอ้ มลู ตา่ งชนิดกนั ได้ Case Study 1 หากในการเขียนโปรแกรมตอ้ งการตวั แปร 1 ตวั มาเก็บค่าจานวนเตม็ 1 จานวน เราสามารถประกาศตวั แปรเป็น int x ; โดยท่ี ตวั แปรตวั นีจ้ ะเก็บคา่ ไดเ้ พียง 1 คา่ เท่านนั้ ซง่ึ หากตอ้ งการตวั แปรมาเก็บจานวนเต็ม 50 จานวนจะตอ้ งทาการประกาศ ตวั แปรเลย 50 ตวั เช่น int x1, x2 ,x3, x4, x5.........x50 ; ซง่ึ เป็นการยงุ่ ยากในการ เขียนโปรแกรม แบ่งไดเ้ ป็ น 3 ชนิด อารเ์ รยช์ นิด 1 มติ ิ (One-Dimensional) อารเ์ รยช์ นิด 2 มิติ (Two-Dimensional) อารเ์ รยช์ นิด 3 มติ ิ (Three-Dimensional) อารเ์ รยช์ นิด 1 มติ ิ มีลกั ษณะเป็นขอ้ มลู 1 ชดุ เรยี งลาดบั กนั เป็นแถวในแนวนอน การประกาศตวั แปรอารเ์ รย์ ใชค้ าวา่ ARRAY … OF VAR ช่ือตวั แปร : ARRAY[คา่ แรก..คา่ สดุ ทา้ ย] OF ชนิดขอ้ มลู ; ตวั อยา่ ง : การประกาศตวั แปรอารเ์ รย์ VAR SName : ARRAY[1..50] OF string[20]; SAge : ARRAY[1..50] OF byte; SGpa : ARRAY[1..50] OF real;

อารเ์ รยช์ นิด 2 มิติ มีลกั ษณะการเก็บขอ้ มลู เป็นตาราง คือ มที งั้ แถวและคอลมั น์ การประกาศตัวแปรอารเ์ รยช์ นิด 2 มิติ ใชค้ าวา่ ARRAY [index1, index2] OF VAR ช่ือตวั แปร : ARRAY[คา่ แรกของแถว..คา่ สดุ ทา้ ยของแถว, คา่ แรก ของคอลมั น.์ .คา่ สดุ ทา้ ยของคอลมั น]์ OF ชนิดขอ้ มลู ; อารเ์ รยช์ นิด 3 มติ ิ ลกั ษณะการเกบ็ ขอ้ มลู เป็นหลายตารางซอ้ นกนั เช่น ขอ้ มลู คะแนนวชิ า คณิตศาสตรแ์ ละภาษาไทยของนกั เรียน 2 หอ้ ง หอ้ งละ 50 คน การประกาศตัวแปรอารเ์ รยช์ นิด 3 มติ ิ ใชค้ าวา่ ARRAY [index1, index2, index3] OF VAR ช่ือตวั แปร : ARRAY[คา่ แรกของตาราง..คา่ สดุ ทา้ ยของตาราง, คา่ แรกของ แถว.. คา่ สดุ ทา้ ยของแถว, คา่ แรกของคอลมั น.์ . คา่ สดุ ทา้ ยของคอลมั น]์ OF ชนิดขอ้ มลู ; บทท่ี 4 การเปรียบเทยี บและคาส่ังควบคุมทศิ ทางของ โปรแกรม คาส่ังควบคุมทศิ ทางการทางานของโปรแกรม การกาหนดการทางานของโปรแกรมสามารถทาไดโ้ ดยการใชค้ าส่งั ควบคมุ ทศิ ทางการทางาน ของโปรแกรม ซง่ึ มอี ยู่ 3 รูปแบบ คือ 1.คาส่งั ควบคมุ ทิศทางการทางานของโปรแกรมแบบตามลาดบั 2.คาส่งั ควบคมุ ทิศทางการทางานของโปรแกรมแบบมีทางเลือก

3.คาส่งั ควบคมุ ทิศทาวงการทางานของโปรแกรมแบบทาซา้ คาส่ังควบคุมทศิ ทางการทางานของโปรแกรมแบบตามลาดบั เป็นรูปแบบการทางานท่ีทกุ คาส่งั จะมีการทางานตามลาดบั โดยจะไมม่ ีการขา้ มขนั้ ตอนใด ๆ ไป แต่ละคาส่งั จะถกู เรยี กใชง้ านเพยี งครงั้ เดียว การทางานของโปรแกรมจะเรม่ิ จากคาส่งั ท่ี 1 แลว้ จงึ เรม่ิ คาส่งั ท่ี 2,3,4… จนครบทกุ คาส่งั จงึ จบการทางาน เพ่ือทาความเขา้ ใจคาส่งั ควบคมุ ทิศทางการทางานของโปรแกรมแบบตามลาดบั ใหท้ าการ สรา้ ง project ช่ือ tax เพ่ือใชใ้ นการคานวณภาษีอย่างงา่ ยขนึ้ มากอ่ น โดยมขี นั้ ตอนดงั นี้ 1.สรา้ ง project tax 2.สรา้ ง Java class ช่ือ Tax_Calculator ไวใ้ น project Tax 3.สรา้ ง method สาหรบั คานวณภาษีช่ือ calTax ซง่ึ จะทาการรบั คา่ ขอ้ มลู เงนิ เดือนผา่ น พารามเิ ตอรช์ นิด float และทาการคืนคา่ ขอ้ มลู ของภาษีท่คี านวณไดอ้ อกมาเป็นขอ้ มลู ชนิด float 4.สรา้ ง Java main class ช่ือ Tax1 ไวใ้ น project Tax เพ่ือเรยี กใช้ class Tax_Calculator เม่ือ ทาการสรา้ ง project Tax เสรจ็ เรยี บรอ้ ยแลว้ จะมลกั ษณะดงั ภาพ

ใน project Tax จะประกอบไปดว้ ย Java class อยู่ 2 class คือ Tax1 ซง่ึ จะมี Java main class สาหรบั เรยี กใชง้ าน class Tax_Calculator และ class Tax_Calculator ซง่ึ ใชส้ าหรบั คานวณภาษี สาหรบั class Tax_Calculator สามารถอธิบายไดด้ งั นี้ Public class Tax_Calculator เป็นการประกาศ class ช่ือ Tax_Calculator Public float calTax(float s) เป็นการประกาศ method ช่ือ calTax() เพ่ือใชใ้ นการ คานวณภาษีโดยรบั คา่ ขอ้ มลู เงนิ เดอื นผา่ นพารามิเตอรต์ วั แปร S ซง่ึ เป็นขอ้ มลู ชนิด Float และ ทาการคืนคา่ ภาษีท่คี านวณไดอ้ อกมาเป็นขอ้ มลู ชนิด float Return 0.01f*s; คนื คา่ ภาษีท่คี านวณไดอ้ อกมาเป็นขอ้ มลู ชนิด float โดยคานวณจาก 0.01 คณู กบั คา่ ตวั แปร S คาส่ังควบคุมทศิ ทางการทางานของโปรแกรมแบบมีทางเลือก เป็นคาส่งั ควบคมุ ท่ีจะตรวจสอบเง่ือนไขของคาส่งั ก่อนการทางาน เพ่ือใชใ้ นการตดั สินใจเลือก ทิศทางของการทางาน ในบางครงั้ อาจมีการขา้ มการทางานของคาส่งั บางชดุ ไป คาส่งั ควบคมุ แบบมีทางเลือกสามารถแบง่ ไดเ้ ป็น 4 คาส่งั คือ คาส่งั if…else, คาส่งั nested if และ คาส่งั switch

คาส่งั If; คาส่งั ควบคมุ ใหโ้ ปรแกรมทางานหรอื ไมท่ างานในชดุ คาส่งั ท่ีกาหนด เป็นคาส่งั ควบคมุ ท่ีกาหนดใหโ้ ปรแกรมทางานหรอื ไมท่ างานในชดุ คาส่งั ท่ีกาหนด โดยจะตรวจสอบจากคา่ ความจรงิ ของนิพจนท์ ่กี าหนด หากคา่ ความจรงิ ของนิพจนเ์ ป็น จรงิ (true) โปรแกรมจะทางานตามชดุ คาส่งั ท่ีอยภู่ ายใตค้ าส่งั If หากคา่ ความจรงิ ของนพิ จนเ์ ป็น เทจ็ (false) โปรแกรมจะขา้ มไปทางานคาส่งั อ่ืนตอ่ ไป ในการศกึ ษาขนั้ ตอนการทางานของโปรแกรมท่ใี ชค้ าส่งั ควบคมุ แบบมรทางเลือก ให้ ทาการเขียนโปรแกรมตวั อยา่ งซง่ึ มีลกั ษณะดงั นี้ 1.สรา้ ง project If_Statement เพ่ือใชใ้ นการศกึ ษาโดยในตวั อยา่ งนีจ้ ะเป็นการ ตรวจสอบอายขุ องผใู้ ชง้ าน หากผใู้ ชง้ านมีอายตุ ่ากวา่ 18 ปี จะไมส่ ามารถใชง้ านได้ 2.สรา้ ง main class If_statement ไวใ้ น project If_Statement เพ่ือใชใ้ นการ ตรวจสอบอายลุ กั ษณะของ code ท่ไี ดม้ ดี งั นี้ สาหรับ class If_Statement สามารถอธิบายได้ดังนี้ Importjava.util.Scanner; เป็นการเรยี กใชง้ าน java utility ช่ือ Scanner เพ่ือใชใ้ นการรบั ขอ้ มลู จากผใู้ ช้

Public class If_Statement ประกาศ class ช่ือ If_Statement Int age; ประกาศตวั แปร age โดยกาหนด ใหเ้ ป็นขอ้ มลู ชนดิ ตวั เลขจานวนเต็ม Scanner scan = new Scanner(System.in); ประกาศ object scanner จาก คลาส scanner เพ่ือใชใ้ นการรบั ขอ้ มลู System.outprint(“Please Enter your age here “); แสดงผลขอ้ ความเพ่ือใหผ้ ใู้ ชท้ าการใสอ่ ายุ Age = scan.nextlnt(); รบั ขอ้ มลู อายโุ ดยใช้ method nextlnt() และเก็บคา่ ไวใ้ นตวั แปร age If(age< 18){ ตรวจสอบเง่ือนไขของอายุ หากพบวา่ ผใู้ ชม้ อี ายตุ ่ากวา่ 18 ปี จะแสดง ขอ้ ความท่กี าหนด หากผใู้ ชม้ อี ายตุ งั้ แต่ 18 ปีขนึ้ ไป จะขา้ มไปทาชดุ คาส่งั ถดั ไป System.out.println(“User is Less than 18”); System.out. println(“Access denied”); } If (age >= 18) { ตรวจสอบเง่อื นไขของอายุ หากพบวา่ ผใู้ ชม้ อี ายุ 18 ปีขนึ้ ไป จะแสดง ขอ้ ความท่กี าหนด System.out.println(“User is 18 or older”); System.out. println (“Access granted”); } เม่ือทาการรนั โปรแกรมจะไดผ้ ลตามรูป

กรณีท่ผี ใู้ ชอ้ ายตุ ่ากวา่ 18 ปี กรณีท่ผี ใู้ ชอ้ ายุ 18 ปีขนึ้ ไป คาส่ัง If…else : คาส่ังควบคุมใหโ้ ปรแกรมเลือกทางานในชุดคาส่ังโดยคาส่ังหน่ึงจาก 2 ทางเลือก เป็นคาส่งั ควบคมุ ใหโ้ ปรแกรมเลือกทางานในชดุ คาส่งั จาก 2 ทางเลือก โดยเง่ือนไขในการเลือก นนั้ จะเลือกโดยการตรวจสอบคา่ ความจรงิ ของนิพจนท์ ่ีกาหนด หากนิพจนท์ ่กี าหนดมีคา่ ความ จรงิ เป็นจรงิ (true) โปรแกรมจะเลือกทางานตามชดุ คาส่งั ท่ีอยภู่ ายใตค้ าส่งั IF หากนพิ จนท์ ่ี กาหนดมีคา่ ความจรงิ เป็นเทจ็ (false) โปรแกรมจะเลือกทางานตามชดุ คาส่งั ท่ีอยภู่ ายใต้ คาส่งั else

ในการศกึ ษาการทางานของคาส่งั ควบคมุ If…else นนั้ เราจะใช้ โปรแกรม If…Statement ท่ไี ดส้ รา้ งไวก้ ่อนหนา้ นามาดดั แปลงเพ่ือใชร้ ว่ มกบั คาส่งั If…else โดย มีลกั ษณะของโปรแกรมท่ีไดม้ ดี งั นี้ ส่งิ ท่แี ตกตา่ งกนั ระหวา่ งตวั อยา่ งคาส่งั ควบคมุ If และ ตวั อยา่ งคาส่งั ควบคมุ If…else คอื มีการใชง้ านคาส่งั If…else แทนการใชง้ าน ชดุ คาส่งั If 2 ชดุ ในตวั อยา่ ง กอ่ นหนา้ อยา่ งไรกด็ ี ผลท่ไี ดจ้ ากการรนั โปรแกรมจะไดผ้ ลท่เี หมอื นกนั กรณีท่ผี ใู้ ชง้ านมอี ายตุ ่ากวา่ 18 ปี จาทาใหค้ า่ ความจรงิ ของนิพจน์ age< 18 มีคา่ ความจรงิ เป็นจรงิ (true) โปรแกรมจะทางานตามชดุ คาส่งั ท่ีอยภู่ ายใตค้ าส่งั if

กรณีผใู้ ชง้ านมีอายตุ งั้ แต่ 18 ปีขนึ้ ไป จะทาใหค้ า่ ความจรงิ ของนิพจน์ age < 18 มี คา่ ความจรงิ เป็นเท็จ (false) โปรแกรมจะเลือกทางานตามชดุ คาส่งั ท่ีอยภู่ ายใตค้ าส่งั else คาส่ังควบคุมทศิ ทางการทางานของโปรแกรมแบบทาซา้ เป็นคาส่งั ควบคมุ ท่ีกาหนดรูปแบบการทางานของโปรแกรมแบบวนลปู (loop) โดยจะมีการ ทาซา้ ชดุ คาส่งั เดมิ จนกวา่ เง่ือนไขท่กี าหนดไวจ้ ะเป็นเทจ็ จงึ จะออกจากลปู คาส่งั รูปแบบของ คาส่งั ควบคมุ แบบทาซา้ มี 3 คาส่งั คอื คาส่งั while, คาส่งั do…while และคาส่งั for คาส่งั while: คาส่งั ควบคมุ แบบทาซา้ ดว้ ยจานวนรอบท่ีไมแ่ นน่ อน เป็นคาส่งั ควบคมุ แบบทาซา้ ท่มี กี ารตรวจสอบเง่ือนไขของนิพจนก์ อ่ นการทางานตามชดุ คาส่งั ท่ี อยภู่ ายในลปู ทกุ ครงั้ โดยโปรแกรมจะทางานตามชดุ คาส่งั ภายในลปู กต็ อ่ เม่อื คา่ ความจรงิ ของ นิพจนเ์ ป็น true เม่อื ทางานตามชดุ คาส่งั เสรจ็ สนิ้ จะมีการตรวจสอบคา่ ความจรงิ ของนพิ จนอ์ ีก ครงั้ และจะหยดุ การทางานเม่ือค่าความจรงิ ของนิพจนเ์ ป็น false โดยโปรแกรมจะออกจากลปู ไปทางานทางานท่ีคาส่งั ถดั ไป รูปแบบของคาส่งั while มีดงั นี้ While (Boolean_expression) { Statements; }

โดยท่ี Boolean_expression คือนพิ จนท์ ่มี คี า่ ความจรงิ ทางตรรกศาสตร์ และจะมีการ ตรวจสอบคา่ ความจรงิ ก่อนการทางานตามชดุ คาส่งั ท่ีอยภู่ ายในลปู ทกุ ครงั้ Statements คือชดุ คาส่งั ท่ีตอ้ งการใหม้ กี ารทาซา้ ตวั อยา่ งโปรแกรมท่มี ีการใชค้ าส่งั ควบคมุ while เพ่ือคานวณผลรวมของเลข 1-100 มี ลกั ษณะดงั นี้ สามารถอธิบายโปรแกรมไดด้ งั นี้ int i = 1, sum = 0; ประกาศตวั แปร i เป็นตวั แปร integer และมีคา่ เทา่ กบั 1 เพ่ือใชเ้ ป็นตวั นบั และประกาศตวั แปร sum เป็นขอ้ มลู ชนดิ integer และมีคา่ เทา่ กบั 0 เพ่ือใชเ้ ก็บคา่ ผลรวม while (i<=100) เรยี กใชง้ านการวนลปู ดว้ ยคาส่งั while โดยกาหนดนพิ จนเ์ ง่ือนไขใหต้ รวจสอบ คา่ ของตวั แปร i วา่ มคี า่ นอ้ ยกวา่ หรอื เทา่ กบั 100 หรอื ไม่ sum += i; นาคา่ ของ I บวกดว้ ยคา่ ของ sum และเก็บผลรวมไวใ้ นตวั แปร sum i++ เพ่มิ คา่ ของตวั แปร I ขนึ้ 1 คา่ System.out.println(“summation of 1 to 100 = “+sum); แสดงผลรวมท่ีไดท้ างหนา้ จอเม่ือทา การรนั โปรแกรมจะไดผ้ ลดงั รูป

บทท่ี 5 โปรแกรมภาษาจาวาเชงิ วตั ถุ การเขียนโปรแกรมเชิงวตั ถุ คืออะไร การเขียนโปรแกรมเชิงวตั ถุ เป็นรูปแบบการเขียนโปรแกรมท่ใี ชแ้ นวคดิ ของออบเจ็ค ซง่ึ ในออบ เจ็คนนั้ จะประกอบไปดว้ ยสมาชิก 2 แบบ คือ ตวั แปรซง่ึ เป็นขอ้ มลู หรอื กาหนดคณุ ลกั ษณะของ ออบเจค็ และเมธอด เป็นฟังกช์ นั การทางานท่ีออ็ บเจ็คสามารถทาได้ ในการสรา้ งออบเจ็คนนั้ จะ อยภู่ ายใตก้ ารกาหนดของคลาส โดยคลาสคอื การกาหนดวา่ ออบเจค็ จะมสี มาชิกอะไรบา้ ง และ กาหนดการทางานของเมธอด ดงั นนั้ ออบเจค็ จะสรา้ งจากคลาส เราเรยี กออบเจค็ วา่ instances ของคลาส ภาษาตา่ งๆ เป็นจานวนมากสนบั สนนุ การเขียนโปรแกรมเชิงวตั ถุ เช่น Java C++C# Python PHP Ruby และภาษาอ่ืนๆ ซง่ึ Java ถือวา่ เป็นภาษาของออบเจค็ อย่างเตม็ รูปแบบ การเขียน โปรแกรมเชิงวตั ถนุ นั้ เป็นการพฒั นารูปแบบของการเขียนโปรแกรมไปอีกขนั้ จากการเขียน โปรแกรมแบบเดิมท่ีเราเคยเขียนคอื Procedural programming คณุ สมบตั ิของ OOP การเขียนโปรแกรมเชิงวตั ถุ มีขอ้ ดีและขอ้ ไดเ้ ปรยี บจากการเขียนโปรแกรมแบบเดมิ มากมาย ซง่ึ ส่ิงท่สี าคญั ท่ีสดุ ของมนั คือการนาโคด้ ของโปรแกรมกลบั มาใชใ้ หม่ และคณุ สมบตั อิ ่ืนๆ ดงั นี้ • Code reuse: การนาโคด้ กลบั มาใชใ้ หม่ ไดอ้ ยา่ งมปี ระสิทธิภาพ

• Maintenance: งา่ ยตอ่ การบารุงรกั ษาและปรบั ปรุง แตล่ ะคลาสจะมีขอบเขตการทางาน และเมธอดของมนั เอง • Classes: คลาสท่ีสรา้ งขนึ้ นนั้ สามารถนาไปสรา้ งเป็นออบเจค็ ไดไ้ มจ่ ากดั และแตล่ ะออบ เจ็คมสี มาชิกเป็นของมนั เอง • Inheritance: คณุ สมบตั ิการสบื ทอด คลาสสามารถสืบทอดจากคลาสอ่นื ได้ ซง่ึ เป็นการ reuse code และพฒั นาตอ่ เดมิ ความสามารถจากคลาสเดมิ ท่ีมีอยู่ • Polymorphism: คณุ สมบตั ขิ องออบเจ็คท่ีหลากหลายรูปแบบ ซง่ึ สามารถจดั การไดจ้ าก Base คลาสของมนั • Encapsulation: เป็นคณุ สมบตั ิการหอ่ หมุ้ เป็นแนวคิดแบบนามธรรมท่วี า่ คณุ ไม่ จาเป็นตอ้ งรูว้ า่ เมธอดหรอื ในคลาสนนั้ ทางานยงั ไง แตม่ นั สามารถทางานไดส้ าเรจ็ และ ใหผ้ ลลพั ธแ์ ก่คณุ ได้ • Abstraction: คือการอธิบายการทางานของคลาสและเมธอดในแบบนามธรรม เพ่ือ นาไปใชส้ าหรบั ออบเจ็คท่ีมีการทางานแตกตา่ งกนั เชน่ เราบอกวา่ สตั วส์ ามารถเคลอื่ นท่ี การเคลือ่ นท่ีคอื การบอกอย่างเป็นนามธรรม เพราะวา่่สตั วแ์ ต่ละตวั มีวธิ ีการเคล่อื นท่ีท่ี แตกต่างกนั เช่น สนุ ขั จะเดนิ นกจะบนิ สว่ นเตา่ จะคลาน เป็นตน้ ขา้ งบนนนั้ เป็นคณุ สมบตั ขิ องการเขียนโปรแกรมแบบออบเจ็ค ท่ีมีความสาคญั และมนั ใชก้ บั การ เขียนโปรแกรมในขนั้ สงู อยา่ งไรก็ตามในบทนี้ คณุ จะไดเ้ รยี นรูเ้ ก่ียวกบั มนั ทงั้ หมด คลาสและออบเจ็ค สว่ นประกอบของการเขยี นโปรแกรมเชิงวตั ถทุ ่สี าคญั คือ คลาสและออบเจค็ ในตอนแรกเราตอ้ ง สรา้ งหรอื ประกาศคลาสขนึ้ มา ซง่ึ ประกอบไปดว้ ยตวั แปร และเมธอดในการทางาน หลงั จากนนั้

เราจะนาไปสรา้ งออบเจค็ การสรา้ งคลาสก็เหมือนการออกแบบรูปแบบของวตั อุ ย่างหนง่ึ ท่ีเราจะ สรา้ งขนึ้ มา เช่น คณุ จะสรา้ งรถขนึ้ มาเราก็ตอ้ งเขียนแบบ เราเรยี กสิ่งนีว้ า่ คลาส และเรานาไป สรา้ งรถ ซง่ึ กค็ ือออบเจ็ค ในตวั อยา่ งเป็นรูปท่ีแสดงใหเ้ ห็นถงึ รายละเอียดของรถท่ีนามาสรา้ งเป็นคลาส จะเหน็ ไดว้ า่ จะมี attribute เมธอดเพ่ืออธิบายเก่ียวกบั รถ ซง่ึ รถก็จะมีคณุ สมบตั ขิ องมนั เช่น จานวนเชือ้ เพลิง ความเรว็ สงู สดุ และอ่ืน และสว่ นของการทางาน จะเป็นการเตมิ นา้ มนั การเพ่มิ และลดความเร็ว การขบั เคลื่อนรถออกไป และสตารท์ หรอื หยดุ เครอ่ื งยนต์ เป็นตน้ ซง่ึ สิ่งเหลา่ นีจ้ ะถกู กาหนดไวใ้ น คลาส มาดตู วั อยา่ งของการประกาศคลาสในภาษา Java เราจะประกาศคลาส Car ซง่ึ จะประกอบไป ดว้ ยคณุ สมบตั ิ และเมธอดการทางาน public class Car {

public float fuel; public int maxSpeed; public int currentSpeed = 0; public String color; public void reFuel() { fuel = 100; } public float getFuel() { return fuel; } private void setSpeed(int speed) { currentSpeed = speed; } public void drive() { setSpeed(currentSpeed + 1); if(currentSpeed >= maxSpeed) { currentSpeed = maxSpeed; }

} } ในตวั อยา่ ง เป็นรูปแบบของการประกาศคลาสในภาษา Java ท่มี ีช่ือของคลาสคอื Car และ ภายในคลาสจะประกอบไปดว้ ยตวั แปร สาหรบั เกบ็ คา่ คณุ สมบตั ติ า่ งของรถยนต์ และเมธอด เป็นฟังกก์ ารทางานท่ีรถยนตส์ ามารถทาได้ มีเพียงแคค่ ลาสนนั้ โปรแกรมยงั ไม่สามารถทาได้ ดงั นนั้ เราจงึ ตอ้ งนาคลาสนีไ้ ปสรา้ งออบเจ็คกอ่ น ซง่ึ คณุ จะไดเ้ รยี นเก่ียวกบั คลาสและออบเจ็คใน บทตอ่ ไป ในบทนี้ เราไดแ้ นะนาใหค้ ณุ รูจ้ กั กบั การเขียนโปรแกรมเชงิ วตั ถใุ นภาษา Java และคณุ สมบตั ิท่ี สาคญั ของ OOP รวมถึงรูปแบบของการประกาศคลาสสาหรบั ใชใ้ นการสรา้ งออบเจ็ค ในบท ตอ่ ไป คณุ จะไดเ้ รยี นรูเ้ ก่ียวกบั การสรา้ งคลาสในภาษา Java และนาคลาสไปสรา้ งออบเจค็ ซง่ึ จะเป็นการเรม่ิ เขา้ สเู่ นือ้ หาของการเขียนโปรแกรมเชิงวตั ถุ บทท่ี 6 คุณสมบัตเิ ชงิ วัตถุ คุณสมบตั ิของภาษาการโปรแกรมเชงิ วัตถุ คณุ สมบตั ิตา่ งๆ ตอ่ ไปนีจ้ ะตอ้ งทาความเขา้ ใจในเบอื้ งตน้ กอ่ น ซง่ึ การเขียนโปรแกรม นนั้ จะขอกลา่ วในบทตอ่ ไป โดยคณุ สมบตั ขิ องการเขียนโปรแกรมเชิงวตั ถจุ ะประกอบ ไปดว้ ย Encapsulation (การหอ่ หมุ้ วตั ถ)ุ Data Hiding (การซอ่ น รายละเอยี ด) Inheritance(การสบื ทอด) Polymorphism (การพอ้ งรูป) 1. Encapsulation (การหอ่ หุม้ วตั ถุ) คือ การรวมคณุ ลกั ษณะของวตั ถแุ ละพฤติกรรม ของวตั ถเุ ขา้ ไวด้ ว้ ยกนั โดยกาหนดใหเ้ ป็นลกั ษณะชนิดของวตั ถนุ นั้ ๆ เช่นในการเขียน โปรแกรมเชิงวตั ถุ จะสงั เกตเห็นวา่ มตี วั แปรและฟังกช์ ่นั กระจดั กระจายกนั อยู่ ดงั นนั้

เราจงึ เอาตวั แปรและฟังกช์ ่นั ท่ีมีพฤตกรรมคลา้ ยกนั มาหอ่ หมุ้ หรอื จดั กลมุ่ ไวด้ ว้ ยกนั ดงั ภาพ 2. Data Hiding (การซ่อนรายละเอียด) คือ การกาหนดระดบั ในการเขา้ ถึงขอ้ มลู เพ่ือปอ้ งกนั การเขา้ มาใชข้ อ้ มลู ของวตั ถโุ ดยสิ่งอ่ืนท่ีไมเ่ ก่ียวขอ้ งแลว้ ทาใหเ้ กิดการ ผดิ เพีย้ นของการทางานทงั้ ระบบ ดงั นนั้ ขอ้ มลู บางอย่างไมย่ ินยอมใหว้ ตั ถอุ ่ืนใดมาใช้ งานได้ จาเป็นตอ้ งซอ่ นรายละเอียดตรงจดุ นีเ้ อาไว้ เพ่ือใหเ้ กิดความปลอดภยั ของวตั ถุ และระบบโดยรวมใหม้ ากท่ีสดุ มีผสู้ งั เกตเห็นวา่ ในชีวติ ประจาวนั นนั้ ไมจ่ าเป็นตอ้ งทราบหรอื รูท้ กุ เร่อื งก็สามารถใช้ งานสงิ่ ของนนั้ ๆ ได้ เชน่ คอมพวิ เตอรท์ ่นี กั ศกึ ษาใชอ้ ยไู่ มต่ อ้ งทราบการทางานของ อปุ กรณห์ รอื วงจรภายใน แตก่ ็สามารถเปิดเคร่อื งหรอื ใชง้ านโปรแกรมตา่ งๆ ผา่ น อปุ กรณต์ า่ งๆ ในสว่ นประกอบบางอยา่ งของวตั ถผุ อู้ อกแบบก็อนญุ าตใหเ้ ราสามารถเรยี กใชห้ รอื เขา้ ถงึ ได้ และในขณะเดยี วกนั สว่ นประกอบบางอยา่ งผทู้ ่อี อกแบบวตั ถนุ นั้ ก็ไมย่ อมให้

เขา้ ถงึ หรอื เรยี กใชไ้ ด้ เชน่ สว่ นประกอบของรถยนต์ ผใู้ ชส้ ามารถเขา้ ถึง พวงมาลยั ท่ี เหยียบคลชั ท่เี หยียบเบรค ประตู เน่ืองจากผอู้ อกแบบตน้ แบบรถคนั นี้ ไดอ้ นญุ าตให้ เขา้ ใชง้ าน แตใ่ นขณะเดียวกนั ผอู้ อกแบบรถคนั ก็ไมไ่ ดอ้ นญุ าตใหเ้ ราเขา้ ถึง องคป์ ระกอบบางอย่าง จงึ ไมส่ ามารถเขา้ ถงึ ได้ เชน่ เคร่อื งยนต์ ระบบเบรก ระบบ เกียร์ ในการเขียนโปรแกรมนนั้ ตวั แปร หรอื เมธอดท่ีอยใู่ นวตั ถุ สามารถเรยี กใชห้ รอื เขา้ ถึง ได้ โดยสามารถใชค้ าวา่ ประกอบ Public (สาธารณะ) นาหนา้ ก่อนการประกาศตวั แปร หรอื การเขา้ ถึงไมไ่ ดจ้ ะใชค้ าประกอบนาหนา้ ตวั แปร หรอื เมธอดนนั้ วา่ Private (สว่ นตวั ) 3. Inheritance (การสบื ทอด) เป็นการขยายลกั ษณะพิเศษหรอื ความสามารถของ ชนิดวตั ถใุ หมจ่ ากชนิดวตั ถพุ ืน้ ฐานใหม้ ลี กั ษณะของเดมิ และเพ่มิ เตมิ สงิ่ ใหมๆ่ เขา้ ไป ดว้ ย เชน่ คลาสมนษุ ย์ เป็นคลาสท่มี คี ณุ สมบตั ิและพฤตกรรมพืน้ ฐานท่ีทกุ คนจะตอ้ ง มี และสบื ทอดคณุ สมบตั ินีไ้ ปยงั คลาสประชาชน ซง่ึ จะตอ้ งมีการระบุ เชือ้ ชาติ สญั ชาติ และมีพฤติกรรมในการส่ือสารท่ีเหมือนกนั และคลาสประชาชนนีย้ งั ถกู สบื ทอดไปยงั คลาสนกั เรยี น ดงั ภาพ

คณุ สมบตั ิของการสบื ทอดนี้ (Inheritance) ทาใหก้ ารโปรแกรมเชิงวตั ถมุ ีขอ้ ดี คือ สามารถสรา้ งงานตา่ งๆ ไดเ้ รว็ เพราะสามารถนาของเก่ามาใชง้ านใหมไ่ ด้ เรยี กวา่ “Reused” คือการนาเอาคลาสกลบั มาใชใ้ หม่ แตก่ ็ยงั มีลกั ษณะอีกอยา่ งท่ี ช่วยใหเ้ กิด “Reused” ไดเ้ ชน่ กนั คอื Composition คอื การสรา้ งวตั ถใุ ดๆ ดว้ ยการ ประกอบจากวตั ถอุ ่ืน 4. Polymorphism (การพ้องรูป) เป็นคณุ สมบตั ทิ ่ีชนิดของวตั ถทุ ่เี กิดจากชนดิ ของ วตั ถแุ มเ่ ดยี วกนั สามารถมีความสามารถ (เมธอด) เหมอื นแมแ่ ต่ผลลพั ธก์ าร ดาเนินงานไมเ่ หมอื น คือ มีลกั ษณะเฉพาะตวั ตวั อยา่ งเช่น พฤติกรรมการบินของของ คลาสสตั วท์ งั้ 3 ชนิด ท่ีมีความแตกต่างกนั แต่ช่ือพฤติกรรมเหมอื นกนั บทที่ 7 อนิ เตอรเ์ ฟส (Interface) อินเตอรเ์ ฟสของระบบมีอ็อพชนั หลายคา่ ใหเ้ ลอื ก ทงั้ นีข้ นึ้ อยกู่ บั ชนิดของการเช่ือมตอ่ กบั ระบบ และงานท่ีคณุ ตอ้ งการดาเนนิ การ คณุ สามารถเขา้ ถงึ และใชร้ ะบบของคณุ โดยอินเตอรเ์ ฟส System i Navigator, โดยอินเตอรเ์ ฟสแบบอกั ขระ และโดย ไคลเอน็ ตไ์ รส้ าย คณุ สามารถเขา้ ถงึ ระบบจากอนิ เตอรเ์ ฟสแบบอกั ขระบนคอนโซลท่ตี อ่ พว่ งหรอื อีมเู ล เตอรเ์ ซสชนั และจาก graphical user interface ใน System i

Navigator อนิ เตอรเ์ ฟสท่ีคณุ ตอ้ งการใชง้ านขนึ้ อยกู่ บั ชนิดของการเช่ือมตอ่ กบั ระบบ และงานท่ีคณุ ตอ้ งการดาเนินการ หวั ขอ้ นีจ้ ะอธิบายวธิ ีเขา้ ถึงระบบจากอนิ เตอรเ์ ฟส แบบอกั ขระ และกลา่ วถงึ ฟังกช์ นั บางอยา่ งสาหรบั วธิ ีการเขา้ ถึงนี้ อินเตอรเ์ ฟสแบบอกั ขระ อนิ เตอรเ์ ฟสแบบอกั ขระท่ีมอี ยใู่ นอมี เู ลเตอรเ์ ซสชนั หรอื คอนโซลสว่ นใหญ่ อาจจะไม่ เป็นท่ีคนุ้ เคยสาหรบั บคุ คลท่ีไมเ่ คยใชร้ ะบบปฏิบตั กิ าร i5/OS มากอ่ น อินเตอรเ์ ฟสแบบอกั ขระจะสามารถใชง้ านไดจ้ ากคอนโซลและอีมเู ลเตอรเ์ ซสชนั สว่ น ใหญ่ท่เี ช่ือมตอ่ กบั ระบบ และมฟี ังกช์ นั มากกวา่ อนิ เตอรเ์ ฟสแบบอ่ืนๆ ในขณะท่ีคณุ อาจไมค่ นุ้ เคยกบั อนิ เตอรเ์ ฟสแบบนีใ้ นช่วงแรก อินเตอรเ์ ฟสนีย้ งั มวี ิธีการหลายวิธีใน การท่จี ะช่วยเหลอื ผใู้ ชร้ ายใหม่ และลาดบั ชนั้ ของงานแบบเมนจู ะช่วยใหก้ ารคน้ หา ฟังกช์ นั ท่ตี อ้ งการทาไดง้ า่ ยขนึ้ อินเตอรเ์ ฟสแบบอกั ขระมีหนา้ จอแสดงผลหลกั สามหนา้ จอซง่ึ ก็คือ: หนา้ จอการสารวจ , หนา้ จออนิ พตุ , และหนา้ จอแสดงขอ้ มลู . หนา้ จอการสารวจ โดยปกตแิ ลว้ จะ ประกอบดว้ ยรายการของเมนอู อ็ พชนั และบรรทดั รบั คาส่งั . คณุ สามารถใช้ จอแสดงผลนีใ้ นการคน้ หาขอ้ มลู หรืองานบนระบบปฏิบตั ิการ และปอ้ นคาส่งั control language (CL) จอแสดงผลอินพตุ นีพ้ รอ้ มใชง้ านเม่ือระบบปฏบิ ตั กิ ารรอ้ งขอขอ้ มลู จากคณุ . ใชห้ นา้ จอนีเ้ พ่ือปอ้ นหรอื เปล่ยี นแปลงขอ้ มลู . จอแสดงผลขอ้ มลู จะแสดงถงึ ขอ้ มลู ของระบบ และไม่มกี ารโตต้ อบใดๆ การค้นหาฟังกช์ นั หรืองาน งานทงั้ หมดของระบบจะถกู แบง่ เป็นหมวดหมทู่ ่สี ามารถเขา้ ถึงผา่ นเมนหู ลกั ได้ คณุ สามารถเขา้ สรู่ ายการเลือกเมนเู พ่ือเล่อื นไปตามลาดบั รายการเมนู จนกระท่งั คณุ พบ

งานท่ีคณุ กาลงั คน้ หา. ผใู้ ชต้ า่ งๆ อาจมเี มนอู อ็ พชนั ท่ใี ชง้ านไดแ้ ตกต่างกนั ทงั้ นีข้ นึ้ อยู่ กบั กลยทุ ธก์ ารรกั ษาความปลอดภยั ขอ้ บงั คบั ท่ีกาหนดโดยผดู้ แู ลระบบ และโปรไฟล์ ผใู้ ชท้ ่ใี ชง้ านอยู่ เม่ือคณุ พบเมนอู ็อพชนั ท่ีตอ้ งการใช,้ คณุ สามารถปอ้ นคาส่งั ท่ี พรอ้ มต์ Selection or Command ซง่ึ อยดู่ า้ นลา่ งของจอแสดงผล. หนา้ จอเมนหู ลายๆ หนา้ จออาจมีรายช่ืออยบู่ นมมุ บนซา้ ยของหนา้ จอ. คณุ สามารถใชค้ าส่งั GO ตามดว้ ย ช่ือของเมนเู พ่ือเขา้ ถงึ จอแสดงผลของเมนนู นั้ ตวั อยา่ งเชน่ GO JOB จะส่งั ให้ ระบบปฏิบตั ิการแสดงเมนู Jobs การขอรับคาอธบิ าย อนิ เตอรเ์ ฟสแบบอกั ขระมีวิธีการหลายวิธีในการช่วยเหลอื ผใู้ ช.้ วิธีแรก, มคี าอธิบาย ออนไลน์ ซง่ึ มอี ยใู่ นหลายๆ หนา้ จอ โดยการกดคีย์ คาอธิบาย หรอื F1. คณุ สามารถดู คาอธิบายสาหรบั ฟิลดใ์ ดฟิลดห์ น่งึ หรอื ไอเท็มไดโ้ ดยการวางเคอรเ์ ซอรล์ งบนฟิลดห์ รอื ไอเท็มนนั้ และกดคียค์ าอธิบาย หรอื F1. เม่อื คณุ ปอ้ นขอ้ มลู , คณุ สามารถดคู าอธิบาย ไดโ้ ดยปอ้ นเครอ่ื งหมาย ? ลงในฟิลดข์ อ้ มลู . สดุ ทา้ ย, คณุ สามารถควบคมุ จานวนและ

ชนิดของขอ้ มลู ท่แี สดงอยบู่ นหนา้ จอได้ โดยการเปลย่ี นระดบั ความชว่ ยเหลือ. ระดบั ความช่วยเหลอื จะกาหนดเวอรช์ ่นั ของหนา้ จอท่ีคณุ จะไดเ้ ห็น. หนา้ จอของระบบสว่ น ใหญ่ จะมี 2 เวอรช์ ่นั : • เวอรช์ ่นั ระดบั ความช่วยเหลอื เบอื้ งตน้ , ซง่ึ มีขอ้ มลู นอ้ ย และไมใ่ ชค้ าศพั ทท์ าง เทคนคิ . • เวอรช์ ่นั ระดบั ความช่วยเหลอื ระดบั กลาง, จะมีขอ้ มลู มากขนึ้ และใชค้ าศพั ท์ ทางเทคนคิ . มีบางฟิลดห์ รอื บางฟังกช์ นั ท่จี ะอยใู่ นหนา้ จอของบางเวอรช์ ่นั เท่านนั้ . คาแนะนาจะ บอกคณุ ว่าเวอรช์ ่นั ไหนท่ใี ชไ้ ด.้ ในการเปล่ยี นระดบั ความชว่ ยเหลือ, ใหใ้ ชค้ ยี ์ F21 (เลือกระดบั ความช่วยเหลอื ). แต่ F21 จะมีอยบู่ นจอแสดงผลบางจอเทา่ นนั้ . บทที่ 8 การจัดการเหตุการณใ์ นภาษาจาวา (Event bandling) การเขียนโปรแกรมภาษาจาวาท่เี ก่ียวกบั เหตกุ ารณต์ า่ งๆ นนั้ สว่ นใหญ่จะเก่ียวขอ้ ง กบั คอมโพเนนตท์ ่เี ป็นกราฟิก ซง่ึ ในภาษาจาวาไดเ้ ตรยี มคลาสไวใ้ ห้ ใน AWT คอมโพเนนต์ โดยเราตอ้ งทาความรูจ้ กั กบั คอมโพเนนตแ์ ต่ละตวั (ยกเวน้ Panel และ Label) สามารถสรา้ งเหตกุ ารณท์ ่จี ะตอบโตก้ บั ผใู้ ชง้ านโดย เหตกุ ารณค์ ลิกเล่อื นเมาสม์ าบนป่มุ การกดป่มุ การใสค่ า่ ลงไปในกลอ่ งขอ้ ความ ฯลฯ

คอมโพเนนตท์ ส่ี ามารถกาหนดเหตุการณไ์ ด้ (Event Componets) คอมโพเนนตน์ ี้ คอื คลาสยอ่ ยของ java.awt.Component ซง่ึ สามารถสรา้ งเหตกุ ารณ์ ซง่ึ อาจเป็นป่มุ (Button) กลอ่ งขอ้ ความ (TextField) หรอื เฟรม (Frame) กไ็ ด้ คลาสทเี่ กี่ยวข้องกับเหตุการณ์ (Event Classes) เหตกุ ารณท์ ่มี ีจะถกู สรา้ งขนึ้ ดว้ ยคลาสท่เี ก่ียวขอ้ ง เช่น Button ก็จะ มี ActionEvent หรอื Checkbox จะมี ItemEvent เป็นตน้ ทงั้ หมดนีจ้ ะอยใู่ นแพ็ก เพจ java.awt.event โดยสว่ นใหญ่แลว้ เวลานาไปใชม้ กั จะอา้ งอิงรวมโดยการ import java.awt.* ซง่ึ หมายถงึ นาเขา้ แพ็กเกจทงั้ หมดตงั้ แต่ java.awt เป็นตน้

บทท่ี 9 การจัดการข้อผดิ พลาดในภาษาจาวา (Java Exceptions) การจดั การข้อผดิ พลาดในภาษาจาวา การเขียนโปรแกรม เรามกั จะพบขอ้ ผิดพลาดท่ีเกิดขนึ้ ในการเขยี นโปรแกรมไม่ มากกน็ อ้ ยในอดตี การเขียนโปรแกรมแบบโครงสรา้ ง เม่ือผดิ พลาดไมว่ า่ จะเป็นผดิ มาก เลก็ นอ้ ยเม่ือทาการคอมไพลแ์ ลว้ มกี ารใชผ้ ิดพลาดขนึ้ โปรแกรมจะไมส่ ามารถแกไ้ ขได้ เวน้ แตว่ า่ จะปิดแลว้ เปิดใหมเ่ พ่ือใชง้ านใหถ้ กู ตอ้ ง เราจะแยกปัญหาออกเป็นสองแบบ คือ สิ่งท่เี กิดขนึ้ ขณะคอมไพล์ (Compile Time) และเกิดขนึ้ ขณะรบั โปรแกรม (Rum- time) ปัญหาชนดิ Compile-time นนั้ จะพบไดใ้ นขนั้ ตอนเขียนโปรแกรมสว่ นสง่ิ ท่ี เกิดขนึ้ ขณะรนั นนั้ จะมีผลตอ่ การทางานของโปรแกรมมากกวา่ เรยี กวา่ Excrptions ซง่ึ จะตอ้ งจดั การเพ่ือไมใ่ หเ้ กิดขอ้ ผดิ พลาดเกิดขนึ้

Exception handling ทร่ี ะบบสร้างมาให้ การเกิด Exception แบบนีภ้ าษาจาวาสรา้ งกลไกรรองรบั ไวแ้ ลว้ ดงั นี้ 1. ไมส่ ามารถพบไฟลท์ ่อี า้ งองิ จะถกู ดแู ลโดยคลาส FileNotFoundException 2. ไฟลท์ ่อี า้ งถงึ ม่ีรูปแบบท่ผี ิดพลาด ตวั อยา่ งเชน่ ไฟลม์ ีสว่ นขยาย .txt แตเ่ รา ตอ้ งการใชไ้ ฟล์ .java จะถกู ดแู ลโดยคลาส ClassNotFoundException 3. ไมส่ ามารถเช่ือมตอ่ เครอื ขา่ ยไดจ้ ะถกู ดแู ลโดย คลาส MalformedURLException 4. การคานวณท่ีผิดพลาดทางคณิตศาสตร์ เช่น การหารดว้ ยศนู ยท์ าง คณิตศาสตรไ์ มส่ ามารถทาได้ จะถกู ดแู ลโดยคลาส ArithmeticException 5. มกี ารผดิ พลาดท่ีเกิดจากอารเ์ รย์ เชน่ อาจอา้ งองิ Index ท่ไี มม่ ีตามการ ประกาศไวจ้ ะถกู ดแู ลโดยคลาส ArrayIndexOutOfBoundsException 6. การพกั การทางานของเทรดอาจถกู รบกวน จะถกู ดแู ลโดย คลาส InterruptedException 7. ระบบไมส่ ามารถแปลงขอ้ มลู ไปเป็นรูปแบบอ่ืนๆ ไดจ้ ะถกู ดแู ลโดย คลาส NumberFormatFxception คยี ค์ าส่ัง Throw ใน Exception ในการจดั การ Exception บางครงั้ ก็ไมส่ ามารถระบขุ อ้ ผดิ พลาดท่ีชดั เจนได้ จงึ ตอ้ งโยนไปยงั คลาสท่ีเหนือวา่ เพ่อื แจง้ กลบั ขอ้ ผดิ พลาดท่ีเกิดขนึ้ โดยลกั ษณะการ ทางานจะเป็นการแจง้ ขอ้ ผิดพลาดต่อ ๆ กนั ไป บทที่ 10 คลาสภายใน (Inner Class)

คลาสภายใน (Inner Class) ตงั้ แต่ JDK เวอรช์ นั 1.1 ไดน้ าคลาส Inner Classes มาใชโ้ ดยท่ผี า่ นมาเราสรา้ ง คลาสท่ีแยกออกมาอิสระเรยี กวา่ Top-lavel Class หรอื Outer Class แต่หากเขียน คลาสอกี คลาสท่ีบรรจอุ ยใู่ นอกี คลาสหน่งึ จะเรยี กวา่ Inner Class หรอื N ested Class สว่ นใหญ่แลว้ การสรา้ งคลาสนีจ้ ะตอ้ งมีความเก่ียวขอ้ งกนั มากซง่ึ เขียนได้ เป็น 4 แบบ คอื สมาชกิ คลาสแบบสกติ (Static Member Classes) Inner Class ท่ชี ่ือ InsideClass จะตอ้ งประกาศแบบ Static ของ คลาส OutsideClass รวมถึง Static เมธอดท่ีช่ือ insideClassMethod () เม่ือ คอมไพล์ OutsideClass.class และ OutsideClass สมาชกิ ของคลาส (Member Classes) 1. ตวั แปรหรอื สมาชกิ ของ OutsideClass สามารถเขา้ ถงึ ไดโ้ ดย Inner Class 2. สมาชิกหรอื ตวั แปรของ InsideClass ไมส่ ามารถเขา้ ถึงไดจ้ าก OutsideClass 3. สมาชิกหรอื ตวั แปรของ Inner Class สามารถเขา้ ถึงไดเ้ ฉพาะ Inside Class เท่านนั้ คลาสเฉพาะท่ี (Local Classes) คลาสเฉพาะท่ีเป็นแบบ Inner Class แตป่ ระกาศไวภ้ ายในเมธอดของคลาสหลกั ซง่ึ คลาสเฉพาะท่ีนนั้ สามารถเขา้ ถึงสมาชิกภายในตวั มนั และสมาชิกของคลาสหลกั ท่ี เป็นแบบ final เทา่ นนั้

มคี ลาส LocalClass ประกาศไวภ้ ายในเมธอดของคลาส MainClass จงึ สามารถเขา้ ถึงตวั แปรท่ีเป็น final ของเมธอด mainMethod ของ คลาส LocalClass ซง่ึ ตวั แปรแบบ Non-final จะถกู ประกาศในตวั เอง MainClass คลาสนิรนามภายใน (Anonymous Inner Classes) คลาสนิรนามนนั้ เป็นคลาสท่ไี มม่ ีการระบชุ ่ือโดยภาษาจาวาอนญุ าตใหส้ ามารถ สรา้ งคลาสแบบนีไ้ ดแ้ ต่จะตอ้ งทาการสรา้ งตวั แปรหรอื ตวั แทน (Instantiate) ทนั ทที ่ี ประกาศ ดงั เคยยกตวั อยา่ งมากอ่ นแลว้ จงึ ขอนาโคด้ บางสว่ นมาแสดงเพ่ืออธิบายให้ เขา้ ใจกลไก โดยท่คี ลาสแบบนีม้ กั ใชก้ บั การเฝา้ ฟังเหตกุ ารณ์ บทที่ 11 เทรด (Thread) เทรดคอื อะไร เทรด คอื สว่ นของกระบวนการ ถา้ ไมม่ ีกระบวนการก็ไมม่ ีเทรด เทรด คอื หน่วย ยอ่ ยท่ีสดุ ท่ีมีองคป์ ระกอบครบถว้ นพรอ้ มท่ีจะนาไปใหห้ น่วยประมวลผลได้ เรยี ก กระบวนการนีว้ า่ การเอก็ ซีคิวต์ เทรดนีม้ ีความเป็นอสิ ระโดยสามารถนาไปทาการเอ็ก ซีคิวตไ์ ดโ้ ดยไมข่ นึ้ กบั กระบวนการหรอื เทรดอ่ืน

ประเภทของเทรด เน่ืองจากเทรดนนั้ ประกอบไปดว้ ยสว่ นสาคญั ท่ีซีพียสู ามารถประมวลผลได้ คือ เทรดของผใู้ ชง้ าน ซง่ึ ถกู สรา้ งขนึ้ มา และสว่ นของเทรดในเคอรเ์ นล ท่พี รอ้ มจะเขา้ สกู่ าร ประมวลผลหรอื เอ็กซีควิ ต์ หากนามาเขียนภาพจาลองจะมีลกั ษณะดงั นี้ หน่อยยอ่ ยท่ปี ระกอบเป็นเทรด คอื 1. หมายเลขเทรด ระบคุ วามเป็นหน่งึ เดยี วของเทรด 2. เลขนบั คาส่งั โปรแกรม ใชเ้ พ่ือประมวลผลอยา่ งเป็นลาดบั 3. รจี ิสเตอรท์ ่เี กบ็ คา่ ระหวา่ งเอก็ ซีควิ ต์ 4. สแต็ก ใชเ้ ก็บประวตั ิการเอก็ ซคี ิวต์ ข้อดขี องเทรด ส่งิ ท่เี ห็นไดช้ ดั ถงึ ประโยชนข์ องเทรด คือ ชว่ ยลดสถานะซพี ยี วู า่ ง ของหน่วย ประมวลผลกลาง น่นั คอื จะทาใหก้ ารประมวลผลสามารถทางานไดเ้ รว็ ขนึ้ เม่ือ โปรแกรมถกู แบง่ เป็นจานวนย่อยเสมือนกบั การละลายเกลอื โดยท่ีเกลอื ไมว่ า่ จะเป็น เกลอื การท่ีเราพยายามละลายเกลอื ในจานวนท่เี ทา่ กนั ระหวา่ งเกลอื กอ้ นเดยี วกบั เกลือท่ีป่นแลว้ เราจะพบวา่ เราใชเ้ วลาละลายเกลอื ท่ีป่ นมาแลว้ ไดเ้ รว็ กวา่ เกลอื ท่เี ป็น กอ้ นใหญ่

วงจรชวี ติ ของเทรดในภาจาวา โดยท่วั ไปวงจรชีวติ ของภาษาจาวานนั้ จะหมายถึง Servlets, Applets และ Threads ในท่ีนีจ้ ะกลา่ วถึงสถานะของเทรดเทา่ นนั้ โดยจะแบง่ สถานะ ออกเป็น 4 สถานะ คือ 1. การสรา้ งเทรดขนึ้ มาใหม่ (New Thread State) 2. การรนั หรอื เอ็กซีคิวต์ (Runnadle State) 3. การบลอ็ ก (Blocked State) 4. การสนิ้ สดุ ของเทรด (Dead State) การใช้ Exception ในเทรด เน่ืองจากวา่ เทรดไดร้ บั การถ่ายทอดมาจากแพก็ เกจ ซง่ึ หลกั การทางานนนั้ มี ขนั้ ตอนหรอื สถานะหลากหลาย ดงั นนั้ จาวาไดส้ รา้ ง เพ่ือตรวจสอบขอ้ ผิดพลาดท่ีอาจ เกิดขนึ้ 2 คลาส คือ


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook