# ความสำคัญของ Polymorphism ใน OOP ด้วยภาษา Dart: การเปลี่ยนแปลงรูปแบบได้หลากหลาย
**Polymorphism** เป็นหนึ่งในคอนเซปต์หลักของ Object-Oriented Programming (OOP) ที่สำคัญเพียงใด? มันช่วยให้โปรแกรมเมอร์เขียนโค้ดที่ยืดหยุ่นและสามารถนำไปใช้ซ้ำได้ ผ่านโครงสร้างการจัดการกับวัตถุที่มีหลายรูปแบบตามแต่ context หรือการใช้งาน เราจะดูโดยเฉพาะในบริบทของภาษา **Dart** นักพัฒนาที่ใช้ Dart มักจะพัฒนาแอปพลิเคชันด้วย Flutter ซึ่งเป็นกรอบงานบนมือถือที่นิยมมากในขณะนี้
ก่อนที่เราจะดูตัวอย่างโค้ด Dart, เราต้องเข้าใจว่า Polymorphism ใน Dart นั้นมีสองประเภทหลักๆ:
1. Compile-time Polymorphism (เช่น Overloading) 2. Runtime Polymorphism (เช่น Overriding) วันนี้เราจะโฟกัสกับ Runtime Polymorphism ที่เกี่ยวข้องกับการใช้งาน interface และการ override methods.ตัวอย่างที่ 1: การนิยาม Interface และพิมพ์ลักษณ์หลายรูป
สมมติว่าเรามี interface `Shape` และมี classes ย่อยในการนิยามรูปร่างต่างๆ เช่น `Circle`, `Square`, และ `Triangle`.
abstract class Shape {
double area();
}
class Circle implements Shape {
double radius;
Circle(this.radius);
@override
double area() => 3.14159 * radius * radius;
}
class Square implements Shape {
double side;
Square(this.side);
@override
double area() => side * side;
}
class Triangle implements Shape {
double base;
double height;
Triangle(this.base, this.height);
@override
double area() => 0.5 * base * height;
}
void printArea(Shape shape) {
print('The area is ${shape.area()}');
}
void main() {
Shape circle = Circle(5);
Shape square = Square(4);
Shape triangle = Triangle(3, 6);
printArea(circle);
printArea(square);
printArea(triangle);
}
ในตัวอย่างนี้ เราสามารถเห็น polymorphism ทำงานเนื่องจาก method `printArea` สามารถรับประทานอินสแตนซ์ของ `Shape` ใดๆ แล้วคำนวณพื้นที่โดยไม่จำกัดว่าวัตถุนั้นเป็นรูปร่างใด
ตัวอย่างที่ 2: การใช้งาน Method Overriding
Method overriding คือเมื่อ subclass นิยาม method ที่มีชื่อเดียวกัน, ลักษณะเดียวกัน, และการกลับหน้าที่เดียวกัน (return type) กับ method ใน superclass.
class Person {
void greet() => print('Hello, I am a person.');
}
class Student extends Person {
@override
void greet() => print('Hello, I am a student.');
}
void main() {
Person person = Student();
person.greet(); // Output: Hello, I am a student.
}
ในตัวอย่างนี้ เมื่อเราสร้างอินสแตนซ์ `Student` แล้วเรียก `greet()` มันจะบ่งบอกชนิดการเรียกใช้งานที่ runtime (Runtime Polymorphism) โดยการ override method `greet` จาก superclass `Person`.
ตัวอย่างที่ 3: Polymorphism ใน Collection of Objects
Polymorphism ยังสามารถใช้กับการจัดการกับ collection of different objects ที่เกิดจากขั้นบันไดเดียวกัน.
List shapes = [Circle(2), Square(4), Triangle(3, 5)];
for (var shape in shapes) {
print(shape.area());
}
การวนลูปแต่ละรูปร่างใน list `shapes` และโปรแกรมแสดงพื้นที่ของรูปร่างนั้นๆ โดยไม่จำเป็นต้องรู้ว่ารูปร่างนั้นคืออะไรที่ compile time.
มาตัวอย่างของ `Polymorphism` ในแวดวงแอพพลิเคชันโลกจริง คือการทำระบบการจัดการเอกสาร ต่างประเภทของเอกสาร เช่น คู่มือ, หนังสือ, บทความ สามารถถูกประมวลผลผ่าน interface เดียวกันในขณะที่มีวิธีการคำนวณหรือนำเสนอที่แตกต่างกันไป
ถ้าคุณเป็นผู้ที่อยากลุยในโลกของการพัฒนาซอฟต์แวร์และแอปพลิเคชัน การเรียนรู้เกี่ยวกับ OOP และ Polymorphism เป็นอาวุธทรงพลังในการเขียนโค้ดที่ไม่เพียงแต่ใช้งานได้ดีเท่านั้น แต่ยังมีความยืดหยุ่นและนำพาตัวเองให้พร้อมสำหรับการเปลี่ยนแปลงของโลกได้อยู่เสมอ
ที่ EPT (Expert-Programming-Tutor) เราอุทิศให้คุณด้วยความรู้ล้ำลึกนี้และพาคุณก้าวไปสู่การสร้างโค้ดที่เป็นศิลปะ บนพื้นฐานของหลักการสำคัญของ OOP ซึ่งเริ่มต้นได้ไม่ยากกับภาษา Dart ที่เรายกตัวอย่างมาให้เห็น เปิดโอกาสให้ตัวเองพัฒนาความเข้าใจในแบบฝึกหัดและโปรเจกต์จริงกับเราที่ EPT และสร้างสรรค์อนาคตของการเขียนโค้ดที่ไม่มีขีดจำกัดไปด้วยกัน!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: polymorphism oop object-oriented_programming dart runtime_polymorphism overloading overriding interface method_overriding collection_of_objects
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM