SlideShare a Scribd company logo
บทที่
บทที่ 4
4
การเขียนโปรแกรมเชิงอ็อบเจกต์
วัตถุประสงค์
วัตถุประสงค์
 1. เพื่อเข้าใจแนวคิดการเขียนโปรแกรมเชิงอ็อบเจกต์
 2. เพื่อให้เข้าใจแนวคิดของคลาสและอ็อบเจกต์
 3. เพื่อให้รู้จักรูปแบบพื้นฐานของคลาสและอ็อบเจกต์
ของภาษาจาวา
 4. เพื่อให้เข้าใจแนวคิดของการซ่อนสารสนเทศและ
การนำไปใช้
 5. เพื่อให้รู้จักรูปแบบของดาต้าเมมเบอร์และเมท็อด
ของภาษาจาวา
 6. เพื่อให้สามารถสร้าง คอมไพล์ และใช้งาน
โปรแกรมภาษาจาวา
เนื้อหา
เนื้อหา
 4.1 แนะนำการเขียนโปรแกรมเชิงอ็อบเจกต์
 4.2 คลาสและอ็อบเจกต์
 4.3 การสร้างอ็อบเจกต์จากคลาส
 4.4 การซ่อนสารสนเทศ (Information Hiding) หรือ การ
ห่อหุ้ม (Encapsulation)
 4.5 เมทอด
 4.6 เมทอดคอนสตรัคเตอร์
 4.7 ดาต้าเมมเบอร์
 4.8 ขอบเขตของการมองเห็น
 4.9 การออกแบบคลาสและการใช้คลาส
 4.10 การจัดเก็บและการคอมไพล์โปรแกรม
4.1
4.1 แนะนำการเขียนโปรแกรม
แนะนำการเขียนโปรแกรม
เชิงอ็อบเจกต์
เชิงอ็อบเจกต์
 Abstraction การกำหนดสาระสำคัญ
 Data Abstraction การกำหนดสาระสำคัญของ
ข้อมูลในลักษณะองค์รวม เช่น เลขจำนวนเต็ม
 การกำหนดคุณลักษณะ
 การกำหนดพฤติกรรม
 Abstract Data Type – ADT แบบข้อมูลนามธรรม
 เอนทิตี (Entity) = ค่าของข้อมูล + ชุดของการดำเนิน
การ (Operation)
 แบบข้อมูลนามธรรมของเลขจำนวนเต็ม
 จำนวนเต็มบวก จำนวนเต็มลบ และศูนย์
 ชุดของการดำเนินการ เช่น บวก ลบ คูณ หาร และเปรียบเทียบ
ความเท่ากัน
4.1
4.1 แนะนำการเขียนโปรแกรม
แนะนำการเขียนโปรแกรม
เชิงอ็อบเจกต์
เชิงอ็อบเจกต์
Problem Solving การแก้ปัญหา
 แนวคิดแบบข้อมูลนามธรรม
 ระบุข้อมูลที่เหมาะสม (Data Specification)
และ
 กระบวนการแก้ปัญหาหรือออกแบบโปรแกรม
(Programming)
4.1
4.1 แนะนำการเขียนโปรแกรม
แนะนำการเขียนโปรแกรม
เชิงอ็อบเจกต์
เชิงอ็อบเจกต์
การแก้ปัญหาโดยวิธีการเชิงอ็อบเจกต์
◦ องค์ประกอบของปัญหา เรียกว่า อ็อบเจกต์
(Object)
◦ อ็อบเจกต์ (Object)
 ลักษณะประจำ (Attribute หรือ Data)
 พฤติกรรม (Behavior หรือ Operation)
◦ สอดคล้องกับการแก้ปัญหาในลักษณะของแบบ
ข้อมูลนามธรรม
 อ็อบเจกต์คือเอนทิตี
 คุณสมบัติคือค่าของข้อมูล
 พฤติกรรมคือกับชุดของการดำเนินการ
4.1
4.1 แนะนำการเขียนโปรแกรม
แนะนำการเขียนโปรแกรม
เชิงอ็อบเจกต์
เชิงอ็อบเจกต์
 อ็อบเจกต์ที่มีคุณสมบัติและพฤติธรรมที่เหมือน
กันจัดอยู่ในกลุ่มเดียวกันเรียกว่าคลาส (Class)
 อ็อบเจกต์ยังมีคุณสมบัติที่สำคัญ 3 ประการคือ
◦ 1) การซ่อนสารสนเทศ (Information Hiding) หรือ
การห่อหุ้ม (Encapsuation)
◦ 2) ภาวะพหุสัณฐาน (Polymorphism) และ
◦ 3) ความสัมพันธ์ระหว่างคลาส (Class Relationships)
 3.1) การรวมกัน (Association)
 3.2) การประกอบ (Composition หรือ Aggregation) และ
 3.3) การสืบทอด (Inheritance)
4.2
4.2 คลาสและอ็อบเจกต์
คลาสและอ็อบเจกต์
 อ็อบเจกต์หรือ เอนทิตี สิ่งที่เป็นองค์ประกอบ
ในปัญหา
 อ็อบเจกต์ (Object) พื้นที่ในหน่วยความจำ
ของเครื่องคอมพิวเตอร์เพื่อใช้ในการประมวล
ผล
 อ็อบเจกต์ ชื่อที่ใช้เรียกสิ่งที่สร้างขึ้นจาก
ต้นแบบ ซึ่งก็คือคลาส หรือ อินสแตนด์ของ
คลาส
 คลาส (Class) คือ การกำหนดสาระสำคัญ
หรือภาพรวม หรือต้นแบบของอ็อบเจกต์
4.2
4.2 คลาสและอ็อบเจกต์
คลาสและอ็อบเจกต์
 คลาส (Class) คือ การกำหนดสาระสำคัญ
หรือภาพรวม หรือต้นแบบของอ็อบเจกต์
◦ ดาต้าเมมเบอร์ (Data Member) หรือ
สมาชิกข้อมูล ใช้กำหนดว่าวัตถุที่สร้างจาก
คลาสมีลักษณะประจำหรือสถานะอะไรบ้าง
◦ เมท็อด (Method) ใช้กำหนดว่าวัตถุที่สร้าง
จากคลาสประกอบด้วยพฤติกรรมหรือ
กระบวนการเปลี่ยนแปลงสถานะของอ็อบเจ
กต์อะไรบ้าง
4.2
4.2 คลาสและอ็อบเจกต์
คลาสและอ็อบเจกต์
 คลาสเป็นการอธิบายถึงสาระสำคัญของสิ่งใดสิ่ง
หนึ่งว่ามีคุณสมบัติและพฤติกรรมอย่างไร
 อ็อบเจกต์แสดงถึงสิ่งที่ปรากฏอยู่ของคลาสนั้น
ๆ
 แต่ละอ็อบเจกต์จะมีเอกลักษณ์ที่ช่วยให้สามารถ
แยกอ็อบเจกต์หนึ่งออกจากอ็อบเจกต์อื่น ๆ
ตัวอย่างที่
ตัวอย่างที่ 4.1
4.1 การประกาศคลาส
การประกาศคลาส
◦ (<modifier>) class <ชื่อคลาส> <โครงสร้างของคลาส>
◦ class FirstClass { }
ตัวอย่างที่
ตัวอย่างที่ 4.2
4.2 การประกาศคลาส
การประกาศคลาส
public class CurrencyExchange {
private float exchange_rate;
String currency;
public void setRate(float exchange_rate, String currency)
{
this. exchange_rate = exchange_rate;
this.currency = currency;
}
}
4.3
4.3 การสร้างอ็อบเจกต์จากคลาส
การสร้างอ็อบเจกต์จากคลาส
สามารถใช้คลาสสร้างอ็อบเจ็กต์โดยใช้รูปแบบ
ดังนี้
new <ชื่อคลาส> (<ลำดับอาร์กิวเมนต์>)
ลำดับอาร์กิวเมนต์ คือ ลำดับค่าที่ส่งให้
พารามิเตอร์ของ constructor ของคลาสเพื่อ
กำหนดสถานะเริ่มต้นให้กับอ็อบเจ็กต์ที่ถูกสร้าง
โดยการใช้คำสั่ง new
ผลลัพธ์ของการใช้คำสั่ง new คืออ็อบเจ็กต์ที่
สร้างจากคลาสนั้น และ เนื้อที่ของหน่วยความ
จำของอ็อบเจ็กต์
4.3
4.3 การสร้างอ็อบเจกต์จากคลาส
การสร้างอ็อบเจกต์จากคลาส
ผู้เขียนโปรแกรมสามารถอ้างถึงอ็อบเจ็กต์ที่สร้าง
ขึ้น ด้วยการประกาศอ็อบเจ็กต์ที่ใช้อ้างอิง ดังรูป
แบบ
<ชื่อคลาส> <ชื่ออ็อบเจ็กต์อ้างอิง> = new <ชื่อ
คลาส> (<ลำดับอาร์กิวเมนต์>)
FirstClass a = new FirstClass( );
การประกาศอ็อบเจ็กต์อ้างอิงเตรียมไว้เพื่อใช้อ้าง
ไปยังอ็อบเจ็กต์ที่สร้างภายหลัง
FirstClass a;
a = new FirstClass( );
4.3.1 การอ้างถึงสมาชิกในอ็อบเจ
กต์
เมื่อสร้างอ็อบเจ็กต์จากคลาสและประกาศ
อ็อบเจ็กต์ที่ใช้อ้างอิงแล้ว สามารถเข้าถึง
สมาชิกของอ็อบเจ็กต์โดยใช้ ชื่ออ็อบเจ็กต์
อ้างอิงตามด้วยจุด (.) ต่อด้วยชื่อสมาชิก ดังรูป
แบบต่อไปนี้
<ชื่ออ็อบเจ็กต์อ้างอิง>.<ชื่อสมาชิกของ
คลาส>
 การเขียนโปรแกรมเชิงอ็อบเจกต์ให้ความสำคัญ
กับการซ่อนสารสนเทศจากคลาสภายนอก
 ภาษาจาวามีส่วนขยาย (modifiers) ให้เลือกใช้
งานสามรูปแบบ สำหรับกำหนดว่าคลาสและ
สมาชิกแต่ละตัวของคลาส (ดาต้าเมมเบอร์ และ
เมทอด) สามารถมองเห็นและอ้างถึงได้หรือไม่
จากภายนอกคลาส
◦ public ถูกอ้างถึงได้จากทุกคลาสที่เห็นคลาสนั้นๆ
◦ protected ถูกอ้างถึงได้จากคลาสที่อยู่ภายใน
package เดียวกัน หรือคลาสลูกที่อยู่ต่าง package
◦ private ถูกอ้างถึงได้จากภายในคลาสเท่านั้น
4.4
4.4 การซ่อนสารสนเทศ
การซ่อนสารสนเทศ (Information
(Information
Hiding)
Hiding) หรือการห่อหุ้ม
หรือการห่อหุ้ม
(Encapsulation)
(Encapsulation)
4.4
4.4 การซ่อนสารสนเทศ
การซ่อนสารสนเทศ (Information
(Information
Hiding)
Hiding) หรือการห่อหุ้ม
หรือการห่อหุ้ม
(Encapsulation)
(Encapsulation)
 สำหรับสมาชิกที่ไม่มี modifier จะถือว่ามี
modifier เป็น default คือ ถูกอ้างถึงได้จาก
คลาสที่อยู่ภายใน package เดียวกัน
 หมายเหตุ คลาสที่ public สามารถ import ไป
ใช้งานใน package อื่นได้ แต่คลาสที่ default
ไม่สามารถ import ไปใช้งานใน package อื่น
ได้
4.4
4.4 การซ่อนสารสนเทศ
การซ่อนสารสนเทศ (Information
(Information
Hiding)
Hiding) หรือการห่อหุ้ม
หรือการห่อหุ้ม
(Encapsulation)
(Encapsulation)
 การติดต่อกันระหว่างแต่ละอ็อบเจกต์เพื่อทำงานใดงาน
หนึ่งสามารถทำได้โดยการส่งแมสแสจ (Message) ผ่าน
ทางเมท็อดของแต่ละอ็อบเจกต์
 เนื่องจากแต่ละอ็อบเจกต์สามารถซ่อนดาต้าเมมเบอร์และ
เมท็อดจากอ็อบเจกต์อื่นได้
 หากต้องการเรียกใช้ดาต้าเมมเบอร์จากอ็อบเจกต์อื่น ๆ ที่
ไม่ใช่อ็อบเจกต์ที่เป็นเจ้าของดาต้าเมมเบอร์นั้น ต้องเรียก
ใช้งานผ่านเมท็อดที่ได้รับอนุญาตเท่านั้น
 ผู้เขียนโปรแกรมสามารถกำหนดได้ว่าต้องการให้ดาต้า
เมมเบอร์หรือเมท็อดนั้นสามารถเรียกใช้งานจากภายนอก
ขอบเขตของคลาสนั้นได้หรือไม่ โดยการใช้ส่วนขยาย
หรือ โมดิฟายเออร์ (Modifier)
 //Program TestModifier.java;
 class Modifier {
 public char z = 'A';
 protected String sentence;
 int i;
 private int x;
 int sqr (int y) {
 return y * y;
 }
 private int plusOne (int y) {
 return y+1;
 }
 int callPlusOne (int y) {
 return i = plusOne(y);
 }
 }
 public class TestModifier {
 public static void main(String args[]) {
 int a = 2, b, c;
 Modifier mod1 = new Modifier();
 b = mod1.sqr(a);
 c = mod1.plusOne(a); // compile error
 c = mod1.callPlusOne(a);
 mod1.sentence = "Hello";
 System.out.println(c);
 System.out.println(mod1.z);
 System.out.println(mod1.sentence);
 System.out.println(mod1.sqr(a));
 System.out.println(mod1.x); // compile
error
 }
 }
 ตัวอย่างที่ 4.5
ตัวอย่างที่ 4.6 ขอบเขตการใช้งานดาต้าเมมเบอร์
แบบ private
 //Program TestCurrencyPrivate.java
 package chapter4;
 import java.util.Scanner;
 class CurrencyExchange {
 private float changeRate;
 public void setChangeRate (float rate) {
 changeRate = rate;
 }
 public float toBaht (float otherUnit) {
 return (otherUnit *
changeRate);
 }
 public float fromBaht (float baht) {
 return (baht / changeRate);
 }
 }
 public class TestCurrencyPrivate {
 static Scanner console = new
Scanner(System.in);
 public static void main (String[] args) {
 float rate, baht, usDollars;
 System.out.print("Enter
exchange rate for USD : ");
 rate = console.nextFloat();
 CurrencyExchange
currencyExchange = new CurrencyExchange();

currencyExchange.setChangeRate(rate);
 System.out.print("Enter
amount in baht : ");
 baht = console.nextFloat();
 usDollars =
currencyExchange.fromBaht(baht);
 System.out.println("Baht : " +
baht + ", USD rate : " + rate +
 ", USD : " + usDollars + "dollars.");
 }
 }
 เปลี่ยนแปลงค่า changeRate ซึ่ง
เป็ นดาต้าเมมเบอร ์แบบ private ขอ
งอ็อบเจกต์currencyExchange
โดยเรียกใช้งานเมท็อด
currencyExchange.setChangeR
ate(rate)
ตัวอย่างที่ 4.7 ขอบเขตการใช้งานดาต้าเมมเบอร์
แบบ public
 //Program TestCurrencyPublic.java
 import java.util.Scanner;
 class CurrencyExchangeP {
 public float changeRate;
 public float toBaht (float otherUnit)
{
 return (otherUnit * changeRate);
 }
 public float fromBaht (float baht) {
 return (baht / changeRate);
 }
 }
 public class TestCurrencyPublic {
 static Scanner console = new
Scanner(System.in);
 public static void main (String[] args) {
 float rate, baht, usDollars;
 System.out.print("Enter
exchange rate for USD : ");
 rate = console.nextFloat();
 CurrencyExchangeP
currencyExchange = new CurrencyExchangeP();

currencyExchange.changeRate = rate;
 System.out.print("Enter
amount in baht : ");
 baht = console.nextFloat();
 usDollars =
currencyExchange.fromBaht(baht);
 System.out.println("Baht : " +
baht + ", USD rate : " + rate
 + ", USD : " + usDollars + " dollars.");
 }
 }
 สามารถเปลี่ยนแปลงค่า
changeRate ซึ่งเป็ นดาต้าเมมเบอร ์
แบบ public ของอ็อบเจกต์
currencyExchange ได้โดยตรง
ด้วยคำสั่ง
currencyExchange.changeRate
= rate
4.5 เมท็อด (Method)
 คือ สมาชิกของคลาสที่ใช้สำหรับกำหนดพฤติกรรมของอ็
อบเจกต์
 เมท็อดจะอยู่ภายในคลาสเท่านั้น
 แต่ละเมท็อดควรทำหน้าที่เพียงอย่างเดียว
 ในภาษาจาวามีรูปแบบการประกาศเมท็อด 2 รูปแบบหลัก
คือ
◦ 1) เมท็อดที่ส่งค่ากลับเมื่อทำงานเสร็จสิ้น
◦ 2) เมท็อดที่ไม่มีการส่งค่ากลับ
 เมทอดที่ไม่มีการส่งค่ากลับ สามารถเรียกใช้งานเมท็อดนั้น
โดยตรง
 เมทอดที่มีการส่งค่ากลับ การเรียกใช้งานจะต้องมีตัวแปรรับ
ค่าพารามิเตอร์ซึ่งมีชนิดข้อมูลเดียวกันกับที่ประกาศไว้ใน
เมท็อดที่ส่งค่ากลับ
4.5.1 เมท็อดที่ส่งค่ากลับเมื่อทำงานเสร็จ
สิ้น
(<modifier>) (<ชนิดข้อมูลค่าที่ส่งกลับ>) <ชื่อ
เมทอด> (<ลำดับอาร์กิวเมนต์>)
{
…
return (<ค่าที่ส่งกลับ>);
}
4.5.2 เมท็อดที่ไม่มีการส่งค่ากลับ
(<modifier>) void <ชื่อเมทอด> (<ลำดับ
อาร์กิวเมนต์>)
{
…
}
ตัวอย่างที่ 4.8
 class CurrencyExchange {
 private float changeRate;
 public void setChangeRate (float rate) {
 changeRate = rate;
 }

 public float toBaht (float otherUnit) {
 return (otherUnit * changeRate);
 }
 public float fromBaht (float baht) {
 return (baht / changeRate);
 }
 }
ตัวอย่างที่ 4.9
 public class TestCurrencyPrivate {
 static Scanner console = new Scanner(System.in);
 public static void main (String[] args) {
 float rate, baht, usDollars ;
 System.out.print("Enter exchange rate for USD : ");
 rate = console.nextFloat();
 CurrencyExchange currencyExchange = new CurrencyExchange();
 currencyExchange.setChangeRate(rate);
 System.out.print("Enter amount in baht : ");
 baht = console.nextFloat();
 usDollars = currencyExchange.fromBaht(baht);
 System.out.println("Baht : " + baht + ", USD rate : " + rate + ",
USD : " + usDollars + "dollars.");
 }
 }
4.6 เมทอดคอนสตรัคเตอร์
(Constructor Method)
 อ็อบเจกต์แต่ละตัว แม้ว่าจะสร้างจากคลาสเดียวกัน ก็
มักมีมีสถานะที่แตกต่างกัน
 ภาษาจาวามีกลไกสำหรับกำหนดค่าเริ่มต้นให้กับ data
members หรือ สมาชิกข้อมูล ในขั้นตอนการสร้าง
อ็อบเจ็กต์จากคลาส เรียกว่า เมทอดคอนสตรัคเตอร์
(constructor method)
 เมทอดคอนสตรัคเตอร์ มีโครงสร้างคล้ายกับเมทอด
อื่นๆ แต่มีลักษณะสำคัญคือมีชื่อเหมือนกับคลาส และ
ห้ามส่งค่าออกมาจากเมทอด คือ ห้ามมีคำสั่ง return
 โครงสร้างของ constructor method เป็นดังนี้
 <ชื่อคลาส> (<ลำดับพารามิเตอร์>) <โครงสร้างเมท
อด>
4.6 เมทอดคอนสตรัคเตอร์ (Constructor
Method)
 constructor method จะถูกเรียกใช้พร้อมกับการใช้คำสั่ง new เพื่อสร้าง
อ็อบเจ็กต์
 พารามิเตอร์ของ constructor นำค่าที่รับเข้าไปกำหนดค่าให้กับ data
members เพื่อกำหนดค่าเริ่มต้นหรือสถานะของอ็อบเจ็กต์ที่สร้างขึ้นมา
ใหม่
 ถ้าไม่มีการเขียนเมท็อดนี้ไว้ใน คลาส เจวีเอ็มก็จะสร้างอ็อบเจกต์ให้โดย
อัตโนมัติ
 คลาสหนึ่งคลาส มี constructor method ได้มากกว่าหนึ่ง เรียกกรณีนี้ว่า
overloaded constructors
◦ constructor แต่ละตัว ต้องมีพารามิเตอร์แตกต่างกัน
◦ อาจต่างกันที่จำนวนพารามิเตอร์ ชนิดของพารามิเตอร์ หรือ ลำดับของ
พารามิเตอร์
◦ คอมไพเลอร์จะเลือกใช้ constructor method ที่เหมาะสมจากพารามิเตอร์ที่
ส่งให้
◦ เป็นกลไกที่ช่วยให้ผู้เขียนโปรแกรมสามารถกำหนดสถานะของอ็อบเจ็กต์ได้
หลากหลายแบบ
ตัวอย่างที่ 4.10 โปรแกรมแสดงการใช้ constructor
method
 // Program TestConstructor.java
 class Constructor {
 int x;
 Constructor (int y) {
 x = y;
 System.out.println("x = "+ x);
 }
 Constructor () {
 x = 0;
 System.out.println("x = "+ x);
 }
 }
 public class TestConstructor {
 public static void main(String args[]) {
 Constructor cons1 = new Constructor(2);
 Constructor cons2 = new Constructor();
 }
 }
4.7 ดาต้าเมมเบอร์ (Data Member)
ภาษาจาวาแบ่งประเภทของดาต้าเมมเบอร์เป็น 2 รูปแบบ
คือ คลาสดาต้าเมมเบอร์ (Class Data Member) และ อินส
แตนซ์ดาต้าเมมเบอร์ (Instance data member)
4.7.1 คลาสดาต้าเมมเบอร์ (Class Data
Member)
 คลาสดาต้าเมมเบอร์ คือ ตัวแปรที่สามารถใช้
ร่วมกันได้สำหรับทุกๆ อ็อบเจกต์ที่สร้างขึ้นจาก
คลาส
 เนื้อที่ในหน่วยความจำที่ใช้สำหรับเก็บค่าของ
คลาสดาต้าเมมเบอร์จะถูกสร้างขึ้นเพียงที่เดียว
 เมื่อทุก ๆ อ็อบเจกต์ที่สร้างขึ้นจากคลาสนี้
ต้องการใช้คลาสดาต้าเมมเบอร์ก็จะอ้างถึงเนื้อที่
4.7.1 คลาสดาต้าเมมเบอร์ (Class Data
Member)
มีรูปแบบการประกาศคลาสดาต้าเมมเบอร์ดังนี้
(<โมดิฟายเออร์>) <static> <ชนิดข้อมูล> <ชื่อ
ตัวแปร> , (<ชื่อตัวแปร>),….. ;
ในกรณีที่คลาสดาต้าเมมเบอร์เป็นค่าคงที่
(<โมดิฟายเออร์>) <static> <final> <ชนิดข้อมูล> <ชื่อ
ตัวแปร> , (<ชื่อตัวแปร>),….. ;
ตัวอย่างที่ 4.11 ตัวอย่างการประกาศคลาสดาต้า
เมมเบอร์ เช่น
private static float minGPA = 2.00f;
static final int noMin = 2;
4.7.2 อินสแตนซ์ดาต้าเมมเบอร์ (Instance data
member)
 อินสแตนซ์ดาต้าเมมเบอร์ ใช้สำหรับแสดงลักษณะ
ประจำของแต่ละอ็อบเจกต์
 แต่ละอ็อบเจกต์อาจมีค่าของอินสแตนซ์ดาต้าเมมเบอร์
แตกต่างหรือเหมือนกันก็ได้
 รูปแบบการประกาศอินสแตนซ์ดาต้าเมมเบอร์เป็นดังนี้
(<โมดิฟายเออร์>) <ชนิดข้อมูล> <ชื่อตัวแปร> , (<ชื่อ
ตัวแปร>),….. ;
หรือในกรณีที่คลาสดาต้าเมมเบอร์เป็นค่าคงที่
 (<โมดิฟายเออร์>) <final> <ชนิดข้อมูล> <ชื่อตัวแปร>
, (<ชื่อตัวแปร>),….. ;
ตัวอย่างที่ 4.12 ตัวอย่างของการประกาศตัวแปรแบ
บอินสแตนซ์ดาต้าเมมเบอร์ public int studentID;

ตัวอย่างที่ 4.13 คลาสดาต้าเมมเบอร์และอินสแตนซ์
ดาต้าเมมเบอร์
 public class Student {
 private static float minGPA = 2.00f;
 static final int noMin = 2;
 public long studentID;
 private String major;
 int totalReg;
 private final String SCHOOL = “Science”;
 ….
 }
4.7 ดาต้าเมมเบอร์ (Data Member)
 มักประกาศตัวแปรประเภทค่าคงที่ให้เป็นคลาส
ดาต้าเมมเบอร์
 หากไม่ได้ระบุโมดิฟายเออร์ให้กับดาต้า
เมมเบอร์ตัวใด จะถือว่าดาต้าเมมเบอร์ตัวนั้นมี
โมดิฟายเออร์เป็น private โดยอัตโนมัติ
4.8 ขอบเขตของการมองเห็น (Scope of
Visibility)
 ขอบเขตของการมองเห็น (Scope of Visibility)
คือพื้นที่ในโปรแกรมที่ชื่อหนึ่งสามารถถูกอ้าง
ถึงได้
 ประโยคหนึ่งสามารถมองเห็นชื่อนั้นได้ ถ้า
ประโยคนั้นอ้างถึงชื่อนั้นได้
 ภาษาจาวามีกำเกณฑ์การมองเห็นตัวแปรและ
เมทอดดังนี้
 1. block { } เป็นตัวกำหนดขอบเขตของการมอง
เห็นตัวแปร ดังนั้นขอบเขตของการมองเห็น
ตัวแปรจะจำกัดอยู่ภายใน block
4.8 ขอบเขตของการมองเห็น (Scope of
Visibility)
 2. จะประกาศตัวแปรที่บรรทัดไหนใน block
ก็ได้ แต่ต้องมีประโยคประกาศตัวแปรนั้นก่อน
ก่อนอ้างถึงครั้งแรก
// ไม่เห็น a
{
 // ไม่เห็น a
 Int a;
 // มองเห็น a
}
//
4.8 ขอบเขตของการมองเห็น (Scope of
Visibility)
 3.ตัวแปรที่ประกาศในเงือนไขของคำสั่ง for จะ
ใช้ได้ภายใน block ของ for เท่านั้น
for (int i = 0; i < 10; i ++) {
 // // มองเห็น i
}
// ไม่เห็น
 4. กรณีที่ตัวแปรของเมทอดมีชื่อซ้ำกับดาต้า
เมมเบอร์ของคลาส ภายในเมทอดตัวแปรของ
เมทอดจะบังดาต้าเมมเบอร์ของคลาส
4.8 ขอบเขตของการมองเห็น (Scope of
Visibility)
 5.ดาต้าเมมเบอร์และเมทอดของคลาสจะถูกมอง
เห็นได้จากทุกเมทอดในคลาสไม่ว่าจะถูก
ประกาศไว้ก่อนหรือหลัง
 class Visible {
 void a( ) {
 // เห็น b( )
 // เห็น x
 }
 int x;
 void b( ) {
 // เห็น a( )
 // เห็น x
 }
4.8 ขอบเขตของการมองเห็น (Scope of
Visibility)
 6. หาก method ที่ static อ้างถึงตัวแปรหรือเมท
อดภายในคลาสเดียวกัน ตัวแปรหรือเมทอดนั้น
ต้องเป็นประเภท static ด้วย
 //Program ScopeRule.java
 class ScopeRule
 {
 static final double rate = 9.50;
 static int a;
 static double b;
 public static void main(String[] args)
 {
 int num = 5;
 double c = 4, a = 3.5;
 char ch = '&';
 System.out.println("Main: " + num + " " + c
+ " "
 + a + " " + ch + " "
 + rate + " " + b);
 one(num, ch);
 two(10, 20);
 }
 public static void one(int x, char y)
 {
 a = 10;
 b = 20.5;
 x = a;
 y = '$';
 c = 12;
 System.out.println("Function One: " + x + " " + y
+ " "
 + a + " " + b + " " + rate + " " + c);
 }
 public static int c;
 public static void two(int one, int y)
 {
 char ch = '#';
 int k = 30;
 one = 5;
 y = 10;
 //Block
 {
 int x = 11;
 System.out.println("Block: " + x + " " + k + " "
+ one + " " + y + " " + ch);
 }//end block
 int x = 9;
 System.out.println("Function Two: " + x + " " + k
+ " " + one + " " + y + " " + ch);
 one(10,'A');
 }
 }
The end.
The end.

More Related Content

PDF
Java Programming: หลักการเชิงอ็อบเจกต์
PPT
Java Programming [4/12] : Object Oriented Concept
PPTX
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PPT
บทที่ 6 คลาสและการเขียนโปรแกรม
PPT
PDF
พื้นฐานภาษาจาวา
PDF
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
PDF
บทที่ 4 แอทริบิวท์
Java Programming: หลักการเชิงอ็อบเจกต์
Java Programming [4/12] : Object Oriented Concept
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
บทที่ 6 คลาสและการเขียนโปรแกรม
พื้นฐานภาษาจาวา
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
บทที่ 4 แอทริบิวท์

Similar to พื้นฐานการเขียนโปรแกรมเชิงอ็อบเจ็กต์พร้อมตัวอย่าง (20)

PDF
Java-Chapter 13 Advanced Classes and Objects
PPT
พื้นฐานภาษาจาวา
PPTX
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PPTX
Presentation 5
PPTX
Presentation 5
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PPT
Chapter1 uml3
PPT
Chapter1 uml3
PDF
Java 7&12 6 2
PDF
บทที่ 3 พื้นฐานภาษา Java
PDF
บทที่ 3 พื้นฐานภาษา Java
PDF
5.Methods cs
PDF
คลาสและโปรแกรม
PPTX
Computer Programming 4
PPTX
Computer Programming 1
PDF
พื้นฐานโปรแกรมภาษาจาวา
PPTX
ภาษาจาวา 1
PDF
งานนำเสนอ1
PDF
บทที่ 5 คลาส
Java-Chapter 13 Advanced Classes and Objects
พื้นฐานภาษาจาวา
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Presentation 5
Presentation 5
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Chapter1 uml3
Chapter1 uml3
Java 7&12 6 2
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
5.Methods cs
คลาสและโปรแกรม
Computer Programming 4
Computer Programming 1
พื้นฐานโปรแกรมภาษาจาวา
ภาษาจาวา 1
งานนำเสนอ1
บทที่ 5 คลาส
Ad

พื้นฐานการเขียนโปรแกรมเชิงอ็อบเจ็กต์พร้อมตัวอย่าง

  • 2. วัตถุประสงค์ วัตถุประสงค์  1. เพื่อเข้าใจแนวคิดการเขียนโปรแกรมเชิงอ็อบเจกต์  2. เพื่อให้เข้าใจแนวคิดของคลาสและอ็อบเจกต์  3. เพื่อให้รู้จักรูปแบบพื้นฐานของคลาสและอ็อบเจกต์ ของภาษาจาวา  4. เพื่อให้เข้าใจแนวคิดของการซ่อนสารสนเทศและ การนำไปใช้  5. เพื่อให้รู้จักรูปแบบของดาต้าเมมเบอร์และเมท็อด ของภาษาจาวา  6. เพื่อให้สามารถสร้าง คอมไพล์ และใช้งาน โปรแกรมภาษาจาวา
  • 3. เนื้อหา เนื้อหา  4.1 แนะนำการเขียนโปรแกรมเชิงอ็อบเจกต์  4.2 คลาสและอ็อบเจกต์  4.3 การสร้างอ็อบเจกต์จากคลาส  4.4 การซ่อนสารสนเทศ (Information Hiding) หรือ การ ห่อหุ้ม (Encapsulation)  4.5 เมทอด  4.6 เมทอดคอนสตรัคเตอร์  4.7 ดาต้าเมมเบอร์  4.8 ขอบเขตของการมองเห็น  4.9 การออกแบบคลาสและการใช้คลาส  4.10 การจัดเก็บและการคอมไพล์โปรแกรม
  • 4. 4.1 4.1 แนะนำการเขียนโปรแกรม แนะนำการเขียนโปรแกรม เชิงอ็อบเจกต์ เชิงอ็อบเจกต์  Abstraction การกำหนดสาระสำคัญ  Data Abstraction การกำหนดสาระสำคัญของ ข้อมูลในลักษณะองค์รวม เช่น เลขจำนวนเต็ม  การกำหนดคุณลักษณะ  การกำหนดพฤติกรรม  Abstract Data Type – ADT แบบข้อมูลนามธรรม  เอนทิตี (Entity) = ค่าของข้อมูล + ชุดของการดำเนิน การ (Operation)  แบบข้อมูลนามธรรมของเลขจำนวนเต็ม  จำนวนเต็มบวก จำนวนเต็มลบ และศูนย์  ชุดของการดำเนินการ เช่น บวก ลบ คูณ หาร และเปรียบเทียบ ความเท่ากัน
  • 5. 4.1 4.1 แนะนำการเขียนโปรแกรม แนะนำการเขียนโปรแกรม เชิงอ็อบเจกต์ เชิงอ็อบเจกต์ Problem Solving การแก้ปัญหา  แนวคิดแบบข้อมูลนามธรรม  ระบุข้อมูลที่เหมาะสม (Data Specification) และ  กระบวนการแก้ปัญหาหรือออกแบบโปรแกรม (Programming)
  • 6. 4.1 4.1 แนะนำการเขียนโปรแกรม แนะนำการเขียนโปรแกรม เชิงอ็อบเจกต์ เชิงอ็อบเจกต์ การแก้ปัญหาโดยวิธีการเชิงอ็อบเจกต์ ◦ องค์ประกอบของปัญหา เรียกว่า อ็อบเจกต์ (Object) ◦ อ็อบเจกต์ (Object)  ลักษณะประจำ (Attribute หรือ Data)  พฤติกรรม (Behavior หรือ Operation) ◦ สอดคล้องกับการแก้ปัญหาในลักษณะของแบบ ข้อมูลนามธรรม  อ็อบเจกต์คือเอนทิตี  คุณสมบัติคือค่าของข้อมูล  พฤติกรรมคือกับชุดของการดำเนินการ
  • 7. 4.1 4.1 แนะนำการเขียนโปรแกรม แนะนำการเขียนโปรแกรม เชิงอ็อบเจกต์ เชิงอ็อบเจกต์  อ็อบเจกต์ที่มีคุณสมบัติและพฤติธรรมที่เหมือน กันจัดอยู่ในกลุ่มเดียวกันเรียกว่าคลาส (Class)  อ็อบเจกต์ยังมีคุณสมบัติที่สำคัญ 3 ประการคือ ◦ 1) การซ่อนสารสนเทศ (Information Hiding) หรือ การห่อหุ้ม (Encapsuation) ◦ 2) ภาวะพหุสัณฐาน (Polymorphism) และ ◦ 3) ความสัมพันธ์ระหว่างคลาส (Class Relationships)  3.1) การรวมกัน (Association)  3.2) การประกอบ (Composition หรือ Aggregation) และ  3.3) การสืบทอด (Inheritance)
  • 8. 4.2 4.2 คลาสและอ็อบเจกต์ คลาสและอ็อบเจกต์  อ็อบเจกต์หรือ เอนทิตี สิ่งที่เป็นองค์ประกอบ ในปัญหา  อ็อบเจกต์ (Object) พื้นที่ในหน่วยความจำ ของเครื่องคอมพิวเตอร์เพื่อใช้ในการประมวล ผล  อ็อบเจกต์ ชื่อที่ใช้เรียกสิ่งที่สร้างขึ้นจาก ต้นแบบ ซึ่งก็คือคลาส หรือ อินสแตนด์ของ คลาส  คลาส (Class) คือ การกำหนดสาระสำคัญ หรือภาพรวม หรือต้นแบบของอ็อบเจกต์
  • 9. 4.2 4.2 คลาสและอ็อบเจกต์ คลาสและอ็อบเจกต์  คลาส (Class) คือ การกำหนดสาระสำคัญ หรือภาพรวม หรือต้นแบบของอ็อบเจกต์ ◦ ดาต้าเมมเบอร์ (Data Member) หรือ สมาชิกข้อมูล ใช้กำหนดว่าวัตถุที่สร้างจาก คลาสมีลักษณะประจำหรือสถานะอะไรบ้าง ◦ เมท็อด (Method) ใช้กำหนดว่าวัตถุที่สร้าง จากคลาสประกอบด้วยพฤติกรรมหรือ กระบวนการเปลี่ยนแปลงสถานะของอ็อบเจ กต์อะไรบ้าง
  • 10. 4.2 4.2 คลาสและอ็อบเจกต์ คลาสและอ็อบเจกต์  คลาสเป็นการอธิบายถึงสาระสำคัญของสิ่งใดสิ่ง หนึ่งว่ามีคุณสมบัติและพฤติกรรมอย่างไร  อ็อบเจกต์แสดงถึงสิ่งที่ปรากฏอยู่ของคลาสนั้น ๆ  แต่ละอ็อบเจกต์จะมีเอกลักษณ์ที่ช่วยให้สามารถ แยกอ็อบเจกต์หนึ่งออกจากอ็อบเจกต์อื่น ๆ
  • 11. ตัวอย่างที่ ตัวอย่างที่ 4.1 4.1 การประกาศคลาส การประกาศคลาส ◦ (<modifier>) class <ชื่อคลาส> <โครงสร้างของคลาส> ◦ class FirstClass { } ตัวอย่างที่ ตัวอย่างที่ 4.2 4.2 การประกาศคลาส การประกาศคลาส public class CurrencyExchange { private float exchange_rate; String currency; public void setRate(float exchange_rate, String currency) { this. exchange_rate = exchange_rate; this.currency = currency; } }
  • 12. 4.3 4.3 การสร้างอ็อบเจกต์จากคลาส การสร้างอ็อบเจกต์จากคลาส สามารถใช้คลาสสร้างอ็อบเจ็กต์โดยใช้รูปแบบ ดังนี้ new <ชื่อคลาส> (<ลำดับอาร์กิวเมนต์>) ลำดับอาร์กิวเมนต์ คือ ลำดับค่าที่ส่งให้ พารามิเตอร์ของ constructor ของคลาสเพื่อ กำหนดสถานะเริ่มต้นให้กับอ็อบเจ็กต์ที่ถูกสร้าง โดยการใช้คำสั่ง new ผลลัพธ์ของการใช้คำสั่ง new คืออ็อบเจ็กต์ที่ สร้างจากคลาสนั้น และ เนื้อที่ของหน่วยความ จำของอ็อบเจ็กต์
  • 13. 4.3 4.3 การสร้างอ็อบเจกต์จากคลาส การสร้างอ็อบเจกต์จากคลาส ผู้เขียนโปรแกรมสามารถอ้างถึงอ็อบเจ็กต์ที่สร้าง ขึ้น ด้วยการประกาศอ็อบเจ็กต์ที่ใช้อ้างอิง ดังรูป แบบ <ชื่อคลาส> <ชื่ออ็อบเจ็กต์อ้างอิง> = new <ชื่อ คลาส> (<ลำดับอาร์กิวเมนต์>) FirstClass a = new FirstClass( ); การประกาศอ็อบเจ็กต์อ้างอิงเตรียมไว้เพื่อใช้อ้าง ไปยังอ็อบเจ็กต์ที่สร้างภายหลัง FirstClass a; a = new FirstClass( );
  • 14. 4.3.1 การอ้างถึงสมาชิกในอ็อบเจ กต์ เมื่อสร้างอ็อบเจ็กต์จากคลาสและประกาศ อ็อบเจ็กต์ที่ใช้อ้างอิงแล้ว สามารถเข้าถึง สมาชิกของอ็อบเจ็กต์โดยใช้ ชื่ออ็อบเจ็กต์ อ้างอิงตามด้วยจุด (.) ต่อด้วยชื่อสมาชิก ดังรูป แบบต่อไปนี้ <ชื่ออ็อบเจ็กต์อ้างอิง>.<ชื่อสมาชิกของ คลาส>
  • 15.  การเขียนโปรแกรมเชิงอ็อบเจกต์ให้ความสำคัญ กับการซ่อนสารสนเทศจากคลาสภายนอก  ภาษาจาวามีส่วนขยาย (modifiers) ให้เลือกใช้ งานสามรูปแบบ สำหรับกำหนดว่าคลาสและ สมาชิกแต่ละตัวของคลาส (ดาต้าเมมเบอร์ และ เมทอด) สามารถมองเห็นและอ้างถึงได้หรือไม่ จากภายนอกคลาส ◦ public ถูกอ้างถึงได้จากทุกคลาสที่เห็นคลาสนั้นๆ ◦ protected ถูกอ้างถึงได้จากคลาสที่อยู่ภายใน package เดียวกัน หรือคลาสลูกที่อยู่ต่าง package ◦ private ถูกอ้างถึงได้จากภายในคลาสเท่านั้น 4.4 4.4 การซ่อนสารสนเทศ การซ่อนสารสนเทศ (Information (Information Hiding) Hiding) หรือการห่อหุ้ม หรือการห่อหุ้ม (Encapsulation) (Encapsulation)
  • 16. 4.4 4.4 การซ่อนสารสนเทศ การซ่อนสารสนเทศ (Information (Information Hiding) Hiding) หรือการห่อหุ้ม หรือการห่อหุ้ม (Encapsulation) (Encapsulation)  สำหรับสมาชิกที่ไม่มี modifier จะถือว่ามี modifier เป็น default คือ ถูกอ้างถึงได้จาก คลาสที่อยู่ภายใน package เดียวกัน  หมายเหตุ คลาสที่ public สามารถ import ไป ใช้งานใน package อื่นได้ แต่คลาสที่ default ไม่สามารถ import ไปใช้งานใน package อื่น ได้
  • 17. 4.4 4.4 การซ่อนสารสนเทศ การซ่อนสารสนเทศ (Information (Information Hiding) Hiding) หรือการห่อหุ้ม หรือการห่อหุ้ม (Encapsulation) (Encapsulation)  การติดต่อกันระหว่างแต่ละอ็อบเจกต์เพื่อทำงานใดงาน หนึ่งสามารถทำได้โดยการส่งแมสแสจ (Message) ผ่าน ทางเมท็อดของแต่ละอ็อบเจกต์  เนื่องจากแต่ละอ็อบเจกต์สามารถซ่อนดาต้าเมมเบอร์และ เมท็อดจากอ็อบเจกต์อื่นได้  หากต้องการเรียกใช้ดาต้าเมมเบอร์จากอ็อบเจกต์อื่น ๆ ที่ ไม่ใช่อ็อบเจกต์ที่เป็นเจ้าของดาต้าเมมเบอร์นั้น ต้องเรียก ใช้งานผ่านเมท็อดที่ได้รับอนุญาตเท่านั้น  ผู้เขียนโปรแกรมสามารถกำหนดได้ว่าต้องการให้ดาต้า เมมเบอร์หรือเมท็อดนั้นสามารถเรียกใช้งานจากภายนอก ขอบเขตของคลาสนั้นได้หรือไม่ โดยการใช้ส่วนขยาย หรือ โมดิฟายเออร์ (Modifier)
  • 18.  //Program TestModifier.java;  class Modifier {  public char z = 'A';  protected String sentence;  int i;  private int x;  int sqr (int y) {  return y * y;  }  private int plusOne (int y) {  return y+1;  }  int callPlusOne (int y) {  return i = plusOne(y);  }  }  public class TestModifier {  public static void main(String args[]) {  int a = 2, b, c;  Modifier mod1 = new Modifier();  b = mod1.sqr(a);  c = mod1.plusOne(a); // compile error  c = mod1.callPlusOne(a);  mod1.sentence = "Hello";  System.out.println(c);  System.out.println(mod1.z);  System.out.println(mod1.sentence);  System.out.println(mod1.sqr(a));  System.out.println(mod1.x); // compile error  }  }  ตัวอย่างที่ 4.5
  • 19. ตัวอย่างที่ 4.6 ขอบเขตการใช้งานดาต้าเมมเบอร์ แบบ private  //Program TestCurrencyPrivate.java  package chapter4;  import java.util.Scanner;  class CurrencyExchange {  private float changeRate;  public void setChangeRate (float rate) {  changeRate = rate;  }  public float toBaht (float otherUnit) {  return (otherUnit * changeRate);  }  public float fromBaht (float baht) {  return (baht / changeRate);  }  }  public class TestCurrencyPrivate {  static Scanner console = new Scanner(System.in);  public static void main (String[] args) {  float rate, baht, usDollars;  System.out.print("Enter exchange rate for USD : ");  rate = console.nextFloat();  CurrencyExchange currencyExchange = new CurrencyExchange();  currencyExchange.setChangeRate(rate);  System.out.print("Enter amount in baht : ");  baht = console.nextFloat();  usDollars = currencyExchange.fromBaht(baht);  System.out.println("Baht : " + baht + ", USD rate : " + rate +  ", USD : " + usDollars + "dollars.");  }  }  เปลี่ยนแปลงค่า changeRate ซึ่ง เป็ นดาต้าเมมเบอร ์แบบ private ขอ งอ็อบเจกต์currencyExchange โดยเรียกใช้งานเมท็อด currencyExchange.setChangeR ate(rate)
  • 20. ตัวอย่างที่ 4.7 ขอบเขตการใช้งานดาต้าเมมเบอร์ แบบ public  //Program TestCurrencyPublic.java  import java.util.Scanner;  class CurrencyExchangeP {  public float changeRate;  public float toBaht (float otherUnit) {  return (otherUnit * changeRate);  }  public float fromBaht (float baht) {  return (baht / changeRate);  }  }  public class TestCurrencyPublic {  static Scanner console = new Scanner(System.in);  public static void main (String[] args) {  float rate, baht, usDollars;  System.out.print("Enter exchange rate for USD : ");  rate = console.nextFloat();  CurrencyExchangeP currencyExchange = new CurrencyExchangeP();  currencyExchange.changeRate = rate;  System.out.print("Enter amount in baht : ");  baht = console.nextFloat();  usDollars = currencyExchange.fromBaht(baht);  System.out.println("Baht : " + baht + ", USD rate : " + rate  + ", USD : " + usDollars + " dollars.");  }  }  สามารถเปลี่ยนแปลงค่า changeRate ซึ่งเป็ นดาต้าเมมเบอร ์ แบบ public ของอ็อบเจกต์ currencyExchange ได้โดยตรง ด้วยคำสั่ง currencyExchange.changeRate = rate
  • 21. 4.5 เมท็อด (Method)  คือ สมาชิกของคลาสที่ใช้สำหรับกำหนดพฤติกรรมของอ็ อบเจกต์  เมท็อดจะอยู่ภายในคลาสเท่านั้น  แต่ละเมท็อดควรทำหน้าที่เพียงอย่างเดียว  ในภาษาจาวามีรูปแบบการประกาศเมท็อด 2 รูปแบบหลัก คือ ◦ 1) เมท็อดที่ส่งค่ากลับเมื่อทำงานเสร็จสิ้น ◦ 2) เมท็อดที่ไม่มีการส่งค่ากลับ  เมทอดที่ไม่มีการส่งค่ากลับ สามารถเรียกใช้งานเมท็อดนั้น โดยตรง  เมทอดที่มีการส่งค่ากลับ การเรียกใช้งานจะต้องมีตัวแปรรับ ค่าพารามิเตอร์ซึ่งมีชนิดข้อมูลเดียวกันกับที่ประกาศไว้ใน เมท็อดที่ส่งค่ากลับ
  • 22. 4.5.1 เมท็อดที่ส่งค่ากลับเมื่อทำงานเสร็จ สิ้น (<modifier>) (<ชนิดข้อมูลค่าที่ส่งกลับ>) <ชื่อ เมทอด> (<ลำดับอาร์กิวเมนต์>) { … return (<ค่าที่ส่งกลับ>); }
  • 23. 4.5.2 เมท็อดที่ไม่มีการส่งค่ากลับ (<modifier>) void <ชื่อเมทอด> (<ลำดับ อาร์กิวเมนต์>) { … }
  • 24. ตัวอย่างที่ 4.8  class CurrencyExchange {  private float changeRate;  public void setChangeRate (float rate) {  changeRate = rate;  }   public float toBaht (float otherUnit) {  return (otherUnit * changeRate);  }  public float fromBaht (float baht) {  return (baht / changeRate);  }  }
  • 25. ตัวอย่างที่ 4.9  public class TestCurrencyPrivate {  static Scanner console = new Scanner(System.in);  public static void main (String[] args) {  float rate, baht, usDollars ;  System.out.print("Enter exchange rate for USD : ");  rate = console.nextFloat();  CurrencyExchange currencyExchange = new CurrencyExchange();  currencyExchange.setChangeRate(rate);  System.out.print("Enter amount in baht : ");  baht = console.nextFloat();  usDollars = currencyExchange.fromBaht(baht);  System.out.println("Baht : " + baht + ", USD rate : " + rate + ", USD : " + usDollars + "dollars.");  }  }
  • 26. 4.6 เมทอดคอนสตรัคเตอร์ (Constructor Method)  อ็อบเจกต์แต่ละตัว แม้ว่าจะสร้างจากคลาสเดียวกัน ก็ มักมีมีสถานะที่แตกต่างกัน  ภาษาจาวามีกลไกสำหรับกำหนดค่าเริ่มต้นให้กับ data members หรือ สมาชิกข้อมูล ในขั้นตอนการสร้าง อ็อบเจ็กต์จากคลาส เรียกว่า เมทอดคอนสตรัคเตอร์ (constructor method)  เมทอดคอนสตรัคเตอร์ มีโครงสร้างคล้ายกับเมทอด อื่นๆ แต่มีลักษณะสำคัญคือมีชื่อเหมือนกับคลาส และ ห้ามส่งค่าออกมาจากเมทอด คือ ห้ามมีคำสั่ง return  โครงสร้างของ constructor method เป็นดังนี้  <ชื่อคลาส> (<ลำดับพารามิเตอร์>) <โครงสร้างเมท อด>
  • 27. 4.6 เมทอดคอนสตรัคเตอร์ (Constructor Method)  constructor method จะถูกเรียกใช้พร้อมกับการใช้คำสั่ง new เพื่อสร้าง อ็อบเจ็กต์  พารามิเตอร์ของ constructor นำค่าที่รับเข้าไปกำหนดค่าให้กับ data members เพื่อกำหนดค่าเริ่มต้นหรือสถานะของอ็อบเจ็กต์ที่สร้างขึ้นมา ใหม่  ถ้าไม่มีการเขียนเมท็อดนี้ไว้ใน คลาส เจวีเอ็มก็จะสร้างอ็อบเจกต์ให้โดย อัตโนมัติ  คลาสหนึ่งคลาส มี constructor method ได้มากกว่าหนึ่ง เรียกกรณีนี้ว่า overloaded constructors ◦ constructor แต่ละตัว ต้องมีพารามิเตอร์แตกต่างกัน ◦ อาจต่างกันที่จำนวนพารามิเตอร์ ชนิดของพารามิเตอร์ หรือ ลำดับของ พารามิเตอร์ ◦ คอมไพเลอร์จะเลือกใช้ constructor method ที่เหมาะสมจากพารามิเตอร์ที่ ส่งให้ ◦ เป็นกลไกที่ช่วยให้ผู้เขียนโปรแกรมสามารถกำหนดสถานะของอ็อบเจ็กต์ได้ หลากหลายแบบ
  • 28. ตัวอย่างที่ 4.10 โปรแกรมแสดงการใช้ constructor method  // Program TestConstructor.java  class Constructor {  int x;  Constructor (int y) {  x = y;  System.out.println("x = "+ x);  }  Constructor () {  x = 0;  System.out.println("x = "+ x);  }  }  public class TestConstructor {  public static void main(String args[]) {  Constructor cons1 = new Constructor(2);  Constructor cons2 = new Constructor();  }  }
  • 29. 4.7 ดาต้าเมมเบอร์ (Data Member) ภาษาจาวาแบ่งประเภทของดาต้าเมมเบอร์เป็น 2 รูปแบบ คือ คลาสดาต้าเมมเบอร์ (Class Data Member) และ อินส แตนซ์ดาต้าเมมเบอร์ (Instance data member) 4.7.1 คลาสดาต้าเมมเบอร์ (Class Data Member)  คลาสดาต้าเมมเบอร์ คือ ตัวแปรที่สามารถใช้ ร่วมกันได้สำหรับทุกๆ อ็อบเจกต์ที่สร้างขึ้นจาก คลาส  เนื้อที่ในหน่วยความจำที่ใช้สำหรับเก็บค่าของ คลาสดาต้าเมมเบอร์จะถูกสร้างขึ้นเพียงที่เดียว  เมื่อทุก ๆ อ็อบเจกต์ที่สร้างขึ้นจากคลาสนี้ ต้องการใช้คลาสดาต้าเมมเบอร์ก็จะอ้างถึงเนื้อที่
  • 30. 4.7.1 คลาสดาต้าเมมเบอร์ (Class Data Member) มีรูปแบบการประกาศคลาสดาต้าเมมเบอร์ดังนี้ (<โมดิฟายเออร์>) <static> <ชนิดข้อมูล> <ชื่อ ตัวแปร> , (<ชื่อตัวแปร>),….. ; ในกรณีที่คลาสดาต้าเมมเบอร์เป็นค่าคงที่ (<โมดิฟายเออร์>) <static> <final> <ชนิดข้อมูล> <ชื่อ ตัวแปร> , (<ชื่อตัวแปร>),….. ; ตัวอย่างที่ 4.11 ตัวอย่างการประกาศคลาสดาต้า เมมเบอร์ เช่น private static float minGPA = 2.00f; static final int noMin = 2;
  • 31. 4.7.2 อินสแตนซ์ดาต้าเมมเบอร์ (Instance data member)  อินสแตนซ์ดาต้าเมมเบอร์ ใช้สำหรับแสดงลักษณะ ประจำของแต่ละอ็อบเจกต์  แต่ละอ็อบเจกต์อาจมีค่าของอินสแตนซ์ดาต้าเมมเบอร์ แตกต่างหรือเหมือนกันก็ได้  รูปแบบการประกาศอินสแตนซ์ดาต้าเมมเบอร์เป็นดังนี้ (<โมดิฟายเออร์>) <ชนิดข้อมูล> <ชื่อตัวแปร> , (<ชื่อ ตัวแปร>),….. ; หรือในกรณีที่คลาสดาต้าเมมเบอร์เป็นค่าคงที่  (<โมดิฟายเออร์>) <final> <ชนิดข้อมูล> <ชื่อตัวแปร> , (<ชื่อตัวแปร>),….. ; ตัวอย่างที่ 4.12 ตัวอย่างของการประกาศตัวแปรแบ บอินสแตนซ์ดาต้าเมมเบอร์ public int studentID; 
  • 32. ตัวอย่างที่ 4.13 คลาสดาต้าเมมเบอร์และอินสแตนซ์ ดาต้าเมมเบอร์  public class Student {  private static float minGPA = 2.00f;  static final int noMin = 2;  public long studentID;  private String major;  int totalReg;  private final String SCHOOL = “Science”;  ….  }
  • 33. 4.7 ดาต้าเมมเบอร์ (Data Member)  มักประกาศตัวแปรประเภทค่าคงที่ให้เป็นคลาส ดาต้าเมมเบอร์  หากไม่ได้ระบุโมดิฟายเออร์ให้กับดาต้า เมมเบอร์ตัวใด จะถือว่าดาต้าเมมเบอร์ตัวนั้นมี โมดิฟายเออร์เป็น private โดยอัตโนมัติ
  • 34. 4.8 ขอบเขตของการมองเห็น (Scope of Visibility)  ขอบเขตของการมองเห็น (Scope of Visibility) คือพื้นที่ในโปรแกรมที่ชื่อหนึ่งสามารถถูกอ้าง ถึงได้  ประโยคหนึ่งสามารถมองเห็นชื่อนั้นได้ ถ้า ประโยคนั้นอ้างถึงชื่อนั้นได้  ภาษาจาวามีกำเกณฑ์การมองเห็นตัวแปรและ เมทอดดังนี้  1. block { } เป็นตัวกำหนดขอบเขตของการมอง เห็นตัวแปร ดังนั้นขอบเขตของการมองเห็น ตัวแปรจะจำกัดอยู่ภายใน block
  • 35. 4.8 ขอบเขตของการมองเห็น (Scope of Visibility)  2. จะประกาศตัวแปรที่บรรทัดไหนใน block ก็ได้ แต่ต้องมีประโยคประกาศตัวแปรนั้นก่อน ก่อนอ้างถึงครั้งแรก // ไม่เห็น a {  // ไม่เห็น a  Int a;  // มองเห็น a } //
  • 36. 4.8 ขอบเขตของการมองเห็น (Scope of Visibility)  3.ตัวแปรที่ประกาศในเงือนไขของคำสั่ง for จะ ใช้ได้ภายใน block ของ for เท่านั้น for (int i = 0; i < 10; i ++) {  // // มองเห็น i } // ไม่เห็น  4. กรณีที่ตัวแปรของเมทอดมีชื่อซ้ำกับดาต้า เมมเบอร์ของคลาส ภายในเมทอดตัวแปรของ เมทอดจะบังดาต้าเมมเบอร์ของคลาส
  • 37. 4.8 ขอบเขตของการมองเห็น (Scope of Visibility)  5.ดาต้าเมมเบอร์และเมทอดของคลาสจะถูกมอง เห็นได้จากทุกเมทอดในคลาสไม่ว่าจะถูก ประกาศไว้ก่อนหรือหลัง  class Visible {  void a( ) {  // เห็น b( )  // เห็น x  }  int x;  void b( ) {  // เห็น a( )  // เห็น x  }
  • 38. 4.8 ขอบเขตของการมองเห็น (Scope of Visibility)  6. หาก method ที่ static อ้างถึงตัวแปรหรือเมท อดภายในคลาสเดียวกัน ตัวแปรหรือเมทอดนั้น ต้องเป็นประเภท static ด้วย
  • 39.  //Program ScopeRule.java  class ScopeRule  {  static final double rate = 9.50;  static int a;  static double b;  public static void main(String[] args)  {  int num = 5;  double c = 4, a = 3.5;  char ch = '&';  System.out.println("Main: " + num + " " + c + " "  + a + " " + ch + " "  + rate + " " + b);  one(num, ch);  two(10, 20);  }  public static void one(int x, char y)  {  a = 10;  b = 20.5;  x = a;  y = '$';  c = 12;  System.out.println("Function One: " + x + " " + y + " "  + a + " " + b + " " + rate + " " + c);  }  public static int c;  public static void two(int one, int y)  {  char ch = '#';  int k = 30;  one = 5;  y = 10;  //Block  {  int x = 11;  System.out.println("Block: " + x + " " + k + " " + one + " " + y + " " + ch);  }//end block  int x = 9;  System.out.println("Function Two: " + x + " " + k + " " + one + " " + y + " " + ch);  one(10,'A');  }  }