OOP 4 ด้าน

Encapsulation

Abstraction

Polymorphism

Inheritance

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

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

  • สามารถจำกัดสิทธิ์ในการใช้งานแอตทริบิวต์และเมธอดได้ด้วย เช่น เว็บ reg.ssru ที่นักศึกษา อาจารย์ และเจ้าหน้าที่ของมหาวิทยาลัย จะสามารถและเข้าถึงการใช้งานได้แตกต่างกัน ตามบริบทของแต่ละบุคคล

Access specifiers

3 หลักการออกแบบซอฟแวร์

  • public - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากทุกที่ในโปรแกรม
  • protected - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากในคลาสเดียวกันหรือคลาสที่ได้รับการสืบทอด (Inheritance)

Access specifiers คือคำสั่งในการกำหนดการเข้าถึงที่เราใช้กับการประกาศตัวแปรภายในคลาสหรือเรียกอีกอย่างหนึงว่า Property Visibility มี Access specifier อยู่ด้วยกัน 3 แบบดังนี้

  • private - ตัวแปรหรือเมธอดสามารถเข้าถึงได้จากในคลาสเดียวเท่านั้น

ซึ่ง Access specifiers เหล่านี้เป็นสิ่งที่กำหนดสำหรับการเข้าถึงข้อมูลภายในออบเจ็ค คำสั่ง private และ protected เป็นคำสั่งในการปิดปิดข้อมูล เพราะว่าเราไม่สามารถเข้าถึงสมาชิกประเภทนี้จากภายนอกของออบเจ็คได้ และ public เป็นตัวแทนในการติดต่อหรือการทำงานระหว่างภายในและภายนอกออบเจ็ค

  • หลีกเลี่ยงสถานะที่ไม่แน่นอนที่แบ่งปัน
  • จากโปรแกรมไปส่วนประสานผู้ใช้ไม่ใช่การใช้งาน
  • การเปลี่ยนแปลงข้อกำหนดเล็กน้อยย่อมจำเป็นต้องมีการเปลี่ยนแปลงเล็กน้อยในซอฟแวร์

xblog-Encapsulation

Overload Constructor

Multiple inheritance

ประเภทของคลาส

คลาสแม่ (Superclass)

คลาสลูก (Subclass)

เป็นคลาสต้นแบบที่สามารถนำแอตทริบิวต์และเมธอดของคลาสไปใช้กับคลาสอื่น ๆ ที่จะสร้างตามมาได้

สามารถรับเอาแอตทริบิวต์และเมธอดของคลาสแม่มาใช้ คลาสลูกสามารถพัฒนาต่อเติมแอตทริบิวต์และเมธอดของตัวเองได้ ซึ่งเราเรียกการกระทำนี้ว่า Overriding Method

Overriding เป็นการเปลี่ยนแปลงการทำงานของเมธอดในคลาสลูกที่สืบทอดมาจากคลาสแม่ เพื่อสร้างหน้าที่การทำงานใหม่ให้เกิดขึ้น และแตกต่างไปจากเดิมแต่ยังคงชื่อ Method เดิมเอาไว้นั้นเอง

เมธอดในคลาสลูกจะมีชื่อ ชนิดข้อมูลที่คืนค่า จำนวนและชนิดของข้อมูลของอากิวเมนต์ที่เหมือนกันกับคลาสแม่ สามารถพัฒนาเมธอดให้มีการทำงานในเรื่องเดียวกัน แต่แตกกันในรายละเอียดของการทำงาน

Constructor เป็นสิ่งที่คลาสลูกไม่สามารถสืบทอดจากคลาสแม่ได้ แต่คลาสลูกสามารถใช้คอนสตรัคเตอร์ของคลาสแม่ได้โดยใช้คีเวิร์ด super

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

คลาสสามารถสืบทอดคุณสมบัติจากคลาสแม่ได้มากกว่าหนึ่งคลาสพร้อม ๆ กัน อาจจะมี คลาสแม่มากกว่าหนึ่งคลาสและเกิดเป็นคลาสลูกหนึ่งหรือคลาสลูกมากกว่าหนึ่งคลาสก็ได้

image

Inheritance หรือการสืบทอดคือการส่งต่อโค้ดส่วนที่เหมือนๆ กันลงไปยังคลาสลูก แล้วนำคลาสลูกไปใช้แต่ Polymorphism จะเป็นกระบวนที่ต่อเนื่องมาอีกที ด้วยการทำงานที่เหมือนกันแต่ทำให้การแสดงผลลัพธ์ที่ต่างกัน Polymorphism คือความหลายรูปแบบในที่นี้คือการสืบทอด Super Class แต่ยังคงรักษาสภาพเดิมและคุณสมบัติไว้ แต่ใน Sub Class ที่สร้างขึ้นมาใหม่นั้นจะมี Method ที่ทำให้ได้ผลลัพธ์ที่ตรงกับวัตถุประสงค์มากกว่าเป็นการเรียก Method ครั้งเดียวแต่ผลลัพธ์ที่ได้ต่างกัน

Polymorphism 2 ประเภท

Static or Compile time Polymorphism

Dynamic or Runtime Polymorphism

สามารถทำงานได้ด้วย Overloading Method เนื่องจากการใช้ทรัพยากรที่มากในพื้นที่หน่วยความจำหลักนั้นไม่ไดีเนื่องจากแต่ละ Overloading Method มีการสร้างพื้นที่หน่วยความจำเในเวลาประมวลผลเมื่อโยงกับออบเจ็ค

สามารถทำงานได้ด้วย Overriding Method ข้อดีคือการจัดสรรพื้นที่หน่วยความจำสำหรับเมธอดในเวลาทำงาน

การรู้เท่าที่จำเป็น คือการซ่อนข้อมูลโดยการลดความซับซ้อนของระบบด้วยการซ่อนรายละเอียดและเขียนไว้ในระบบย่อยภายในฟังชั่นก์นั้น

Abstraction คือการแสดงถึงคุณลักษณะและพฤติกรรมของ object เท่าที่จำเป็นต้องรับรู้และใช้งาน โดยซ่อนส่วนที่เหลือเอาไว้เพื่อไม่ให้เกิดความสับสน(data hidding และ encapsulation) วิธีการ

abstraction คือการขจัดสิ่งที่ไม่สำคัญๆออกไปเพื่อจะได้โฟกัสกับสิ่งที่เราสนใจหลักๆโดยไม่ต้องใส
่ใจกับรายละเอียดปลีกย่อย