Please enable JavaScript.
Coggle requires JavaScript to display documents.
Object-Oriented Programming (Polymorphism (มาทำความรู้จัก Polymorphism…
Object-Oriented Programming
Encapsulation
คือ ความสามารถในการซ่อนปิดบังข้อมูลที่มีอยู่กับคลาสนั้นๆ ป้องกันการเข้าถึงข้อมูล data จาก 3rd party และ Class อื่นๆ, ในส่วนของการแก้ไขค่า หรือเข้าถึงค่า ต้องทำผ่าน method เท่านั้น
class User {
String firstName;
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) { this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) { this.lastName = lastName; } }
จากโค้ดข้างต้น จะเห็นว่า ไม่มีใครเข้าถึง firstName
และ lastName ของ class User ได้
แต่ต้องเข้าถึงผ่าน getter setter เท่านั้น
Polymorphism
การจำแลงกายของ class ต่างๆ ส่วนคำที่ใช้ท่องจำเป็นส่วนตัวคือ การมองมุมกลับ และปรับมุมมอง
จาก class diagram ข้างบน เราสามารถมองว่า Square คือ Square หรือ เราจะมองมุมกลับว่า Square คือ Rectangle หรือกลับไปกว่านั้นอีก เราจะมองว่า Square คือ Shape2D ก็ได้, แต่เราต้องปรับมุมมอง เราไม่สามารถมองว่า Shape2D คือ Square
ประโยชน์ของ Polymorphism ทำให้เราสามารถมอง Object ใดๆ ก็ตามในอีกมุมมองที่ Abstract ขึ้นได้ เช่น ถ้าโรงงานต้องการคำนวณพื้นที่ทั้งหมดของรูปทรงเรขาคณิต เพื่อจะได้ไปซื้อสีในปริมาณที่พอเหมาะมาทา, Polymorphism ช่วยในเราไม่ต้องสนใจ “รูปร่าง” แต่เป็น “พื้นที่” ที่เราสนใจแทน ทำให้เราไม่ต้องมาคอยเช็คว่าเป็นสามเหลี่ยมหรือ สี่เหลี่ยม เพียงมองมันเป็นรูปร่างเท่านั้น
มาทำความรู้จัก Polymorphism มากขึ้น
Dynamic polymorphism, Dynamic Binding, Late Binding
การกำหนดชนิดของ Object ในขณะ run-time ซึ่งวิธีนี้ จะสนับสนุนหลักการ การทำงานของ Polymorphism เป็นอย่างมาก และทำให้เราสามารถเขียนโปรแกรมได้ยืดหยุ่นมากขึ้น
Override VS Overloading
Override กับ Overloaded ไม่ได้ต่างกันที่ชื่อ แต่ต่างกันในแง่ของการใช้งานเลยทีเดียว Overloading คือการที่ Class มี Method ชื่อซ้ำกัน แต่พารามิเตอร์ไม่เหมือนกัน Override คือการที่ Class ลูกสืบทอด method มา แล้วทำการนิยาม method เดิมใหม่
Static and dynamic polymorphism
คือการกำหนดชนิดของ Object ใน Compile time
Inheritance
การสืบทอด จะเป็นการมองว่า วัตถุนั้นมีคุณสมบัติของการมี… และการเป็น… — งง แน่นนอน
ดังนั้นคุณสมบัติในการมี และการเป็นจึงเป็นเรื่องสำคัญของ Inheritance — ประโยชน์ของ Inheritance อีกข้อที่เห็นได้ชัด คือเราสามารถสืบทอด class ไปยัง class อื่นๆ ที่มีคุณสมบัติที่เหมือนกัน แต่มี “รายละเอียด” ที่แตกต่างกันไป ได้อีกด้วย เช่น
DataAbstraction
การสร้าง Class, Object หรือ Type ในรูปของ Interface และ function เท่านั้น โดยไม่มีการสร้างรายละเอียดให้กับ Class แต่อย่างใดเช่น
interface Shape2d {
fun getArea(): Double
}
จากโค้ดคือการสร้าง Interface ของ Shape2D โดยมีความสามารถในการหาพื้นที่ แต่ไม่ได้มีการกำหนดแต่อย่างใดว่าจะใช้สูตรคณิตศาสตร์สูตรไหนในการคำนวณพื้นที่ ประโยชน์ของ DataAbstraction จะถูกนำไปใช้ในเรื่องของการ Inheritance ต่อไป