### การใช้งาน Polymorphism ใน OOP ในภาษา Objective-C
Polymorphism (การพหุรูป) คือหนึ่งในแนวคิดหลักของการเขียนโปรแกรมแบบ Object-Oriented Programming (OOP) ที่ทำให้ Object ต่างๆ สามารถถูกใช้งานผ่าน Interface เดียวกันได้ แม้ว่าจะมีการทำงานที่แตกต่างกันออกไปก็ตาม ในภาษา Objective-C การใช้งาน Polymorphism ทำให้นักพัฒนาสามารถเขียนโค้ดที่ยืดหยุ่นและง่ายต่อการขยายได้ ในที่นี้ เราจะดูตัวอย่างการใช้งาน Polymorphism ในภาษา Objective-C และยกตัวอย่าง use case ในโลกจริงเพื่อให้เข้าใจได้ง่ายขึ้น
#### ตัวอย่างที่ 1: การสร้าง Class และวิธีการใช้ Polymorphism
ก่อนอื่น ลองนึกถึงโมเดลของสัตว์ที่มีการเคลื่อนไหวที่แตกต่างกัน เช่น นกบิน ปลาว่ายน้ำ และหมาวิ่งได้อย่าง Polymorphism ได้ด่านการสร้างโครงสร้างต่อไปนี้:
// Animal.h
#import
@interface Animal : NSObject
- (void)move;
@end
// Bird.h
#import "Animal.h"
@interface Bird : Animal
@end
// Fish.h
#import "Animal.h"
@interface Fish : Animal
@end
// Dog.h
#import "Animal.h"
@interface Dog : Animal
@end
การสร้างพฤติกรรมเคลื่อนไหวสำหรับแต่ละสัตว์ในไฟล์การนิยาม class (.m):
// Animal.m
#import "Animal.h"
@implementation Animal
- (void)move {
NSLog(@"This is how an animal moves in general.");
}
@end
// Bird.m
#import "Bird.h"
@implementation Bird
- (void)move {
NSLog(@"Flapping wings and flying in the sky.");
}
@end
// Fish.m
#import "Fish.h"
@implementation Fish
- (void)move {
NSLog(@"Swimming in water with fins.");
}
@end
// Dog.m
#import "Dog.h"
@implementation Dog
- (void)move {
NSLog(@"Running on the ground with legs.");
}
@end
การใช้งาน Polymorphism ใน main function:
#import
#import "Animal.h"
#import "Bird.h"
#import "Fish.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *animals = @[[[Bird alloc] init], [[Fish alloc] init], [[Dog alloc] init]];
for (Animal *animal in animals) {
[animal move];
}
}
return 0;
}
ในตัวอย่างนี้ คุณจะเห็นว่าแม้ว่า objects ประเภทต่างๆ (นก, ปลา, หมา) ล้วนสืบทอดมาจากคลาสพื้นฐาน Animal และสามารถโต้ตอบโดยการใช้เมธอด `move` ในลักษณะเดียวกัน (ง่ายต่อการจัดการและใช้งานใน array ดังที่แสดงใน main function) แต่ปฏิกิริยาที่แท้จริงในการเคลื่อนไหวนั้นเฉพาะตัวตามชนิดของสัตว์
#### ตัวอย่างที่ 2: Polymorphism กับเมธอดโอเวอร์ไรด์
ในการผลักดันพหุนามให้ไปไกลกว่านี้คุณสามารถใช้ `@interface` และ `@implementation` ใน Objective-C เพื่อโอเวอร์ไรด์เมธอดที่สืบทอดมาจากคลาสแม่ได้ซึ่งให้ความยืดหยุ่นสำหรับงานที่ซับซ้อนมากขึ้น
// GraphicObject.h
#import
@interface GraphicObject : NSObject
- (void)draw;
@end
// Circle.h
#import "GraphicObject.h"
@interface Circle : GraphicObject
- (void)draw;
@end
// Rectangle.h
#import "GraphicObject.h"
@interface Rectangle : GraphicObject
- (void)draw;
@end
// GraphicObject.m
@implementation GraphicObject
- (void)draw {
NSLog(@"Drawing a Graphic Object");
}
@end
// Circle.m
@implementation Circle
- (void)draw {
NSLog(@"Drawing a Circle");
}
@end
// Rectangle.m
@implementation Rectangle
- (void)draw {
NSLog(@"Drawing a Rectangle");
}
@end
การใช้งานใน main function จะคล้ายกับตัวอย่างแรก:
NSArray *shapes = @[[[Circle alloc] init], [[Rectangle alloc] init]];
for (GraphicObject *shape in shapes) {
[shape draw];
}
ในที่นี้แต่ละวัตถุทางกราฟิก (วงกลม, สี่เหลี่ยม) ทำงาน `draw` มีพฤติกรรมที่แตกต่างกันแสดงความสามารถของ Polymorphismในการจัดการกับ Object ที่หลากหลาย
#### ตัวอย่างที่ 3: Polymorphism กับ Protocol
Objective-C ยังมีโปรโตคอล (Protocol) ที่ทำหน้าที่คล้ายกับ interface ในภาษาเช่น Java โดย Protocol สามารถระบุเมธอดที่ต้องโอเวอร์ไรด์ใน subclass เพื่อรับประกันการใช้งาน Polymorphism
// Drawable.h
#import
@protocol Drawable
- (void)draw;
@end
// Triangle.h
#import "Drawable.h"
@interface Triangle : NSObject
@end
// Triangle.m
@implementation Triangle
- (void)draw {
NSLog(@"Drawing a Triangle");
}
@end
การใช้งาน:
id triangle = [[Triangle alloc] init];
[triangle draw];
#### Use Case ในโลกจริง
ยกตัวอย่างการใช้งาน Polymorphism ในการพัฒนาแอปพลิเคชันสำหรับบริการขนส่ง ซึ่งมีหลายประเภทของยานพาหนะเช่น รถยนต์, จักรยาน, มอเตอร์ไซค์ โดยทุกยานพาหนะต่างก็สามารถ 'เคลื่อนที่' ได้ แต่พฤติกรรมของการเคลื่อนที่นั้นแตกต่างกันไป Polymorphism ทำให้ระบบสามารถจัดการกับยานพาหนะทุกชนิดสามารถถูกจัดการได้ในลักษณะเดียวกัน
ในการเขียนบทความนี้ เราหวังว่าผู้อ่านจะเห็นคุณค่าของการเรียนรู้การพัฒนาโปรแกรมและหลักสูตรที่รร. EPT (Expert-Programming-Tutor) ต้องการส่งเสริมให้คุณ ลงทะเบียนเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับหลักการพัฒนาซอฟต์แวร์ที่หลากหลาย ไม่ว่าจะเป็นภาษา Objective-C หรือภาษาอื่นๆ เพื่อยกระดับทักษะด้านโปรแกรมมิ่งและเป็นก้าวแรกในการเที่ยวโลกของการพัฒนาซอฟต์แวร์ของคุณ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: polymorphism object-oriented_programming objective-c inheritance interface code_example real-world_usecase class_hierarchy method_overriding protocol programming_principles software_development expert-programming-tutor ept flexibility
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM