งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Object-Oriented Programming

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Object-Oriented Programming"— ใบสำเนางานนำเสนอ:

1 Object-Oriented Programming
การเขียนโปรแกรมเชิงวัตถุ ผู้สอน อ.วาทินี ดวงอ่อนนาม

2 บทที่ 8 การสืบทอด (Inheritance) ตอนที่ 2 การพ้องรูป Polymorphism และ Constructor

3 เนื้อหา Reference ของ class แม่สามารถอ้างถึง class ลูกได้
การพ้องรูป Polymorphism รู้จักคำว่า Overloading การ Overload Constructor และการใช้ this เรียกใช้ constructor ของ classแม่ ด้วย super() เรียกใช้ constructor ของ class ลูก(ตัวเอง ) ด้วย this()

4 note :argument และ parameter

5 การสืบทอด (Inheritance) (ต่อจากบทก่อนหน้า)

6 คลาสที่ใช้ศึกษา Animal + age : int + eat() + sleep() Dog
+ name: String + eat() Fish + sleep() + swim() extends extends

7 สร้าง class ต่าง ๆ

8 Reference ของ class แม่สามารถอ้างถึง class ลูกได้
ปกติเราจะสร้าง วัตถุโดย หมายเหตุ ตัวแปรinstance, reference,ตัวแปรObject ชื่อคลาส reference=new ชื่อคลาส(); เช่น Dog d=new Dog();

9 Reference ของ class แม่สามารถอ้างถึง class ลูกได้
แต่ในกรณีที่วัตถุอยู่ใน class ที่สืบทอด มาจาก class อื่นเราสามารถให้ reference ของclass แม่ อ้างถึงวัตถุใน class ลูกได้ ชื่อคลาสแม่ reference=new ชื่อคลาสลูก(); เช่น Animal a=new Dog(); Animal + age : int + eat() + sleep() Dog + name: String + eat()

10 Reference ของ class แม่สามารถอ้างถึง class ลูกได้
เราสามารถสั่งให้วัตถุใน class ลูกทำงานได้โดยผ่านทาง reference ของclass แม่ได้ Animal a=new Dog(); a.eat(); Animal + age : int + eat() + sleep() Dog + name: String + eat()

11 กรณี class ลูก override method

12 กรณี class ลูก override method
Animal + age : int + eat() + sleep() Dog + name: String + eat()

13 กรณี class ลูก ไม่ได้ override method
Animal + age : int + eat() + sleep() Fish +sleep() +swim()

14 กรณี class ลูก ไม่ได้ override method

15 กรณี class ลูก ไม่ได้ override method
Animal + age : int + eat() + sleep() Fish +sleep() +swim()

16 หมายเหตุ เราสามารถใช้ reference คลาสแม่อ้างถึงวัตถุคลาสลูก ซึ่งจะเรียกได้เฉพาะเมธอดที่มีใน class แม่เท่านั้น เราเรียกเมธอด อื่นๆ จะทำให้ คอมไพล์ไม่ผ่าน

17 กรณี class แม่เรียกสิ่งที่ไม่มีใน class แม่
Animal + age : int + eat() + sleep() Fish +sleep() +swim()

18 กรณี class แม่เรียกสิ่งที่ไม่มีใน class แม่
Animal + age : int + eat() + sleep() Fish +sleep() +swim()

19 การพ้องรูป Polymorphism

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

21 Polymorphism การพ้องรูป
ยกตัวอย่าง Method void calculate(int x) { } void calculate(double y) { } หากมีผู้ใช้โปรแกรมส่งข้อมูลเข้ามาเป็นตัวเลขจำนวนเต็ม เราก็สามารถเรียกเมธอด calculate(int x) ให้ทำงาน หากผู้ใช้โปรแกรมส่งข้อมูลเลขทศนิยมเข้ามาเราก็สามารถเรียกคำนวณให้ละเอียดมากขึ้นโดยเรียกเมธอด calculate(double y) โดยไม่ต้องไปตั้งชื่อเมธอดใหม่ เพียงแค่ตั้งค่า อาร์กิวเมนต์ที่แตกต่างกัน มีศัพท์เรียกเฉพาะว่า เมธอดชื่อนั้นถูก “Overload”

22 Overloading & Polymorphism
2 คำนี้เกี่ยวข้องกันอย่างไร ? Overloading คือ การกำหนดให้ method หรือ constructor ที่มีชื่อเดียวกัน มี argument ที่แตกต่างกัน ทำให้ method หรือ constructor ดังกล่าวมีคุณสมบัติการพ้องรูป

23 กฎในการ Overload เมธอด
ชื่อ method เหมือนกัน argument ของแต่ละ method ต้องแตกต่างกัน เพื่อจะได้สามารถแยกความแตกต่างระหว่างเมธอดเหล่านั้นได้ ค่าที่ส่งคืนกลับออกไปจาก method (return type) จะเหมือนหรือแตกต่างกันก็ได้

24 อย่าจำสับสันนะคะ กับคำว่า Override และ Overload
คำเตือน อย่าจำสับสันนะคะ กับคำว่า Override และ Overload

25 สร้าง class “Employee”
+ name : String + salary : double +getDetails() +getDetails(name :String) :String +getDetails(s:double) : double

26 เรียก getDetails() ที่ได้ส่ง parameter

27 เรียก getDetails(“ชาติชาย”) parameter =“ชาติชาย”

28 เรียก getDetails(30000) , parameter=30000.0

29 Constructor (คอนสตรัคเตอร์)

30 Constructor (คอนสตรัคเตอร์)
เป็นส่วนที่ประกอบด้วยคำสั่งที่จำเป็นสำหรับการกำหนดค่าเริ่มต้นให้กับ attribute ต่าง ๆ ของ Object โดย Constructor จะถูกเรียกให้ทำงานโดยอัตโนมัติ (default constructor) เมื่อเราสร้าง Object จาก class ด้วย New

31 Student + name : String + grade : double

32 หน้าตาของ constructor
คล้ายเมธอดแต่ต่างกันตรงที่ ชื่อต้องเหมือนกันกับ class (แต่เมธอดชื่อต้องไม่เหมือนกับชื่อclass) ไม่มี return type

33 access modifier ของconstructor เหมือนกับ class

34 หากเราต้องการจะสร้าง constructor ขึ้นเอง
constructor ที่สร้างขึ้นเองสามารถระบุให้มีหรือไม่มีargument ก็ได้ สร้างกี่อันก็ได้ ใน class หนึ่ง ๆ แต่ constructor แต่ละอันจะต้องมี argument ไม่เหมือนกัน สรุป มีชื่อเหมือนกันแต่ต่างกันที่ argument เราเรียก constructor เหล่านี้ว่า “overloaded constructor”

35 การ overload Constructor และการ ใช้ this

36 class Student this.แอตทริบิวต์ , this.เมธอด()
1 name ที่ input เข้ามา จะนำไปกำหนดค่าให้กับ this.name 2 this.name คือ name ที่เป็น attribute ของclass 2 1 this.แอตทริบิวต์ , this.เมธอด() เป็นการอ้างถึง แอตทริบิวต์ และเมธอด ของ class นี้

37 Default Constructor

38 เรียก Constructor โดย parameter=“Student A”

39 เรียก Constructor โดย parameter=“Student A”,4.00

40 Constructor ในclass แม่จะไม่ถูกถ่ายทอดให้ class ลูก
class แม่จะถ่ายทอดแค่ attribute และ method เท่านั้น(ต้องประกาศเป็น public และ protected ด้วย)แต่ constructor ใน class แม่จะไม่ถูกถ่ายทอดไปยัง class ลูก สรุป constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้ แต่ class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้

41 สร้าง class A, class B ดังนี้

42 ทดสอบเรียก constructor ของ class แม่ กรณี ไม่มี parameter

43 ทดสอบเรียก constructor ของ class แม่ กรณี มี parameter

44 เมื่อ Default constructor เริ่มทำงาน
นอกจาก default constructor จะทำการกำหนดค่าเริ่มต้นให้กับ attribute และ method แล้ว อีกสิ่งที่ default constructor ทำคือ เมื่อ default constructor ของ class ลูกทำงานจะไปเรียก default constructor ของบรรพบุรุษ ให้ทำงานด้วย

45 ทดสอบเรียก constructor ของ class ลูก กรณี ไม่มี parameter
1 2

46 ทดสอบเรียก constructor ของ class ลูก กรณี มี parameter=16
2

47 constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้

48 constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้

49 เรียกใช้ constructor โดยใช้ super() ,this()
class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() และเรียกใช้ constructor ของ class ตัวเองโดยใช้ this() โดยมีเงื่อนไขว่า เมื่อใช้ super() และ this() ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor และparameter ที่ใช้ก็ต้องมีใน constructor ของ class นั้นๆ ด้วย เช่น super(5) class A (class แม่) ต้องมี A(int x){} this(5.0) class B (class ลูก) ต้องมี B(double x){} ไม่เช่นนั้นจะคอมไพล์ไม่ผ่าน

50 class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() ให้แก้ไขเพิ่มเติม class B ดังนี้
2 1 3

51 class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() ให้แก้ไขเพิ่มเติม class B ดังนี้
1 2 3

52 class ลูกสามารถเรียกใช้ constructor ของ class ลูก(ตัวเอง)ได้โดย this() ให้แก้ไขเพิ่มเติม class B ดังนี้

53 class ลูกสามารถเรียกใช้ constructor ของ class ลูก(ตัวเอง)ได้โดย this() ให้แก้ไขเพิ่มเติม class B ดังนี้ 1 2 3 4

54 จากข้อมูล เงื่อนไขการใช้ super() และ this()
ต้องเรียกคำสั่ง super() ,this() นี้ที่บรรทัดแรกภายใน constructor และparameter ที่ใช้ก็ต้องมีใน constructor ของ class นั้นๆ ด้วย เช่น super(5) class A (class แม่) ต้องมี A(int x){} this(5.0) class B (class ลูก) ต้องมี B(double x){} ไม่เช่นนั้นจะคอมไพล์ไม่ผ่าน

55 ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor

56 ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor

57 เรียกใช้ constructor ที่ไม่มีอยู่จริง
จะเห็นว่าไม่มี B(String s){}

58 สรุป หลักการพื้นฐานของ object oriented
Encapsulation และ Information Hiding การห่อหุ้ม และ การซ่อนรายละเอียด Inheritance การสืบทอด และ (Reusable) การนำวัตถุมาใช้ใหม่ Polymorphism การพ้องรูป

59 The End.


ดาวน์โหลด ppt Object-Oriented Programming

งานนำเสนอที่คล้ายกัน


Ads by Google