การเขียนโปรแกรมในแนวทาง Object-Oriented Programming (OOP) ถือเป็นหลักการที่ช่วยให้การพัฒนาซอฟต์แวร์เป็นไปได้อย่างมีระบบและง่ายขึ้น ใน OOP หนึ่งในแนวคิดสำคัญคือการสืบทอดคุณสมบัติ (Inheritance) ซึ่งเป็นการสร้างคลาสใหม่ที่ได้รับคุณสมบัติจากคลาสที่มีอยู่แล้ว โดยการทำ Multiple Inheritance เป็นการสืบทอดคุณสมบัตินั้นจากหลายคลาสพื้นฐานมายังคลาสลูก
สำหรับภาษา Fortran ซึ่งเป็นภาษาโปรแกรมที่มีชื่อเสียงในด้านการคำนวณทางวิทยาศาสตร์และวิศวกรรม การทำงานกับ OOP และ Multiple Inheritance สามารถทำได้ด้วยความระมัดระวัง แต่ควรทราบว่า Fortran จริง ๆ แล้วไม่รองรับ multiple inheritance ตามหลักการอย่างสมบูรณ์ เช่นเดียวกับภาษาอื่น ๆ เช่น C++ หรือ Python อย่างไรก็ตาม สามารถจำลองการทำงานที่คล้ายกับ multiple inheritance ได้โดยใช้ความสามารถของ type extension และ composition ใน Fortran
ในบทความนี้ เราจะพูดถึงวิธีการจำลอง multiple inheritance ในภาษา Fortran และเสนอตัวอย่างการใช้งานพร้อมตัวอย่างโค้ด ซึ่งจะช่วยให้คุณเข้าใจแนวคิดนี้ได้ดียิ่งขึ้น
ก่อนอื่นเรามาดูวิธีการสร้างคลาสพื้นฐานในภาษา Fortran:
module shapes_module
implicit none
type, public :: Shape
! คุณสมบัติพื้นฐานของรูปทรง
contains
procedure :: area => shape_area
! วิธีการสำหรับคำนวณพื้นที่
end type Shape
contains
real function shape_area(this)
class(Shape), intent(in) :: this
shape_area = 0.0
! การคิดพื้นที่ของ Shape, เป็นเพียงโครงสร้างไม่สามารถคำนวณได้จริง
end function shape_area
end module shapes_module
ต่อไปเราจะสร้างคลาสที่สืบทอดจากคลาส Shape แต่ใน Fortran จะเรียกว่า 'type extension':
module rectangle_module
use shapes_module
implicit none
type, extends(Shape) :: Rectangle
real :: width, height
contains
procedure :: area => rectangle_area
end type Rectangle
contains
real function rectangle_area(this)
class(Rectangle), intent(in) :: this
rectangle_area = this%width * this%height
end function rectangle_area
end module rectangle_module
เพื่อจำลอง multiple inheritance เราอาจต้องการหยิบคุณสมบัติจากอีกหนึ่งคลาสที่ไม่ใช่ Shape อาจเป็นคลาสสีเพื่อกำหนดสีใน Rectangle:
module color_module
implicit none
type, public :: Color
character(len=20) :: fill
end type Color
end module color_module
และสุดท้ายเราสร้างคลาสที่รวมคลาส Rectangle และ Color:
module colored_rectangle_module
use rectangle_module
use color_module
implicit none
type, extends(Rectangle) :: ColoredRectangle
type(Color) :: color
contains
procedure :: display_information => display_colored_rectangle
end type ColoredRectangle
contains
subroutine display_colored_rectangle(this)
class(ColoredRectangle), intent(in) :: this
print *, 'Rectangle Width: ', this%width
print *, 'Rectangle Height: ', this%height
print *, 'Rectangle Area: ', this%area()
print *, 'Rectangle Color: ', this%color%fill
end subroutine display_colored_rectangle
end module colored_rectangle_module
ในโค้ดด้านบนเราไม่ได้ทำ multiple inheritance อย่างแท้จริง แต่เราสร้างประสบการณ์ที่คล้ายคลึงด้วยการรวม type (composition) แทนที่จะ "สืบทอด" คุณสมบัติของ Color ไปยัง Rectangle โดยตรง
นี่คือการใช้งานที่จำลองการทำ multiple inheritance ใน Fortran โดยใช้จริงในการสร้างระบบจัดการข้อมูลสำหรับการวาดภาพทางวิศวกรรม คุณอาจมีรูปทรงที่ต้องการทำการคำนวณพื้นที่หรือวัดขนาดต่าง ๆ และต้องการกำหนดสีหรือคุณสมบัติอื่น ๆ เพิ่มเติมเพื่อประโยชน์ในการแสดงภาพหรือการพิมพ์งาน
การใช้ OOP ในลักษณะนี้จะช่วยให้โค้ดของคุณมีความยืดหยุ่นและการจัดการที่ดีขึ้น การวางแผนและการออกแบบคลาสจะเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าฟังก์ชันและคุณสมบัติที่ต้องการนั้นสามารถนำมารวมและใช้งานได้อย่างง่ายดายที่สุดในโค้ดของเรา
หวังว่าจากบทความนี้คุณจะได้เข้าใจเกี่ยวกับการใช้งาน multiple inheritance ในภาษา Fortran แม้ว่ามันจะไม่เป็นที่นิยมหรือมีการรองรับโดยตรงก็ตาม ถ้าคุณพบว่า OOP และการแก้ปัญหาด้วยการเขียนโปรแกรมเป็นสิ่งที่น่าสนใจ ทำไมไม่ลองศึกษาเพิ่มเติมที่ Expert-Programming-Tutor (EPT) ซึ่งเป็นสถานผู้ให้ความรู้ด้านการเขียนโปรแกรมในหลากหลายภาษาและทักษะทางเทคนิค บางทีคุณอาจค้นพบความสนุกสนานในการสร้างโค้ดและสร้างนวัตกรรมไปพร้อมกับเรา!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM