OOP in Dart — มาเรียนรู้ OOP ผ่าน Dart กันเถอะ [ep.0 : OOP คืออะไร???]

Art Chawarat
3 min readAug 3, 2023

--

บางคนในที่นี้อาจจะรู้จัก dart ไม่ก็รู้จัก oop มาแล้วบ้าง หรือบางคนก็อาจจะยังไม่รู้จักอย่างใดอย่างนึงเลย

แล้วสองอย่างนี้มันเกี่ยวข้องกันยังไง?

หากอยากเริ่มเรียน dart แต่ยังไม่ทราบพื้นฐาน oop จะเรียนรู้เรื่องไหม?

ในบทความนี้มีคำตอบให้ครับ

ก่อนอื่นที่เราจะมาเริ่มเข้าเนื้อหากันผมอยากจะมาแนะนำสิ่งที่ทุกคนต้องรู้จักก่อน เพื่อที่จะไม่งงในการอธิบายในหัวข้อถัดๆไปนะครับ โดยสิ่งแรกก็คือหนึ่งในตัวเอกของเราในซีรีส์นี้ นั่นก็คือ Dart ครับ เพื่อไม่เป็นการเสียเวลา เราไปรู้จัก Dart กันเลย

Dart คืออะไร ?

Dart นะครับ เป็นภาษาโปรแกรมมิ่งตัวหนึ่ง พัฒนาโดย Google สามารถใช้พัฒนาแอปพลิเคชั่นได้หลากหลายแพลตฟอร์มเลย ไม่ว่าจะเป็น Android, iOS, เว็บ, เดสก์ท็อป ฯลฯ โดยมันเป็นภาษาที่ทันสมัย เข้าใจง่าย และมีความนิยมตัวนึงในขณะนี้เลยแหละ ซึ่งไอ้เจ้า Dart เนี่ยมันก็จะเฟรมเวิร์คที่ใช้ภาษา Dart อยู่ โดยมันเป็นเฟรมเวิร์คที่ดังและยอดนิยมเป็นอย่างมาก มันก็คือ Flutter นั่นเองงงง เริ่มคุ้นๆหูกันแล้วใช่ไหมครับ

Flutter ตัวนี้นี่แหละครับ เป็นตัวที่ทำให้การพัฒนาแอปพลิเคชั่นแบบ Closs-Platform มันทำได้ง่ายขึ้นโดยใช้ภาษา Dart ซึ่ง Flutter จะประกอบไปด้วย 2 ส่วนที่สำคัญ คือ SDK (Software Development Kit) ที่ช่วย compile code ให้เป็นรหัสเครื่องดั้งเดิม (ของทั้ง iOS และ Android) และ Framework หรือ ชุดองค์ประกอบ UI ครับ

ซึ่ง Dart นะครับจะมีความเป็น OOP เหมือนกับ Java, C++, Python เลยครับ ถ้าหากใครคุ้นเคยกับภาษาที่กล่าวมาข้างต้นแล้ว คงจะเรียน Dart ได้ไม่ยาก แต่ถ้าใครที่ยังไม่คุ้นเคยเลยล่ะก็ เดี๋ยวเรามาเรียนรู้ OOP ผ่าน Dart ไปพร้อมๆกันครับ

OOP คืออะไร ?

OOP หรือ Object Oriented Programming ถ้าแปลเป็นไทยตามตรงเลยมันคือ การเขียนโปรแกรมเชิงวัตถุ ครับ ซึ่งมันเป็นแนวคิดหนึ่งที่มองโปรแกรมของเราเป็น วัตถุ (Object) และจะมีการปฏิสัมพันธ์กันของวัตถุต่างๆครับ โดยวัตถุนั้นก็จะมี คุณสมบัติ (Attributes) และ พฤติกรรม (Methods) ประจำตัวของมันครับ พูดง่ายๆคือ มันเป็นแนวคิดที่เรามองโปรแกรมให้เป็นรูปเป็นร่างมากขึ้น ซึ่งมันจะช่วยให้เราจับต้องโปรแกรมของเราได้ง่าย แนวคิดนี้จึงเป็นที่นิยมอย่างมากในปัจจุบัน

ตอนนี้เราเริ่มได้รับศัพท์ใหม่ๆกันมาแล้วใช่ไหมครับ ทั้ง Object, Attributes, Methods แล้วไอ้สามคำนี้มันคืออะไรกันนะ เดี๋ยวผมจะมายกตัวอย่างให้เห็นภาพมากขึ้นกัน

Object : แปลตามตัวมันก็คือวัตถุตัวหนึ่งนี่แหละครับ เช่น Cat หรือ แมว ตามภาพนี้ครับ

Attributes : หรือ คุณสมบัติของ Object นั้น ก็คือ ชื่อของแมวตัวนี้, สี, พันธุ์, อายุ …

Methods : หรือ พฤติกรรมของ Object อย่างเช่นตัวอย่างนี้ก็จะเป็น แมววิ่ง, แมวกิน, แมวนอน อะไรประมาณนี้ครับ

ตัวอย่าง Object, Attributes และ Methods

พอจะเริ่มเข้าสู่โลกของการมองโปรแกรมเป็น Object กันแล้วนะครับ งั้นเรามารู้จักสิ่งต่อไปกันเลย สิ่งนี้ครับมันคือตัวต้นแบบหรือพิมพ์เขียว ในการสร้าง Object ขึ้นมา สิ่งนี้มันคือ Class ครับ

Class : ก็ตามที่ผมเกริ่นข้างต้นเลย Class มันเปรียบเสมือนต้นแบบที่เรานำมาสร้าง Object ขึ้นมาครับ ถ้าเราสร้าง Object ใดๆมาจาก Class เดียวกันแล้ว ทั้งสอง Object ย่อมจะมี Attributes และ Methods พื้นฐานที่เหมือนกัน ยกตัวอย่างเช่น

Class ที่ชื่อว่า Animal มี Attributes คือ name, color, breed และมี Methods คือ canRun(), canEat(), canSleep()

โดย Class นี้ถูกนำมาสร้างเป็น Object สองตัวคือ Cat และ Dog โดยทั้งสอง Object นี้ก็จะสืบทอด Attributes และ Methods พื้นฐานทั้งหมดของ Class แต่ในแต่ละ Object ก็อาจจะเพิ่ม Attributes หรือ Methods ของตัวเองเข้ามาด้วยก็ได้

ตัวอย่างการสร้าง Object จาก Class

จากภาพจะเห็นว่า Object Cat มีการสืบทอดทุก Attributes และ Methods จาก Class Animal และมีการเพิ่ม Attribute ของตัวเองมาคือ size ส่วน Method ก็มีการเพิ่ม canMeow() มาด้วย เช่นเดียวกันใน Object Dog ก็มีการสืบทอดทุก Attributes และ Methods จาก Class Animal และมีการเพิ่ม Attribute ของตัวเองมาคือ owner และเพิ่ม Method canBark() มาด้วย

เอาล่ะครับ เราได้รู้จักศัพท์ต่างๆพื้นฐานของ OOP กันแล้ว ต่อไปผมจะพาทุกคนมารู้จักกับ “ 4 เสาหลักแห่ง OOP ” กันครับ นั่นก็คือ Encapsulation, Inheritance, Polymorphism, Abstraction

4 เสาหลักแห่ง OOP

1. Encapsulation

ตัวแรกครับ Encapsulation หรือ การห่อหุ้ม เป็นการห่อสถานะหรือข้อมูลของ object ให้ภายนอกไม่สามารถเข้าถึงได้ หากต้องการเข้าถึงต้องทำผ่านตัวจัดการ (getter/setter) หรือเราสามารถกำหนดสถานะว่าต้องการให้เข้าถึงข้อมูลได้หรือไม่ผ่านทาง private หรือ _ (underscore) นำหน้าที่ชื่อตัวแปร

Encapsulation in Dart

2. Inheritance

ตัวต่อมา Inheritance หรือ การสืบทอดสิ่งที่คือการที่ Class แม่ (super class/ parent class) สามารถสืบทอด (Extends) ความสามารถต่างๆให้ Class ลูก (sub class/ child class) ของตัวเองได้ โดย Class ลูกจะได้รับความสามารถทั้งหมดมาจาก Class แม่ นอกจากนั้นยังสามารถเพิ่มความสามารถเพิ่มเติมจาก Class แม่ได้อีกด้วย

การที่ Class แม่ (Class Animal) สืบทอดสิ่งต่างๆให้ Class ลูก (Class Cat, Class Dog)

จากตัวอย่างจะเห็นว่า Class Cat และ Class Dog จะสืบทอดทั้ง Attributes และ Methods มาจาก Class Animal ทั้งหมด นอกจากนั้นจึงเพิ่ม Attribute และ Method ของตัวเอง (ไฮไลท์สีเหลือง) เข้ามาด้วย

3. Polymorphism

Polymorphism หรือ การพ้องรูป คือการที่มี Object คล้ายๆกันหลายรูปแบบ เพราะเกิดจาก Class แม่เดียวกัน ดังเช่นตัวอย่างเดิมเลยจะเห็นได้ว่า Class Cat กับ Class Dog ก็มีความพ้องรูปกัน เพราะว่าเกิดจาก Class Animal เหมือนกัน

Class Cat และ Class Dog มีความพ้องรูปกัน

4. Abstraction

เป็นการแสดงและเปิด Attributes และ Methods บางส่วนเท่าที่จำเป็นของ Object เราเท่านั้นให้ผู้อื่นเห็นและใช้งานได้ โดยไม่จำเป็นต้องแสดงความสามารถอื่นออกมา ถ้ายกตัวอย่าง Abstraction ในชีวิตประจำวันก็เช่น เราสามารถใช้งานคอมพิวเตอร์ได้ ทั้งๆที่เราไม่ทราบการทำงานภายในของมันด้วยซ้ำครับ

Abstraction ในชีวิตจริง

ครับ ก็จบไปแล้วครับสำหรับ ep.0 ของเรา การที่เรามารู้จัก OOP ก่อนจะเริ่มเรียน Dart เนี่ยก็จะช่วยเราได้เยอะเลยนะครับ ในการเข้าใจการทำงานต่างๆ ซึ่งผมก็จะมีแนะนำใน ep. ต่อๆไปด้วยครับ โปรดติดตามกันต่อนะครับ แล้วผมก็จะมาเรียนรู้ Dart ใหม่ไปพร้อมๆกับทุกคน สำหรับวันนี้ สวัสดีครับบบ 🙏

Next Episode → ep1. Class and Object

--

--