SlideShare a Scribd company logo
1
การโปรแกรมโดย Classes Objects
และ Methods
2
หลักการเชิงวัตถุ
 การเขียนโปรแกรมเชิงวัตถุ:- เป็นการเขียนโปรแกรมที่มองทุก
อย่างภายในโปรแกรมและสภาพแวดล้อมเป็นวัตถุ การสร้าง
วัตถุชิ้นหนึ่งต้องประกอบด้วยวัตถุอื่นอีกหลายชิ้น
 หลักทั่วไปของ OOP คือ การสืบทอดออบเจ็กต์
(inheritance Object) เป็นการนาคุณลักษณะจาก
Object ที่มีอยู่แล้วมาใช้งาน โดยไม่ต้องสร้างฟังก์ชันหรือ
Object ขึ้นใหม่
 Object:- สิ่งที่มีตัวตนและนาไปใช้ในการประมวลผลข้อมูลได้
 โครงสร้างของ Object คือ คลาส (Class) ซึ่งแต่ละ
Object ประกอบด้วย
– คุณสมบัติ (Property) หรือข้อมูล (Data)
– พฤติกรรม (Behavior) หรือ Method
3
 คลาสต่าง ๆ ใน Object ใหม่ที่มีต้นกาเนิดจากคลาสเดิม
เรียกคลาสต้นกาเนิดว่า คลาสหลัก (SuperClass) และ
เรียกคลาสที่มีคุณสมบัติคล้ายฟังก์ชันว่า คลาสย่อย
(SubClass) ซึ่งคลาสย่อยจะสืบคุณสมบัติทั้งหมดของคลาส
หลักมาใช้งาน
 คลาสที่ไม่ระบุคลาสหลักถือว่า คลาสนั้นกาเนิดจาก Object
และด้วยการสืบทอดรูปแบบ ส่งผลให้แต่ละ Object มี
คุณสมบัติเหมือน Object ต้นกาเนิด ทาให้สามารถเขียน
โปรแกรมได้เร็วขึ้น
 Object Class เป็นคลาสเดียวใน Object ที่ไม่มีคลาสหลัก
และเป็น SuperClass ของทุกคลาสใน Java โดยเป็น
Class สาเร็จรูปที่สามารถเรียกใช้ได้ทันที ดังนั้น ทุก
Method ใน Object Class จึงถูกเรียกใช้งานโดย
คลาสใด ๆ ก็ได้
4
 การเขียนโปรแกรมเชิงวัตถุสนใจข้อมูลที่ถูกประมวลผลมากกว่า
ฟังก์ชันที่ทาการประมวลผล โดยข้อมูลจะถูกใช้เป็นหลักในการ
แบ่งโปรแกรมเป็นส่วน ๆ ที่สามารถแก้ไขเปลี่ยนแปลงได้ในแต่ละ
ส่วน และสามารถนากลับมารวมเป็นโปรแกรมใหญ่ได้อีกครั้ง ช่วย
ให้การเขียนโปรแกรมเป็นไปอย่างรวดเร็ว และสามารถ
เปลี่ยนแปลงสิ่งที่อยู่ภายในแต่ละ Object ได้โดยไม่ผลกระทบ
กับส่วนอื่นของโปรแกรมหลัก
 Method ใน Java เปรียบเสมือน Procedure หรือ
Function ในภาษาอื่น โดย Java ประกอบด้วย Class
ต่าง ๆ ในแต่ละ Class จะมีอย่างน้อย 1 Method เพื่อใช้
ในการปฏิบัติงาน
 บางโปรแกรมอาจมี Method ในการปฏิบัติงานจานวนมาก แต่
ต้องมี Method ชื่อ Main เพื่อเริ่มต้นโปรแกรม ภายใน
main Method จะเรียกใช้ Method ใด ๆ ขึ้นอยู่กับการ
ทางานของโปรแกรม
5
ตัวอย่างโครงสร้างโปรแกรม
public class A
Method A1
Method A2
main Method
Class B
Method B1
6
โครงสร้างของ Class
[<access_spec.>] [<modifier>] class <class_name> [extends SuperClass_name]
[implements interfaces_name]
{ //data members
//methods }
 access_specifier และ modifier :- ระดับการเข้าถึงหรือ
ความสามารถในการให้บริการกับคลาสอื่น ๆ เช่น public private
protected final
 class :- คาศัพท์สงวนที่บอกให้ทราบว่า ส่วนของโปรแกรมต่อไปนี้ เป็นคลาส
 extends :- คาศัพท์เฉพาะที่บอกให้ทราบว่า คลาสนี้ สืบทอดมาจาก
SuperClass
 superClass_name :- ชื่อของคลาสที่ต้องการสืบคุณสมบัติต่าง ๆ มาใช้
งาน เพื่อไม่ต้องเริ่มเขียนโปรแกรมจากจุดเริ่มต้น
 implements :- คาศัพท์เฉพาะเพื่อเรียกใช้หรือขอการสนับสนุนจากคลาส
อื่นมาเป็นส่วนเชื่อมประสานระหว่างคลาส
 interfaces_name :- ชื่อของอินเทอร์เฟซที่ต้องการใช้งาน การใช้งานแบบ
อินเทอร์เฟซเป็นการะบุกลุ่มพฤติกรรมที่เพิ่มให้คลาส นอกเหนือจากพฤติกรรม
ต่าง ๆ จาก SuperClass
7
โครงสร้างของ data members
[<access_specifier>] [<modifier>] <datatype> <variable_name>
 access_specifier และ modifier เป็นการกาหนด
คุณลักษณะพิเศษในการใช้งานตัวแปร เช่น static final
public private protected
8
โครงสร้างของ Method
[<access_spec.>] [<modifier>] <return_type> <method_name> ([arg._list])
{ //Statements }
 access_specifier และ modifier:- ระดับการเข้าถึง
ข้อมูล เช่น public private static void final
 return_type :- ชนิดของข้อมูลที่จะส่งคืนหลังสิ้นสุดการทางาน
ของ Method ซึ่งใน 1 Method จะต้องส่งผลลัพธ์อย่างน้อย
ที่สุด 1 ค่ากลับไปยัง Method ที่เรียกใช้มา
 argument_list :- ชื่อของตัวแปรที่ใช้รับข้อมูลที่ส่งมาจาก
Method ที่เรียกใช้งาน Method นี้
 Statements :- คาสั่งควบคุมการทางานของนิพจน์ เพื่อ
กาหนดวิธีการประมวลผลภายใน method
9
ตัวอย่างของ method ชื่อ factorial
public long factorial (long theNumber)
{ long result = theNumber;
for (int i=theNumber–1; i>=1; i--)
result*=i;
return result; }
10
ประเภทของ Method
 Method ที่สร้างขึ้นมาเอง :- Method ที่ผู้เขียนโปรแกรมสร้างขึ้น
ใช้เองตามต้องการอาจอยู่ใน Class เดียวกันหรือต่าง Class กันก็ได้
 Method ที่มีอยู่แล้ว :- Method ใน Class Libraries ต่าง ๆ
ใน Package ของ JDK การเรียกใช้งานต้องระบุในคาสั่ง import
ตอนต้นโปรแกรม โดยไม่จาเป็นต้องสร้าง Object ขึ้นมาใหม่
11
ตัวอย่างการเรียกใช้ Method ที่สร้างขึ้นเอง
12
ตัวอย่างการเรียกใช้ Method ที่อยู่ต่าง Class
13
การเรียกใช้ Method จาก Class Libraries
 เรียกใช้โดยระบุชื่อ Package ชื่อ Class และชื่อ Method
ตามลาดับ คั่นด้วยเครื่องหมายจุด
ชื่อ Package. ชื่อ Class. ชื่อ Method(parameter_list);
System.out.println(“Warm Welcome”);
14
ตัวอย่างการเรียกใช้ Method ในคาสั่งเดียวกัน
15
Method Invocation
 การเรียกใช้method ทาได้ในสองลักษณะ
– Method ที่ไม่ส่งค่ากลับออกมาจะต้องถูกเรียกจากตาแหน่งของประโยค
– Method ที่ส่งค่ากลับออกมาจะต้องถูกเรียกจากตาแหน่งของ term ภายใน
expression
 โครงสร้างของประโยคที่เรียก method มีดังนี้
<method name> (<argument list>);
<argument list> คือ ลาดับของ expression หรือตัวแปร หรือ instance หรือ
ค่าคงที่ ของค่าที่จะถูกส่งให้แก่พารามิเตอร์ใน method ที่ถูกเรียก จานวน
และชนิดข้อมูลของ <argument list> จะต้องสอดคล้องกับ <parameter list>
ของ method ที่ถูกเรียก
ด้านของประโยคที่เรียก method ค่า <argument list> ที่ถูกส่งออกมา จะถูก
เรียกว่า actual parameter หรือ argument ส่วนทางด้านโปรแกรมที่กาหนด
method ค่า <parameter list> ที่รับเข้ามาจะถูกเรียกว่า formal parameter หรือ
parameter
16
 เมื่อมีการเรียก method จะมีเหตุการณ์เกิดขึ้นดังต่อไปนี้
1. ค่าของ argument จะถูกส่งให้แก่พารามิเตอร์ตามตาแหน่งของมัน
2. โปรแกรมเปลี่ยนการดาเนินจากประโยคที่เรียก method ไปที่
จุดเริ่มต้นของ method นั้น หากมีการประกาศตัวแปรเฉพาะที่ใน
method ก็สร้างตัวแปรเหล่านี้ขึ้น แล้วโปรแกรมดาเนินต่อไป
จนกว่าจะถึงประโยคสุดท้าย หรือถึงประโยค return
3. หาก method ดาเนินไปถึงประโยค return ที่มี
expression ค่าของ expression นั้นจะถูกคานวณและ
ผลลัพธ์นั้นถูกส่งกลับไปยังตาแหน่งที่เรียก method นั้น แต่หาก
method นั้นถูกระบุว่าจะไม่ส่งค่าออกมา (void) ก็อาจจะจบที่
ประโยคสุดท้ายหรือประโยค return ที่ไม่มีค่าส่งออกมา
4. หาก method สิ้นสุดการทางานที่ประโยคสุดท้าย โดยไม่มีการ
exit หรือ return โปรแกรมจะเปลี่ยนการดาเนินกลับมายัง
ตาแหน่งถัดจากจุดที่เรียก method นั้นและดาเนินต่อไป
17
การใช้ Command-Line Arguments
18
Object
 การเรียกใช้งาน Class ใดก็ตาม ต้องสร้าง Object ขึ้นมาใหม่เพื่อ
เตรียมไว้ให้สามารถใช้งานได้กับ Class นั้น
 การสร้าง Object ใหม่เรียกว่า Object Instantiation
 การสร้าง Object พร้อมกับการใส่ข้อมูลเรียกว่า Object
Initialization
การกาหนดว่า Object อยู่ใน Class ใด => String S1;
การสร้าง Object พร้อมกับการใส่ข้อมูล =>
S1 = new String(“Hello”);
หรืออาจรวมไว้ในคาสั่งเดียว =>
String S1 = new String(“Hello”);
19
การสร้าง Object
 การกาหนดว่า Object อยู่ใน Class ใด
รูปแบบ ClassName ObjectName
เช่น Circle MyCircle;
การสร้าง Object เพื่อจัดสรรหน่วยความจาให้ Object นี้
รูปแบบ ObjectName = new ClassName();
เช่น MyCircle = new Circle();
 การสร้าง Object โดยใช้คาสั่งเดียว
รูปแบบ ClassName ObjectName = new ClassName();
เช่น Circle MyCircle = new Circle();
 การสร้างมากกว่าหนึ่ง Object
รูปแบบ ClassName ObjectName_1 = new ClassName();
ObjectName_2 = new ClassName();
เช่น Circle MyCircle_1 = new Circle(),
MyCircle_2 = new Circle();
20
21
Object-oriented concept
 Method overloading เป็นการเรียก method หนึ่งด้วย
argument ที่แตกต่างกันไปในการเรียกแต่ละครั้ง และจะต้องมีหลาย ๆ
method สาหรับการเรียกแต่ละแบบ เช่น method ในการหาค่าสูงสุด
อาจประกอบด้วย 2 method ซึ่งมี argument ต่างกัน คือ
 static double max(double num1, double num2)
 static int max(int num1, int num2)
22
Overloading Methods
23
ปัญหาของ Overloading
24
ปัญหาของ Overloading
25
Constructor Method
 เมื่อ Object ใด ๆ ถูกสร้างขึ้นมาภายใต้ Class หนึ่ง โปรแกรมจะต้อง
ไปเรียกใช้ Method ที่มีชื่อเดียวกับ Class ทันที (ถ้ามี) การ
กาหนดการทางานลักษณะนี้เรียกว่า “Constructor” และเรียก
Method ที่มีชื่อเดียวกับ Class ว่า “Constructor
Method” ทั้งนี้ มีข้อจากัด คือ
– Constructor Method ต้องมีชื่อเดียวกับชื่อ Class
– Header ของ Constructor Method ต้องไม่มีค่า
return_data_type หรือ แม้กระทั่ง Keyword void
 กรณีที่มี Subclass มากมายเป็นลาดับชั้น และมี Constructor
รวมอยู่ด้วย เมื่อใช้คาสั่ง super() เพื่อเรียกใช้ Constructor ใน
ระดับใดก็ตาม Constructor ของ Superclass แรก จะต้องถูก
เรียกใช้ก่อนเสมอ ไม่ว่าจะมี subclass มากเพียงใด
26
Constructor Method
27
Constructor Method
 เมื่อ Object ใด ๆ ถูกสร ้างขึ้นมา
ภายใต ้Class หนึ่ง โปรแกรมจะต ้อง
ไปเรียกใช ้Method ที่มีชื่อเดียวกับ
Class ทันที (ถ ้ามี) การกาหนดการ
ทางานลักษณะนี้เรียกว่า
“Constructor” และเรียก Method ที่
มีชื่อเดียวกับ Class ว่า “Constructor
Method” ทั้งนี้ มีข ้อจากัด คือ
– Constructor Method ต ้องมีชื่อ
เดียวกับชื่อ Class
– Header ของ Constructor
Method ต ้องไม่มีค่า
return_data_type หรือ
แม ้กระทั่ง Keyword void
 กรณีที่มี Subclass มากมายเป็น
ลาดับชั้น และมี Constructor รวมอยู่
ด ้วย เมื่อใช ้คาสั่ง super() เพื่อ
เรียกใช ้Constructor ในระดับใดก็
ตาม Constructor ของ Superclass
แรก จะต ้องถูกเรียกใช ้ก่อนเสมอ ไม่
ว่าจะมี subclass มากเพียงใด
28
คาสั่ง super
 Subclass สามารถเรียกใช้
Constructor Method
ของ Superclass ได้เลย โดย
Subclass ไม่จาเป็นต้องสร้าง
Constructor ของตนเองขึ้นมา
ใหม่ (Constructor จะไม่ถูก
สืบทอดจากการ Inherit ด้วย
คาสั่ง extends แต่ละจะเรียกใช้
ได้โดยคาสั่ง super) ทาให้
ประหยัดเวลาและไม่ซ้าซ้อน
 เรียกใช้สมาชิกของ
Superclass ในกรณีที่
Subclass ใช้สมาชิก (ตัวแปร,
Method ชื่อเดียวกัน)
29
Overriding Method
 Method overriding เป็นการกาหนดชื่อของ method ใน
subclass ให้มีชื่อเหมือนกัน method ใน parent class
เพื่อเปลี่ยนแปลงการทางาน method ใน parent class ให้
ทาหน้าที่อื่นใน subclass
 การ binding ว่าชื่อ method ที่ instance ส่งมาเป็น
method ตัวใด จะทาแบบ dynamic binding
 แนวคิดในการจัดการกับ instance ของ class ที่ต่างกัน
ด้วย method เดียวกันเรียกว่า polymorphism
 polymorphism เป็นการสนับสนุนการออกแบบโปรแกรม
เพื่อให้ใช้งานร่วมกัน หรือการนากลับมาใช้ได้อีก
30
31
Overriding Method
 กรณีที่ชื่อ Method เหมือนกัน แต่
มีจานวนหรือชนิดของ
Parameter ต่างกัน
(เรียกว่า Signature ต่างกัน)
เรียกว่า “Overloading Method”
 กรณีที่ชื่อ Method เหมือนกัน
รวมทั้ง Signature ก็เหมือนกัน
ลักษณะเช่นนี้เรียกว่า
“Overriding Method”
 กรณีที่โปรแกรมพบ Overridden
Method ใน Subclass และ
Superclass โปรแกรมจะทางาน
ที่ Method ของ Subclass แทน
โดยอัตโนมัติ (ไม่ทางานที่
Method ของ Superclass)
32
การป้องกันการ Override (Final Method)
 Method ใดที่มีการระบุคาว่า final จะไม่สามารถถูกทับ (override) โดย
Method ใดได้
33
เนื่องจาก subclass มีการสืบทอดทั้ง method และตัวแปร จาก
superclass และ subclass เองก็สามารถกาหนดทั้งตัวแปรและ
method ที่มีชื่อซ้ากันกับ superclass ได้ แต่การตั้งชื่อตัวแปรซ้ากับ
superclass จะไม่เหมือนกับกรณีของ method คือ ไม่สามารถที่จะ
overriding ตัวแปรได้ ดังนั้น ตัวแปรที่ subclass ถ้าซ้ากันจะมีสอง
กรณี คือ
 เป็นตัวแปรของ superclass คือ เป็นการสืบทอดตัวแปรทุกตัวของ
superclass
 การสร้างตัวแปรใหม่โดยที่ชื่อตัวแปรซ้ากัน ตัวแปรที่สร้างใหม่จะอ้างอิง
ภายใน subclass เท่านั้น
34
การเรียกใช ้method “Callme()” ใน Superclass และ
Subclass ในลักษณะของ Overriden
35
Composition
 เป็นการสร้าง Object ใหม่จาก Class เดิมที่มีอยู่ โดย
Object ใหม่นี้จะอยู่ใน Class ใหม่ที่สร้างขึ้น ดังนั้น
Class ใหม่จะสามารถเรียกใช้ Method ต่าง ๆ จาก
Class เดิมที่มีอยู่ได้โดยไม่ต้องสร้างหรือแก้ไข Method ที่
มีใน Class เดิม
Class A //Class เดิมที่มี
aa()
{ … }
bb()
{ … }
Class B //Class ที่สร้างขึ้นใหม่
A b = new A() //สร้าง Object b จาก Class A
b.aa() //เรียกใช้ Method aa ของ A
b.bb() //เรียกใช้ Method bb ของ A
36
37
Inheritance
 เป็นการสร ้าง Class ใหม่ให ้เป็นพวกเดียวกับ Class เดิมที่มี ทาให ้
สามารถใช ้คุณสมบัติต่างๆ เช่น ตัวแปร Method Constructor หรือ
อื่น ๆ ของ Class เดิมที่มีได ้โดยไม่ต ้องแก ้ไข ทั้งนี้ Class เดิมที่มี
อาจกาหนดไม่ให ้Class อื่นมาใช ้ คุณสมบัติใด ๆ ได ้ด ้วยเช่นกัน
 หลักของ Inheritance คือ การสร ้าง Class หลักขึ้นมา 1 Class
โดย Class หลักจะมีคุณสมบัติต่าง ๆ โดยรวมที่ Class อื่น ๆ
จาเป็นต ้องมี จากนั้นจึงสร ้าง Class อื่น ๆ ขึ้นเพื่อรับการถ่ายทอด
คุณสมบัติทั้งหมดจาก Class หลักโดยอัตโนมัติ และสามารถสร ้าง
คุณสมบัติอื่น ๆ นอกจากที่มีใน Class หลักขึ้นได ้
Class X
double i;
xx();
Class Y extends X
double j;
yy();
38
39
การป้องกันการ Inherit (Final Class)
 Class ใดที่มีการระบุคาว่า final จะไม่สามารถนาไปใช้เป็น
Superclass ของ Class ใด ๆ ได้ (สมาชิกทั้งหมดใน Class จะถูก
ป้องกันจากการเรียกใช้จาก Class อื่น)
40
41
 การกาหนดให้ตัวแปรมีค่าคงที่
การใช้งาน final
42
Polymorphism
 ความสามารถของ Class หนึ่งที่สามารถอ้างอิงถึง Object ของ
อีก Class หนึ่งได้ โดยเมื่อ method นั้นถูกเรียกใช้โดยการ
อ้างอิงมาจาก Class อื่น Class เจ้าของ Object จะตัดสินใจ
ว่า จะเรียกใช้ method ใด ทั้งนี้ ไม่ได้ขึ้นอยู่กับชนิดของการ
อ้างอิงถึง (type of reference) แต่ขึ้นอยู่กับชนิดของ
Object (type of object)Shape
draw()
erase()
Triangle
draw()
erase()
Square
draw()
erase()
Circle
draw()
erase()
43
44
การกาหนดค่า Accessibility ของตัวแปรเป็น private
45
การกาหนดค่า Accessibility ของตัวแปรเป็น private
46
access modifier  protected
 protected :- ไม่ได้เปิดให้คลาสใดสามารถเข้าใช้งานได้อย่างอิสระ แต่
ไม่ถึงกับเปิดไม่ให้ใครเข้าใช้งานเลย ดังนี้
– คลาสที่อยู่ในแพ็กเกจเดียวกันกับคลาสที่ถูกกาหนด modifier เป็น
protected สามารถเรียกใช้งาน member ของคลาสที่ถูกกาหนดเป็น
protected ได้
– คลาสที่อยู่ต่างแพ็กเกจกับคลาสที่ถูกกาหนด modifier เป็น
protected จะไม่สามารถเรียกใช้งาน member ของคลาสที่ถูก
กาหนดเป็น protected ได้
– คลาสที่อยู่ต่างแพ็กเกจกับคลาสที่ถูกกาหนด modifier เป็น
protected แต่มีความสัมพันธ์เป็นคลาสแม่คลาสลูกกัน สามารถ
เรียกใช้งาน member ของคลาสที่ถูกกาหนดเป็น protected ได้
47
48
การป้องกันการเรียกใช้ภายใน Superclass
 การป้องกันไม่ให ้Subclass
เรียกใช ้ตัวแปรหรือ method
ใน Superclass สามารถทา
ได ้โดยการระบุคาว่า private
ลงไปที่ตัวแปรหรือ method
นั้น และหากต ้องการให ้ตัว
แปรหรือ method ใด
สามารถเรียกใช ้หรืออ ้างอิง
ได ้เฉพาะการ Inherit โดย
Subclass เท่านั้นจะใช ้คาว่า
protected วางไว ้ด ้านหน้า
ตัวแปรหรือ method นั้น
49
แบบฝึกหัดที่ 3
 จงเขียนโปรแกรม item31.java เพื่อคานวณหาค่าจอดรถของอาคารจอดรถ
แห่งหนึ่ง ซึ่งเปืดบริการระหว่าง 05.00-22.00 น. โดยมีข้อมูล คือ ทะเบียนรถ
วันที่เข้าใช้บริการ เวลาเข้า และเวลาออก
เวลาที่ใช้จอด = เวลาออก - เวลาเข้า
ผลลัพธ์ที่ต้องการให้แสดงออกทางจอภาพ
ค่าจอดรถ ทะเบียน xxxx
เวลาเข้า เวลาออก รวม (ชั่วโมง) จานวนเงิน
HH : MM HH : MM HH : MM X,XXX.XX
ทั้งนี้ ค่าจอดรถใน 3 ชั่วโมงแรก 20 บาท เศษของชั่วโมงหากเกิน 30 นาทีให้ปัด
ขึ้นเป็นหนึ่งชั่วโมง แต่ถ้าไม่เกิน 30 นาที ให้ปัดเศษทิ้ง สาหรับค่าจอดรถที่เฉพาะ
ส่วนที่เกินจาก 3 ชั่วโมง ให้คิดชั่วโมงละ 30 บาท โดยใช้วิธีการปัดเศษเช่นเดียวกัน
ทั้งนี้ให้สมมติข้อมูลขึ้นเองตามความเหมาะสม และคานึงถึงความเป็นจริงว่า 1
ชั่วโมงมี 60 นาที การใช้บริการข้ามวันคิดค่าบริการวันละ 500 บาท
 จงเขียนโปรแกรม item32.java โดยใช้ overloading method เพื่อ
เปรียบเทียบ ตัวแปรสองตัว ซึ่งตัวแปรดังกล่าวอาจเป็นได้ทั้งจานวนเต็มทั้งคู่
จานวนจริงทั้งคู่ หรือเป็นข้อความทั้งคู่
ส่งภายในวันศุกร์ที่20 สิงหาคม 2553
50
Abstract Classes
 Class ที่ถูกออกแบบมาให้ใช้งานในแบบลาดับขั้น (Hierarchy)
และไม่สามารถ instantiated (การทาให้เกิด Object จาก
Class)
 ภายใน Abstract Class ต้องมี Abstract Method
(Method ที่ไม่มีการ implement ไว้ภายใน Method
(ไม่ระบุรายละเอียดของการทางาน)) รวมอยู่ด้วย
 Abstract Class จะใช้ประโยชน์ในการทางานแบบ Class
Hierarchy ที่จะระบุการทางานไว้เพียงบางส่วน แล้วให้ Class
ที่อยู่ระดับต่ากว่าเป็นผู้ implement ในส่วนที่เหลือ
 รูปแบบ
abstract ชื่อ Class หรือ Method (parameter_list);
51
ทุก Class ที่สร้างขึ้นมาจาก Class A จะต้องสร้าง method ชื่อ “callme” เพื่อใช้
เป็น overridden method เสมอ
ห้ามมีคาสั่งเพื่อใช้ในการทางานภายใน “Abstract Method”
ห้ามสร้าง Object ใดๆ ภายใน “Abstract Class” (โดยใช้คาสั่ง new)
ต้องสร้าง Abstract Method ไว้ใน Abstract Class เท่านั้น
52
53
การสืบทอดคุณสมบัติของคลาสสามารถจาแนกได้ 2 ประเภท คือ
1. Single inheritance หมายถึง การที่คลาสหนึ่งๆ ได้รับการ
ถ่ายทอดคุณสมบัติ (inherit) ทั้งแอตทริบิวต์และเมธอดมาจากอีกคลาส
หนึ่งเพียงคลาสเดียว ตัวอย่างเช่น คลาสสุนัข คลาสช้าง และคลาสม้า
ต่างก็เป็นคลาสที่ได้รับการถ่ายทอดคุณสมบัติจากคลาสสัตว์สี่เท้า
54
2. Multiple inheritance หมายถึง การที่คลาสหนึ่งๆ ได้รับการ
ถ่ายทอดคุณสมบัติทั้งแอตทริบิวต์และเมธอดมาจากคลาสอื่นมากกว่า
หนึ่งคลาส ตัวอย่างเช่น คลาสไลเกอร์ (Liger) ได้รับการถ่ายทอด
คุณสมบัติจากคลาสสิงโตและคลาสเสือ
55
Interfaces
 ทาหน้าที่คล้ายกับ Abstract โดยการนิยาม Interface
เหมือนกับการนิยาม Class เพียงแต่ภายใน Interface จะมี
เฉพาะรายชื่อ methods แต่ไม่มีเนื้อหาของ methods
 โปรแกรมใดนิยาม Interface ไว้ หมายถึง กาหนดว่า ทุก
Class ในโปรแกรมต้องสร้าง Method ที่มีชื่อตามที่ระบุไว้ใน
Interface ด้วย โดยเนื้อหาของ Method อาจแตกต่างกันไป
ในแต่ละ Class ขึ้นอยู่กับความต้องการในการใช้งาน (แต่ชื่อ
Method ต้องเป็นชื่อเดียวกัน)
 ประโยชน์ของ Interface คือ การทา Multiple
Inheritance
56
แนวคิดในการออกแบบการเชื่อมต่อ(Interface) ของคลาส
จาแนกเป็น 2 ประเภทคือ
1. Abstract Interface เป็นการเชื่อมต่อที่ประกอบด้วย
โครงสร้าง คือ ชื่อของเมธอด พารามิเตอร์ และชนิดของข้อมูลคืน
กลับ พร้อมทั้งมีส่วนของการขอรับการสนับสนุน
(implement) อยู่ภายใน ทาให้สามารถนากลับมาใช้ใหม่
(Reuse) ร่วมกับโปรแกรมอื่นๆ ได้
2. Concrete Interface เป็นการเชื่อมต่อที่ประกอบด้วย
โครงสร้าง คือ ชื่อของเมธอด พารามิเตอร์ และชนิดของข้อมูลคืน
กลับ โดยไม่มีส่วนของการขอรับการสนับสนุน
(implement) อยู่ภายใน หากมีออบเจ็กต์อื่นต้องการนา
กลับมาใช้ใหม่ (Reuse) จะต้องขอรับการสนับสนุน
(implement) การทางานเอง
57
58
59
60
วามแตกต่างระหว่างการเชื่อมต่อ (Interface) กับคลาสว่างเปล่า
Abstract Class) อาจสรุปได้ดังนี้คือ
คลาสว่างเปล่า (Abstract Class) การเชื่อมต่อ (Interface)
เป็นคลาส ไม่ใช่คลาส
บางเมธอดของคลาสว่างเปล่า (Abstract
Class)ต้องระบุคาว่า “abstract”
เมธอดที่ปรากฏในการเชื่อมต่อ (Interface)
ไม่ต้องระบุคาว่า “abstract”
การเรียกใช้งานคลาสว่างเปล่า (Abstract
Class) ต้องใช้คาว่า “extends”
การเรียกใช้งานการเชื่อมต่อ (Interface)
ต้องใช้คาว่า “implements”
คลาสที่ทาการ extends ไม่จาเป็นต้องระบุ
เมธอดที่มีอยู่ในคลาสว่างเปล่า (Abstract
Class) ครบทุกเมธอด
คลาสที่ขอรับการสนับสนุน (implement)
ต้องระบุทุกเมธอดที่มีอยู่ในการเชื่อมต่อ
(Interface) ให้ครบ
61
การส่งผ่าน Arguments
 การส่งโดยใช้ค่าของ Argument (Value)
62
63
การส่งผ่านด้วยการอ้างอิง Arguments
(Reference)
64
65
การส่งผ่าน Arguments โดยใช้ Object Reference
66
การส่งค่าตัวแปรแบบทั่วไปกับการส่งค่าตัวแปรแบบ Object
67
เมธอดสาเร็จรูปเกี่ยวกับวันที่ และเวลา
 คลาส Calendar และคลาส Date ต่างเป็นคลาสใน
แพ็คเกจ java.util ใช้สาหรับจัดการข้อมูลที่เป็นวันเดือนปี
และเวลา
import java.util.*;
 การแสดงผลจากการทางานของคลาส Calendar และคลาส
Date มีการจัดรูปแบบ การแสดงผลด้วยเมธอด format ซึ่ง
เป็นเมธอดหนึ่งในแพ็คเกจ java.text
import java.text.*;
คลาส Calendar กับการแสดงผลวันเดือนปีและเวลา
Calendar ชื่อออบเจ็กต์ = Calendar.getInstance();
System.out.format(“%รหัสแสดงผล”, ชื่อออบเจ็กต์)
รหัสแสดงผล คาอธิบาย
tB แสดงชื่อเดือน
td แสดงวันเป็นตัวเลข 2 หลัก อยู่ในรูปแบบของ 00
te แสดงวันเป็นตัวเลข 1 หรือ 2 หลัก
ty แสดงปีเป็นตัวเลข 2 หลัก
tY แสดงปีเป็นตัวเลข 4 หลัก
tl แสดงชั่วโมง
tM แสดงนาทีเป็นตัวเลข 2 หลัก
tp แสดงช่วงเวลา am/pm หรือก่อนเที่ยวหลังเที่ยง
tm แสดงเดือนในรูปตัวเลข 2 หลัก
tD แสดงวันที่ในรูปของ tm/td/ty
Computer Programming 4
คลาส Date กับการแสดงผลวันเดือนปีและเวลา
Date ชื่อออบเจ็กต์ = new Date( );
SimpleDateFormat ชื่อออบเจ็กต์ = new SimpleDateFormat(รูปแบบ);
รหัสแสดงผล คาอธิบาย
yyyy แสดงปีคริสต์ศักราช
MM แสดงเดือนเป็นตัวเลข 2 หลัก
MMM แสดงเดือนเป็นตัวอักษรย่อภาษาอังกฤษ
ww แสดงสัปดาห์ของปี
WW แสดงสัปดาห์ของเดือน
dd แสดงวันที่
F แสดงวันของสัปดาห์เป็นตัวเลข
EEE แสดงวันของสัปดาห์เป็นตัวอักษรย่อ
ภาษาอังกฤษ
a แสดง AM, PM
รหัสแสดงผล คาอธิบาย
HH แสดงชั่วโมงแบบ 0-23
hh แสดงชั่วโมงแบบ 1-12
kk แสดงชั่วโมงแบบ 1-24
KK แสดงชั่วโมงแบบ 0-11
mm แสดงนาที
ss แสดงวินาที
SS แสดงมิลลิวินาที
z แสดงชื่อโซนเวลา
Z แสดงโซนเวลาเป็นแบบตัวเลข
Computer Programming 4
73
การใช้คีย์เวิร์ด this
 this หมายถึง คลาสปัจจุบันที่กาลังใช้งานอยู่
 this.ชื่อแอตทริบิวต์ หมายถึง ชื่อแอตทริบิวต์ของคลาสปัจจุบัน
 this.ชื่อเมธอด หมายถึง ชื่อเมธอดของคลาสปัจจุบัน
Computer Programming 4
76

More Related Content

PPTX
เมธอด
PPTX
PDF
8.Inheritance
PDF
5.Methods cs
PPT
Chapter1 uml3
PPT
Java Programming [12/12] : Thread
เมธอด
8.Inheritance
5.Methods cs
Chapter1 uml3
Java Programming [12/12] : Thread

Similar to Computer Programming 4 (20)

DOC
Chapter3
PDF
Power point
PPTX
METHODS
PPTX
บทที่ 8 Methods
PPTX
เมธอด กลุ่ม3
PPTX
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PPTX
งานกลุ่มคอมกลุ่ม5
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PPT
PDF
พื้นฐานภาษาจาวา
PPT
Chapter1 uml3
PPTX
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
PDF
งานนำเสนอ1
PDF
Java-Chapter 12 Classes and Objects
PPT
Java intro
PPTX
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Chapter3
Power point
METHODS
บทที่ 8 Methods
เมธอด กลุ่ม3
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
งานกลุ่มคอมกลุ่ม5
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
พื้นฐานภาษาจาวา
Chapter1 uml3
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
งานนำเสนอ1
Java-Chapter 12 Classes and Objects
Java intro
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Ad

More from Saranyu Srisrontong (13)

PPTX
Computer Programming 1
PPTX
Lab Computer Programming 1
PPTX
Computer Programming 3
PPT
Computer Programming 2.2
PPTX
Computer Programming 2.1
PPT
Ac current46
PPT
electric potential
PPT
พลังงานไฟฟ้า
PPT
PDF
Intellec.pro for final exam
PDF
การแก้ปัญหาการออกแบบและพัฒนาขั้นตอนวิธี
PPT
Network fundamental
PPTX
Computer systemarchitecture
Computer Programming 1
Lab Computer Programming 1
Computer Programming 3
Computer Programming 2.2
Computer Programming 2.1
Ac current46
electric potential
พลังงานไฟฟ้า
Intellec.pro for final exam
การแก้ปัญหาการออกแบบและพัฒนาขั้นตอนวิธี
Network fundamental
Computer systemarchitecture
Ad

Computer Programming 4

  • 2. 2 หลักการเชิงวัตถุ  การเขียนโปรแกรมเชิงวัตถุ:- เป็นการเขียนโปรแกรมที่มองทุก อย่างภายในโปรแกรมและสภาพแวดล้อมเป็นวัตถุ การสร้าง วัตถุชิ้นหนึ่งต้องประกอบด้วยวัตถุอื่นอีกหลายชิ้น  หลักทั่วไปของ OOP คือ การสืบทอดออบเจ็กต์ (inheritance Object) เป็นการนาคุณลักษณะจาก Object ที่มีอยู่แล้วมาใช้งาน โดยไม่ต้องสร้างฟังก์ชันหรือ Object ขึ้นใหม่  Object:- สิ่งที่มีตัวตนและนาไปใช้ในการประมวลผลข้อมูลได้  โครงสร้างของ Object คือ คลาส (Class) ซึ่งแต่ละ Object ประกอบด้วย – คุณสมบัติ (Property) หรือข้อมูล (Data) – พฤติกรรม (Behavior) หรือ Method
  • 3. 3  คลาสต่าง ๆ ใน Object ใหม่ที่มีต้นกาเนิดจากคลาสเดิม เรียกคลาสต้นกาเนิดว่า คลาสหลัก (SuperClass) และ เรียกคลาสที่มีคุณสมบัติคล้ายฟังก์ชันว่า คลาสย่อย (SubClass) ซึ่งคลาสย่อยจะสืบคุณสมบัติทั้งหมดของคลาส หลักมาใช้งาน  คลาสที่ไม่ระบุคลาสหลักถือว่า คลาสนั้นกาเนิดจาก Object และด้วยการสืบทอดรูปแบบ ส่งผลให้แต่ละ Object มี คุณสมบัติเหมือน Object ต้นกาเนิด ทาให้สามารถเขียน โปรแกรมได้เร็วขึ้น  Object Class เป็นคลาสเดียวใน Object ที่ไม่มีคลาสหลัก และเป็น SuperClass ของทุกคลาสใน Java โดยเป็น Class สาเร็จรูปที่สามารถเรียกใช้ได้ทันที ดังนั้น ทุก Method ใน Object Class จึงถูกเรียกใช้งานโดย คลาสใด ๆ ก็ได้
  • 4. 4  การเขียนโปรแกรมเชิงวัตถุสนใจข้อมูลที่ถูกประมวลผลมากกว่า ฟังก์ชันที่ทาการประมวลผล โดยข้อมูลจะถูกใช้เป็นหลักในการ แบ่งโปรแกรมเป็นส่วน ๆ ที่สามารถแก้ไขเปลี่ยนแปลงได้ในแต่ละ ส่วน และสามารถนากลับมารวมเป็นโปรแกรมใหญ่ได้อีกครั้ง ช่วย ให้การเขียนโปรแกรมเป็นไปอย่างรวดเร็ว และสามารถ เปลี่ยนแปลงสิ่งที่อยู่ภายในแต่ละ Object ได้โดยไม่ผลกระทบ กับส่วนอื่นของโปรแกรมหลัก  Method ใน Java เปรียบเสมือน Procedure หรือ Function ในภาษาอื่น โดย Java ประกอบด้วย Class ต่าง ๆ ในแต่ละ Class จะมีอย่างน้อย 1 Method เพื่อใช้ ในการปฏิบัติงาน  บางโปรแกรมอาจมี Method ในการปฏิบัติงานจานวนมาก แต่ ต้องมี Method ชื่อ Main เพื่อเริ่มต้นโปรแกรม ภายใน main Method จะเรียกใช้ Method ใด ๆ ขึ้นอยู่กับการ ทางานของโปรแกรม
  • 6. 6 โครงสร้างของ Class [<access_spec.>] [<modifier>] class <class_name> [extends SuperClass_name] [implements interfaces_name] { //data members //methods }  access_specifier และ modifier :- ระดับการเข้าถึงหรือ ความสามารถในการให้บริการกับคลาสอื่น ๆ เช่น public private protected final  class :- คาศัพท์สงวนที่บอกให้ทราบว่า ส่วนของโปรแกรมต่อไปนี้ เป็นคลาส  extends :- คาศัพท์เฉพาะที่บอกให้ทราบว่า คลาสนี้ สืบทอดมาจาก SuperClass  superClass_name :- ชื่อของคลาสที่ต้องการสืบคุณสมบัติต่าง ๆ มาใช้ งาน เพื่อไม่ต้องเริ่มเขียนโปรแกรมจากจุดเริ่มต้น  implements :- คาศัพท์เฉพาะเพื่อเรียกใช้หรือขอการสนับสนุนจากคลาส อื่นมาเป็นส่วนเชื่อมประสานระหว่างคลาส  interfaces_name :- ชื่อของอินเทอร์เฟซที่ต้องการใช้งาน การใช้งานแบบ อินเทอร์เฟซเป็นการะบุกลุ่มพฤติกรรมที่เพิ่มให้คลาส นอกเหนือจากพฤติกรรม ต่าง ๆ จาก SuperClass
  • 7. 7 โครงสร้างของ data members [<access_specifier>] [<modifier>] <datatype> <variable_name>  access_specifier และ modifier เป็นการกาหนด คุณลักษณะพิเศษในการใช้งานตัวแปร เช่น static final public private protected
  • 8. 8 โครงสร้างของ Method [<access_spec.>] [<modifier>] <return_type> <method_name> ([arg._list]) { //Statements }  access_specifier และ modifier:- ระดับการเข้าถึง ข้อมูล เช่น public private static void final  return_type :- ชนิดของข้อมูลที่จะส่งคืนหลังสิ้นสุดการทางาน ของ Method ซึ่งใน 1 Method จะต้องส่งผลลัพธ์อย่างน้อย ที่สุด 1 ค่ากลับไปยัง Method ที่เรียกใช้มา  argument_list :- ชื่อของตัวแปรที่ใช้รับข้อมูลที่ส่งมาจาก Method ที่เรียกใช้งาน Method นี้  Statements :- คาสั่งควบคุมการทางานของนิพจน์ เพื่อ กาหนดวิธีการประมวลผลภายใน method
  • 9. 9 ตัวอย่างของ method ชื่อ factorial public long factorial (long theNumber) { long result = theNumber; for (int i=theNumber–1; i>=1; i--) result*=i; return result; }
  • 10. 10 ประเภทของ Method  Method ที่สร้างขึ้นมาเอง :- Method ที่ผู้เขียนโปรแกรมสร้างขึ้น ใช้เองตามต้องการอาจอยู่ใน Class เดียวกันหรือต่าง Class กันก็ได้  Method ที่มีอยู่แล้ว :- Method ใน Class Libraries ต่าง ๆ ใน Package ของ JDK การเรียกใช้งานต้องระบุในคาสั่ง import ตอนต้นโปรแกรม โดยไม่จาเป็นต้องสร้าง Object ขึ้นมาใหม่
  • 13. 13 การเรียกใช้ Method จาก Class Libraries  เรียกใช้โดยระบุชื่อ Package ชื่อ Class และชื่อ Method ตามลาดับ คั่นด้วยเครื่องหมายจุด ชื่อ Package. ชื่อ Class. ชื่อ Method(parameter_list); System.out.println(“Warm Welcome”);
  • 15. 15 Method Invocation  การเรียกใช้method ทาได้ในสองลักษณะ – Method ที่ไม่ส่งค่ากลับออกมาจะต้องถูกเรียกจากตาแหน่งของประโยค – Method ที่ส่งค่ากลับออกมาจะต้องถูกเรียกจากตาแหน่งของ term ภายใน expression  โครงสร้างของประโยคที่เรียก method มีดังนี้ <method name> (<argument list>); <argument list> คือ ลาดับของ expression หรือตัวแปร หรือ instance หรือ ค่าคงที่ ของค่าที่จะถูกส่งให้แก่พารามิเตอร์ใน method ที่ถูกเรียก จานวน และชนิดข้อมูลของ <argument list> จะต้องสอดคล้องกับ <parameter list> ของ method ที่ถูกเรียก ด้านของประโยคที่เรียก method ค่า <argument list> ที่ถูกส่งออกมา จะถูก เรียกว่า actual parameter หรือ argument ส่วนทางด้านโปรแกรมที่กาหนด method ค่า <parameter list> ที่รับเข้ามาจะถูกเรียกว่า formal parameter หรือ parameter
  • 16. 16  เมื่อมีการเรียก method จะมีเหตุการณ์เกิดขึ้นดังต่อไปนี้ 1. ค่าของ argument จะถูกส่งให้แก่พารามิเตอร์ตามตาแหน่งของมัน 2. โปรแกรมเปลี่ยนการดาเนินจากประโยคที่เรียก method ไปที่ จุดเริ่มต้นของ method นั้น หากมีการประกาศตัวแปรเฉพาะที่ใน method ก็สร้างตัวแปรเหล่านี้ขึ้น แล้วโปรแกรมดาเนินต่อไป จนกว่าจะถึงประโยคสุดท้าย หรือถึงประโยค return 3. หาก method ดาเนินไปถึงประโยค return ที่มี expression ค่าของ expression นั้นจะถูกคานวณและ ผลลัพธ์นั้นถูกส่งกลับไปยังตาแหน่งที่เรียก method นั้น แต่หาก method นั้นถูกระบุว่าจะไม่ส่งค่าออกมา (void) ก็อาจจะจบที่ ประโยคสุดท้ายหรือประโยค return ที่ไม่มีค่าส่งออกมา 4. หาก method สิ้นสุดการทางานที่ประโยคสุดท้าย โดยไม่มีการ exit หรือ return โปรแกรมจะเปลี่ยนการดาเนินกลับมายัง ตาแหน่งถัดจากจุดที่เรียก method นั้นและดาเนินต่อไป
  • 18. 18 Object  การเรียกใช้งาน Class ใดก็ตาม ต้องสร้าง Object ขึ้นมาใหม่เพื่อ เตรียมไว้ให้สามารถใช้งานได้กับ Class นั้น  การสร้าง Object ใหม่เรียกว่า Object Instantiation  การสร้าง Object พร้อมกับการใส่ข้อมูลเรียกว่า Object Initialization การกาหนดว่า Object อยู่ใน Class ใด => String S1; การสร้าง Object พร้อมกับการใส่ข้อมูล => S1 = new String(“Hello”); หรืออาจรวมไว้ในคาสั่งเดียว => String S1 = new String(“Hello”);
  • 19. 19 การสร้าง Object  การกาหนดว่า Object อยู่ใน Class ใด รูปแบบ ClassName ObjectName เช่น Circle MyCircle; การสร้าง Object เพื่อจัดสรรหน่วยความจาให้ Object นี้ รูปแบบ ObjectName = new ClassName(); เช่น MyCircle = new Circle();  การสร้าง Object โดยใช้คาสั่งเดียว รูปแบบ ClassName ObjectName = new ClassName(); เช่น Circle MyCircle = new Circle();  การสร้างมากกว่าหนึ่ง Object รูปแบบ ClassName ObjectName_1 = new ClassName(); ObjectName_2 = new ClassName(); เช่น Circle MyCircle_1 = new Circle(), MyCircle_2 = new Circle();
  • 20. 20
  • 21. 21 Object-oriented concept  Method overloading เป็นการเรียก method หนึ่งด้วย argument ที่แตกต่างกันไปในการเรียกแต่ละครั้ง และจะต้องมีหลาย ๆ method สาหรับการเรียกแต่ละแบบ เช่น method ในการหาค่าสูงสุด อาจประกอบด้วย 2 method ซึ่งมี argument ต่างกัน คือ  static double max(double num1, double num2)  static int max(int num1, int num2)
  • 25. 25 Constructor Method  เมื่อ Object ใด ๆ ถูกสร้างขึ้นมาภายใต้ Class หนึ่ง โปรแกรมจะต้อง ไปเรียกใช้ Method ที่มีชื่อเดียวกับ Class ทันที (ถ้ามี) การ กาหนดการทางานลักษณะนี้เรียกว่า “Constructor” และเรียก Method ที่มีชื่อเดียวกับ Class ว่า “Constructor Method” ทั้งนี้ มีข้อจากัด คือ – Constructor Method ต้องมีชื่อเดียวกับชื่อ Class – Header ของ Constructor Method ต้องไม่มีค่า return_data_type หรือ แม้กระทั่ง Keyword void  กรณีที่มี Subclass มากมายเป็นลาดับชั้น และมี Constructor รวมอยู่ด้วย เมื่อใช้คาสั่ง super() เพื่อเรียกใช้ Constructor ใน ระดับใดก็ตาม Constructor ของ Superclass แรก จะต้องถูก เรียกใช้ก่อนเสมอ ไม่ว่าจะมี subclass มากเพียงใด
  • 27. 27 Constructor Method  เมื่อ Object ใด ๆ ถูกสร ้างขึ้นมา ภายใต ้Class หนึ่ง โปรแกรมจะต ้อง ไปเรียกใช ้Method ที่มีชื่อเดียวกับ Class ทันที (ถ ้ามี) การกาหนดการ ทางานลักษณะนี้เรียกว่า “Constructor” และเรียก Method ที่ มีชื่อเดียวกับ Class ว่า “Constructor Method” ทั้งนี้ มีข ้อจากัด คือ – Constructor Method ต ้องมีชื่อ เดียวกับชื่อ Class – Header ของ Constructor Method ต ้องไม่มีค่า return_data_type หรือ แม ้กระทั่ง Keyword void  กรณีที่มี Subclass มากมายเป็น ลาดับชั้น และมี Constructor รวมอยู่ ด ้วย เมื่อใช ้คาสั่ง super() เพื่อ เรียกใช ้Constructor ในระดับใดก็ ตาม Constructor ของ Superclass แรก จะต ้องถูกเรียกใช ้ก่อนเสมอ ไม่ ว่าจะมี subclass มากเพียงใด
  • 28. 28 คาสั่ง super  Subclass สามารถเรียกใช้ Constructor Method ของ Superclass ได้เลย โดย Subclass ไม่จาเป็นต้องสร้าง Constructor ของตนเองขึ้นมา ใหม่ (Constructor จะไม่ถูก สืบทอดจากการ Inherit ด้วย คาสั่ง extends แต่ละจะเรียกใช้ ได้โดยคาสั่ง super) ทาให้ ประหยัดเวลาและไม่ซ้าซ้อน  เรียกใช้สมาชิกของ Superclass ในกรณีที่ Subclass ใช้สมาชิก (ตัวแปร, Method ชื่อเดียวกัน)
  • 29. 29 Overriding Method  Method overriding เป็นการกาหนดชื่อของ method ใน subclass ให้มีชื่อเหมือนกัน method ใน parent class เพื่อเปลี่ยนแปลงการทางาน method ใน parent class ให้ ทาหน้าที่อื่นใน subclass  การ binding ว่าชื่อ method ที่ instance ส่งมาเป็น method ตัวใด จะทาแบบ dynamic binding  แนวคิดในการจัดการกับ instance ของ class ที่ต่างกัน ด้วย method เดียวกันเรียกว่า polymorphism  polymorphism เป็นการสนับสนุนการออกแบบโปรแกรม เพื่อให้ใช้งานร่วมกัน หรือการนากลับมาใช้ได้อีก
  • 30. 30
  • 31. 31 Overriding Method  กรณีที่ชื่อ Method เหมือนกัน แต่ มีจานวนหรือชนิดของ Parameter ต่างกัน (เรียกว่า Signature ต่างกัน) เรียกว่า “Overloading Method”  กรณีที่ชื่อ Method เหมือนกัน รวมทั้ง Signature ก็เหมือนกัน ลักษณะเช่นนี้เรียกว่า “Overriding Method”  กรณีที่โปรแกรมพบ Overridden Method ใน Subclass และ Superclass โปรแกรมจะทางาน ที่ Method ของ Subclass แทน โดยอัตโนมัติ (ไม่ทางานที่ Method ของ Superclass)
  • 32. 32 การป้องกันการ Override (Final Method)  Method ใดที่มีการระบุคาว่า final จะไม่สามารถถูกทับ (override) โดย Method ใดได้
  • 33. 33 เนื่องจาก subclass มีการสืบทอดทั้ง method และตัวแปร จาก superclass และ subclass เองก็สามารถกาหนดทั้งตัวแปรและ method ที่มีชื่อซ้ากันกับ superclass ได้ แต่การตั้งชื่อตัวแปรซ้ากับ superclass จะไม่เหมือนกับกรณีของ method คือ ไม่สามารถที่จะ overriding ตัวแปรได้ ดังนั้น ตัวแปรที่ subclass ถ้าซ้ากันจะมีสอง กรณี คือ  เป็นตัวแปรของ superclass คือ เป็นการสืบทอดตัวแปรทุกตัวของ superclass  การสร้างตัวแปรใหม่โดยที่ชื่อตัวแปรซ้ากัน ตัวแปรที่สร้างใหม่จะอ้างอิง ภายใน subclass เท่านั้น
  • 34. 34 การเรียกใช ้method “Callme()” ใน Superclass และ Subclass ในลักษณะของ Overriden
  • 35. 35 Composition  เป็นการสร้าง Object ใหม่จาก Class เดิมที่มีอยู่ โดย Object ใหม่นี้จะอยู่ใน Class ใหม่ที่สร้างขึ้น ดังนั้น Class ใหม่จะสามารถเรียกใช้ Method ต่าง ๆ จาก Class เดิมที่มีอยู่ได้โดยไม่ต้องสร้างหรือแก้ไข Method ที่ มีใน Class เดิม Class A //Class เดิมที่มี aa() { … } bb() { … } Class B //Class ที่สร้างขึ้นใหม่ A b = new A() //สร้าง Object b จาก Class A b.aa() //เรียกใช้ Method aa ของ A b.bb() //เรียกใช้ Method bb ของ A
  • 36. 36
  • 37. 37 Inheritance  เป็นการสร ้าง Class ใหม่ให ้เป็นพวกเดียวกับ Class เดิมที่มี ทาให ้ สามารถใช ้คุณสมบัติต่างๆ เช่น ตัวแปร Method Constructor หรือ อื่น ๆ ของ Class เดิมที่มีได ้โดยไม่ต ้องแก ้ไข ทั้งนี้ Class เดิมที่มี อาจกาหนดไม่ให ้Class อื่นมาใช ้ คุณสมบัติใด ๆ ได ้ด ้วยเช่นกัน  หลักของ Inheritance คือ การสร ้าง Class หลักขึ้นมา 1 Class โดย Class หลักจะมีคุณสมบัติต่าง ๆ โดยรวมที่ Class อื่น ๆ จาเป็นต ้องมี จากนั้นจึงสร ้าง Class อื่น ๆ ขึ้นเพื่อรับการถ่ายทอด คุณสมบัติทั้งหมดจาก Class หลักโดยอัตโนมัติ และสามารถสร ้าง คุณสมบัติอื่น ๆ นอกจากที่มีใน Class หลักขึ้นได ้ Class X double i; xx(); Class Y extends X double j; yy();
  • 38. 38
  • 39. 39 การป้องกันการ Inherit (Final Class)  Class ใดที่มีการระบุคาว่า final จะไม่สามารถนาไปใช้เป็น Superclass ของ Class ใด ๆ ได้ (สมาชิกทั้งหมดใน Class จะถูก ป้องกันจากการเรียกใช้จาก Class อื่น)
  • 40. 40
  • 42. 42 Polymorphism  ความสามารถของ Class หนึ่งที่สามารถอ้างอิงถึง Object ของ อีก Class หนึ่งได้ โดยเมื่อ method นั้นถูกเรียกใช้โดยการ อ้างอิงมาจาก Class อื่น Class เจ้าของ Object จะตัดสินใจ ว่า จะเรียกใช้ method ใด ทั้งนี้ ไม่ได้ขึ้นอยู่กับชนิดของการ อ้างอิงถึง (type of reference) แต่ขึ้นอยู่กับชนิดของ Object (type of object)Shape draw() erase() Triangle draw() erase() Square draw() erase() Circle draw() erase()
  • 43. 43
  • 46. 46 access modifier  protected  protected :- ไม่ได้เปิดให้คลาสใดสามารถเข้าใช้งานได้อย่างอิสระ แต่ ไม่ถึงกับเปิดไม่ให้ใครเข้าใช้งานเลย ดังนี้ – คลาสที่อยู่ในแพ็กเกจเดียวกันกับคลาสที่ถูกกาหนด modifier เป็น protected สามารถเรียกใช้งาน member ของคลาสที่ถูกกาหนดเป็น protected ได้ – คลาสที่อยู่ต่างแพ็กเกจกับคลาสที่ถูกกาหนด modifier เป็น protected จะไม่สามารถเรียกใช้งาน member ของคลาสที่ถูก กาหนดเป็น protected ได้ – คลาสที่อยู่ต่างแพ็กเกจกับคลาสที่ถูกกาหนด modifier เป็น protected แต่มีความสัมพันธ์เป็นคลาสแม่คลาสลูกกัน สามารถ เรียกใช้งาน member ของคลาสที่ถูกกาหนดเป็น protected ได้
  • 47. 47
  • 48. 48 การป้องกันการเรียกใช้ภายใน Superclass  การป้องกันไม่ให ้Subclass เรียกใช ้ตัวแปรหรือ method ใน Superclass สามารถทา ได ้โดยการระบุคาว่า private ลงไปที่ตัวแปรหรือ method นั้น และหากต ้องการให ้ตัว แปรหรือ method ใด สามารถเรียกใช ้หรืออ ้างอิง ได ้เฉพาะการ Inherit โดย Subclass เท่านั้นจะใช ้คาว่า protected วางไว ้ด ้านหน้า ตัวแปรหรือ method นั้น
  • 49. 49 แบบฝึกหัดที่ 3  จงเขียนโปรแกรม item31.java เพื่อคานวณหาค่าจอดรถของอาคารจอดรถ แห่งหนึ่ง ซึ่งเปืดบริการระหว่าง 05.00-22.00 น. โดยมีข้อมูล คือ ทะเบียนรถ วันที่เข้าใช้บริการ เวลาเข้า และเวลาออก เวลาที่ใช้จอด = เวลาออก - เวลาเข้า ผลลัพธ์ที่ต้องการให้แสดงออกทางจอภาพ ค่าจอดรถ ทะเบียน xxxx เวลาเข้า เวลาออก รวม (ชั่วโมง) จานวนเงิน HH : MM HH : MM HH : MM X,XXX.XX ทั้งนี้ ค่าจอดรถใน 3 ชั่วโมงแรก 20 บาท เศษของชั่วโมงหากเกิน 30 นาทีให้ปัด ขึ้นเป็นหนึ่งชั่วโมง แต่ถ้าไม่เกิน 30 นาที ให้ปัดเศษทิ้ง สาหรับค่าจอดรถที่เฉพาะ ส่วนที่เกินจาก 3 ชั่วโมง ให้คิดชั่วโมงละ 30 บาท โดยใช้วิธีการปัดเศษเช่นเดียวกัน ทั้งนี้ให้สมมติข้อมูลขึ้นเองตามความเหมาะสม และคานึงถึงความเป็นจริงว่า 1 ชั่วโมงมี 60 นาที การใช้บริการข้ามวันคิดค่าบริการวันละ 500 บาท  จงเขียนโปรแกรม item32.java โดยใช้ overloading method เพื่อ เปรียบเทียบ ตัวแปรสองตัว ซึ่งตัวแปรดังกล่าวอาจเป็นได้ทั้งจานวนเต็มทั้งคู่ จานวนจริงทั้งคู่ หรือเป็นข้อความทั้งคู่ ส่งภายในวันศุกร์ที่20 สิงหาคม 2553
  • 50. 50 Abstract Classes  Class ที่ถูกออกแบบมาให้ใช้งานในแบบลาดับขั้น (Hierarchy) และไม่สามารถ instantiated (การทาให้เกิด Object จาก Class)  ภายใน Abstract Class ต้องมี Abstract Method (Method ที่ไม่มีการ implement ไว้ภายใน Method (ไม่ระบุรายละเอียดของการทางาน)) รวมอยู่ด้วย  Abstract Class จะใช้ประโยชน์ในการทางานแบบ Class Hierarchy ที่จะระบุการทางานไว้เพียงบางส่วน แล้วให้ Class ที่อยู่ระดับต่ากว่าเป็นผู้ implement ในส่วนที่เหลือ  รูปแบบ abstract ชื่อ Class หรือ Method (parameter_list);
  • 51. 51 ทุก Class ที่สร้างขึ้นมาจาก Class A จะต้องสร้าง method ชื่อ “callme” เพื่อใช้ เป็น overridden method เสมอ ห้ามมีคาสั่งเพื่อใช้ในการทางานภายใน “Abstract Method” ห้ามสร้าง Object ใดๆ ภายใน “Abstract Class” (โดยใช้คาสั่ง new) ต้องสร้าง Abstract Method ไว้ใน Abstract Class เท่านั้น
  • 52. 52
  • 53. 53 การสืบทอดคุณสมบัติของคลาสสามารถจาแนกได้ 2 ประเภท คือ 1. Single inheritance หมายถึง การที่คลาสหนึ่งๆ ได้รับการ ถ่ายทอดคุณสมบัติ (inherit) ทั้งแอตทริบิวต์และเมธอดมาจากอีกคลาส หนึ่งเพียงคลาสเดียว ตัวอย่างเช่น คลาสสุนัข คลาสช้าง และคลาสม้า ต่างก็เป็นคลาสที่ได้รับการถ่ายทอดคุณสมบัติจากคลาสสัตว์สี่เท้า
  • 54. 54 2. Multiple inheritance หมายถึง การที่คลาสหนึ่งๆ ได้รับการ ถ่ายทอดคุณสมบัติทั้งแอตทริบิวต์และเมธอดมาจากคลาสอื่นมากกว่า หนึ่งคลาส ตัวอย่างเช่น คลาสไลเกอร์ (Liger) ได้รับการถ่ายทอด คุณสมบัติจากคลาสสิงโตและคลาสเสือ
  • 55. 55 Interfaces  ทาหน้าที่คล้ายกับ Abstract โดยการนิยาม Interface เหมือนกับการนิยาม Class เพียงแต่ภายใน Interface จะมี เฉพาะรายชื่อ methods แต่ไม่มีเนื้อหาของ methods  โปรแกรมใดนิยาม Interface ไว้ หมายถึง กาหนดว่า ทุก Class ในโปรแกรมต้องสร้าง Method ที่มีชื่อตามที่ระบุไว้ใน Interface ด้วย โดยเนื้อหาของ Method อาจแตกต่างกันไป ในแต่ละ Class ขึ้นอยู่กับความต้องการในการใช้งาน (แต่ชื่อ Method ต้องเป็นชื่อเดียวกัน)  ประโยชน์ของ Interface คือ การทา Multiple Inheritance
  • 56. 56 แนวคิดในการออกแบบการเชื่อมต่อ(Interface) ของคลาส จาแนกเป็น 2 ประเภทคือ 1. Abstract Interface เป็นการเชื่อมต่อที่ประกอบด้วย โครงสร้าง คือ ชื่อของเมธอด พารามิเตอร์ และชนิดของข้อมูลคืน กลับ พร้อมทั้งมีส่วนของการขอรับการสนับสนุน (implement) อยู่ภายใน ทาให้สามารถนากลับมาใช้ใหม่ (Reuse) ร่วมกับโปรแกรมอื่นๆ ได้ 2. Concrete Interface เป็นการเชื่อมต่อที่ประกอบด้วย โครงสร้าง คือ ชื่อของเมธอด พารามิเตอร์ และชนิดของข้อมูลคืน กลับ โดยไม่มีส่วนของการขอรับการสนับสนุน (implement) อยู่ภายใน หากมีออบเจ็กต์อื่นต้องการนา กลับมาใช้ใหม่ (Reuse) จะต้องขอรับการสนับสนุน (implement) การทางานเอง
  • 57. 57
  • 58. 58
  • 59. 59
  • 60. 60 วามแตกต่างระหว่างการเชื่อมต่อ (Interface) กับคลาสว่างเปล่า Abstract Class) อาจสรุปได้ดังนี้คือ คลาสว่างเปล่า (Abstract Class) การเชื่อมต่อ (Interface) เป็นคลาส ไม่ใช่คลาส บางเมธอดของคลาสว่างเปล่า (Abstract Class)ต้องระบุคาว่า “abstract” เมธอดที่ปรากฏในการเชื่อมต่อ (Interface) ไม่ต้องระบุคาว่า “abstract” การเรียกใช้งานคลาสว่างเปล่า (Abstract Class) ต้องใช้คาว่า “extends” การเรียกใช้งานการเชื่อมต่อ (Interface) ต้องใช้คาว่า “implements” คลาสที่ทาการ extends ไม่จาเป็นต้องระบุ เมธอดที่มีอยู่ในคลาสว่างเปล่า (Abstract Class) ครบทุกเมธอด คลาสที่ขอรับการสนับสนุน (implement) ต้องระบุทุกเมธอดที่มีอยู่ในการเชื่อมต่อ (Interface) ให้ครบ
  • 62. 62
  • 64. 64
  • 67. 67
  • 68. เมธอดสาเร็จรูปเกี่ยวกับวันที่ และเวลา  คลาส Calendar และคลาส Date ต่างเป็นคลาสใน แพ็คเกจ java.util ใช้สาหรับจัดการข้อมูลที่เป็นวันเดือนปี และเวลา import java.util.*;  การแสดงผลจากการทางานของคลาส Calendar และคลาส Date มีการจัดรูปแบบ การแสดงผลด้วยเมธอด format ซึ่ง เป็นเมธอดหนึ่งในแพ็คเกจ java.text import java.text.*;
  • 69. คลาส Calendar กับการแสดงผลวันเดือนปีและเวลา Calendar ชื่อออบเจ็กต์ = Calendar.getInstance(); System.out.format(“%รหัสแสดงผล”, ชื่อออบเจ็กต์) รหัสแสดงผล คาอธิบาย tB แสดงชื่อเดือน td แสดงวันเป็นตัวเลข 2 หลัก อยู่ในรูปแบบของ 00 te แสดงวันเป็นตัวเลข 1 หรือ 2 หลัก ty แสดงปีเป็นตัวเลข 2 หลัก tY แสดงปีเป็นตัวเลข 4 หลัก tl แสดงชั่วโมง tM แสดงนาทีเป็นตัวเลข 2 หลัก tp แสดงช่วงเวลา am/pm หรือก่อนเที่ยวหลังเที่ยง tm แสดงเดือนในรูปตัวเลข 2 หลัก tD แสดงวันที่ในรูปของ tm/td/ty
  • 71. คลาส Date กับการแสดงผลวันเดือนปีและเวลา Date ชื่อออบเจ็กต์ = new Date( ); SimpleDateFormat ชื่อออบเจ็กต์ = new SimpleDateFormat(รูปแบบ); รหัสแสดงผล คาอธิบาย yyyy แสดงปีคริสต์ศักราช MM แสดงเดือนเป็นตัวเลข 2 หลัก MMM แสดงเดือนเป็นตัวอักษรย่อภาษาอังกฤษ ww แสดงสัปดาห์ของปี WW แสดงสัปดาห์ของเดือน dd แสดงวันที่ F แสดงวันของสัปดาห์เป็นตัวเลข EEE แสดงวันของสัปดาห์เป็นตัวอักษรย่อ ภาษาอังกฤษ a แสดง AM, PM รหัสแสดงผล คาอธิบาย HH แสดงชั่วโมงแบบ 0-23 hh แสดงชั่วโมงแบบ 1-12 kk แสดงชั่วโมงแบบ 1-24 KK แสดงชั่วโมงแบบ 0-11 mm แสดงนาที ss แสดงวินาที SS แสดงมิลลิวินาที z แสดงชื่อโซนเวลา Z แสดงโซนเวลาเป็นแบบตัวเลข
  • 73. 73
  • 74. การใช้คีย์เวิร์ด this  this หมายถึง คลาสปัจจุบันที่กาลังใช้งานอยู่  this.ชื่อแอตทริบิวต์ หมายถึง ชื่อแอตทริบิวต์ของคลาสปัจจุบัน  this.ชื่อเมธอด หมายถึง ชื่อเมธอดของคลาสปัจจุบัน
  • 76. 76