5.methods cs

29
5. Methods Faculty of Technology and Environment Prince of Songkla University, Phuket Campus 2/2551 344-202 Introduction to Object-Oriented Programming การโปรแกรมเชิงวัตถุ

Upload: usablelabs

Post on 28-May-2015

1.976 views

Category:

Education


1 download

DESCRIPTION

สื่อการเรียนการสอน เรื่อง โปรแกรมเชิงวัตถุ โดยคุณ Kan http://learners.in.th/file/zniperlll

TRANSCRIPT

Page 1: 5.Methods cs

5. Methods

Faculty of Technology and Environment

Prince of Songkla University, Phuket Campus

2/2551

344-202 Introduction to Object-Oriented Programming

การโปรแกรมเชิงวัตถุ

Page 2: 5.Methods cs

2Object-Oriented Programming 2/2551

Contents

Method overview

Call stack

Method signature

Static method & Instance method

Constructor

Overload method

Information hiding

get-set methods

Page 3: 5.Methods cs

3Object-Oriented Programming 2/2551

Method overview

ปกติโปรแกรมจะท างานตามล าดบัค าสั่งที่เขียนในโปรแกรม

การใช้เมธอดช่วยใหส้ามารถแบ่งการท างานของโปรแกรมเป็นส่วน ๆ

แต่ละเมธอดจะมีค าสั่งในการด าเนินการที่เกี่ยวข้องกัน

เมื่อมีการเรียกเมธอด (invoked / called) ก็จะมีการย้ายไปท างานที่

เมธอดนั้นจนเสร็จแล้วจึงกลับมาท างานต่อที่ค าสั่งถดัไปหลังการเรียก

เมธอด

เมธอดที่ก าลงัท างานจะไดร้ับ control ไป ซึ่งหากมีการเรียกใช้เมธอดอื่น

ก็จะย้าย control ไปยังเมธอดที่ถูกเรียก เมื่อท าเสร็จแล้ว control กจ็ะ

กลับมายังเมธอดที่เรียกใช ้เรียกว่า Flow of control

Page 4: 5.Methods cs

4Object-Oriented Programming 2/2551

Method

เมธอดแรกที่ถูกเรียกใชใ้หท้ างานในจาวาคือ main() ซึ่งจะเรียกโดย JVM

JVM จะจดจ าเมธอดที่เรียกใช้ได้วา่เมธอดใดเรียกเมธอดใดโดยใช้

โครงสร้างที่เรียกว่า call stack

เมธอดที่ถูกเรียกใช้งานจะถูกใสไ่ว้ใน call stack

เมื่อเมธอดนั้นท างานเสร็จก็จะถูกเอาออกจาก call stack

หาก main() มีการเรียกใชเ้มธอดดังนี้

Page 5: 5.Methods cs

5Object-Oriented Programming 2/2551

แสดงการท างานของ call stack

Page 6: 5.Methods cs

6Object-Oriented Programming 2/2551

method signature

โครงสร้างเมธอด

access_modifier return_type methodName(parameter_list) { … }

Access_modifier (public/private)

Return_type (ชนิดข้อมูลที่ส่งกลับไปให้คลาสที่เรียกใช้เมธอดนี้)

methodName (ชื่อเมธอด)

Parameter_list (ชนิดข้อมูลที่ต้องส่งให้กับเมธอด)

Page 7: 5.Methods cs

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 มาเรียกใช้งาน

Page 8: 5.Methods cs

8Object-Oriented Programming 2/2551

Static method

เมธอดที่เป็น static จะเรียกใช้เมธอดและตัวแปรที่เป็น static โดยตรงได้

หากต้องการเรียกใช้เมธอดที่ไม่ใช่ static จะต้องสร้าง object มาเรียกใช้งาน

Page 9: 5.Methods cs

9Object-Oriented Programming 2/2551

Static method

หากโปรแกรมนี้เมธอด sayHello() ไม่มีค าว่า static จะเกิดข้อผิดพลาด

ขณะคอมไพล์

Page 10: 5.Methods cs

10Object-Oriented Programming 2/2551

Instance method

Instance method

เป็น method ภายในคลาสที่เป็นต้นแบบของวัตถุ ไม่ระบุค าว่า static

การเรียกใช้งานต้องสร้าง object ของคลาสขึ้นมาก่อน แล้วจึงเรียกใช้งานเมธอด

ของ object

objectName.methodName();

การจองพื้นที่ตัวแปรในเมธอดจะเกิดขณะรันโปรแกรม

Page 11: 5.Methods cs

11Object-Oriented Programming 2/2551

Instance method

ตัวอย่างการใช้งาน instance method

Page 12: 5.Methods cs

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());

Page 13: 5.Methods cs

13Object-Oriented Programming 2/2551

Method with/without return type

ชนิดข้อมูลของ Return type อาจเป็น primitive data types หรือชนิด

ข้อมูลที่เป็น class เช่น String

หากเป็น method ที่มีการคืนค่า ต้องมีการระบุค าสั่ง return ไว้ใน method

นั้นด้วยว่าตัวแปรที่จะส่งคืนคืออะไร

ชนิดข้อมูลของตัวแปรที่ส่งคืน ต้องเป็นชนิดเดียวกันกับ return-type

Page 14: 5.Methods cs

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 คือค่าที่ส่งให้เมธอด

Page 15: 5.Methods cs

15Object-Oriented Programming 2/2551

Passing parameter to a method

การส่งค่าใหแ้ก่เมธอดท าได้ 2 แบบ

Pass-by-value ส่งเฉพาะข้อมูล คือการส่งค่า primitive data type

Pass-by-reference ส่งค่าแบบอ้างอิง คือการส่ง address ซึ่งใช้ในการส่ง object

Page 16: 5.Methods cs

16Object-Oriented Programming 2/2551

Declare method with parameter

Page 17: 5.Methods cs

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 แต่จาวาจะสร้างให้เอง

Page 18: 5.Methods cs

18Object-Oriented Programming 2/2551

Constructor

Class Circle มี default constructor method คือ Circle(){ }

จาวาจะสร้างให้เองในระหว่างการคอมไพล์

Page 19: 5.Methods cs

19Object-Oriented Programming 2/2551

Constructor

เมื่อเราสร้าง object ด้วยค าสั่ง Circle a = new Circle();

จะเป็นการเรียก constructor method Circle() ซึ่งไม่ได้ท าการก าหนดค่า

ใดๆให้ attribute ของ Circle ดังนั้น radius จึงยังมีค่าตาม default คือ 0

radius 0

area 0.0a

Page 20: 5.Methods cs

20Object-Oriented Programming 2/2551

Constructor

เรามักใช้ Constructor ก าหนดค่าเริ่มต้นแก ่attribute ตอนสร้าง object

radius 5

area 0.0a

Page 21: 5.Methods cs

21Object-Oriented Programming 2/2551

Constructor

เราสามารถส่ง parameter ใหแ้ก ่Constructor ได้

Page 22: 5.Methods cs

22Object-Oriented Programming 2/2551

Overloaded methods

ภายในคลาสสามารถมีเมธอดชื่อเดียวกันได้หลายเมธอด

แต่เมธอดเหล่านี้ต้องมชีนดิหรือจ านวนของ parameter ไม่เหมือนกัน

เมื่อมีการเรียกใช้ จาวาจะตรวจสอบชนิดหรือจ านวนของ argument ที่ส่ง

มาว่าตรงกับเมธอดตัวใด ก็จะให้เมธอดตัวนั้นท างาน

เมธอดที่มีชื่อเดียวกันเหล่านี้เรียกว่า overloaded methods

Page 23: 5.Methods cs

23Object-Oriented Programming 2/2551

Multiply int * int

20

Multiply double * double

20.0

Overloaded methods

Page 24: 5.Methods cs

24Object-Oriented Programming 2/2551

OO concept – Information Hiding

ในการพัฒนาตามแนวทาง OOP จะมีการใช้งานคลาสที่ได้พฒันาไว้แล้ว

จากนั้นเขียนโปรแกรมเพื่อสร้าง object จากคลาสนั้นมาใช้งาน เรียก

โปรแกรมน้ีว่า client program

ผู้พัฒนา client program ต้องรู้ว่าคลาสที่จะใช้งาน มีตัวแปรและเมธอด

อะไรให้ใช ้ แต่ไม่จ าเป็นตอ้งรู้ว่าเมธอดนั้นมีการท างานอย่างไร

ตัวแปรหรือเมธอดของคลาสบางตัวไม่ต้องการให้มีการแกไ้ขได้จากคลาส

หรือโปรแกรมอื่นโดยตรง

Page 25: 5.Methods cs

25Object-Oriented Programming 2/2551

Why encapsulation?

เนื่องจาก object อาจถูกเรียกใช้จากหลายคลาสพร้อม ๆ กันได้ จงึอาจ

ต้องซ่อนตัวแปรหรือเมธอดไวไ้ม่ให้ถูกแกไ้ขคุณสมบัติบางอย่างที่อาจ

ส่งผลกระทบต่อคลาสอื่น

การปกป้องเมธอดหรือตัวแปร ท าได้โดยการก าหนดระดับการเข้าถงึตัว

แปรและเมธอด (access modifier)

Page 26: 5.Methods cs

26Object-Oriented Programming 2/2551

Access modifier

Access modifier บอกระดับการ

เข้าถึงของตัวแปรและเมธอด

public - คลาสอื่นสามารถ

เรียกใช้ตัวแปรหรือก าหนดค่าให้

ตัวแปรได้โดยตรง

• เช่น c.radius = 5;

private - ตัวแปรหรือเมธอดที่เป็น

private ไม่สามารถถูกเข้าถึงหรือ

เรียกใช้จาก method อื่นได้

โดยตรง

Page 27: 5.Methods cs

27Object-Oriented Programming 2/2551

การประกาศ Get-set method

การเข้าถึงตัวแปร private จะท าผ่านเมธอดที่เป็น public

เมธอดที่ใช้เขา้ถึงตัวแปร private ประกอบด้วย

set method ใช้ก าหนดค่าให้ตัวแปรคลาส

get method ใช้รับค่าจากตัวแปรคลาส

Page 28: 5.Methods cs

28Object-Oriented Programming 2/2551

EX. Get-set method of id

Page 29: 5.Methods cs

29Object-Oriented Programming 2/2551

แบบฝึกหดั

สร้างคลาสชือ่ Account

ประกาศตัวแปร name และ balance เป็น private

สร้าง get-set method ของตัวแปรที่เป็น private

เขียนโปรแกรม AccountDemo

ก าหนดค่า name = “Harry Potter”

ก าหนดค่า balance = 10000

เรียก get-set method แสดงค่า name, balance