เป็นความสามารถที่สำคัญอย่างหนึ่งของ JavaScript
คการเขียนโปรแกรม จะพยายามสมมุติให้ทุกๆอย่างในโปรแกรม เป็นวัตถุ (Objects)
ตัวอย่างเช่น ภาพ,browser,แบบฟอร์มต่างๆ ทั้งนี้ก็เพื่อความง่ายในการทำความเข้าใจ และการเขียนโปรแกรม
วัตถุแต่ละชนิดก็จะมีคุณสมบัติที่สำคัญอย่างน้อย 2 อย่างคือ
1. Properties ซึ่งก็คือคุณสมบัติของ Object นั้น
วิธีเขียนเขียนก็จะใช้ชื่อของ Object นำหน้า แล้วก็ จุด ตบท้ายด้วย Properties ที่จะอ้างถึง เช่น
รถยนต์.ประตูรถ.สี=แดง
2.Methods ก็คือฟังก์ชั่นที่ใช้กับ Object โดยจะมีผลกับ Object นั้นๆเช่น
วิทยุ.play() สั่งให้วิทยุเล่นเทป
Class คือ แม่แบบของ Object ในการใช้งาน Object เราจะต้องประกาศก่อนว่า Object นั้นอยู่ใน Class ใด
Object ที่อยู่ใน Class เดียวกันจะมี Properties และ Method เหมือนๆกัน แต่จะมีค่าใน Properties เหมือนกันหรือไม่ก็ได้ เช่น
รถยนต์A และ รถยนต์B ต่างก็อยู่ในคลาส รถยนต์
รถยนต์A อาจจะมีสีแดง แต่ รถยนต์B อาจจะมีสีดำก็ได้
ชนิดของคลาส แบ่งตามการใช้งานได้ดังนี้
- คลาสที่ทำหน้าที่เป็นชนิดข้อมูล
- คลาสที่ทำหน้าที่เป็นผู้เรียกใช้ชนิดข้อมูล หรือเป็น Application
โครงสร้าง Class
[ class Modifiers ] class ชื่อ class
{
field Member Variables → ( properties )
methods Member Function → behaviors
nested Classes/Interface
}
[ class Modifiers ]
public ( publicly accessible )
abstract ( only blue print no instances of the class may be created )
final ( cannot be subclassed )
strictftp ( exact floating point operation )
การสร้าง Class
คือการสร้างโครงร่างของข้อมูลและฟังก์ชันที่เกี่ยวข้องเท่านั้นเมื่อต้องการใช้งาน ผู้ใช้จะต้องสร้างตัวแปรและกำหนดให้เป็นข้อมูลประเภท Class ที่กำหนด โครงสร้างของ Class จะประกอบด้วย ข้อมูล Method ต่างๆ และจะมี Method พิเศษอันหนึ่งซึ่งจะเป็น Construction ที่จะถูกเรียกเมื่อมีการสร้าง Class ทั้งนี้ฟังก์ชันที่เป็น Construction จะต้องมีชื่อเดียวกันกับ Class เสมอ
Constructor Method
คือเมธอดที่ใช้สำหรับสร้าง instance object ของคลาสนั้นๆ โดยที่ชื่อเมธอดนี้ต้องเหมือนกับชื่อคลาส และใช้สำหรับ initialize ข้อมูลให้กับ instance variable โดยจะไม่มีการถ่ายทอดให้กับ subclass และไม่มีการ return ค่า
Inheritance
คือการถ่อยทอดข้อมูล (ซึ่งก็คือ state และ behavior) จาก class ลำดับที่สูงกว่า (super class หรือ parent class) ไปยังลำดับที่ต่ำกว่า (subclass) โดยที่ subclass นั้นสามารถเปลี่ยนแปลง หรือแทนที่ข้อมูล (override) ที่ได้รับการถ่ายทอดมานั้นได้
ตัวแปรระดับคลาส
หมายถึง ตัวแปรที่นิยามไว้ภายในคลาส (นอกเมธอด) เพื่อให้ทุกส่วนภายในคลาสสามารถเรียกใช้งานได้ตัวแปรระดับคลาสมีอยู่ 2 ชนิด คือ
- ตัวแปรแบบ Instance
เป็นตัวแปรที่ใช้ได้เฉพาะภายในออบเจ็กต์ใดออบเจ็กต์หนึ่งเท่านั้น ไม่สามารถนำมาใช้ร่วมกันระหว่างออบเจ็กต์ได้ โดยปกติก็คือ ตัวแปรทั่วไปที่ใช้เก็บค่าแอททริบิวต์ของออบเจ็กต์
- ตัวแปรที่ใช้งานร่วมกัน
เป็นตัวแปรที่สามารถนำมาใช้งานร่วมกัน ระหว่างออบเจ็กต์ได้ ไม่ว่าการอ้างถึงนั้นจะอยู่ที่ส่วนใดของคลาส หรือโปรแกรมก็ตามตัวแปรชนิดนี้ก็จะให้ค่าเดียวกันเสมอ (ค่าที่เปลี่ยนแปลงล่าสุด) เนื่องจากตัวแปรนี้จะเก็บอยู่ใน Memory ที่ Addressหนึ่ง เพียง Address เดียว ตัวแปรแบบนี้ในภาษาจาวา จะสร้างขึ้นด้วยการระบุ keyword "static" ลงไปตอนประกาศตัวแปรด้วย ซึ่งอาจเรียกตัวแปรประเภทนี้ว่า "Static Variavle" ก็ได้ และถ้าไม่ต้องการให้เมธอดใดที่เรียกใช้งานตัวแปรนี้ มาเปลี่ยนแปลงค่าภายในตัวแปร ให้ใส่ Keyword "final" ไว้ด้วย เช่น static final double PI = 3.14 เป็นต้น
หมายเหตุ
ตัวแปรที่เป็น static ถูกเรียกขึ้นมาในคลาส โดยไม่ต้องใช้ new และในคลาสหนึ่งๆ จะมีสมาชิกที่เป็น static เพียง ตัวเดียวเท่านั้น มีค่าคงที่ไม่ว่าจะเข้าถึงสักกี่ครั้ง (คือจะเห็นค่าสุดท้าย) และจะใช้ตัวแปร static ได้ก็ต่อเมื่อตัวมันเป็น static ด้วยเท่านั้น
ตัวอย่างโปรแกรม


จากโปรแกรม class3_static1 สรุปได้ดังนี้
1. classมี 4 classประกอบด้วย class3_static1 , sub1 , sub2 , sub3
2. มี 2 object ดังนี้
- hello1 เป็น object ของ sub1
- hello2 เป็น object ของ sub1
3. แต่ละ class มี method ดังนี้
- class3_static1 มี method main( )
- class sub1 มี method sub1_1( ), sub1_2( ), sub1_3( )
- class sub3 มี method sub3_1( )
4. สมาชิกของคลาสที่เป็น static คือ var1
Output
Message
คือคำสั่งหรือข้อความที่จะให้ข้อมูลหรือตัวแปรใดทำงาน ก็คือ patameter ในภาษาอื่นที่ไม่ใช่ OOP คือใช้เพื่อนำส่งค่าข้อมูลระหว่าง object โดยใน message นั้นต้องประกอบด้วย
- Destination ก็คือชื่อของ object
- Method
- Parameters
Method
คือ function ที่บ่งบอกพฤติกรรมของ object ว่าทำอะไรได้บ้าง กำหนดไว้ใน class โดยต้องประกอบด้วย ชื่อของ method เรียกว่า Identifier ตามด้วยเครื่องหมายวงเล็บ () โดยในวงเล็บอาจมี parameter list อยู่หรือไม่ก็ได้ เช่น
getBalance()
raiseSalary( float Salary, float Percent )
ชื่อของ method นั้นมีกฏเกณฑ์ในการตั้งเหมือนกับชื่อของตัวแปรนั่นเอง หลักการตั้งชื่อ method ไม่ใช่กฏบังคับ แต่ผู้เขียนโปรแกรมจาวาโดยส่วนมากใช้กันเพื่อทำให้โปรแกรมอ่านง่าย ชื่อมักจะตั้งให้เป็นคำกิริยาหลาย ๆ คำซึ่งแสดงถึงหน้าที่ของ method นั้น ๆ คำแรกจะถูกเขียนด้วยตัว lowercase ทั้งหมดและตัวอักษรตัวแรกของคำถัดไปแต่ละคำจะเป็นตัว uppercase และที่เหลือจะเป็นตัว lowercase ตัว method getClassSched()
method arguments
argument นี้อาจจะเป็นตัวแปรพื้นฐานของจาวา หรืออาจจะเป็น object ก็ได้ เราสามารถกำหนด method ให้รับ argument ได้เท่าที่เราต้องการ
method body
ตัว body นี้เองที่เป็นตัวกำหนดอย่างแท้จริงว่า method นี้ทำหน้าที่อะไร ภายใน method body เราสามารถ declare ตัวแปรขึ้นมาเพื่อใช้งานชั่วคราวซึ่ง scope ของตัวแปรเหล่านี้จะอยู่ภายใน method นี้เท่านั้น ภายใน method body เราสามารถ เรียกใช้ method อื่นของ object นั้นหรือของ object อื่นที่อยู่ภายใน scope ของ body นั้นได้ด้วย ขอบเขตของ method body นั้นจะถูกกำหนดด้วยเครื่องหมายปีกกาเปิดและปิดหนึ่งคู่
return value
ภายหลังจาก method ทำงานจนถึงบรรทัดสุดท้ายแล้วก็จะ return กลับไปหาส่วนของโปรแกรมที่ call มัน ถ้าเราอยากให้ method ส่งค่า คืนไปยังผู้ call ก็สามารถใส่ return statement เข้าไปได้ หลังจากที่ return statement ได้ถูก execute แล้ว control จะหลุดออกจาก method นั้นทันที โปรแกรมส่วนที่กระทำการ call ก็สามารถรับค่า return นั้นได้โดยการใส่ ตัวแปรตามด้วยเครื่องหมายเท่ากับไว้ด้านซ้ายของ method call ถ้าไม่มีค่า return ก็ต้องใส่ คำว่า void ไว้ตรงตำแหน่งของชนิดรีเทอร์น
เช่นเดียวกันกับ variable ตัว method ก็ถูกจัดตาม scope ได้เป็นสามชนิดคือ private, public และ protected private method สามารถถูกเรียกได้เฉพาะจาก method อื่น ๆ ภายใน class เดียวกันเท่านั้น subclass ไม่สามารถเรียกหรือมอง เห็น private method ของ superclass ส่วน public method ตรงข้ามกับ private method อย่างสิ้นเชิง ทุกคลาสสามารถเรียก public method ของอีกคลาสหนึ่งได้ ส่วน protected method ก็สามารถถูกเรียกได้เฉพาะจากตัวคลาสนั้นเองหรือ subclasses เท่านั้น
วิธีการเรียกใช้ method ของ object ตัวไหนก็ให้เอา object นั้นมาเขียนต่อด้วยจุดแล้วก็ตามด้วยชื่อ method พร้อมด้วยชุดของ arguments ที่อยู่ในวงเล็บ เราไม่ต้องใส่ชนิดของ arguments ลงไป แต่ถ้าเราอยากจะนำค่า return ที่ได้จาก method กลับมาใช้ก็สามารถเอาตัวแปรมารับโดยใช้ assignment operator ได้
โครงสร้างของ method
[modifiers] [return type] name(parameter list)
{
[return data ;]
}
การใช้ "this" อ้างถึงตัวแปรของคลาส (This Reference)
ในบางครั้งการเขียนโปรแกรมมักมีการสร้างตัวแปรของคลาส และตัวแปรของเมธอดที่มีชื่อเหมือนกัน ทั้งนี้ก็เพื่อ ใช้ในการสื่อความหมายนั่นเอง แต่ปัญหาที่เกิดขึ้นคือ เมื่อต้องการอ้างถึงตัวแปรของคลาสภายในเมธอด จะไม่สามารถทำได้ เพราะตัวแปรภาษาจะมองตัวแปรในขณะนั้นเป็นตัวแปรของเมธอด ดังนั้นเพื่อแก้ปัญหาดังกล่าวจึงได้มีการนำ Keyword "this" มาใช้ โดย หากต้องการอ้างถึงตัวแปรของคลาสต้องระบุ Keyword "this" ลงไปด้วย เพื่อให้เกิดความแตกต่างกับตัวแปรภายในเมธอด
รูปแบบ
this.attribute
เช่น this.x หมายถึง อ้างถึงตัวแปร "x" ของคลาส
ประโยชน์ของการใช้ "this" อย่างหนึ่งก็คือ เป็นการป้องกันการสับสนในการอ้างถึง และรับค่าตัวแปร (Parameter) ที่เป็นชื่อเดียวกันภายในเมธอด
ตัวอย่างโปรแกรม

Output
จากโปรแกรม แสดงให้เห็นถึงการใช้ this โดยถ้าเราเอาthis ออกจะแสดงผลเป็น

เพราะthisเป็นตัวอ๊อบเจ็คที่อ้างถึงตัว class นั้น จะมองใกล้ตัวก่อน จึงแสดงผลที่ได้จาก private

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