SlideShare a Scribd company logo
1 of 19
Download to read offline
แอทริบิวตและเมธอด
Attribute and Method
วัตถุประสงค
♦ เพื่อใหมีความรูความเขาใจหลักการเขียนโปรแกรมเชิงวัตถุ
♦ เพื่อใหมีความรูความเขาใจหลักการทํางานภายในคลาส
♦ เพื่อเรียนรูถึงโครงสรางแอทริบิวตที่อยูภายในคลาส
♦ เพื่อเรียนรูถึงโครงสรางเมธอดที่อยูภายในคลาส
♦ เพื่อสามารถสรางวัตถุจากคลาสได
♦ เพื่อเรียนรูถึงสัญลักษณที่ใชในการออกแบบคลาส
บทที่
4
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 103
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
เนื้อหาบทเรียน
♦ หลักการเขียนโปรแกรมเชิงวัตถุ
- ความหมายของการเขียนโปรแกรมเชิงวัตถุ
- นิยามคลาส
- Encapsulation
- Inheritance
- Polymorphisms
♦ องคประกอบคลาส(Class)
- สมาชิกขอมูล(Data member)
- สมาชิกพฤติกรรม(Method member)
♦ การประกาศคลาส
♦ การประกาศแอทตทริบิวต
♦ การประกาศเมธอด
♦ สัญลักษณในการสรางคลาสไดอะแกรม
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 104
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
การเขียนโปรแกรมเชิงวัตถุ(Object-oriented programming)
เปนเทคนิคการโปรแกรมโดยใชแนวคิดของวัตถุ( Object) แลวนําไปการพัฒนาระบบ โดยการ
เขียนโปรแกรมเชิงวัตถุเปนการรวมการทํางานและขอมูลที่เกี่ยวของกันไวดวยกัน ซึ่งแตละวัตถุมีความ
เปนอิสระตอกันอยางชัดเจน ดังนั้นการเปลี่ยนแปลง ใดๆ ภายใน วัตถุหนึ่งจะไมสงผลกระทบไปยัง วัตถุ
อื่นๆ และมีในการติดตอกันระหวางวัตถุสามารถทําไดโดยการสง Message จาก วัตถุหนึ่งไปยัง วัตถุ
อื่นๆ ซึ่งโดยทั่วไปแลว วัตถุหมายถึง สิ่งที่จับตองใด สัมผัสได
การเขียนโปรแกรมเชิงวัตถุโดยทั่วไปเริ่มจากการออกแบบวัตถุโดยจําลองจากสิ่งที่เราเห็น ซึ่ง
สวนใหญแลวเรามักสรางจากวัตถุที่มีอยูจริงๆ ในโลก ความยากอยูที่วาทําอยางไรวัตถุที่เราออกแบบนั้น
จะกลายเปนโปรแกรมที่สามารถทํางานไดอยางที่เราตองการ แตถาสังเกตการใชงานโปรแกรม
คอมพิวเตอรทั่วไปจะเห็นวา โปรแกรมที่สรางคลายกับวัตถุที่มีอยูจริงในโลกทั้งสิ้น เชน หากเราเรียกใช
งานซอฟทแวร Edit plus ซึ่งเราสามารถสั่งงานไดโดยคลิกไปที่เมนูบาร หรือใชคีบอรดในการสั่งงาน ซึ่ง
วิธีการเหลานี้เสมือนวา หนาจอของโปรแกรม Edit plus เปนวัตถุชิ้นหนึ่ง และมีพฤติกรรรม คือ
สามารถตอบสนองคําสั่งตางๆ ที่มีในตัวเมนูบารของโปรแกรมเองได ซึ่งความสามารถในการใชงาน
โปรแกรม Edit plus นี้คือ พฤติกรรมหรือเมธอดของวัตถุนั่นเอง
ในการ Programming การเขียนโปรแกรมเชิงวัตถุ หมายถึง แปลงความตองการของระบบใหเปน
รายการของวัตถุเพื่อตอบสนองความตองการ โดยแตละวัตถุจะตองประกอบไปดวย
● รูปพรรณ (identity) สําหรับจําแนกความแตกตางระหวาง Object
● สถานะ (State) เปนสวนที่ใชจัดเก็บขอมูลภายใน Objectโดยจะมีทั้ง คุณสมบัติ
(Properties) และ คา (Values)
● การกระทํา (Behavior) สามารถตอบสนองตอ Object อื่นๆ
และในการเขียนโปรแกรมดวยภาษาจาวา นั้น Object จะถูกสรางขึ้นมาจาก Class เสมอ
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 105
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
คลาส (Class)
เปนที่รวบรวมคุณสมบัติ พฤติกรรม ของวัตถุ เปนเสมือนตนแบบใหแกวัตถุ โดยนําหลักการ
encapsulation กําหนดระดับในการเขาถึงขอมูลภายในคลาส การสรางวัตถุที่ประกอบไปดวยคุณสมบัติ
หรือพฤติกรรมที่เหมือนกับคลาส เรียกวัตถุที่สรางขึ้นมาใหมวา instance
คลาสประกอบไปดวย
• คุณลักษณะ( Data member หรือ Attribute) คือ สิ่งที่บอกลักษณะทั่วไปของวัตถุ หรือ
เรียกไดวา เปนสวนขอมูลของ Class ซึ่งขอมูลของคลาสอาจเปน
Primitive Type Value
Object References Type Value หรือ Instance ของวัตถุ
• พฤติกรรม (Method member หรือ Behavior) คือ สิ่งที่วัตถุสามารถกระทําออกมาได
หรือเปนสวนกระบวนการทํางานของ Class ซึ่งพฤติกรรมของคลาสอาจอยูในรูป
Static Method
Non-Static Method
•Member Classes เปน Class ที่อยูภายใน Class หรือเรียกวา Inner Class (กลาวถึงตอไป)
Object นั้นจะถูกสรางขึ้นตามกระบวนการทํางานของ JVM โดยที่นักพัฒนาจะตองนิยาม Class
ที่ตองการใหกับ JVM ซึ่ง Object ที่สรางจากคลาสนั้นเรียกวา Instance ในหนึ่งคลาสสามารถมีนําไป
สราง instance ไดหลาย instance
Encapsulation
การหอหุม(Encapsulation) หมายถึงความสามารถในการปกปองขอมูลที่อยูภายใน Object
(ขอมูลในที่นี่คือดาตาหรือเมธอด) เปนการปดบังขอมูลจากผูใชเพื่อไมใหเขาถึงขอมูล โดยตรง โดยใช
access modifier เพื่อกําหนดการเขาถึง ขอมูล หรือบางครั้งก็ถูกเรียกวา Data Hiding โดยปรกติแลว จะถือ
วา class ใดๆที่จําแนก Data fields ทุกตัวเปน private และมี public method คู get/set ไวเพื่อเขาถึง data
นั้นๆ จะเรียกวา class นั้นๆเปน Full Encapsulation class การเอนแคปซูเลชั่นนี้เปนคุณสมบัติอยางหนึ่ง
ของการเขียนโปรแกรมเชิงวัตถุ ซึ่งจะไดศึกษาอยางละเอียดในหัวขอโครงสรางคลาส
ประโยชนของการเอนแคปซูเลชั่น
- มีความยืดหยุนสูง(Flexibility ) การใชงานเมธอดใน OOP นั้นมีความยืดหยุนสูงกวาการใชงาน
Data Fields ใน Object โดยตรงๆ
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 106
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
- ดูแลรักษางาย(Maintainability) เพราะหากมีการเปลี่ยนแปลงภายใน Object ใดๆ หากวาสวน
ติดตอกับ Object อื่นยังคงเดิมแลว ก็ยอมไมสงผลกระทบตองานทั้งระบบ
- มีความปลอดภัยของขอมูล(Security) คือสามาถสรางความปลอดภัยใหกับขอมูลได เพราะ
ขอมูลที่อยูในวัตถุจะเขาถึงไดเฉพาะผูที่มีสิทธิ์เทานั้น
Inheritance
การสืบทอด(Inheritance) หมายถึงความสามารถในการสืบทอดคุณสมบัติ ของ Object ใน Object
ใหมที่ถูกสรางขึ้น หรืออาจจะเรียกไดวาเปนการ Reusable Code การสืบทอดเปนคุณสมบัติอยางหนึ่ง
ของการเขียนโปรแกรมเชิงวัตถุ
การสืบทอดคลาส(Class Inheritance) คือการที่คลาสหนึ่งๆสามารถสืบทอดคุณสมบัติบาง
ประการจากคลาสอื่น แลวเพิ่มคุณสมบัติเฉพาะของคลาสนั้นเขาไป คลาสที่ไดรับการสืบทอดคุณสมบัติ
เรียกวา ซับคลาส(Subclasses หรือ Child Class) สวนคลาสที่เปนตนแบบเรียกวา ซุปเปอรคลาส
(Superclass หรือ Parent Class) เปนการชวยใหไมตองพัฒนา ซอฟทแวรสวนที่ซ้ําหลายๆรอบ
(Reusable) ในภาษาจาวาคลาสหนึ่งๆจะมี Superclass ไดเพียง Class เดียวเทานั้น (Single Inheritance)
แตในภาษา C++ สามารถสืบทอดไดจากหลายซุปเปอรคลาส
ตามนิยามของ Sun แบง ความสัมพันธระหวาง Classes เปนสองลักษณะคือ
- IS-A เปนความสัมพันธที่คลาสหนึ่งเปน Subclass ของอีก Class หนึ่ง
- HAS-A เปนความสัมพันธที่คลาสหนึ่งเปนสวนประกอบ ของอีก Class หนึ่ง
สามารถศึกษาเพิ่มเติมไดในบทที่ 8 คุณสมบัติการสืบทอด
Polymorphisms
โพลิมอฟซึม(Polymorphisms)หมายถึงการที่ วัตถุหนึ่งๆสามารถ ตอบสนองขอความ( message)
รูปแบบเดียวกัน ไดอยางหลากหลาย ในแนวคิดของโพลิมอฟซึมเกิดขึ้นได 2 กรณีคือ
● เกิดขึ้น ณ Compile Time Polymorphisms เรียกวาการโอเวอรโหลด(Overloaded) คือการที่เมธ
อดสามารถมีชื่อเมธอดซ้ํากันได แตตองมี argument แตกตางกัน
● เกิดขึ้น ณ Runtime Polymorphisms เรียกวาการโอเวอรไรด(Overridden) คือการที่Subclasses
สามารถนํา Method ของ Superclass มาจัดการไดเอง โดยที่ยังคงความสามารถอื่นๆของ
Superclass ได ซึ่งศึกษาเพิ่มเติมไดในบทที่ 8 คุณสมบัติการสืบทอด
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 107
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
Class
AAttttrriibbuuttee
((DDaattaa mmeemmbbeerr))
Instance
Encapsulation
MMeetthhoodd
((ffuunnccttiioonn mmeemmbbeerr))
MMeessssaaggee
MMeessssaaggee
องคประกอบคลาส(Class)
รูปแสดง แบบจําลองความสัมพันธระหวางแอทริบิวท เมธอด คลาส อินสแตนท และเมจเสจ
•Class กอนที่จะมีการสรางวัตถุนั้นจําเปนตองทําความเขาใจกับการสรางตนแบบของวัตถุ
หรือที่เรียกวาคลาสกันกอน
รูปแบบในการประกาศ class
[Modifier] class Class_name{
[Data member;]
[Method member;]
}
Modifier ของคลาสแบงเปน 2 กลุมคือ
- Class Access Modifier
o Default Access หากไมกําหนด modifier หนาคียเวิรด class แสดงวาคลาสนี้มี
modifier เปน default นั่นหมายความวาคลาสใดก็ตามที่อยูใน package เดียวกันเทานั้นที่
สามารถเรียกใชงานคลาสนี้ได
o Public Access หากกําหนดคียเวิรด public ไวหนาคียเวิรด class แสดงวาคลาส
นี้สามารถนําไปสรางอินสแตนท ณ แพ็คเก็ตใดก็ไดเขาถึงไดทุกแพ็คเกจและไฟล
นามสกุล .java ตองมีชื่อเดียวกันกับชื่อคลาส
o Private Access , protected access จะใชไดกับ inner class และ nested class
- Class Non Access Modifier
o Final Class กําหนดใหคลาสนั้นไมสามารถสืบทอดได เชน String class
o Abstract class หมายถึง คลาสที่ไมสามารถถูกสรางเปนออบเจ็คได
o Strictfp class คือ คลาสที่มีใชงาน floating point แบบ IEEE754
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 108
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
Class_name ชื่อของคลาสเปนไปตามกฎการตั้งชื่อ identifier ในภาษาจาวา แตนิยมขึ้นตนดวย
ตัวอักษรตัวใหญ และหากชื่อคลาสประกอบดวยคํามากกวาหนึ่งคํา โดยทั่วไปนิยมกําหนดให
ตัวอักษรตัวแรกของแตละคําเปนตัวอักษรตัวใหญ และควรใชคํานาม
ในหนึ่งไฟลอาจมีการกําหนดคลาสไดมากกวาหนึ่งคลาส เมื่อถูกคอมไพลแลวจะได
ไฟล .class สําหรับแตละคลาส โดยมีชื่อไฟลเหมือนกับคลาสนั้น แตในที่นี้แนะนําใหสราง 1
class ตอ 1 ไฟล
ถาไฟลนั้นมีหลายคลาสเปน default ทั้งหมด จะตั้งชื่อไฟลเปนอะไรก็ได
ถาไฟลนั้นมีหลายคลาสแตมีอยูคลาสหนึ่งเปน public จะตั้งชื่อไฟลใหเหมือนกับคลาสที่
เปน public นั้น
ถาหากจําเปนตองสรางไฟลของโปรแกรมที่มีหลายคลาส แลวมีคลาสหนึ่งที่มีเมธอด
main() ใหตั้งชื่อไฟลนั้นเหมือนกับชื่อคลาสที่มีเมธอด main() อยู
ถาไฟลนั้นมีเพียงคลาสเดียวควรตั้งชื่อไฟลใหเหมือนกับชื่อคลาสเพื่อใหสามารถ ดูชื่อ
ไฟลแลวทราบวาเปนไฟลของคลาสไหน
ตัวอยาง สรางคลาสขึ้นมา 3 คลาสในไฟลที่ชื่อวา Hello.java ดังนี้
//Hello.java
class AA{ }
class BB{ }
class CC{ }
จากตัวอยางนี้แสดงใหเห็นอีกอยางหนึ่งวาในหนึ่งคลาสอาจจะถูกกําหนดใหวางเปลาคือไมมี
สมาชิกเลยก็ได หากทําการคอมไพลแลวจะได ไฟล AA.class, BB.class และ CC.class
ตัวอยาง ทําการบันทึกคลาสเหลานี้ในไฟลชื่อ Hello1.java
public class Hello1 { }
public class Hello2{ }
ผลลัพธที่ไดจากการคอมไพล เกิด error เนื่องจาก ในไฟลนี้มี public เกินกวา 1 class
ตัวอยาง ทําการบันทึกคลาสเหลานี้ในไฟลชื่อ Hello3.java
public class Test1{ }
ผลลัพธที่ไดจากการคอมไพล เกิด error เนื่องจาก ชื่อไฟลไมตรงกับชื่อ class ที่มี modifier
เปน public
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 109
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
• Data member ไดแก คุณสมบัติ(attribute)ของ class หรือ object นั้นๆ การประกาศ data
member สามารถประกาศไดทั้งใน class และใน method เปนไดทั้ง primitive data type หรือ
เปน instance ของ object หรือเรียกไดวาเปนตัวแปรคลาส มี 2 ประเภท คือ
a. instance variable หมายถึง เปนตัวแปรที่ประกาศไวเปน attribute ของ classes และ
อยูนอก methods และ constructors
b. local variable หมายถึง ตัวแปรที่ประกาศไวเปน method หรือ constructors
รูปแบบในการประกาศ data member
[Modifier] data_type attribute_identifier ;
Modifier : กําหนดถึงระดับในการซอนขอมูลประกอบดวย keywords ดังตอไปนี้
o private จะทําใหแอทริบิวตนั้นไมสามารถถูกอางถึงไดจากนอกคลาส
o protected จะทําใหแอทริบิวตนั้นสามารถถูกอางถึงไดจากคลาสที่อยูในแพ็คเก็จเดียวกัน
หรือคลาสที่ขยายออกมาจากคลาสนั้นที่อยูในแพ็คเก็จอื่น ซึ่งจะกลาวถึงในบทที่ 8 การ
สืบทอดคลาส
o public จะทําใหแอทริบิวตนั้นสามารถถูกอางอิงไดจากนอกคลาส
o หากไมระบุ modifier ไวจะถือวาเปน default ซึ่งจะถูกอางถึงไดจากคลาสที่อยูในแพ็ค
เก็จเดียวกัน
หมายเหตุ : สําหรับ local variable (ตัวแปรที่อยูภายใน method) ใชไดเฉพาะ default เทานั้น
ตัวอยาง
class Student{
int id , age;
String name;
Address add;
public static void main(String args[]){
boolean chkStatus;
………..
}
}
Data members
(Instance variable)
Data members
(local variable)
Primitive data type
Instance of object
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 110
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
• Method member ไดแก พฤติกรรม(behavior) การกระทํา กระบวนการในการ
ดําเนินงาน การกําหนดคาใหกับ data member หรือกําหนดความสามารถของ class
ในการเขียนโปรแกรมเชิงวัตถุจะทําการเรียกโมดูลยอย(sub module) วา เมธอด (method) เปน
เสมือนฟงกชันหรือโพรซิเดอรในภาษาเชิงโครงสราง (Structure Language) เปนการแบงการทํางานเปน
งานยอยคลายกับฟงกชั่น ชวยใหงายตอการสรางโปรแกรมขนาดใหญ นอกเหนือไปจากนั้นผูใชไม
จําเปนตองทราบรายละเอียดการทํางานของ method เพียงแคทราบเงื่อนไขการเรียกใชและการสงคา
กลับมาของ method ก็สามารถเรียกใชงานเมธอดได ในภาษาจาวา method ไมสามารถที่จะประกาศ
นอกคลาสได
แนวคิดในการสรางเมธอดในภาษาเชิงวัตถุเพื่อแสดงใหเห็นถึงพฤติกรรมของวัตถุนั้นๆ มี
ความสามารถทําอะไรไดบาง วัตถุอื่นๆ สามารถเขาไปใชงานสมาชิกของขอมูล(data member)ในวัตถุ
นั้นไดอยางไร โดยมีการกําหนดสิทธิในการเขาถึงขอมูล(data binding) อนุญาตใหใครเขาถึงขอมูล(data
member) หรือเมธอด(method member)เอง
โครงสรางของการประกาศ method ประกอบไปดวย(Method declaration)
[Modifier] Data_Type Method_Identifier(Parameters) [Throws clause] {
Method bodys;
}
Modifier : ประกอบไปดวย keyword 2 กลุม ไดแก
- Member Access Modifier
o private จะทําใหเมธอดนั้นไมสามารถถูกอางถึงไดจากนอกคลาส
o protected จะทําใหเมธอดนั้นสามารถถูกอางถึงไดจากคลาสที่อยูในแพ็คเก็จเดียวกัน
หรือคลาสที่ขยายออกมาจากคลาสนั้นที่อยูในแพ็คเก็จอื่น ซึ่งจะกลาวถึงในบทที่ 8
คุณสมบัติการสืบทอดคลาส
o public จะทําใหเมธอดนั้นสามารถถูกอางอิงไดจากนอกคลาส
หากไมระบุ modifier ไวจะถือวาเปน default ซึ่งจะถูกอางถึงไดจากคลาสที่อยูใน
แพ็คเก็จเดียวกัน
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 111
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตารางแสดงความสามารถในการเขาถึงขอมูลภายในคลาส
Public Protected Default private
ภายในคลาสเดียวกัน
คลาสในแพ็คเกจเดียวกัน
คลาสไมไดสืบทอดและอยูตางแพ็คเกจกัน
คลาสที่สืบทอดและอยูในแพ็คเกจเดียวกัน
คลาสที่สืบทอดแตอยูตางแพ็คเกจกัน
- Member non-access modifier
o Static หมายถึงสมาชิกที่สามารถใชงานใด แมวา Class นั้นๆจะยังไมถูกนําไปสรางเปน
Object และหาก class นั้นถูกนําไปสรางเปน Object ไมวาจะกี่ instance เมื่ออางอิงถึง
Static Member ก็จะเปนการอางอิงที่ตัวเดียวกัน Code ภานใน Static Method นั้นจะ
อางอิงไดแต static members ดวยกันหรือ local variable เทานั้น
o Final หมายถึง method ที่ไมสามารถทําการ overriding ได
o Abstract หมายถึง method ที่ยังไมมีกระบวนการทํางานใดๆเลย ซึ่ง class ที่สืบทอดไป
จะตองทําการ implement ใหมีกระบวนการทํางาน และAbstract method ตองเปน
สมาชิกของ Abstract class เทานั้น แต Abstract class ไมจําเปนตองมีสมาชิกเปน
Abstract Method
o Transient ใน java นั้นมีกระบวนการที่เรียกวา serialize ซึ่งเปนความสามารถที่จะ เก็บ
สถานะของ Variable ใน Object ไวใน IO Stream เพื่อบันทึกใน file หรือใน เครือขาย
ได transient variable เปนการระบุให JVM รับรูวา ไมตองนํา Variable ตัวนี้เขาสู
กระบวนการ serialize
o Synchronized หมายถึง method ที่อนุญาติให มีแค หนึ่ง Thread ที่สามารถใชงานใดใน
ขณะหนึ่งๆ
o Native กําหนดให method มีการใชงานกับ native code
o strictfp เปนการกําหนดให method นั้นๆใช floating point แบบพิเศษ
o Volatile หมายถึงตัวแปรที่เมื่อ Thread แตละ Thread ตองการใชตัวแปรตัวนี้ ใหทําการ
สรางใหมและ copy คาจากตัวแปรตัวนี้ไปใช
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 112
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
Type : เปนสวนที่แสดงใหเห็นถึงการคืนคากลับมายัง method ที่เรียกใชงาน เพียงแคคาเดียวเทานั้น
หากไมมีการคืนคากลับสวนนี้จะใช keyword ‘void’ แตถามีการ return คากลับมายัง method ที่
เรียกใชงาน type ประกอบไปดวย keyword ตอไปนี้ (อธิบายในบทที่ 2 เรื่องตัวแปรพื้นฐาน
primitive data type) boolean , char , byte , short, int , long , float , double
Method_Identifier : ชื่อของ method ที่สรางขึ้น ในภาษา java สามารถตั้งชื่อ method ไดยาวถึง 255
ตัวอักษร โดยชื่อนี้จะตองไมเปนคําสงวนในภาษาจาวา และใชกฎเดียวกันกับการตั้งชื่อใหกับ
ตัวแปร(variable definition)
Parameters : การประกาศการรับคาของ method หากมีการเรียกใชงาน method จําเปนตองสงคา
พารามิเตอร ใหตรงกับที่ประกาศไว
รูปแบบในการกําหนด parameters : ([Type identifier] ,[ Type identifier])
Throws clause : ประกาศการดักจับ error ของ ภาษาจาวาเพื่อไมใหโปรแกรมมีความสามารถในเรื่องของ
ความคงทนในการใชงานของโปรแกรมภาษาจาวา( robust ) (ศึกษาเพิ่มเติมในเรื่อง Exceptions)
ในสวนนี้เปนตัวเลือก(Optional)จะประกาศไวหรือไมก็ได
Method body : ขั้นตอนในการทํางานของ method ประกอบไปดวย
{ [local variable;]
[ statements;]
[return data ;] }
หากมีการประกาศ local variable แลวมีการเรียกใชงานตัวแปรดังกลาวภายในเมธอด จําเปนตอง
มีการกําหนดคาเริ่มตนใหกับตัวแปรดังกลาว มิเชนนั้นจะเกิด compile error ขึ้น
การประกาศ method สามารถจําแนกได 4 รูปแบบดังตอไปนี้
• รูปแบบที่ 1 method ไมมีการ คืนคากลับ และไมรับพารามิเตอร
รูปแบบการสราง method :
void method_name( ){
[method body;]
}
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 113
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
Method_name : ชื่อ ของ method
Method body : ประกาศตัวแปรใชงานใน method , ขั้นตอนในการทํางาน , เรียกใชงาน
method อื่นๆ
ตัวอยาง
void printA(){
System.out.print(“**********”);
System.out.print(“Hello”);
System.out.print(“**********”);
System.out.println();
}
ตัวอยาง
void printStar(){
System.out.print(“**********”);
}
การเรียกใชงาน method
รูปแบบการเรียกใช : method_name( ) ;
ตัวอยาง :
printA();
printStar();
ตัวอยางการเขียนโปรแกรม :
class showData{
static void printA(){
System.out.print(“**********”);
System.out.print(“Hello”);
System.out.print(“**********”);
System.out.println();
}
ตัวอยางการประกาศ method
ชื่อ printA
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 114
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
static void printB(){
printStar();
System.out.print(“Hello”);
printStar();
}
static void printStar(){
System.out.print(“**********”);
}
public static void main(String args[]){
printA();
printStar();
printB();
}
}
• รูปแบบที่ 2 method ไมมีการคืนคากลับ รับพารามิเตอร
การสราง method
รูปแบบ : void method_name (parameter_list){
Method_body;
}
ตัวอยาง :
void print(char mychr){
System.out.println(mychr);
}
void printSet(char mychr , int num){
for (int i = 0 ; I < num ; i++)
System.out.print(mychr);
System.out.println();
}
ตัวอยางการเรียกใชงาน
ตัวอยางการประกาศ method
ชื่อ printB
ตัวอยางการประกาศ method
ชื่อ printStar
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 115
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
การเรียกใชงาน method
รูปแบบ : method_name(argument_list) ;
ตัวอยาง : print(‘#’);
printSet(‘$’ , 6);
ตัวอยาง การเขียนโปรแกรม :
class getData{
static void print(char mychr){
System.out.println(mychr);
}
static void printSet(char mychr , int num){
for (int i = 0 ; i < num ; i++)
System.out.print(mychr);
System.out.println();
}
public static void main(String args[]){
char ch = '@';
print(ch);
printSet(ch,15);
}
}
แบบฝกหัด
สราง method nameที่สอง ชื่อ showRect ทําหนาที่แสดงขอมูลรูปภาพของสี่เหลี่ยม โดยทําการ
รับคา ตัวอักษรที่จะนํามาวาด พรอม ทั้งขนาดของสี่เหลี่ยมผืนผา
กําหนดให prototype ของ method คือ void showRect(char c , int w , int h )
ผลลัพธที่ไดจากการเรียกใช คือ
showRect( ‘X’ , 4 , 10);
X X X X X X X X X X
X X
X X
X X X X X X X X X X
showRect(‘#’, 3,7);
# # # # # # #
# #
# # # # # # #
ตัวอยางการเรียกใชงาน
ตัวอยางการสราง method
ตัวอยางการสราง method
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 116
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
• รูปแบบที่ 3 method ที่ไมรับพารามิเตอร ทําการคืนคากลับ
การสราง method
รูปแบบ : Return _datatype method_name( )
ตัวอยาง :
int setData(){
return 20;
}
ตัวอยาง :
String setName(){
return "Arare";
}
การเรียกใชงาน method
รูปแบบ : identifier = method_name();
ตัวอยาง :
int myInt ;
myInt = setData() + 20 ;
ตัวอยางการเขียนโปรแกรม :
class setData{
static int setData(){
return 20;
}
static String setName(){
return "Arare";
}
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 117
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
public static void main(String args[]){
int myInt ;
myInt = setData() + 20;
System.out.println(myInt);
System.out.println(setName());
}
}
•รูปแบบที่ 4 ที่รับพารามิเตอร และทําการคืนคากลับ
การสราง method
รูปแบบ : Return_datatype method_name(parameter_list){
Method_body;
}
ตัวอยาง : int sum(int a , int b){
int ans;
ans = a + b;
return ans;
}
การเรียกใชงาน method
รูปแบบ : identifier = method_name(argument_list);
ตัวอยาง :
int ans ;
ans = sum(int a, int b);
ตัวอยางการเขียนโปรแกรม :
class test{
static int sum(int a , int b){
int ans;
ans = a + b;
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 118
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
return ans;
}
public static void main(String args[]){
int x = 9,y = 10;
int result = 0;
result = sum(x,y);
System.out.println(result);
}
}
แบบฝกหัด
1. สราง method nameที่หนึ่ง ชื่อ areaRect ทําหนาที่คํานวณพื้นที่ของสี่เหลี่ยมและทําการสงคาของพื้นที่
ที่คํานวณไดกลับไปยังสวนที่เรียกใช method นี้
กําหนดให prototype ของ method คือ double areaRect(double w , double h)
2. สราง method ชื่อ printChrEnd ทําการ return คา String ตัวอักษรสุดทายของขอความที่รับเขามาใน
แตละคํา เชน เมื่อเรียกใชดวย
printChrEnd(“ MERRY CHRISMAS AND HAPPY NEW YEAR”)
String ที่ได คือ “YSDYWR”
Prototype คือ String printChrEnd(String teststr)
Method ของ String : charAt ( ) , length( ) , toUpperCase( ) , toLowerCase( ) , subString( ) etc.
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 119
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
สรุป รูปแบบในการสราง method
return_data_type identifier([parameter_list]){
[method body;]
[return data;]
}
return_data_type : ชนิดของขอมูลในการคืนคากลับ เปนไดทั้ง primitive data type หรือ object หาก
method นั้นไมมีการคืนคา ในสวนนี้จะใชคําวา void
identifier : ชื่อ method โดยมีหลักการตั้งชื่อเหมือนตัวแปร สวนใหญนิยมกําหนดชื่อ method
ขึ้นตนดวยตัวอักษรตัวเล็ก และมีการเขียนตัวใหญในคําถัดไป เชน withdraw( ) ,
addInterest( ) , getBalance( ) เปนตน
parameter_list : พารามิเตอรที่รับจากการเรียกใชงาน method นี้ โดยมีรูปแบบในการรับคาคือ
data_type identifier1 , data_type identifier2 , …..
data_type คือ ชนิดของขอมูล
identifier คือ ชื่อของพารามิเตอรที่ใชใน method นี้
หากตองรับมาหลาย parameter ใหใชเครื่องหมาย , เพื่อกําหนด parameter หลายคา
method_body : ประกอบดวยการประกาศตัวแปร การสราง instance การเรียกใชงาน method อื่น
return_data : ประกอบดวยขอมูลที่คืนคาใหกับ method ที่เรียกใชงาน หาก return_data_type
เปน void return_data type จะไมกําหนด
บทที่ 4 แอทริบิวตและเมธอด หนาที่ 120
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
สัญลักษณในการสรางคลาสไดอะแกรม
คลาสไดอะแกรม(Class Diagram)แสดงถึงเอนทิตี้ตางๆ ในระบบ หรือภายในโดเมนหนึ่งๆ โดย
อธิบายวาเอนทิตี้เหลานั้นมีความสัมพันธกันอยางไร หรืออธิบายถึง class, interface , collaborations
รวมถึงความสัมพันธระหวาง class , interface และ collaboration องคประกอบของ class มี 3 สวน คือ
1. ชื่อของคลาส(Name)
2. คุณสมบัติของคลาส(Attribute)
3. พฤติกรรมของคลาส(Operation)
ซึ่งทั้งสามสวนจะประกอบดวย ชนิดของการเขาถึง operation ไดแก
public แสดงดวยเครื่องหมายบวก (+)
private แสดงดวยเครื่องหมายลบ (-)
protect แสดงดวยเครื่องหมายบวกชารป (#)
default ไมแสดงเครื่องหมายใดๆ
สัญลักษณที่ใชแทน class ในแผนภาพคือรูปสี่เหลี่ยมผืนผาตัวอยางดังนี้
รูปแสดงตัวอยางสัญลักษณของ Class Diagram
Student
-id : integer
+name : String
#gpa : float
+setId(integer)
+getId() : integer
+setName(String)
+getName() : String
Student
+setId(integer)
+getId() : integer
+setName(String)
+getName() : String
ชื่อคลาส
สวนแอทริบิวตหรือ
(data member)
ชนิดของแอทริบิวตชื่อแอทริบิวต
ชนิดการเขาถึง
แอทริบิวต
สวนเมธอด
Return data type
ชื่อเมธอด
ชนิดการเขาถึง
เมธอด
Parameter

More Related Content

What's hot

Problem Based Learning In Medical Education
Problem Based Learning In Medical EducationProblem Based Learning In Medical Education
Problem Based Learning In Medical Education
Soha Rashed
 
Extra Levator Abdomino Perineal Resection
Extra Levator Abdomino Perineal Resection Extra Levator Abdomino Perineal Resection
Extra Levator Abdomino Perineal Resection
Dr Harsh Shah
 

What's hot (20)

Surgical site infection
Surgical site infectionSurgical site infection
Surgical site infection
 
Problem Based Learning In Medical Education
Problem Based Learning In Medical EducationProblem Based Learning In Medical Education
Problem Based Learning In Medical Education
 
Antimicrobial Prophylaxis in Surgery
Antimicrobial Prophylaxis in Surgery Antimicrobial Prophylaxis in Surgery
Antimicrobial Prophylaxis in Surgery
 
Peritonitis
PeritonitisPeritonitis
Peritonitis
 
1 pleurx jclub3.16.11
1 pleurx jclub3.16.111 pleurx jclub3.16.11
1 pleurx jclub3.16.11
 
Peritonitis Rochi sfuchas
Peritonitis Rochi sfuchasPeritonitis Rochi sfuchas
Peritonitis Rochi sfuchas
 
Revised Atlanta classification of Acute Pancreatitis
Revised Atlanta classification of Acute PancreatitisRevised Atlanta classification of Acute Pancreatitis
Revised Atlanta classification of Acute Pancreatitis
 
ACUTE APPENDICITIS
ACUTE APPENDICITIS ACUTE APPENDICITIS
ACUTE APPENDICITIS
 
Wound healing
Wound healingWound healing
Wound healing
 
constipation ppt (1) .pptx
constipation ppt (1) .pptxconstipation ppt (1) .pptx
constipation ppt (1) .pptx
 
Evolution of surgery in colorectal cancer
Evolution of surgery in colorectal cancerEvolution of surgery in colorectal cancer
Evolution of surgery in colorectal cancer
 
Management of inguinal hernia
Management of inguinal herniaManagement of inguinal hernia
Management of inguinal hernia
 
Integrated teaching and inter professional education for effective learning
Integrated teaching and inter professional education for effective learning Integrated teaching and inter professional education for effective learning
Integrated teaching and inter professional education for effective learning
 
Surgical needles basics
Surgical needles basicsSurgical needles basics
Surgical needles basics
 
12.Peritonitis.pdf
12.Peritonitis.pdf12.Peritonitis.pdf
12.Peritonitis.pdf
 
Umbilical & Other Abdominal Hernia
Umbilical & Other Abdominal HerniaUmbilical & Other Abdominal Hernia
Umbilical & Other Abdominal Hernia
 
LESSON PLAN
LESSON PLANLESSON PLAN
LESSON PLAN
 
Intestinal ( Bowel) strangulation
Intestinal ( Bowel) strangulationIntestinal ( Bowel) strangulation
Intestinal ( Bowel) strangulation
 
Peritonitis
PeritonitisPeritonitis
Peritonitis
 
Extra Levator Abdomino Perineal Resection
Extra Levator Abdomino Perineal Resection Extra Levator Abdomino Perineal Resection
Extra Levator Abdomino Perineal Resection
 

Similar to บทที่ 4 แอทริบิวท์

บทที่ 8 คุณสมบัติก
บทที่ 8 คุณสมบัติกบทที่ 8 คุณสมบัติก
บทที่ 8 คุณสมบัติก
Theeravaj Tum
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรม
Nookky Anapat
 
บทที่ 7 แพ็คเกจ
บทที่ 7 แพ็คเกจบทที่ 7 แพ็คเกจ
บทที่ 7 แพ็คเกจ
Theeravaj Tum
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Pp'dan Phuengkun
 
บทที่ 10 ตัวแปรสตริ
บทที่ 10 ตัวแปรสตริบทที่ 10 ตัวแปรสตริ
บทที่ 10 ตัวแปรสตริ
Theeravaj Tum
 
โครงงานคอม 3
โครงงานคอม 3โครงงานคอม 3
โครงงานคอม 3
wipawanmmiiww
 

Similar to บทที่ 4 แอทริบิวท์ (17)

บทที่ 8 คุณสมบัติก
บทที่ 8 คุณสมบัติกบทที่ 8 คุณสมบัติก
บทที่ 8 คุณสมบัติก
 
Class1
Class1Class1
Class1
 
บทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรมบทที่ 6 คลาสและการเขียนโปรแกรม
บทที่ 6 คลาสและการเขียนโปรแกรม
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
Infor
InforInfor
Infor
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented ConceptJava Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented Concept
 
วิธีการเชิงวัตถุและการออกแคลาส
วิธีการเชิงวัตถุและการออกแคลาสวิธีการเชิงวัตถุและการออกแคลาส
วิธีการเชิงวัตถุและการออกแคลาส
 
บทที่ 7 แพ็คเกจ
บทที่ 7 แพ็คเกจบทที่ 7 แพ็คเกจ
บทที่ 7 แพ็คเกจ
 
ขอบข่ายและประเภทของโครงงาน
ขอบข่ายและประเภทของโครงงานขอบข่ายและประเภทของโครงงาน
ขอบข่ายและประเภทของโครงงาน
 
4
44
4
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
แผนการจัดการเรียนรู้ที่ 12
แผนการจัดการเรียนรู้ที่ 12แผนการจัดการเรียนรู้ที่ 12
แผนการจัดการเรียนรู้ที่ 12
 
Java intro
Java introJava intro
Java intro
 
4
44
4
 
บทที่ 10 ตัวแปรสตริ
บทที่ 10 ตัวแปรสตริบทที่ 10 ตัวแปรสตริ
บทที่ 10 ตัวแปรสตริ
 
โครงงานคอม 3
โครงงานคอม 3โครงงานคอม 3
โครงงานคอม 3
 

More from Theeravaj Tum

Javacentrix com chap11-2
Javacentrix com chap11-2Javacentrix com chap11-2
Javacentrix com chap11-2
Theeravaj Tum
 
Javacentrix com chap11-1
Javacentrix com chap11-1Javacentrix com chap11-1
Javacentrix com chap11-1
Theeravaj Tum
 
Javacentrix com chap10-0
Javacentrix com chap10-0Javacentrix com chap10-0
Javacentrix com chap10-0
Theeravaj Tum
 
Javacentrix com chap09-0
Javacentrix com chap09-0Javacentrix com chap09-0
Javacentrix com chap09-0
Theeravaj Tum
 
Javacentrix com chap08-0
Javacentrix com chap08-0Javacentrix com chap08-0
Javacentrix com chap08-0
Theeravaj Tum
 
Javacentrix com chap07-0
Javacentrix com chap07-0Javacentrix com chap07-0
Javacentrix com chap07-0
Theeravaj Tum
 
Javacentrix com chap06-0
Javacentrix com chap06-0Javacentrix com chap06-0
Javacentrix com chap06-0
Theeravaj Tum
 
Javacentrix com chap04-0
Javacentrix com chap04-0Javacentrix com chap04-0
Javacentrix com chap04-0
Theeravaj Tum
 
Javacentrix com chap03-0
Javacentrix com chap03-0Javacentrix com chap03-0
Javacentrix com chap03-0
Theeravaj Tum
 
Javacentrix com chap02-0
Javacentrix com chap02-0Javacentrix com chap02-0
Javacentrix com chap02-0
Theeravaj Tum
 
Javacentrix com chap01-0
Javacentrix com chap01-0Javacentrix com chap01-0
Javacentrix com chap01-0
Theeravaj Tum
 
Javacentrix com chap05-0
Javacentrix com chap05-0Javacentrix com chap05-0
Javacentrix com chap05-0
Theeravaj Tum
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเบทที่ 13 การดักจับเ
บทที่ 13 การดักจับเ
Theeravaj Tum
 
บทที่ 12 กราฟฟิก
บทที่ 12 กราฟฟิกบทที่ 12 กราฟฟิก
บทที่ 12 กราฟฟิก
Theeravaj Tum
 
บทที่ 11 การดักจับข
บทที่ 11 การดักจับขบทที่ 11 การดักจับข
บทที่ 11 การดักจับข
Theeravaj Tum
 
บทที่ 9 การพ้องรูป
บทที่ 9 การพ้องรูปบทที่ 9 การพ้องรูป
บทที่ 9 การพ้องรูป
Theeravaj Tum
 
บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์
Theeravaj Tum
 
บทที่ 5 คลาส
บทที่ 5 คลาสบทที่ 5 คลาส
บทที่ 5 คลาส
Theeravaj Tum
 
บทที่ 3 คำสั่งควบค
บทที่ 3 คำสั่งควบคบทที่ 3 คำสั่งควบค
บทที่ 3 คำสั่งควบค
Theeravaj Tum
 
บทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัวบทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัว
Theeravaj Tum
 

More from Theeravaj Tum (20)

Javacentrix com chap11-2
Javacentrix com chap11-2Javacentrix com chap11-2
Javacentrix com chap11-2
 
Javacentrix com chap11-1
Javacentrix com chap11-1Javacentrix com chap11-1
Javacentrix com chap11-1
 
Javacentrix com chap10-0
Javacentrix com chap10-0Javacentrix com chap10-0
Javacentrix com chap10-0
 
Javacentrix com chap09-0
Javacentrix com chap09-0Javacentrix com chap09-0
Javacentrix com chap09-0
 
Javacentrix com chap08-0
Javacentrix com chap08-0Javacentrix com chap08-0
Javacentrix com chap08-0
 
Javacentrix com chap07-0
Javacentrix com chap07-0Javacentrix com chap07-0
Javacentrix com chap07-0
 
Javacentrix com chap06-0
Javacentrix com chap06-0Javacentrix com chap06-0
Javacentrix com chap06-0
 
Javacentrix com chap04-0
Javacentrix com chap04-0Javacentrix com chap04-0
Javacentrix com chap04-0
 
Javacentrix com chap03-0
Javacentrix com chap03-0Javacentrix com chap03-0
Javacentrix com chap03-0
 
Javacentrix com chap02-0
Javacentrix com chap02-0Javacentrix com chap02-0
Javacentrix com chap02-0
 
Javacentrix com chap01-0
Javacentrix com chap01-0Javacentrix com chap01-0
Javacentrix com chap01-0
 
Javacentrix com chap05-0
Javacentrix com chap05-0Javacentrix com chap05-0
Javacentrix com chap05-0
 
บทที่ 13 การดักจับเ
บทที่ 13 การดักจับเบทที่ 13 การดักจับเ
บทที่ 13 การดักจับเ
 
บทที่ 12 กราฟฟิก
บทที่ 12 กราฟฟิกบทที่ 12 กราฟฟิก
บทที่ 12 กราฟฟิก
 
บทที่ 11 การดักจับข
บทที่ 11 การดักจับขบทที่ 11 การดักจับข
บทที่ 11 การดักจับข
 
บทที่ 9 การพ้องรูป
บทที่ 9 การพ้องรูปบทที่ 9 การพ้องรูป
บทที่ 9 การพ้องรูป
 
บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์บทที่ 6 อาร์เรย์
บทที่ 6 อาร์เรย์
 
บทที่ 5 คลาส
บทที่ 5 คลาสบทที่ 5 คลาส
บทที่ 5 คลาส
 
บทที่ 3 คำสั่งควบค
บทที่ 3 คำสั่งควบคบทที่ 3 คำสั่งควบค
บทที่ 3 คำสั่งควบค
 
บทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัวบทที่ 2 ชนิดของตัว
บทที่ 2 ชนิดของตัว
 

บทที่ 4 แอทริบิวท์

  • 1. แอทริบิวตและเมธอด Attribute and Method วัตถุประสงค ♦ เพื่อใหมีความรูความเขาใจหลักการเขียนโปรแกรมเชิงวัตถุ ♦ เพื่อใหมีความรูความเขาใจหลักการทํางานภายในคลาส ♦ เพื่อเรียนรูถึงโครงสรางแอทริบิวตที่อยูภายในคลาส ♦ เพื่อเรียนรูถึงโครงสรางเมธอดที่อยูภายในคลาส ♦ เพื่อสามารถสรางวัตถุจากคลาสได ♦ เพื่อเรียนรูถึงสัญลักษณที่ใชในการออกแบบคลาส บทที่ 4
  • 2. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 103 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ เนื้อหาบทเรียน ♦ หลักการเขียนโปรแกรมเชิงวัตถุ - ความหมายของการเขียนโปรแกรมเชิงวัตถุ - นิยามคลาส - Encapsulation - Inheritance - Polymorphisms ♦ องคประกอบคลาส(Class) - สมาชิกขอมูล(Data member) - สมาชิกพฤติกรรม(Method member) ♦ การประกาศคลาส ♦ การประกาศแอทตทริบิวต ♦ การประกาศเมธอด ♦ สัญลักษณในการสรางคลาสไดอะแกรม
  • 3. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 104 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ การเขียนโปรแกรมเชิงวัตถุ(Object-oriented programming) เปนเทคนิคการโปรแกรมโดยใชแนวคิดของวัตถุ( Object) แลวนําไปการพัฒนาระบบ โดยการ เขียนโปรแกรมเชิงวัตถุเปนการรวมการทํางานและขอมูลที่เกี่ยวของกันไวดวยกัน ซึ่งแตละวัตถุมีความ เปนอิสระตอกันอยางชัดเจน ดังนั้นการเปลี่ยนแปลง ใดๆ ภายใน วัตถุหนึ่งจะไมสงผลกระทบไปยัง วัตถุ อื่นๆ และมีในการติดตอกันระหวางวัตถุสามารถทําไดโดยการสง Message จาก วัตถุหนึ่งไปยัง วัตถุ อื่นๆ ซึ่งโดยทั่วไปแลว วัตถุหมายถึง สิ่งที่จับตองใด สัมผัสได การเขียนโปรแกรมเชิงวัตถุโดยทั่วไปเริ่มจากการออกแบบวัตถุโดยจําลองจากสิ่งที่เราเห็น ซึ่ง สวนใหญแลวเรามักสรางจากวัตถุที่มีอยูจริงๆ ในโลก ความยากอยูที่วาทําอยางไรวัตถุที่เราออกแบบนั้น จะกลายเปนโปรแกรมที่สามารถทํางานไดอยางที่เราตองการ แตถาสังเกตการใชงานโปรแกรม คอมพิวเตอรทั่วไปจะเห็นวา โปรแกรมที่สรางคลายกับวัตถุที่มีอยูจริงในโลกทั้งสิ้น เชน หากเราเรียกใช งานซอฟทแวร Edit plus ซึ่งเราสามารถสั่งงานไดโดยคลิกไปที่เมนูบาร หรือใชคีบอรดในการสั่งงาน ซึ่ง วิธีการเหลานี้เสมือนวา หนาจอของโปรแกรม Edit plus เปนวัตถุชิ้นหนึ่ง และมีพฤติกรรรม คือ สามารถตอบสนองคําสั่งตางๆ ที่มีในตัวเมนูบารของโปรแกรมเองได ซึ่งความสามารถในการใชงาน โปรแกรม Edit plus นี้คือ พฤติกรรมหรือเมธอดของวัตถุนั่นเอง ในการ Programming การเขียนโปรแกรมเชิงวัตถุ หมายถึง แปลงความตองการของระบบใหเปน รายการของวัตถุเพื่อตอบสนองความตองการ โดยแตละวัตถุจะตองประกอบไปดวย ● รูปพรรณ (identity) สําหรับจําแนกความแตกตางระหวาง Object ● สถานะ (State) เปนสวนที่ใชจัดเก็บขอมูลภายใน Objectโดยจะมีทั้ง คุณสมบัติ (Properties) และ คา (Values) ● การกระทํา (Behavior) สามารถตอบสนองตอ Object อื่นๆ และในการเขียนโปรแกรมดวยภาษาจาวา นั้น Object จะถูกสรางขึ้นมาจาก Class เสมอ
  • 4. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 105 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ คลาส (Class) เปนที่รวบรวมคุณสมบัติ พฤติกรรม ของวัตถุ เปนเสมือนตนแบบใหแกวัตถุ โดยนําหลักการ encapsulation กําหนดระดับในการเขาถึงขอมูลภายในคลาส การสรางวัตถุที่ประกอบไปดวยคุณสมบัติ หรือพฤติกรรมที่เหมือนกับคลาส เรียกวัตถุที่สรางขึ้นมาใหมวา instance คลาสประกอบไปดวย • คุณลักษณะ( Data member หรือ Attribute) คือ สิ่งที่บอกลักษณะทั่วไปของวัตถุ หรือ เรียกไดวา เปนสวนขอมูลของ Class ซึ่งขอมูลของคลาสอาจเปน Primitive Type Value Object References Type Value หรือ Instance ของวัตถุ • พฤติกรรม (Method member หรือ Behavior) คือ สิ่งที่วัตถุสามารถกระทําออกมาได หรือเปนสวนกระบวนการทํางานของ Class ซึ่งพฤติกรรมของคลาสอาจอยูในรูป Static Method Non-Static Method •Member Classes เปน Class ที่อยูภายใน Class หรือเรียกวา Inner Class (กลาวถึงตอไป) Object นั้นจะถูกสรางขึ้นตามกระบวนการทํางานของ JVM โดยที่นักพัฒนาจะตองนิยาม Class ที่ตองการใหกับ JVM ซึ่ง Object ที่สรางจากคลาสนั้นเรียกวา Instance ในหนึ่งคลาสสามารถมีนําไป สราง instance ไดหลาย instance Encapsulation การหอหุม(Encapsulation) หมายถึงความสามารถในการปกปองขอมูลที่อยูภายใน Object (ขอมูลในที่นี่คือดาตาหรือเมธอด) เปนการปดบังขอมูลจากผูใชเพื่อไมใหเขาถึงขอมูล โดยตรง โดยใช access modifier เพื่อกําหนดการเขาถึง ขอมูล หรือบางครั้งก็ถูกเรียกวา Data Hiding โดยปรกติแลว จะถือ วา class ใดๆที่จําแนก Data fields ทุกตัวเปน private และมี public method คู get/set ไวเพื่อเขาถึง data นั้นๆ จะเรียกวา class นั้นๆเปน Full Encapsulation class การเอนแคปซูเลชั่นนี้เปนคุณสมบัติอยางหนึ่ง ของการเขียนโปรแกรมเชิงวัตถุ ซึ่งจะไดศึกษาอยางละเอียดในหัวขอโครงสรางคลาส ประโยชนของการเอนแคปซูเลชั่น - มีความยืดหยุนสูง(Flexibility ) การใชงานเมธอดใน OOP นั้นมีความยืดหยุนสูงกวาการใชงาน Data Fields ใน Object โดยตรงๆ
  • 5. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 106 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ - ดูแลรักษางาย(Maintainability) เพราะหากมีการเปลี่ยนแปลงภายใน Object ใดๆ หากวาสวน ติดตอกับ Object อื่นยังคงเดิมแลว ก็ยอมไมสงผลกระทบตองานทั้งระบบ - มีความปลอดภัยของขอมูล(Security) คือสามาถสรางความปลอดภัยใหกับขอมูลได เพราะ ขอมูลที่อยูในวัตถุจะเขาถึงไดเฉพาะผูที่มีสิทธิ์เทานั้น Inheritance การสืบทอด(Inheritance) หมายถึงความสามารถในการสืบทอดคุณสมบัติ ของ Object ใน Object ใหมที่ถูกสรางขึ้น หรืออาจจะเรียกไดวาเปนการ Reusable Code การสืบทอดเปนคุณสมบัติอยางหนึ่ง ของการเขียนโปรแกรมเชิงวัตถุ การสืบทอดคลาส(Class Inheritance) คือการที่คลาสหนึ่งๆสามารถสืบทอดคุณสมบัติบาง ประการจากคลาสอื่น แลวเพิ่มคุณสมบัติเฉพาะของคลาสนั้นเขาไป คลาสที่ไดรับการสืบทอดคุณสมบัติ เรียกวา ซับคลาส(Subclasses หรือ Child Class) สวนคลาสที่เปนตนแบบเรียกวา ซุปเปอรคลาส (Superclass หรือ Parent Class) เปนการชวยใหไมตองพัฒนา ซอฟทแวรสวนที่ซ้ําหลายๆรอบ (Reusable) ในภาษาจาวาคลาสหนึ่งๆจะมี Superclass ไดเพียง Class เดียวเทานั้น (Single Inheritance) แตในภาษา C++ สามารถสืบทอดไดจากหลายซุปเปอรคลาส ตามนิยามของ Sun แบง ความสัมพันธระหวาง Classes เปนสองลักษณะคือ - IS-A เปนความสัมพันธที่คลาสหนึ่งเปน Subclass ของอีก Class หนึ่ง - HAS-A เปนความสัมพันธที่คลาสหนึ่งเปนสวนประกอบ ของอีก Class หนึ่ง สามารถศึกษาเพิ่มเติมไดในบทที่ 8 คุณสมบัติการสืบทอด Polymorphisms โพลิมอฟซึม(Polymorphisms)หมายถึงการที่ วัตถุหนึ่งๆสามารถ ตอบสนองขอความ( message) รูปแบบเดียวกัน ไดอยางหลากหลาย ในแนวคิดของโพลิมอฟซึมเกิดขึ้นได 2 กรณีคือ ● เกิดขึ้น ณ Compile Time Polymorphisms เรียกวาการโอเวอรโหลด(Overloaded) คือการที่เมธ อดสามารถมีชื่อเมธอดซ้ํากันได แตตองมี argument แตกตางกัน ● เกิดขึ้น ณ Runtime Polymorphisms เรียกวาการโอเวอรไรด(Overridden) คือการที่Subclasses สามารถนํา Method ของ Superclass มาจัดการไดเอง โดยที่ยังคงความสามารถอื่นๆของ Superclass ได ซึ่งศึกษาเพิ่มเติมไดในบทที่ 8 คุณสมบัติการสืบทอด
  • 6. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 107 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ Class AAttttrriibbuuttee ((DDaattaa mmeemmbbeerr)) Instance Encapsulation MMeetthhoodd ((ffuunnccttiioonn mmeemmbbeerr)) MMeessssaaggee MMeessssaaggee องคประกอบคลาส(Class) รูปแสดง แบบจําลองความสัมพันธระหวางแอทริบิวท เมธอด คลาส อินสแตนท และเมจเสจ •Class กอนที่จะมีการสรางวัตถุนั้นจําเปนตองทําความเขาใจกับการสรางตนแบบของวัตถุ หรือที่เรียกวาคลาสกันกอน รูปแบบในการประกาศ class [Modifier] class Class_name{ [Data member;] [Method member;] } Modifier ของคลาสแบงเปน 2 กลุมคือ - Class Access Modifier o Default Access หากไมกําหนด modifier หนาคียเวิรด class แสดงวาคลาสนี้มี modifier เปน default นั่นหมายความวาคลาสใดก็ตามที่อยูใน package เดียวกันเทานั้นที่ สามารถเรียกใชงานคลาสนี้ได o Public Access หากกําหนดคียเวิรด public ไวหนาคียเวิรด class แสดงวาคลาส นี้สามารถนําไปสรางอินสแตนท ณ แพ็คเก็ตใดก็ไดเขาถึงไดทุกแพ็คเกจและไฟล นามสกุล .java ตองมีชื่อเดียวกันกับชื่อคลาส o Private Access , protected access จะใชไดกับ inner class และ nested class - Class Non Access Modifier o Final Class กําหนดใหคลาสนั้นไมสามารถสืบทอดได เชน String class o Abstract class หมายถึง คลาสที่ไมสามารถถูกสรางเปนออบเจ็คได o Strictfp class คือ คลาสที่มีใชงาน floating point แบบ IEEE754
  • 7. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 108 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ Class_name ชื่อของคลาสเปนไปตามกฎการตั้งชื่อ identifier ในภาษาจาวา แตนิยมขึ้นตนดวย ตัวอักษรตัวใหญ และหากชื่อคลาสประกอบดวยคํามากกวาหนึ่งคํา โดยทั่วไปนิยมกําหนดให ตัวอักษรตัวแรกของแตละคําเปนตัวอักษรตัวใหญ และควรใชคํานาม ในหนึ่งไฟลอาจมีการกําหนดคลาสไดมากกวาหนึ่งคลาส เมื่อถูกคอมไพลแลวจะได ไฟล .class สําหรับแตละคลาส โดยมีชื่อไฟลเหมือนกับคลาสนั้น แตในที่นี้แนะนําใหสราง 1 class ตอ 1 ไฟล ถาไฟลนั้นมีหลายคลาสเปน default ทั้งหมด จะตั้งชื่อไฟลเปนอะไรก็ได ถาไฟลนั้นมีหลายคลาสแตมีอยูคลาสหนึ่งเปน public จะตั้งชื่อไฟลใหเหมือนกับคลาสที่ เปน public นั้น ถาหากจําเปนตองสรางไฟลของโปรแกรมที่มีหลายคลาส แลวมีคลาสหนึ่งที่มีเมธอด main() ใหตั้งชื่อไฟลนั้นเหมือนกับชื่อคลาสที่มีเมธอด main() อยู ถาไฟลนั้นมีเพียงคลาสเดียวควรตั้งชื่อไฟลใหเหมือนกับชื่อคลาสเพื่อใหสามารถ ดูชื่อ ไฟลแลวทราบวาเปนไฟลของคลาสไหน ตัวอยาง สรางคลาสขึ้นมา 3 คลาสในไฟลที่ชื่อวา Hello.java ดังนี้ //Hello.java class AA{ } class BB{ } class CC{ } จากตัวอยางนี้แสดงใหเห็นอีกอยางหนึ่งวาในหนึ่งคลาสอาจจะถูกกําหนดใหวางเปลาคือไมมี สมาชิกเลยก็ได หากทําการคอมไพลแลวจะได ไฟล AA.class, BB.class และ CC.class ตัวอยาง ทําการบันทึกคลาสเหลานี้ในไฟลชื่อ Hello1.java public class Hello1 { } public class Hello2{ } ผลลัพธที่ไดจากการคอมไพล เกิด error เนื่องจาก ในไฟลนี้มี public เกินกวา 1 class ตัวอยาง ทําการบันทึกคลาสเหลานี้ในไฟลชื่อ Hello3.java public class Test1{ } ผลลัพธที่ไดจากการคอมไพล เกิด error เนื่องจาก ชื่อไฟลไมตรงกับชื่อ class ที่มี modifier เปน public
  • 8. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 109 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ • Data member ไดแก คุณสมบัติ(attribute)ของ class หรือ object นั้นๆ การประกาศ data member สามารถประกาศไดทั้งใน class และใน method เปนไดทั้ง primitive data type หรือ เปน instance ของ object หรือเรียกไดวาเปนตัวแปรคลาส มี 2 ประเภท คือ a. instance variable หมายถึง เปนตัวแปรที่ประกาศไวเปน attribute ของ classes และ อยูนอก methods และ constructors b. local variable หมายถึง ตัวแปรที่ประกาศไวเปน method หรือ constructors รูปแบบในการประกาศ data member [Modifier] data_type attribute_identifier ; Modifier : กําหนดถึงระดับในการซอนขอมูลประกอบดวย keywords ดังตอไปนี้ o private จะทําใหแอทริบิวตนั้นไมสามารถถูกอางถึงไดจากนอกคลาส o protected จะทําใหแอทริบิวตนั้นสามารถถูกอางถึงไดจากคลาสที่อยูในแพ็คเก็จเดียวกัน หรือคลาสที่ขยายออกมาจากคลาสนั้นที่อยูในแพ็คเก็จอื่น ซึ่งจะกลาวถึงในบทที่ 8 การ สืบทอดคลาส o public จะทําใหแอทริบิวตนั้นสามารถถูกอางอิงไดจากนอกคลาส o หากไมระบุ modifier ไวจะถือวาเปน default ซึ่งจะถูกอางถึงไดจากคลาสที่อยูในแพ็ค เก็จเดียวกัน หมายเหตุ : สําหรับ local variable (ตัวแปรที่อยูภายใน method) ใชไดเฉพาะ default เทานั้น ตัวอยาง class Student{ int id , age; String name; Address add; public static void main(String args[]){ boolean chkStatus; ……….. } } Data members (Instance variable) Data members (local variable) Primitive data type Instance of object
  • 9. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 110 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ • Method member ไดแก พฤติกรรม(behavior) การกระทํา กระบวนการในการ ดําเนินงาน การกําหนดคาใหกับ data member หรือกําหนดความสามารถของ class ในการเขียนโปรแกรมเชิงวัตถุจะทําการเรียกโมดูลยอย(sub module) วา เมธอด (method) เปน เสมือนฟงกชันหรือโพรซิเดอรในภาษาเชิงโครงสราง (Structure Language) เปนการแบงการทํางานเปน งานยอยคลายกับฟงกชั่น ชวยใหงายตอการสรางโปรแกรมขนาดใหญ นอกเหนือไปจากนั้นผูใชไม จําเปนตองทราบรายละเอียดการทํางานของ method เพียงแคทราบเงื่อนไขการเรียกใชและการสงคา กลับมาของ method ก็สามารถเรียกใชงานเมธอดได ในภาษาจาวา method ไมสามารถที่จะประกาศ นอกคลาสได แนวคิดในการสรางเมธอดในภาษาเชิงวัตถุเพื่อแสดงใหเห็นถึงพฤติกรรมของวัตถุนั้นๆ มี ความสามารถทําอะไรไดบาง วัตถุอื่นๆ สามารถเขาไปใชงานสมาชิกของขอมูล(data member)ในวัตถุ นั้นไดอยางไร โดยมีการกําหนดสิทธิในการเขาถึงขอมูล(data binding) อนุญาตใหใครเขาถึงขอมูล(data member) หรือเมธอด(method member)เอง โครงสรางของการประกาศ method ประกอบไปดวย(Method declaration) [Modifier] Data_Type Method_Identifier(Parameters) [Throws clause] { Method bodys; } Modifier : ประกอบไปดวย keyword 2 กลุม ไดแก - Member Access Modifier o private จะทําใหเมธอดนั้นไมสามารถถูกอางถึงไดจากนอกคลาส o protected จะทําใหเมธอดนั้นสามารถถูกอางถึงไดจากคลาสที่อยูในแพ็คเก็จเดียวกัน หรือคลาสที่ขยายออกมาจากคลาสนั้นที่อยูในแพ็คเก็จอื่น ซึ่งจะกลาวถึงในบทที่ 8 คุณสมบัติการสืบทอดคลาส o public จะทําใหเมธอดนั้นสามารถถูกอางอิงไดจากนอกคลาส หากไมระบุ modifier ไวจะถือวาเปน default ซึ่งจะถูกอางถึงไดจากคลาสที่อยูใน แพ็คเก็จเดียวกัน
  • 10. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 111 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ ตารางแสดงความสามารถในการเขาถึงขอมูลภายในคลาส Public Protected Default private ภายในคลาสเดียวกัน คลาสในแพ็คเกจเดียวกัน คลาสไมไดสืบทอดและอยูตางแพ็คเกจกัน คลาสที่สืบทอดและอยูในแพ็คเกจเดียวกัน คลาสที่สืบทอดแตอยูตางแพ็คเกจกัน - Member non-access modifier o Static หมายถึงสมาชิกที่สามารถใชงานใด แมวา Class นั้นๆจะยังไมถูกนําไปสรางเปน Object และหาก class นั้นถูกนําไปสรางเปน Object ไมวาจะกี่ instance เมื่ออางอิงถึง Static Member ก็จะเปนการอางอิงที่ตัวเดียวกัน Code ภานใน Static Method นั้นจะ อางอิงไดแต static members ดวยกันหรือ local variable เทานั้น o Final หมายถึง method ที่ไมสามารถทําการ overriding ได o Abstract หมายถึง method ที่ยังไมมีกระบวนการทํางานใดๆเลย ซึ่ง class ที่สืบทอดไป จะตองทําการ implement ใหมีกระบวนการทํางาน และAbstract method ตองเปน สมาชิกของ Abstract class เทานั้น แต Abstract class ไมจําเปนตองมีสมาชิกเปน Abstract Method o Transient ใน java นั้นมีกระบวนการที่เรียกวา serialize ซึ่งเปนความสามารถที่จะ เก็บ สถานะของ Variable ใน Object ไวใน IO Stream เพื่อบันทึกใน file หรือใน เครือขาย ได transient variable เปนการระบุให JVM รับรูวา ไมตองนํา Variable ตัวนี้เขาสู กระบวนการ serialize o Synchronized หมายถึง method ที่อนุญาติให มีแค หนึ่ง Thread ที่สามารถใชงานใดใน ขณะหนึ่งๆ o Native กําหนดให method มีการใชงานกับ native code o strictfp เปนการกําหนดให method นั้นๆใช floating point แบบพิเศษ o Volatile หมายถึงตัวแปรที่เมื่อ Thread แตละ Thread ตองการใชตัวแปรตัวนี้ ใหทําการ สรางใหมและ copy คาจากตัวแปรตัวนี้ไปใช
  • 11. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 112 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ Type : เปนสวนที่แสดงใหเห็นถึงการคืนคากลับมายัง method ที่เรียกใชงาน เพียงแคคาเดียวเทานั้น หากไมมีการคืนคากลับสวนนี้จะใช keyword ‘void’ แตถามีการ return คากลับมายัง method ที่ เรียกใชงาน type ประกอบไปดวย keyword ตอไปนี้ (อธิบายในบทที่ 2 เรื่องตัวแปรพื้นฐาน primitive data type) boolean , char , byte , short, int , long , float , double Method_Identifier : ชื่อของ method ที่สรางขึ้น ในภาษา java สามารถตั้งชื่อ method ไดยาวถึง 255 ตัวอักษร โดยชื่อนี้จะตองไมเปนคําสงวนในภาษาจาวา และใชกฎเดียวกันกับการตั้งชื่อใหกับ ตัวแปร(variable definition) Parameters : การประกาศการรับคาของ method หากมีการเรียกใชงาน method จําเปนตองสงคา พารามิเตอร ใหตรงกับที่ประกาศไว รูปแบบในการกําหนด parameters : ([Type identifier] ,[ Type identifier]) Throws clause : ประกาศการดักจับ error ของ ภาษาจาวาเพื่อไมใหโปรแกรมมีความสามารถในเรื่องของ ความคงทนในการใชงานของโปรแกรมภาษาจาวา( robust ) (ศึกษาเพิ่มเติมในเรื่อง Exceptions) ในสวนนี้เปนตัวเลือก(Optional)จะประกาศไวหรือไมก็ได Method body : ขั้นตอนในการทํางานของ method ประกอบไปดวย { [local variable;] [ statements;] [return data ;] } หากมีการประกาศ local variable แลวมีการเรียกใชงานตัวแปรดังกลาวภายในเมธอด จําเปนตอง มีการกําหนดคาเริ่มตนใหกับตัวแปรดังกลาว มิเชนนั้นจะเกิด compile error ขึ้น การประกาศ method สามารถจําแนกได 4 รูปแบบดังตอไปนี้ • รูปแบบที่ 1 method ไมมีการ คืนคากลับ และไมรับพารามิเตอร รูปแบบการสราง method : void method_name( ){ [method body;] }
  • 12. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 113 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ Method_name : ชื่อ ของ method Method body : ประกาศตัวแปรใชงานใน method , ขั้นตอนในการทํางาน , เรียกใชงาน method อื่นๆ ตัวอยาง void printA(){ System.out.print(“**********”); System.out.print(“Hello”); System.out.print(“**********”); System.out.println(); } ตัวอยาง void printStar(){ System.out.print(“**********”); } การเรียกใชงาน method รูปแบบการเรียกใช : method_name( ) ; ตัวอยาง : printA(); printStar(); ตัวอยางการเขียนโปรแกรม : class showData{ static void printA(){ System.out.print(“**********”); System.out.print(“Hello”); System.out.print(“**********”); System.out.println(); } ตัวอยางการประกาศ method ชื่อ printA
  • 13. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 114 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ static void printB(){ printStar(); System.out.print(“Hello”); printStar(); } static void printStar(){ System.out.print(“**********”); } public static void main(String args[]){ printA(); printStar(); printB(); } } • รูปแบบที่ 2 method ไมมีการคืนคากลับ รับพารามิเตอร การสราง method รูปแบบ : void method_name (parameter_list){ Method_body; } ตัวอยาง : void print(char mychr){ System.out.println(mychr); } void printSet(char mychr , int num){ for (int i = 0 ; I < num ; i++) System.out.print(mychr); System.out.println(); } ตัวอยางการเรียกใชงาน ตัวอยางการประกาศ method ชื่อ printB ตัวอยางการประกาศ method ชื่อ printStar
  • 14. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 115 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ การเรียกใชงาน method รูปแบบ : method_name(argument_list) ; ตัวอยาง : print(‘#’); printSet(‘$’ , 6); ตัวอยาง การเขียนโปรแกรม : class getData{ static void print(char mychr){ System.out.println(mychr); } static void printSet(char mychr , int num){ for (int i = 0 ; i < num ; i++) System.out.print(mychr); System.out.println(); } public static void main(String args[]){ char ch = '@'; print(ch); printSet(ch,15); } } แบบฝกหัด สราง method nameที่สอง ชื่อ showRect ทําหนาที่แสดงขอมูลรูปภาพของสี่เหลี่ยม โดยทําการ รับคา ตัวอักษรที่จะนํามาวาด พรอม ทั้งขนาดของสี่เหลี่ยมผืนผา กําหนดให prototype ของ method คือ void showRect(char c , int w , int h ) ผลลัพธที่ไดจากการเรียกใช คือ showRect( ‘X’ , 4 , 10); X X X X X X X X X X X X X X X X X X X X X X X X showRect(‘#’, 3,7); # # # # # # # # # # # # # # # # ตัวอยางการเรียกใชงาน ตัวอยางการสราง method ตัวอยางการสราง method
  • 15. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 116 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ • รูปแบบที่ 3 method ที่ไมรับพารามิเตอร ทําการคืนคากลับ การสราง method รูปแบบ : Return _datatype method_name( ) ตัวอยาง : int setData(){ return 20; } ตัวอยาง : String setName(){ return "Arare"; } การเรียกใชงาน method รูปแบบ : identifier = method_name(); ตัวอยาง : int myInt ; myInt = setData() + 20 ; ตัวอยางการเขียนโปรแกรม : class setData{ static int setData(){ return 20; } static String setName(){ return "Arare"; }
  • 16. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 117 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ public static void main(String args[]){ int myInt ; myInt = setData() + 20; System.out.println(myInt); System.out.println(setName()); } } •รูปแบบที่ 4 ที่รับพารามิเตอร และทําการคืนคากลับ การสราง method รูปแบบ : Return_datatype method_name(parameter_list){ Method_body; } ตัวอยาง : int sum(int a , int b){ int ans; ans = a + b; return ans; } การเรียกใชงาน method รูปแบบ : identifier = method_name(argument_list); ตัวอยาง : int ans ; ans = sum(int a, int b); ตัวอยางการเขียนโปรแกรม : class test{ static int sum(int a , int b){ int ans; ans = a + b;
  • 17. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 118 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ return ans; } public static void main(String args[]){ int x = 9,y = 10; int result = 0; result = sum(x,y); System.out.println(result); } } แบบฝกหัด 1. สราง method nameที่หนึ่ง ชื่อ areaRect ทําหนาที่คํานวณพื้นที่ของสี่เหลี่ยมและทําการสงคาของพื้นที่ ที่คํานวณไดกลับไปยังสวนที่เรียกใช method นี้ กําหนดให prototype ของ method คือ double areaRect(double w , double h) 2. สราง method ชื่อ printChrEnd ทําการ return คา String ตัวอักษรสุดทายของขอความที่รับเขามาใน แตละคํา เชน เมื่อเรียกใชดวย printChrEnd(“ MERRY CHRISMAS AND HAPPY NEW YEAR”) String ที่ได คือ “YSDYWR” Prototype คือ String printChrEnd(String teststr) Method ของ String : charAt ( ) , length( ) , toUpperCase( ) , toLowerCase( ) , subString( ) etc.
  • 18. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 119 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ สรุป รูปแบบในการสราง method return_data_type identifier([parameter_list]){ [method body;] [return data;] } return_data_type : ชนิดของขอมูลในการคืนคากลับ เปนไดทั้ง primitive data type หรือ object หาก method นั้นไมมีการคืนคา ในสวนนี้จะใชคําวา void identifier : ชื่อ method โดยมีหลักการตั้งชื่อเหมือนตัวแปร สวนใหญนิยมกําหนดชื่อ method ขึ้นตนดวยตัวอักษรตัวเล็ก และมีการเขียนตัวใหญในคําถัดไป เชน withdraw( ) , addInterest( ) , getBalance( ) เปนตน parameter_list : พารามิเตอรที่รับจากการเรียกใชงาน method นี้ โดยมีรูปแบบในการรับคาคือ data_type identifier1 , data_type identifier2 , ….. data_type คือ ชนิดของขอมูล identifier คือ ชื่อของพารามิเตอรที่ใชใน method นี้ หากตองรับมาหลาย parameter ใหใชเครื่องหมาย , เพื่อกําหนด parameter หลายคา method_body : ประกอบดวยการประกาศตัวแปร การสราง instance การเรียกใชงาน method อื่น return_data : ประกอบดวยขอมูลที่คืนคาใหกับ method ที่เรียกใชงาน หาก return_data_type เปน void return_data type จะไมกําหนด
  • 19. บทที่ 4 แอทริบิวตและเมธอด หนาที่ 120 เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง อ.สุรางคนา ระวังยศ สัญลักษณในการสรางคลาสไดอะแกรม คลาสไดอะแกรม(Class Diagram)แสดงถึงเอนทิตี้ตางๆ ในระบบ หรือภายในโดเมนหนึ่งๆ โดย อธิบายวาเอนทิตี้เหลานั้นมีความสัมพันธกันอยางไร หรืออธิบายถึง class, interface , collaborations รวมถึงความสัมพันธระหวาง class , interface และ collaboration องคประกอบของ class มี 3 สวน คือ 1. ชื่อของคลาส(Name) 2. คุณสมบัติของคลาส(Attribute) 3. พฤติกรรมของคลาส(Operation) ซึ่งทั้งสามสวนจะประกอบดวย ชนิดของการเขาถึง operation ไดแก public แสดงดวยเครื่องหมายบวก (+) private แสดงดวยเครื่องหมายลบ (-) protect แสดงดวยเครื่องหมายบวกชารป (#) default ไมแสดงเครื่องหมายใดๆ สัญลักษณที่ใชแทน class ในแผนภาพคือรูปสี่เหลี่ยมผืนผาตัวอยางดังนี้ รูปแสดงตัวอยางสัญลักษณของ Class Diagram Student -id : integer +name : String #gpa : float +setId(integer) +getId() : integer +setName(String) +getName() : String Student +setId(integer) +getId() : integer +setName(String) +getName() : String ชื่อคลาส สวนแอทริบิวตหรือ (data member) ชนิดของแอทริบิวตชื่อแอทริบิวต ชนิดการเขาถึง แอทริบิวต สวนเมธอด Return data type ชื่อเมธอด ชนิดการเขาถึง เมธอด Parameter