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

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

การสืบทอด (inheritance)

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


งานนำเสนอเรื่อง: "การสืบทอด (inheritance)"— ใบสำเนางานนำเสนอ:

1 การสืบทอด (inheritance)
09/04/60 เขียนโปรแกรม Java เบื้องต้น เขียนโปรแกรม Java เบื้องต้น

2 เขียนโปรแกรม Java เบื้องต้น
หัวข้อ การสืบทอด การเข้าใช้แบบ protected พอลิมอร์ฟิซึม การสืบทอดในภาษาจาวา คลาส Object 09/04/60 เขียนโปรแกรม Java เบื้องต้น

3 เขียนโปรแกรม Java เบื้องต้น
การสืบทอด 09/04/60 เขียนโปรแกรม Java เบื้องต้น

4 เขียนโปรแกรม Java เบื้องต้น
สัตว์ต่างๆ คลาสแมว แอตทริบิวต์ ได้แก่ อายุ และ ความหิว เมธอด ได้แก่ กิน() และ นอน() คลาสปลา แอตทริบิวต์ ได้แก่ อายุ ความหิว และชื่อ (เช่น ปลานีโม) คลาสลิง เมธอดได้แก่ กิน() นอน() และเก็บลูกมะพร้าว() 09/04/60 เขียนโปรแกรม Java เบื้องต้น

5 แอททริบิวท์และเมธอดที่คล้ายกัน
09/04/60 เขียนโปรแกรม Java เบื้องต้น

6 เขียนโปรแกรม Java เบื้องต้น
การสืบทอด แก้ปัญหาการเขียนโปรแกรมซ้ำซ้อนกันได้ เมธอดหรือแอตทริบิวต์ที่คลาสต่างๆ มีร่วมกันจะถูกนำไปใส่ในคลาสแม่ คลาสลูกจะสืบทอดเมธอดและแอตทริบิวต์คลาสแม่โดยอัตโนมัติ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

7 เขียนโปรแกรม Java เบื้องต้น
การทดสอบการสืบทอด แต่งประโยคโดยใช้คำว่า “เป็น” เข้าช่วย ลิงเป็นสัตว์ สัตว์เป็นลิง ลิงไซบอร์ก เป็น ลิงและหุ่นยนต์ รถยนต์เป็นพาหนะ เครื่องยนต์เป็นรถยนต์ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

8 เขียนโปรแกรม Java เบื้องต้น
คลาสสัตว์ แมว ปลา และลิง เป็นสัตว์ สัตว์ทุกตัวสามารถกินและนอนได้ เราจึงนำแอตทริบิวต์และเมธอดที่สัตว์ต่างๆมีร่วมกัน ไปใส่ในคลาสสัตว์ class สัตว์ { // แอตทริบิวต์ อายุ; ความหิว; // เมธอด กิน() {… } นอน() {… } } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

9 เขียนโปรแกรม Java เบื้องต้น
ทดสอบคลาส ในแต่ละคู่ต่อไปนี้ให้เลือกว่าคลาสใดเป็นแม่ของอีกคลาส ที่สามารถสืบทอดกันได้ ผู้จัดการ พนักงาน รูปสี่เหลี่ยม รูปหลายเหลี่ยม บานาน่าโบ้ต พาหนะ ซีพียู คอมพิวเตอร์ เครื่องเขียน ปากกา ดินสอ ปากกา นก เพนกวิน 09/04/60 เขียนโปรแกรม Java เบื้องต้น

10 เขียนโปรแกรม Java เบื้องต้น
การสืบทอด รูปแบบ class คลาสลูก extends คลาสแม่ ตัวอย่าง class แมว extends สัตว์ { } class ปลา extends สัตว์ { class ลิง extends สัตว์ { 09/04/60 เขียนโปรแกรม Java เบื้องต้น

11 วัตถุในคลาสลูกสามารถทำงานตามเมธอดของคลาสแม่ได้
ลิง ล = new ลิง(); ล.กิน(); 09/04/60 เขียนโปรแกรม Java เบื้องต้น

12 เขียนโปรแกรม Java เบื้องต้น
เพิ่มเมธอดในคลาสลูก class ลิง extends สัตว์ { // เมธอดที่เพิ่มเข้ามา เก็บลูกมะพร้าว() { … } } ลิง ล = new ลิง(); ล.เก็บลูกมะพร้าว(); สัตว์ ส = new สัตว์(); ส.เก็บลูกมะพร้าว(); 09/04/60 เขียนโปรแกรม Java เบื้องต้น

13 เพิ่มแอททริบิวท์ในคลาสลูก
class ปลา extends สัตว์ { // แอตทริบิวต์ที่เพิ่มเข้ามา ชื่อ; } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

14 เขียนโปรแกรม Java เบื้องต้น
ทดสอบคลาส วาดลำดับชั้นของการสืบทอดคลาสต่อไปนี้ นักศึกษา คน อาจารย์ พนักงาน ศาสตราจารย์ นักศึกษาฝึกสอน 09/04/60 เขียนโปรแกรม Java เบื้องต้น

15 เมธอดที่มีชื่อซ้ำกับเมธอดในคลาสแม่
ถึงแม้การ กิน() นอน() เป็นความสามารถของสัตว์ทุกชนิดทำได้เหมือนกัน แต่ไม่ได้หมายความว่าสัตว์ทุกชนิดจะมีวิธีการ กิน() นอน() ในแบบเดียวกัน เช่น ปลานอนโดยไม่หลับตา ในขณะที่สัตว์ทั่วไปนอนหลับตา เป็นต้น การเขียนเมธอดที่มีชื่อและพารามิเตอร์เหมือนกันกับเมธอดที่มีอยู่แล้วในคลาสแม่ เรียกว่า “การโอเวอร์ไรด์(override) 09/04/60 เขียนโปรแกรม Java เบื้องต้น

16 เขียนโปรแกรม Java เบื้องต้น
การโอเวอร์ไรด์เมธอด class ปลา extends สัตว์ { // แอตทริบิวต์ ชื่อ; // เมธอด นอน() { // วิธีการนอนของปลา } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

17 เขียนโปรแกรม Java เบื้องต้น
การโอเวอร์ไรด์เมธอด ปลา ป = new ปลา(); ป.นอน(); เช่น ถ้าสั่งให้ปลานอน ปลาจะเข้าไปทำงานตามคำสั่งในเมธอด นอน() ในคลาสปลา ไม่ใช่เมธอด นอน() ในคลาสแม่ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

18 พอลิมอร์ฟิซึม (Polymorphism)
09/04/60 เขียนโปรแกรม Java เบื้องต้น

19 เขียนโปรแกรม Java เบื้องต้น
ความหมาย poly แปลว่าหลายหรือมาก morphism นั้นมาจากคำว่า morph ซึ่งแปลว่ารูปร่าง รวมกันแล้วหมายถึงความสามารถที่สิ่งหนึ่งจะมีได้หลายรูปร่าง ซึ่งเมื่อใช้คำนี้กับการโปรแกรมเชิงวัตถุ ก็จะหมายถึงการที่คำสั่งแบบเดียวกันสามารถถูกแปลได้หลายแบบ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

20 เขียนโปรแกรม Java เบื้องต้น
พอลิมอร์ฟิซึม 09/04/60 เขียนโปรแกรม Java เบื้องต้น

21 พอลิมอร์ฟิซึมกับการนำกลับมาใช้ใหม่
พอลิมอร์ฟิซึมสนับสนุน การนำกลับมาใช้ใหม่ (reuse) ถ้าเราได้เขียนโปรแกรมที่ใช้งานได้กับสัตว์ โปรแกรมของเราย่อมใช้ได้กับแมว ปลา และลิงนอกจากนั้นถ้ามีคนสร้างคลาสอีกัวน่าขึ้นมาใหม่ โปรแกรมที่เราเขียนก็สามารถใช้ได้กับคลาสอีกัวน่าเช่นกัน 09/04/60 เขียนโปรแกรม Java เบื้องต้น

22 เขียนโปรแกรม Java เบื้องต้น
พอลิมอร์ฟิซึม public class TestPolymorphism { public static void main(String[] args) { Shape shape; shape = new Rectangle(10, 20); System.out.println(shape.getArea()); shape = new Circle(10); } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

23 เขียนโปรแกรม Java เบื้องต้น
การนำมาใช้อีก public class ShapeArray { public static double sumArea(Shape[] shapes) { double sum = 0; for( Shape s : shapes) { sum += s.getArea(); } return sum; 09/04/60 เขียนโปรแกรม Java เบื้องต้น

24 เขียนโปรแกรม Java เบื้องต้น
การนำมาใช้อีก Shape[] s = new Shape[3]; s[0] = new Triangle(10); s[1] = new Rectangle(10,20); s[2] = new Pentagon(20); double d = ShapeArray.sumArea(s); 09/04/60 เขียนโปรแกรม Java เบื้องต้น

25 เขียนโปรแกรม Java เบื้องต้น
การสืบทอดในภาษาจาวา 09/04/60 เขียนโปรแกรม Java เบื้องต้น

26 คลาสรูปร่างและคลาสที่สืบทอด
09/04/60 เขียนโปรแกรม Java เบื้องต้น

27 เขียนโปรแกรม Java เบื้องต้น
คลาสรูปร่าง รูปร่างเป็นรูปที่อยู่ในระนาบสองมิติ มีพื้นที่ เมธอด getArea() ใช้คำนวณหาพื้นที่ของรูปร่าง มีสี public enum Color { Red, Green, Blue } เมธอด getColor() 09/04/60 เขียนโปรแกรม Java เบื้องต้น

28 คลาสสี่เหลี่ยมผืนผ้า
class Rectangle extends Shape { ... public double getArea() { return width * height; } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

29 เขียนโปรแกรม Java เบื้องต้น
คลาส Object 09/04/60 เขียนโปรแกรม Java เบื้องต้น

30 เขียนโปรแกรม Java เบื้องต้น
เมธอด toString() public class Rectangle extends Shape { ... public String toString() { String str = "Rectangle"; str += " color=" + getColor(); str += " width=" + width; str += " height=" + height; str += " area=" + getArea(); return str; } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

31 เขียนโปรแกรม Java เบื้องต้น
เมธอด toString() เป็นเมธอดที่ถูกโอเวอร์ไรด์จากคลาส Object 09/04/60 เขียนโปรแกรม Java เบื้องต้น

32 เขียนโปรแกรม Java เบื้องต้น
การห้ามโอเวอร์ไรด์ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

33 เขียนโปรแกรม Java เบื้องต้น
ไฟนอลคลาส ไม่สามารถถูกสืบทอดได้ public final class Square 09/04/60 เขียนโปรแกรม Java เบื้องต้น

34 เขียนโปรแกรม Java เบื้องต้น
ไฟนอลเมธอด ไม่สามารถถูกโอเวอร์ไรด์ได้ public class Shape { public final Color getColor() { return color; } ... 09/04/60 เขียนโปรแกรม Java เบื้องต้น

35 การเข้าใช้แบบ protected
09/04/60 เขียนโปรแกรม Java เบื้องต้น

36 การเข้าใช้แบบ protected
การเข้าใช้แบบนี้มีความเข้มงวดน้อยกว่าแบบ private ซึ่งห้ามคลาสอื่นใดเข้าใช้ แต่ก็อิสระน้อยกว่าแบบ public ที่ใครๆก็สามารถเข้าใช้ได้ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

37 การเข้าใช้แบบ Protected
คลาสลูกสามารถเรียกใช้แอทริบิวส์หรือเมธอดที่มีการเข้าใช้แบบ protected ได้ เช่น ถ้าเรากำหนดให้แอทริบิวส์ “อายุ” มีการเข้าใช้แบบ protected แล้ว เมธอด ทำให้แก่() ในคลาสลิงก็สามารถเพิ่มอายุได้ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

38 การเข้าใช้แบบ Protected
Class สัตว์ { protected อายุ; } Class ลิง extends สัตว์ { ทำให้แก่(){ อายุ +=10; สามารถเข้าใช้แอทริบิวส์ในคลาสแม่ได้ 09/04/60 เขียนโปรแกรม Java เบื้องต้น

39 เขียนโปรแกรม Java เบื้องต้น
คลาสวงกลม public class Circle extends Shape { protected double radius; public Circle(double r) { radius = r; } public double getRadius() { return radius; ... 09/04/60 เขียนโปรแกรม Java เบื้องต้น

40 คำนวณพื้นที่ของวงแหวน
public class Ring1 extends Circle { public double getArea() { double outerArea = Math.PI * radius * radius; double innerArea = Math.PI * innerRadius * innerRadius; return outerArea - innerArea; } ... 09/04/60 เขียนโปรแกรม Java เบื้องต้น

41 แอบสแตรกท์คลาส (abstract class)
09/04/60 เขียนโปรแกรม Java เบื้องต้น

42 คลาสที่ประกาศขึ้นมาลอยๆ (Abstract Class)
เมธอด getArea() ในคลาส Shape ไม่ควรส่งค่าศูนย์หรือค่าใดๆกลับมา ทั้งนี้เพราะว่าเราไม่ทราบวิธีคำนวณหาพื้นที่ของวัตถุ Shape public abstract double getArea(); เมธอดที่ถูกประกาศขึ้นมาลอยๆ (abstract) นี้ต้องอยู่ในคลาสที่เป็น abstract ด้วยเช่นกัน คลาส Shape เขียนใหม่ได้ดังนี้ public abstract class Shape { ... } 09/04/60 เขียนโปรแกรม Java เบื้องต้น

43 การใช้งาน abstract class
ไม่สามารถสร้างวัตถุในคลาสนี้ได้ Shape s = new Shape(); แต่อ้างถึงวัตถุในคลาสลูกได้ Shape s; s = new Rectangle(3,2); s = new Square(5); 09/04/60 เขียนโปรแกรม Java เบื้องต้น

44 ข้อดีข้อเสียของการสืบทอด
09/04/60 เขียนโปรแกรม Java เบื้องต้น

45 เขียนโปรแกรม Java เบื้องต้น
ข้อดีของการสืบทอด  การนำกลับมาใช้ใหม่ ถ้าเราต้องการสร้างคลาสที่มีความสามารถคล้ายๆกับคลาสที่มีอยู่แล้ว เราอาจจะใช้การสืบทอดแทนที่จะเขียนขึ้นมาใหม่หมด ความเป็นมาตรฐานเดียวกัน คลาสพื้นฐานเป็นการกำหนดโครงแบบในการระบุความสามารถของวัตถุในคลาสลูก เข้าใจสาระสำคัญได้ง่าย 09/04/60 เขียนโปรแกรม Java เบื้องต้น

46 ข้อเสียของการสืบทอด 
โปรแกรมทำงานช้าลง มีค่าใช้จ่าย (overhead) ในค้นหาและเรียกใช้เมธอดของคลาสที่สืบทอด แต่ค่าใช้จ่ายดังกล่าวถือว่าน้อยมากเมื่อเทียบกับประโยชน์ที่ได้รับจากการสืบทอด โปรแกรมมีขนาดใหญ่ขึ้น แต่หน่วยความจำราคาไม่แพง ความซับซ้อนเพิ่มขึ้น ผู้ใช้ต้องหาตามคลาสต่างๆ ที่อยู่ในผังการสืบทอดจนกว่าจะพบคลาสที่อิมพลีเมนต์เมธอดนั้น ปัญหาที่กล่าวถึงนี้มีชื่อว่าปัญหาลูกดิ่ง (Yo-yo problem) 09/04/60 เขียนโปรแกรม Java เบื้องต้น

47 เขียนโปรแกรม Java เบื้องต้น
สรุป 09/04/60 เขียนโปรแกรม Java เบื้องต้น

48 เขียนโปรแกรม Java เบื้องต้น
สรุป การสืบทอดในภาษาจาวาใช้แนวความคิดเดียวกับการถ่ายทอดคุณลักษณะจากพ่อและแม่ คลาสลูกสืบทอดความสามารถจากคลาสแม่ การทดสอบการสืบทอดทำได้โดยการแต่งประโยคที่มีคำว่าเป็น การสืบทอดทำให้เกิดการนำไปใช้ใหม่ได้ คลาสลูกสามารถใช้เมธอดในคลาสแม่ได้ ถ้าเมธอดนั้นเป็น public หรือ protected 09/04/60 เขียนโปรแกรม Java เบื้องต้น

49 เขียนโปรแกรม Java เบื้องต้น
สรุป เมธอดที่ใช้กับคลาสแม่ได้ ก็สามารถใช้กับคลาสลูกได้ คลาสลูกสามารถโอเวอร์ไรด์เมธอดในคลาสแม่ได้ พอลิมอร์ฟิซึมคือการที่คำสั่งเดียวกันสามารถทำให้เกิดการทำงานที่ต่างกันขึ้นกับชนิดของวัตถุ แอ็บสแตร็กต์เมธอดคือเมธอดที่ไมได้ระบุวิธีการทำงาน แอ็บสแตร็กต์เมธอดต้องอยู่ในแอ็บสแตร็กต์คลาส แอ็บสแตร็กต์คลาสเป็นเหมือนกับโครงที่กำหนดให้คลาสลูกต้องอิมพลีเมนต์แอ็บสแตร็กต์เมธอด 09/04/60 เขียนโปรแกรม Java เบื้องต้น


ดาวน์โหลด ppt การสืบทอด (inheritance)

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


Ads by Google