1 / 89

คลาสและออปเจค (Class and Object)

บทที่ 3. คลาสและออปเจค (Class and Object). 5. 2. 3. 4. 1. 6. โอเวอร์โหลดเมธอด (Overload method). ออปเจค (Object). เมธอด (Method). คอนสตรักเตอร์เมธอด (Constructor method). คลาส (Class). แพ็คเกจ (Package). คลาสและออปเจค (Class and Object). คลาส (Class).

Download Presentation

คลาสและออปเจค (Class and Object)

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. บทที่ 3 คลาสและออปเจค(Class and Object)

  2. 5 2 3 4 1 6 โอเวอร์โหลดเมธอด (Overload method) ออปเจค (Object) เมธอด (Method) คอนสตรักเตอร์เมธอด (Constructor method) คลาส (Class) แพ็คเกจ (Package) คลาสและออปเจค(Class and Object) ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  3. คลาส (Class) • ในการสร้างคลาสนั้นมีส่วนที่สำคัญ ดังนี้ • ฟิลด์ (Field) คือ ตัวแปรที่ใช้เก็บข้อมูลของออปเจค บางครั้งเรียกฟิลด์ว่า ดาต้าเมมเบอร์ (Data member) หรือ วาริเอเบอร์ (Variable) • เมธอด (Method) คือ การกระทำ (Operation) ที่เราต้องการให้ออปเจคสามารถทำได้ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  4. class name class Student { String stuId; String name; String surName; char grade; static int count = 0; Instance variable Data member Class variable Constructor Student(String id, String Name, … … } public int getCount() { return count; } //method ตัวอื่น ๆ ที่เหลืออยู่ … … } Method Parameter list คลาส (Class) ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  5. ออปเจค (Object) • ออปเจคที่เกิดมาจากคลาสเรียกว่า อินสแตนด์ (Instance) โดยมีส่วนประกอบที่สืบทอดมาจากคลาส คือ ตัวแปรต่าง ๆ ในคลาส ซึ่งตัวแปรยังแบ่งได้เป็น คลาสวาริเอเบอร์ (Class variable) กับ อินสแตนด์วาริเอเบอร์ (Instance variable) • เมื่อเราสร้างออปเจคขึ้นมาจากคลาส ออปเจคจะมีการคัดลอกตัวแปรไว้ในพื้นที่หน่วยความจำของมันเอง อย่างนี้เรียกว่า อินสแตนด์วาริเอเบอร์ ส่วนตัวแปรที่ออปเจคทุกตัวต้องใช้พื้นที่ในหน่วยความจำร่วมกันไม่มีการคัดลอกมาเก็บไว้ในพื้นที่ของตัวเองเรียกว่า คลาสวาริเอเบอร์ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  6. ออปเจค (Object) • ในส่วนของการเรียกใช้งานตัวแปรแบบคลาสวาริเอเบอร์ยังไม่จำเป็นต้องสร้างออปเจคใด ๆ ขึ้นมาก่อนเรียกใช้งาน เราสามารถเรียกใช้งานคลาสวาริเอเบอร์ผ่านคลาสได้เลย • การประกาศตัวแปรใด ๆ ให้เป็นคลาสวาริเอเบอร์ต้องใช้คำสั่ง static นำหน้าตัวแปรนั้น ๆ เสมอ แต่การใช้งานตัวแปรชนิดอินสแตนด์วาริเอเบอร์นั้นต้องสร้างออปเจคขึ้นมาก่อนแล้วเรียกใช้ตัวแปรอินสแตนด์วาริเอเบอร์ผ่านออปเจค ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  7. ออปเจคทุกตัวใช้ ตัวแปร count ร่วมกัน Somchai stuId name surName grade class Student { static int count = 0; String stuId; String name; String surName; char grade; 0 ทั้งสมชายและสมปองมีการคัดลอกตัวแปรเหล่านี้ไปไว้ในพื้นที่หน่วยความจำของตัวเอง Sompong stuId name surName grade ออปเจค (Object) ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  8. ความแตกต่างระหว่างคลาสกับออปเจคความแตกต่างระหว่างคลาสกับออปเจค ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  9. เมธอด (Method) • เมธอดก็ถูกแบ่งออกเป็นสองชนิดเช่นเดียวกับคลาส คือ คลาสเมธอด (Class method) และ อินสแตนด์เมธอด (Instance method) • คลาสเมธอด คือ เมธอดที่สามารถประมวลผลได้เอง โดยไม่จำเป็นต้องสร้างออปเจคใด ๆ ขึ้นมาเรียกใช้งานเลย (เหมือนเมธอด main() ไม่ต้องสร้างออปเจคใด ๆ มาเรียกใช้เลย) การประกาศคลาสเมธอดก็ทำได้เช่นเดียวกับคลาสวาริเอเบอร์ คือต้องใช้คำสั่ง static นำหน้าเสมอ • อินสแตนด์เมธอด คือ เมธอดที่ต้องสร้างออปเจคขึ้นมาก่อนถึงจะเรียกใช้เมธอดนี้ได้ การประกาศเมธอดก็ทำได้ปกติทั่วไปไม่ต้องใส่คำว่า static นำหน้า ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  10. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • class Student { • String stuId; • String name; • String surName; • char grade; • static int count=0; ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  11. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • Student(String id, String n, String sName, char g) { • stuId = id; • name = n; • surName = sName; • grade = g; • count++; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  12. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • public int getCount() { • return count; • } • public String getStuId() { • return stuId; • } • public String getName() { • return name; • } • public String getSurName() { • return surName; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  13. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • public char getGrade() { • return grade; • } • public void display() { • System.out.printf("%s %s %s", getStuId(), getName(), getSurName()); • System.out.printf(" [Grade: %s]%n", getGrade()); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  14. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • จากตัวอย่างได้มีการสร้างคลาส Student มีตัวแปร 5 ตัว คือ stuId, name, surname, grade เป็นตัวแปรชนิดอินสแตนด์วาริเอเบอร์ และ count เป็นตัวแปรชนิดคลาสวาริเอเบอร์ ต่อมาได้มีการสร้างเมธอดอีก 7 เมธอด ซึ่งมีหน้าที่ต่างกัน แต่มีเมธอดที่มีชื่อเดียวกันกับคลาสคือเมธอด Student() ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  15. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • Student(String id, String n, String sName, char g) { • stuId = id; • name = n; • surName = sName; • grade = g; • count++; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  16. การใช้งานตัวแปรและเมธอดการใช้งานตัวแปรและเมธอด • เมธอดนี้เป็นเมธอดพิเศษที่เรียกได้ว่าเป็นคอนสตรักเตอร์เมธอด (Constructor method) ซึ่งมีหน้าที่กำหนดค่าเริ่มต้นให้กับตัวแปรของออปเจคที่สืบทอดคุณสมบัติมาจากคลาส ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  17. วิธีการสร้างเมธอดและการเรียกใช้งานเมธอดวิธีการสร้างเมธอดและการเรียกใช้งานเมธอด • เมธอดสามารถแบ่งได้ 2 แบบ คือ เมธอดที่มีการคืนค่ากลับ และเมธอดที่ไม่มีการคืนค่ากลับ โครงสร้างของเมธอดมีดังนี้ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  18. ใช้คำสั่ง void ถ้าไม่มีการคืนค่า ชนิดของค่าที่คืนกลับ ชื่อของเมธอด พารามิเตอร์ (ถ้ามี) returnType methodName( par1, par2, …, pars ) { // body of method … … } คำสั่งต่าง ๆ ที่อยู่ในเมธอดนี้ วิธีการสร้างเมธอดและการเรียกใช้งานเมธอด ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  19. วิธีการสร้างเมธอดและการเรียกใช้งานเมธอดวิธีการสร้างเมธอดและการเรียกใช้งานเมธอด • ลองดูตัวอย่างเมธอด getStuId() จากคลาส Student มีดังนี้ • public String getStuId() { • return stuId; • } • จะเห็นได้ว่า ชนิดของค่าที่คืนกลับ คือ String • ชื่อของเมธอด คือ getStuId • พารามิเตอร์ คือ ไม่มี • คำสั่งที่อยู่ในเมธอด คือ return stuId; ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  20. วิธีการสร้างเมธอดและการเรียกใช้งานเมธอดวิธีการสร้างเมธอดและการเรียกใช้งานเมธอด • เมธอดอีกชนิดที่ไม่มีการคืนค่ากลับคือเมธอด display() ดังนี้ • public void display() { • System.out.printf("%s %s %s", getStuId(), getName(), getSurName()); • System.out.printf(" [Grade: %s]%n", getGrade()); • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  21. วิธีการสร้างเมธอดและการเรียกใช้งานเมธอดวิธีการสร้างเมธอดและการเรียกใช้งานเมธอด • จะเห็นได้ว่า ชนิดของค่าที่คืนกลับ คือ ไม่มี (ใช้คำสั่ง void) • ชื่อของเมธอด คือ display • พารามิเตอร์ คือ ไม่มี • คำสั่งที่อยู่ในเมธอด คือ System.out.printf("%s %s %s", getStuId(), • getName(), getSurName()); • System.out.printf(" [Grade: %s]%n", • getGrade()); ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  22. ความแตกต่างระหว่างเมธอดที่คืนค่ากลับและเมธอดที่ไม่คืนค่ากลับความแตกต่างระหว่างเมธอดที่คืนค่ากลับและเมธอดที่ไม่คืนค่ากลับ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  23. การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์ • class Class1 { • public static void main(String[] args) { • double a = 3.2; • double b = findDouble(a); • System.out.printf("Double of %.1f is %.1f%n ",a,b); • } • public static double findDouble(double a) { • return 2*a; • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  24. การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์ • ผลลัพธ์ที่ได้คือ • Double of 3.2 is 6.4 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  25. การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์การประมวลผลของเมธอดที่มีการใช้พารามิเตอร์ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  26. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • การคืนค่าผ่านตัวแปรในพารามิเตอร์สามารถทำได้ 2 แบบคือ • ส่งผ่านเฉพาะค่า (Pass by value) • ส่งผ่านโดยการอ้างอิง (Pass by reference) ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  27. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • class Class2 { • public static void main(String[] args) { • int num = 60; • int add = addValue(num); • System.out.printf("Before: number is %d%n",num); • System.out.printf("Now: number from addValue() is %d%n",add); • System.out.printf("After: number is %d%n",num); • } • public static int addValue(int number) { • number *=2; • return number; • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  28. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • ผลลัพธ์ที่ได้คือ • Before: number is 60 • Now: number from addValue() is 120 • After: number is 60 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  29. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  30. การส่งผ่านโดยการอ้างอิง (Pass by reference) • class Num { • int a=1; • public static void addValue(Num num) { • num.a++; • } • } • class Class3 { • public static void main (String[] args) { • Num obj = new Num(); • System.out.printf("Before: obj.a is %d%n",obj.a); • obj.addValue(obj); • System.out.printf("Now : obj.a from addValue() is %d%n",obj.a); • System.out.printf("After : obj.a is %d%n",obj.a); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  31. การส่งผ่านโดยการอ้างอิง (Pass by reference) • ผลลัพธ์ที่ได้คือ • Before: obj.a is 1 • Now : obj.a from addValue() is 2 • After : obj.a is 2 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  32. การส่งผ่านโดยการอ้างอิง (Pass by reference) ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

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

  34. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • class Student { • String stuId; • String name; • String surName; • char grade; • static int count=0; • Student(String id, String n, String sName, char g) { • stuId = id; • name = n; • surName = sName; • grade = g; • count++; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  35. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • public int getCount() { • return count; • } • public String getStuId() { • return stuId; • } • public String getName() { • return name; • } • public String getSurName() { • return surName; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  36. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • public char getGrade() { • return grade; • } • public void display() { • System.out.printf("%s %s %s", getStuId(), getName(), getSurName()); • System.out.printf(" [Grade: %s]%n", getGrade()); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  37. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • class mainStudent { • public static void main(String[] args) { • Student somchai = new Student("5201023001", "Somchai", "Jaa", 'A'); • Student sompong = new Student("5201023002", "Sompong", "Kab", 'B'); • somchai.display(); • sompong.display(); • System.out.printf("Amount of objects created: %d%n",somchai.getCount()); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  38. การคืนค่าผ่านตัวแปรในพารามิเตอร์การคืนค่าผ่านตัวแปรในพารามิเตอร์ • ผลลัพธ์ที่ได้คือ • 5201023001 Somchai Jaa [Grade: A] • 5201023002 Sompong Kab [Grade: B] • Amount of objects created: 2 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  39. การกำหนดคุณสมบัติการใช้งานตัวแปรและเมธอด (Accessibility) • ไม่ใส่คำใด ๆ เลย หมายถึง ถ้าอยู่ในแพ็คเกจ (package) เดียวกัน จะเป็นคลาสตัวเอง คลาสลูก หรือคลาสอื่น ๆ ก็สามารถใช้ตัวแปรหรือเมธอดนี้ได้ (คล้ายกับ public) แต่ถ้าอยู่คนละแพ็กเกจ ไม่ให้ใช้ • publicหมายถึง อนุญาตให้ใช้ตัวแปรหรือเมธอดนี้จากทั้งคลาสตัวเอง คลาสลูก (Subclass) หรือแม้กระทั่งคลาสอื่น ๆ ก็สามารถใช้งานตัวแปรหรือเมธอดนี้ได้ ถึงแม้จะอยู่คนละแพ็คเกจ • protectedหมายถึง อนุญาตให้ใช้ตัวแปรหรือเมธอดนี้เฉพาะคลาสตัวเอง และคลาสลูกและ คลาสอื่น ๆ ที่อยู่ในแพ็คเกจเดียวกัน ไม่อนุญาตให้ใช้สำหรับแพ็คเกจต่างกัน • privateหมายถึง อนุญาตให้ใช้ตัวแปรหรือเมธอดนี้เฉพาะคลาสตัวเองเท่านั้น คลาสอื่น ๆ ไม่ว่าจะเป็นคลาสลูก หรือคลาสอื่น ๆ ก็ไม่ให้ใช้ ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  40. กรณีอยู่ในแพ็คเกจเดียวกันกรณีอยู่ในแพ็คเกจเดียวกัน ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  41. กรณีอยู่ต่างแพ็คเกจกันกรณีอยู่ต่างแพ็คเกจกัน ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  42. ตัวอย่างประกอบการใช้งานเริ่มจาก ไม่ใส่คำใด ๆ เลย • class ClassA { • int one=1; • public int two=2; • protected int three=3; • private int four=4; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  43. ตัวอย่างประกอบการใช้งานเริ่มจาก ไม่ใส่คำใด ๆ เลย • class SubClassA extends ClassA { • ClassA a = new ClassA(); • public void display() { • System.out.printf("%d%n",a.one); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  44. ตัวอย่างประกอบการใช้งานเริ่มจาก ไม่ใส่คำใด ๆ เลย • class mainClassA { • public static void main (String[] args) { • ClassA obj = new ClassA(); • System.out.printf("%d%n",obj.one); • SubClassA obj2 = new SubClassA(); • obj2.display(); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  45. ตัวอย่างประกอบการใช้งานเริ่มจาก ไม่ใส่คำใด ๆ เลย • ผลลัพธ์คือ • 1 • 1 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  46. ตัวอย่างต่อไปใส่คำว่า public ดังนี้ • class ClassB { • int one=1; • public int two=2; • protected int three=3; • private int four=4; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  47. ตัวอย่างต่อไปใส่คำว่า public ดังนี้ • class SubClassB extends ClassB { • ClassB b = new ClassB(); • public void display() { • System.out.printf("%d%n",b.two); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  48. ตัวอย่างต่อไปใส่คำว่า public ดังนี้ • class mainClassB { • public static void main (String[] args) { • ClassB obj = new ClassB(); • System.out.printf("%d%n",obj.two); • SubClassB obj2 = new SubClassB(); • obj2.display(); • } • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  49. ตัวอย่างต่อไปใส่คำว่า public ดังนี้ • ผลลัพธ์คือ • 2 • 2 ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

  50. ตัวอย่างต่อไปใส่คำว่า protected ดังนี้ • class ClassC { • int one=1; • public int two=2; • protected int three=3; • private int four=4; • } ผศ. พิเชษฐ์ ศิริรัตนไพศาลกุล

More Related