Upload
usablelabs
View
1.849
Download
3
Embed Size (px)
DESCRIPTION
สื่อการเรียนการสอน เรื่อง โปรแกรมเชิงวัตถุ โดยคุณ Kan http://learners.in.th/file/zniperlll
Citation preview
4. Object-Oriented Programming
Faculty of Technology and Environment
Prince of Songkla University, Phuket Campus
2/2551
976-140 Object-Oriented Programming
344-202 Introduction to OOP
การโปรแกรมเชงวตถ
2Object-Oriented Programming 2/2551
Contents
Class & Object
Class structure
Attribute
Method
Instantiating an object
3Object-Oriented Programming 2/2551
ขนตอนในการพฒนาโปรแกรม
การวเคราะหระบบ วาระบบทตองการพฒนาสามารถท าอะไรไดบาง
การออกแบบระบบ เพอใหเหนวาระบบทจะพฒนามโครงสรางอยางไร
การพฒนาระบบ เปนการเขยนโปรแกรมตามทออกแบบไวใหท างานไดจรง
การทดสอบระบบ เปนการทดสอบวาระบบทพฒนาขนท างานไดถกตอง และตรง
กบความตองการ
การตดตงระบบ น าระบบทพฒนาไปตดตงใชงานจรง
การบ ารงรกษาระบบ เปนการปรบปรงแกไขระบบหลงจากมการใชงานแลว
4Object-Oriented Programming 2/2551
แนวคดการเขยนโปรแกรมเชงวตถ
ระบบทพฒนาโดยใชแนวทาง OOP จะประกอบดวยวตถ (object) ตาง ๆ
ท างานรวมกน
ในการพฒนาระบบ จะท าการจ าลองวตถในระบบงานจรง มาเปนวตถใน
โปรแกรมทเราพฒนา
วตถ (object) คอสงตาง ๆ ซงจ าลองมาจากสงทมอยจรง ไดแก
สงทจบตองได เชน คน สตว สงของ
สงทจบตองไมได เชน การด าเนนงาน การลงทะเบยน การซอขาย
ในการวเคราะหและออกแบบโปรแกรมเชงวตถ ตองท าการคนหาใหไดวา
ระบบจะมวตถ หรอ object อะไรบาง
5Object-Oriented Programming 2/2551
การพฒนาระบบดวยแนวทางเชงวตถ
วตถ ประกอบดวย คณลกษณะและพฤตกรรม
ขอมล หรอคณลกษณะ (data/attribute) คอ สงทบงบอกลกษณะของวตถ
การกระท า หรอพฤตกรรม (operation/behavior) คอ สงทวตถสามารถท าได
ตวอยาง ระบบธนาคาร ประกอบดวยวตถคอ ลกคา
ลกคา
• ขอมล คอ ชอ เลขทบตรประชาชน ทอย เลขทบญชเงนฝาก
• การกระท าของลกคา คอ เปดบญช ฝากเงน ถอนเงน โอนเงน
บญชเงนฝาก
• ขอมล คอ เลขทบญช เจาของบญช ประเภทบญช ยอดคงเหลอ
• การกระท า คอ การฝากเงน การถอนเงน การสอบถามยอดคงเหลอ
6Object-Oriented Programming 2/2551
การพฒนาระบบดวยแนวทางเชงวตถ
ตวอยาง ระบบลงทะเบยน ประกอบดวยวตถ คอ นกศกษา วชา
นกศกษา
• ขอมล คอ รหสนกศกษา ชอ ทอย สาขาวชา
• การกระท าของนกศกษา คอ ลงทะเบยนวชา เพมวชา ถอนวชา
วชา
• ขอมล คอ รหสวชา ชอวชา หนวยกต
การลงทะเบยน
• ขอมล คอ รหสนกศกษา รหสวชา section
7Object-Oriented Programming 2/2551
Class
สงทเราสนใจจะเกบขอมล หรอขอมลตาง ๆ ทเกดขนจะถกน ามาเปนวตถ
ในโปรแกรม
การสรางวตถ ท าไดโดยการก าหนดคลาสของวตถนนขนมากอน
คลาส คอ ตนแบบทใชในการก าหนดคณลกษณะ และพฤตกรรมของวตถ
คลาส เปนการก าหนดลกษณะพนฐานของวตถไววาตองมองคประกอบ
อะไรบาง โดยวตถทสรางจากคลาสเดยวกนอาจมคณลกษณะตางกนได
Class is a template of object
8Object-Oriented Programming 2/2551
Class
ตวอยาง ก าหนดคลาสของสมดบญช ชอ
BankAccount
เมอมการเปดบญชจากลกคา 3 คน กจะมการ
สรางวตถของสมดบญชขนมา 3 วตถ
ทกวตถสามารถ
เกบขอมล เลขทบญช (accNo), เลขทลกคา
(custNo) ยอดคงเหลอ (balance)
ท าการฝากเงน(deposit) ถอนเงน(withdraw)
และดยอดคงเหลอ(getBalance) ได
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
Mr.A Mr.B Mr.C
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
9Object-Oriented Programming 2/2551
โครงสรางคลาส
คลาส ประกอบดวย
ขอมล หรอ attribute แทนไดดวย ตวแปร
การกระท า หรอ behaviour แทนไดดวย เมธอด (method)
class ชอคลาส {attribute1;attribute2;
method1() {//ค าสงการท างาน
}method2() {
//ค าสงการท างาน}
}
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
10Object-Oriented Programming 2/2551
Attributes/data
Attribute คอ สงทบงบอกลกษณะของวตถ อาจเปน ลกษณะทมองเหน
สถานะ คณภาพ ปรมาณ
Attribute ของ สมดบญช ประกอบดวย เลขทบญช รหสลกคา ยอด
คงเหลอ
คาทเกบในวตถของสมดบญชแตละเลมจะเปนขอมลของบญชนน
การประกาศ attribute ของ object คอการประกาศตวแปร (variable) ไว
ในคลาส
แตละวตถมตวแปรชอเหมอนกน แตคาในตวแปรมไดตางกน จงมกเรยก
ตวแปรของวตถเหลานวา instance variable
11Object-Oriented Programming 2/2551
Behavior/method
Behavior คอ สงทวตถสามารถท าได หรอตอบสนองตอวตถอนได
Behavior ของสมดบญช เชน การถอนเงน ฝากเงน ดยอดคงเหลอ
การประกาศ behavior ให object คอ การประกาศเมธอดในคลาส
ภายในเมธอดประกอบดวยค าสงในการด าเนนงาน เชน
เมธอด ฝากเงน ตองมค าสง รบจ านวนเงนทจะฝาก และเพมจ านวนเงนนนใน
ยอดคงเหลอ
12Object-Oriented Programming 2/2551
Draw a class in class diagram
Class
Attributes / data
Behaviors / methods
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
13Object-Oriented Programming 2/2551
Object
Object ถกสรางขนมาจากคลาส (object คอ instance ของคลาส)
แตละวตถจะแทนขอมลของคนแตละคน หรอของแตละชน เชน
1 object แทน นกศกษา 1 คน หรอ บญชเงนฝาก 1 บญช
วตถ BankAccount ของ Mr.A, Mr.B, Mr.C มขอมลดงน
class objects
+deposit()
+withdraw()
+getBalance()
+accNo=111
+custNo=37899
+balance=500.0
BankAccount
+deposit()
+withdraw()
+getBalance()
+accNo=222
+custNo=87678
+balance=1000.0
BankAccount
+deposit()
+withdraw()
+getBalance()
+accNo=333
+custNo=67777
+balance=800.0
BankAccount
Mr.A Mr.B Mr.C
+deposit()
+withdraw()
+getBalance()
+accNo
+custNo
+balance
BankAccount
14Object-Oriented Programming 2/2551
Define class in Java
ค าสงในการประกาศคลาส
[AccessModifier] class ClassName
{ class-body }
AccessModifier ค าทแสดงความสามารถในการเขาถง เชน public
หมายถงคลาสอนสามารถเรยกใชงานได
class เปนค าเพอบอกใหคอมไพเลอรรวาสวนตอไปน หมายถงคลาส
ใน {class-body} ประกอบดวยการประกาศ attributes & methods
15Object-Oriented Programming 2/2551
Declare attributes in class
การประกาศ attribute คอการประกาศตวแปรของคลาส
Syntax:
[AccessModifier] typeName attributeName [= value];
ตวแปรของคลาสตองอยภายใน { class-body }
ตวแปรของคลาสสามารถถกเรยกใชไดจากทก method ในคลาส
AccessModifier ของ attributes
ถาก าหนดเปน public จะท าให object อนมองเหนตวแปรน และเรยกใชได
ถาก าหนดเปน private จะท าให object อนมองไมเหนตวแปรน เรยกใชไมได
16Object-Oriented Programming 2/2551
Declare attributes in class
ตวอยางการประกาศ
17Object-Oriented Programming 2/2551
Declare method in class
การประกาศ method ในคลาส จะเปนการบอกระบการท างานทวตถนน
สามารถท าได
Syntax:
[AccessModifier] [static] return-type method-name([parameter-list])
{ statements }
Method จะตองอยใน { class-body}
AccessModifier ของ attributes
ถาก าหนดเปน public จะท าให object อนมองเหน method น และเรยกใชได
ถาก าหนดเปน private จะท าให object อนมองไมเหน method น เรยกใชไมได
18Object-Oriented Programming 2/2551
Declare method in class
Return-type เปนการระบวาเมธอดมการคนคาใหกบวตถทเรยกใชเมธอด
หรอไม
ถาไมมการคนคา ใหระบวาเปน void
ถามการคนคา ใหระบชนดขอมลทตองการคนคา และระบค าสง return วาจะคน
คาใด
19Object-Oriented Programming 2/2551
Declare method in class
Parameter-list ระบวามการรบ parameter หรอ argument หรอไม
ถาไมมการรบ parameter ใหใสวงเลบวางๆ
ถามการรบ parameter ใหระบชนดขอมลและชอของ parameter ไวในวงเลบ
20Object-Oriented Programming 2/2551
EX. Circle class
21Object-Oriented Programming 2/2551
Ex. BankAccount class
22Object-Oriented Programming 2/2551
Instantiating an object
การเขยนโปรแกรมเชงวตถ จะตองมการสรางวตถขนมากอน
การสรางวตถ คอการจองพนทไวในหนวยความจ าส าหรบเกบคาของตว
แปร
เราสามารถอางถงวตถนนโดยการตงชอใหแกวตถ (ตวแปรวตถ)
การสรางวตถท าไดโดยใช keyword new
23Object-Oriented Programming 2/2551
Instantiating an object
Circle c; //ประกาศตวแปรวตถ c
c = new Circle(); //สรางวตถซงมโครงสรางของคลาส Circle
หรอเขยนในค าสงเดยวกนเปน
Circle c = new Circle();
24Object-Oriented Programming 2/2551
Instantiating an object
เมอมการสราง object ดวยค าสง new มขนตอนการท างานดงน
Circle c = new Circle();
1. new Circle() ท าใหเกดการสราง object ของคลาส Circle โดยมการจอง
หนวยความจ าเทากบจ านวนตวแปรของคลาสนน
คลาส Circle มตวแปรคลาสคอ radius และ area กจะจองใหตามขนาดของ
ชนดขอมล และก าหนดคาเรมตนใหตาม default
radius 0
area 0.0
เลขทหนวยความจ า
(10004)
25Object-Oriented Programming 2/2551
Instantiating an object
2. Circle c - จองพนทใหตวแปร c โดยคาทเกบใน c ตองเปน address ของ object ท
สรางจากคลาส Circle
c
3. c = new Circle(); คอการน าคา เลขทหนวยความจ า ของ object ทสรางในขอ 1
ใหกบตวแปร c
เรยกวา c เปนตวแปรวตถ(reference) ทอางถง object ของคลาส Circle
c 10004
26Object-Oriented Programming 2/2551
Instantiating an object
Initial value of object’s attributes คาเรมตนเมอมการสรางวตถ
27Object-Oriented Programming 2/2551
Instantiating an object
วตถทถกสรางขนจะถกก าหนดคาใหกบตวแปรและเรยกใชเมธอดให
ท างานได
การอางถงตวแปรและเมธอดของวตถ ใช . (dot) ตอทายชอวตถ เชน
Circle c = new Circle();
Circle d = new Circle();
c.radius = 5;
d.radius = 10;
c.calculateArea();
d.calculateArea();
28Object-Oriented Programming 2/2551
Ex. Program TestCircle
Area =78.53981633974483
Area =314.1592653589793
ระวง ! คลาสทมเมธอด main จงจะสามารถรนโปรแกรมได
29Object-Oriented Programming 2/2551
แบบฝกหด
จงสรางคลาสจาก class diagram
Method printName() ใหพมพชอ
Method calculateGrade() ใหค านวณเกรด
• ต ากวา 70 ใหพมพ Unpass
• 70 ขนไป ใหพมพ Pass
จงเขยนโปรแกรมเพอสราง object ของคลาส Student 2 objects
คนแรกม name=“Asakura Yo” , score= 90
คนทสอง name=“Tao Ren”, score 65
เรยก method เพอแสดงชอและเกรด
Student
name
score
printName()
calculateGrade()