chapter1 uml3
DESCRIPTION
บทที่ 7 วิธีการเชิงวัตถุและการออกแบบคลาส บทที่ 12 การเขียนโปรแกรมโดยใช้ NetBeansTRANSCRIPT
บทท�� 7 วิ�ธี�การเชิ�งวิ�ตถุ�และการออกแบบคลาส
Srinagarindra The Princess Mother School
Kanchanaburi1
แนวิค�ดเชิ�งวิ�ตถุ�(Object Oriented) หมายถึ�ง การใช้ Object เป็�นตั�วหลั�กในการพิ�จารณาความเป็�นจร�งตั�างๆที่��เก�ดขึ้�"นในโลัก โดยมองที่%กสิ่��งในโลักเป็�นว�ตัถึ%ที่�"งหมด แลัะมองว�าก�จกรรมที่��เก�ดขึ้�"นในโลักน�"เก�ดจากความสิ่�มพิ�นธ์*แลัะป็ฏิ�สิ่�มพิ�นธ์*ระหว�างว�ตัถึ%
2
ตัารางเป็ร�ยบเที่�ยบการว�เคราะห*แลัะออกแบบระบบว�ธ์�เด�มก�บว�ธ์�เช้�งว�ตัถึ%วิ�ธี�เด�ม วิ�ธี�เชิ�งวิ�ตถุ�
เร��มตั นจากการว�เคราะห*เอกสิ่าร ผลัลั�พิธ์* แลัะการที่.างานขึ้องระบบ งานเด�ม
เร��มตั นการว�เคราะห*จากObjects ที่�� สิ่ามารถึเห/นได ช้�ดเจน
แตักการที่.างานออกเป็�นหน�วยย�อยๆ
แบ�งกลั%�มขึ้อง Object ตัามค%ณลั�กษณะ
องค*ป็ระกอบตั�างๆขึ้องระบบ เช้�น การป็ระมวลัผลั การออกรายงาน
การค.านวณ จะเก��ยวพิ�นก�น การเป็ลั��ยนแป็ลังจะกระที่บซึ่��งก�นแลัะก�น
แตั�ลัะ Object เป็�นอ�สิ่ระตั�อก�นการเป็ลั��ยนแป็ลังจะไม�กระที่บก�น
3
การป็ร�บเป็ลั��ยนระบบตั องแก ไขึ้Source Code
การป็ร�บเป็ลั��ยนระบบ ที่.าได โดย การเป็ลั��ยน Attributes,
Functions ขึ้อง Object
Tools ที่��สิ่น�บสิ่น%นม�น อยลัง Tools ที่��สิ่น�บสิ่น%นม�มากขึ้�"น
ตัารางเป็ร�ยบเที่�ยบการว�เคราะห*แลัะออกแบบระบบว�ธ์�เด�มก�บว�ธ์�เช้�งว�ตัถึ%
วิ�ธี�เด�ม วิ�ธี�เชิ�งวิ�ตถุ�
4
ว�ตัถึ% (Object) ค3อหน�วยสิ่นใจขึ้องระบบที่��ที่.าให เก�ดเหตั%การณ* ว�ตัถึ%เป็�นได ที่�"งสิ่��งที่��สิ่ามารถึจ�บตั องได (เช้�น โตั4ะ รถึยนตั* คอมพิ�วเตัอร* คน ) แลัะว�ตัถึ%ที่��ไม�สิ่ามารถึจ�บตั องได (เช้�น บร�ษ�ที่ ฝ่6ายตั�างๆ หลั�กสิ่7ตัร)
การสิ่3�อสิ่ารระหว�าง Object เร�ยกว�า Message
5
Class ค3อกลั%�มขึ้อง Object ที่��ม�โครงสิ่ร างพิ3"นฐานพิฤตั�กรรมเด�ยวก�น Object ที่��ม�ค%ณสิ่มบ�ตั�เด�ยวก�น ก/จะรวมกลั%�มอย7�ใน Class เด�ยวก�น
Class แลัะ Object ม�ความคลั ายก�นมากจนที่.าให หลัายคนสิ่งสิ่�ยว�าเป็�นสิ่��งเด�ยวก�นหร3อไม� ในความเป็�นจร�ง Class ถึ3อว�าเป็�น นามธ์รรม (Abstract) ในขึ้ณะที่�� Object น�"นเป็�นสิ่��งที่��ม�ตั�วตัน (Concrete) กลั�าวค3อ Class เป็�นเหม3อนพิ�มพิ*เขึ้�ยวขึ้อง Object โดยที่�� Class จะไม�สิ่ามารถึที่.างานได แตั� Object สิ่ามารถึที่.างานได
การที่.างานขึ้อง Object จะเป็�นไป็ตัามค%ณสิ่มบ�ตั�ที่��ก.าหนดไว ใน Class แลัะ Object ที่%กตั�วก/ตั องอย7�ใน Class ด�งน�"น Class แลัะ Object จ�งเป็�นสิ่��งค7�ก�นเสิ่มอ
6
Class นอกจากจะม�ช้3�อ Class ก.าก�บแลั ว ย�งม� ค%ณสิ่มบ�ตั� (Attributes) แลัะ หน าที่��การที่.างาน (Operations หร3อ Methods)Name
Attributes
Methods
Student
StudentIDFirstNameLastNameAddressTelephoneBirthdateFacultyGPARegister()Drop()Withdraw()
ตั�วอย�าง Class Student
ตั�วอย�าง Class Student 7
การสิ่3บที่อดค%ณสิ่มบ�ตั� (Inheritance) ค3อ การที่�� Subclass ได ร�บการถึ�ายที่อดค%ณสิ่มบ�ตั� (Attributes) มาจาก Superclass แลั วผนวกค%ณสิ่มบ�ตั�พิ�เศษเพิ��มเขึ้ าไป็
สิ่�ญญลั�กษณ* ที่��ใช้ ค3อ ลั7กศรห�วร7ป็สิ่ามเหลั��ยมใสิ่ ช้�"จาก Subclass ไป็ย�ง Superclass
-
Multiple Inheritance
8
Sales Transaction
----inherited----TransactionNumberEmployeeNumberTransactionDateTransactionTimeBarcodeNumberPriceSalesTax
----local----QuantitySold
Rental Transaction
----inherited----TransactionNumberEmployeeNumberTransactionDateTransactionTimeBarcodeNumberPriceSalesTax
----local----MemberNumber
Transaction
TransactionNumberEmployeeNumberTransactionDateTransactionTimeBarcodeNumberPriceSalesTax
Sales Transaction
TransactionNumberEmployeeNumberTransactionDateTransactionTimeBarcodeNumberPriceSalesTaxQuantitySold
Rental Transaction
TransactionNumberEmployeeNumberTransactionDateTransactionTimeBarcodeNumberPriceSalesTaxMemberNumber
With Inheritance
Without Inheritance
9
หลั�กขึ้องการสิ่3บที่อดค%ณสิ่มบ�ตั�จะที่.าให ความสิ่�มพิ�นธ์*ระหว�าง Object ม�ความช้�ดเจนย��งขึ้�"น กลั�าวค3อถึ าม�ความสิ่�มพิ�นธ์*ที่��ช้�ดเจนมากขึ้�"นเที่�าใด จะสิ่�งผลัให การออกแบบระบบงานง�ายขึ้�"น
ผ7 ออกแบบระบบงานเช้�งว�ตัถึ%สิ่ามารถึออกแบบระบบงานขึ้นาดใหญ�ได โดยการอาศ�ย Object ที่��ม�การน�ยามไว ก�อนหร3อที่��ม�ผ7 อ3�นที่.าการออกแบบไว ก�อนแลั ว ซึ่��งเป็�นที่��มาขึ้องการน.ากลั�บมาใช้ ใหม� (Reusability)
10
การสิ่3บที่อดค%ณสิ่มบ�ตั�ม�ขึ้ อด� ค3อ1 . ที่.าให ม�โครงสิ่ร างที่��เป็�นระบบ สิ่ามารถึป็ร�บเป็ลั��ยน
ได ง�าย2. ลัดเวลัาในการพิ�ฒนาระบบ3. ลัดค�าใช้ จ�ายในการพิ�ฒนาระบบ
11
Polymorphism ค3อ การที่�� Object ที่��ตั�างก�นม�ป็ฏิ�ก�ร�ยาตัอบสิ่นองตั�อ Function/ Message หน��งๆในว�ธ์�ที่��ตั�างก�น
Class ร7ป็สิ่��เหลั��ยม ก�บ Class ร7ป็สิ่ามเหลั��ยม ได ร�บการสิ่3บที่อดค%ณสิ่มบ�ตั� จาก Class ร7ป็หลัายเหลั��ยม โดยที่�"งค7�ม� Function ที่��ช้3�อ draw() เหม3อนก�น แตั�เม3�อม�การเร�ยกใช้ function ด�งกลั�าว Object ที่��สิ่ร างจาก Class ร7ป็สิ่��เหลั��ยมจะม�การวาดร7ป็สิ่��เหลั��ยม ขึ้ณะที่�� Object ที่��สิ่ร างจาก Class ร7ป็สิ่ามเหลั��ยมจะม�การวาดร7ป็สิ่ามเหลั��ยม
12
draw()
draw() draw()
• หลั�กการ Polymorphism ช้�วยให สิ่ามารถึน.า code กลั�บมาใช้ ใหม� ได เน3�องจากสิ่ามารถึก.าหนดช้%ดค.าสิ่��งที่��วไป็ แลัะมอบหน าที่��รายลัะเอ�ยดขึ้องการน.าไป็ใช้ แก� Object ที่��เก��ยวขึ้ องจ�ดการ
13
การซึ่�อนรายลัะเอ�ยดเป็�นพิ3"นฐานขึ้องการป็กป็=ดขึ้ อม7ลัภายในแลัะว�ธ์�การที่.างานขึ้อง Object
ตัามแนวค�ดเช้�งว�ตัถึ% การจะลั�วงร7 รายลัะเอ�ยดขึ้ อม7ลัขึ้อง Object จะตั องได ร�บอน%ญาตัจากเจ าขึ้อง Object น�"นก�อน กลั�าวค3อการเขึ้ าถึ�งขึ้ อม7ลัน�"น จะไม�สิ่ามารถึเขึ้ าถึ�งได โดยตัรง แตั�จะตั องม�การตัอบร�บจาก Method ใน Object ป็ลัายที่างน�"นว�าจะยอมให Object ที่��สิ่�ง Message เขึ้ าถึ�งขึ้ อม7ลัขึ้องตันหร3อไม�
Encapsulation หมายถึ�ง ลั�กษณะการเขึ้�ยนโป็รแกรมที่��จะม�การซึ่�อนขึ้ อม7ลัที่��ตั องการควบค%มความถึ7กตั องขึ้องขึ้ อม7ลัไว (Information Hiding) แลัะบ�งค�บให Object อ3�นเขึ้ าถึ�งขึ้ อม7ลัที่��ซึ่�อนไว ผ�านที่าง Interface ที่��เตัร�ยมไว ที่.าให สิ่ามารถึควบค%มความถึ7กตั องขึ้องขึ้ อม7ลัได
14
กลัไกการป็กป็?องก�นขึ้ อม7ลัแลัะว�ธ์�การที่.างานขึ้อง Object สิ่ามารถึเป็�น Public (+) ซึ่��งสิ่ามารถึเขึ้ าถึ�งได โดยตัรงจาก
ภายนอก Private (#) ซึ่��งจะถึ7กใช้ งานจากภายใน Class
เที่�าน�"น Protected (-) ซึ่��งจะสิ่ามารถึเห/นหร3อเขึ้ าถึ�งได
จากภายใน Subclass เที่�าน�"น
15
เป็�นความสิ่�มพิ�นธ์*ระหว�าง Object หร3อ Class แบบ 2 ที่�ศที่าง
Employee Company
work for
hire
0..*
1..*
Person Car
own
is owned by
0..*
1..*
16
เป็�นความสิ่�มพิ�นธ์*ระหว�าง Object หร3อ Class แบบ “Whole-Part” หร3อ “is part of” โดยจะม� Class ที่��ใหญ�ที่��สิ่%ดที่��เป็�น Object หลั�ก แลัะม� Class อ3�นเป็�นสิ่�วนป็ระกอบ
Car
Body
Whole
WheelEngine Part
17
เป็�นความสิ่�มพิ�นธ์*ระหว�าง Object หร3อ Class แบบขึ้�"นตั�อก�นแลัะม�ความเก��ยวขึ้ องก�นเสิ่มอ โดยจะม� Class ซึ่��งเป็�นองค*ป็ระกอบขึ้อง Class อ3�นที่��ใหญ�กว�า
เม3�อ Class ที่��ใหญ�กว�าถึ7กที่.าลัาย Class ที่��เป็�นองค*ป็ระกอบก/จะถึ7กที่.าลัายไป็ด วย
Windows
Text
Button
Menu
18
เป็�นความสิ่�มพิ�นธ์*ระหว�าง Object หร3อ Class ในลั�กษณะขึ้องการสิ่3บที่อดค%ณสิ่มบ�ตั�จาก Class หน��ง (Superclass) ไป็ย�งอ�ก Class หน��ง (Subclass)
Student
DepartmentYearGPA
Enroll()Study()Exam()Graduate()
Teacher
PositionExpertise
Lecture()Comment()
Person
LastnameFirstnameBirthdateGender
Walk()Jump()Talk()Sleep()Eat()
19
บทท�� 12 การเขี�ยนโปรแกรมโดยใชิ! NetBeans
Srinagarindra The Princess Mother School
Kanchanaburi20
NetBeans IDE เป็�น Freeware Editor อ�กตั�วหน��ง ซึ่��งได ร�บความน�ยมในการใช้ พิ�ฒนาโป็รแกรมโดย NetBeans น�"นสิ่น�บสิ่น%นการพิ�ฒนาโป็รแกรมในหลัายภาษา เช้�นJava, php, C/C++ นอกจากน�"เราย�งสิ่ามารถึ download PlugIn ตั�างๆมาใช้ งานร�วมก�บตั�ว NetBeans เองด วย ยกตั�วอย�างเช้�น iReport เป็�น Plugin ที่��ใช้ ในการสิ่ร างreport หร3อ Visual Web Page Layouts ใช้ ในการแสิ่ดงตั�วอย�างหน า web page
21
ก�อนที่��จะเร��มใช้ งาน NetBeans เราสิ่ามารถึ download ตั�วโป็รแกรม NetBeans ได ที่��http://netbeans.org/downloads/index.html โดย NetBeans น�"นม�หลัายversion หลัาย Platform เราสิ่ามารถึเลั3อกภาษา Platform แลัะ version ได ตัามความเหมาะสิ่มเลัยคร�บ
เม3�อที่.าการ download มาแลั วจะได เป็�น .exe file ซึ่��งเราสิ่ามารถึที่.าการตั�ดตั�"งโป็รแกรมไป็ย�ง directory ที่��ตั องการจะที่.าการตั�ดตั�"งได เลัย หลั�งจากตั�ดตั�"งโป็รแกรมเสิ่ร/จสิ่มบ7รณ*แลั ว เราสิ่ามามารถึเขึ้ าโป็รแกรม NetBeans ได จากหน า desktop
22
เม3�อที่.าการ download มาแลั วจะได เป็�น .exe file ซึ่��งเราสิ่ามารถึที่.าการตั�ดตั�"งโป็รแกรมไป็ย�ง directory ที่��ตั องการจะที่.าการตั�ดตั�"งได เลัย หลั�งจากตั�ดตั�"งโป็รแกรมเสิ่ร/จสิ่มบ7รณ*แลั ว เราสิ่ามามารถึเขึ้ าโป็รแกรม NetBeans ได จากหน า desktop
23
ในที่��น�"เราจะที่.าการพิ�ฒนาโป็รแกรมด วยภาษา JAVA เพิราะฉะน�"นจะตั องที่.าการdownload ตั�ว JDK หร3อ Java Development Kit เสิ่�ยก�อน สิ่ามารถึ downloadได ที่��http://www.oracle.com/technetwork/java/javase/downloads/index.html
เม3�อ download JDK แลั วก/ตั องที่.าการ Set class path เพิ3�อให สิ่ามารถึ Compileแลัะ Run Java ได โดยว�ธ์�ที่.าสิ่ามารถึตั�ดตัามได จาก Link ด านลั�างเลัยคร�บhttp://archive.oracle.in.th/2 0 0 8 /0 2 /
- - - -set path class path j2 -se dos.htmlหร3อhttp://www.dominixz.com/blog/software-tips/set-java-to-compile-and-run-all-places-in-dos/
24
25
หน!าจอหล�กขีอง NetBeans จะแบ%งออกเป&น 4 ส%วินใหญ่%ๆด�งน�)คร�บ
เป็�นสิ่�วนขึ้องแถึบเมน7 แลัะ Tool ตั�างๆ เป็�นสิ่�วนที่��แสิ่ดงแลัะจ�ดการ Project ตั�างๆ
เหม3อนเป็�นการ Browse ด7 Projectหร3อ File ตั�างๆ
เป็�นสิ่�วนที่��ใช้ ในการเขึ้�ยน Code เป็�นสิ่�วนที่��ใช้ ในการแสิ่ดงผลัการที่.างานตั�าง เม3�อ
ที่.าการ Run โป็รแกรม แลัะย�งม�สิ่�วนขึ้องการ debug โป็รแกรมด วย
26
เม3�อร7 จ�กหน าตัาหร3อ GUI แบบคร�าวๆขึ้อง NetBeans ก�นแลั วตั�อไป็ก/มาลัองเขึ้�ยนโป็รแกรมง�ายก�นคร�บ โดยเร��มจากการ New Project ใหม�ขึ้�"นมา โดยการเลั3อกที่�� File >> New Project
27
จะม�หน าตั�างขึ้�"นมาให เราเลั3อก โดยให เราที่.าการเลั3อก Java แลัะ Java Applicationแลั วกด Next
28
จากน�"นจะม�หน าตั�างให ก.าหนดค�ารายลัะเอ�ยดตั�างๆขึ้อง Project โดยจะบ�งค�บให ใสิ่�Project Name ในที่��น�"จะตั�"งช้3�อ Project ว�า NetBeansTutorial แลัะช้3�อ Main Class ว�า MainClass เม3�อก.าหนดค�ารายลัะเอ�ยดตั�างๆแลั ว กด Finish
เราจะได Project ที่��ช้3�อว�า NetBeansTutorial แลัะ File ช้3�อ MainClass.java ขึ้�"นมา ตั�อไป็เราจะลัองสิ่ร าง class TestObj ขึ้�"นมา เพิ3�อลัองใช้ Funtion บางอย�างขึ้องNetBeans คร�บ
โดยการสิ่ร าง class ใหม�น�"น เราสิ่ามารถึที่.าได โดย คลั�กขึ้วาที่��ช้3�อ Project แลั วเลั3อกNew >> Java Class ด�งภาพิ
29
หลั�งจากน�"นจะป็รากฏิหน าตั�างขึ้�"นมาให ก.าหนดรายลัะเอ�ยด โดยให ตั�"งช้3�อ Class ว�าTestObj แลั วกด Finish ภายใน class TestObj จะม� code ด�งน�"คร�บ
public class TestObj { private String firstName; private String lastName; public void showName() { System.out.println("THIS IS METHOD showName()"); System.out.println("My name is "+firstName+"
"+lastName); } }
30
จะเห/นได ว�า Attribute ใน Class TestObj เป็�น private ฉะน�"นก/จะตั องม� Getter and Setter เราสิ่ามารถึที่��จะสิ่��งให NetBeans สิ่ร าง Getter and Setter จากAttribute ที่��ม�อย7�ได โดยการคลั�กขึ้วาที่��หน าจอที่��ใช้ เขึ้�ยน code แลั วเลั3อก Insert Codeจะป็รากฏิหน าตั�างขึ้�"นมาให เลั3อกที่�� Getter and Setter
หน าตั�างสิ่.าหร�บการ Generate Getters and Setters จะขึ้�"นมา ให เราที่.าการเลั3อกว�าจะสิ่ร าง Getters and Setters ให ก�บ Attribute ใดบ าง เม3�อเลั3อกเสิ่ร/จเร�ยบร อยให กดGenerate
31
เราจะได code ขึ้อง class TestObj ด�งน�" public class TestObj { private String firstName; private String lastName; public void showName() { System.out.println("THIS IS METHOD showName()"); System.out.println("My name is "+firstName+"
"+lastName); } public String getFirstName() { return firstName; }
32
public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}
นอกจากการ Generate Getters and Setters แลั ว เราสิ่ามารถึคลั�กขึ้วาเพิ3�อด7Function อ3�นๆที่�� NetBeans สิ่ามารถึช้�วยจ�ดการให การที่.างานขึ้องเราง�ายขึ้�"นคร�บ
เม3�อได class TestObj แลั ว ตั�อไป็เราก/ที่.าการแก ไขึ้ code ขึ้อง MainClass ให
เป็�นด�งน�" public class MainClass { public static void main(String[] args) { TestObj temp = new TestObj(); temp.setFirstName("Itthi"); temp.setLastName("Kruenarongkul"); temp.showName(); temp.setFirstName("Monthinee"); temp.setLastName("Buntawee"); temp.showName(); }
33
ในการ code ค.าสิ่��งตั�างๆ เราสิ่ามารถึกด CTRL+SpaceBar เพิ3�อเร�ยกด7ได ว�าสิ่ามารถึใช้ method หร3อเร�ยก Attribute ใดมาใช้ ได บ าง หร3อบางที่� NetBeans ก/จะขึ้�"นสิ่�วนน�"มาให เอง
เม3�อที่.าการแก ไขึ้ Code เสิ่ร/จเร�ยบร อย เราจะลัองที่.าการ Run โป็รแกรมน�"ด7 โดยการกดป็%6มสิ่�เขึ้�ยวที่��อย7�ด านลั�างแถึบเมน7
34
โดย NetBeans จะที่.าการ Save ให อ�ตัโนม�ตั�ที่%กคร�"งที่��จะที่.าการ Run ถึ า NetBeansที่.าการ compile แลั วไม�พิบ errorโป็รแกรมจะแสิ่ดงผลัที่��สิ่�วนด านลั�างด�งภาพิ
35