Translate

วันเสาร์ที่ 5 มกราคม พ.ศ. 2556

Inheritance และ Encapsulation


Inheritance คืออะไร
  • Inheritance เป็นการสืบทอดคุณลักษณะ และพฤติกรรม ถ้าจะยกตัวอย่างง่ายๆ ก็เช่น แม่สุนัขสามารถเห่าได้เฝ้าบ้านได้ ลูกสุนัขก็สามารถเห่าได้และเฝ้าบ้านได้ เช่นกัน


  • ในการเขียนโปรแกรมภาษา Java นั้นเราไม่จำเป็นต้องสร้างคลาสขึ้นมาใหม่เองทั้งหมด แต่เราสามารถใช้คลาสที่มีคนสร้างไว้ หรือที่เราเคยสร้างไว้อยู่แล้วมาใช้ให้เป็นประโยชน์ได้ 


เรื่องเกี่ยวกับการ Inheritance ที่ต้องรู้
เรื่องเกี่ยวกับการ Inheritance จะมีส่วนประกอบหลายส่วนประกอบกันที่คุณต้องทำความรู้จักดังนี้
  • SuperClass เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณสมบัติ
  • SubClass เป็นคลาสที่สืบทอดคุณสมบัติจากคลาสอื่น
  • FinalClass คลาสที่ไม่ยอมให้คลาสอื่นสืบทอดคุณสมบัติ
  • Override method การปรับเปลี่ยนคุณสมบัติของเมธอดในคลาสลูกให้ต่างจากคลาสแม่
รู้จักกับ SuperClass และ SubClass
  • SuperClass เรียกง่ายๆ ว่า คลาสแม่ เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณลักษณะ เช่นคลาส Animal เป็น SuperClass ของคลาส Lion, คลาส elephant, คลาส Tiger, คลาส Dog และคลาส Cat
  • SubClass เรียกง่ายๆ ว่า คลาสลูก เป็นคลาสที่สืบทอดคุณลักษณะ (ทั้งแอตทริบิวต์ และเมธอด)


อะไรที่สืบทอดไปสู่ SubClass ได้และไม่ได้
  • สิ่งที่ SuperClass สามารถสืบทอดไปสู่ Subclass ได้ก็คือแอตทริบิวต์ และเมธอด นั้นคือ SubClass สามารถเรียกใช้งานแอตทริบิวต์ และเมธอดที่สืบทอดมาจาก SuperClass ได้นั่นเอง (เหมือนกับได้รับมรดกมาแล้วก็มีสิทธิใช้งานได้เต็มที่)
  • ในการเรียกใช้แอตทริบิวต์ และเมธอดของคลาสลูกจะใช้การสร้างออบเจ็กต์ขึ้นมา แล้วใส่เครื่องหมาย . ตามด้วยชื่อเมธอดที่ต้องการเรียกใช้ในคลาสแม่นั่นเอง
  • สิ่งที่ไม่สามารถสืบทอดจาก SuperClass ไปสู่ SubClass ก็คือ Constructor
อะไรที่สืบทอดไปสู่ SubClass ได้บ้าง
  • ตัวอย่าง


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


รู้จักกับ FinalClass

  • FinalClass คือคลาสที่ใช้คีย์เวิร์ด final กับตัวคลาส ทำให้เป็นคลาสที่ไม่สามารถืบทอดคุณสมบัติได้ 
  • แต่หากกำหนดคีย์เวิร์ด final ให้กับเพียงแค่บางเมธอดภายในคลาสที่เป็นแม่แล้ว จะทำให้คลาสลูกที่สืบทอดจากไม่สามารถแก้ไขข้อมูลต่างๆ ภายในเมธอดที่สืบทอดจากคลาสแม่ได้ (แต่คลาสแม่ยังสืบทอดต่อไปได้อยู่)


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

Package : การมัดรวมคลาสเข้าไว้ด้วยกัน
  • Package เป็นการรวบรวมคลาส และอินเตอร์เฟสต่างๆ ที่เกี่ยวข้องกันไว้ในที่เดียวกัน เพื่อความสะดวกในการเรียกใช้งาน ซึ่งในหนึ่ง Package จะมีได้หลายคลาส เช่นคลาสที่เราเคยใช้งานเกี่ยวกับการคำนวณเชิงตัวเลขก็ถูกนำมารวมไว้ด้วยกัน เป็นต้น
  • แพ็คเกจมาตรฐานที่เก็บคลาสต่างๆ ที่ช่วยอำนวยความสะดวกไว้ให้เราใช้งาน ซึ่งตัวที่นิยมใช้งานมีดังนี้   java.applet     java.awt     java.io     java.net     java.lang     java.swt    java.util 

Package : การมัดรวมคลาสเข้าไว้ด้วยกัน
  • รูปแบบการสร้างแพ็คเกจ
package ชื่อแพ็คเกจ.ชื่อแพ็คเกจย่อย ;
public class ชื่อคลาสภายในแพ็คเกจ
{
คำสั่งภายในคลาส
}

  • การออกแบบ Package ต้องออกแบบให้แน่ใจว่าแพ็คเกจของเราจะประกอบด้วยคลาสอะไรบ้าง,  คลาสเหล่านั้นมีความสัมพันธ์ (สืบทอดต่อกันมา) อย่างไร ซึ่งวิธีที่ง่าย และ ชัดเจนที่สุดก็คือ ออกแบบโดยวาดลงไปในกระดาษก่อน
  • รูปแบบการเรียกใช้งานแพ็คเกจ
import ชื่อแพ็คเกจ.ชื่อแพ็คเกจย่อย.ชื่อคลาส ;
  • หรือ import ชื่อแพ็คเกจ.*

ไม่มีความคิดเห็น:

แสดงความคิดเห็น