Abstract classes
หฤณชนก พนมวรชัย 650710592
Abstract classes คือ ...
คลาสนามธรรม(abstract method) เป็นคลาสในรูปแบบภาษาโปรแกรมเชิงวัตถุ เรามักสร้าง Abstract class ไว้เป็นต้นแบบเพื่อให้คลาสที่มาสืบทอดมีแบบแผนหรือแนวทางไปในทางเดียวกัน เราจะเรียกคลาส Abstract ว่าคลาสแม่(parent class) และคลาสที่มาสืบทอดคุณสมบัติว่าคลาสลูก(subclass) โดยภายในคลาสจะกำหนดเพียงเมดธอดตั้งต้นจะไม่มีการกำหนดเนื้อหาข้างในเมดธอดเอาไว้เพราะจะเป็นหน้าที่ของคลาสที่มาสืบทอดต้องกำหนดเนื้อหาข้างในเมดธอดให้สมบูรณ์

Abstract class in C#
ในภาษา C# มีข้อกำหนดว่าชื่อของคลาสและชื่อเมดธอดของ Abstract class ต้องมี keyword ว่า abstract
Abstract method
Abstract class สามารถมีทั้งเมดธอดที่เป็น Abstract method และไม่เป็นก็ได้เมดธอดที่ไม่มีการกำหนดเนื้อหาข้างในเรียกว่า Abstract method ส่วนเมดธอดที่มีการกำหนดเนื้อหาภายในไว้แล้วเรียกว่า Concrete method
Inheritance
คลาสที่สืบทอด Abstract class จะใช้ : หลังชื่อคลาสตามด้วยชื่อคลาสที่ต้องการจะสืบทอด คลาสที่สืบทอดจะต้องทำการ Override เมดธอดทั้งหมดที่เป็น Abstract method เข้ามาและกำหนดเนื้อหาคำสั่งที่ต้องการจะทำภายในเพิ่มในส่วนของเมดธอดที่เราจะทำการ Override จะมี keyword ว่า override หลังระดับการเข้าถึงของเมดธอด(Access Modifier)
Object class
การสร้างตัว Object เพื่อใช้เรียกใช้งานคลาสจะทำในส่วนของ Class main โดยการสร้าง Object เรียกใช้ Class ที่สืบทอดมาจาก Abstract class สามารถสร้างได้สองแบบ
Output
Abstract class ที่ทำงานร่วมกับ get กับ set
เปรียบเทียบการใช้ Abstract class กับภาษาอื่น
Java
โดยรวมแล้ว Java มี Syntax ที่คล้ายกับภาษา C# อยู่แล้วเลยทำให้โครงสร้างและรูปแบบการเขียนไม่ต่างกันมาก เปลี่ยนตรงคลาสที่มาสืบทอด Abstract class จะใช้ keyword ว่า extends แทน และเมดธอดที่ต้องการ Override จะไม่มี keyword ว่า abstract สามารถสร้างเป็นเมดธอดปกติที่ใช่ชื่อเหมือน Abstract method ที่เราต้อง Override ได้เลย
C++
Abstract class in C++
ในภาษา C++ มีการสร้าง Abstract class คลาสเหมือนคลาสปกติทั่วไปแต่เมื่อมี Pure virtual method เพียงอันเดียวจะถือว่าคลาสนั้นเป็น Abstract class ทันที
Abstract method จะถูกเรียกว่า Pure virtual function ใน C++ และการกำหนดให้ = 0 เพื่อทำให้เป็น Pure virtual function เป็นการบังคับให้ไม่มีการ Implement เนื้อหาข้างในแต่ให้คลาสที่จะมาสืบทอดทำในส่วนนั้นแทน
Inheritance
จะใส่ : หลังชื่อคลาสตามด้วยชื่อ Abstract class ที่ต้องการจะสืบทอด เมดธอดที่ Override จาก Abstract class จะมี Keyword ว่า override หลังชื่อคลาส
Abstract class ที่ทำงานร่วมกับ get กับ set
การทำงานของ Getter และ Setter จะทำงานเหมือนกับ Method ปกติที่มีการส่งค่าและเซ็ตค่า
Python
Abstract class in Python
Python ต้องมีการ Import ตัว ABC และ abstractmethod มาเพื่อใช้ ในการสร้าง Abstract class จะใส่ ABC ที่ Import เข้ามาใส่ในวงเล็บหลังชื่อคลาสเพื่อกำหนดว่าเป็น Abstract class
และเมดธอดทุกอันที่ต้องการให้เป็น Abstract method เราจำเป็นที่ต้องใส่ @abstractmethod นำหน้าเมดธอดทุกครั้ง และภายในเมดธอดต้องใส่ pass เพื่อเป็นการไม่กำหนดเนื้อหาข้างในตัวเมดธอด
Inheritance
คลาสย่อยที่ต้องการสืบทอด Abstract class ต้องใส่ชื่อคลาสที่ต้องการสืบทอดลงในวงเล็บเพื่อบอกว่าเรากำลังสืบทอดคลาสอะไรอยู่ในตอนนี้ เมดธอดที่ Override จะสร้างเหมือนเมดธอดปกติ เพียงแต่เราจะใช้ชื่อที่เหมือนกับ Abstract method และ Implement ในส่วนของเนื้อหาข้างในขึ้นมา
Abstract class ที่ทำงานร่วมกับ get กับ set
ชื่อของ Getter และ Setter ต้องเหมือนกัน โดยถ้าเป็น Getter จะเพิ่ม @property แต่ถ้าเป็น Setter จะใส่ชื่อคลาสตามด้วย .setter ถ้าตามตัวอย่างจะใส่ @Power.setter
reference :
C# | Abstract Classes : https://www.geeksforgeeks.org/c-sharp-abstract-classes/
C# Abstract : https://www.javatpoint.com/c-sharp-abstract
C++ Abstract Class and Pure Virtual Function : https://www.programiz.com/cpp-programming/pure-virtual-funtion
abc — Abstract Base Classes : https://docs.python.org/3/library/abc.html
Last updated
