Please enable JavaScript.
Coggle requires JavaScript to display documents.
สรุป Concept OOP (POLYMORPHISM (ใน delivered class ทั้งสอง เราได้ทำการ…
สรุป Concept OOP
POLYMORPHISM
คือการที่ออบเจ็คสามารถมีได้หลายรูปแบบ ซึ่งเกิดจากการสืบทอดจาก super class และมันยังคงรักษาสภาพและคุณสมบัติของ super class ไว้ เช่น ผู้คนในโลก จะมีทั้งนักกีฬา นักร้อง นักดนตรี ซึ่งมันก็คือการมีหลายรูปแบบทางอาชีพของบุคคล ซึ่งเราสามารถใช้คำว่า บุคคล ในการอ้างถึงคนในอาชีพต่างๆ
ในการเขียนโปรแกรมเชิงวัตถุ Polymorphism นั้นคือการสร้างออบเจ็คโดยเป็นออบเจ็คที่สร้างมาจากคลาสที่มี Super class เดียวกัน โดยใน Sub class นั้นได้มีการกำหนดการทำงานใหม่ให้กับเมธอดให้ตรงกับวัตถุประสงค์ของคลาสนั้น หรือการ Override method หลังจากนั้นเราสามารถใช้ Super class สำหรับการประกาศตัวแปรของออบเจ็ค (class instance) ที่สร้างออบเจ็คจาก Sub class
ใน delivered class ทั้งสอง เราได้ทำการ override เมธอด introduce เพื่อแสดงข้อมูลเพิ่มเติม และต่อไปเป็นการใช้งานคุณสมบัติของ polymorphism ในจากโค้ด
-
เราได้ใช้คลาส Person ในการประกาศออบเจ็ค (instances) มา 3 ตัวแปร และเราใช้ instances ของคลาสนี้ในการสร้างออบเจ็คจากคลาสต่างๆ ซึ่งก็คือ Person, Sheriff และ Police นั่นหมายความว่า ตัวแปรที่สร้างจากคลาส Person นั้นมีได้หลายรูปแบบ ในตัวอย่างนั้นมี 3 แบบด้วยกัน
-
ต่อมาเป็นการเรียกใช้งานเมธอด introduce ของแต่ละออบเจ็คซึ่งสร้างมาจากคลาสที่แตกต่างกัน สำหรับ delivered class นั้นเมธอด introduce ถูกทำการ override เพื่อให้แสดงข้อมูลเพิ่มเติม
ข้อได้เปรียบของ polymorphism คือการที่สามารถจัดการกับออบเจ็คที่สืบทอดมาจากคลาสเดียวกันได้ โดยใช้ super class ของมันในการประกาศออบเจ็ค
-
ในตัวอย่าง เรามีคลาส Shape ในการกำหนดรูปทรง ซึ่งคลาสนี้มีเมธอด draw() เพื่อเป็นการวาดรูปทรงในคลาส และต่อมาเราได้สร้างอีกสองคลาสคือ Rectangle และ Triangle ที่มีการสืบทอดมาจากคลาส Shape และทำการ Override เมธอด draw() เพื่อให้สอดคล้องกับการทำงานของคลาสทั้งสอง
-
ในการเริ่มทำงานของโปรแกรม เราได้สร้าง ArrayList โดยการใช้คลาส Shape เป็น instance ของออบเจ็ค ดังนั้นเราจึงสามารถนำไปสร้างออบเจ็คที่สืบทอดจากจากคลาสนี้ได้ นั่นก็คือเราได้สร้างออบเจ็คจากคลาส Rectangle และ Triangle และเก็บใน ArrayList ดังนั้น ตัวแปร shapes สามารถมีได้หลายรูปแบบของออบเจ็คที่สืบทอดจาดคลาส Shape ซึ่งนี่เองถือเป็นแนวคิดของการใช้งาน Polymorphism
-
นอกจากนี้ เมธอด drawShape() เป็นเมธอดสำหรับการวาดรูปทรงที่มีพารามิเตอร์เป็น Shape ดังนั้นเราไม่ต้องสนใจว่าออบเจ็คที่ส่งเข้ามาจะเป็นออบเจ็คของ Rectangle หรือ Triangle ซึ่งเราสนใจแต่สิ่งที่เราต้องการทำคือการเรียกใช้งานเมธอด draw() ซึ่งกลไกลของ Polymorphism จะเรียกใช้งานเมธอดของออบเจ็คอัตโนมัติ
ผลลับ
-
Access Modifiers
เมื่อเราพูดเกี่ยวกับ Encapsulation มันมักจะเกี่ยวข้องกับการกำหนดการเข้าถึง ประเภทข้อมูลและตัวแปรต่างๆ นั้นจะมีระดับการเข้าถึง ซึ่งเป็นสิ่งที่ใช้บอกว่ามันจะมีขอบเขตในการใช้งานของโปรแกรมส่วนนี้หรือส่วนอื่นด้วยหรือไม่ ตัวกำหนดการเข้าถึงมักจะใช้กับออบเจ็คใน Namespace หรือคลาส นี่เป็นรายการของตัวกำหนดการเข้าถึงในภาษา C#
public
วแปรสามารถเข้าถึงได้โดยโปรแกรมในส่วนเดียวกัน หรือจากโปรแกรมในส่วนอื่นๆ เช่น อยู่คนละ namespace หรือไฟล์
-
protected
ตัวแปรสามารถเข้าถึงได้โดยคลาสเดียวกันหรือ struct เดียวกัน หรือในคลาสที่ได้รับการถ่ายทอด (inherit) มายัง
internal
ตัวแปรสามารถเข้าถึงได้โดยโปรแกรมเดียวกันเท่านั้น หรือในคลาสเดียวกัน ไม่สามารถเข้าถึงจากภายนอกคลาสได้
method
method ก็คือระเบียบวิธีในการทำงาน ซึ่งเป็นกลุ่มการทำงานของข้อมูล เป็นส่วนย่อยภายในโปรแกรม เพื่อให้ง่ายต่อการจัดการกลุ่มข้อมูล method มีทั้งที่สร้างขึ้นเอง และมีให้บริการจาก java รอเพียงการถูกเรียกใช้เท่านั้น
ทำไมถึงต้องใช้ method
สามารถนำโต้ดที่ได้เขียนไปแล้ว กลับมาใช้ใหม่ได้ ในการทำสิ่งเดียวหลาย ๆ ครั้ง เป็นเรื่อง ธรรมดาสำหรับโปรแกรม นั่นคือเราสามารถใช้ method มาทำงานซ้ำ ๆ กันได้ เพียงแค่เรียกใช้เท่านั้น
สามารถลดความซับซ้อนของโปรแกรมได้ อย่างเช่น เราสามารถตั้งชื่อ local variable ให้เหมือน global variable ได้ เพื่อลดความสับสนในการเขียนโปรแกรม ที่มีตัวแปรซ้ำซาก ซับซ้อน
ง่ายต่อการเขียน top-down programming ซึ่ง top-down programming นั้นจะแก้ปัญหาขนาดใหญ่ ไปเป็นปัญหาขนาดย่อย ซึ่ง method ก็ทำงานได้ตรงตามความต้องการพอดี
ช่วยในการแยกแนวความคิดออกจากกัน นั่นคือ เราจะสามารถแยกแนวความคิด แต่ละอย่าง เขียนแยกกันไว้ แล้วค่อยนำมารวมกันทีหลัง ซึ่งเกิดจากการเรียกใช้
Method categories
Getter
เป็น methods สำหรับการคืนค่าต่าง ๆ สำหรับ object ซึ่งอาจจะจำแนกการคืนค่าได้เป็น 2 แบบ นั่นคือ คืนเป็นแบบ boolean ซึ่งมักขึ้นต้นชื่อด้วยคำว่า is หรือ has และแบบ คืนเป็นค่าต่าง ๆ ซึ่งมักจะขึ้นต้นด้วยคำว่า get
Setter
เป็น methods สำหรับการกำหนดค่าต่าง ๆ สำหรับ object ซึ่งโดยปกติ methods ประเภท setter นี้จะไม่มีการคืนค่า และส่วนมากจะขึ้นต้นชื่อของ methods ด้วยคำว่า set
-
-
-
แนวคิดแบบ OOP
OOP ก็คือ “ธรรมชาติของวัตถุ” หมายความว่า OOP จะมองสิ่งแต่ละสิ่งถือเป็น “วัตถุชิ้นหนึ่ง” (Object) มันจะมีสีแดงหรือสีเขียว ยาวหรือสั้น มันก็คือวัตถุชิ้นหนึ่งเหมือนกัน และเราสามารถกำหนดประเภทหรือคลาสให้กับวัตถุเหล่านั้นได้
นอกจากนี้ เมื่อ OOP มองทุกสิ่งถือเป็นวัตถุชิ้นหนึ่งแล้ว ยังสามารถคิดต่อไปอีกว่า “วัตถุแต่ละอย่างนั้น ต่างก็มีลักษณะและวิธีการใช้งานเป็นของตัวเอง” หมายความว่า วัตถุแต่ละชนิดหรือแต่ละชิ้นต่างก็มีรูปร่าง ลักษณะ และการใช้งาน (การกระทำ) ที่แตกต่างกันออกไป เราจะเรียกคุณลักษณะของวัตถุว่า แอตทริบิวต์ (Attribute) และจะเรียกวิธีการใช้งานวัตถุว่า เมธทอด (Method) ตัวอย่างเช่น “ดินสอเป็นวัตถุที่มีลักษณะเรียวยาว ภายในเป็นไส้ถ่านใช้สำหรับเขียน การใช้ดินสอทำได้โดยใช้มือจับและเขียนลงบนวัสดุรองรับ”
คุณลักษณะของวัตถุ (Attribute) ก็คือ “ยาวเรียว ภายในเป็นไส้ถ่าน” ส่วนการใช้งาน (Method) ก็คือ “ใช้มือจับและเขียนลงบนวัสดุรองรับ”
จะเห็นได้ว่าแนวคิดของ OOP นั้นจะมีลักษณะที่คล้ายกับธรรมชาติของสิ่งหนึ่งซึ่งสามารถแบ่งแยกสิ่งต่าง ๆ ออกเป็นแต่ละประเภทได้ ถ้านำเอาแนวคิดของ OOP มาใช้ในการเขียนโปรแกรมและการจัดการข้อมูล จะพบว่าโปรแกรมหรือฟังก์ชันจะมีความเป็นอิสระแก่กันอย่างเห็นได้ชัด ก็คือ โปรแกรมหรือฟังก์ชันแต่ละตัวถึงแม้จะมาจากที่เดียวกันแต่สามารถทำงานในคนละหน้าที่ เก็บข้อมูลคนละค่าได้ โดยจะไม่มายุ่งเกี่ยวกันแต่อย่างใด
-
Inheritance
เป็นคุณสมบัติในการเขียนโปรแกรมเชิงวัตถุที่เรียกว่าคุณสมบัติการสืบทอด โดยที่คลาสสามารถสืบทอดสมาชิกของมันจากคลาสหลัก (super class) ไปยังคลาสย่อย (delivered class) โดยการสืบทอดในภาษา Java นั้นสมาชิกทั้งหมดจะถูกสืบทอดไปยังคลาสย่อย ยกเว้นสมาชิกที่มีระดับการเข้าถึงเป็น private และ constructor ของมัน
ในการสืบทอดคลาส นอกจากมันจะได้รับสมาชิกจากคลาสแม่แล้ว ยังสามารถเพิ่มสมาชิกและเมธอดของมันเองได้ ทำให้มันมีความสามารถเพิ่มมากขึ้น นี่เป็นรูปแบบการสืบทอดของคลาสในภาษา Java
-
-
สร้าง Inheritance คลาส
-
ตัวอย่างเป็นคลาส Person ของเรา เราจะใช้คลาสนี้ในการสืบทอดคุณสมบัติให้กับคลาสอื่น ซึ่งหมายความว่าคลาสนี้จะเป็น super class
-
-
คำสั่ง Super
นอกจากคำสั่ง this ที่เป็นคำสั่งบอกการเข้าถึงสมาชิกในคบาสปัจจุบันแล้ว คุณยังสามารถเข้าถึงสมาชิกหรือ constructor ของ super class ได้โดยการใช้คำสั่ง super มันใช้กับคลาสหรือเมธอดที่ถูก Override มาดูตัวอย่างการใช้คำสั่ง super ในภาษา Java
-
จากตัวอยางข้างบน เราได้ใช้คำสั่ง super ใน constructor ของคลาสย่อยในคำสั่ง super(name, age) เพราะมามันมีการทำงานเหมือนคลาสแม่ เราไม่จำเป็นต้องเขียนใหม่ ต่อมาเราได้ใช้ในเมธอด introduce super.introduce() เพื่อเรียกการทักทายจาก super class เช่นกัน เมื่อคุณนำคลาสข้างบนไปรันมันจะได้ผลลัพธ์เช่นเดียวกันกับตัวอย่างใน override ก่อนหน้า
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ Inheritance (คุณสมบัติการสืบทอด) ในภาษา Java ซึ่งคุณได้เห็นว่าคุณสามารถนำคุณสมบัติของคลาสเดิมมาใช้ โดยไม่ต้องเขียนใหม่ทั้งหมด นอกจากนี้ยังเพิ่มเติมคุณสมบัติและเมธอดเพิ่มเข้าไปได้ คุณยังได้เรียนรู้เกี่ยวกับการ override เมธอดจาก super class และการใช้คำสั่ง super
-
Encapsulation
Encapsulation (คุณสมบัติการห่อหุ้ม) เป็นคุณสมบัติหนึ่งของการเขียนโปรแกรมเชิงวัตถุ ซึ่งเป็นการกำหนดความสามารถในการเข้าถึงสมาชิกภายในคลาส ไม่ว่าทั้งจากภายนอกและภายในคลาสก็ตาม มันถูกใช้เพื่อทำให้ข้อมูลภายในเป็นความลับและมีความปลอดภัย และง่ายต่อการเขียนโปรแกรม
เป็นแนวคิดที่ได้มาจากในชีวิตจริง ในการเขียนโปรแกรมเชิงวัตถุเรามองทุกอย่างเป็นเหมือนออบเจ็คในโลกจริง ยกตัวอย่างเช่น เมื่อคุณต้องการซื้อตั๋วรถไฟฟ้าที่เครื่องจำหน่ายตั๋วอัตโนมัติ คุณจะต้องใส่เงินเข้าไปในเครื่องและเครื่องจะส่งตั๋วให้กับคุณ ในการทำงานที่จะได้ตั๋วมาให้คุณนั้นมีการทำงานภายในซ่อนอยู่ สิ่งเหล่านั้นเป็นสิ่งที่ถูกปกปิดหรือเราเรียกว่า Encapsulation มันไม่จำเป็นที่คุณจะต้องทราบว่าเครื่องนี้ทำงานยังไง แต่สิ่งที่คุณจะต้องรู้คือการใช้งานเครื่องนี้เพื่อที่จะซื้อตั๋ว
ความรู้เกี่ยวกับ OOP
เนื่องจากหลักการเขียนโปรแกรมเชิงวัตถุเป็นแนวคิดแบบใหม่ ดังนั้น การทำงานหลาย ๆ ส่วนของการเขียนโปรแกรมแบบนี้อาจจะยังไม่เป็นที่คุ้นเคยมากนัก จึงจำเป็นที่ผู้ศึกษาต้องทำความเข้าใจการทำงานของแนวคิดนี้ได้ดียิ่งขึ้น ข้อควรรู้เบื้องต้นเกี่ยวกับ OOP มีดังนี้
การเชื่อมต่อ (Interface)
อินเตอร์เฟส (Interface) หมายถึง การเชื่อมต่อ ถ้าเป็นการเชื่อมต่อระหว่างผู้ใช้กับคอมพิวเตอร์ จะเรียกการเชื่อมต่อนั้นว่า ยูสเซอร์อินเตอร์เฟส (User Interface) แต่ในการเขียนโปรแกรมเชิงวัตถุ การเชื่อมต่อยังรวมไปถึงวัตถุ (Object) เพราะในวัตถุจะต้องมีอินเตอร์เฟส อันเป็นส่วนที่วัตถุนั้น ๆ
-
-
-
-
Overriding Super Class
ในการสืบทอดจาก super class มายัง delivered class นั้น delivered class ยังสามารถ override การทำงานของเมธอดใน super class ได้ โดยการ override เมธอดในภาษา Java นั้นจะใช้คำสั่ง Override นำหน้าเมธอดที่ต้องการ
-
-
จากตัวอย่างเป็นการ override เมธอด introduce() จาก super class เพื่อให้กล่าวคำทักทายที่แตกต่างกันออกไปสำหรับแต่อาชีพ ตอนนี้ให้คุณคัดลอกคาสทั้งสองไปแทนทีแบบเดิมที่ไม่มีการ override แล้วรันโปรแกรมดูใหม่
-
ซึ่งจะได้ผลลัพธ์การทำงานดังด้านบน การแนะนำจะต่างกันออกไปสำหรับแต่ละคลาส ซึ่งเกิดจากการ Override เมธอด introduce()