1 / 24

บทที่ 4 การเขียนคลาส

บทที่ 4 การเขียนคลาส. การประกาศคลาส , การประกาศเมธอด ตัวแปรอ้างอิง , การห่อหุ้ม การโอเวอร์โหลดเมธอด และอ๊อบเจ็คทางด้านกราฟฟิก. ออบเจ็ค. อ๊อบเจ็คหนึ่ง ประกอบด้วย สถานะ ใช้อธิบายคุณสมบัติของออบเจ็ค พฤติกรรม แสดงถึงสิ่งที่ออบเจ็คสามารถทำได้

chill
Download Presentation

บทที่ 4 การเขียนคลาส

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 4 การเขียนคลาส การประกาศคลาส, การประกาศเมธอด ตัวแปรอ้างอิง, การห่อหุ้ม การโอเวอร์โหลดเมธอด และอ๊อบเจ็คทางด้านกราฟฟิก

  2. ออบเจ็ค • อ๊อบเจ็คหนึ่ง ประกอบด้วย • สถานะ ใช้อธิบายคุณสมบัติของออบเจ็ค • พฤติกรรม แสดงถึงสิ่งที่ออบเจ็คสามารถทำได้ • ตัวอย่างเช่น เหรียญที่สามารถพลิกไปพลิกมาได้ โดยเหรียญสามารถแสดงหน้าหัว หรือหน้าก้อย • สถานะของเหรียญ คือ หน้าที่ออก • พฤติกรรมของเหรียญ คือ การพลิกไปมาได้ • ข้อสังเกตุ: พฤติกรรมของเหรียญอาจมีผลต่อสถานะของมันเอง การเขียนคลาส

  3. คลาส • คลาส คือแผ่นพิมพ์เขียวของออบเจ็ค • เช่น คลาส Stringใช้ในการกำหนดความเป็นออบเจ็ค String • Stringแต่ละอัน บรรจุตัวอักษรจำนวนหนึ่ง -> สถานะ • Stringแต่ละอัน สามารถจะให้บริการ หรือมีพฤติกรรม เช่น length() • คลาส Stringมีให้เรียกใช้จากไลบรารีมารตฐานของจาวา • เราสามารถเขียนคลาสขึ้นมาเองได้ • เช่น การเขียนคลาสเพื่อจำลองการพลิกไปมาของเหรียญ • เราจะให้ชื่อคลาสว่า Coin การเขียนคลาส

  4. int x, y; char ch; คลาส • คลาส ประกอบด้วย ส่วนการประกาศตัวแปรเก็บข้อมูล และการประกาศเมธอด การประกาศตัวแปรเก็บข้อมูล การประกาศเมธอด การเขียนคลาส

  5. ขอบเขตของตัวแปร • ขอบเขตของตัวแปร คือ พื้นที่ภายในโปรแกรมหนึ่งๆ ที่สามารถใช้งาน (อ้างอิง) ถึงตัวแปรได้ • ตัวแปรที่ถูกประกาศขึ้นภายในคลาส จะถูกใช้ได้ในทุกๆ เมธอดของคลาสนั้น • ตัวแปรที่ถูกประกาศขึ้นภายในเมธอด จะถูกใช้ได้ภายในเมธอดนั้นเท่านั้น โดยให้เรียกว่า ตัวแปรท้องถิ่น (Local Variables) การเขียนคลาส

  6. การเขียนเมธอด • การประกาศเมธอด เป็นการกำหนดโค้ดที่จะทำงานเมื่อเมธอดนั้นถูกเรียกใช้ • เมื่อเมธอดหนึ่งถูกเรียกใช้ การไหลของโปรแกรมจะกระโดดมาที่เมธอดและทำงานตามโค้ดที่ระบุในเมธอด • เมื่อการทำงานของเมธอดสมบูรณ์ การไหลของโปรแกรมจะกลับไปยังจุดเดิมก่อนการกระโดด และทำงานต่อไป • การเรียกใช้เมธอด อาจจะให้ผลลัพธ์หรือไม่ก็ได้ ขึ้นอยู่กับการนิยามเมธอดนั้นๆ การเขียนคลาส

  7. compute myMethod myMethod(); การไหลของเมธอด • การเรียกใช้เมธอดอาจจะเกิดขึ้นภายในคลาสเดียวกัน ซึ่งในกรณีนี้เราจะใช้ชื่ออย่างเดียวในการเรียกใช้ (ไม่ต้องมีการใช้ .) การเขียนคลาส

  8. main doIt helpMe obj.doIt(); helpMe(); การไหลของเมธอด • การเรียกใช้เมธอดที่อยู่ต่างคลาสจะต้องมีการเรียกใช้ผ่าน . โดยหน้าจุด • เป็นตัวแปรอ้างอิง เมื่อเมธอดนั้นเป็นเมธอดของออบเจ็ค • เป็นชื่อคลาส เมื่อเมธอดนั้นเป็นเมธอดของคลาส การเขียนคลาส

  9. คลาส Coin • ในคลาสCoinจะมีการใช้ตัวแปรข้อมูลดังต่อไปนี้ • faceเป็นตัวเลขจำนวนเต็มที่เก็บหน้าที่ออกของเหรียญในปัจจุบัน • HEADSและ TAILSเป็นค่าคงที่จำนวนเต็มที่เก็บความเป็นไปของสถานะเหรียญ • จะมีกำหนดเมธอดดังต่อไปนี้ • เมธอด Coin(คอนสตรัคเตอร์) ทำหน้าที่ในการกำหนดค่าเริ่มต้นให้กับออบเจ็ค • เมธอด flip จำลองการพลิกเหรียญ • เมธอด getFaceให้ผลลัพธ์เป็นหน้าปัจจุบันของเหรียญ • เมธอด toStringเพื่อให้ผลลัพธ์เป็นข้อความอธิบายเหรียญ การเขียนคลาส

  10. คลาส Coin • เมื่อคลาส Coinถูกนิยามขึ้นมาแล้ว เราสามารถใช้งานมันได้จากหลายๆ คลาส หรือหลายๆ โปรแกรม • โปรแกรมหนึ่งๆ ไม่จำเป็นต้องใช้บริการทั้งหมดของคลาส Coinเมื่อมีการสร้างออบเจ็คจากคลาส Coin • เมธอดทุกของเมธอดของคลาสCoinเป็นเมธอดของ Object ซึ่งต้องเรียกผ่าน ตัวแปรอ้างอิง CountFlips.java และ Coin.java การเขียนคลาส

  11. class Coin coin1 coin2 int face; face face 0 1 ตัวแปรของออบเจ็ค • ตัวแปร faceถือเป็นตัวแปรของออบเจ็ค ซึ่งแต่ละออบเจ็คที่สร้างจากคลาส Coinมีเป็นของตนเอง • การประกาศคลาส ไม่มีการสร้างออบเจ็ค ตัวแปรของออบเจ็คจะเกิดขึ้นจริง เมื่อออบเจ็คถูกสร้างขึ้นเท่านั้น • ทุกครั้งที่ออบเจ็คจากคลาส Coin ถูกสร้างขึ้น ตัวแปร faceตัวใหม่จะถูกสร้างขึ้นเช่นเดียวกัน • ออบเจ็คที่สร้างจากคลาสเดียวกัน มีการนิยามเมธอดร่วมกัน แต่มีเนื้อที่แยกกันสำหรับการเก็บข้อมูล FlipRace.java การเขียนคลาส

  12. การห่อหุ้ม (Encapsulation) • เราสามารถมองออบเจ็คได้จากสองมุมมอง • มองจากภายใน เราจะเห็นตัวแปร (ข้อมูล) และคำสั่งต่างๆ ภายในเมธอด • มองจากภายนอก เราจะเห็นการทำงานร่วมกันระห่างออบเจ็คที่เราสนใจกับออบเจ็คอื่นๆ ในโปรแกรม • เมื่อมองจากภายนอก ออบเจ็คจะต้องซ่อนรายละเอียด (กล่าวไว้ในบทที่ 2) • เราจะมองเห็นเพียงรูปแบบการติดต่อกับออบเจ็คเท่านั้น (interface) • ออบเจ็คจะต้องดูแลตนเอง • การเปลี่ยนสถานะของออบเจ็คควรทำโดยเมธอดของออบเจ็คเอง การเขียนคลาส

  13. การห่อหุ้ม (Encapsulation) • ออบเจ็คที่มีการห่อหุ้ม อาจถูกมอง เป็น กล่องดำ • การทำงานภายในจะถูกซ่อนจาก ผู้ขอใช้บริการ ซึ่งจะเรียกว่าเมธอดที่ออบเจ็คได้จัดเตรียมไว้ให้ (interface methods) เมธอด ผู้ขอใช้บริการ ข้อมูล การเขียนคลาส

  14. ตัวปรับปรุงการมองเห็นตัวปรับปรุงการมองเห็น • เพื่อให้การออกแบบออบเจ็คเป็นไปตามหลักของการห่อหุ้ม เราจำเป็นต้องใช้ ตัวปรับปรุงการมองเห็น อย่างเหมาะสม • ตัวปรับปรุง (modifier) ทุกตัวเป็นคำสงวน • finalเป็นตัวปรับปรุงที่ทำให้ตัวแปรเป็นค่าคงที่ • ตัวปรับปรุงการมองเห็น มี 3 ตัว คือ public, privateและ protected • protectedจะมีการพูดถึงในบทถัดไป • สมาชิกของคลาส (ตัวแปรและเมธอด) ที่ใช้ตัวปรับปรุงการมองเห็น • เป็น publicจะสามารถเข้าถึงได้จากทุกแห่ง • เป็น privateจะสามารถเข้าถึงได้จากภายในคลาสเท่านั้น • ไม่ระบุ จะสามารถเข้าถึงได้จากคลาสที่อยู่ในแพกเกจเดียวกันเท่านั้น การเขียนคลาส

  15. หลักการเลือกตัวปรับปรุงการมองเห็นหลักการเลือกตัวปรับปรุงการมองเห็น • เลือก publicสำหรับ • เมธอดที่ถูกเรียกใช้จากภายนอก • เลือก privateสำหรับ • ตัวแปรทุกตัวของออบเจ็ค • เมธอดที่สร้างขึ้นเพื่อช่วยในการทำงานของเมธอดที่ถูกเรียกใช้จากภายนอก แต่เมธอดนี้เองไม่ควรถูกเรียกจากภายนอก การเขียนคลาส

  16. การประกาศเมธอด • การประกาศเมธอดจะเริ่มต้นด้วยหัวของเมธอด char calc (int num1, int num2, String message) รายการของพารามิเตอร์ กำหนด ... ชนิดและชื่อของพารามิเตอร์แต่ละตัว ชื่อของเมธอด ชนิดของผลลัพธ์ เมื่อเรียกใช้เมธอด การเขียนคลาส

  17. การประกาศเมธอด • หัวของเมธอดจะตามด้วยตัวของเมธอด char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } sumและresult เป็นตัวแปรท้องถิ่นซึ่งจะถูกสร้างขึ้นทุกครั้ง เมื่อมีการเรียกใช้เมธอด และถูกทำลายทุกครั้ง เมื่อการทำงานของเมธอดเสร็จสิ้น (รวมไปถึงnum1, num2และ message) คำสั่ง returnจะต้องตามด้วยนิพจน์ ที่มีชนิดสอดคล้องกับที่ระบุไว้ในหัวของเมธอด การเขียนคลาส

  18. คำสั่ง return • ชนิดผลลัพธ์ของเมธอด จะถูกกำหนดไว้ในหัวของเมธอด • หากเมธอดใดไม่มีการคืนผลลัพธ์ ให้กำหนดชนิดเป็น void • การเรียกใช้เมธอดประเภทนี้จะไม่สามารถนำไปใช้ร่วมกับตัวดำเนินการใดๆ หรือเป็นพารามิเตอร์ของเมธอดอื่นได้ • คำสั่ง returnจะตามด้วยนิพจน์ที่มีชนิดตรงกันกับที่กำหนดไว้ในหัวของเมธอด • หากเมธอดไม่มีการคืนผลลัพธ์ คำสั่งreturnจะไม่มีนิพจน์ตามหลัง • เมื่อการไหลของโปรแกรมมาถึงคำสั่ง returnจะถือว่าเป็นการจบการทำงานของเมธอดทันที (แม้ว่าจะทำงานไปไม่ถึงบรรทัดสุดท้าย) การเขียนคลาส

  19. char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } พารามิเตอร์ • การเรียกใช้เมธอดที่ถูกประกาศขึ้น จะต้องมีการส่งผ่านพารามิเตอร์ซึ่งเป็นนิพจน์ชนิดเดียวกับที่กำหนดไว้ในหัวของเมธอด • ค่าของพารามิเตอร์จะถูกสำเนาไปยังตัวแปรท้องถิ่นที่กำหนดไว้ในหัวของเมธอด ch = obj.calc (25, count, "Hello"); การเขียนคลาส

  20. คอนสตรัคเตอร์ • คอนสตรัคเตอร์ เป็นเมธอดพิเศษที่ใช้ร่วมกับ newในการสร้างออบเจ็ค • เมื่อประกาศคอนสตรัคเตอร์ จะมีข้อกำหนดดังต่อไปนี้ • ชื่อจะต้องเหมือนกับชื่อของคลาส • จะไม่มีการคืนผลลัพธ์กลับ • ไม่ต้องระบุชนิดของการคืนผลลัพธ์ ไม่ต้องใส่แม้กระทั่ง void • บ่อยครั้ง คอนสตรัคเตอร์ จะทำหน้าที่เพียงกำหนดค่าให้กับตัวแปรของออบเจ็ค • โดยทั่วไป นักพัฒนา ไม่จำเป็นต้องประกาศคอนสตรัคเตอร์สำหรับคลาส การเขียนคลาส

  21. การเขียนคลาส • ออบเจ็คอาจจะมีตัวแปรอ้างอิงไปยังอีกออบเจ็คอื่น • เช่นออบเจ็คชนิด Accountมีตัวแปรอ้างอิงชนิด String • ออบเจ็คอาจจะสัมพันธ์กับอีกออบเจ็คหนึ่งซึ่งเป็นประเภทเดียกัน เช่น r3 = r1.add(r2); • เมธอด addของ r1ถูกเรียกใช้ โดยให้ r2เป็นพารามิเตอร์ และเก็บผลลัพธ์การทำงานไว้ใน r3 • เช่น การรวมกันของสอง Account (เรียกใช้เมธอด merge) Account.java และ Banking.java การเขียนคลาส

  22. การโอเวอร์โหลดเมธอด • คือการที่คลาสหนึ่งมีการประกาศเมธอดที่มีชื่อเหมือนกันหลายเมธอด แต่จะต้องมีลายเซ็นต์ที่แตกต่างกัน • ลายเซ็นต์ของเมธอดจะประกอบด้วย • ชื่อ • พารามิเตอร์ (จำนวน ชนิด และลำดับ) • ชนิดผลลัพธ์ของเมธอดไม่เป็นส่วนหนึ่งของลายเซ็นต์ • ต.ย. เมธอดที่ถูกโอเวอร์โหลด คือเมธอด System.out.println System.out.println ("The total is:"); System.out.println (total); การเขียนคลาส

  23. Version 1 Version 2 float tryMe (int x, float y) { return x*y; } float tryMe (int x) { return x + .375; } การเรียกใช้ result = tryMe (25, 4.32) การโอเวอร์โหลดเมธอด • เมื่อมีการเรียกใช้เมธอดของที่ถูกโอเวอร์โหลด เมธอดที่มีลายเซ็นต์ตรงกันกับการเรียกใช้จะถูกเลือกมาทำงาน การเขียนคลาส

  24. ออบเจ็คกราฟฟิก • เราสามารถประกาศเมธอดอื่นๆ ในแอพเพล็ตเพื่อช่วยในการทำงาน • ควรเลือกใช้ตัวปรับปรุงการมองเห็นแบบ private • ตัวแปรอ้างอิงชนิด Graphicsที่ส่งมากับเมธอด paintสามารถส่งผ่านไปยังเมธอดอื่น หรือคลาสอื่นเพื่อทำงานได้ Lineup.java และ StickFigure.java การเขียนคลาส

More Related