# การใช้งาน OOP (Object-Oriented Programming) ใน Dart ด้วยความเข้าใจที่เป็นธรรมชาติ
การเขียนโปรแกรมแบบวัตถุนิยมหรือ Object-Oriented Programming (OOP) เป็นพื้นฐานสำคัญที่ผู้เรียนทางด้านการเขียนโค้ดควรทราบอย่างถ่องแท้ และภาษา Dart ก็เป็นหนึ่งในภาษาที่ใช้ OOP ได้อย่างมีประสิทธิภาพ นำไปสู่การพัฒนาแอปพลิเคชันด้วย Flutter ที่กำลังได้รับความนิยม
ในบทความนี้ เราจะพาผู้อ่านไปรู้จักกับแนวคิดของ OOP ใน Dart ผ่านตัวอย่างโค้ด 3 ตัวอย่าง พร้อมทั้งอธิบายการทำงานและยกตัวอย่าง use case ในโลกจริงที่สามารถนำไปใช้ เอาล่ะ ไปดูกันเลยดีกว่า!
ก่อนที่เราจะดำดิ่งลึกลงไปกับ Dart มาทำความเข้าใจแนวคิดหลักๆ ของ OOP ซึ่งมี 4 ประการ:
1. Encapsulation: การห่อหุ้มข้อมูลและฟังก์ชันที่จัดการข้อมูล เพื่อป้องกันการเข้าถึงโดยตรงจากภายนอก 2. Abstraction: การซ่อนรายละเอียดการทำงานภายใน เพื่อให้ผู้ใช้เห็นเพียงส่วนอินเทอร์เฟส 3. Inheritance: การสืบทอดคุณสมบัติจากคลาสหนึ่งไปยังอีกคลาสหนึ่ง 4. Polymorphism: การที่วัตถุสามารถเป็นรูปแบบหลายแบบพร้อมๆ กัน
1. Encapsulation ด้วย Getter และ Setter
class Account {
double _balance; // เริ่มต้นด้วย _ แปลว่า private property
Account(this._balance);
// Getter
double get balance => _balance;
// Setter
set deposit(double amount) {
if (amount > 0) {
_balance += amount;
}
}
}
void main() {
var account = Account(1000);
account.deposit = 500; // เพิ่มเงิน
print(account.balance); // แสดงผล 1500
}
ใน Dart, การใช้ `_` นำหน้าชื่อตัวแปรจะทำให้ตัวแปรนั้นเป็น private ทำให้ไม่สามารถเข้าถึงจากภายนอกได้โดยตรง ต้องใช้ Getter และ Setter ในการเข้าถึงแทน ซึ่งช่วยให้ควบคุมการทำงานได้อย่างปลอดภัยมากขึ้น
2. การสืบทอดคุณลักษณะ (Inheritance)
class Vehicle {
String make;
String model;
Vehicle(this.make, this.model);
void startEngine() {
print('Engine started for $make $model');
}
}
class ElectricCar extends Vehicle {
double batteryLevel;
ElectricCar(String make, String model, this.batteryLevel) : super(make, model);
@override
void startEngine() {
print('Electric engine started for $make $model with battery at $batteryLevel%');
}
}
void main() {
var tesla = ElectricCar('Tesla', 'Model S', 90.0);
tesla.startEngine();
}
ในตัวอย่างนี้, `ElectricCar` เป็น subclass ที่สืบทอดจาก `Vehicle` และมีการใช้ `@override` เพื่อแก้ไขการทำงานของเมธอด `startEngine` ได้อย่างเหมาะสมกับวัตถุที่เป็นรถยนต์ไฟฟ้า
3. การใช้ Polymorphism
abstract class Shape {
double area();
}
class Rectangle extends Shape {
double width, height;
Rectangle(this.width, this.height);
@override
double area() => width * height;
}
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double area() => 3.14159265359 * radius * radius;
}
void renderArea(Shape shape) {
print('The area is: ${shape.area()}');
}
void main() {
var rect = Rectangle(10, 5);
var circle = Circle(7);
renderArea(rect);
renderArea(circle);
}
ในตัวอย่างนี้ `Shape` เป็นคลาส abstract ที่มีเมธอด `area` ที่ยังไม่ได้ถูกนิยาม แต่ละ subclass (`Rectangle` และ `Circle`) ต้องมีการนิยามเมธอด `area` ตามโครงสร้างของตนเอง นั่นคือ `area` สำหรับ `Rectangle` คือ พื้นที่ผลคูณของกว้างและยาว ในขณะที่ `Circle` คือ พื้นที่ของวงกลม
ระบบจัดการอสังหาริมทรัพย์ออนไลน์อาจเป็นตัวอย่างของการใช้ OOP ใน Dart: สามารถเป็นการกำหนดคลาสต่างๆ เช่น `Property`, `House`, `Apartment` โดยที่ `House` และ `Apartment` สืบทอดมาจาก `Property` แต่ละคลาสจะมีคุณลักษณะเฉพาะตัว เช่น ขนาดพื้นที่, จำนวนห้อง, ระดับพลังงาน, ฯลฯ และเมธอดเฉพาะที่ส่งผลต่อการคำนวณราคา การทำแบบนี้ทำให้โค้ดเป็นระเบียบและง่ายต่อการขยายฟังก์ชั่นในอนาคต
การเรียนรู้ OOP ใน Dart จะเปิดโอกาสและสร้างความเข้าใจที่แข็งแกร่งในการสร้างแอปพลิเคชันยุคใหม่ เชิญชวนผู้อ่านที่สนใจพัฒนาโดยใช้ Dart และ Flutter มาเรียนรู้พื้นฐานและลึกซึ้งมากขึ้นที่ EPT หรือ Expert-Programming-Tutor ซึ่งเป็นที่เรียนการสอนที่เต็มไปด้วยความเชี่ยวชาญ รองรับทั้งผู้เรียนใหม่และผู้เรียนที่ต้องการเพิ่มทักษะการเขียนโปรแกรมไปอีกระดับ บทความนี้มั่นใจว่าได้เปิดประตูสู่โลกของการเขียนโค้ดที่น่าตื่นเต้นและสร้างสรรค์แน่นอน พบกันในคลาสถัดไปที่ EPT!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: oop object-oriented_programming dart encapsulation inheritance polymorphism getter setter subclass abstraction abstract_class override programming_concept code_example real-world_use_case
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM