บทที่ 4

บทที่4 การทำงานของโปรแกรมและคุณสมบัติเชิงวัตถุ

ภาษาจาวากับการเขียนโปรแกรมแบบเชิงวัตถุ

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

คุณสมบัติการห่อหุ้ม(Encapsulation)

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

การประกอบคลาส(Class ldentifier)
รูปแบบ


   โดย(modifier) คือ คีย์เวิร์ด (keyword) ของภาษาจาวาที่ใช้ในการอธิบายระดับการดับการเข่้าถึง(Access Modifier) Class คือ คีย์เวิร์ดของภาษาจาวาเพื่อระบุว่าเป็นการประกาศคลาสClassnaeคือ ชื่อคลาสที่ตั้งขึ้นมา ส่วน (class member) คือ เมธอดหรือคุณสมบัติที่อยู่ในคลาสนั่นเอง

การประกาศเมธอด(Mebod ldentifier)

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


   โดย(modifier) คือ คีย์เวิร์ดของภาษาจาวาที่ใช้อธิบายระดับการเข้าถึงเมธอด return_type คือ ชนิดข้อมูลของค่าที่จะมีการส่งกลับ methodName คือ ชื่อของเมธอด arguments คือ ตัวแปรที่ใช้ในการรับข้อมูลที่ออปเจกต์ส่งมาให้ ส่วน (method_body) คือ คำสั่งต่างๆ ของภาษาจาวาที่อยู่ในเมธอด

การประการคุณสมบัติ(Attribute ldentifier)

   คุณสมบัติ คือ สิ่งที่บ่งบอกว่าออปเจกต์นั้นมีอะไรเป็นองค์ประกอบ หรือแบบตั้งเดิม(Prmititive Type) ก็คือ ตัวแปร (Variable) นั่นเอง ดังนั้นเราจะกำหนดหรือบอกข้อมูลพื้นฐานของออปเจกต์ ในภาษาจาวาได้กำหนดรูปแบบของการประกาศคุณสมบัติที่อยู่ในคลาสไว้ดังนี้


   โดยตัวระบุ (modifier) คือ คีย์เวิร์ดของภาษาจาวาที่ใช้อธิบายระดับการเข้าถึงตัวแปรหรือคุณสมบัตินั้น data Type คือ ชนิดข้อมูลซึ่งอาจเป็นชนิดข้อมูลพื้นฐานหรือคลาส attributeName คือ ชื่อของคุณสมบัติหรือตัวแปรนั้น

ตัวอย่างที่ 4.1


ผลการรันโปรแกรมตัวอย่างที่ 4.1


การประกาศและสร้างออปเจกต์(Object dentifier or lnstantiation)

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


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


   เราจะพบว่า หากเรานำ S1 มาใช้งานกฌจะสามารถเข้าถึงข้อมูลของคลาส Student ได้ทั้งคุณสมบัติและเมธอดที่มีอยู่ในคลาสนี้ผ่านทางตัวแปร S1 นั่งเอง ส่วนการสร้างออปเจกต์นั้นสามารถใช้งานได้เช่นเดียวกัน เราเรียกว่า การสร้างตัวแทน หรือตัวแปรออปเจกต์ (Instantiation) โดยการสร้างตัวแปรออปเจกต์นี้สามารถใช้งานคลาสผ่านทางคอนสตักเตอร์(Constructor)


   โดย objectName คือ ชื่อของออปเจกต์ new คือ คีย์เวิร์ดของภาษาจาวาเพื่อใช้ในการสร้างออปเจกต์ ClassName คือ ชื่อคลาส และ arguments คือ ค่าที่ต้องการส่งผ่านในการเรียกใช้คอนสตักเตอร์


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


   การเรียกใช้คุณลักษณะของออปเจกต์มีรูปแบบดังนี้


   การเรียกใช้เมธอดของออปเจกต์มีรูปแบบดังนี้


   โดยobjectNameคือ ฃื่อของออปเจกต์ที่สร้างขึ้น methodName คือ ชื่อของเมธอดของออปเจกต์นั้น และ arguments คือ ค่าที่ต้องการส่งผ่านไปให้กับเมธอดของออปเจกต์นั้น


การทำโอเวอร์โหลดเมธอด (Metbod Overloading)

   Overloading Metbod หมายถึง การสร้างเมธอดทีมีชื่อเหมือนกันมากกว่าหนึ่งเมธอดภายในคลาสเดียวกัน โดยแต่ละเมธอดจะมีคุณสมบัติดังนี้
>> กำหนดจำนวนหรือประเภทของอาร์กิวเมนต์ (Arguments) ที่แตกต่างกัน
>> ค่าที่ส่งกลับสามารถจะกำหนดให้มีชนิดของข้อมูลต่างกันได้

ตัวอย่างที่ 4.2


ผลการรันโปรแกรมตัวอย่างที่ 4.2


การสร้างคอนสตรักเตอร์ (Constructor)

   คอนสตรักเตอร์ในภาษาจาวานั้นจะมีชื่อเดียวกับคลาส รูปแบบจะคล้ายกับเมธอดแต่ไม่มีการส่งค่าใดๆกลับ ฉะนั้นเราจะไม่พบคำสั่ง Return หรือไม่มีการคืนค่ากลับภายในตัวคอนสตรักเตอร์เลยคอนสตรักเตอร์อาจมีพารามิเตอร์ได้หลากหลาย คอนสตรักเตอร์มีการกำหนด Default โดยอัตโนมัติหากเราไม่สร้างคอนสตรักเตอร์ใดเลย ถ้าคลาสใดๆมีการสร้างคอนสตรักเตอร์ที่มีการรับค่าอาร์กิวเมนต์ไว้จะส่งผลให้ Default Constructor ถูกยกเลิกทันที

ตัวอย่างที่ 4.3
คลาส Pet


คลาส Dog


   เราสามารถทำการโอเวอร์โหลดคอนสตรักเตอร์ (Overloading Constructor) ได้เช่นเดียวกันแต่จะต้องไม่มีการคืนค่ากลับตามหลักการของคอนสตรักเตอร์

การเรียกใช้คอนสตรักเตอร์

   เมื่อเราต้องการเรียกใช้งานคอนสตรักเตอร์ (Constructor) ในคลาสเดียวกันจะเรียกใช้ this()โดยการเรียกใช้ this() จะต้องเรียกใช้เป็นคำสั่งแรกในคอนสตรักเตอร์้เสมอ เราจะพบว่าในคลาสเดียวกันสามารถเรียกใช้คอนสตรักเตอร์ได้โดยการใช้คีย์คำสั่ง this(); ซึ่งเราเลือกที่จะเข้าถึงข้อมูลใดๆก็ได้ในตัวอย่างต้องการการเข้าถึงข้อมูลน้ำหนัก (weight) ของสัตว์เลี้ยง เราจึงเรียกผ่านคีย์คำสั่งนี้ได้เลย

ตัวอย่างที่ 4.4


   หากต้องการเรียกใช้่คอนสตรักเตอร์จากคลาสแม่ (Super Class) เราสามารถเรียกใช้คีย์คำสั่ง super(); โดยจะมีการเรียกใช้คำสั่งนี้เป็นอันดับแรกในคอนสตรักเตอร์เสมอ ดังตัวอย่างต่อไปนี้

ตัวอย่างที่ 4.5


ผลการรันโปรแกรมตัวอย่างที่ 4.5


แพ็กเกจ (Package)

   แพ็กเกจ หายถึง กลุ่มของคลาสที่ทำงานสัมพันธ์กัน หรือมีการทำงานเป็นไปในลักษญะเดียวกันโดยเราจะสร้างคลาสที่สัมพันธ์กันไว้ในแพ็กเกจเดียวกันเพื่อให้การจัดการสามารถทำได้สะดวกขึ้นในJava A
PI ได้จัดเตรียมแพ็กเกจไว้ให้บางส่วน เช่น Java.lang,Java.awt,Java.applet,Java.io,Java.netเพื่ออำนวณความสะดวกในการใช้งานอย่างเป็นระบบ ซึ่งฌปรแกรมเมอร์ในโครงการสามารถสร้างขึ้นเพื่อใช้งานได้ดังรูปที่ 4.1


รูปที่ 4.1 โครงสร้างโปรเจกต์

ตัวอย่างที่ 4.6


ตัวอย่างที่ 4.7


ตัวระบุ(Modifier) ในภาษาจาวา

   การใช้คีย์คำสั่ง Modifier ในภาษาจาวาจะมีอยู่หลายขอบเขต ในขั้นพื้นฐานนี้จะขอนำคีย์Modifier เพื่อแสดงคุณสมบัติ เช่น public,private,protectedcและdefault ที่พบได้ในการเขียนโปรแกรมภาษาจาวา โดยการใช้คีย์คำสั่งนี้คือ ส่วนหนึ่งที่นำมาประกอบความเป็นโมดูลหรือการห่อหุ้ม(Encapsulation)ของคลาสที่ระบุเพื่อการเข้าถึงเมธอดหรือคุณสมบัติต่างๆ


คีย์คำสั่งที่พบบ่อยในภาษาจาวา

>> final คือ การใช้คีย์คำสั่ง final ในการประกาศคลาส ตัวแปรหรือเมธอด จะมีความหมายดังนี้
  >> final class หมายถึง Class นี้ไม่สามารถทำการสืบทอด lnheritance ได้
  >> final method หมายถึง Method นี้ไม่สามารถทำ Overriding ได้
  >> final variable หมายถึง Variable นี้ไม่สามารถเปลี่ยนแปลงค่าได้ (ค่าคงที่)
>> Static การใช้ Keyword Static ในการประกาศคลาส ตัวแปรหรือเมธอด เพื่อกำหนดให้ Members ของคลาส มีเพียงตัวเดียวไม่ขึ้นอยู่กับจำนวนออปเจกต์ของคลาสที่ถูกสร้างขึ้นโดย Static Members จะแบ่งเป็น 2 ประเภท คือ
  >> Static Variables คือ ตัวแปรของคลาส (Class Variables) ที่ถูกประกาศแบบ Static
  >> Static Methods คือ เมธอดของคลาสที่ถูกประกาสเป็นระบบ Static (Class Methods)

ตัวอย่างที่ 4.8


>> extends คือ คีย์คำสั่งที่ระบุว่ามีการสืบทอด (Inheritant) มาจากคลาสแม่ (Super Class) ฉะนั้น คลาสที่มีการสืบทอดจะสามารถใช้คุณสมบัติเมธอดของคลาสแม่ได้

ตัวอย่างที่ 4.9


ตัวอย่างที่ 4.10


>> Interface คือ คีย์คำสั่งทีี่ใช้ระบุการสืบทอดที่เกิดจากการที่คลาสย่อยเป็นซับคลาสของคลาสแม่หลายคลาส ซึ่งจะต้องระบุการเรียกใช้ให้ถูกต้องว่าเป็นของคลาสแม่ใด Interface จะขอนำไปกล่าวอย่างละเอียดในบทที่ 5

คุณสมบัติการถ่ายทอด หรือสืบทอดคุณสมบัติ(lnheritance)

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


รูปที่ 4.2 แสดงความสัมพันธ์ระหว่าง

ตัวอย่างที่4.11


ตัวอย่างที่4.12



คุณสมบัติการเป็นได้หลายรูปแบบหรือการพ้องรูป (Polymorphism)

   การพ้องรูป (Polymorphism) คือ การแปลงสภาพเป็นไปได้หลายรูปแบบ ทำให้สามารถทำงานได้หลายลักษณะผ่านการทำงานชนิดเดียวกันหรือฟอร์มเดียวกัน ในภาาาจาวามีคุณสมบัตินี้สองแบบคือแบบ Sratic Binding จะทำในขณะคอมไพล์ เช่น การสร้างโอเวอร์โหลด (Overriding Method) และ Dynamic Binding จะทำในขณะรัน เช่น การสร้างโอเวอร์ไรด์ (Overriding Method) หลักการพิจารณาคือ คลาสแม่ (Super Class) จะมีอ้างอิงไปยังออปเจกต์คลาสลูก (Sub Class) อย่างไรเช่น คลาส Animal ชวนให้คลาส Cat มาเป็นคลาสลุกจึงได้ความสัมพันธ์แบบ Cat IS-A Annimal ดังนั้น คลาสแม่ ของ Cat จึงเป็น Animal นั่นเอง

การพ้องรูปแบบสลิต (Static Polymorpbism)

   ในภาษาจาวาการพ้องรูปแบบนี้ คือ การสร้างเมธอดแบบโอเวอร์โหลด (Overloading Method) หมายความว่า มีเมธอดืั้ชื่อเดียวกันหลายๆ เมธอดภายในคลาส แต่มีสิ่งอื่นที่ต่างกัน เช่น ชนิดการส่งค่ากลับ (Return Type) จำนวนของอาร์กิวเมนต์ (Arguments) และลำดับการส่งค่า (Order) แตกต่างกันในจาวาจะครวจสอบในขณะคอมไพล์ (Compile Time) ตัวอย่าง เช่น

ตัวอย่างที่ 4.13


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

ตัวอย่างที่ 4.14


ตัวอย่างที่ 4.15


ผลการรันโปรแกรมตัวอย่างที่ 4.15


ความคิดเห็น

  1. ไม่ระบุชื่อ28 มกราคม 2565 เวลา 13:43

    How to Make Money On Sega Genesis - Work-to-Earn
    The งานออนไลน์ basic game septcasino is a bit of a gimmick. Instead of trying to beat the Mega Drive, 바카라사이트 you'll play against the computer in high-end Sega Genesis

    ตอบลบ
  2. Casino Review 2021 - Mapyro
    Find the BEST Casino 오산 출장안마 reviews (2021) - Read ratings, photos & maps to see 춘천 출장샵 what's popular 논산 출장샵 at the Casino.Casino Name: 전주 출장안마 CasinoPhone Number: 거제 출장안마 +1 800 768 2677

    ตอบลบ

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