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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โปรแกรมฝึกหัด การเลื่อนและคลิกเมาส์
Advertisements

Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
ไม่อิงพารามิเตอร์เบื้องต้น
การซ้อนทับกัน และคลื่นนิ่ง
1.7 ระเบียบวิธีทางสถิติ 1. การเก็บรวบรวมข้อมูล (Data Collection)
ครั้งที่ 8 Function.
บทนำ.
การสืบค้นข้อมูลจาก Web OPAC
05_3_Constructor.
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 7 Composition.
จำนวนนับใดๆ ที่หารจำนวนนับที่กำหนดให้ได้ลงตัว เรียกว่า ตัวประกอบของจำนวนนับ จำนวนนับ สามารถเรียกอีกอย่างว่า จำนวนเต็มบวก หรือจำนวนธรรมชาติ ซึ่งเราสามารถนำจำนวนนับเหล่านี้มา.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
Use Case Diagram.
กลุ่มสาระการเรียนรู้ คณิตศาสตร์ โรงเรียนบ้านหนองกุง อำเภอนาเชือก
C Programming Lecture no. 6: Function.
SCC : Suthida Chaichomchuen
Classification Abstraction
Selected Topics in IT (Java)
การสืบทอด (Inheritance)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
การสืบค้นข้อมูลจาก Web OPAC
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (4) (Class & Object)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
คลาสและวัตถุ (4) (Class & Object)
การสืบทอดคุณสมบัติ (Inheritance)
Kampol chanchoengpan it สถาปัตยกรรมคอมพิวเตอร์ Arithmetic and Logic Unit 1.
Inheritance การสืบทอดคลาส
บทที่ 6 เมธอด.
1 การสัมมนาผู้ตรวจ ประเมินคุณภาพภายใน ปีการศึกษา 2552 วันพฤหัสบดีที่ 21 ตุลาคม 2553 ณ ห้องประชุม 3222 อาคารสิริคุณากร.
หลักการวิเคราะห์และออกแบบระบบฐานข้อมูล
ณัฏฐวุฒิ เอี่ยมอินทร์
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Method of Class อ.สุพจน์ สิงหัษฐิต
Lec05 :: การสืบทอด (inheritance)
วิชาคอมพิวเตอร์กราฟิก
วิชาคณิตศาสตร์ ชั้นประถมศึกษาปีที่6
Object-Oriented Programming
บทที่ 3 Class and Object (2).
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
การลงข้อมูลแผนการสอน
การแบ่งหนังสือออกตามลักษณะการจัดทำและความเหมาะสมของผู้อ่านแต่ละกลุ่ม
BCS 121 บท 5 การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
บทที่ 9 การใช้งานฟอร์มและคอนโทรลต่าง ๆ
Commission Commission on Higher Education Quality Assessment online system CHEQA Updated July 25, 2013
Object Oriented Programming : OOP
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
การค้นในปริภูมิสถานะ
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Class. ทบทวน Object ประกอบด้วย ชื่อ Attributes -> คุณลักษณะ Methods -> การกระทำ ให้ลองเขียน Object โดยใช้รูปแบบดังนี้ ชื่อ Attributes Methods.
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
Object-Oriented Programming
คอนสตรัคเตอร์ (Constructor)
โครงสร้างข้อมูลแบบ สแตก (stack)
การค้นในปริภูมิสถานะ
กราฟเบื้องต้น.
ผลการประเมิน คุณภาพการศึกษาขั้นพื้นฐาน ปีการศึกษา
บทที่ 3 การสืบทอด (Inheritance)
ใบสำเนางานนำเสนอ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

เขียนโปรแกรม 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 เบื้องต้น

เขียนโปรแกรม 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 เบื้องต้น

เขียนโปรแกรม 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 เบื้องต้น

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

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

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

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

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

เขียนโปรแกรม 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 เบื้องต้น

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

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

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

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

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

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

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

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

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

คำนวณพื้นที่ของวงแหวน 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 เบื้องต้น

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

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

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

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

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

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

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

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

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