1 / 62

บทที่ 7

บทที่ 7. การสร้างและการเรียกใช้คลาส. 7.1 คลาส. การนิยามคลาส คือการกำหนดโครงสร้างของอ็อบเจกต์และวิธีการจัดการกับอ็อบเจกต์ ทุกๆ อ็อบเจกต์จะต้องมีคลาส การสร้างคลาสใหม่ที่เร็วและง่าย โดยกำหนดให้คลาสใหม่เป็น คลาสลูก หรือ คลาสย่อย (subclass) ของคลาสที่มีอยู่แล้ว. 7.2 การสร้างคลาส.

gilda
Download Presentation

บทที่ 7

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. บทที่ 7 การสร้างและการเรียกใช้คลาส SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  2. 7.1คลาส • การนิยามคลาส คือการกำหนดโครงสร้างของอ็อบเจกต์และวิธีการจัดการกับอ็อบเจกต์ • ทุกๆ อ็อบเจกต์จะต้องมีคลาส • การสร้างคลาสใหม่ที่เร็วและง่าย โดยกำหนดให้คลาสใหม่เป็นคลาสลูกหรือคลาสย่อย(subclass) ของคลาสที่มีอยู่แล้ว SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  3. 7.2การสร้างคลาส class SimpleApp { public static void main (String[] args) { System.out.println(“Hello World”); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  4. option 7.2.1 การนิยามคลาส รูปแบบ class < ชื่อคลาส >{ [ กำหนดตัวแปร ] [ กำหนดเมท็อด ] } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  5. 7.2.1 การนิยามคลาส class Nothing { } หรือ class Nothing { } คลาสว่าง คลาสว่าง SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  6. 7.2.1 การนิยามคลาส class Lamp { boolean power_on; void SetState (boolean on_state) { power_on = on_state; } void PrintState ( ) { String state=“”; if(power_on) { state = “Lamp is on”; } else { state = “Lamp is off”; } JOptionPane.showMessageDialog(null, state); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  7. 7.2.2 สมาชิกของคลาส คลาสสามารถมีสมาชิกได้ 3 ชนิด ดังนี้ • ฟิลด์ (fields) หรือ ตัวแปร (variable) • เมท็อด (methods) • คลาสซ้อน (nested classes) และ nested interface SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  8. 7.2.3 คำขยายคลาส • public • abstract • final • ใน 1 ไฟล์ มีกี่คลาสก็ได้ แต่จะมีคลาส publicเพียง 1 คลาสเท่านั้น • และคลาส public นั้นต้องตั้งชื่อเหมือนกับชื่อไฟล์ด้วย SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  9. ตัวอย่างการนิยามคลาสและการตั้งชื่อไฟล์ตัวอย่างการนิยามคลาสและการตั้งชื่อไฟล์ Sample.java class Sample { …. } --------------------------------------------- class Exam { … } public class SuperExam { … } SuperExam.java SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  10. public class Aclass { … } class Bclass { … } class Cclass { … } Aclass.java SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  11. 7.2.4 ฟิลด์ • ตัวแปรของคลาสจะถูกเรียกว่าฟิลด์ • การประกาศฟิลด์ ประกอบด้วย ชนิดข้อมูลและตามด้วยชื่อฟิลด์ • อาจมีการกำหนดค่าเริ่มต้นให้ตัวแปรด้วย • การเปลี่ยนค่าฟิลด์ของอ็อบเจกต์ใดจะไม่มีผลต่อฟิลด์ของอ็อบเจกต์อื่นๆ ในคลาสนั้น • การนิยามฟิลด์อาจนำหน้าด้วยตัวขยาย SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  12. Account Jill’s Acct Jack’s Acct John’s Acct current balance current balance current balance 908.55 1304.98 354.00 Class Data value minimum balance 100 SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  13. 7.2.5 การกำหนดค่าเริ่มต้นให้ฟิลด์ double zero = 0.0 ;// constant double sum = 4.5 + 3.7 ;// constant expression double zeroCopy = zero ;// field double rootTwo = Math.sqrt(2) ; // method invocation double someVal = sum + 2 * Math.sqrt(rootTwo);// mixed SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  14. Body nextID 0 Class Data Value obj2Body Obj3Body obj1Body SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  15. SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  16. 7.2.6 ฟิลด์ static class Body { public long idNum ; public String name ; public Body orbits ; public static long nextID = 0 ; } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  17. 7.2.7 ฟิลด์ final • เป็นตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าหลังจากกำหนดค่าเริ่มต้น • จะใช้ final field กับตัวแปรที่เก็บค่าคงที่ • ใช้กำหนดคุณสมบัติที่ไม่ต้องการเปลี่ยนแปลงของคลาสหรือของอ็อบเจกต์ SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  18. 7.2.8 ควบคุมการเข้าถึงฟิลด์ • public • private • protected • package SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  19. 7.3 อ็อบเจกต์(objects) • เมท็อดหรือพฤติกรรม ของอ็อบเจกต์ • เป็นการบอกว่าสามารถทำอะไรกับอ็อบเจกต์นี้ได้บ้าง • หรือสามารถใช้เมท็อดอะไรบ้างกับอ็อบเจกต์นี้ • สถานะของอ็อบเจกต์ เป็นการบอกว่าอ็อบเจกต์จะมีปฏิกิริยาตอบสนองอย่างไรเมื่อใช้เมท็อดกับอ็อบเจกต์นั้น • เอกลักษณ์เฉพาะของอ็อบเจกต์ เป็นการบอกว่าอ็อบเจกต์นั้นแตกต่างจากอ็อบเจกต์อื่นอย่างไร แม้ว่าจะมีพฤติกรรมและสถานะเหมือนกัน SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  20. 7.4 การสร้างอ็อบเจกต์ • อ็อบเจกต์จะถูกสร้างโดยใช้ตัวดำเนินการ newหรือคำสั่ง new() • ตัวดำเนินการ new จะสร้างอ็อบเจกต์ที่มีชนิดตามระบุและ • เรียก คอนสตรัคเตอร์ (constructor) ที่เหมาะสมกับพารามิเตอร์ที่ถูกส่งไปพร้อมคำสั่ง new() • ระบบจะส่งตัวอ้างอิง (reference) อ็อบเจกต์ที่สร้างใหม่นั้นกลับมา SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  21. SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  22. 7.4.1 ตัวดำเนินการ new • จะสร้างอ็อบเจกต์ใหม่ของคลาสนั้นขึ้นมา • มีการจัดสรรเนื้อที่หน่วยความจำสำหรับอ็อบเจกต์ที่ถูกสร้าง • จะเรียก คอนสตรัคเตอร์ซึ่งเป็นเมท็อดเฉพาะให้ทำงาน • ในคลาสใดๆ อาจมีจำนวนคอนสตรัคเตอร์ได้ตามต้องการ • ซึ่งจะมีจำนวนและชนิดอาร์กิวเมนต์แตกต่างกันไป SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  23. DateObject ตัวอย่างการจองเนื้อที่สำหรับอ็อบเจกต์จากคลาสDateObject class DateObject { int Day = 1 ; int Month = 1 ; int Year = 2000 ; DateObject( ) { Year = 2007 ; } DateObject (int new_day, int new_month, int new_year ) { Day = new_day ; Month = new_month ; Year = new_year ; } } Day 1 Month 1 Year 2000 SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  24. Default constructor เขียนคำสั่งประกาศและจองเนื้อที่สำหรับอ็อบเจกต์ ชื่อ theDate DateObjecttheDate ; theDate = newDateObject() ; theDate Day 1 Month 1 Year 2007 SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  25. overloaded Method เขียนคำสั่งประกาศและจองเนื้อที่สำหรับอ็อบเจกต์theDate DateObjecttheDate ; theDate = newDateObject(14, 9, 2005) ; theDate Day 14 Month 9 Year 2005 SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  26. 7.5การอ้างถึงอ็อบเจกต์ DateObject theDate ; theDate = new DateObject (14, 9, 2005) ; theDate.Year = 2006 ; Lamp theLamp ; theLamp = new Lamp() ; theLamp.SetState(true) ; theLamp.PrintSate() ; SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  27. 7.5.1การใช้ null if (theDate != null) { System.out.println(“DateObject exists”) ; } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  28. 7.5.2ตัวดำเนินการและตัวอ้างอิง7.5.2ตัวดำเนินการและตัวอ้างอิง ตัวดำเนินการความหมาย ==เท่ากับ !=ไม่เท่ากับ instanceof เป็นสมาชิกของคลาส if (someObject instanceof Lamp) { ((Lamp)someObject).SetState(true) ; } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  29. 7.6การห่อหุ้ม(Encapsulation) กล่าวถึงตอนท้ายบท SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  30. 7.7 แพคเกจ(Packages) • แพคเกจคือกลุ่มของคลาสที่มีหน้าที่สัมพันธ์กัน • ทำให้สามารถนำแพคเกจนั้นไปใช้ในโปรแกรมอื่นๆ ได้ • แพคเกจใดๆ สามารถมีแพคเกจย่อยภายในได้อีก SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  31. 7.7.1การใช้แพคเกจ • ถ้าคลาสที่เราต้องการใช้อยู่ในแพคเกจมาตรฐาน java.lang เช่น System หรือ Date เราสามารถใช้ชื่อคลาสได้เลย • ถ้าเราต้องการใช้คลาสในแพคเกจอื่น เราต้องอ้างถึงคลาสนั้นโดยใช้ชื่อเต็มรวมทั้งชื่อแพคเกจด้วย เช่น java.awt.Font • ถ้าเป็นคลาสที่เราใช้บ่อยๆ จากแพคเกจอื่น เราสามารถ importแต่ละคลาสหรือ import แพคเกจที่มีคลาสนี้เข้ามาในโปรแกรมแล้วอ้างถึงคลาสโดยใช้ชื่อคลาสนั้น SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  32. 7.7.2การใช้ชื่อแพคเกจและชื่อคลาสเต็มรูปแบบ7.7.2การใช้ชื่อแพคเกจและชื่อคลาสเต็มรูปแบบ • การใช้คลาสนั้นเพียงครั้งเดียวหรือสองครั้งในโปรแกรม • ไม่ต้องใช้คำสั่ง import • เช่นต้องการใช้คลาส Date ในแพคเกจ java.util เพื่อสร้างอ็อบเจกต์ theDate เขียนดังนี้ Java.util.DatetheDate = new java.util.Date() ; System.out.println(theDate) ; SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  33. 7.7.3 คำสั่งimport Java.util.DatetheDate = new java.util.Date() ; System.out.println(theDate) ; เขียนใหม่โดยใช้คำสั่งimportได้ดังนี้ import java.util.Date ; Date theDate = new Date() ; System.out.println(theDate) ; SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  34. 7.7.4คลาสชื่อเหมือนกัน ในแพคเกจ java.util และ java.sql ต่างก็มีคลาส Date importjava.util.* ; import java.sql.* ; ถ้าใช้คลาส Date กำหนดตัวแปร today จะเห็นข้อผิดพลาดในช่วงคอมไพล์โปรแกรม ดังนี้ Date today ; // ERROR - - java.util.Date or java.sql.Date ? แก้ปัญหาโดยเพิ่มคำสั่ง import ที่ระบุเฉพาะ Date เข้าไปด้วยดังนี้ importjava.util.* ; import java.sql.* ; import java.util.Date ; SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  35. 7.7.5สร้างแพคเกจใช้เอง โดยมีหลักการพื้นฐาน 3 ขั้นตอน คือ • กำหนดชื่อแพคเกจ • สร้างโฟล์เดอร์ ให้มีชื่อเดียวกับแพคเกจ • เพิ่มคลาสเข้าไปในแพคเกจ SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  36. ตัวอย่าง การสร้างแพคเกจชื่อMyPackageเขียน คำสั่งจาวาได้ดังนี้ // MyClass.java packageMyPackage ; public class MyClass { public void test() { JOptionPane.showMessageDialog(null, “test”) ; } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  37. ไฟล์ .java และ .class โฟล์เดอร์ที่สร้างเตรียมไว้ก่อนชื่อเดียวกับแพคเกจ SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  38. โปรแกรมที่ importคลาส MyClass จากแพคเกจ MyPackageเขียนดังนี้ // PackageTestApp.java importMyPackage.MyClass; classPackageTestApp { public static void main( String args[] ) { MyClasstheClass = new MyClass() ; theClass.test(); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  39. โปรแกรมที่เรียกใช้คลาส ต้องอยู่ในโฟล์เดอร์เดียวกับแพคเกจ SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  40. โปรแกรมที่ importคลาส MyClass จากแพคเกจ MyPackageเขียนดังนี้ // PackageTestApp.java importMyPackage.MyClass; classPackageTestApp { public static void main( String args[] ) { MyClasstheClass = new MyClass() ; theClass.test(); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  41. // ClassA.java ไฟล์ ClassA.java package MyPackage ;// แพคเกจเก็บคลาส ClassA public class ClassA { public void printA(){ System.out.println("test print method ClassA "); } } // ClassB.java ไฟล์ ClassB.java package MyPackage ;// แพคเกจเก็บคลาส ClassB public class ClassB { public void printB(){ System.out.println("test print method ClassB"); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  42. จำนวนคลาสทั้งหมดในแพคเกจ MyPackage SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  43. // PackageTestApp.java import MyPackage.* ; class PackageTestApp { public static void main( String args [] ) { MyClass theClass = new MyClass(); theClass.test(); ClassA theA = new ClassA(); theA.printA(); ClassB theB = new ClassB(); theB.printB(); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  44. SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  45. // PackageTestApp.java import MyPackage.* ; class PackageTestApp { public static void main( String args [] ) { MyClass theClass = new MyClass(); theClass.test(); ClassA theA = new ClassA(); theA.printA(); ClassB theB = new ClassB(); theB.printB(); } } SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  46. SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  47. ข้อผิดพลาดที่คอมไพล์เลอร์แจ้งให้ทราบข้อผิดพลาดที่คอมไพล์เลอร์แจ้งให้ทราบ SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  48. 7.8 แพคเกจจาวา • คลาสส่วนมากที่ใช้กันทั่วไป เช่น String class และ Math class • จะอยู่ในแพคเกจชื่อ java.lang • จาวาจะจัดเตรียมให้ใช้ได้อัตโนมัติไม่ต้องใช้คำสั่ง import • ถ้าต้องการใช้คลาสที่ไม่อยู่ใน java.lang.package • ต้องใช้คำสั่ง importตอนต้นโปรแกรม SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  49. 7.9 String Class • String( String str ) • String( ) • length( ) • toUpperCase( ) • toLowerCase( ) • charAt( int index ) • indexOf( String searchString ) • indexOf( char searchChar ) • Substring( int startIndex, int endIndex ) SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

  50. SC134 การโปรแกรมเชิงอ็อบเจ็กต์เบื้องต้น

More Related