java - mahidol universitymucc.mahidol.ac.th/~scphc/classes/java/wk8_class.pdf · 2009-12-26 ·...

69
1 JAVA Programming Week 8 คลาส (class)* อาจารยพัลลภ ฮวบสมบูรณ ภาควิชาคณิตศาสตรและสถิติ คณะวิทยาศาสตร มหาวิทยาลัยมหิดล (*ดัดแปลงจาก slide ของผูแตงหนังสือ เขียนโปรแกรม Java เบื้องตน)

Upload: others

Post on 26-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

1

JAVA ProgrammingWeek 8

คลาส (class)*

อาจารยพลัลภ ฮวบสมบรูณภาควชิาคณติศาสตรและสถิติ

คณะวทิยาศาสตร มหาวทิยาลยัมหิดล(*ดัดแปลงจาก slide ของผูแตงหนังสือ “เขียนโปรแกรม Java เบื้องตน”)

Page 2: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

2

หัวขอ

ประวตัิศาสตรโดยยอของการเขียนโปรแกรม

คลาสและวัตถุ

ขอความและเมธอด

คําประกอบ

Page 3: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

3

ประวตัิศาสตรโดยยอของการเขียนโปรแกรม

Page 4: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

4

ภาษาแอสเซมบลี

ภาษาเครื่อง เลขฐานสอง เชน 0101ซีพียูรูจัก

ภาษาแอสเซมบลี แอสเซมเบลอร (assembler)

Page 5: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

5

โฟลวชารต

Page 6: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

6

การโปรแกรมเชิงโครงสราง โครงสรางการทาํงานของโปรแกรมควรมอียางจํากัด

แตในขณะเดียวกันก็ตองเพียงพอที่จะใชแกปญหาตางๆได โครงสรางที่จําเปนตอการเขียนโปรแกรมมีอยู 3 แบบ

การทาํงานเรียงลาํดับ การทาํงานตามเงื่อนไข การทาํซ้ํา

Page 7: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

7

การทํางานเรียงลําดับ

Page 8: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

8

การทํางานตามเงื่อนไข

Page 9: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

9

การทําซ้าํ

Page 10: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

10

ซับรูทีนและฟงกชัน

จัดระเบียบคําสั่งในโปรแกรม

แบงโปรแกรมออกเปนสวนยอยๆ

ทําความเขาใจไดงาย

Page 11: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

11

จุดออนของภาษาโปรแกรมเชิงโครงสราง

โปรแกรมประกอบดวยคาํสั่งและขอมูลการจัดระเบียบคําสั่ง

เพียงอยางเดียวนั้นจงึไมสมบรูณ แยกสวนที่เปนขอมลูออกจากคําสั่ง ดวยเหตนุีฟ้งกชันที่จัดการกับขอมลูจึงอาจจะถูกวางไวอยางกระจัดกระจาย สรางความลําบากในการตดิตามสืบหาวาขอมลูนี้ถูก

เปลี่ยนแปลงโดยฟงกชันใด

Page 12: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

12

คลาสและวัตถุ

Page 13: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

13

การโปรแกรมเชิงวัตถ ุการหอหุม (encapsulation)

รวมขอมูลกับคําสั่งที่เกี่ยวของกับขอมูลนั้นเขาดวยกัน ซอนวิธีการทํางาน (information hiding)

ซอนวิธีการทํางานของวัตถุ ทําใหเกิดความยืดหยุน ผูสรางวัตถุสามารถเปลีย่นแปลงวิธีการทํางานของวัตถุไดโดยไมกระทบตอผูใชวัตถุ

การมองที่เปนธรรมชาติ เห็นภาพแลวแยกเปนวัตถุโดยอัตโนมัติ

ในขณะเดียวกันก็นึกถึงประโยชนของวัตถุไดทนัที

Page 14: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

14

วัตถุ (object)

โปรแกรมพจนานุกรมฉบับราชบัณฑิตยสถาน พ.ศ. ๒๕๒๕ นิยามคําวา “วัตถุ” วาหมายถึงสิ่งของ และนิยามคําวา “สิ่งของ” วาหมายถึงวัตถุตางๆ

ในโปรแกรมจะจําลองลักษณะและความสามารถของวัตถุตางๆ ที่อยูในโลกจริง

สิ่งไมมีชีวิต เชน รูปสี่เหลี่ยม โทรทัศน หรือบานสิ่งมีชีวิต เชน พนักงาน นก หรือตนไมสิ่งที่เปนนามธรรม เชน แนวความคิด หลักการ หรือวิธีการ

Page 15: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

15

คลาส (class)สิ่งที่เราใชอธิบายลักษณะและความสามารถของวัตถุ คลาสอาจจะเปรียบไดกับพิมพเขียวหรือแบบแปลนของวัตถุ วัตถุก็เปนที่สรางขึ้นมาจากแบบแปลนนั้น

Page 16: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

16

แบบแปลนและวัตถทุี่สรางจากแบบ

Page 17: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

17

การกําหนดสาระสําคัญ (abstraction)เลือกจาํลองลักษณะที่สําคัญ

จําลองเฉพาะความสามารถของวัตถุที่เราสนใจหรือเกี่ยวของกับ

ปญหาที่เราตองการจะแกไข

เชน ถาเราตองการคํานวณหาน้ําหนักเฉลี่ยของแมว เราก็อาจจะใหแมวจําลองมี "น้ําหนัก" เปนลักษณะที่สําคัญ

ไมจําลองลักษณะทั้งหมดของวัตถุ การจําลองแมวจะไมจําลองหนวดทุกเสนของแมว

Page 18: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

18

คลาสในภาษาจาวา

คลาสหรือแบบแปลนของวัตถุ จะถูกเขียนอยูในไฟลที่มีนามสกุล java

เชน คลาสสี่เหลี่ยมอาจจะถูกเขียนอยูในไฟลชื่อ Rectangle.java

Page 19: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

19

สวนประกอบของคลาส

Page 20: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

20

การสรางวัตถุ รูปแบบ

คลาส เรฟเฟอรเรนซ = new คลาส();ตัวอยาง

สี่เหลี่ยม ก = new สี่เหลี่ยม();สี่เหลี่ยม ข = new สี่เหลี่ยม();

Page 21: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

21

ขอความและเมธอด

Page 22: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

22

ขอความและเมธอด สั่งใหวัตถุทํางานโดยการสงขอความ (message) หรือคําสั่งไปหาวัตถุ เมื่อวัตถุไดรับขอความแลว วัตถุนั้นก็จะทํางานตามวิธีการหรือคําสั่งตางๆที่เขียนไวใน

เมธอด (method)

Page 23: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

23

สวนประกอบของคลาส เมธอด เปนสิ่งที่ใชอธิบายการทํางานของวัตถุในคลาส แอททริบิวท เปนสิ่งที่ใชบอกถึงลกัษณะตางๆของวัตถุในคลาส

Page 24: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

24

ตัวอยางเมธอด

คลาส เมธอด

นก กิน(), บิน(), รองเพลง()

โทรทัศน เปด(), ปด(), เปลี่ยนชอง(), ปรับเสียง()

สี่เหลี่ยม คํานวณพื้นที่()

Page 25: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

25

ตัวอยางแอททริบิวท

คลาส แอททริบิวท

นก สี, เพศ, น้ําหนัก

โทรทัศน ยี่หอ, รุน, หมายเลข, ขนาดจอภาพ

สี่เหลี่ยม ความกวาง, ความสูง

Page 26: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

26

เมธอด

วิธีการทํางานเมื่อไดรับขอความ

ชื่อของเมธอดควรเปนคํากริยา

Page 27: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

27

การเรียกเมธอด (การสงขอความ)

รูปแบบ

เรฟเฟอรเรนซ.เมธอด();ตัวอยาง

สี่เหลี่ยม ส = new สี่เหลี่ยม();System.out.println( ส.คํานวณพื้นที่() );

Page 28: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

28

การประกาศเมธอด

class สี่เหลี่ยม {double คํานวณพื้นที่() {

// คํานวณหาพื้นที่ของสี่เหลี่ยม …

}}

Page 29: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

29

เมธอดที่คืนคาเปนชนิดขอมูลพื้นฐาน

class สี่เหลี่ยม {double คํานวณพื้นที่() {

// คํานวณหาพื้นที่ของสี่เหลี่ยม …// สงคืนคาพื้นที่ใหกับผูเรียกreturn พื้นที่ของสี่เหลี่ยม;

}}

Page 30: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

30

เมธอดที่คืนคาเปนเรฟเฟอรเรนซ

class สี่เหลี่ยม {String ขอขอมูล() {

…return สตริงที่แสดงขอมูลสี่เหลี่ยม;

}}

Page 31: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

31

เมธอดที่ไมคืนคา

class สี่เหลี่ยม {void เพิ่มขนาดสองเทา() {

…return;

}}

Page 32: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

32

แอททริบิวท

ขอมูลที่ใชอธิบายความแตกตางของวัตถุ เชน วัตถุแมว มีชื่อ สี พนัธุ น้ําหนัก แตกตางกัน

ตัวแปรวัตถุ (instance variable)

class สี่เหลี่ยม {double ความกวาง;double ความสูง;

}

Page 33: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

33

การใชงานแอททรบิิวท รูปแบบ

เรฟเฟอรเรนซ.แอททริบิวท

ตัวอยาง

สี่เหลี่ยม ส = new สี่เหลี่ยม();ส.ความกวาง = 10;ส.ความสูง = 5;

Page 34: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

34

คอนสตรัคเตอร (constructor)

เมธอดที่มีชื่อเหมือนกับคลาส ใชกําหนดคาเริ่มตนใหกับแอททริบิวต ถูกเรียกใชเมือ่เราสรางวัตถุดวยคําสั่ง new

Page 35: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

35

การประกาศคอนสตรัคเตอร class สี่เหลี่ยม {

สี่เหลี่ยม(double ก, double ส) {

ความกวาง = ก;ความสูง = ส;

}

double ความกวาง;double ความสูง;

}

Page 36: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

36

การเรียกคอนสตรัคเตอร

สี่เหลี่ยม ก = new สี่เหลี่ยม(10, 5);

สี่เหลี่ยม ข = new สี่เหลี่ยม(20, 4);

System.out.println(ก.กวาง);

System.out.println(ข.กวาง);

Page 37: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

37

การโอเวอรโหลดเมธอด class สี่เหลี่ยม {{

สี่เหลี่ยม() { ... }

สี่เหลี่ยม(double ก, double ส) { ... }}

Page 38: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

38

การโอเวอรโหลดเมธอด

class สี่เหลี่ยม {{

double getArea() { ... }

int getArea(int n) { ... }

}

Page 39: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

39

แปลงไทยจาวาเปนจาวา

Page 40: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

40

ประกาศคลาส

class สี่เหลี่ยม {

}

class Rectangle {

}

Page 41: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

41

เพิ่มเมธอด

class สี่เหลี่ยม {double คํานวณพื้นที่() {

.... }

}

class Rectangle {double getArea() {

.... }

}

Page 42: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

42

เพิ่มแอททริบิวท

class สี่เหลี่ยม {double คํานวณพื้นที่() {

.... }double ความกวาง;double ความสูง;

}

class Rectangle {

double getArea() {

.... }double width;double height;

}

Page 43: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

43

เขียนวิธีการทํางานของเมธอด คํานวณพื้นที(่)

class สี่เหลี่ยม {double คํานวณพื้นที่() {

return ความกวาง * ความสูง;}double ความกวาง;double ความสูง;

}

class Rectangle {double getArea() {

return width * height;}double width;double height;

}

Page 44: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

44

เขียนคอนสตรัคเตอร

class สี่เหลี่ยม {สี่เหลี่ยม(double ก, double ส){

ความกวาง = ก;ความสูง = ส;

}...

}

class Rectangle {

Rectangle(double w,double h) {width = w;height = h;

}

...}

Page 45: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

45

ทดสอบคลาส Rectangle

class TestRectangle {public static void main(String[] args) {

Rectangle r = new Rectangle(2, 3);

System.out.println(r.getArea());

Rectangle p = new Rectangle(5, 7);System.out.println(p.getArea());

}}

Page 46: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

46

คอมไพลและรัน

Page 47: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

47

เมธอด toString()พิมพขอมูลเกี่ยวกับวัตถุ

class Rectangle {public String toString() {

String result = "Width = " + width;

result += " Height = " + height;return result;

}...

}

Page 48: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

48

การเรียกเมธอด toString()

System.out.println( rect.toString() );

System.out.println( rect );

Page 49: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

49

เมธอด equals()

เปรียบเทียบแอททริบิวท

ไมใชเครื่องหมาย == เพื่อเปรียบเทียบวัตถุ

class Rectangle {public boolean equals(Rectangle other) {

return (width == other.width) && (height == other.height);}...

}

Page 50: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

50

คําประกอบ (modifiers)

Page 51: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

51

คําประกอบการเขาใช ประกอบกับการประกาศแอททริบิวตหรือเมธอด private

วัตถุตางคลาสไมสามารถเขาใชได

การปกปองขอมูลทําได

มักจะใหแอททริบิวทมีการเขาใชแบบ private

publicอนุญาตใหคลาสอื่นใชได

มักจะใหเมธอดมีการเขาใชแบบ public

Page 52: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

52

คําประกอบการเขาใช

class Rectangle {public double getArea() {

return width * height;}private double width;private double height;

}

Page 53: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

53

ทดลองเขาใชแอททริบิวทที่ถกูปกปอง

public class TestPrivate { public static void main( String[] args) {

Rectangle rect = new Rectangle();rect.width = 10;

}}

Page 54: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

54

ทดลองเขาใชแอททริบิวทที่ถกูปกปอง

Page 55: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

55

ทําไมเราควรกําหนดการปกปองแอททรบิิวท

ความเปนสวนตัวสามารถปองกันวัตถุอื่นๆเขามาทําลายคุณสมบัติ

บางอยาง เชนเลขบัญชีธนาคารติดลบแทนที่จะเปนเลขศูนยหรือเลขบวก ความกวางและความสูงของสี่เหลี่ยมนอยกวาหรือเทากับศนูย

ทําใหเราสามารถเปลี่ยนแปลงชนิดของตัวแปรเหลานั้นได โดยไมกระทบกระเทือนคลาสอื่นที่ใชคลาสของเรา

Page 56: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

56

การซอนวิธีการทํางาน สามารถเปลี่ยนแปลงวิธีการทํางานของวัตถุไดโดยไมกระทบตอผูใช

วัตถุ เกิดความยืดหยุน เชน ถาเปรียบวัตถุเหมือนกับรถ และผูใชวัตถุคือคนขับรถ บริษัทผูผลิตรถสามารถเปลี่ยนเครื่องยนตรุนใหม เปลี่ยนระบบเบรค ฯลฯ โดยที่คนขับยังสามารถขับรถไดเหมือนเดิม

Page 57: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

57

สี่เหลี่ยมที่ผิดปรกติ

Rectangle rect = new Rectangle(-10, 10);

IllegalArgumentException

Page 58: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

58

การแจงวามีความผิดปกติ

class Rectangle {

public Rectangle(double w, double h) {

if (w <= 0 || h <= 0)

throw new IllegalArgumentException();

width = w;

height = h;

}...

}

Page 59: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

59

การแจงวามีความผิดปกติ

Page 60: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

60

การเขาใชแบบอื่นๆ protected

เกี่ยวของกับการสืบทอด

กลาวถงึในบทที่ 11การเขาใชแบบแพ็คเกจ (package)

แพ็คเกจเปนที่เก็บรวมรวมคลาสที่เกี่ยวของกัน แพ็คเกจเปรียบไดกบัโฟลเดอร

การเขาใชแบบแพ็คเกจไมตองใชคําประกอบใดๆ

Page 61: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

61

สแตติกเมธอด (static method)

เมธอดของคลาส

รูปแบบการประกาศ

public static ชนิดขอมลูทีส่งกลับ เมธอด(พารามิเตอร) { … }

รูปแบบการเรียกใช คลาส.สแตติกเมธอด(พารามิเตอร)

ตัวอยางการเรียกใช

int m = Math.round(12.5);

int n = String.valueOf(1234);

Page 62: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

62

ตัวแปรของคลาส รูปแบบ

private static ชนิดขอมูล ตัวแปร;ตัวอยาง

private static int count;

Page 63: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

63

คาคงที่ของคลาส รูปแบบ

public static final ชนิดขอมูล ตัวแปร=คา;ตัวอยาง

public static final int TOTAL_SIDES = 4;

Page 64: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

64

สรปุ

Page 65: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

65

สรุป

การโปรแกรมเชิงโครงสรางทําใหคําสั่งในโปรแกรมเปนระเบียบ ตรวจสอบลําดับการทํางานไดงาย

การโปรแกรมเชิงวัตถุรวมขอมูลกับคําสั่งใหอยูในที่เดียวกัน เรียกวา encapsulation

การโปรแกรมเชิงวัตถุเปนธรรมชาติสําหรับมนุษย เพราะเรามองสิ่งตางๆเปนวัตถุ และทราบวาวัตถุตางๆสามารถใชทําอะไรได

Page 66: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

66

สรุป

ชนิดของวัตถุเรียกวา คลาสวัตถุในโปรแกรมคือสิ่งที่จําลองการทํางานของวัตถุในโลกจริง

การเลือกจําลองเฉพาะความสามารถและลักษณะที่สําคัญ เรียกวา abstractionเรฟเฟอรเรนซ คือตัวแปรที่ใชสําหรับอางถึงวัตถุการประกาศเรฟเฟอรเรนซไมไดสรางวัตถุ การสรางวัตถุทําโดยการใชคําสั่ง new

วัตถุถูกเรียกใชงานผานทางเรฟเฟอรเรนซ

Page 67: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

67

สรุป

ความสามารถของวัตถุถกูเขยีนไวใน เมธอด แบบ public

ผูใชสามารถใชงานวัตถุโดยไมทราบวาวัตถุนั้นมีการทํางานอยางไร ถาโปรแกรมถูกเขียนโดยใชหลักการ information hiding

ลักษณะของวัตถุจะเก็บไวใน แอททริบวิทหรือตัวแปรวัตถุแอททริบิวทมักจะมีการเขาใชแบบ private เพื่อปองกันไมใหคลาสอื่นเขามาแกไขเปลี่ยนแปลง

Page 68: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

68

สรุป

คลาสอื่นไมสามารถการเขาใชเมธอดหรือแอททริบิวตที่เปน private

เมธอดในคลาสนั้นสามารถเปลี่ยนแปลงแอททริบิวตที่เปน private ไดทุกคลาสสามารถเขาใชเมธอดหรือแอททริบิวทที่เปน public

สแตติกเมธอด คือเมธอดของคลาสตัวแปรของคลาสกําหนดไดโดยใชคําประกอบ static

คาคงที่ของคลาสกําหนดไดโดยใชคําประกอบ static final

Page 69: Java - Mahidol Universitymucc.mahidol.ac.th/~scphc/Classes/Java/wk8_Class.pdf · 2009-12-26 · คลาสและวัตถุ ข อความและเมธอด คําประกอบ

69

ใหนักศึกษาเขียนโปรแกรมโดยใชภาษาจาวา สรางคลาส BankAccount ซึ่งมีเมธอดดังตอไปนี้

เมธอดสําหรับสรางAccount ใหมทีม่ยีอดเงนิเปนศูนย

เมธอดสําหรับสรางAccount ใหมทีม่ยีอดเงนิตามที่ผูใชโปรแกรมกําหนด

เมธอดสําหรับการฝากเงิน

เมธอดสําหรับการถอนเงิน

เมธอดสําหรับการแสดงยอดเงนิ

จากนั้นเขียนโปรแกรมชื่อ MyAccount.java เรียกใชคลาสขางตน โดยกําหนดเงินฝากเริ่มตน 1000 บาท จากนั้นถอนเงิน 150 บาท และแสดงยอดเงนิที่เหลอื

สงโปรแกรม (source code) มาที่ [email protected]

Exercise