5.methods cs
DESCRIPTION
สื่อการเรียนการสอน เรื่อง โปรแกรมเชิงวัตถุ โดยคุณ Kan http://learners.in.th/file/zniperlllTRANSCRIPT
5. Methods
Faculty of Technology and Environment
Prince of Songkla University, Phuket Campus
2/2551
344-202 Introduction to Object-Oriented Programming
การโปรแกรมเชิงวัตถุ
2Object-Oriented Programming 2/2551
Contents
Method overview
Call stack
Method signature
Static method & Instance method
Constructor
Overload method
Information hiding
get-set methods
3Object-Oriented Programming 2/2551
Method overview
ปกติโปรแกรมจะท างานตามล าดบัค าสั่งที่เขียนในโปรแกรม
การใช้เมธอดช่วยใหส้ามารถแบ่งการท างานของโปรแกรมเป็นส่วน ๆ
แต่ละเมธอดจะมีค าสั่งในการด าเนินการที่เกี่ยวข้องกัน
เมื่อมีการเรียกเมธอด (invoked / called) ก็จะมีการย้ายไปท างานที่
เมธอดนั้นจนเสร็จแล้วจึงกลับมาท างานต่อที่ค าสั่งถดัไปหลังการเรียก
เมธอด
เมธอดที่ก าลงัท างานจะไดร้ับ control ไป ซึ่งหากมีการเรียกใช้เมธอดอื่น
ก็จะย้าย control ไปยังเมธอดที่ถูกเรียก เมื่อท าเสร็จแล้ว control กจ็ะ
กลับมายังเมธอดที่เรียกใช ้เรียกว่า Flow of control
4Object-Oriented Programming 2/2551
Method
เมธอดแรกที่ถูกเรียกใชใ้หท้ างานในจาวาคือ main() ซึ่งจะเรียกโดย JVM
JVM จะจดจ าเมธอดที่เรียกใช้ได้วา่เมธอดใดเรียกเมธอดใดโดยใช้
โครงสร้างที่เรียกว่า call stack
เมธอดที่ถูกเรียกใช้งานจะถูกใสไ่ว้ใน call stack
เมื่อเมธอดนั้นท างานเสร็จก็จะถูกเอาออกจาก call stack
หาก main() มีการเรียกใชเ้มธอดดังนี้
5Object-Oriented Programming 2/2551
แสดงการท างานของ call stack
6Object-Oriented Programming 2/2551
method signature
โครงสร้างเมธอด
access_modifier return_type methodName(parameter_list) { … }
Access_modifier (public/private)
Return_type (ชนิดข้อมูลที่ส่งกลับไปให้คลาสที่เรียกใช้เมธอดนี้)
methodName (ชื่อเมธอด)
Parameter_list (ชนิดข้อมูลที่ต้องส่งให้กับเมธอด)
7Object-Oriented Programming 2/2551
Static method VS instance method
ในจาวามีเมธอด 2 แบบคือ
Static method
Instance method
static method
• เป็นเมธอดที่มีค าว่า static อยู่หน้าชื่อเมธอด
public static void main(String[] args) { }
• ตัวแปรหรือเมธอดที่เป็น static จะถูกจองพื้นที่ในขณะคอมไพล์โปรแกรม
• สามารถเรียกใช้ได้ทันทีโดยไม่ต้องสร้าง object มาเรียกใช้งาน
8Object-Oriented Programming 2/2551
Static method
เมธอดที่เป็น static จะเรียกใช้เมธอดและตัวแปรที่เป็น static โดยตรงได้
หากต้องการเรียกใช้เมธอดที่ไม่ใช่ static จะต้องสร้าง object มาเรียกใช้งาน
9Object-Oriented Programming 2/2551
Static method
หากโปรแกรมนี้เมธอด sayHello() ไม่มีค าว่า static จะเกิดข้อผิดพลาด
ขณะคอมไพล์
10Object-Oriented Programming 2/2551
Instance method
Instance method
เป็น method ภายในคลาสที่เป็นต้นแบบของวัตถุ ไม่ระบุค าว่า static
การเรียกใช้งานต้องสร้าง object ของคลาสขึ้นมาก่อน แล้วจึงเรียกใช้งานเมธอด
ของ object
objectName.methodName();
การจองพื้นที่ตัวแปรในเมธอดจะเกิดขณะรันโปรแกรม
11Object-Oriented Programming 2/2551
Instance method
ตัวอย่างการใช้งาน instance method
12Object-Oriented Programming 2/2551
Method with/without return type
เมธอดที่ไม่มกีารคืนค่า ให้ก าหนด return_type เป็น void
public void mailCheck() { … }
การเรียกใช้ o.mailCheck();
เมธอดที่มีการคืนค่า ให้ระบุชนิดข้อมูลที่จะคืนค่า และใส่ค่าที่จะ return
ในเมธอด
public double calculateArea() { …
return area; }
การเรียกใช ้ System.out.println(x.calculateArea());
13Object-Oriented Programming 2/2551
Method with/without return type
ชนิดข้อมูลของ Return type อาจเป็น primitive data types หรือชนิด
ข้อมูลที่เป็น class เช่น String
หากเป็น method ที่มีการคืนค่า ต้องมีการระบุค าสั่ง return ไว้ใน method
นั้นด้วยว่าตัวแปรที่จะส่งคืนคืออะไร
ชนิดข้อมูลของตัวแปรที่ส่งคืน ต้องเป็นชนิดเดียวกันกับ return-type
14Object-Oriented Programming 2/2551
Method with/without parameter
class Test {
// เมธอดที่ไม่มีการรับ parameter
public void printHello() { System.out.println(“Hello”);
}
//เมธอดที่มีการรับ parameter
public void multiply(int x, int y) { System.out.println(x*y);
}
}
…
Test t = new Test();
t.printHello();
t.multiply(5,9);
…
เมธอดที่ประกาศในคลาส Test
การเรียกใช้เมธอดใน main()
เรียกว่า argument คือค่าที่ส่งให้เมธอด
15Object-Oriented Programming 2/2551
Passing parameter to a method
การส่งค่าใหแ้ก่เมธอดท าได้ 2 แบบ
Pass-by-value ส่งเฉพาะข้อมูล คือการส่งค่า primitive data type
Pass-by-reference ส่งค่าแบบอ้างอิง คือการส่ง address ซึ่งใช้ในการส่ง object
16Object-Oriented Programming 2/2551
Declare method with parameter
17Object-Oriented Programming 2/2551
Constructor
Constructor คือ เมธอดทีม่ีชื่อเหมือนคลาส และไม่มกีารระบุ return type
หรือ void
หน้าที่หลักคือ ก าหนดคา่เริ่มต้นให้กบั attribute ในคลาส
เมื่อเราสร้างวัตถุด้วยค าสั่ง new จะเป็นการเรียกใช้ Constructor method
เช่น
Circle a = new Circle(); // default constructor
ปกตแิล้ว ทกุคลาสจะมี default constructor คือ constructor ที่ไม่มีการส่ง
parameter ใดๆ
เราไม่ต้องประกาศ default constructor แต่จาวาจะสร้างให้เอง
18Object-Oriented Programming 2/2551
Constructor
Class Circle มี default constructor method คือ Circle(){ }
จาวาจะสร้างให้เองในระหว่างการคอมไพล์
19Object-Oriented Programming 2/2551
Constructor
เมื่อเราสร้าง object ด้วยค าสั่ง Circle a = new Circle();
จะเป็นการเรียก constructor method Circle() ซึ่งไม่ได้ท าการก าหนดค่า
ใดๆให้ attribute ของ Circle ดังนั้น radius จึงยังมีค่าตาม default คือ 0
radius 0
area 0.0a
20Object-Oriented Programming 2/2551
Constructor
เรามักใช้ Constructor ก าหนดค่าเริ่มต้นแก ่attribute ตอนสร้าง object
radius 5
area 0.0a
21Object-Oriented Programming 2/2551
Constructor
เราสามารถส่ง parameter ใหแ้ก ่Constructor ได้
22Object-Oriented Programming 2/2551
Overloaded methods
ภายในคลาสสามารถมีเมธอดชื่อเดียวกันได้หลายเมธอด
แต่เมธอดเหล่านี้ต้องมชีนดิหรือจ านวนของ parameter ไม่เหมือนกัน
เมื่อมีการเรียกใช้ จาวาจะตรวจสอบชนิดหรือจ านวนของ argument ที่ส่ง
มาว่าตรงกับเมธอดตัวใด ก็จะให้เมธอดตัวนั้นท างาน
เมธอดที่มีชื่อเดียวกันเหล่านี้เรียกว่า overloaded methods
23Object-Oriented Programming 2/2551
Multiply int * int
20
Multiply double * double
20.0
Overloaded methods
24Object-Oriented Programming 2/2551
OO concept – Information Hiding
ในการพัฒนาตามแนวทาง OOP จะมีการใช้งานคลาสที่ได้พฒันาไว้แล้ว
จากนั้นเขียนโปรแกรมเพื่อสร้าง object จากคลาสนั้นมาใช้งาน เรียก
โปรแกรมน้ีว่า client program
ผู้พัฒนา client program ต้องรู้ว่าคลาสที่จะใช้งาน มีตัวแปรและเมธอด
อะไรให้ใช ้ แต่ไม่จ าเป็นตอ้งรู้ว่าเมธอดนั้นมีการท างานอย่างไร
ตัวแปรหรือเมธอดของคลาสบางตัวไม่ต้องการให้มีการแกไ้ขได้จากคลาส
หรือโปรแกรมอื่นโดยตรง
25Object-Oriented Programming 2/2551
Why encapsulation?
เนื่องจาก object อาจถูกเรียกใช้จากหลายคลาสพร้อม ๆ กันได้ จงึอาจ
ต้องซ่อนตัวแปรหรือเมธอดไวไ้ม่ให้ถูกแกไ้ขคุณสมบัติบางอย่างที่อาจ
ส่งผลกระทบต่อคลาสอื่น
การปกป้องเมธอดหรือตัวแปร ท าได้โดยการก าหนดระดับการเข้าถงึตัว
แปรและเมธอด (access modifier)
26Object-Oriented Programming 2/2551
Access modifier
Access modifier บอกระดับการ
เข้าถึงของตัวแปรและเมธอด
public - คลาสอื่นสามารถ
เรียกใช้ตัวแปรหรือก าหนดค่าให้
ตัวแปรได้โดยตรง
• เช่น c.radius = 5;
private - ตัวแปรหรือเมธอดที่เป็น
private ไม่สามารถถูกเข้าถึงหรือ
เรียกใช้จาก method อื่นได้
โดยตรง
27Object-Oriented Programming 2/2551
การประกาศ Get-set method
การเข้าถึงตัวแปร private จะท าผ่านเมธอดที่เป็น public
เมธอดที่ใช้เขา้ถึงตัวแปร private ประกอบด้วย
set method ใช้ก าหนดค่าให้ตัวแปรคลาส
get method ใช้รับค่าจากตัวแปรคลาส
28Object-Oriented Programming 2/2551
EX. Get-set method of id
29Object-Oriented Programming 2/2551
แบบฝึกหดั
สร้างคลาสชือ่ Account
ประกาศตัวแปร name และ balance เป็น private
สร้าง get-set method ของตัวแปรที่เป็น private
เขียนโปรแกรม AccountDemo
ก าหนดค่า name = “Harry Potter”
ก าหนดค่า balance = 10000
เรียก get-set method แสดงค่า name, balance