แนวคิดของการพัฒนาซอฟต์แวร์...

127

Upload: others

Post on 26-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต
Page 2: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

2

แนวคดของการพฒนาซอฟตแวรเชงวตถ Object-Oriented Software Development Concept

ผชวยศาสตราจารย ดร. รฐสทธ สขะหต

Page 3: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

3

ค าน า แนวคดของการพฒนาซอฟตแวรเชงวตถเปนการมองปญหาตางๆในโลกของความเปนจรง เพอ

วเคราะหหาแนวทางการแกไขปญหา โดยมองปญหาออกเปนแบบจ าลองควบคไปกบการวเคราะห เพอมงเนนไปสการพฒนาซอฟตแวรทมประสทธภาพ โดยการพฒนาซอฟตแวรเชงวตถนปจจบนมภาษาตางๆ หลายภาษาทรองรบและสนบสนน ทงในเรองของเทคโนโลย เครองมอส าหรบพฒนา รวมถงกลมคอมโพเนนทและแพจเกจ แนวคดเชงวตถเปนแนวคดทมงเนนการแกไขปญหาโดยอาศยการท าโมเดลเพอใหภาพมมมองของปญหาสอดคลองกบโดเมนของธรกจ โมเดลเชงวตถชวยท าใหการวเคราะห ออกแบบและการพฒนาซอฟตแวรเปนไปอยางมระบบและมประสทธภาพ ซงการพฒนาระบบจะสามารถใชประโยชนจากแนวคดของการน าโปรแกรมโคดกลบมาใชใหม โดยน าเอาคอมโพเนนทหรอแพจเกจมาใชพฒนาในการพฒนาซอฟตแวรใหม หรอในบางครงเปนลกษณะของการพฒนาตอยอด เพอใหระบบทมอยเดมมความสมบรณมากยงขน ซงแนวคดนเปนแนวคดทสนบสนนการใชประโยชนจากกลมออบเจกตทมอยแลวกลบมาใชใหมท าใหการพฒนาซอฟตแวรสามารถท าไดอยางรวดเรว มความเสถยรภาพสง และการบ ารงดแลรกษาระบบหลงการพฒนาเสรจสนกสามารถท าไดงาย นอกจากนจากแนวคดของการพฒนาซอฟตแวรเชงวตถยงชวยใหซอฟตแวรถกออกแบบเปนโครงสราง ทงในระดบของออบเจกต ไลบรารหรอคอมโพเนนท ท าใหทมพฒนาซอฟตแวรสามารถท างานไดอยางเปนระบบ

ในการจดท าต าราเรองแนวคดของการพฒนาซอฟตแวรเชงวตถ ผจดท ามวตถประสงคเพอทจะอธบายถงหลกการและแนวคดของการพฒนาซอฟตแวรเชงวตถ โดยไมไดมงเนนทภาษาใดภาษาหนงโดยเฉพาะ แตตองการใหผอานเหนถงแนวคดในการพฒนาโปรแกรมในเชงวตถในรปแบบภาษาตางๆ ซงปจจบนการพฒนาซอฟตแวรนนจะตองค านงถงประสทธภาพและความสามารถในการท างานและโดยผพฒนาจะตองท าขนตอนการวเคราะหออกแบบและพฒนาระบบ โดยสามารถควบคมคณภาพของซอฟตแวรเปนไปตามความตองการของผใชงาน โดยอาศยแนวคดของการพฒนาซอฟตแวรเชงวตถเพอใหเกดงานซอฟตแวรทมประสทธภาพ ผจดท าหวงเปนอยางยงวา ต าราเลมนจะเปนประโยชนตอผทสนใจในการศกษาแนวคดในการพฒนาซอฟตแวรตามหลกการเชงวตถ เพอเปนพนฐานในการศกษาหาความรเพมเตม และขอขอบคณผอานทกทานทใหความสนใจต าราเลมน

ผชวยศาสตราจารย ดร. รฐสทธ สขะหต

ภาควชาวทยาการคอมพวเตอร คณะวทยาศาสตร มหาวทยาลยเชยงใหม

Page 4: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

4

สารบญ 1.1 โปรแกรมภาษาคอมพวเตอร (Programming Languages) ............................................................... 9

1.2 ววฒนาการของภาษาทใชในการพฒนาโปรแกรม .................................................................... 14

1.2.1 โปรแกรมแบบไมมโครงสราง (Unstructured Programming)................................................ 15

1.2.2 โปรแกรมแบบมโครงสรางเปนแบบโพซเยอร (Procedural Programming) ...................... 15

1.2.3 โปรแกรมแบบมโครงสรางเปนแบบโมดล (Modular Programming) .................................. 16

1.2.4 โปรแกรมเชงวตถ (Object-Oriented Programming) .............................................................. 17

1.3 แนวคดและหลกการพฒนาโปรแกรม ....................................................................................... 18

1.4 การน าเอาโปรแกรมโคดกลบมาใชใหม (Code Reusability) ....................................................... 22

1.5 การพฒนาซอฟตแวรเชงคอมโพเนนท...................................................................................... 27

บทท 2 - ชนดขอมลแบบนามธรรม ........................................................................................................ 29

2.1 คณสมบตของแบบนามธรรม (Property of Abstract Data Type) .................................................. 30

2.2 การแกไขปญหาในแนวคดเชงวตถ .............................................................................................. 32

2.3 คณสมบตทวไปของออบเจกต ..................................................................................................... 33

2.3.1 องคประกอบทส าคญของออบเจกต ................................................................................... 34

2.3.3 การสอสารระหวางออบเจกต .............................................................................................. 35

2.4 กระบวนการท างานเชงวตถ ......................................................................................................... 36

2.5 การศกษาความตองการของผใช (User Requirement) ................................................................. 38

บทท 3 - คลาสและออบเจกต ................................................................................................................. 41

3.1 สถานะของออบเจกต (Object States) .......................................................................................... 42

3.2 โครงสรางของคลาส (Class Structure) ......................................................................................... 43

3.3 อนสแตนซของคลาส (Class Instance) .......................................................................................... 45

3.4 การสงขอความระหวางออบเจกต (Message Passing between Objects) ..................................... 46

Page 5: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

5

3.5 การประกาศคาตวแปรของออบเจกต ......................................................................................... 47

3.6 การท าลายออบเจกต (Object Destruction) ................................................................................. 48

3.7 คอนสตคเตอร (Constructor) ........................................................................................................ 49

3.8 โอเวอรโหลด (Overloading) .......................................................................................................... 54

3.9 โอเวอรโหลดคอนสตคเตอร (Overloading Constructor) .............................................................. 54

3.10 สมาชกและเมทธอดแบบสถต (Static Members and Methods) ................................................. 55

3.11 แอบสแตกคลาสและแอบสแตกเมทธอด (Abstract Class and Abstract Method) ..................... 57

3.12 เมทธอดแบบซอนทบ (Override Method) .................................................................................. 59

3.13 ไฟนอลคลาส ไฟนอลเมทธอด และตวแปรแบบไฟนอล (Final) .............................................. 59

3.14 อนเตอรเฟส (Interface) .............................................................................................................. 60

บทท 4 - องคประกอบแนวคดเชงวตถ ................................................................................................... 67

4.1 การสบทอด (Inheritance) .............................................................................................................. 67

4.1.2 ความสมพนธระหวางออบเจกต .......................................................................................... 69

4.2 การซอนคณสมบตของออบเจกต (Data Encapsulation) .............................................................. 74

4.2.1 แบบทวไป (Public) ............................................................................................................... 77

4.2.2 แบบสวนตว (Private) ........................................................................................................... 77

4.2.3 แบบปองกน (Protected) ..................................................................................................... 79

4.3 การใชงานไดหลายรปแบบ (Polymorphism) .............................................................................. 79

บทท 5 – ภาษาเชงวตถ ........................................................................................................................... 81

5.1 เครองมอพฒนาทสนบสนนการพฒนาเชงวตถ .......................................................................... 82

5.1.1 เครองมอส าหรบพฒนา Visual Programming ....................................................................... 82

5.1.2 การจดการกบโมดลและคอมโพเนนท ................................................................................ 82

5.2 การจดการกบหนวยงานจ าโดย Garbage Collection ................................................................... 86

Page 6: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

6

5.3 การนยามคลาสและออบเจกตในภาษาเชงวตถ ......................................................................... 88

5.3.1 การสรางออบเจกต ............................................................................................................... 90

5.3.2 คอนสตรคเตอร (Constructor) ............................................................................................... 92

5.3.3 การเขาถงสมาชกของออบเจกต (Object Accessibility)........................................................ 95

5.3.4 การสบทอด (Inheritance) ...................................................................................................... 97

5.3.5 โอเวอรโหลดและโอเวอรไรด (Overloading and Overriding) ................................................ 98

5.3.6 โพลมอรฟซม (Polymorphism) .............................................................................................. 99

5.3.7 การจดการเมทธอดแบบเวอรชวลและแบบไดนามก ....................................................... 101

5.3.8 อนเตอรเฟส (Interface) ....................................................................................................... 105

5.4 การพฒนาโปรแกรมเชงวตถดวยภาษาแบบวชวลโปรแกรมมง .............................................. 107

5.4.1 การสรางคอนโทรลออบเจกต ............................................................................................ 110

5.4.2 คณสมบตของคอนโทรลออบเจกต.................................................................................... 111

บทท 6 – การตรวจจบขอผดพลาด ....................................................................................................... 112

6.1 หลกการท างานเมอโปรแกรมมขอผดพลาด ............................................................................. 114

6.2 ขอผดพลาด Error Exception เกดขนไดอยางไร ......................................................................... 115

6.3 วธการดกจบขอผดพลาดของโปรแกรม .................................................................................... 117

6.4 การจดการ Exception ในเมทธอดแบบซอนทบ (Overriding Method) ....................................... 120

6.5 วธการ Handle Exception โดยวธการเผยแพรขอผดพลาด ....................................................... 120

6.6 การสราง Exception ส าหรบดกจบขอผดพลาดของโปรแกรมขนมาใชงานเอง ...................... 122

บรรณานกรม .......................................................................................................................................... 125

ดชนศพท ................................................................................................................................................ 126

Page 7: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

7

สารบญรป

รป 1.1 ววฒนาการของโปรแกรมภาษาคอมพวเตอร ....................................................................................9 รป 1.2 โปรแกรมแบบมโครงสรางแบบโพซเยอร ....................................................................................... 16 รป 1.3 การก าหนดโครงสรางของโปรแกรมแบบ Modular Programming ............................................ 17 รป 2.1 องคประกอบประเภทขอมลแบบนามธรรม ................................................................................... 31 รป 2.2 การสงขอมลระหวางออบเจกต ..................................................................................................... 35 รป 3.1 แสดงการสงคารองขอขอมลระหวางออบเจกต .............................................................................. 47 รป 3.2 รปแบบการประกาศ interface .................................................................................................... 61 รป 3.3 การ implement interface ........................................................................................................ 61 รป 3.4 การสบทอด interface เพอท าการ implement เปนคลาสใหม ................................................... 62 รป 3.5 การสบทอดสบสกลกรณคลาสทเปน interface ............................................................................ 64 รป 3.6 การสบทอดแบบ multiple inheritance ของ interface ............................................................ 65 รป 3.7 การสบทอดแบบ multiple inheritance ของ interface ทอาจกอใหเกดปญหา ......................... 66 รป 4.1 การสบสกลแบบชนเดยว ............................................................................................................... 68 รป 4.2 การสบสกลแบบหลายล าดบชน .................................................................................................... 69 รป 4.3 แสดงพาธความสมพนธ................................................................................................................ 71 รป 4.4 การสบสกลคณสมบตตางๆจากซเปอรคลาสไปยงสบคลาส .......................................................... 72 รป 4.5 การสบสกลแบบชนเดยว ............................................................................................................. 72 รป 4.6 การสบสกลจากหลายล าดบชน ..................................................................................................... 73 รป 4.7 แสดงคณสมบตของ encapsulation............................................................................................ 75 รป 6.1 ล าดบชนการท างานของซอฟตแวรบน Java Virtual Machine .................................................. 114 รป 6.2 ผงโครงสรางของคลาส java.lang.Throwable ........................................................................... 117

Page 8: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

8

บทท 1 - ววฒนาการของโปรแกรมภาษา

กอนทซอฟตแวรจะถกพฒนาออกมาอยในรปของผลตภณฑทสมบรณ โปรแกรมจะตองผานขนตอนการวเคราะหออกแบบและพฒนาหลายขนตอนการควบคมคณภาพของการพฒนาในแตละขนตอนจงเปนสงส าคญ ในระยะ 30 กวาปทผานมาขนาดของโปรแกรมทถกพฒนามขนาดใหญขนและมความซบซอนมากยงขน การพฒนาโปรแกรมจงตองมหลกโครงสรางการออกแบบและการพฒนาโปรแกรมทชดเจน และนอกเหนอไปจากการควบคมคณภาพของโปรแกรมแลว การควบคมเวลาและตนทนของการผลตกเปนสงส าคญ แนวคดของการพฒนาโปรแกรมแบบเชงวตถจดไดวาเปนแนวทางใหม ซงแนวคดนตางจากการพฒนาซอฟตแวรแบบโครงสราง เชนภาษา C, Pascal, Fortran, Cobol หรอภาษา Basic อยางไรกตามแนวคดของออบเจกตกไมไดถอวาเปนเรองใหมทงหมด เนองจากวาหลกการบางอยางของออบเจกตไดถกน ามาใชกบการพฒนาซอฟตแวรแบบโครงสรางแลวบาง ตวอยางทเหนไดชดคอการแบงโปรแกรมออกเปนโปรแกรมยอยหรอเรยกวาโพซเยอรและฟงกชน และส าหรบโปรแกรมทมขนาดใหญขนกอาจมการน าเอาโพซเยอรตางๆมาจดรวมกนเปนลกษณะของโมดลหรอไลบราร ซงท าใหโปรแกรมเมอรสามารถพฒนาซอฟตแวรไดรวดเรว เปนระเบยบ และมคณภาพมากยงขน อยางไรกตามแนวคดของการพฒนาซอฟตแวรเชงวตถไมไดถอวาเปนเรองใหมทงหมดเลยทเดยว เนองจากไดมการน าเสนอแนวคดทใชคณสมบตของออบเจกตมาตงแตในอดตเชน การน าโปรแกรมโคดเกากลบมาใช การจดแบงโปรแกรมโคดออกเปนสวนตางๆเรยกวา ไลบรารหรอโมดล หรอแบงโปรแกรมออกเปนไฟลยอยตางๆ เพอใหการพฒนาซอฟตแวรเปนไปอยางมประสทธภาพ สามารถทจะแกไขปญหาหรอหาขอผดพลาดไดงาย โดยเฉพาะโปรแกรมทมขนาดใหญและมการพฒนารวมกนหลายคน

จากรป 1.1 จะเหนวาเรามการพฒนาโปรแกรมภาษาคอมพวเตอรมาตงแตป 1950 ทมความพยายามทจะควบคมการท างานของเครองคอมพวเตอรโดยตรง หรอพยายามทจะสงใหเครองท างานโดยภาษาเครอง (Machine Language) แตกเกดความยงยากและซบซอน จนมาถงในชวงของภาษา Assembly ซงเปนภาษาทมการท างานในลกษณะของชดค าสงทมนษยไมจ าเปนตองเรยนรภาษาเครอง แตกยงเปนลกษณะของชดค าสงทไมมโครงสรางของภาษาชดเจน แตกนบไดวาเปนจดเรมตนของการควบคมการท างานของเครองคอมพวเตอรโดยอาศยโปรแกรมภาษา ซงเราจะเหนไดวานบจากนนเปนตนมากไดมการพฒนาโปรแกรมภาษาตางๆออกมาอกมากมาย ซงมความแตกตางกนไปทงในเรองของโครงสรางภาษา และความสามารถทภาษานนๆสามารถท าได

Page 9: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

9

Assembly

BCPL/Bon

B

C

C++

Java

C#

Algol

ABAP

Fortran

COBOL

Perl

Basic

Pascal

Delphi

Modula-2

PHP

Simula

Smalltalk

FLOWMATIC

Visual Basic

Modula-3

Python

Ruby

Lisp

Logo

Prolog

Planner

1950-1970

1970-1990

1990-2010

Eiffel

รป 1.1 ววฒนาการของโปรแกรมภาษาคอมพวเตอร

1.1 โปรแกรมภาษาคอมพวเตอร (Programming Languages) ในทางคอมพวเตอร เนองจากคอมพวเตอรเปนอปกรณอเลกทรอนกส มเฉพาะวงจรการเปดและปด

ท าใหเครองคอมพวเตอรสอสารโดยใชเลขฐานสองเทานน เรยกภาษาทใชเฉพาะเลขฐา นสองน วา ภาษาเครอง (Machine Language) ท าใหการใชงานยงยาก จงมการพฒนาภาษาคอมพวเตอรขนมาเพอใชสอสารระหวางเครองคอมพวเตอรกบมนษยได โดยชนดของภาษาคอมพวเตอรไดถกจ าแนกตามระดบภาษาดงน

ภาษาเครอง (Machine Language) ภาษาแอสเซมบล (Assembly Language) ภาษาระดบสง (High-Level Language) ภาษาระดบสงมาก (Very High-Level Language) ภาษาธรรมชาต (Natural Language)

Page 10: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

10

ภาษาเครอง (Machine Language) เปนภาษาระดบต าทสด เพราะใชเลขฐานสองแทนขอมล และค าสงตางๆ จะเปนภาษาทขนอยกบ

ชนดของเครองคอมพวเตอร หรอหนวยประมวลผลทใช ดงนนนกพฒนาซอฟตแวรจะตองรจกวธทจะรวมตวเลขเพอแทนค าสงตางๆ ท าใหการพฒนาซอฟตแวรมความซบซอนมาก ค าสงในภาษาเครอง จะประกอบดวย 2 สวน คอ

1) Operation Code เปนค าสงทสงใหคอมพวเตอรปฏบตการ เชน การบวก การลบ 2) Operands เปนตวทระบต าแหนงทเกบของขอมลทจะน าเขาสคอมพวเตอรเพอน าไปปฏบต

ตามค าสงใน Operation Code

ภาษาแอสเซมบล (Assembly Language) เมอในป ค.ศ. 1952 ไดมการพฒนาภาษาระดบต าตวใหม โดยภาษาแอสเซมบลใชรหสแทนค าสง

ภาษาเครอง ท าใหนกพฒนาซอฟตแวรสามารถพฒนาซอฟตแวรไดงายขน ซงสญลกษณทใชจะเปนค าสงสนๆ ทจ าไดงาย เรยกวา mnemonic code ตวอยางเชน

A => ADD C => Compare MP => Multiply STO => Store

นอกจากนภาษาแอสเซมบล ยงอนญาตใหผเขยนใชตวแปรทตงขนมาเองในการเกบคาขอมลใด ๆ เชน X, Y, TOTAL แทนการอางถงต าแหนงทเกบขอมลจรง ในการพฒนาโปรแกรมแอสแซมบลผ พฒนาซอฟตแวร ตองอาศยโปรแกรมแปลภาษาเรยกวา แอสเซมเบลอ (Assembler) เพอท าการแปลภาษาแอสเซมบลใหเปนภาษาเครอง เพอใหคอมพวเตอรท างานตามตองการ ซงภาษาแอสเซมบล 1 ค าสง สามารถแปลเปนภาษาเครองได 1 ค าสงเชนกน ขอจ ากดของภาษาแอสเซมบล คอ ลกษณะการเขยนจะแตกตางกนไปในแตละเครองเชนเดยวกบภาษาเครอง นอกจากนผพฒนาซอฟตแวรจะตองมความรในเรองฮารดแวร เนองจากจะตองยงเกยวกบการใชงานหนวยความจ าทอยในเครองตลอดดงนน จงเหมาะกบงานทตองการความเรวสงหรองานพฒนาทตองท างานรวมกบอปกรณฮารดแวร

ภาษาระดบสง (High-Level Language)

ในป ค.ศ. 1960 ไดมการพฒนาภาษาระดบสงขน โดยจะใชโคดภาษาองกฤษ (English Code) แทนค าสงตางๆ เชน ค าสง Begin .. End หรอ if..then..else รวมทงใชการนพจนทางคณตศาสตร และการจดกลมโปรแกรมใหเปนลกษณะของบลอกตามกลมค าสง เรยกวาฟงกชนและโพรซเยอร ท าใหนกพฒนาซอฟตแวรไมจ าเปนตองเขาใจการท างานของฮารดแวรมากนก แตส าหรบการพฒนาโปรแกรมระดบสงนยงตองอาศยตวแปลภาษาเรยกวาคอมไพเลอร (Compiler) เพอท าการแปลจากภาษาโคดทเขยน (Source Code) ใหเปนภาษาทเครองเขาใจ (Machine Language) ในการแปลภาษาน คอมไพเลอรจะท าการตรวจสอบไวยากรณของภาษาของ Source Program หรอ Source Module แตถาผานการแปลเรยบรอย

Page 11: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

11

และไมมขอผดพลาดจะเรยกวา Object Program หรอ Object Module ซงยงไมสามารถท างานได ตองท าการ link หรอรวมเขากบ Library ของระบบกอน จงจะท าใหโปรแกรมท างานไดหรอในภาษาเครองเรยกวา Execute Program หรอ Load Module โดยทวไปจะมนามสกลเปน .exe หรอ .com

ขอดของภาษาระดบสง ขอจ ากดของภาษาระดบสง 1. อ านวยความสะดวกแกโปรแกรมเมอร โดยไมตองมความรในเรองฮารดแวร กสามารถเขยนได

1. ยงตองมการแปลภาษาชนสงเปนภาษาเครองอย

2. มลกษณะไมขนอยกบอปกรณฮารดแวร (Hardware Independent)

2. อาจประมวลผลชากวาเขยนโดยภาษาเครองโดยตรงหรอภาษาแอสเซมบล

3. มเครองมอและเทคโนโลยทชวยเออตอการพฒนาซอฟตแวรได ง าย เ ชน RAD (Rapid Application Development) เปนตน

3. เ น อ งจ ากภาษา ชนส งน ย งจ ด เป น ว า เป น Procedural Language จงท าใหการพฒนาซอฟตแวรคอนขางซบซอน และใชเวลาในการพฒนาคอนขางมาก

การแปลโคดใหเปนภาษาเครองอกวธหนงเรยกวาอนเตอรพรเตอร (Interpreter) ซงเปนการแปล

โปรแกรมแตละค าสงใหเปนภาษาเครองทเดยว ซงจะตองท าการการตรวจสอบไวยากรณของภาษา และท างานค าสงนนทนท กอนทจะท าการแปลค าสงถดไปได ถาในระหวางการแปลเกดพบขอผดพลาดกจะฟองเพอใหท าการแกไขทนท ซงโปรแกรมแปลภาษานเมอแปลเสรจแลวจะไมสามารถเกบเปน execute program ได ดงนนเมอจะเรยกใชงานกจะตองท าการแปลโปรแกรมใหมทกครง จงท าใหโปรกรมท างานชากวาโปรแกรมทผานการคอมไพล แตโปรแกรมภาษาทแปลในรปแบบนจะมโครงสรางทงายในการพฒนา ตวอยางของโปรแกรมทเปนแบบอนเตอรพรเตอร ไดแกโปรแกรมประเภททเปนสครปตเชน Perl, Java Script, Shell Script, VB Script รปแบบทวไปของค าสงทมอยในภาษาโปรแกรมประกอบดวยคณสมบตดงตอไปน

การประกาศชนดขอมลตวแปร (Definition data type) จะเปนการตงชอตวแปร และบอกวาเปนตวแปรชนดใด เพอใชอางองในหนวยความจ า

ค าสงก าหนดคาขอมลใหกบตวแปร (Definition data value) ซงอาจก าหนดคาโดยตรงหรอใหรบจากการอานขอมลจากภายนอก เชน รบคาจากคยบอรดหรอแฟมขอมล

ค าสงควบคม (Control command) เปนค าสงควบคมการท างานเพอใหรวาตองไปท างานยงสวนใดของโปรแกรม โดยอาจมาจากค าสงเงอนไขหรอค าสงวนซ า

ค าสงการประมวลผล เปนค าสงการค านวณทางคณตศาสตร ค าสงการแสดงผล เปนค าสงใหแสดงผลลพธทไดจากการประมวลผล ค าสงแสดงการเรมตนและการสนสดการท างาน ซงอาจะเปนการเขยนบลอกของโปรแกรม

Page 12: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

12

ตวอยางโปรแกรมภาษาระดบสง FORTRAN = FORmula TRANslator เปนภาษาทพฒนาโดยบรษท IBM ตงแตป ค.ศ. 1957

ถอเปนภาษาระดบสงภาษาแรก นยมใชส าหรบงานทมการค านวณมากๆ เชน งานดานคณตศาสตร วทยาศาสตร วศวกรรมศาสตร เปนตน การแปลภาษาใชแบบคอมไพเลอร ซงขอดของภาษานคอเหมาะกบงานท มการค านวณทางคณตศาสตรทซบซอน และค าส งสวนใหญจะงายและสน ท าใหผพฒนาโปรแกรมไมจ าเปนตองมการประกาศชนดของตวแปร อยางไรกตามภาษานมขอจ ากดคอไมเหมาะกบงานทางธรกจทเกยวของกบการรบขอมลเขาและออก การสรางรายงานจ านวนมากๆ หรองานทตองเกบเปนแฟมขอมล

COBOL = Common Business-Oriented Language เปนภาษาทพฒนาเมอป ค.ศ. 1960 นยมใชส าหรบงานทางธรกจ หรองานเกยวกบแฟมขอมล เชน การจดเกบ การเรยกใช งานประมวลผลทางบญช ตลอดจนงานดานควบคมสนคาคงคลง และการรบจายเงน เปนตน ภาษาโคบอลเปนภาษาทเหมาะกบงานดานธรกจขนาดใหญทมขอมลมากๆ หรอใชในการออกรายงานทซบซอนและไมไดมงเนนทความสวยงาม ซงโปรแกรมไมขนอยกบชนดหรอเครองคอมพวเตอร อกทงค าสงตาง ๆ ใกลเคยงกบภาษาองกฤษ ท าใหท าความเขาใจไดงาย ใชเปนเอกสารอางองหรอคมอประกอบได ซงปจจบนภาษาโคบอลนกยงเปนทนยมใชในงานธรกจดานการเงน การธนาคาร ซงท างานอยบนเครองแมขายขนาดใหญเชน เครองเมนเฟรม เปนตน อยางไรกตามภาษานยงมขอจ ากดอยคอนขางมาก ตวอยาง เชน การก าหนดโครงสรางโปรแกรมทแนนอน และโปรแกรมทเขยนจงคอนขางยาวมากจงไมเหมาะกบงานทมการค านวณทซบซอน PASCAL มาจาก ชอของ Blasie Pascal ผประดษฐเครองค านวณ Pascaline Calculator ซงเปนตนแบบของคอมพวเตอรในปจจบน เปนภาษาทเอออ านวยในการพฒนาซอฟตแวรแบบโครงสราง นยมใชบนเครองไมโครคอมพวเตอร มตวแปลภาษาทงแบบ compiler และ interpreter ซงการจบค าสงแตละค าสงจะตองมเครองหมาย “;” เนองจาก Pascal เปนโปรแกรมทเขยนไดงาย สามารถประมวลไดเรวและรปแบบของค าสงมความชดเจนไมจ ากดลกษณะงาน จงเหมาะกบผเรมตนพฒนาซอฟตแวรโครงสราง ดงจะเหนวาจะใชเปนภาษาทใชสอนในสถาบนการศกษา ซงภาษานปจจบนยงเปนทนยมอย และน ามาเขยนในลกษณะของการพฒนาเชงวตถ Object Pascal ภายใตชอภาษาใหมวา Delphi นอกจากนภาษา Pascal ยงมขอจ ากดในคอไมเหมาะกบงานดานธรกจขนาดใหญทมขอมลมากๆ หรอใชในการออกรายงานทซบซอนและสวยงาม

BASIC มาจาก Beginner’s All-purpose Symbolic Instruction Code มจดประสงคส าหรบใชในการสอนนกศกษาทวทยาลย จากนนขยายวงกวางมาใชในทางธรกจ นยมใชบนเครองไมโครคอมพวเตอร มลกษณะการท างานแบบโตตอบ จงเหมาะกบผเรมตนพฒนาซอฟตแวร ส าหรบในเวอรชนแรกๆ มตวแปลภาษาแบบ interpreter แตเวอรชนหลงสามารถใชไดทง 2 แบบ ซงขอดของภาษานคอ เนองจากเปนโปรแกรมสามารถตรวจสอบและแกไขขอผดพลาดไดทนทจงท าใหการพฒนาซอฟตแวรสามารถท าไดอยางรวดเรว อกทงงายตอการเรยนร และสามารถใชงานไดทงเครองขนาดใหญ

Page 13: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

13

จนถงเครองระดบเลก (Personal Computer: PC) ซงภาษานมขอจ ากดคอไมสนบสนนโปรแกรมประเภทโครงสราง จงไมเหมาะกบงานขนาดใหญ

C ถกพฒนาโดย Dennis Ritchie ป ค.ศ. 1972 ณ ศนยวจย Bell Lab เปนภาษามประสทธภาพการท างานใกลเคยงภาษาแอสเซมบล โดยมจดประสงคส าหรบใชเขยนซอฟตแวรระบบ จากนนขยายวงกวางมาใชในงานดานตาง ๆ ไดแก โปรแกรมระบบปฏบตการ ระบบจดการฐานขอมล โปรแกรมประยกตตางๆโปรแกรมทางดานกราฟก เชน เกมส ภาษาซเปนภาษาทไดรบความนยมคอนขางมาก เนองจากเปนภาษาทรวมเอาขอดของภาษาระดบสงในเรองความยดหยน และการพฒนาโปรแกรมทงายรวม กบขอดของภาษาแอสเซมบลในเรองการประมวลทเรวมากกวาภาษาระดบสงอน นอกจากนยงสามารถพฒนาซอฟตแวรโตตอบกบฮารดแวรไดโดยตรง แตทงนภาษาซเองกยงมขอจ ากดคอไมมรปแบบค าสงทตายตว ท าใหเรยนรยากกวาภาษาระดบสงอน การตรวจสอบโปรแกรมคอนขางยาก จงไมเหมาะกบงานทเกยวกบการออกรายงานทซบซอน

ภาษาระดบสงมาก (Very High-Level Language) มลกษณะของภาษาทออกแบบมาเพอใหงายตอการใชงายและรวดเรว ซงมกจะเหนในลกษณะ

ทเปนโปรแกรมแบบวชวล (Visual Programming) คอมลกษณะการท างานทใหผพฒนาสามารถพฒนาซอฟตแวรโดยวธการลาก-วาง (Drag and Drop) การเลอกใชเครองมอวซารด (Wizard) จากการออกแบบหนาจอในลกษณะโปรแกรมตนแบบหรอโพรโตไทป โดยมเครองมอทสามารถออกแบบโปรแกรมและมองเหนผลลพธไดทนท โดยจะชวยในการสรางแบบฟอรมบนหนาจอ เพอจดการกบขอมล รวมไปถงการสรางรายงาน สวนประกอบทส าคญไดแกเครองมอทชวยในการพฒนาโปรแกรม การสอบถามขอมลหรอการควร เชนระบบฐานขอมลเชงสมพนธจะมเครองมอชอวา QBE (Query by Example) เครองมอในการสรางรายงานและเครองมออนๆเชน เครองมอชวยสรางโปรแกรม (Application Generators) ทมรปแบบการพฒนาเปนแบบวชวล คอ

การออกแบบและพฒนาโปรแกรมโดยเรมตนจากการออกแบบจอภาพ (Graphical User Interface) ทผใชงานตองการ และความสามารถในการสรางโปรแกรมโคดอตโนมต (Automatic Code Generation) ท าใหผพฒนาซอฟตแวรลดระยะเวลาในการพฒนาโปรแกรม

ภาษาชวยคนหาขอมล (Query Languages) เปนภาษาทชวยคนหาหรอดงขอมลจากฐานขอมล ภาษานงายตอการใชงาน เนองจากมรปแบบใกลเคยงภาษาองกฤษมาก ไดแก ภาษา SQL (Structured Query Language) หรอ QBE (Query-By-Example)

เครองมอชวยสรางรายงาน (Report Generators or Report Writer) สามารถก าหนดเงอนไข และขอมลทน าออกรายงาน รวมไปถงรปแบบของการออกรายงาน ส าหรบภาษาระดบสงมากนท าใหผพฒนาซอฟตแวรสามารถผลตซอฟตแวรไดอยางรวดเรว อกทง

การลดความผดพลาดของโปรแกรมใหนอยลง ซงความสามารถตางๆสามารถสรปไดดงน เปนภาษาทงายตอการเรยนร ค าสงแตละค าสงสอความหมายไดชดเจน ประหยดเวลาในการพฒนาซอฟตแวรไดมาก

Page 14: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

14

สนบสนนระบบจดการฐานขอมล ท าใหสามารถจดการกบขอมลไดอยางสะดวกและรวดเรว สามารถสรางแบบฟอรมเพอจดการฐานขอมล และออกรายงานไดงาย สามารถท างานในลกษณะโตตอบได ผพฒนาซอฟตแวรไมตองรรายละเอยดการท างานของฮารดแวร และโครงสรางของโปรแกรม

ภาษาธรรมชาต (Natural Language) มลกษณะการเขยนคลายภาษาธรรมชาตหรอ ภาษาพดของมนษย เปนแบบไมเปนล าดบการ

ปฏบตงาน (Non-Procedural Language) จงไมมรปแบบแนนอนตายตว คอมพวเตอรจะพยายามแปลประโยคสงงานเหลานน ถาไมเขาใจจะถามยอนกลบมาเพอยนยนความถกตอง ถกพฒนามาจากเทคโนโลยทางดานระบบผเชยวชาญ (Expert System) ซงอยในสาขาปญญาประดษฐ (Artificial Intelligence: AI) ซงตองเกบขอมลตางๆ เปนฐานความร (Knowledge base) เพอจะใชในการแปลความหมายค าสงตาง ๆ

1.2 ววฒนาการของภาษาทใชในการพฒนาโปรแกรม การพฒนาโปรแกรมคอมพวเตอรไดมการววฒนาการมาตงแตในยคเรมตนของการสรางเครอง

คอมพวเตอร โดยในยคนนยงไมมการพฒนาโปรแกรมทมรปแบบของภาษา (Programming Code) ทหลากหลายและมความสามารถสงเหมอนในปจจบน การพฒนาซอฟตแวรจงเปนลกษณะการอาศยมนษยในการก าหนดการท างานของเครองคอมพวเตอรเปนสวนใหญ ตวอยางเชนการใชปมเพอควบคมการท างานหรอการสลบสายไฟตางๆ ตอมาไดมการน าเอาขนตอนการท างานหรอชดค าสงมารวบรวมบนกระดาษเจาะร (Punch Card) โดยมเครองส าหรบอาน ในสมยนนอาจจะไมมการสงใหเครองคอมพวเตอรท างานในลกษณะของการพฒนาซอฟตแวร เนองจากชดค าสงไมไดอยในรปของโปรแกรมภาษา แตลกษณะของชดค าสงสวนใหญจะเปนการสงงานใหเปนภาษาเครอง (Machine Language) โดยตรงซงเปนเลขฐานสอง (Binary Code) ชดค าสงเหลานสวนใหญจะมขนาดเลกเนองจากค าสงมความซบซอนและยากตอการตรวจสอบหรอแกไขขอผดพลาดสวนการแสดงผลกเชนกนกจะแสดงผลในรปของเลขฐานสอง อาจจะใชหลอดไฟแสดงผลแทน เชน ถาหลอดไฟปดกจะหมายถงเลข 0 หรอ 1 เมอหลอดไฟเปด การใชชดค าสงเพอควบคมการท างานของเครองคอมพวเตอรแบบนมความซบซอนมากเนองจากวาผพฒนาซอฟตแวรเองจะตองมความเขาใจในตวฮารดแวรเปนอยางมาก และจะตองเขาใจภาษาเครองอกดวย จากปญหานท าใหมความคดทจะพฒนาจากชดค าสงใหเปนโปรแกรมภาษาท มรปแบบของไวยากรณ (Program Syntax) และโครงสราง (Programming Structure) ทชดเจนมากขน นกพฒนาซอฟตแวรเองสามารถพฒนาเปนโปรแกรมไดโดยทไมตองอาศยความรเกยวกบฮารดแวร

จากอดตถงปจจบน เราจะเหนวาโปรแกรมคอมพวเตอรมการเปลยนแปลงเรอยมาโดยมการพฒนาใหอยในรปแบบของภาษาตางๆ ซงแตละภาษากแตกตางกนไปไมวาจะเปนไวยากรณ โครงสราง หรอความสามารถในการท างานซงท าใหนกพฒนาสามารถเลอกภาษาทเหมาะสมทจะน าไปใชพฒนา

Page 15: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

15

งานของตวเองอยางไรกตามเราอาจจะแบงโปรแกรมคอมพวเตอรไดตามลกษณะโครงสรางขอ งโปรแกรมไดเปน 4 ประเภทหลกดงน

1. โปรแกรมแบบไมมโครงสราง (Unstructured Programming) 2. โปรแกรมแบบมโครงสรางเปนแบบโพซเยอร (Procedural Programming) 3. โปรแกรมแบบมโครงสรางเปนแบบโมดล (Modular Programming) 4. โปรแกรมเชงวตถ (Object-Oriented Programming)

1.2.1 โปรแกรมแบบไมมโครงสราง (Unstructured Programming) ลกษณะของโปรแกรมแบบไมมโครงสรางนนนบไดวาอยชวงเรมตนของการพฒนาโปรแกรม

คอมพวเตอร ซงแนวคดของการพฒนาโปรแกรมในสมยนนกยงเปนทนยมใชอยในปจจบน นนกคอการพฒนาโปรแกรมโดยเขยนเปนโปรแกรม (Source Code) ซงเปนภาษาทมนษยสามารถเขาใจได หลงจากนนกน าเอาโปรแกรมมาแปลงใหเปนภาษาเครองโดยอาศยโปรแกรมอกประเภทหนงทเรยกวาคอมไพเลอร (Compiler) ซงวธนท าใหนกพฒนาโปรแกรมไมจ าเปนทจะตองมความรเกยวกบภาษาเครอง ท าใหการพฒนาโปรแกรมมความสะดวกรวดเรวมากยงขน อยางไรกตามโครงสรางของโปรแกรมภาษาแบบไมมโครงสรางน โปรแกรมจะถกเขยนรวมกนทงหมดโดยการท างานของโปรแกรมจะเรยงล าดบจากบนลงลาง (Top-down) ไมมการบงบอกวาสวนไหนของโปรแกรมท าหนาทอะไร การพฒนาซอฟตแวรลกษณะน ถาโปรแกรมมขนาดใหญขน โปรแกรมกจะเรมซบซอนและยากแกการตรวจสอบขอผดพลาด อกประเดนหนงคอเนองจากโปรแกรมจะถกเขยนรวมกนเปนชนเดยวกนทงหมด หากตองการทจะท าซ าขนตอนใดขนตอนหนง โปรแกรมในสวนนนๆกจะตองเขยนซ าอก ท าใหโปรแกรมมขนาดใหญเกนความจ าเปน ตวอยางของโปรแกรมประเภทนไดแก ภาษา Assembly และภาษา Basic1

1.2.2 โปรแกรมแบบมโครงสรางเปนแบบโพซเยอร (Procedural Programming) ลกษณะของโปรแกรมประเภทน โปรแกรมจะถกแบงออกเปนโปรแกรมยอยเรยกวาโพซเยอร (Procedure) หรอฟงกชน (Function)2 เรยกวา Procedural Programming ดงนนโปรแกรมหนงๆกจะประกอบไปดวยโปรแกรมยอยหลายๆโปรแกรมในบรรดาโปรแกรมยอยเหลานจะตองมอยางนอยหนงโปรแกรมยอยทท าหนาทเปนโปรแกรมยอยหลกเรยกวาโปรแกรมหลก (Main Program) ซงจะท า

1 ภาษา Basic เปนภาษาหนงทมการพฒนาและเปลยนแปลงเรอยมาตงแตในอดตและปจจบนกยงจดเปนภาษาหนงทไดรบความนยมเชน Quick Basic, Visual Basic, Active Server Page (ASP) และ ASP .NET 2 โปรแกรมบางภาษากจ าแนกขอแตกตางระหวางโพซเยอรกบฟงกชนตวอยางเชนภาษา Basic โดยก าหนดวาโพซเยอรไมสามารถสงคากลบได และฟงกชนสามารถสงคากลบได

Page 16: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

16

หนาทเปนจดเรมตนของการท างานของโปรแกรม และจากโปรแกรมหลกกสามารถเรยกใชงานจากโปรแกรมยอยโดยอาศยหลกการของ Function Call ดงตวอยางในภาพน

Procedure 1

Procedure 2

Procedure 3

Main Procedure

Call Procedure 1

Call Procedure 2

Call Procedure 3

….

Program

รป 1.2 โปรแกรมแบบมโครงสรางแบบโพซเยอร

การแบงหนาทการท างานออกเปนสวนยอยๆน แตละโพซเยอรกสามารถมการสงคาไปหรอกลบ (Parameter Passing and Return Values) ท าใหการใชงานโพซเยอรมความยดหยนมากยงขน เนองจากมการแบงหนาทการท างานออกเปนโปรแกรมยอยตางๆ และสามารถเรยกใชงานโปรแกรมยอยขนมาท างานกครงกได ท าใหเกดประสทธภาพในการน าเอาโปรแกรมกลบมาเรยกใชโดยไม ตองเขยนซ าอก นอกจากนการใชโพซเยอรกยงท าใหซอสโคดมความเปนระเบยบมากยงขน การท างานแบบนนอกจากจะท าใหเกดความคลองตวในการจดการกบโครงสรางของโปรแกรมแลว กยงท าใหการจดการและการตรวจสอบแกไขขอผดพลาดสามารถท าไดงายอยางไรกตาม การท างานของโปรแกรมลกษณะนยงเปนลกษณะจากบนลงลางอย เพยงแตวาขอบเขตของการท างานจะอยภายในแตโพซเยอรนนเอง ตวอยางของโปรแกรมประเภทนไดแกโปรแกรมภาษา C, Pascal, Fortran, Cobol, Ada และ Quick Basic 1.2.3 โปรแกรมแบบมโครงสรางเปนแบบโมดล (Modular Programming)

ส าหรบการพฒนาโปรแกรมโดยแบงออกเปนโพซเยอรหรอฟงกชน เมอโปรแกรมมขนาดใหญขนสงผลใหมโพซเยอรเกดขนมากมาย และการจดการมความยากขนตามไปดวย ดงนนจงมแนวคดทจะน าเอาโพซเยอรยอยทท าหนาทคลายกนมาจดใหอยในหมวดหมเดยวกนเรยกวา โมดล (Module) ซงในแตละภาษากอาจจะมชอเรยกแตกตางกนไปตวอยางเชน ภาษาซ เรยกวาไลบราล (Library) และใน

Page 17: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

17

ภาษาปาสคาลเรยกวายนต (Unit) ซงเราเรยกการจดการโปรแกรมในลกษณะนโดยรวมวาเปน Modular Programming ซงแตละโมดลจะสามารถน าไปประกอบกนเปนโปรแกรมได หรอสามารถน ากลบมาใชใหม ท าใหลดขนตอนและลดเวลาในการพฒนาโปรแกรมลง ดงแสดงในรปภาพตอไปน

Module 1 Module 2 Module 3

Program

Include

Include

Include

รป 1.3 การก าหนดโครงสรางของโปรแกรมแบบ Modular Programming

ส าหรบการพฒนาโปรแกรมโดยแบงออกเปนโมดลแทจรงแลวเปนหลกการเดยวกนกบการแบงโปรแกรมออกเปนโพซเยอรตางๆ เพยงแตโปรแกรมทมขนาดใหญขนอาจจะประกอบไปดวยหลายโมดลเขาดวยกน และแตละโมดลกจะประกอบ ไปดวยหลายๆโพซเยอรทท าหนาทคลายกนมาอยรวมกนนนเอง การแบงโปรแกรมทมขนาดใหญออก เปนโมดลยอยตางๆท าใหการจดการกบโปรแกรมงายขน ตวอยางเชนส าหรบโครงการขนาดใหญทมการพฒนาซอฟตแวรแบบทมงาน อาจจะมการแบงงานออกเปนโมดลเพอใหแตละทมงานรบผดชอบซงท าให ทมงานสามารถพฒนาโปรแกรมหลายๆโมดลพรอมกนได ขอดอกอยางหนงส าหรบการแบงงานเปนโมดลคอความสามารถในการน าเอาโมดลกลบมาใชงานใหมไดอก

การพฒนาโปรแกรมแบบมโครงสรางนปจจบนกยงเปนทนยมส าหรบการพฒนาซอฟตแวรทวไปจนบางครงเราเรยกการพฒนาซอฟตแวรแบบนวาเปน Traditional Programming Language อยางไรกตามการพฒนาซอฟตแวรแบบน ตวแปรและฟงกชนยอยจะถกเขยนอยรวมกนซงท าใหเกดปญหาในการควบคมขอบเขตของการเขาถงขอมล (Scope of Variables) และการเรยกใชงานฟงกชนปญหานเองท าใหหนาทการท างานของฟงกชนหรอขอบเขตของขอมลในแตละงาน ไมสามารถแบงออกไดอยางชดเจนเมอโปรแกรมมขนาดใหญขน

1.2.4 โปรแกรมเชงวตถ (Object-Oriented Programming) โปรแกรมเชงวตถ คอ โปรแกรมทมโครงสรางแบงออกเปนออบเจกตตางๆ หรอเราเรยกการ

พฒนาโปรแกรมแบบนวาเปนการพฒนาโปรแกรมเชงวตถ (Object-Oriented Programming) เรยกสนๆวา OOP การพฒนาโปรแกรมเชงวตถมแนวคดของการพฒนาโปรแกรมตางจากการพฒนาแบบ

Page 18: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

18

โครงสราง โดยแนวคดของการแกไขปญหานนไดมองปญหาออกเปนวตถ (Object) และเปนการน าเอาวตถตางๆมาประกอบกนเปนโปรแกรม แตละวตถกจะมความเปนเอกเทศหรอมความสมบรณในตวเอง คอมทงขอมล (Data members) และเมทธอดทใชในการเขาถงและจดการกบตวขอมล ดงนนในแตละโปรแกรมกอาจจะมวตถหลายๆวตถมาประกอบกนเปนโปรแกรมขนาดใหญ โดยทแตละวตถกจะแยกหนาทท างานกนไป ทงนวตถแตละตวสามารถตดตอสอสารระหวางกนไดดวยการเรยกใชออบเจกตอนๆเรยกวา Message Passing จะเหนวาซอฟตแวรประกอบไปดวย Object A ซงท าหนาทในการแสดงสวนตดตอกบผใช (Graphical User Interface) เพอรอรบค าสงหรอขอมลจากผใช หลงจากนน Object A กจะเรยก Object B ซงท าหนาทในการเชอมตอกบฐานขอมล เมอไดขอมลแลว Object B กสามารถสงขอมลกลบไปให Object A เพอท าการแสดงผลตอไป

ในยคของการพฒนาโปรแกรมเชงวตถน หรอเรยกกนวาเปนยคสมยทส Fourth Generation Programming Language (4th GL) เปนยคของการพฒนาโปรแกรมแบบวชวล (Visual Programming) ซงตามหลกการของวศวกรรมซอฟตแวร (Software Engineering) ในปจจบนนไดใหความส าคญกบผลลพธของโปรแกรม (Program Output) เปนหลก เชน การจดท าตนแบบของซอฟตแวร (Program Prototyping) โดยผลลพธนมกจะแสดงออกมาเปนแบบกราฟก เรยกวา Graphical User Interface (GUI) ดงนนจะเหนไดวาการพฒนาโปรแกรมแบบวชวลนสามารถใหนกพฒนาซอฟตแวรสราง Output ขนมาในรปแบบของฟอรมและรายงานในลกษณะของการลากและวาง (Drag and Drop) คอนโทรลตางๆมาไวบนฟอรม ยกตวอยางคอนโทรล เชน InputBox, Static Text หรอ List Box ซงทจรงแลวในมมมองของการพฒนาเชงวตถ คอนโทรลแตละตวกคอแตละออบเจกตนนเอง จะเหนไดวาการพฒนาซอฟตแวรในลกษณะวชวลนท าใหนกพฒนาซอฟตแวรสามารถพฒนาโปรแกรมไดเรวขน และไดผลลพธ (รปแบบหนาจอ) ตรงตามความตองการ นอกจากนการลากและวางคอนโทรลกคอการเรยกใชออบเจกตทถกสรางขนมาโดยคอมไพเลอรแตละตว ท าใหชวยลดระยะเวลาในการพฒนาซอฟตแวร หรอในการทจะพฒนาออบเจกตนนขนมาใหม ตวอยางของโปรแกรมทสนบสนนการท างานแบบวชวลนไดแก Visual C++, Visual Java, Visual Foxpro และ Visual Basic

1.3 แนวคดและหลกการพฒนาโปรแกรม กอนทจะเรมมการพฒนาเปนโปรแกรมนน นกพฒนาโปรแกรมจะตองท าความเขาใจถง

วตถประสงคและขอบเขตของปญหา ซงเรยกวาการท า User Requirement และจะตองศกษาความเปนไปไดของการแกไขปญหา (Feasibility Study) ขนตอนเหลานจดวาเปนสงส าคญอยางยงเนองจากโปรแกรมทพฒนาจะส าเรจหรอไมขนอยกบความสามารถของนกพฒนาโปรแกรมเองในการทจะวเคราะหโจทยหรอปญหา และท าการวางแผนการพฒนาลวงหนากอนทจะเรมพฒนาซอฟตแวร ในการพฒนาโปรแกรมแบบมโครงสราง ขนตอนเหลานจดเปนสวนส าคญอยางหนงหรอเรยกไดวาเปนวงจรชวตของการพฒนาโปรแกรม (Software Development Life Cycle: SDLC) ซงผใชกจะตองใหความรวมมอกบนกพฒนาโปรแกรมเพอใหส าเรจตามทไดคาดหวงเอาไว ส าหรบการแกไขปญหาโดยการ

Page 19: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

19

พฒนาโปรแกรมเชงวตถนนเรยกวาโดเมนปญหา (Domain Problem) โดยการวเคราะหปญหานนจะอาศยการมองในรปแบบของออบเจกต ซงมความใกลเคยงกบปญหาทเกดขนในโลกความเปนจรง การวเคราะหปญหาตามแนวคดของการพฒนาซอฟตแวรเชงวตถนจะท าใหนกพฒนาซอฟตแวรไมจ าเปนตองค านงถงรายละเอยดของการพฒนา ตวอยางเชน โปรแกรมเครองคดเลข กยงไมตองคดวาขอมลทปอนเขามาจะเปนตวเลขจ านวนเตมหรอเลขทศนยม แตจะมองวาเครองคดเลขนเปนออบเจกตเครองคดเลขทมขอมลเปนตวเลขและฟงกชนทใชจดการกบขอมลนคอการบวก ลบ คณและหาร และในการพฒนาออบเจกตใหอยในรปของโปรแกรมออบเจกตทออกแบบจะถกสรางใหอยในรปของคลาส ซงเราอาจจะเรยกไดวาออบเจกตกคอคลาสนนเอง ส าหรบการพฒนาโปรแกรมทมขนาดใหญขน เราอาจจะมองวาโปรแกรมหนงๆกอาจประกอบไดดวยหลายๆออบเจกตนนเอง ซงในหล กการแลวออบเจกตแตละตวกจะมบทบาทและหนาททตางกนไป

ในการเขยนชดค าสงงานดวยภาษาคอมพวเตอรจะมแนววธการอยสองรปแบบดวยกนคอ แบบทเรยกวา ภาษาเชงกระบวนการค าสง (Procedural Programming) และแนวเชงวตถ (Objected Oriented Programming) การพฒนาซอฟตแวรภาษาเชงกระบวนการค าสงจะเรมตนจากการตงตวแปร (Variable) เพอท างานจองเนอทในหนวยความจ าและจดเตรยมเนอทในการจดเกบขอมล จากนนกเขยนขนตอนหรอล าดบในการทจะสงใหเครองคอมพวเตอรท างานตามทก าหนด ซงล าดบในการท างานเหลานจะมการจดหมวดหมในการท างาน กลาวคอล าดบการท างานทเปนเรองเดยวกนหรอการท างานเพอใหไดผลลพธทตองการจะน ามารวมในหมเดยวกน ตวอยางเชน ระบบบญชเงนเดอน จะมการตงตวแปรชอ อตราคาจาง (RateOfPay) และ จ านวนชวโมงทมการวาจาง (WorkingHours) และจะตองมการค านวณวาในแตละชวงเวลา จะตองค านวณคาจางทตองจายใหกบผรบจาง ดงนนกจะมพฒนาซอฟตแวรหรอชดค าสงงานเพอใหค านวณจ านวนคาจางทตองจาย ซงในการเรยกโปรแกรมมาท างานอาจมการสงคาตวแปรไปให เชน อตราคาจาง และ จ านวนชวโมงการท างาน และเมอค านวณเรยบรอยกจะมการสงขอมลคนมาให เปนตน

สวนการพฒนาซอฟตแวรเชงวตถจะแตกตางจากภาษาเชงกระบวนค าสง ผพฒนาโปรแกรมเชงวตถจะตองมมมมองทอยในรปแบบของเชงวตถ จากตวอยางขางตน ในการค านวณหาคาแรงของพนกงานแตละคนจะมตวแปรทก าหนดความแตกตางของพนกงาน คอ อตราคาจางตอชวโมงอาจแตกตางกน และจ านวนชวโมงในการท างานของพนกงานแตละคนกแตกตางเชนกน ดงนนตวแปรเหลานเราเรยกวาเปน คณสมบตของออบเจกต (Attribute) แตกระบวนการหลกในการท างานขางตนจะประกอบดวยการค านวณการค านวณคาจางทตองจาย นอกจากนอาจมรายการอนๆ อก เชน การค านวณหาภาษหก ณ ทจาย การพมพสลปเงนเดอน ซงในเชงออบเจกตเรยกวาพฤตกรรมของออบเจกต (Behaviour) ดงนนการมองแบบเชงวตถจะตองพยายามวเคราะหปญหาเพอมองภาพเปนออบเจกต และวเคราะหองคประกอบทส าคญของออบเจกต ความสมพนธระหวางออบเจกต และการท างานรวมกนระหวางออบเจกต ซงจะน าไปสการออกแบบเปนคลาสและการพฒนาเปนโปรแกรมตอไป

Page 20: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

20

บางครงการพฒนาโปรแกรมเชงวตถอาจมองวาเปนสรางออบเจกตโมเดลจากปญหาจรง (Real World Object Modeling) เนองจากการแกไขปญหาในเชงวตถนน โมเดลของออบเจกตจะถกสรางจากการวเคราะหปญหาจรงซงมองวาปญหามขอมลอะไร (Data) และสามารถมเหตการณอะไรเกดขนได (Behavior) การแบงโปรแกรมออกเปนออบเจกตตางๆ โดยทแตละออบเจกตมความสมบรณในตวเองท าใหเพมความสามารถของซอฟตแวรคอการน าเอาโคดกลบมาใชอก หรอสามารถเรยกใชงานออบเจกตใดๆกไดซงขนอยกบเหตการณเรยกวา Event-Driven Programming ในทนจะขอยกตวอยางโปรแกรมทมหนาจอเปนลกษณะของฟอรมและมปมตางๆ เมอมการเลอกกดปมใดๆ เราจะเรยกวาเปนเหตการณของการกดปม (On_Click Event) ออบเจกตทสมพนธกบปมนนๆกจะถกเรยกขนมาใชงาน

สงส าคญอยางหนงส าหรบการพฒนาโปรแกรมเชงวตถ คอ หลกการน าโปรแกรมกลบมาใชไดอก (Code Reusability) จากในอดตจะเหนไดวาการพฒนาซอฟตแวรตวหนงจะใชระยะเวลานาน บางครงอาจเปนหลายๆเดอนหรออาจจะเปนปกได การพฒนาซอฟตแวรแบบออบเจกตโอเรยนเทดโดยการจดโครงสรางของโปรแกรมออกเปนออบเจกตตางๆนน สามารถชวยลดระยะเวลาในการพฒนาโปรแกรมโดยการน าเอาออบเจกตทมอยแลว หรอออบเจกตทถกสรางโดยโปรแกรมเมอรอน มาประกอบกนเปนซอฟตแวรใหมๆไดอก ดงนนจะเหนไดวาปจจบนมการพฒนาออบเจกตใหมๆขนมามากมายโดยอาจจะมาจากนกพฒนาโปรแกรมทวไปหรอจากผผลตซอฟตแวรอนๆเรยกวาเปน Third-party Packages

อกตวอยางทนยมยกมาใหเหนทางการพฒนาซอฟตแวรเชงวตถ คอ คลาสของรถ ตวแปร หรอ คณลกษณะทใชในการอธบายความแตกตางของรถแตละคน คอ ยหอ ส และจ านวนผโดยสารทสามารถนงไดกเปนอกตวแปรทใชอธบายความแตกตางในเชงคณสมบตของตวรถ สวนพฤตกรรมของรถ เชน สามารถขบเคลอนไปขางหนา ถอยหลง และการหยดเปนตน ซงขอมลเหลานจะถกรวบรวมมาเปนเสมอนพมพเขยวทใชในการผลตรถ และรถแตละคนทผลตออกมาเราจะเรยกวา เปนอนสแตนซ (Instance) ซงแตละอนสแตนซจะมคณสมบต (Attribute) และเมทธอด (Method) เปนของตวเอง แนวการพฒนาเชงวตถอกแนวหนงกคอ ความพยายามในการท าตามแบบสถาปตยกรรมทางฮารดแวร จะเหนวาในทางฮารดแวร ผใชสามารถเลอกซออปกรณตางๆ ตามทตองการ สงทตองทราบคอวาสวนเชอมประสานเปนแบบทตองการหรอไม แนวคดนจะคลายกบการตดตงอปกรณฮารดแวรของคอมพวเตอรทสามารถมอปกรณเมนบอรด ฮารดดสต หนวยความจ า และซดรอม ซงหากมอปกรณใดเสยหรอไมสามารถใชงานได กสามารถทจะเปลยนเฉพาะอปกรณนนๆ โดยทจะมองวาอปกรณตางๆนนเสมอนกบวาเปนออบเจกตตางๆทสามารถน ามาประกอบกน และท างานรวมกนเปนเครองคอมพวเตอรหนงเครองนนเอง ซงสงทเราตองทราบคอมาตรฐานทสามารถเขากนได ซงเทยบไดกบอนเตอรเฟสในการพฒนาซอฟตแวรเชงวตถ และสงทส าคญของออบเจกตทสามารถประกอบการท างานคอการทออบเจกตจะสงขอมลหรอประสานกนจะท าไดอยางไร

ในการออกแบบเชงวตถทส าคญคอการรวบรวมคณสมบตและพฤตกรรม ซงคณสมบตจะแทนดวยตวแปรคอ สงทใชในการอธบายความแตกตางระหวางวตถตางๆ เชน ตวอยางเรอง รถ โครงของตวถงของรถอาจเหมอนกน แตการตกแตงจะท าใหรถแตละคนแตกตางกน เชน เครองยนตทใสในรถแตละ

Page 21: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

21

คน กท าใหราคาขายแตกตางกน หรอ อยางกรณของรปทรงเรขาคณต เสนตรง สามเหลยม วงกลม ทงหมดถอเปนรปทรงเรขาคณต แตจ านวนจดทใชในการสรางรปทรงแตกตางกนท าใหรปทรงทเหนแตกตางกน สวนพฤตกรรม คอ บรการ (Service) หรองานทวตถตองท า เชน กรณของรปทรงเรขาคณต เราตองการบรการคอการวาดรปทรงนนๆ หรอ ของรถอาจเปนการขบเคลอนของรถ เปนตน ดงนนจะเหนวาการพฒนาเชงวตถสอดคลองกบความเปนจรงในโลกมนษยมากขน ถาตองการฟงกชนงานใดเพมกเพยงแตซอฟงกชนมาใสเพมโดยทเราไมจ าเปนตองทราบวาฟงกชนนนมกรรมว ธในการท างานอยางไร หรอไมตองทราบวาภายในฟงกชนมรายละเอยดอะไรบาง แตสงทตองทราบคอสวนเชอมประสาน หรอ สวนทแตละออบเจกตจะตดตอกน ดงนนในการออกแบบหรอพฒนาซอฟตแวรเชงวตถ ภาษาคอมพวเตอร ตองมคณสมบตทสนบสนนการพฒนาซอฟตแวรเชงวตถ ซงตองประกอบดวยหลกการ ดงน

1. ความสามารถในการสบทอด (Inheritance) เปนเทคนคทส าคญในการสนบสนนแนวคดของการน าเอาโปรแกรมโคดกลบมาใชงานใหม โดยวธการใชประโยชนจากโปรแกรมโคดทเขยนขนอยเดม และโปรแกรมใหมนจะใชประโยชนจากสงทมอยเพอการตอยอดใหมการท างานทเฉพาะเจาะจงมากยงขน โดยอาศยเทคนคเรยกวาการสบทอดและสบสกล โดยออบเจกตทสรางขนนนไมจ าเปนตองเปนออบเจกตใหมทงหมด แตอาจจะเปนออบเจกตทพฒนาขนมาเปนแบบออบเจกตลก (Child Object) และมการสบทอดจากอกออบเจกหนง (Parent Object) โดยทออบเจกตแมจะมการท างานทเปนกลาง (Generalization) และ ออบเจกตลกทสบทอดจะมการท างานทเฉพาะเจาะจง (Specialization) ลงไปในงานนนๆ ดงตวอยางออบเจกต Window ซงการแสดงผลหนาจอวนโดวทมคาต าแหนง Coordinate X1, Y1, X2, Y2 มขนาด ส ซงเปนหนาตางปกต ทสามารถถกน าไปสบทอดเปนออบเจกตหนาตางในรปแบบตางๆเชน Dialog Window หรอ Pop-up Window โดยทออบเจกตหนาตางทสบทอดนนสามารถสบทอดเอาคณสมบตตางๆมาจากออบเจกตแม ทงในสวนของคณสมบตและการพฤตกรรม โดยทจะลดความซ าซอนในการพฒนา ลดขอผดพลาด และเพมประสทธภาพในการพฒนาโปรแกรมมากยงขน

2. ความสามารถในการเกบซอนขอมล (Data Encapsulation) โดยทแนวคดนมองวาแบงสถาปตยกรรมของซอฟตแวรเปนออบเจกตนน ควรจะตองมวธการปองกนคณสมบตของออบเจกตจากการมองเหนและการเขาถงโดยออบเจกตอนๆ ซงทงนรวมถงคณสมบตและพฤตกรรมดวย ซงการเกบซอนนนสามารถก าหนดไดตามความเหมาะสม ตามทแตออบเจกตจะอนญาตใหสามารถมองเหนไดซงทงนเพอใหเหมาะสมตอการเรยกใชงานออบเจกต ตวอยางเชนออบเจกตรถยนต หากตองการใหรถยนตตดเครอง ผใชงานกเพยงแคเรยกใชพฤตกรรม StartEngine() ของออบเจกต ซงผทใชงานออบเจกตรถยนตกคงไมตองรวา การจายไฟ จายน ามน หรอหวเทยน ท างานอยางไร

Page 22: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

22

3. ความสามารถในการใชงานไดหลายรปแบบ (Polymorphism) ในการสบทอดคณสมบต ไมจ าเปนเสมอไปทจะตองสบทอดคณสมบตทกอยาง ในบางครงอาจตองมการแกไขล าดบในการท างานของฟงกชนเดมเพอใหการพฒนาไมตองเสยเวลาไปแกไขชดค าสงเดม ซงถามการแกไขชดค าสงเดม จะท าใหตองเสยเวลาในการตามแกไขโปรแกรมตางๆ ทใชฟงกชนทถกแกไข วธการทดคอ อนญาตใหมการเขยนชดค าสงใหมภายใตชอฟงกชนเดมทมอย เชน ในกรณของฟงกชน draw() ในคลาส shape จะเหนวาการวาดรปทรงตางๆ จะมกรรมวธในการวาดทแตกตางกน ดงนนคลาสของ Line, Polygon, Circle และ Rectangle สามารถทจะเขยนชดค าสง draw() คอมชอฟงกชนซ ากนแตการท างานภายในมความแตกตางกน

ความสามารถในการจดการโครงสรางขอมลแบบเชงนาม หรอ แอบแสตก (Abstract) ความหมายของขอมลแบบเชงนาม คอ ขอมลหรอกระบวนการทยงไมเกดขนจรง ซงในการพฒนาระบบงานขอมลอาจจะยงไมเกด หรอ ยงไมสามารถทจะอธบายไดวาขนตอนในการท างานเปนอยางไร แตเพอไมใหงานตองหยดชะงก การสรางคลาสเปนเชงนามกจะเปนอกวธหนง ซงในการทจะพจารณาวาภาษาใดเปนภาษาเชงวตถ ภาษาดงกลาวควรมคณสมบตตามทไดกลาวมา 1.4 การน าเอาโปรแกรมโคดกลบมาใชใหม (Code Reusability) หวใจส าคญของการออกแบบและพฒนาซอฟตแวรเชงวตถ คอ การพฒนาออบเจกตใหม ๆ ขนมาใชงาน โดยอาศยการพฒนาตอยอดจากออบเจกตเดมทมอย ซงในหลกการนเราเรยกวา Code Reusability ซงแนวคดนเปนแนวคดหลกของออบเจกตเพอใหการพฒนาซอฟตแวรสามารถกระท าไดอยางรวดเรว ลดขอผดพลาดการท างานของซอฟตแวร เนองจากออบเจกตหรอ คอมโพเนนททจะท าการตอยอดนนอาจจะไดรบการแกไขปญหาหรอไดรบการทดสอบมาเปนระยะเวลาหนงแลว ซงแนวคดนไดนกวจย Szyperski (1997) ไดเสนอรปแบบของคอมโพเนนท ทเหมาะสมทจะเปน unit deployment และสนบสนนแนวคดแบบ component-oriented เพอการสงตอเรยกไดวา “off-the-shelf” คอมโพเนนท ท าใหการน ากลบมาใชไดใหม ซงเหมาะส าหรบการพฒนาในลกษณะทเปนแอพพลเคชนขนาดใหญ

ส าหรบแนวคดของการน าเอาออบเจกตกลบมาใชงานใหม (Object Reusability) หมายถงการน าเอาสวนประกอบของซอฟตแวรกลบมาใชใหม ซงค าวาสวนประกอบในทน ไมจ าเปนตองเปนโมดล หากเราจะนยามเรองการน ากลบมาใชใหมแบบงายๆ กคอ ความสามารถทเราน าเอาโปรแกรมหรอสวนใดสวนหนงของโปรแกรมโคด น าไปใชท างานรวมกบโปรแกรมใหมได แมผใชโปรแกรมจะไมไดรถงรายละเอยดภายในของโคดนนๆวาท าไดอยางไร แตรวาสามารถท าอะไรได เสมอนกบเปนกลองด าทเพยงสนใจแต input ทรบเขาและ output ทสงออกมาเทานน แตการทเราสามารถน าโคดมาใชใหมไดนน ท าใหเราไมตองท างานซ าซอน ผลกคอท าใหโปรแกรมพฒนาไดรวดเรวขนและมขอผดพลาดทนอยลง สงผลใหเรองของการผลตซอฟตแวรมประสทธภาพนนเอง ดงนนเราพอจะสรปถงความส าคญของการน าเอาโคดกลบมาใช ไดดงน

Page 23: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

23

1) ลดเวลาและความพยายามในการสรางซอฟตแวรใหม 2) ลดคาใชจายในการสรางซอฟตแวรใหม 3) เพมคณภาพของระบบซอฟตแวร 4) ลดเวลาและความพยายามในการดแลระบบ

การน าเอาโปรแกรมโคดกลบมาใชใหม หากนกพฒนาพบวาสวนประกอบของผลตภณฑเกาทได

พฒนาไวสามารถน ามาใชกบผลตภณฑใหมทก าลงพฒนาอยได ในระยะหลง การพฒนาระบบมกเกดการเปลยนแปลงความตองการตางๆ ดงตอไปน

1) ฮารดแวรหรอซอฟตแวรระบบ เชน การเปลยนระบบปฏบตการทตองการใช 2) ผใชงานทไดรบมอบหมายหรอการตดตง เชน การเปลยนผใชหรอเปลยนแปลงความ

ตองการในการใชงานระบบ 3) ฟงกชนหรอคณสมบตในการใชงาน เชน การเปลยนแปลงขนตอนหรอลกษณะการท างาน

ในรายละเอยด การน าเอาโปรแกรมโคดกลบมาใช (Code Reuse) นนนอกจากจ าแนกออกเปนประเภทแลว

ยงสามารถจ าแนกไดตามระดบการ Reuse ซอฟตแวรทน าเอาโคดกลบมาใช ดงน

Reuse ระดบท 1 – ระดบฟงกชน (Function) ระดบท 1 หมายถง ฟงกชนในอดตทเราพฒนาซอฟตแวรนน เราเขยนภาษา Assembly หรอภาษา BASIC รนแรกๆ จะไมมฟงกชนใหใช การพฒนาซอฟตแวรกเลยใชค าสง GOTO ซงสงผลใหโปรแกรมมลกษณะทไมเปนระเบยบหรอไมเปนสดเปนสวน ซงการใชฟงกชนในยคแรก ๆ มลกษณะของการยบสวนโปรแกรมทเขยนซ าซอนไปเขยนอยในทเดยวกนเพอทจะไดประหยดทรพยากรตาง ๆ ของระบบโดยเฉพาะอยางยงกคอหนวยความจ า ซงเครองคอมพวเตอรสมยกอนหนวยความจ าจะมจ ากด หลงจากนนกวา 20 ป ความคดเกยวกบการ Reuse จงเกดขน มการสงเกตวา เมอเราใชฟงกชนในการสรางเนองานใดๆผทมาเรยกใชนนไมจ าเปนตองรรายละเอยดภายในเลย (Encapsulation) ผลลพธกคอ เกดการเรยกใชซ าๆ กนไดจากหลายโปรแกรม ท าใหลดงานลงไปได ขอผดพลาดของโปรแกรมกลดนอยลง เพราะวาเนอหาในฟงกชนนนถกทดสอบมาแลวหลายโปรแกรม และฟงกชนทเกดขนในยคแรกๆ นนมาจากภาษา FORTRAN ซงน าเอาฟงกชนทางคณตศาสตรเชน sin, cos, tan มาสรางเปนฟงกชน นนจงเปนทมาของค าวา "ฟงกชน" ถงยคปจจบน ฟงกชนในยคตอมามการพฒนาขนเพอเพมพารามเตอรตางๆ เพอเพมประสทธภาพอกทงความยดหยนของการท างานของฟงกชน สงผลใหเราสามารถพฒนาซอฟตแวรไดใหญขน จากนนแนวคดนจงเปนทมาของ Software Engineering เพอสรางคณภาพใหกบซอฟตแวรโดยในยคนน Top-Down Programming เปนทนยมมาก

Page 24: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

24

Reuse ระดบท 2 – ระดบโมดล (Module) โมดลถอวาเปนการท า Reuse ระดบท 2 ซงภาษาทผลกดนในการใช โมดลใหเปนทนยมกคอภาษา C โดยทเรยกวาเปนไลบราร (Library)โมดลเปนการจดขอบเขตของโปรแกรมใหมทสงกวาฟงกชน หรออาจกลาวไดวาโมดลเปนทรวมของฟงกชนทมลกษณะการท างานทเหมอนกนหรอคลายกนมาอยดวยกน มตวแปรและฟงกชนทเรยกใชอยในเฉพาะสวนของโมดล ตวอยางทนยมของโมดลคอ เรองการจดการกบ Input และ Output เชน การเรยกใชฟงกชน Print โดยมการสงคาเปนพารามเตอรของขอมลทตองการพมพ โดยผทเรยกใชงานฟงกชนนไมจ าเปนตองรวาฟงกชนมการตดตอกบจอภาพอยางไร ซงขนตอนการจดแบงโปรแกรมเปนแบบโมดลน เปนการพฒนาแบบกาวกระโดด เพราะการทรวบเอาเรองทเกยวกนเขาดวยกน (Abstraction) สงผลใหโมดลมความสมพนธกบโปรแกรมทเรยกใชคอนขางหลวม (Loosely Couple) ท าใหโมดลนนสามารถน าไปใชกบโปรแกรมอนได

Reuse ระดบท 2.5 – ระดบคลาส (Class) แนวคดของคลาสนนเปนแนวคดทคลายกบโมดลซงเปนแนวคดของออบเจกต จรงแลวแนวคด

ของคลาสนนมมานานแลวตงแตยคของภาษา Simula ซงนาจะกอนทมการคดคนโมดล แนวคดของคลาสมระดบการน ากลบมาใชสงกวาโมดลเนองจากทกอยางทมในโมดลกมในคลาสดวย แตสงทคลาสตางจากโมดลกคอ โมดลจะมเพยง Copy เดยวในหนวยความจ า แตคลาสนนมจ านวน Copy ไดไมจ ากด (ซงในทนเรามองวาคลาสสามารถน าไปสรางเปนออบเจกตในหนวยความจ า) ประโยชนคอท าใหการพฒนาซอฟตแวรไดงายขน สมมตวาเราสรางโมดลในการจดการกบระบบฐานขอมลแตเปนไปไดทเราจะตดตอกบฐานขอมลหลายตวพรอมกนเชนการพฒนาซอฟตแวรเพอโอนขอมลจากโปรแกรม Microsoft Access ไปยง Microsoft SQL Server ดงนนในโมดลเราจ าเปนตองมระบบการจดการฐานขอมลหลายตว แตในทางกลบกนถาเราใชคลาสเรากจะไมตองสนใจเรองนน เพยงแคเราสรางคลาสทจดการฐานขอมลเพยงตวเดยว โดยอาศยกลไกของการพฒนาเชงวตถท าใหเราสามารถสรางการตดตอกบฐานขอมลไดหลายตว โดยทแตละตวมความอสระตอกน

Reuse ระดบท 3 – ระดบไลบราร (Library) ส าหรบการพฒนาโปรแกรมโคดใหอยในระดบไลบรารนเปนการวเคราะหวาโปรแกรมในสวนไหนทสามารถแชรรวมกนกบโปรแกรมโคดในสวนอนๆได ซงจะถกน ามาเกบไวในไลบราร ซงไลบรารเปนการรวมโมดล (ซงแตละโมดลอาจประกอบดวยหลายฟงกชน) ทมลกษณะการท างานทเหมอนหรอคลายกน และในทางการจดเกบเชง Physical Storage แลวถอวาเปนการรวมเอาแฟมตางๆ มาเกบไวเปนแฟมเดยวกน ตวอยางเชนโมดล Stream กจะรวมถงฟงกชนทท างานเกยวของกบ Stream Input และ Output ภาษาทเปนนยมใชไลบรารคอภาษา C, Pascal, Modular ฯลฯ ประเดนส าคญทควรกลาวถงคอ ไลบรารนเปนอสระกบโปรแกรม ท าใหเวลาคอมไพลนนตองมขนตอนเพมขนหนงขน โดยขนแรกเปนขนตอนของการคอมไพลโปรแกรมโคดใหเปนภาษาเครอง machine code แตโปรแกรมทไดยงเอาไปใชงานไมได เพราะยงไมมโคดในสวนของไลบรารทเรา

Page 25: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

25

เรยกใช ซงจะตองท าขนตอนท 2 ตอนนกคอการ Link ซงเราเอาไว Link กบไลบรารทคอมไพลมากอนหนาจากทอน แลวจงกลายเปนโปรแกรมทท างานได การทสามารถคอมไพลแยกสวน (Separate Compile) นน สงผลท าใหวงการอตสาหกรรมซอฟตแวรมความตนตวมากขน เนองจากมหลายบรษททเรมพฒนาโมดลหรอไลบรารในลกษณะทเปน Third-Party เพอทสนบสนนโปรแกรมอนๆทงในเชงของการวจยเพอเผยแพรหรอในเชงการคา ซงเราเรยกซอฟตแวรเหลานวาเปน Component Based Programming อกทงโมดลเหลานมการเผยแพรในลกษณะของภาษาเครอง Machine Code จงไมจ าเปนตองกงวลเกยวกบการรวไหลของโคดหรอเทคนค Algorithm ทใชซงสงผลใหปจจบนมไลบรารเกดขนมากมาย ท าใหนกพฒนาซอฟตแวรสวนใหญไมเปนเพยงแคนกสรางโปรแกรมแตยงกลายเปนนกประกอบไลบรารไปดวย

Reuse ระดบท 3.5 – ระดบคลาสไลบราร (Class Library)

คลาสไลบรารจดไดวาเปนไลบรารอกประเภทหนง ซงเปนการน าเอาหลกการของออบเจกตมาใชอยางเตมรปแบบ โดยทคลาสไลบรารจะเกบรวบรวมคลาสตางๆ ทมลกษณะการท างานคลายกนอยในไลบรารเดยวกน ซงเราจะเรยกไลบรารเหลานวาเปน Package เชนในภาษาจาวา หรอ Microsoft Foundation Class หรอ .NET Framework ส าหรบซอฟตแวรของไมโครซอฟท โดยการจดเกบคลาสไลบรารสวนใหญมวตถประสงคเพอทจะน าเอาคลาสเหลานนไปใชงาน หรอในลกษณะของการสบทอด/สบสกลจากคลาสทมอยในไลบราร เพอลดความซ าซอนจากสงทเคยพฒนาหรอมอยเดมแลว ซงหลกการนเรยกวา การท า Class Inheritance ซงเปนการถายทอดคณสมบตจากคลาสหนงไปสอกคลาสหนง ท าใหเกดการ Reuse โปรแกรมโคดอยางมประสทธภาพ อกทงในการพฒนาซอฟตแวรทมขนาดใหญมทมงานพฒนาจ านวนมาก การแชรคลาสไลบรารเดยวกน ท าใหภาพรวมของซอฟตแวรออกมาในรปแบบและทศทางการพฒนาเดยวกน และเมอคลาสใหมๆทมการพฒนาและผานกระบวนการทดสอบเพอใหมนใจในความถกตองแลว คลาสนนๆ ยงสามารถน ามาเพมลงในคลาสไลบรารไดอกดวย ท าใหนกพฒนาซอฟตแวรทรจกการเรยกใชคลาสไลบรารสามารถพฒนาซอฟตแวรใหมๆ ไดอยางรวดเรว

Reuse ระดบท 4 - ระดบคอมโพเนนท (Component) คอมโพเนนทจดไดวาเปนคลาสไลบรารประเภทหนงทมลกษณะพเศษกคอ การมงเนนทวตถประสงคอยางใดอยางหนง ซงการท าเชนนสงใหระดบการ Reuse สงขนไปอก ซงในแนวคดของคอมโพเนนทนมองวาระบบประกอบไปดวยสวนประกอบตางๆ เชนเดยวกนกบวตถในโลกความเปนจรง ตวอยางเชนคอมพวเตอรประกอบดวยเมาส คยบอรด หรอซพย ซงตางมองวาเปนคอมโพเนนทตางๆ ทมการท างานเปนของตนเอง แตสามารถน ามาเชอมตอหรอท างานรวมกนได หากมสวนใดสวนหนงเสยไปกสามารถทจะหาคอมโพเนนทใหมมาแทนทได โดยไมมผลกระทบตอการท างานกบคอมโพเนนทอนๆ ในโลกคอมพวเตอรคงไมสามารถเปรยบเทยบตรงๆ กบรถยนตไดในลกษณะนน แตหากวาลกษณะของคอมโพเนนทตวนไมด กสามารถเปลยนเปนตวใหมได ภาษาทท าใหคอมโพเนนทเปนทนยมกคอ

Page 26: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

26

ภาษา Visual Basic ทคดคน .vbx (ปจจบนเปน .ocx) ถาเราไมชอบ Combo ทใหมากบ VB เรากไปสามารถเอาของ Third Party มาใชแทนได บรษทไมโครซอฟท เปนบรษทหนงทมชอเสยงในเรองของ การพฒนาความสามารถของคอมโพเนนท ท าใหโปรแกรมของไมโครซอฟททกตวใชแนวคดของคอมโพเนนท ซงเราจะเหนตวอยางไดชดเจนจากโปรแกรมชด Microsoft Office ทประกอบไปดวยโปรแกรมหลายตว แตละตวสามารถท างานแยกออกจากกนไดอยางมอสระ แตเมอมความจ าเปนทจะตองท างานรวมกนหรอแชรคอมโพเนนทระหวางกนกจะสามารถท าไดดวยด ซงไมเพยงแคในสวนของผใชงานเทานน แตรวมถงในระดบของการพฒนาดวย เชน การพฒนาแมโครหรอซอฟตแวร Visual Basic for Application ทสามารถท างานกบชด Microsoft Office ได

Reuse ระดบท 5 – ระดบเฟรมเวรก (Framework) ระดบเฟรมเวรกถอไดวาเปนระดบของคลาสไลบรารอยางหนงโดยมลกษณะพเศษอยอยางหนงคอ สามารถสอสารกบโปรแกรมของเราแบบ 2 ทาง โดยตางจากคลาสไลบรารหรอคอมโพเนนททวไปคอ สามารถสอสารกบโปรแกรมไดเพยงทางเดยว เชนในโปรแกรมทมการเรยกใชเมทธอดของคลาสทอยในคลาสไลบรารหรอคอมโพเนนท แตส าหรบเฟรมเวรกนน ตวเฟรมเวรกจะสามารถเรยกใชคลาสและเมทธอดของเราเองไดดวย ซงค าถามในทนคอเฟรมเวรกท าไมจงตองมาเรยกใชโคดของเรา ซงค าตอบในทนกคอปจจบนการพฒนาซอฟตแวรไดกาวหนาไปไกลมาก เรามคลาสไลบรารทไดมการพฒนาโดยหลายองคกร ท าใหคลาสไลบรารเหลานมความสมบรณ การพฒนาซอฟตแวรในปจจบนจงมเครองมอตาง ๆ ทท าใหการพฒนาซอฟตแวรเปนไปอยางรวดเรว เรยกวา RAD – Rapid Application Development เรามเครองมอทมการท างานแบบวชวล (Visual) มากขน คอสามารถพฒนาโดยอาศยคอมโพเนนททมอยแลว (โดยอาศยวธการลากและวาง) เฟรมเวรกเปนการจดการซอฟตแวรในระดบโครงสราง โดยการก าหนดสวนการท างานของซอฟตแวรตามหนาททชดเจน ซงการพฒนาซอฟตแวรโดยเฟรมเวรก นกพฒนาซอฟตแวรไมจ าเปนตองกงวลในเรองของโครงสรางหลกของซอฟตแวร การควบคมการท างานโดยรวม เชน การควบคมการแสดงผลหนาจอ การเชอมตอกบอปกรณฮารดแวร การดกจบ Event ตางๆ ซงจะสงเกตไดวาเราไมไดพฒนาซอฟตแวรเพอควบคมการท างานของโปรแกรมแตจะเปนเฟรมเวรกทท าหนาทนแทน

Reuse ระดบท 6 – (ระดบแอปพลเคชนเฟรมเวรก) Application Framework

ในวศวกรรมซอฟตแวร การพฒนาซอฟตแวรอยางใดอยางหนงขนมานนเราจะตองเสยเวลาในการพฒนาสวนทเชอมตอกบผใชงาน (User Interface) มากกวาครง อกทงเราจะตองพฒนาลอจกของโปรแกรมซ าๆอยตลอดเวลา ทงทจรงแลวโปรแกรมทพฒนาขนใหมนนอาจจะมเพยงแค 10-20% เทานน ธรรมชาตของโคดโปรแกรมทเกยวของกบลอจกทางธรกจนเรยกวา CRUD (Create Retrieve Update Delete) คองานทเกยวกบการจดการขอมล ซงนยมจดเกบในรปของระบบฐานขอมลเชงสมพนธ ซงโดยปกตแลวธรรมชาตงานจะมรปแบบการจดการทตายตว เชนการเพม การลบ การ

Page 27: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

27

ปรบปรง หรอการคนหาขอมล ในฐานขอมล แตทงนขนอยกบความซบซอนของโครงสรางของฐานขอมล ซงจะมผลท าใหการบ ารงรกษาซอฟตแวรสามารถท าไดงาย อกทงสามารถรองรบการเปลยนแปลงทอาจจะเกดขนไดในอนาคต ซงเราตองหาวธลดการเกดผลกระทบตอโปรแกรมในสวนอนๆ ซงเราเรยกปญหานวาปฏกรยาลกโซ (Chain Reaction) ซงมกจะเกดขนเมอมการปรบเปลยนแปลงในโปรแกรมโคดและมผลกระทบตอการท างานในสวนอนๆของโปรแกรม ท าใหเกดผลลพธการท างานของโปรแกรมทไมอาจคาดคดมากอน หรอบางครงอาจจะกอใหเกดขอผดพลาดในสวนการท างานของโปรแกรมทเคยท างานปกต ซงปญหาเหลานกอปญหาตอการพฒนาโปรแกรม ส าหรบกรณทการพฒนาเปนระบบซอฟตแวรขนาดใหญทมนกพฒนาหลายคน ซงอาจจะแบงออกเปนชดหรอทมงาน ซงนกพฒนาแตละคนตางกจะมสไตลการท างานทไมเหมอนกน การออกแบบและการพฒนาของซอฟตแวรอาจจะมหลากหลายวธการ เชนการก าหนดชอของโปรแกรม ชอของตวแปร หรอวธการเขยนโคด เปนตน ซงจะท าใหซอฟตแวรขาดความเปนเอกภาพในทสด ดงนนแอพลเคชนเฟรมเวรก (Application Framework) จงเปนการก าหนดกรอบการท างานของทมพฒนา เพอใหงานเปนไปตามกรอบหรอรปแบบทก าหนดไว ซงจะท าใหการควบคมโครงงาน การตดตามความกาวหนา ความเปนเอกภาพของทมงานสามารถท าได อกทงการแกไขปญหากรณทเกดขอผดพลาดในโปรแกรมกสามารถท าไดงาย และหลกเลยงปญหาของ Chain Reaction ทอาจจะเกดขนอกดวย

จากแนวคดของการน าโคดกลบมาใช (Code Reusability) ทไดกลาวมานน อนทจรงแนวคดนไมใชเปนแนวคดใหมแตมมาตงแตในอดตเนองจากการพฒนาซอฟตแวรแตเดมนนเรมตนจากการเขยนโคดในลกษณะของ Top-Down ซงพบปญหาของการตรวจสอบแกไขเมอพบขอผดพลาด หรอการเขยนโคดซ าซอนกบลกษณะงานทมความใกลเคยงกน ซงแนวคดนถกน ามาใชกบการจดกลมโปรแกรมโคดใหอยในรปของฟงกชน หรอโมดล และพฒนามาเปนไลบรารตางๆ ซงเมอมการน าเอาแนวคดของพฒนาแบบออบเจกตมาใช กจะเหนแนวคดของการ Reuse ในลกษณะของคอมโพเนนท หรอแพคเกจ การน าเอาโปรแกรมโคดกลบมาใชใหมนนเปนมความชดเจนมากยงขน สงผลตอการเพมประสทธภาพตอกระบวนการพฒนาซอฟตแวรในเชงวศวกรรมซอฟตแวร (Software Engineering) ไดอกดวย เนองจากเราสามารถมนใจไดวาซอฟตแวรทพฒนาขนนนมเปนซอฟตแวรแวรทมประสทธภาพและสามารถทจะพฒนาไดทนตามเวลาทก าหนด ใชจ านวนบคลากรทเหมาะ รวมถงงบประมาณทเพยงพอดวย

1.5 การพฒนาซอฟตแวรเชงคอมโพเนนท การพฒนาซอฟตแวรทเปนลกษณะของคอมโพเนนทนนถอวาเปนแนวคดทมความส าคญมาก

เนองจากเราสามารถใชคอมโพเนนทในการตดตอและตอบโตกบผใช และเปนเครองมอทชวยใหควบคมการท างานภายในระบบซอฟตแวรสามารถท าไดอยางง ายดายและสะดวกรวดเรว คอมโพเนนทคอ ออบเจกตตางๆ ทน ามาใชประกอบในการสรางแอพพลเคชน ซงคอมโพเนนทสวนใหญจะถกจดเกบไวใน Component Palette โดยแยกเกบเปนหมวดหมเอาไวพรอมน าไปประกอบแอพพลเคชนทเราสรางขนโดยคอมโพเนนท จะถกแบงออกเปน 2 ประเภทดงน

Page 28: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

28

Visual Component เปนคอมโพเนนททมสวนตดตอกบผใช โดยจะแสดงใหเหนในขณะทรนแอพพลเคชน เชน ขอความหรอปมตางๆ

Non-Visual Component เปนคอมโพเนนททไมแสดงใหเหนในขณะทแอพพลเคชนท างาน โดยจะเปนไอคอนหรอคอนโทรลอยบนฟอรมขณะออกแบบ เชน MainMenu หรอ Popup Menu

แอพพลเคชนทท างานอยในโลกธรกจหลายๆตวเชน ในขายงานของมลตมเดย การสอสาร ซงจ าเปนตองมระบบการค านวณและระบบปฏบตการสนบสนนทมประสทธภาพ จงตองการการสนบสนนส าหรบการท างานแบบกระจายและสามารถท างานไดพรอมๆ กน ซงในแงของการพฒนาซอฟตแวรเชงวตถนนแอพพลเคชนเหลานมการท างานทซบซอน และอาจจะมการแยกสวนการท างาน หรอท างานแบบกระจายอยตามเครองแมขายตางๆ ซงจ าเปนตองอาศยความสามารถในการท างานรวมกนระหวางคอมโพเนนทของซอฟตแวร ส าหรบองคประกอบของคอมโพเนนททส าคญประกอบดวย 3 สวนหลกดงตอไปน

1. คณสมบตของคอมโพเนนท (Component Property) คอมโพเนนทประกอบดวยคณสมบตตางๆ ทใชในการก าหนดลกษณะทแสดงถงตวตนของคอม

โพเนนทนนๆ และการท างานของคอมโพเนนท จะมลกษณะเฉพาะตวเชน ชอ ความกวาง ความสงเปนตน ในคอมโพเนนทชนดเดยวกนนนจะมคณสมบตทแสดงถงความเหมอนหรอความเปนชนดเดยวกนแตในแตละคอมโพเนนทอาจจะมคาของแตละคณสมบตทแตกตางกน โดยเราสามารถก าหนดคาของคณสมบตนน ได

2. เหตการณทสามารถเกดขนไดกบคอมโพเนนท (Component Event) เหตการณหรอการกระท าทเกดขนกบแตละคอมโพเนนทซงอาจเกดจากผใชหรอการท างาน

ภายในแอพพลเคชนเองกได เชน เมอคลกเมาสทปมจะเกดอเวนต OnClick กบปมนน เปนตน 3. สงทคอมโพเนนทสามารถกระท าได (Component Method)

โพรซเยอรหรอฟงกชนการท างานของคอมโพเนนทหรออาจจะกลาวไดวา เปนความสามารถในการท างานอยางใดอยางหนงของแตละคอมโพเนนท เชน แบบฟอรมประกอบดวยเมทธอดส าหรบการแสดง Show() เพอใชส าหรบการเปด หรอแสดงฟอรม และเมทธอดการซอน Hide() ทใชส าหรบการซอนฟอรม เปนตน คอมโพเนนทเหลานในแตละระบบหนงๆ อาจจะมจ านวนมาก ทถกสรางขนมาจากโมดลตางๆ ซงเราสามารถจดกลมหรอจ าแนกคอมโพเนนทออกเปน Palette ตางตามประเภทของการใชงาน เพอใหการเรยกใชหรอการพฒนาตอยอดนนสามารถท าไดงายขน

Page 29: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

29

บทท 2 - ชนดขอมลแบบนามธรรม

โปรแกรมคอมพวเตอรเปนชดค าสงทมการท างานอยางเปนล าดบขนตอน ซงโปรแกรมทพฒนาขนมานนมวตถประสงคทชดเจน เมอเราพฒนาซอฟตแวรดวยภาษาใดภาษาหนง คอมพวเตอรจะไมสามารถเขาใจภาษาหรอโคดทเราเขยนโดยอตโนมต โปรแกรมคอมพวเตอรจ าเปนตองมการแปลงโปรแกรมคอมพวเตอรใหอยในรปของภาษาเครอง โดยอาศยโปรแกรมแปลภาษาไดแกคอมไพเลอร (Compiler) โปรแกรมทเขยนขนและผานการคอมไพล และมการลงค (Link) กบไลบรารอนๆทจ าเปน ท าใหเปนโปรแกรมส าเรจรปทมความสมบรณ เพอสามารถน าไปตดตงและใชงานได

การพฒนาซอฟตแวรทด ควรมการวางแผนการวเคราะห ออกแบบ และพฒนา ตามขนตอนของวงจรการพฒนาซอฟตแวร SDLC (Software Development Life Cycle) และตามหลกวศวกรรมซอฟตแวร (Software Engineering) เพอใหซอฟตแวรทพฒนานนมคณภาพ ซงทงนไมวาจะเปนการพฒนาซอฟตแวรดวยภาษาใดๆกตาม ควรมการก าหนดความตองการของผใช และก าหนดแนวทางการแกปญหาททชดเจน ซงแนนอนวาโปรแกรมภาษาแตละภาษาจะมจดดจดเดนไมเหมอนกน ตวอยางเชนภาษา C เปนภาษาทมความเหมาะสมเชงโครงสราง และสามารถน าไปเขยนในระดบระบบปฏบตการ หรอภาษา Perl เปนภาษาทเหมาะกบการท า Text Processing เปนตน โครงสรางไวยากรณภาษา (Syntax) ของภาษาเหลานกจะมความแตกตางกน ขนอยกบโปรแกรมภาษา (Programming Language ทเลอกใชและเครองมอ (Intergrated Development Environment: IDE) ส าหรบการพฒนา

การพฒนาซอฟตแวรคอการพยายามทจะแกไขปญหาโดยอาศยโปรแกรมคอมพวเตอร ปญหาดงกลาวอาจจะเปนปญหาในเชงธรกจ เชน การจดเกบสตอกสนคา การบญช หรอการเงน เชงการศกษา เชงการบนเทง ซงซอฟตแวรไดถกน าไปประยกตใชเพอเปนการแกไขปญหาเหลาน การวเคราะหปญหาทเกดขนในโลกธรกจหรอในดานตางๆทกลาวมา ลวนแลวเรยกวาเปน Real-World Problem หรอ Real-Life Problem ซงอาจจะเปนปญหาเฉพาะในโดเมนนนๆ เรยกวา Domain Problem สงแรกทนกพฒนาโปรแกรมจะตองท าคอพยายามเขาใจถงปญหา รายละเอยด และขอบเขตของปญหาทตองการแกไข เชน หากตองพฒนาโปรแกรมท เกยวของกบระบบคลงสนคา กจ าเปนตองศกษาระบบงานทเกยวของกบระบบสนคา การสงซอ การขาย หรอแมกระทงขนตอนของการจดซอจนกระทงถงการจดท าสตอกสนคา เพอน ามาสรางเปนแบบจ าลองของโมเดลทเปนนามธรรม (Abstraction)

การพฒนาซอฟตแวรทมโครงสรางแบบ Procedure หรอ Modular Programming นกพฒนาจะศกษาความตองการของผใช โดยท าการวเคราะหความตองการซงมกจะอยในรปแบบของค าบรรยาย ค าสมภาษณ หรอเอกสาร และท าการวเคราะหเพอมาจดท าเปนเอกสารการวเคราะหและแผนภาพทอยในรปของไดอาแกรมตางๆ เชน Data Flow Diagram และ Context Diagram โดยนกพฒนาซอฟตแวรสวนใหญจะเรมจากการท าโมเดลขอมล (Data Model) ในลกษณะโครงสรางของขอมล

Page 30: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

30

(Data Structure) ตวแปรขอมลและชนดของขอมล (Variable and Data Type) เพอใชส าหรบการจดเกบขอมล จากนนกจะท าการออกแบบฟงกชนทเกยวของเพอใชส าหรบจดการกบขอมลทจดเกบในรปของฟงกชนและโพรซเยอร ซงจะเหนไดวาการออกแบบโมเดลของระบบ ในลกษณะนขอมล (Data) และฟงกชนทใชจดการ (Function) จะถกวเคราะหแยกออกจากกน ซงจะเหนไดวาการแบบจ าลองของระบบมกจะอยในรปของโมเดลขอมลเปนหลก โดยทไมไดมองในภาพรวมของระบบ

การวเคราะหแบบจ าลองขอมลนนเปนการสรางมมมองของวตถในลกษณะทเปน Abstraction คอมมมองตอวตถหนงๆ วามคณลกษณะเปนอยางไรและมลกษณะการท างานเปนอยางไร เชน เมอเราพดถงคอมพวเตอรบางคนอาจจะคดถงเครองคอมพวเตอรสวนบคคลแบบตงโตะ และบางคนอาจจะคดถงเครองโนตบค เปนตน แตในทางนามธรรม จะมองวาเครองคอมพวเตอรประกอบ ดวยเมาส คยบอรด จอภาพ และซพย โดยสามารถท างานรบขอมล ประมวลผล และแสดงผลลพธออกทางจอภาพ ซงในเบองตนเราอาจจะไมไดสนใจวาภายในเครองคอมพวเตอรจะมการท างานอยางไร ทงนจะเหนไดวาเราก าลงสรางมมมองทเปนนามธรรม หรอมองภาพของออบเจกตในลกษณะทเปนกลองด า (Black Box) ซงการมองภาพของวตถในลกษณะของนามธรรม นมบทบาทอยางยงในการวเคราะหและออกแบบเชงวตถ ซงจากตวอยางจากปญหานมกจะพบในสมาชกในทมพฒนาซอฟตแวร ซงแตละคนอาจมมมมองตอระบบทแตกตางกน ซงเราตองพยายามใหมมมองของทมพฒนาระบบเปนไปในทางเดยวกน เพอใหไดระบบตรงตามทตองการ

ส าหรบการพฒนาโปรแกรมเชงวตถนน โจทยหรอปญหาทน ามาสการแกไขปญหาดวยการพฒนาโปรแกรมขนนนจ าเปนจะตองมการวเคราะหและออกแบบทด โดยมงเนนการวเคราะหและการจดท าโมเดลของระบบ ซงโมเดลนนจะตองมความใกลเคยงกบสภาพปญหานนจรง เปนโมเดลของออบเจกต ในแตละโปรแกรมจงประกอบไปดวยหลายๆ ออบเจกตน ามาประกอบกน แตละออบเจกตทออกแบบกจะตองมลกษณะหนาททตางกนไป โดยหลกการออกแบบ จะอาศยหลกการทวา เมอมการเปลยนแปลงใดๆ ในออบเจกตหนงแลว การเปลยนแปลงแกไขออบเจกตนนไมควรมผลกระทบตอออบเจกตอนๆ ซงบางครงท าใหเรามองการพฒนาแบบออบเจกตนเปนลกษณะของโมดลหรอ คอมโพเนนททสามารถถอดเขา - ออกได หรอน าไปประกอบกบคอมโพเนนทอนๆ เปนโปรแกรมใหมได นนกคอ หลกการของการน าโปรแกรมโคดกลบมาใชใหม (Code reusability) นนเอง

2.1 คณสมบตของแบบนามธรรม (Property of Abstract Data Type)

การวเคราะหโดเมนปญหาทมอยโลกความเปนจรง เราสามารถแกปญหาโดยน าเอาแนวความคดเชงวตถมาชวยได โดยการจดแบงกลมปญหาเปนกลมยอยทเปนอสระ เพอใหเราสามารถแกปญหาไดอยางสมบรณ เมอเราไดจดแบงปญหาเสรจแลวหลกจากนนเรากสามารถสงชนดขอมลแบบนามธรรมขนมาได โดยก าหนดใหมคณสมบตเปนตนแบบดงรป 2.1 องคประกอบประเภทขอมลแบบนามธรรม

Page 31: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

31

รป 2.1 องคประกอบประเภทขอมลแบบนามธรรม

การวเคราะหชนดขอมลในเชงวตถนนตางจากการวเคราะหขอมลในเชงโครงสราง เนองจากเปนการมองภาพของขอมลโดยรวมทงในสวนขอมลและกจกรรมทเกยวของ ซงองคประกอบทส าคญของออบเจกตนนประกอบดวยสวนส าคญ 2 สวนคอ

1. คณสมบตของออบเจกต (Object Property) – โดยมองวาออบเจกตตางๆท เกดขนมคณสมบตเฉพาะของออบเจกต ซงเราอาจจะเรยกไดวาเปนขอมล (Data Property) หรอคณสมบต (Attribute) ทใชส าหรบการอธบายคณลกษณะและการเปนตวตนของออบเจกตนนๆ ดงตวอยางเชน ออบเจกตรถยนต จะมคณสมบตคอยหอ ส ขนาดก าลงเครองยนต และจ านวนทนง เปนตน

2. พฤตกรรมของออบเจกต (Object Behavior) – โดยมองวาออบเจกตจะมพฤตกรรม หรอออบเจกตสามารถกระท าได เชนกรณของออบเจกตรถยนต กจะสามารถเดนหนา ถอยหลง หรอหยด

ซงออบเจกตทถกสรางขนมาในลกษณะทเปนโมเดลนนสามารถทจะน ามาใชในการอางองในลกษณะทเปนประเภทขอมล (Data Type) เชนออบเจกตรถยนต Car

Object Car

Attribute: Brand_Name, Color, Engine, NoOfSeat

Behavior: Run(), Stop(), Reverse()

โดยประเภทของขอมล Car ในภายหลงสามารถน ามาใชในการสรางเปนชนดขอมลส าหรบรถยนตขนมาใหมได ดงเชน

Car myCar;

myCar.BrandName = “Toyota”;

myCar.Color = “red”;

myCar.Engine = 2000;

myCar.NoOfSeat = 4;

Abstract data type Abstract data structure

Operations - Operation #1 - … - Operation #n

Interfaces

Page 32: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

32

myCar.Start();

myCar.Run();

myCar.Stop();

myCar.Reverse();

ซงจะเหนวาการสรางโมเดลขอมลทเปนออบเจกตนนสามารถท าใหวเคราะหโครงสรางของ

โมเดลไดไกลเคยงกบโมเดลในโลกของความเปนจรง และการวเคราะหในระดบโมเดลน เรายงไมจ าเปนตองค านงถงการพฒนา (Implementation) วาจะท าไดอยางไร เชนกรณนรถจะวงหรอหยดไดอยางไร เพยงแตเราจะวเคราะหในภาพรวมในเชงของคณสมบต (Property) และพฤตกรรม (Behaviour) ของออบเจกต ซงจากแนวคดนจะเหนวาเราสามารถแบงระดบของความเปนนามธรรมของโมเดล (Level of Model Abstraction) ไดดกวาการวเคราะหออกแบบโปรแกรมเชงโครงสราง ซงจะท าใหระดบของการวเคราะหมความเปนนามธรรมในระดบหนง แตกสามารถทมองเหนภาพทจะน าไปสการพฒนาเปนโปรแกรมตอไป

2.2 การแกไขปญหาในแนวคดเชงวตถ

ในการพฒนาโปรแกรมเชงวตถ เรามองแนวทางการแกปญหาในลกษณะของการสรางแบบจ าลองทมความสอดคลองกบปญหาในโลกของความเปนจรง (Real-World Problem) และการสรางโมเดลของออบเจกตจะถกแสดงในรปของคลาส (Class) ซงจะกลาวในบทตอไป โดยการวเคราะหปญหาตางๆนนจะมองใหอยในรปของออบเจกต โดยทระบบหนงๆนนสามารถมไดหลายออบเจกต และออบเจกตตางๆจะมหนาทการท างานทแตกตางกนไป และออบเจกตสามารถสอสารระหวางกนได (Object Communication) การมองปญหาในลกษณะทเปนออบเจกตนนท าใหการจ าลองแบบโมเดลของออบเจกตมความใกลเคยงกบปญหาจรง และสามารถมองปญหาในเชงธรกจในระดบทเปนนามธรรมไดดมากขน โดยในระดบน เราไมจ าเปนตองค านงถงวธการพฒนาหรอการเขยนโคด หรอแมกระทงการพจารณาถงชนดของขอมลทจะตองจดเกบ

ในปจจบนเราจะเหนวาแนวคดของการพฒนาซอฟตแวรเชงวตถนน สงผลตอการพฒนาเครองมอและรปแบบของการพฒนาซอฟตแวรในปจจบนใหมความกาวหนาและมความทนสมยมากยงขน โดยเฉพาะอยางยงในปจจบนเราจะเหนการพฒนาซอฟตแวรทอาศย IDE เปนลกษณะโปรแกรมแบบวชวล (Visual Programming) มากยงขน อยางเชน Visual Basic, Visual C++, Visual Delphi เปนตน ซงเปนตวอยางของการพฒนาโปรแกรมในลกษณะทมการเลอกใชเครองมอ (Tool) เพอลากและวาง (Drag and Drop) ลงบนวนโดวฟอรม และสามารถในผพฒนาเขยนโปรแกรมในลกษณะทเปนโปรแกรมโคดทท างานอยเบองหลง (Code Behind) ได ซงประโยชนในแงมมหนงคอการทผพฒนาสามารถทจะออกแบบซอฟตแวรจากการออกแบบสวนทตดตอกบผใช (User Interface) ไดอยาวรวดเรว ซงเปนการสงเสรมใหเกดการพฒนาซอฟตแวรในลกษณะทเปนโพรโตไทป (Prototype) ซงเปนตนแบบของโปรแกรม เพอใหผใชงานของระบบสามารถเหนผลลพธของโปรแกรมไดอยางรวดเรว

Page 33: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

33

ส าหรบเครองมอทใหผพฒนาเลอกใชในโปรแกรมนนมอยมากมาย ส าหรบเครองมอพนฐาน อาทเชน TextBox, Button, ListBox, RadioButton หรอในระดบทมความซบซอนสงเชน ProgressBar, Calendar, Picture เปนตน ซงเครองมอตางๆเหลานแทจรงแลวกคอออบเจกตนนเอง นนกคอการพฒนาซอฟตแวรเชงวตถโดยรวมแลวจะสามารถใชประโยชนจากออบเจกตทมอยแลว (Existing Object) ซงเปนหวใจส าคญของการพฒนาโปรแกรมเชงวตถนนคอการน าเอาโปรแกรมโคดทมอยเดมกลบมาใชใหม และการพฒนาออบเจกตใหมทเราจะตองวเคราะหและออกแบบเองนนกจะเปนสวนทเกยวของกบเนองานของเราเอง ทงนจะเหนไดวาการพฒนาซอฟตแวรเชงวตถนน เราจะตองมการวเคราะหออกแบบใหด โดยมการใชประโยชนจากออบเจกตทมอย ซงอาจจะอยในรปของเครองมอทมากบภาษาเอง หรอเครองมอทอยใน IDE หรออาจจะเปนออบเจกตทเปน Third-Party ออบเจกตทเปนขององคกรหรอหนวยงานเอกชนทเปนลกษณะของซอฟตแวรเปด (Open Source) หรอในบางครงเปนลกษณะของการขาย (Commercial) ซงตางๆเหลานกจะตองถกน ามาใชในการออกแบบและพฒนารวมกบออบเจกตทมการพฒนาขนมาเอง

โดยหลกการวเคราะหออกแบบเชงวตถนเอง ท าใหกระบวนการพฒนาทางวศวกรรมซอฟตแวร

เปลยนไปจากเดม โดยมงเนนในเรองของการวเคราะหและออกแบบมากยงขน ซงกระบวนการพฒนาซอฟตแวรตามวศวกรรมของออบเจกตนเรยกวา Object-Oriented Software Engineering (OOSE)

2.3 คณสมบตทวไปของออบเจกต การแบงโปรแกรมออกเปนออบเจกตตางๆ โดยทแตละออบเจกตมความสมบรณในตวเองท าให

เพมความสามารถของซอฟตแวรคอ การน าเอาโคดกลบมาใชอก หรอสามารถเรยกใชงานออบเจกตไดหลายๆ ครง ซงโดยหลกการแลวออบเจกตจะถกเรยกขนมาใชงานในชวงไหนกไดระหวางทโปรแกรมท างานอย ดงนนเราอาจจะมองการท างานของออบเจกตวาเปนการถกเรยกใชงานจากเหตการณ (Event-Driven Programming) ทเกดขนในระหวางการท างานของโปรแกรม ความหมายในทนกคอโปรแกรมหนงอาจจะประกอบไปดวยหลายออบเจกต แตละออบเจกตกอาจจะถกเรยกขนมาใชงานไดขนอยกบเหตการณตางๆ สงส าคญอยางหนงส าหรบการพฒนาโปรแกรมเชงวตถคอ หลกการน าโปรแกรมกลบมาใชไดอก (Code Reusability) จากในอดตจะเหนไดวาการพฒนาซอฟตแวรตวหนงจะใชระยะเวลานาน บางครงอาจเปนหลายๆ เดอนหรออาจจะเปนปกได การพฒนาโปรแกรมแบบออบเจกตโอเรยนเทดโดยการจดโครงสรางของโปรแกรมออกเปนออบเจกตตางๆ นน สามารถชวยลดระยะเวลาในการพฒนาโปรแกรมโดยการน าเอาออบเจกตทมอยแลว หรอออบเจกตทถกสรางโดยโปรแกรมเมอรอน มาประกอบกนเปนซอฟตแวรใหมๆ ไดอก ดงนนเราจะเหนไดวาปจจบนนมการพฒนาออบเจกตใหมๆ ขนมามากมายโดยอาจจะมาจากนกพฒนาโปรแกรมทวไปหรอจ ากผผลตซอฟตแวรอนๆ การจดรปแบบโครงสรางของโปรแกรมเปนแบบออบเจกต (Object-Oriented Structure) เปนผลท าใหขอมลและฟงกชนทจดการกบขอมลอยรวมกนภายในออบเจกตเดยวกน ท าใหการออกแบบ การพฒนา การแกไขขอผดพลาด และการน าออบเจกตไปใชงานใหมสามารถท าไดงายขน

Page 34: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

34

2.3.1 องคประกอบทส าคญของออบเจกต

ในการพฒนาซอฟตแวรเชงวตถ แนวคดของการสรางโมเดลของขอมลในรปของออบเจกตถอไดวาเปนหวใจส าคญ เนองจากเปนแนวคดทตางจากการวเคราะหในเชงโครงสรางและจะตองมองโจทยปญหาทก าลงวเคราะหในเชงของวตถ นอกจากนองคประกอบอนๆทส าคญทจะตองท าความเขาใจเพอใหการวเคราะหออกแบบและการสรางเปนโมเดลขอมลเปนไปอยางมประสทธภาพ ซงองคประกอบเหลานประกอบดวย

1. การสบทอด/สบสกล (Inheritance) การทออบเจกตตางๆสามารถถกสรางขนมาในลกษณะทสบทอดจากอกออบเจกตหนง ในลกษณะทมความสมพนธแบบออบเจกตแม (Parent Object) และออบเจกตลก (Child Object) โดยทออบเจกตทสบทอดนนสามารถสบทอดเอาคณสมบตตางๆจากออบเจกตแมมาสออบเจกตลก ซงแนวคดของการสบทอดนกเปนแนวคดหนงของการพฒนาตอยอดจากออบเจกตเดมทมคณสมบตคลายกน

2. การควบคมการเขาถง (Encapsulation) ค าวา Encapsulate แปลวาการหอหม ซงเปนลกษณะหนงของการควบคมการเขาถง เพอเปนการปองกนการเปลยนแปลงคณสมบตตางๆทอยภายในออบเจกตนน โดยจะตองกระท าผานเมทธอดทก าหนดไวใหเทานน ซงการซอนขอมลภายในออบเจกต (Data Hiding) ในออบเจกตแตละตวนนสามารถก าหนดการเขาถงขอมล และการเรยกใชงานของฟงกชนได โดยหลกการท างานนนจะคลายกบการก าหนดขอบเขตของการเขาถงตวแปรในการพฒนาซอฟตแวรแบบโครงสราง ทเปนแบบ local และ global variable แตส าหรบในออบเจกตโอเรยนเทดนนสามารถก าหนดการเขาถงไดในระดบตางๆ ได โดยทวไปแลวจะสามารถควบคมการเขาถงได 3 ระดบดงน การก าหนดแบบสวนตว (Private) แบบปองกน (Protected) และแบบทยอมใหมการเขาถงจากภายนอกได (Public)

3. การก าหนดผลลพธของพฤตกรรมทแตกตางกนในสภาวะทตางกน (Polymorphism) ซงเปนการควบคมพฤตกรรมของออบเจกต เพอใหไดผลลพธกลบตอผใชงานอยางมประสทธภาพ โดยทลดความซบซอนของการใชงานออบเจกตใหแกผใช ตวอยางเชนการสงค าสง CalculateSalary() ซงเปนค าสงทใชส าหรบการค านวณเงนเดอนของพนกงาน ซงโดยรวมแลวจะมความหมายเดยวกนคอการค านวณเงนเดอนของพนกงาน แตโดยหลกการท างานของ Polymorphism ทมการท างานกบแนวคดเชงวตถน คอโปรแกรมจะค านวณเงนเดอนของ พนกงานทเปนระดบผจดการ หรอเสมยน หรอคนขบรถ ไดโดยจะท าการเรยกใช CalculateSalary() ทตรงกบออบเจกตทท างานอยในปจจบน ปกตแลวจะเกดขนในขณะทออบเจกตท างาน (Run-Time)

แนวคดของการน าเอาโปรแกรมโคดทมอยกลบมาใชงานใหม (Code Reusability) เปนแนวคด

ทท าใหการพฒนาซอฟตแวรสามารถท าไดอยางรวดเรว อกทงลดขอผดพลาดของโปรแกรมทเกดขนอก

Page 35: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

35

ดวย ซงแนวคดนเรยกวาการสบทอด (Inheritance) ออบเจกตสามารถถกสรางขนมาใหมจากออบเจกตเดมได โดยอาศยหลกของการสบสกลโดยทออบเจกตใหมนจะ มคณสมบตเหมอนกบออบเจกตเดม ทงสวนทเปนขอมลและสวนทเปนฟงกชน แตทงนออบเจกตใหมอาจจะมขอมล ทเพมขนมาจากออบเจกตเดมกได ส าหรบแนวคดของการสบสกลนท าใหเราสามารถออกแบบออบเจกตทมลกษณะ การท างานแบบทวไป (General object) และออบเจกตทท างานเฉพาะ (Specific object) ทถกสบทอดมาจากออบเจกต ทวไปนนเอง จะเหนไดวาการพฒนาโปรแกรมเชงวตถ ท าใหการพฒนาโปรแกรมเปนไปอยางมระบบมากยงขน เพราะการแบงโปรแกรมออกเปนออบเจกตนนท าใหการวเคราะห ออกแบบ และพฒนาโปรแกรมสามารถท าไดงาย โดยเฉพาะเมอเปนโปรแกรมทมขนาดใหญ หรอมการพฒนากนเปนแบบทม นอกเหนอจากการพฒนาทเปนระบบแลว การตรวจสอบแกไข รวมทงการดแลรกษาโปรแกรมกสามารถท าได ปจจบนมโปรแกรมทสนบสนนการพฒนาแบบเชงวตถนมากมาย เชนภาษา C++, Object Pascal, Delphi, Java, Small talk, และ Object Perl เปนตน ซงโปรแกรมเมอรสามารถเลอกใชภาษาตามทถนด หรอใหเหมาะกบประเภทซอฟตแวรทจะพฒนา 2.3.3 การสอสารระหวางออบเจกต การวเคราะหและออกแบบโมเดลขอมลทอย ในรปของออบเจกตนน ท าใหเรามองเหนวาองคประกอบของระบบซอฟตแวรนนจะประกอบดวยออบเจกตตางๆทมการท างานรวมกน โดยทออบเจกตจะตองมการสอสารระหวางกน ในเชงของการพฒนานเราจะเรยกวาออบเจกตมการสงคา และรบคาระหวางกน (Message Passing) โดยทออบเจกตหนงจะท าหนาทเปนผสง (Sender) และอกออบเจกตหนงจะท าหนาทเปนผรบ (Receiver) ดงรป 2.2 ออบเจกต A ท าหนาทเปน sender และออบเจกต B เปน receiver ดงนนเมอ sender สง message ไปเพอรองขอการท างานบางอยาง receiver กจะสงผลเปนคา return value กลบไปยง sender

Object A Object B

Send

Message

Receive

Message รป 2.2 การสงขอมลระหวางออบเจกต

จากตวอยางดงกลาวจะสะทอนใหเหนถงแนวคดของการพฒนาซอฟตแวรเชงวตถน จะเปน

ลกษณะของการบรการ (Services) ของออบเจกต โดยผใชงานจะมองวาออบเจกตนนเปนกลองด า (Black Box) ทมบรการตางๆ โดยทสามารถเรยกใชงานบรการของออบเจกตโดยผานทางอนเตอรเฟส (Interface) ทออบเจกตนนมมาให

Page 36: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

36

2.4 กระบวนการท างานเชงวตถ การแกไขปญหาในเชงวตถจ าเปนตองมกระบวนการท างานอยางเปนขนเปนตอน หากวเคราะห

ในเบองตนนนจะไมตางจากการวเคราะหและออกแบบซอฟตแวร ดงเชน กระบวนการ SDLC (Software Development Life Cycle) ทประกอบดวยขนตอนการวเคราะหปญหา การศกษาความตองการของผใชงาน การออกแบบเบองตน การออกแบบโดยละเอยด การพฒนาซอฟตแวร การทดสอบระบบ และการบ ารงรกษาระบบ ซงขนตอนในการวเคราะหและออกแบบระบบเปนเรองทส าคญ โดยการพฒนาซอฟตแวรของระบบทมขนาดใหญทวๆ ไปทไมใชหลกการเชงวตถแมวาจะไดรบการออกแบบมาอยางด แตตวโปรแกรมกจะมความซบซอนและยงยาก และสงผลใหเกดความผดพลาดไดงาย การออกแบบเชงวตถจะท าใหสามารถเขาใจระบบไดดกวา การออกแบบระบบไดงายกวา และแมวาจะออกแบบเชงวตถไดไมด แตผลทไดจากการออกแบบนนกย งไดเปรยบมากกวาการออกแบบทไมใชเชงวตถโดยปรกตแลวการออกแบบโปรแกรมเชงวตถจะแบงออกเปน 5 ขนตอนหลกดงน

1. การรวมรวมและศกษาความตองการของระบบ (Requirement Gathering) อนดบแรกของการออกแบบ คอ อานโจทยของระบบทตองการออกแบบและใหท าความเขาใจ

ตามหลกความจรงในการท างานของระบบ ยกตวอยางเชน โทรศพทมอถอ ตองมองไดวา โทรศพทมองคประกอบภายนอกอะไรบาง เชน โทรออกได สามารถรบสายได มปมกด 12 ปมหรอมากกวา มสญญาณไฟตดเมอยกหโทรศพท สามารถตงระบบเสยงตางๆ ได สามารถรบสญญาณเสยงได ใชไดโดยคน เปนตน

2. การก าหนดคลาสเอนทต (Class Entity Identification) จากขอมลทวเคราะหความตองการของผใชงาน เราอาจจะตองท าการวเคราะหเพอหาคลาส

ออกมาจากขอมลนนใหได โดยคลาสนนเปรยบไดกบค านาม (Noun) ซงค านามเปนไดทง คน สงของ สถานท ฯลฯ เชน คลาสโทรศพท มนษย หรอคน แตโดยหลกความจรงแลวระบบทมขนาดใหญมกจะมคลาสมากมายซบซอนทไดจากขอมลดงนนควรพจารณาเฉพาะคลาสทจ าเปนเทานน คลาสใดทซ าซอนกนใหน ามารวมกนเปนคลาสเดยว

3. เกบขอมลพฤตกรรมของคลาส (Class Behavior) ในขนนจะเปนการแจกแจงรายละเอยดของคลาสทเลอกมาวาสามารถท าอะไรไดบางในระบบ

เพอใหทราบถงความส าคญของคลาสนนๆทจะสงผลตอการท างานของระบบ และเพอใหทราบถงหนาทการท างานของคลาสนน ซงบางทอาจบอกไดวามความสมพนธกบคลาสอนอยางไร เชน คลาสโทรศพทมอถอถกกดเมอมผใช รองเรยกเมอมสายเขา และตอบรบไดเองอตโนมต เปนตน

4. สรางความสมพนธระหวางคลาส (Class Relationship) จากการศกษาพฤตกรรมของคลาส เราจะตองท าการวเคราะหถงความสมพนธทจะเกดขน

ระหวางคลาสดวยกน ซงในบางครงอาจจะเรยกไดวาเปนบทบาท (Role) ระหวางคลาส ซงทงนในการสรางความสมพนธระหวาง คลาส จะตองประกอบดวยการสอสารระหวางคลาส หรอเรยกวา Message

Page 37: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

37

Passing ซงท าใหสามารถวเคราะหขอมลในสวนของคณสมบตและพฤตกรรมของคลาสในรายละเอยดไดเพมมากขน โดยความสมพนธเหลานสามารถน าไปออกแบบแผนภาพของโมเดล และน าไปพฒนาเปนโปรแกรมตอไป ตวอยางของความสมพนธ เชน ความสมพนธระหวางคนกบโทรศพทมอถอ โทรศพทสงเสยงเรยกมายงคน คนรบโทรศพท และคนสงสญญาณเสยงไปยงโทรศพท เปนตน

5. สรางโมเดลของคลาส (Class Modeling) การน าคลาสตางๆมาสรางภาพความสมพนธทสมบรณ ตามหลกการออกแบบเชงวตถดวย

โมเดลแผนภาพ ซงโมเดลทไดรบความนยมอกโมเดลหนงคอ Unified Modeling Language หรอเรยกโดยยอวา UML ซงใชเปนเครองมอสอสารระหวางทมงานพฒนาหรอผใชงานไดอยางชดเจน ซงท าใหสามารถเขาใจไดงายทงนกวเคราะห นกออกแบบและนกพฒนาซอฟตแวร ซง UML ประกอบดวยแผนภาพไดอาแกรมหลก 13 ไดอาแกรม โดยแบงออกเปนกลมตามวตถประสงคของไดอาแกรม ดงตอไปน

กลมท 1 แผนภาพไดอาแกรมทแสดงโครงสราง กลมท 2 แผนภาพไดอาแกรมทแสดงถงพฤตกรรม กลมท 3 แผนภาพไดอาแกรมทแสดงถงการโตตอบ

UML Diagram ค าอธบาย กลมท 1 แผนภาพไดอาแกรมทแสดงโครงสราง

Class Diagram แสดงคลาสตางๆทมอยในระบบ รวมถงความสมพนธและดกรความสมพนธ เพอใหเหนลกษณะของการท างานรวมกนระหวางคลาส

Component Diagram แสดงใหเหนถงความเชอมโยงการท างานของคอมโพเนนทตางๆในระบบ ซงอาจจะแสดงเหนถงองคประกอบของคอมโพเนนทหลก และคอมโพเนนทยอย โดยการเรยกใชงานคอมโพเนนทสามารถเรยกผานทางอนเตอรเฟส

Composite Structure Diagram

แสดงถงความเชอมโยงระหวางองคกอบภายในของคลาส กบคลาสอนๆหรอคอมโพเนนทอนๆ โดยมประโยชนเพอแสดงเหนถงความสมพนธของการเรยกใชงานในขณะทโปรแกรมท างาน (Run-Time)

Deployment Diagram แสดงถงการน าเอาซอฟตแวรไปตดตงและใชงาน ในเชงของโครงสรางสถาปตยกรรม เชน สถาปตยกรรมของเครองแมขาย การท างานรวมกนระหวางซอฟตแวร – เครองแมขายของ Application Server – หรอเครองแมขายส าหรบฐานขอมล Database Server หรอแมกระทงลกษณะของการเชอมตอโดยผานเครอขายเนตเวรกโดยอาศยโพรโตคอล TCP/IP

Object Diagram แสดงถงความสมพนธคลายกบโครงสรางของคลาสไดอะแกรม แตจะแสดงในรายละเอยดในระดบของออบเจกต ทมการสรางในระดบของออบเจกตอนสแตนซ (Object Instance)

Package Diagram แสดงถงการจดแบงคลาสในลกษณะทเปนความสมพนธแบบล าดบชน

Page 38: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

38

(Class Hierarchy) และการจดกลมของคลาสทมบทบาทหนาทคลายกนในลกษณะทเปนแพคเกจ กลมท 2 แผนภาพไดอาแกรมทแสดงถงพฤตกรรม

Use Case Diagram แสดงความสมพนธระหวางผใช (Actor) กบระบบ (System) ในมมมองของผใชงานวาระบบสามารถทจะบรการ (Service) อะไรใหแกผใช ซง Class Diagram จะเปนไดอาแกรมทแสดงใหเหนถงขอบเขตการท างานของระบบโดยรวม หรอการตดตอสอสารระหวางระบบดวยกน

Activity Diagram แสดงใหเหนถงขนตอนการท างาน และตรรกะของกจกรรมทมความซบซอนและตองอาศยการอธบายเพอใหเหนล าดบเหตการณการท างาน เชนขนตอนการสมคร หรอขนตอนการพจารณาสนเชอ

State Diagram แสดงใหเหนถงสถานะของออบเจกต เมอมการด าเนนงานกจกรรมใดๆ เชนการเรยกเมดธอด Break() สงผลใหสถานะของออบเจกตรถยนตมสถานะเปนหยดนง กลมท 3 แผนภาพไดอาแกรมทแสดงถงการโตตอบ

Sequence Diagram แสดงความสมพนธของการเรยกใชงานเมทธอดทอยภายในคลาสตางๆ โดยมล าดบขนตอนและเวลาด าเนนการ และการตอบสนอง ส าหรบแตละกจกรรมทมการด าเนนการ

Communication Diagram แสดงความสมพนธระหวางออบเจกต ทแสดงถงล าดบเหตการณและการท างานของออบเจกตเปนขนเปนตอน โดยทออบเจกตทเลอกมาจดท าเปนไดอาแกรมนอาจจะมาจากคลาส ซเควนซ และยสเคสไดอาแกรม

Interaction Overview Diagram

แสดงใหเหนถงขนตอนการท างานในระดบกจกรรม ซงคลายกบ Activity Diagram แตในแตละกจกรรมทแสดงนนจะแสดงรายละเอยดทเปนการขยายความ โดยแสดงเปน Sequence หรอ Communication

UML Timing Diagram แสดงถงพฤตกรรมการท างานของออบเจกตตามชวงเวลาตางๆ ซง ไดอาแกรมนมความคลายกบ Sequence Diagram

2.5 การศกษาความตองการของผใช (User Requirement) คณลกษณะของโปรแกรมทดคอโปรแกรมทพฒนาขนมาตรงตามความตองการของผใชงาน ม

รปแบบการท างานทชดเจนตรงตามวตถประสงคทตงไว มสวนเชอมตอกบผใชงานทงาย สะดวกตอการเขาถงและเรยกใช (User Friendly Environment) หรอซอฟตแวรทดจะตองมการสอสาร (User Interaction) ทดเพอใหผใชงานรวาขณะนตวเองก าลงท าอะไร ซอฟตแวรก าลงประมวลผลอะไร และไดผลลพธอะไรกลบคนมา ซงนนเปนมมมองในฝงผใชงานเองทอาจจะมองซอฟตแวรเปนเหมอนกบกลอง

Page 39: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

39

ด า (Blackbox) ทผใชงานไมจ าเปนตองสนใจในรายละเอยดของการท างาน แตสนใจผลผลตทไดจากการท างานของซอฟตแวร แตหากในมมมองของผพฒนาแลวซอฟตแวรจะตองมขอบเขตความตองการของผใชงานทชดเจน มความเขาใจโดเมนของปญหา มแนวทางและเขาใจขนตอนของการแกปญหา ซงการทจะท าใหนกพฒนาโปรแกรมรและเขาใจสงทผใชตองการ ในการบวนการพฒนาซอฟตแวรจงมขนตอนของการศกษาความตองการของผใชงาน (User Requirement Gathering) เกดขน ซงเปนขนตอนหนงทส าคญมาก เนองจากหากนกพฒนาโปรแกรมไมเขาใจถงปญหาความตองการของผใชอยางแทจรงแลว อาจจะท าใหการสอความหมายของซอฟตแวรทตองการพฒนานนผดไป ท าใหซอฟตแวรทพฒนาไมไดตรงกบความตองการ ท าใหเสยทงเวลา งบประมาณ และทรพยากรบคลากรในทสด การศกษาความตองการของผใชงานมวธการอยหลายวธดวยกนขนอยกบวธ การทนกพฒนาซอฟตแวรจะเลอกใช แตขนตอนทส าคญมอย 4 วธคอ

1. การสมภาษณ (Interview) การสมภาษณถอไดวาเปนวธการทไดรบความนยมวธหนง เนองจากไดสอสารกบผใช

โดยตรงในลกษณะ Face-to-Face และเปนการไดรบฟงปญหาจากผใชโดยตรง ซงในระหวางการสมภาษณอาจจะมการจดบนทกเปนเอกสาร หรอการอดเสยงการสมภาษณเพอน ามาฟงหรอวเคราะหในภายหลง การขนตอนนนกพฒนาอาจจะเลอกสมภาษณผใชงานทเกยวของหรอเจาหนาททเกยวของกบงานนนๆ หรอเฉพาะระดบผจดการ อยางไรกตามการสมภาษณอาจจะมขอเสยตรงทการสมภาษณแตละครงนนใชเวลาคอนขางมาก ซงจ าเปนตองม Outline ของเนอหาและก าหนดเวลาในการสมภาษณใหด การเลอกผทจะสมภาษณกเปนสงจ าเปนเนองจาก ผใหสมภาษณแตละคนอาจจะมความรความเขาใจของปญหาทแตกตางกน หรอาจจะมมมมองของปญหาทขดแยงกน ซงจะตองท าการประมวลสงทไดรบจากการสมภาษณและน าไปสรปใหกบผใชงานอกครงหนง

2. การท าแบบสอบถาม (Questionnaire) ในการพฒนาซอฟตแวรจากความตองการของผใชงาน ซงบางครงผใชงานเองอาจจะยงไม

เขาใจถงปญหาทแทจรงวาตนเองตองการอะไร หรอองคกรตองการอะไร การแกไขปญหาขององคกรโดยวธการพฒนาซอฟตแวรจะเปนค าตอบสดทายทจะน ามาซงการแกไขปญหาหรอไม ซงในกรณแบบนการเลอกท าแบบสอบถามจากผใชงาน ทอาจจะมหลายระดบ หลายกลมคนเขามาเกยวของ อาจจะเปนทางเลอกหนงในการศกษาความตองการของผใชงาน เพราะแบบสอบถามอาจจะเปนค าถามปลายปดเพอใหผใชงานยนยนในสงทตองการหรอการยอมรบในสงทมอย หรอในลกษณะของปญหาแบบปลายเปดเพอใหผใชสามารถแสดงความคดเหนของตนเอง เชนอธบายคณลกษณะของซอฟตแวรทตองการอยากจะเหนหรออยากได อยางไรกตามการท าแบบสอบถามนนกยงมขอจ ากดในเรองของการสอสารทอาจจะตองมการตความในสงทยงคลมเครอและสรปเปนประเดนเพอใชก าหนดเปนความตองการทชดเจน

3. การศกษาจากเอกสารทมอย (Existing Documents) การศกษาความตองการของผใชงานจากการสมภาษณหรอแมการท าแบบสอบถามเอง

อาจจะท าใหภาพความตองการโดยรวม แตอาจจะยงไมเพยงพอส าหรบการน าไปออกแบบเชง

Page 40: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

40

รายละเอยด ซงวธการศกษาจากเอกสารทมเปนวธหนงทจะท าใหนกพฒนาเหนภาพของตวอยางของการใชงานจรงในองคกร หรอรปแบบการจดวางของเอกสาร รายงาน เชนตวอยางของเอกสาร รายงาน ตวอยางใบเสรจ หรอเอกสารอาจจะเปนรายงานประจ าปขององคกรเปนตน ซงกรณทหนวยงานมเอกสารทเคยจดท าไวแลวทงทเปนอเลคทรอนกสหรอเปนกระดาษ และทสามารถเปดเผยใหกบนกพฒนาได ถอวาเปนเรองทดเพราะการแกไขปญหานนจะอยบนพนฐานของปญหาทแทจรง แตกรณทหนวยงานไมเคยมเอกสารหรอระบบงานนนๆมากอนเลย กจะตองมการหารอกบนกพฒนาเพอก าหนดรปแบบและเนอหาของเอกสารหรอรายงานนนขนมาใหม

4. การศกษาโดยวธการวจย (Research) ในบางครงความตองการของผใชงานอาจจะเปนสงใหมหรอเปนสงทไมเคยเกดขนมากอน

หรอเปนความตองการทผใชงานวาดฝนอยากจะเหน ซงลกษณะของการศกษาความตองการของผใชงานโดยวธการท าวจยนนอาจเปนการทดลองโดยจดท าเปนตนแบบ (Prototype) หรอมการสรางสถานการณจ าลอง (Simulation) ในสภาพแวดลอมทใกลเคยงกบความเปนจรง ซงลกษณะของการท าวจยนนอาจจะเปนการทดลองท าตนแบบของซอฟตแวร โดยการแสดงเปนหนาจอตวอยาง หรอตนแบบในลกษณะของระบบทตองการวดประสทธภาพการท างานของระบบเปนตน การท าวจยนเปนวธทเหมาะสมกบสงทตองการทดลองหรอพสจนถงความเปนไดของงานโดยทไมจ าเปนตองลงทนพฒนาหรอรอใหทงระบบมการพฒนาเสรจสนกอน

ดงนนเราพอจะสรปไดวาความตองการของผใชงานนนเปนสงส าคญ ซงจะน าไปสการพฒนาซอฟตแวรอยางมประสทธภาพ ซอฟตแวรทพฒนานนจะตองมคณลกษณะตรงตามความตองการของผใช มวตถประสงคหรอเปาหมายของการท างานทชดเจน และในสวนของผพฒนาเองจะตองเขาใจโดเมนปญหา ท าใหการวเคราะห เปนระบบทสามารถพฒนาและน าไปใชงานไดจรง หรอทายสดแลวผพฒนาจะตองค านงถงวาการใชงานซอฟตแวร อาจจะมอายการใชงานทยาวนาน ซงอาจจะเปนป หรอหลายป ซงในระหวางนนจะตองมการปรบแกไข หรอปรบปรงเมอผใชงานพบปญหา ดงนนการบ ารงดแลรกษาซอฟตแวรใหสามารถท างานไดอยางตอเนองมความยดหยนทสามารถรองรบการเปลยนแปลงอาจจะเกดขนในอนาคต จงเปนเรองทส าคญ เพอใหซอฟตแวรทพฒนานน เปนซอฟตทมคณภาพ

Page 41: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

41

บทท 3 - คลาสและออบเจกต สงส าคญในการพฒนาโปรแกรมเชงวตถ คอ การวเคราะหและออกแบบโครงสรางของ

โปรแกรมใหอยในรปของออบเจกตตางๆ และรวมไปถงความสามารถในการท างานรวมกนระหวางออบเจกตดวย ในบทนเราจะท าความรจกกบคลาสซงเปรยบเสมอนเปนโครงสรางของออบเจกตในมมมองของการพฒนาโปรแกรม และรจกวธการสรางออบเจกตขนมาใหมดวยวธการสราง Instance ของคลาส การสอสารระหวางออบเจกตดวยวธการของ Message Passing รวมไปถงการควบคมการมองเหนของคณสมบตของออบเจกต (Attributes) และเมทธอด (Methods) ภายในออบเจกตเรยกวา Polymorphism หรอ Information Hiding

วตถ (Objects) คอ สงใดๆ กตามซงมคณลกษณะ (Attribute) บงบอกถงความเปนตวของตวเองในขณะนน และสามารถแสดงพฤตกรรม (Behavior) ของตวเองออกมาได ในชวตประจ าวนเมอมองดรอบตว เรากจะพบเหนวตถตางๆ มากมาย ไมวาจะเปนวตถทเราสามารถมองเหนไดและ จบตองได (Tangible Objects) เชน โตะ รถยนต คอมพวเตอร หรอแมแตตวเราเอง ในขณะเดยวกน ในโลกของเรากยงมวตถทมอยจรง แตไมสามารถจบตองได (Intangible Objects) เชน กฎหมาย (ในทนหมายถงกฎขอบงคบทรฐบญญตขน ไมใชตวเลมรฐธรรมนญ ซงถอเปน Tangible Object) เวลา หรอความรตางๆ เปนตน กจกรรมตางๆ ทเกดขนในชวตเรานน ลวนแลวแตเกดจากการมความสมพนธ (Relationship) และการมปฏสมพนธ (Interaction) ระหวางออบเจกต 2 ตวขนไป

การเขยนโปรแกรมเชงวตถจะท าการมองปญหาของโปรแกรมเปนแบบออบเจกต โดยมองวาโปรแกรมหนงจะประกอบไปดวยหลายๆ ออบเจกตเขาดวยกน โดยในหลกการกคอ ออบเจกตแตละตวจะเปนเอกเทศ (Modularity) มความสมบรณในตวเองและท าหนาทตางกนไป ออบเจกตแตละตวประกอบไปดวยสวนทเปนชดขอมล (Data member) หรอบางครงเรยกวาเปน attributes และ เมทธอด (Methods) ทใชในการจดการกบขอมล บางครงเมทธอดเหลานอาจมองวาเปนพฤตกรรม (Object Behavior) ของออบเจกตการจดรปแบบโครงสรางแบบออบเจกตน (Object-Oriented Structure) ชวยท าใหการออกแบบ การพฒนา การแกไขขอผดพลาด และการน าออบเจกตไปใชงานใหมสามารถท าไดงายขน ตวอยางของการวเคราะหโครงสรางของออบเจกตมดงน

Object Cat Attributes: name, color Behavior: walk, run, sleep, eat Object Car Attributes: make, model, year, color, engine size, speed Behavior: move, stop, brake, change gear, start up engine, accelerate

Page 42: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

42

Object Student Attributes: id, name, last name, phone number, address, grade, GPA Behavior: take course, take exam, study, show grade, show GPA, display

จากตวอยางจะเหนวาโครงสรางของออบเจกตจะถกวเคราะหเปนสองสวนส าคญเสมอ ส าหรบคณสมบตหรอบางครงเรยกวาเปนคณสมบต Property ของออบเจกตและส าหรบ Behavior ไดแก การกระท า หรอเปนการแสดงใหเหนวาออบเจกตสามารถกระท าอะไรได ซงอาจจะเรยกวาเปน Action หรอเหตการณ (Event) ทสามารถเกดขนกบออบเจกตได

หวใจส าคญของการพฒนาโปรแกรมเชงวตถ กคอ ออบเจกต “Object” หรอวตถ ซงหมายถง Entity หรอสงทมตวตน และน าไปใชในการประมวลผลขอมล โดยในออบเจกตจะตองมขอมล (Attribute) ทใชในการอธบายตนเองและการกระท าตาง ๆ (Behavior) ทออบเจกตสามารถกระท าได ออบเจกตสามารถเปนไดทงสงทมองเหนได เชน รถ เรอ สนคา หรอเปนเหตการณตาง ๆ เชน การขายสนคา การประชมเชงวชาการ การสอบแขงขนเขามหาวทยาลย หรอแมกระทงเปนตวโปรแกรมทใชเขยนขนมา กถอวาเปนออบเจกตเชนกน หรอรานขายยารานหนง มโปรแกรมเกยวกบสนคาคงคลงส าหรบขายสนคาในรานตวอยาง เชน ยา 1 ชนด ถอวาเปน 1 ออบเจกตภายในยาแตละชนดกจะมชอยา จ านวนทเหลอ ราคาขาย เลขทยา จดสงซอและรายละเอยดอนๆ เหลานถอวาเปน “Attribute” หรอขอมลทใชอธบายยาแตละชนด นอกจากนนตวยาแตละชนดกจะมขนตอนการท างานเพอจดเกบขอมลของตน เชน การแกไขขอมล การเพมขอมล การประเมนวาจะถงจดสงซอสนคาใหมหรอยง ขนตอนในการท างานดงกลาวเรยกวา “Behavior” ซงกลาวไดวาออบเจกตจะตองประกอบดวยคณสมบตและพฤตกรรมนนเอง

3.1 สถานะของออบเจกต (Object States) การทออบเจกตมคณสมบตเปนของตวเองพรอมทงการกระท าทสามารถท าหรอเกดขนได เมอม

การเปลยนแปลงใดๆ เกดขนกยอมมผลกระทบตอตวออบเจกตเอง หรอเรยกไดวาสถานะของออบเจกตไดเปลยนไป ดงเชนในตวอยางของออบเจกตรถ ซงเมอออบเจกตถกสรางขนมาใหมจะมสถานะเปนหยดนง และเมอมการเรงเครองยนตหรอมการเบรก กจะมผลกระทบกบสถานะของออบเจกตซงอาจจะใชวธตรวจสอบจากความเรวของรถเปนหลกวา เชน รถในขณะนมสถานะเปนก าลงเคลอนทหรอก าลงหยดนง สถานะของออบเจกตอาจจะแบงออกเปนสถานะทไมซบซอน (simple state) เชน รถหยดนง ไฟสญญาณเปนสเขยว วดโอเทปก าลงเลนเทป หรอตเยนมอณหภมเปนศนย และในบางครงสถานะของออบเจกตกอาจจะซบซอนอยางเชน ในตวอยางของออบเจกตตวหมากรกทตองมสถานะไดเปรยบหรอเสยเปรยบและตองขนอยกบออบเจกตของตวหมากรกของฝงตรงขาม ทงนจะเหนไดวาคณสมบตของออบเจกตจะเปนตวก าหนดสถานะของออบเจกตนนๆ หากวาเปนออบเจกตทมสถานะทซบซอนกอาจจะมจ านวนของคณสมบตทเพมขน และการทมการเปลยนแปลงคาในคณสมบตหนงกอาจสงผลใหมการเปลยนแปลงในคณสมบตทเหลอดวย

Page 43: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

43

ดงนนวตถประสงคทส าคญอยางหนงของการออกแบบออบเจกตกคอ พยายามท าใหออบเจกตมโครงสรางทสามารถจดการไดงาย เพอลดการใชคณสมบตและเมทธอดทซบซอน อยางไรกตามในกรณทไมสามารถหลกเลยงการสรางออบเจกตทมความซบซอน กอาจจะใชวธการแบงออบเจกตใหเปนออบเจกตยอยหลายๆ ออบเจกตเปนตน การแบงเปนออบเจกตยอยหลายๆออบเจกตนมขอด คอ สามารถจดการกบออบเจกตแตละสวนไดงายขนทงการดแลรกษา (Code maintenance) และการตรวจสอบขอผดพลาด (Error debugging) ขอเสยกคอ จะตองมการสรางความสมพนธระหวางออบเจกต (Interrelationships) ซงอาจจะท าใหโปรแกรมดซบซอนมากขน

3.2 โครงสรางของคลาส (Class Structure) แนวการพฒนาโปรแกรม การสรางออบเจกตจะอาศยการออกแบบชนดของขอมลทเรยกวา

“คลาส” (Class) ซงคลาสในความหมายของโปรแกรมภาษากคอ ออบเจกตนนเอง ส าหรบโครงสรางโดยพนฐานของคลาสประกอบไปดวยสมาชกของคลาส (Data member) และเมทธอด (Methods)

public class <class_name> {

// Data Members

<data_type> data_member1;

<data_type> data_member2;

<data_type> data_member3;

// Function Members

void Method1() {

...

}

// Function Members

void Method2() {

...

}

}

การประกาศสมาชกของคลาส สามารถอยในต าแหนงใดๆ กไดภายในคลาส แตโดยปรกตจะ

นยมประกาศใหอยในกลมเดยวกนในตอนเรมตนหรอตอนทายของคลาส ส าหรบแนวคดของการเขยนโปรแกรมเชงวตถนนเหมาะกบการน าเอาปญหาทเกดขนจรงมาจ าลองการท างาน โดยมองวาปญหาตางๆ นนอยในรปของวตถ ตวอยางเชน ถาตองการเขยนโปรแกรมเพอแสดงการท างานของเครองวดโอ เราอาจจะมองวาเครองวดโอหนงเครองนเปนออบ เจกตหนงออบเจกต ส าหรบการวเคราะหหาองคประกอบของออบเจกตนนเรามองวาเครองวดโอประกอบไปดวยปมและไฟทท าหนาทในการแสดงผลการท างานเชนเมอเครองท างาน หรอเมอเลนเทป คณสมบตเหลานกคอขอมลของออบเจกตวดโอนนเอง สงส าคญอกอยางหนงของออบเจกตไดแก ฟงกชนการท างานของวดโอ เชน การใสเทปวดโอ (InsertTape) การเลนวดโอ (Play) การหยดชวคราว (Pause) การหยด (Stop) และการน าเอา

Page 44: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

44

วดโอออกจากเครองเลน (Eject) จากการวเคราะหโครงสรางของออบเจกต วดโอน เราสามารถออกแบบโครงสรางของออบเจกตวดโอไดดงน

Object Video:

Data Member: Light, Tape Status

Methods: Power On, Play, Stop, Rewind, Forward, Pause

จะเหนไดวาออบเจกตวดโอนมคณสมบตคอ ไฟทแสดงสถานะของเครองเลน สถานะของเทป

และในสวนของ พฤตกรรมของวดโอ (ในตวอยางนแสดงถงวาวดโอสามารถท าอะไรไดบาง ) กคอความสามารถในการเปด/ปดเครอง การเลนเทป การหมนเทปไปขางหนาหรอถอยหลง การหยดเลน และการหยดชวคราว โดยจะสามารถน ามาเขยนใหอยในรปแบบของคลาสไดดงตอไปน

class Video {

private boolean Power;

private String Light;

private boolean VideoTape;

public void PowerOn(boolean) { // Implementation }

public void InsertTape() { // Implementation }

public void Play() { // Implementation }

public void Stop() { // Implementation }

public void Pause() { // Implementation }

public void Eject() { // Implementation }

public boolean hasVideo() { // Implementation }

}

จากตวอยางนเปนการสรางคลาสทชอ Video ขนมาโดยประกอบดวยสมาชกของคลาส

Power, Light และ VideoTape โดย Power มชนดเปนแบบตรรกะ (boolean) มคาเปนจรงหรอเทจ เพอบงบอกวาวดโอนท างานหรอไมท างาน ส าหรบสญญาณไฟ Light ใชส าหรบแสดงไฟสตางๆส าหรบการท างานตามฟงกชนตางๆ และ VideoTape เปนตรรกะในการตรวจสอบเมอมเทปวดโอ ในสวนของเมทธอดทแสดงถงฟงกชนการท างานของเครองเลนวดโอประกอบไปดวยเมทธอด PowerOnOff(), InsertTape(), Play(), Stop(), Pause(), Eject() และการตรวจสอบวามเทปอยในเครองเลน HasVideo() ซงเมทธอดเหลานอาจมผลตอการเปลยนแปลงคาของสมาชกภายในคลาส ตวอยางเชน การเรยกใชงานเมทธอด PowerOnOff() ซงท าใหเครองเลนวดโอท างานหรอหยดท างานซงขนอยกบสถานะของเครองเลนในขณะนน

public void PowerOnOff() {

if (Power == false)

Power = true;

else

Power = false;

}

Page 45: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

45

สงส าคญอยางหนงในการออกแบบออบเจกตคอ การซอนขอมลหรอสมาชกภายในออบเจกตเพอไมใหออบเจกตอนๆ สามารถทจะมองเหนหรอเขาถงสมาชกทอยภายในออบเจกตไดโดยตรง และการทจะเขาถงสมาชกเหลานไดจะตองอาศยเมทธอดทเรยกวา getters และ setters methods ซงไดแก เมทธอดทมชอขนตนดวยค าวา get กบ set . . .

public boolean getPowerOnOff() { return Power; }

public void setPowerOnOff(boolean power) { this.Power = power; }

public String getLight() { return Light; }

public void setLight(String light) { this.Light = light }

public boolean getVideoTape() { return VideoTape; }

public void setVideoTape(boolean video) { this.VideoTape = video; }

. . .

จากตวอยางน จะเหนไดวาการท างานฟงกชน get() ท าหนาทในการสงคาปจจบนของสมาชกกลบ และ set() ฟงกชนท าหนาทในการก าหนดคาทรบเขามาจากพารามเตอรเพอก าหนดคานนใหกบสมาชกภายในออบเจกต

3.3 อนสแตนซของคลาส (Class Instance) ในการพฒนาโปรแกรมเชงวตถ คลาสเปรยบเสมอนเปนการสรางชนดของขอมลขนมาอกชนด

หนง เปนชนดทมโครงสรางซบซอน (Complex data type) หรอมโครงสรางทเปนแบบ แอบสแตก (Abstract data type) เนองจากวาคลาสนนประกอบไปดวยสวนทเปนขอมลทเปนสมาชกของคลาสและพรอมกบเมทธอด แตกอนทจะน าคลาสไปใชงานไดจ าเปนทจะตองมการสรางอนสแตนซของคลาสขนมากอนเรยกวา class instantiation ซงคลาสอนสแตนซกคอ ออบเจกตทถกสรางขนมาใหมนนเอง ดงนนเราอาจจะเรยกไดวาคลาสนนท าหนาทเปนพมพเขยว (Template) ของออบเจกต การสรางอนสแตนซของคลาสในภาษาจาวาจะตองอาศยค าสง new ตวอยางเชน หากตองการสรางออบเจกตวดโอขนมาหนงออบเจกตจากคลาสวดโอหนงออบเจกต

class Program { public static void main(String args[]) {

Video myVideo;

myVideo = new Video();

}

}

จากตวอยางแสดงใหเหนถงเมทธอด main() ซงเปนเมทธอดส าคญในการเปนจดเรมตนท างาน

ของโปรแกรม โดยการท างานเรมตนจากการประกาศตวแปร (Variable declaration) และการสรางเปนออบเจกตใหมขนมาโดยอาศย new

myVideo = new Video();

ส าหรบ myVideo ในตวอยางนเปนตวแปรทท าหนาทอางองไปยงออบเจกต (Object reference) Video ซงเราสามารถใชตวแปรนในการอางองถงสมาชกหรอเมทธอดทอยภายในออบเจกต

Page 46: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

46

3.4 การสงขอความระหวางออบเจกต (Message Passing between Objects)

ในการพฒนาโปรแกรมเชงวตถ โปรแกรมทเราสรางขนนนอาจประกอบไปดวยหลายๆออบเจกตทท างานรวมกน การทออบเจกตจะสามารถท างานรวมกนไดนนจะตองมการสอสารระหวางออบเจกต (Object interactions) โดยอาศยเทคนคเรยกวา Message Passing นนกคอ การสงขอความจากออบเจกตหนงไปยงอกออบเจกต (Sending message) หรอการรบขอความทถกสงมาจากอกออบเจกตหนง (Receiving message) ซงสามารถท าไดโดยผานเมทธอดของออบเจกต

การรบและสงขอความระหวางออบเจกตถอวาเปนหวใจส าคญในการทจะท าใหออบเจกตสอสารระหวางกนได โดยการสอสารระหวางกนนน ออบเจกตทออกแบบจะตองก าหนดในเบองตนวาจะใหออบเจกตบรการ (Service) อะไรใหแกออบเจกตอนๆไดบาง ยกตวอยางออบเจกตตอไปน

object Employee ประกอบดวย attribute : SocialSecurityNumber, Gender , DateOfBirth, Income method : getSocialSecurityNumber, getGender, getDateOfBirth

object Payroll ประกอบดวย attribute : Pay method : calculatePay

ออบเจกต Employee มคณสมบตหมายเลขบตร เพศ วนเดอนปเกดและรายได แตคณสมบตเหลานมกจะถกซอน (private data member) เพอไมใหสามารถมองเหนไดจากออบเจกตอนๆ (อธบายในบทท 4.2) ดงนนการทจะใหออบเจกตอนๆสามารถทจะเขาถงหรอสามารถเรยกใช Data Member ภายในได จะตองเรยกผานเมทธอดทใหบรการเทานน เชนหากตองการขอมลรหส Social Security Number ของพนกงานกจะตองเรยกผานเมทธอด getSocialSecurityNumber ดงแสดงในรป 3.1

Page 47: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

47

+calculatePay()

PayRoll

-Pay

+getSocialSecurityNumber()

+getGender()

+getDateOfBirth()

Employee

-SocialSecurityNumber

-Gender

-DateOfBirth

-Income

PayRoll ObjectEmployee Object

Message:

getSocialSecurityNumber

รป 3.1 แสดงการสงคารองขอขอมลระหวางออบเจกต

ในลกษณะเดยวกน หากออบเจกต PayRoll ตองการททราบวาพนกงานนนมวนเดอนปเกดเปนอยางไร กจะตองเรยกผานเมทธอด getDateOfBirth แตถากรณทออบเจกต PayRoll ตองการขอมลเฉพาะ วนทเกด หรอปทเกดของพนกงาน แตออบเจกต Employee ไมไดมบรการในสวนนใหกจะไมสามารถท าได ซงจากตวอยางดงกลาวจะเหนไดวาการเรยกใชงานเมทธอดทใหบรการรบและสงคามกจะเรมตนดวยค าวา get[MethodName] และค าวา set[MethodName] ซง get จะหมายถงเมทธอดทท าหนาทสงคาจากออบเจกตมาใหอกออบเจกตหนง และ set จะหมายถงการทเมทธอดนนท าหนาทในการก าหนดคาใดคาหนงใหแกออบเจกต ตวอยางเชนในกรณของออบเจกตวดโอ ซงเราสามารถเรยกเมทธอด

bool status = myVideo.getPowerOnOff();

เพอทจะรบขอความจากออบเจกตวดโอดวยการตรวจสอบสถานะของเครองเลนเทป จากตวอยางนจะเหนไดวาการสอสารกบออบเจกตนนสามารถท าไดดวยการสงขอความหรอรบขอความจากออบเจกตโดยผาน เมทธอดทสรางไว ซงการใชงานเมทธอดนนจะใชเครองหมายจด (Period) ตามดวยชอของเมทธอดดงตวอยางตอไปน

Video myVideo = new Video();

myVideo.setPowerOnOff(true);

myVideo.setLight("Green");

myVideo.setVideoTape(true)

myVideo.Play();

myVideo.Stop();

myVideo.Eject();

myVideo.setPowerOnOff(false);

3.5 การประกาศคาตวแปรของออบเจกต จากตวอยางทผานมาจะเหนวาการสรางอนสแตนซของออบเจกตนนจะตองเรมตนจากการ

สรางตวแปรของออบเจกต myVideo เราเรยกวาเปนตวแปรทยงไมไดมการก าหนดคา (Uninitialize

Page 48: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

48

variable) ซงในจดนตวแปร myVideo ไมไดมคาเปนศนยแตเปนลกษณะของ null ซงเหมอนกบวาเปนตวแปรทอางองถงออบเจกตวางทยงไมไดมการสรางขนมา แตถาอยากให myVideo เปนตวแปรทอางองถงออบเจกตวดโอกจ าเปนตองอาศย new เชน

Video myVideo;

myVideo = new Video();

หรอในกรณทตองการก าหนดตวแปรและท าการสรางอนสแตนซของคลาสขนมาใชงานพรอมกน

Video myVideo = new Video();

3.6 การท าลายออบเจกต (Object Destruction) การสรางออบเจกตขนมาใหมโดยใชค าสง new นน เปนการขอเนอท (Memory Allocation) จากหนวยความจ าใหกบออบเจกตและเมอสนสดการใชงานออบเจกตนนแลวควรจะตองมการท าลายออบเจกตทสรางเพอเปนการลางและคนหนวยความจ า ( Memory Deallocation) ใหกบระบบปฏบตการ ในการพฒนาโปรแกรมโดยทวไปนน การลางหนวยความจ าจะตองอาศยโปรแกรมทเขยนขน หากไมท าอยางนนแลวกอาจเกดขอผดพลาดในการใชงานหนวยความจ าไดเชน หนวยความจ ารวไหล (Memory Leak) แตส าหรบการเขยนโปรแกรมแบบออบเจกตโอเรยนเทดน การสรางและการยกเลกการใชงานออบเจกตจะเกดขนบอยครง ดงนนเพอไมใหเกดปญหาของหนวยความจ ารวไหล ไมวาจากสาเหตใดกตาม กลไกควบคมขยะอนสแตนซ (อนสแตนซ คอ พนทในหนวยความจ าซงสรางตามแบบโครงรางของคลาสใดๆ ดงนน อนสแตนซคอ พนททสามารถเกบขอมลและประมวลผลตามสวนทประมวลผลไดนนเอง) เกดขน เนองจากเมอมการสรางโปรแกรมจ าเปนตองมการสรางอนสแตนซหลายๆ อนสแตนซเพอใชงาน อนสแตนซบางอนสแตนซถกอางดวยตวแปรอางถง แตบางอนสแตนซกไมถกอางดวยตวแปร อางถง ดงนนเมอโปรแกรมถกท างานเปนระยะเวลาหนง อาจท าใหอนสแตนซทไมถกอางถงเกดเปนขยะขนและไมสามารถน ากลบมาใชงานหรออางถงไดอกตอไป

Date today;

today = new Date( ); //First instance

...

today = new Date( ); //Second instance

...

today = new Date( ); //Third instance

จากตวอยางขางตนจะเหนวาในโปรแกรมนมการสรางอนสแตนซขนมาทงสน 3 อนสแตนซ (สงเกตจากการใชค าสง new ถง 3 จด) แตมการสรางตวแปรอางถงเพยงตวเดยว คอ today ตวแปรอางถงดงกลาวมการยายการเชอมโยงไปยงอนสแตนซทงสามตว ท าใหชวงสดทายมอนสแตนซทเปนขยะ คอ อนสแตนซทหนง และ อนสแตนซทสอง สวนอนสแตนซตวทสาม เปนตวทยงคงถกใชงาน ดงนนอนสแตนซทคางอยในหนวยความจ าท าใหสนเปลองพนท หากมอนสแตนซทเปนขยะเปนจ านวนมากๆ แลว สามารถท าใหโปรแกรมหยดการท างานได เนองจากไมมหนวยความจ าเหลอใหใชงาน

Page 49: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

49

ตอไป ผใชโปรแกรมอาจพบขอความรายงานขอผดพลาดขนมากมาย เชน Insufficial Memory หรอ Out of Memory เปนตน ภาษาทสนบสนนการท างานแบบออบเจกตจะมกลไกพเศษทสามารถก าจดขยะอนสแตนซทไมถกใชงานเหลานออกจากหนวยความจ า โดยท างานในแบบฉากหลง (Background Process) โดยผเขยนโปรแกรมไมจ าเปนตองเขยนค าสงก าจดขยะดวยตนเอง และผใชโปรแกรมกไมรเลยวามการก าจดขยะอนสแตนซขนเมอใด เพราะเปนกลไกทท างานโดยอตโนมต ซงไมเหมอนกบภาษาเชงวตถตวอนๆ ทผเขยนโปรแกรมตองระมดระวงปญหาในลกษณะน โดยตองคนพนทใหกบหนวยความจ าทกครงทไมมการใชงานอนสแตนซ เชน ในภาษา C++ ตองใชค าสง free เพอก าจดอนสแตนซทงออกจากหนวยความจ าทกครง

โปรแกรมภาษาทสนบสนนการท างานแบบออบเจกตในปจจบนจะมตวชวยในการจดการลางหนวยความจ าใหอตโนมตดวยเทคนคเรยกวา Garbage Collection การลางหนวยความจ าจะเกดขนอตโนมตเมอสนสดการใชงานออบเจกต โดยปรกตแลวจะกระท าเมอโปรแกรมออกจากบลอก (Scope) การท างานของโปรแกรม ตวอยางเชนโคดตอไปน

if (valueA == valueB)

{

Video myVideo = new Video();

myVideo.setPowerOnOff(true);

myVideo.Play();

myVideo.setPowerOnOff(false);

}

ในตวอยางน ออบเจกต myVideo จะถกสรางขนเมอคาของ valueA เทากบ valueB ซงการ

ท างานเกดขนและสนสดภายในบลอก {…} และหลงจากออกจากบลอกการท างานของ if ออบเจกตนกจะถกท าลายอตโนมต ส าหรบการท างานของ Garbage Collection นนจะคลายกบการควบคมการมองเหนของตวแปรในการเขยนโปรแกรมทวไป และส าหรบการสรางออบเจกตในเมทธอด main ซงถอวาเปนบลอกขอบเขตทใหญทสด ออบเจกตจะถกท าลายกตอเมอสนสดการใชงานของโปรแกรมนน

3.7 คอนสตคเตอร (Constructor) คอนสตคเตอรเปนเมทธอดทมชอเดยวกบชอคลาส ซงจะถกเรยกทกครงทมการสรางออบเจกต

ใหมขนมาโดยอตโนมต เมอออบเจกตใดๆ ถกสรางขนมาภายใตคลาสหนงนนคอ โปรแกรมจะตองไปเรยกใชเมทธอดทมชอเดยวกนกบชอคลาสทนท และเรยกเมทธอดทมชอเดยวกนกบคลาสวา คอนสตคเตอรเมทธอด ซงประโยชนของการใชงานไดแกการเรยกใชค าสงทตองกระท าเสมอเมอมการสรางออบเจกตขนมาใหม ตวอยางเชนการก าหนดคาเรมตนใหกบตวแปรแตทงนมขอจ ากดคอ

คอนสตคเตอรเมทธอดจะตองมชอเดยวกนกบชอของคลาส ลกษณะของการประกาศคอนสตคเตอรเมทธอดตองไมมคาสงกลบ หรอแมกระทงคยเวรด

“void”

Page 50: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

50

ดงนนถาชอเมทธอดใดๆในคลาสเปนชอเดยวกนกบ คลาสดวยแสดงวาเมทธอดนนเปน คอนสตคเตอร ตวอยางการสรางคอนสตคเตอรเชน ในโปรแกรมส าหรบเกมสบางอยาง จ าเปนตองเรยกใชตวเลขสม ทกครงทเรมตนเกมสใหม (เปนการก าหนดคาเรมตนใหกบโปรแกรมทกครงทเรยกใชโปรแกรม) แตทงนไมจ าเปนททกโปรแกรมจะตองมการก าหนดคอนสตคเตอรเมทธอดไวดวย แตเพอใหมมาตรฐานเดยวกน จงนยมเขยนคอนสตคเตอรเมทธอดเอาไวในโปรแกรมเสมอ ถงแมวาไมมการท างานใดๆในคอนสตคเตอรเมทธอดกตาม โดยจะก าหนดเปนบรรทดวางไว เชน สมมตชอของคลาส คอ HelloApp ดงนนจะสรางเมทธอดชอ HelloApp เอาไวดวย โดยก าหนดเครองหมายปกกาเปดและปดเอาไวเทานน (โดยไมมการท างานใดๆ)

public HelloApp()

{ … }

โดยทวไปส าหรบโปรแกรมใหญๆ ในคลาสหนงๆ มกจะมการก าหนดคอนสตคเตอรไวมากกวา

1 คอนสตคเตอรโดยจะขนอยกบคาของพารามเตอรทสง เรยกวาโอเวอรโหลด Overloading มาใชงานรวมกบคอนสตคเตอรได โอเวอรโหลดคอการประกาศเมทธอดทมชอเหมอนกนแตการสงจ านวนคาพารามเตอรหรอชนดของตวแปรทสงตางกน ตวอยางเชน คลาส Circle ตอไปนมการประกาศคอนสตคเตอรอยสองตวในลกษณะทเปนโอเวอรโหลด ใหสงเกตวาตวแปรทสงไปยงคอนสตคเตอรสองตวนตางกน

ในตอนเรมตนของบทน เราไดกลาวถงวาออบเจกตสามารถมสถานะเปนของตวเองได การก าหนดสถานะของออบเจกตนนสามารถท าไดดวยการเรยกใชผานเมทธอดทท าหนาทในการก าหนดคาใหกบสมาชกภายในออบเจกต ซงอาจจะตองเรยกเมทธอดหลายๆ เมทธอดท าใหสนเปลองจ านวน เมทธอดส าหรบการ set() แตอกวธหนงกคอการใชงานคอนสตคเตอร (Constructor) ซงเปนการก าหนดคาเรมตนใหกบออบเจกตเมอมการสรางออบเจกตขนมาใหมโดยอาศย new คอนสตคเตอร กคอเปนเมทธอดอกชนดหนงซงจะถกเรยกใชทนทเมอออบเจกตถกสรางขนมาใหม ส าหรบการสรางคอนสตคเตอรนนกเหมอนกบการสรางเมทธอดปกตทวไป เพยงแตคอนสตคเตอรนนก าหนดไววาจะตองมชอเปนชอเดยวกนกบชอของคลาส และเนองจากคอนสตคเตอรเปนฟงกชนแรกทถกเรยกใชเมอออบเจกตถกสราง เราจงนยมก าหนดคาเรมตนตางๆ ไวในฟงกชนน

class Video {

private boolean Power;

private String Light;

private boolean VideoTape;

// Constructor

Video(boolean Power, String Light, boolean VideoTape) {

this.Power = Power;

this.Light = Light;

this.VideoTape = VideoTape;

}

}

Page 51: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

51

จะเหนวาในคอนสตคเตอรนมการใชค าสง this เพอเปนการอางองถงสมาชกทเปนของออบเจกตปจจบนเพอใหสามารถแยกระหวางสมาชกของออบเจกตและคาของพารามเตอรทถกสงเขามา

3.7.1 การใชคอนสตคเตอรในคลาสทสบสกล คลาสทถกสรางขนมาใหมดวยวธการสบสกลนนสามารถทจะมคอนสตคเตอรเปนของตวเอง

เพอใชส าหรบก าหนดคาเรมตนใหกบออบเจกต แตอยางไรกตามการก าหนดคาเรมตนนนจะใชส าหรบสมาชกท เปนของตวเองเทานน สวนสมาชกทเปนของคลาสพนฐาน กจะตองใชว ธเรยกใชจาก คอนสตคเตอรทเปนของคลาสพนฐานดวยคยเวรด super() และสงขอมลเปนลกษณะของอารกวเมนตไปให

public class Employee

{

String Name, LastName, Address, Phone;

float Salary;

Employee(String n, String l, String a, String p, float sal)

{

Name = n;

LastName = l;

Address = a;

Phone = p;

Salary = sal;

}

}

class Manager extends Employee

{

float Bonus;

Manager(String n, String l, String a, String p,

float sal, float b)

{

super(n, l, a, p, sal);// call constructor in base class

Bonus = b;

} }

class MyProgram

{

public static void main(String args[])

{

Manager = new Manager("John", "Doe", "USA",

"245678", 1500.0, 100.0); }

}

จากตวอยางน จะเหนไดวาคลาส Employee และ คลาส Manager ตางมคอนสตคเตอรเปน

ของตวเอง ในกรณทสรางอนสแตนซของคลาส Manager ขนมาใหมจ าเปนจะตองสงอารกวเมนต 6 ตว

Page 52: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

52

โดยหาตวแรก (“John”, “Doe”, “USA”, “245678”, 1500.0) จะสงตอไปใหกบคอนสตคเตอรทอยในคลาสพนฐาน และอารกวเมนตตวสดทาย ซงเทากบ 100.0 จะก าหนดใหกบตวแปร Bonus ทอยในคลาส Manager

3.7.2 ดฟอลตคอนสตคเตอร (Default Constructor) การเรยกใชคอนสตคเตอรทมการรบคาตวแปรจะเปนการบงคบใหเมทธอดทเรยกจะตองสง

คาพารามเตอรมาใหครบตามจ านวนทก าหนด ซงการสงคาพารามเตอรในคอนสตคเตอรนนสวนใหญจะนยมใชเพอการก าหนดคาตงตนใหแกออบเจกต เชนคลาส Windows อาจจะมคอนสตคเตอรเพอก าหนดต าแหนง สและขนาด X1, Y2, X2, Y2 ของ Windows เพอเปนคาเรมตน แตในบางครงผใชงานอาจจะไมรลวงหนาวาคาตงตนควรจะเปนคาอะไร หรอไมตองการทจะระบคาตงตน ดงนนภายในคอนสตคเตอรเองควรจะมการก าหนดคาตงตนเปนคา Default ใหไว เพอเปนการก าหนดคาตงตนอตโนมต

ส าหรบคอนสตคเตอรลกษณะนเรยกวา Default Constructor เนองจากการประกาศ ไมจ าเปนตองระบคาพารามเตอรใดๆ ดงตวอยางตอไปน

class Boat {

int Speed;

Boat() { //Constructor

Speed = 0;

}

}

จากตวอยางนจะเหนวาคลาส Boat มการประกาศเมทธอดทเปนคอนสตคเตอรทปราศจาก

พารามเตอร และเมอมการสรางอนสแตนซของออบเจกต Boat ขนมาใหม เชน Boat myBoat = new Boat(); เมทธอดทท าหนาทเปนคอนสตคเตอรจะถกเรยกใชอตโนมตโดยจะก าหนดคาความเรวของเรอ Speed ใหเทากบศนย และถาหากตองการใหโปรแกรมมความยดหยนมากยงขนโดยจะใหมการก าหนดคาเรมตนใหกบ Speed หรอไมกไดนน เราอาจจะสรางคอนสตคเตอรขนมาอกตวหน งในลกษณะของการโอเวอรโหลดดงตวอยางตอไปน

class Boat {

int Speed;

Boat() {

Speed = 0;

}

Boat(int Speed) {

this.Speed = Speed;

}

}

Page 53: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

53

ในตวอยางนจะเหนวามการประกาศคอนสตคเตอรสองตวโดยทตวแรกจะท าหนาทเปน default คอนสตคเตอรในกรณทไมมการสงคาไปให และอกตวท าหนาทเปนคอนสตคเตอรทยอมใหผใชก าหนดคาของ Speed ไดเอง ซงการสรางคอนสตคเตอรใหมรปแบบการท างานทตางกนนนท าใหโปรแกรมทพฒนามความยดหยนในตวเองมากยงขน

3.7.3 ดสตคเตอร (Destructor) ดสตคเตอร (Destructor) ท าหนาทในทางตรงกนขามกบคอนสตคเตอร นนคอจะเปน เมทธ

อดทถกเรยกใชอตโนมตเมอออบเจกตถกท าลาย ซงการประกาศคอนสตคเตอรในแตละภาษาอาจจะตางกน ตวอยางเชน ภาษาจาวาจะใชชอวา finalize() แตส าหรบภาษา C++ ดสตคเตอรจะมชอเดยวกบชอคลาสแตจะมเครองหมาย ‘~’ น าหนา การใชงานดสตคเตอรนนมกนยมใชส าหรบการลางหนวยความจ า การปดไฟล หรอยกเลกการเชอมตอกบฐานขอมล ตวอยางเชน ในโปรแกรมขนาดใหญทตองมการใชตวแปรพอยนเตอร หรอตวแปรทเปนไดนามกโดยการขอจองหนวยความจ าขนาดใหญๆ จากระบบ เมอใดกตามทเลกใชขอมลนนๆ แลว จ าเปนจะตองมการคนคาทจองไวกลบคนสระบบดวย เปนการลางหนวยความจ า (Memory Clean-up) ใหกบระบบมหนวยความจ าเพยงพอส าหรบพรอมใชงานตอไปอยางมประสทธภาพ ส าหรบ Destructor นนจะท างานโดยมจดประสงคตรงขามกบ Constructor คอจะท างานทกครงทวตถพนขอบเขตการท างานของตววตถนนๆ ส าหรบคลาส x ใดๆ นนจะม destructor ชอ ~x() ซงกฎเกณฑการเรยกชอจะเหมอนกบคอนสตคเตอร นนเอง

ในการเขยนโปรแกรมเชงวตถ ดสตคเตอรเปนฟงกชนทจะถกเรยกใชกอนทออบเจกตจะถกท าลายโดย Garbage collection โดยภาพรวมแลวดสตคเตอรนนจะท าหนาทในทางตรงกนขามกบ คอนสตคเตอร ในทนกคอ ดสตคเตอรจะเปนฟงกชนทถกเรยกใชเมอออบเจกตถกท าลาย ส าหรบการสรางฟงกชนใหเปนดสตคเตอรในภาษาจาวานนสามารถท าไดโดยใชก าหนดชอฟงกชนเปน finalize () ดงตวอยางตอไปน

class Video {

// Constructor

public void Video(boolean Power, String Light, boolean VideoTape)

{

this.Power = Power;

this.Light = Light;

this.VideoTape = VideoTape;

}

// Destructor

void finalize() {

// clean up memory

// close file(s)

}

}

โดยหลกการท างานโดยทวไปนน ดสตคเตอรจะใชส าหรบการด าเนนการขนตอนสดทายกอนทออบเจกตจะถกท าลายเชน การลางหนวยความจ า หรอปดไฟลทเปดเอาไวระหวางการท างาน อยางไรก

Page 54: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

54

ตามการทอาศยดสตคเตอรในการท างานบางอยางอาจจะไมใชสงทดเสมอไปเนองจาก ดสตคเตอรจะถกเรยกใชกตอเมอออบเจกตจะถกท าลาย ซงจดการโดย Garbage Collector ของภาษาจาวา ซงเราอาจจะไมสามารถคาดการณลวงหนาไดวาถกเรยกใชงานเมอใด ซงการลางหนวยความจ าอตโนมตโดย Garbage Collector นนจะท าใหชวยลดความผดพลาดทเกดจากปญหาหนวยความจ าไมเพยงพอ Memory Leak หรอ Out of Memory ได

3.8 โอเวอรโหลด (Overloading) ในการเขยนโปรแกรมเชงวตถน ฟงกชนทประกาศใชภายในออบเจกตเดยวกนสามารถมชอซ า

กนได เราเรยกการประกาศฟงกชนแบบนวาเปนการโอเวอรโหลดฟงกชน (Function Overloading) แตทงนคาพารามเตอรทสงระหวางฟงกชนจะตองไมเหมอนกน คอจะสงตวแปรจ านวนเทากนกไดแตวาชนดของตวแปรนนจะมชนดทตางกน

class Student {

public void Display() {

System.out.println("The default name is "John");

}

public void Display(String Name) {

System.out.println("The name is: " + Name);

}

}

จากตวอยางนจะเหนไดวามประกาศโอเวอรโหลดฟงกชนทชอ Display() ฟงกชนหนงสามารถ

เรยกใชไดโดยไมตองสงคา และอกฟงกชนหนงจะรบคาทเปนตวแปรชนดของ String โดยในการเรยกใชฟงกชนนจะสามารถท าไดโดย

Student s = new Student()

s.Display(); //Display() without any parameter

s.Display("Sam"); //Display(String) with one parameter

ในการเรยกใชฟงกชนทท าการโอเวอรโหลด ถงแมวามการเรยกใชฟงกชนทม ชอเหมอนกน แตคอมไพเลอรกจะรวาจะตองเรยกใชฟงกชนตวไหน โดยใชวธตรวจสอบจากคาพารามเตอรทสง

3.9 โอเวอรโหลดคอนสตคเตอร (Overloading Constructor) จากการท าโอเวอรโหลดฟงกชน เราสามารถน าเอาหลกการเดยวกนนมาท าใชกบการสราง

คอนสตคเตอร เรยกวาเปนการท าโอเวอรโหลดคอนสตคเตอร โดยหลกการกเชนเดยวกนคอยอมใหฟงก ชนทท าหนาท เปนคอนสตคเตอรม ชอทซ ากนได แตอยางไรกตามจ า นวนและชนดของคาพารามเตอร ทสงกจะตองแตกตางกน

Page 55: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

55

class Student

{

private String Name;

private String Address;

Student() {

//Default constructor

this.Name = "";

this.Address = "";

}

//Overloading constructor

Student(String Name, String Address) {

this.Name = Name;

this.Address = Address;

} }

จะเหนวาคอนสตคเตอรถกท าการโอเวอรโหลด โดยทคอนสตคเตอรจะถกเรยกใชกตอเมอมการสรางออบเจกตใหมขนมา และเมอออบเจกตถกสรางขนมาใหม คอนสตคเตอรทสรางไวกจะถกเรยกใช ซงถามการประกาศฟงกชนทเปนคอนสตคเตอรมากกวาหนงตว โปรแกรมจะเรยกใช คอนสตคเตอรทถกตองซงจะตรวจสอบจากจ านวนและชนดของพารามเตอรทสงเขามา

Student s1 = new Student();

Student s2 = new Student("Fernandez","12/29St. Steven Street");

เมอออบเจกต s1 ถกสรางขนมา คอนสตคเตอรทหนงจะถกเรยกใชเนองจากไมมการสงคาให ในทนขอมลชอและทอยของ s1 จะถกก าหนดใหเปนวาง ส าหรบการสรางออบเจกต s2 โดยสงคาสองคานจะท าใหคอนสตคเตอรตวทสองถกเรยกใช โดยจะก าหนดคา “Fernandez” ใหกบ Name และ “12/29 St. Steven Street'' ใหกบ Address 3.10 สมาชกและเมทธอดแบบสถต (Static Members and Methods)

คลาสถกออกแบบขนมาเพอใชส าหรบเปนพมพเขยวเพออธบายโครงสรางออบเจกต และออบเจกตจะถกสรางโดยค าสง new เรยกวาเปนการสรางออบเจกตอนสแตนซ โดยออบเจกตจะสามารถขนมาไดไมจ ากดจ านวน ซงขนอยกบหนวยความจ าของเครองคอมพวเตอร ซงการออกแบบคลาสเพอใหสามารถสรางอนสแตนซของออบเจกตนนอาจจะเหมาะกบในหลายๆกรณทมความตองการสรางออบเจกตไดเรอยๆแบบ Dynamic ตามความตองการ เชนออบเจกต Car, Student, People แตในกรณออบเจกตอาจจะถกสรางขนมาใชงานเพยงแคครงเดยว และไมมความจ าเปนทจะตองมการสรางเพมขนมามากกวา 1 ออบเจกต เชนออบเจกต StringUtility ซงเปนออบเจกตทรวมเอาเมทธอดชวยเหลอส าหรบการจดการกบ String อาจจะประกอบดวย

Page 56: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

56

class StringUtility {

String Concatenation (String, String) { }

String Convert(int) { }

String Reverse(String) { }

}

ซงการใชงานในลกษณะนไมจ าเปนตองมการสรางอนสแตนซมากกวาหนงอนสแตนซ ดงนนเรา

ควรจะใชการก าหนดโครงสรางเมทธอดเปนแบบสถต (Static) ซงการก าหนดเมทธอดแบบสถตนมลกษณะการท างานทตางจากเมทธอดทวไป คอเมทธอดแบบสถตนจะถกสรางขนมาทนทโดยอตโนมตเมอโปรแกรมเรมตนท างาน เพอใหเมทธอดนสามารถพรอมใหเรยกใชงานโดยทไมจ าเปนตองมการสรางเปนอนสแตนซขนมาใหม ซงตวอยางทเหนไดชดเจนกคอการประกาศเมทธอด Main() ในภาษาจาวา

public static void Main(String argv[]) { }

เมทธอด Main นจะถกสรางขนมาเพอใหเรยกใชงานไดทนท ส าหรบกรณคลาส StringUtility

นจะสามารถสรางขนมาโดยใชหลกการของเมทธอดสถตดงตอไปน

class StringUtility {

static String Concatenation (String, String) { }

static String Convert(int) { }

static String Reverse(String) { }

}

การทมการประกาศใชงานเมทธอดทเปนแบบสถตนจะท าใหคลาสทประกาศจะเปนคลาสแบบสถต (Static Class) ดงนนการเรยกใชคลาสและเมดธอดทเปนแบบสถตนจะสามารถเรยกใชงานไดทนทโดยวธการอางจากชอของคลาส ตามดวยเครองหมายจด และชอของเมทธอดทตองการเรยกใช โดยทไมจ าเปนตองสรางเปนอนสแตนซขนมากอน ดงตวอยางตอไปน

String message1 = “Information”;

String message2 = “Retrieval”;

String result = StringUtility.Concatenation(message1, message2);

ส าหรบการประกาศตวแปรทเปนแบบสถตนน มหลกการท างานในลกษณะเดยวกน คอตวแปร

ทอยภายในแตละคลาสนนเปนการประกาศชอสมาชกทเปนของแตละออบเจกต ดงนนเมอออบเจกตแตละตวถกสรางขนมา สมาชกเหลานกจะถกสรางขนมาพรอมกบออบเจกตแตละตวดวย และเชนเดยวกนกบการท าลายออบเจกต สมาชกของออบเจกตกจะถกท าลายไปดวย ส าหรบเมทธอดหรอสมาชกทประกาศเปนแบบสถตจะมลกษณะทตางไปจากสมาชกแบบปกตดงน คอตวแปรทเปนแบบสถตจะถกสรางขนมาเพยงครงเดยว ไมวาจะมการสรางอนสแตนซของคลาสกครงกตาม ในลกษณะเดยวกนกบการใชเมทธอดทเปนแบบสถต นนกคอจะเปนเมทธอดทสามารถมองเหนและเรยกใชไดจากคลาสอนๆ ดงนนเมทธอดทเปนแบบสถตจะสามารถเขาถงตวแปรทเปนแบบสถตไดเทานน

Page 57: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

57

static int Counter;

static void IncrementCounter() {

Counter++; }

ขอดของการประกาศตวแปรและเมทธอดทเปนแบบสถตคอ จะสามารถเรยกใชโดยไมตองอาศยการสรางอนสแตนซของคลาสขนมาใหม หรอในกรณทตองการใชงานตวแปรหรอเมทธอดรวมกนระหวางคลาสตางๆ แตขอเสยของตวแปรสถตในทนคอตวแปรแบบนจะเหมอนกบตวแปรทเขาถงไดทวไป (Global) ซงเมทธอดอนสามารถมองเหนและแกไขได หากมขอผดพลาดจะท าใหตรวจสอบไดยากกวา ซงจะตองมการออกแบบการท างานใหด

3.11 แอบสแตกคลาสและแอบสแตกเมทธอด (Abstract Class and Abstract Method)

จากตวอยางของการสบสกลระหวางคลาส Employee และคลาส Manager กบ คลาส Sales ทผานมา จะเหนวาไมมการสรางอนสแตนซของคลาส Employee เกดขน เนองจากในโจทยถกระบไววา “ไมมพนกงานคนไหนเลยทเปนพนกงานทวไป '” คอ พนกงานจะตองถกจดอยในกลมใดกลมหนง จะเหนไดวาคลาส Employee ท าหนาทเปนแคพมพเขยวใหคลาสอนสบสกลเทานน ในกรณอยางนเราอาจจะประกาศคลาส Employee ใหเปนลกษณะของแอบสแตก (Abstract) คลาสเพอเปนการบงบอกวาจะไมมการสรางอนสแตนซของคลาสนเกดขน ลกษณะรปแบบของคลาสทเปนแอบสแตก คอ ใชคยเวรด abstract ตามดวยชอของคลาสเชน

public abstract class Employee {

// Class Body }

public class Manager extends Employee {

// Class Body }

การจะเรยกใชงานคลาสทเปนแอบสแตกไดนนจะท าไดโดยการสรางคลาสขนมาใหมเพอสบสกลจากคลาสแอบสแตกนน ดงในตวอยางหลงจากทคลาส Manager สบสกลจากคลาส Employee แลว กจะสามารถสรางเปนอนสแตนซของคลาส Manager ได

Employee e = new Employee(); // Error

Manager m = new Manager(); // Ok

คลาสท เปนแอบสแตกนนสามารถม เมทธอดภายในเปนแบบแอบสแตกไดอกดวย

แอบสแตกเมทธอด คอ ฟงกชนทมการประกาศเฉพาะชอและโครงสรางเทานน แตจะไมมการเขยนโคดค าสงภายใน (Implementation)

Page 58: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

58

public abstract class Employee {

abstract float CalculateBonus(); // Abstract Method

}

จะเหนไดวาภายในคลาส Employee มการประกาศแอบสแตกเมทธอด CalculateBonus()

โดยคยเวรด abstract กอนการประกาศเมทธอด และสงเกตวาในสวนของฟงกชนการท างานจะไมมการสรางไว โดยเขยนในรปแบบ CalculateBonus(); ส าหรบในตวอยางนเปนการแสดงถงวาการเกบขอมลพนกงานภายในบรษท จะมการค านวณเงนโบนสใหกบพนกงาน แตรายละเอยดขนตอนหรอสตรการค านวณส าหรบพนกงานแตละกลมอาจจะไมเหมอนกน ดงนนคลาส Employee ทเปนแอบสแตกจงท าไดแคเพยงประกาศเปนแอบสแตกเมทธอดไวใหเพอทเวลาคลาสทสบสกลจะสามารถโอเวอรไรดเปนเมทธอดทมฟงกชนการท างานเฉพาะเปนของตวเองได

public class Manager {

public float CalculateBonus()

{

float Bonus = Salary * 0.10;

return Bonus;

}

}

public class Sales {

// Overriding CalculateBonus()

public float CalculateBonus() {

float Bonus = Salary * 0.5;

return Bonus;

}

}

จากทผานมา เราพอจะเหนวธการท างานของแอบสแตกคลาสบางแลว พอสรปไดวาแอบสแตกคลาสและเมทธอดท าหนาทเปนพมพเขยวของโครงสรางใหส าหรบคลาสทจะมาสบสกลตอไป ซงจะท าใหรปแบบและโครงสรางของคลาสทออกแบบชดเจนมากยงขน แตอยางไรกตามการใชงานแอบสแตกคลาสกยงมขอจ ากดซงพอจะสรปไดดงน

1. แอบสแตกคลาสจะไมสามารถน าไปสรางเปนอนสแตนซได แตจะสามารถใชเปนพมพเขยวใหกบคลาสอนไดดวยการท าการสบสกลจากคลาสแอบสแตก

2. เมทธอดทประกาศเปนแบบแอบแสตกจะไมสามารถใชรวมกบคยเวรด static ได เนองจาก static เมทธอดเปนการสรางเมทธอดแบบมองเหนไดส าหรบทกคลาส ถาเมทธอด static เปนแอบสแตกจะท าใหไมสามารถสรางเมทธอดโอเวอรไรดได

3. การประกาศเมทธอดทเปนแบบแอบสแตกจะไมสามารถประกาศเปนแบบ private ไดเนองจากการใชงานคลาสทเปนแอบสแตกจ าเปนทจะตองมการสบสกลและท าการ โอเวอรไรดเมทธอด ถาหากวาเมทธอดทอยในแอบสแตกคลาสประกาศเปนแบบ private แลวจะท าใหไมสามารถมองเหนจากขางนอกคลาสได ท าใหไมสามารถโอเวอรไรดไดเชนกน

Page 59: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

59

3.12 เมทธอดแบบซอนทบ (Override Method) ในการสบสกลระหวางคลาสพนฐานและคลาสสบสกล จะเหนไดวาการสบสกลท าใหคลาสทสบ

สกลนนไดรบเอาคณสมบตของคลาสพนฐานทงหมดมาเปนของตวเอง ทงสวนทเปนสมาชกและสวนทเปนเมทธอด แตในบางครงของการท างาน เมทธอดทสบทอดมาจากคลาสพนฐาน อาจจะไมสามารถท างานไดตรงกบความตองการของคลาสทสบสกล ดงนนการเขยนโปรแกรมแบบออบเจกต จะยอมใหคลาสสบสกลสรางเมทธอดขนมาใหมภายในคลาสเองและเมทธอดทสรางนนใหมชอเดยวกนกบเมทธอดทอยในคลาสพนฐานได เรยกวาเปนการสรางเมทธอดแบบซอนทบ (Overriding Method)

class Employee {

String Name, LastName, Address, Phone;

float Salary;

void Display() {

System.out.println(Name + " " + LastName);

}

}

class Manager extends Employee {

float Bonus;

void Display() { // Overriding Method

// Calling Display() in Employee

super.Display();

system.out.println("Bonus is: " + Bonus);

}

}

จากตวอยาง จะเหนวาคลาส Manager สรางเมทธอด Display() ขนมาอกตวหนงซงเปนการซอนทบเมทธอด Display() ทอยในคลาสพนฐาน ซงเมทธอด Display() ทถกสรางขนมาใหมสามารถแสดงผลลพธไดมากกวา และส าหรบการเรยกใชงานเมทธอด Display() ทอยในคลาส Manager กสามารถท าไดโดยการเรยกเมทธอด Display() ไดเลย แตหากตองการเรยกใชงาน Display() ทอยในคลาสพนฐานจะตองอาศยคยเวรด super เพอบงชถงเมทธอดทอยในคลาสแม (Parent Class) เชน super.Display();

3.13 ไฟนอลคลาส ไฟนอลเมทธอด และตวแปรแบบไฟนอล (Final) ไฟนอลในภาษาจาวาส าหรบการประกาศตวแปรทเปนคาคงท (constant) ซงเปนตวแปรทไม

สามารถเปลยนแปลงคาได ส าหรบตวแปรทเปนไฟนอลนนอาจจะเขยนโดยใชตวอกษรตวใหญทงหมดเพอใหดแตกตางจากตวแปรประเภทอนๆ

final int PI = 3.141592;

final float DOLLAR = 25.0;

Page 60: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

60

นอกจากไฟนอลจะใชส าหรบระบตวแปรทเปนคาคงทแลว ไฟนอลยงใชส าหรบระบคลาส ทไมยอมใหเกดการสบสกล และเมทธอดทไมยอมใหเกดการโอเวอรไรดไดอกดวย ตวอยางเชน ถาตองการสรางคลาส TrafficLight ขนมาซงจะมเพยงคลาสเดยวและไมมการสบสกลจากคลาสนอก ซงควรระบคลาสนใหเปนแบบ final เพอไมใหเกดการสบสกลขนอก ตวอยางเชน

final class TrafficLight {

// Class Body

}

และเมอมการสรางคลาสขนมาใหมเพอสบทอดจากคลาส TrafficLight เชน

public class MyTrafficLight extends TrafficLight โปรแกรมคอมไพลเลอรกจะฟองขอผดพลาดทนท

หรอในอกกรณหนงกคอ การใชไฟนอลเพอควบคมไมใหเกดการโอเวอรไรดเมทธอด เชน เมอมการสบสกลเกดขน เมทธอดทอยในคลาสแมอาจจะถกโอเวอรไรดได หากวาเราไมตองการใหมการโอเวอรไรดในเมทธอดใดๆในคลาสนนอก เรากควรจะระบเมทธอดนนในคลาสกลายเปนเมทธอดไฟนอลไปดวย ดงตวอยางตอไปน เมทธอด calculateArea() จะเปนเมทธอดสดทาย ซงจะไมสามารถโอเวอรไรดไดอก

public class Circle {

final float PI = 3.141592;

int radius;

final float calculateArea() {

return (PI * radius * radius);

}

}

3.14 อนเตอรเฟส (Interface) อนเตอรเฟสท าหนาทคลายกบ “Abstract Class” (แตจะเปน Abstract Class ทสมบรณกวา)

โดยการนยามอนเตอรเฟสนนจะเหมอนกบการนยามคลาสเพยงแตภายใน Interface จะมเฉพาะตวแปรทมคาคงทและ Abstract Method เทานน ทงนเมอโปรแกรมใดกตามทมการใชงาน “interface” จะหมายถงการก าหนดวาทกคลาสในโปรแกรมนนจะตองสรางเมทธอดทมชอตามทระบไวใน Interface ดวย โดยเนอหาของเมทธอดอาจจะแตกตางกนไปในแตละคลาสขนอยกบความตองการในการใชงาน (แตชอเมทธอดตองเปนชอเดยวกน) ประโยชนของการน าอนเตอรเฟสมาใชนน กคอ การท า “Multiple inheritance” ส าหรบการเขยนโปรแกรมเชงวตถ (Object Oriented Programming) การสราง Polymorphism เมทธอดและการก าหนดคาคงทใหกบทกคลาสทมในโปรแกรมนน

Page 61: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

61

3.14.1 โครงสรางของอนเตอรเฟส การประกาศคลาสทเปน Interface นจะใชค าวา “interface” (แทนการระบค าวา “Class”)

รปแบบของการประกาศคลาสทเปนอนเตอรเฟส จะสงเกตวาเมทธอดทอยภายในอนเตอรเฟสจะก าหนดเปน Abstract Method

รป 3.2 รปแบบการประกาศ interface

interface A

{

void callback (int param) ; // Abstract method

}

ก าหนด interface ชอวา “A” และก าหนดวาในทก ๆ Class ท implements “A” จะตอง Override Method “callback” เอาไวดวย (แตรายละเอยดของเมทธอดอาจแตกตางกนไปได) การใชงานอนเตอรเฟสสามารถท าไดโดยการระบค าวา “implements” แลวตามดวยชออนเตอรเฟสไวในบรรทดของการก าหนดชอคลาสจากนนจงก าหนดชอเมทธอดพรอมรายละเอยดไวในคลาสนน

รป 3.3 การ implement interface

class client implements A

{

public void callback (int p);

{

จากตวอยางน A เปนชอของอนเตอรเฟสและ callback เปนเมทธอดทท าการ Override

เมทธอดทประกาศไวกอนเดมภายใน Interface ซงการประกาศเมทธอดทใชในการอางองอนเตอรเฟส

InterfaceA

+ callback (int p) : void

InterfaceA

+ callback (int p) : void

ClientInterface

+ callback (int p) : void

Page 62: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

62

ควรระบคา Accessibility เปน “public” เพอปองกนกรณทสราง interface ไวตาง Folder กนกบโปรแกรมท ใชงาน (แตในกรณทอยภายใน Folder เดยวกน กไมจ าเปนตองก าหนดไวเปน “public” และส าหรบอนเตอรเฟสไมควรมการสราง Constructor Method)

3.14.2 การเรยกใชงานอนเตอรเฟส อนเตอรเฟสมลกษณะคลาย ๆ กบ Abstract Class คอใช interface อางอง (reference) ในการสรางออบเจกตแตจะสรางออบเจกตจาก instance ไมได และภายในโปรแกรมหากมการสราง interface ไวจะตองสราง Class ทม implementation ของ Abstract Method ใน interface ใหครบเสยกอน (Override Method) จงจะสามารถน า Class นนไปใชงานเปน Subclass ของ Class ได

รป 3.4 การสบทอด interface เพอท าการ implement เปนคลาสใหม

ตวอยาง แสดงการน า interface มาสราง Class วงกลม (circle) แลวให Class อนท าการ implement ตอ

public class interface3 {

public static void main (String [] args) {

Circle a = new CricleA(5.3);

a.showArea();

}

}

interface Circle {

public final double PI = 3.14159;

public double findArea(double r);

public void showArea();

}

class circleA Implements Circle

{

private double r;

ExInterface

+ show () : void

ClientInterface

+ show () : void

Interface1

+ main () : void

Page 63: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

63

circleA (double r) { //constructor

this.r = r;

}

public double findArea(double r) {

return Pi * r * r;

}

public void showArea() {

system.out.println("คารศม : " + r); system.out.println("พนทของวงกลม : " + findArea(r)); }

}

จากตวอยางขางตนนเปนการสรางอนเตอรเฟส “circle” เพอใชค านวณพนทวงกลมและให

แสดงพนททค านวณได โดยภายในอนเตอรเฟสจะมตวแปร PI ซงก าหนดใหเปนคาคงท เพอใชส าหรบค านวณพนททงนไดก าหนด Abstract Method ไว 2 เมทธอด เมอคลาสทจะอมพลเมนท ท าการ Override หากออบเจกตทสรางขนอางองกบอนเตอรเฟสภายในคลาสทท าการอมพลเมนท จะไมสามารถสรางเมทธอดอนนอกเหนอจากทไดก าหนดไวในอนเตอรเฟส เชน หากในอนเตอรเฟส ไมไดก าหนดเมทธอด “showArea()” ไวกจะไมสามารถสรางเมทธอด“showArea()” ในคลาสทท าการอมพลเมนท และหากออบเจกตทสรางขนมาไมไดอางองกบอนเตอรเฟส กสามารถสรางเมทธอดทไมไดก าหนดไวเปน Abstract Method ได แตจะไมสามารถน าออบเจกตทสรางขนไปใชงานกบ Polymorphism ได เพราะออบเจกตทสรางขนมาไมไดอางองกบคลาสในระดบสงสดซงกคออนเตอรเฟสนนเอง

3.14.3 การสบทอดในอนเตอรเฟส

อนเตอรเฟสสามารถใชการถายทอดคณสมบตไดเชนเดยวกนกบคลาสโดยใชคยเวรด “extends” ทงนคลาสทเรยกใชจะตองท าการอมพลเมนททกเมทธอดทระบใน interface ดวย ตวอยางเชน

Page 64: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

64

รป 3.5 การสบทอดสบสกลกรณคลาสทเปน interface

public class ClassA {

public static void main(String [] args)

{

interfaceB a = new A();

a.show1();

a.show2();

a.show3();

}

}

interface interfaceA {

void show1();

void show2();

}

interface interfaceB extends interfaceA {

public void show3();

}

class A implements interfaceB {

public void show1(){

system.out.println("Method show1() Override

จาก inter B*"); }

public void show2(){

system.out.println("Method show2() Override

จาก inter B*"); }

public void show3(){

system.out.println("Method show3() Override

จาก inter B*"); }

}

0..1

0..*

InterfaceA

+

+

show1 ()

show2 ()

: void

: void

InterfaceB

+ show3 () : void

Interface1

+ main () : void

ClassA

Page 65: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

65

ส าหรบอนเตอรเฟส “interA” ม 2 แอบสแตกเมทธอดสวนอนเตอรเฟส “interB” มการสบ

ทอดมาจาก “interA” ดงนน ในอนเตอรเฟส“interB” จงม 3 แอบสแตก หากคลาสใดท าการ implement “interB” กจะตองท าการ Override Abstract ทง 3 ตว ใหครบ จงจะสามารถน าคลาสดงกลาวไปสรางออบเจกตได การสรางออบเจกตจะตองอางองกบ “interB” เพราะหากอางองกบ “interA” Object ทสรางขนจะไมสามารถอางองถง Method”show3()”ได

ภาษาทสนบสนนการท างานแบบออบเจกตบางภาษา เชน C++ สามารถท าการสบทอดแบบหลาย Parent มลกษณะเปน Multiple Inheritance คอสบคลาสสามารถสบสกลจากซเปอรคลาสไดมากกวาหนงคลาส เชน

รป 3.6 การสบทอดแบบ multiple inheritance ของ interface

คลาส Teaching สบสกลมาจากคลาส Employee และ Student ดงนนคลาส Teaching จะ

ประกอบดวยสมาชก คอ name, cpr, salary, degree, gpa และ courses แตบางครงกกอใหเกดปญหา เชนตวอยางของการสรางคลาสเพอการสบสกลแบบ multiple inheritance ดงตอไปน

Person

-

-

Name

CPR

: String

: String

Employee

-

-

Salary

Degree

: Double

: int

Student

-

-

GPA

Course

: Double

: String

Teaching

Page 66: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

66

รป 3.7 การสบทอดแบบ multiple inheritance ของ interface ทอาจกอใหเกดปญหา

เมอมการสรางออบเจกต ของคลาส Teaching ซงจะเกดความสบสนในเรองของการทมชอ

ซ ากนของชอสมาชกทสบทอดมาจากแตละคลาส ตวอยางเชน การอางองถง department กจะหมายถง department จาก Employee หรอ Student ส าหรบภาษาทสนบสนนการท างานแบบออบเจกตในบางภาษาจะไมยอมใหมการสบทอดจากหลายคลาสเพอลดปญหานเชน ในภาษาจาวาทยอมใหมการสบสกลแบบ Single Inheritance เนองจาก มแนวคดวา Multiple Inheritance ไมจ าเปนตอโครงสรางของการ สบสกลซงจะท าใหเกดปญหามากกวาผลด และอกอยางคอจาวามคลาสอนเตอรเฟสอยแลว ซงสามารถน ามาใชในการท าโครงสรางทคลายกบ Multiple Inheritance ไดเชนเดยวกน เ ชน คลาสลกสามารถสบสกลจากซเปอรคลาส ได เพยงคลาสเดยว แตสามารถ implement ไดหลายๆ interface

การสรางอนเตอรเฟสจะคลายกบการสรางคลาสแอบสแตก แตอนเตอรเฟสจะมขอจ ากดมากกวาคลาสแอบสแตก ดงน

1. อนเตอรเฟสไมสามารถมตวแปรสมาชก (data member) แตสามารถมคาคงท (ตวแปรคาคงท)ได

2. เมทธอดทสรางภายในอนเตอรเฟสเปนแอบสแตกเมทธอด เทานน ซงแตกตางแอบสแตกคลาส ซงสามารถมเมทธอดปกตได

3. คาคงทและแอบสแตกเมทธอด ในอนเตอรเฟสตองเปน Public เทานน

การใชงานอนเตอรเฟสจะคลายกบแอบสแตกคลาส คอไมสามารถสราง อนสแตนซของ interface ได แตจะตองสรางคลาสทมการอมพลเมนท แอบสแตกเมทธอด ในอนเตอรเฟสใหครบเสยกอน แลวจงจะสามารถน าเอาคลาสนนไปใชได ลกษณะของภาษาทมการสบสกลแบบ Single Inheritance จะสบสกลจากซเปอรคลาสไดเพยง 1 คลาสเทานน แตดวยกลไกของอนเตอรเฟสจะท าใหสามารถเขาถงการก าหนดนยามในคลาสอน ไดหลายๆ คลาสในขณะทยงคงสบสกลจากซเปอรคลาสเพยงคลาสเดยว

Employee

-

-

-

Salary

Degree

Department

: Double

: int

: String

Student

-

-

-

GPA

Course

String

: Double

: String

: String

Teaching

Page 67: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

67

บทท 4 - องคประกอบแนวคดเชงวตถ

การพฒนาซอฟตแวรโดยอาศยเทคโนโลยเชงวตถนนมองคประกอบทส าคญคอ 1) การวเคราะหปญหาโดยอาศยแนวคดเชงวตถ (Object-Oriented Analysis: OOA) ซงเปนการวเคราะหความตองการของผใชงานและน ามาวเคราะหและสรางแบบจ าลองเชงวตถ 2) การออกแบบเชงวตถ (Object-Oriented Design: OOD) เปนกระบวนการออกแบบโดยอาศยแนวคดเชงวตถ ซงในขนตอนนเปนการพฒนาโมเดลทผาน การวเคราะหไปสการออกแบบซงผลลพธทไดอาจอยในรปของไดอะแกรมตางๆเชน UML (Unified Modeling Language) และการพฒนาซอฟตแวรเชงวตถ (Object-Oriented Programming: OOP) ซงเปนกระบวนการการพฒนาซอฟตแวร เพอใหเกดเปนซอฟตแวรทสามารถท างานไดจรง ตรงตามความตองการของผใช

4.1 การสบทอด (Inheritance) หลกการส าคญอยางหนงของการพฒนาโปรแกรมเชงวตถ คอ การน าเอาโปรแกรมทมอยแลว

กลบมาใชอกเรยกวา Code Reusability หรอ Program Reusability และเปนหวใจหลกทท าใหการพฒนาโปรแกรมเปนไปอยางรวด การสรางคลาสใหมขนมาดวยการสบสกลจากคลาสทมอยเดมท าใหโปรแกรมทพฒนามความยดหยนสง การสบสกลของคลาสในการพฒนาโปรแกรมเชงวตถ คอ การยอมใหออบเจกตสามารถสบทอดเอาคณสมบตตางๆทมอยในคลาสพนฐาน (Primitive class)3 มาสคลาสทสบสกล (Derived class) โดยหลกการของการพฒนาโปรแกรมเชงวตถนน การสบสกลมอยสองลกษณะใหญไดแก

1. การสบสกลแบบชนเดยว (Single Inheritance) จะเปนการสบสกลจากคลาสพนฐานเพยงคลาสเดยวเทานน ดงแสดงในรป 4.1

3

ส าหรบการเรยกชอระหวางออบเจกตตงตนและออบเจกตทท าการสบสกล ในต าราบางเลมอาจจะใชชอเรยกทตางกนเชน Based Class/Derived Class หรอ Super Class/Sub Class หรอ Parent Class/Child Class ซงแทจรงแลวมความหมายเหมอนกน

Page 68: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

68

Class A

Class B

Based Class

Derived Class

รป 4.1 การสบสกลแบบชนเดยว

จากตวอยางนจะเปนวาคลาส B เปนคลาสทถกสรางขนมาใหมโดยสบสกลจากคลาสพนฐาน A ซงท าใหคลาส B มสบทอดเอาคณสมบตทกอยางทงทเปนคณสมบตและการกระท าของออบเจกต มาเปนของตวเองซงเราสามารถเขยนเปนภาษาจาวาไดดงน

public class A {

private String data;

public void setData(String s) { data = s;

}

public String getData() {

return (data);

}

}

public class B extends A {

public void display() {

setData("Hello World");

System.out.println(getData());

}

}

2. การสบสกลแบบหลายล าดบชน (Multiple Inheritance) ในการสบสกลของคลาส

ภาษาจาวาจะใชค าสง extends เพอบงบอกชอของซเปอรคลาสทตองการจะสบสกล จะเหนไดจากตวอยางน คลาส B ทสบสกลจากคลาส A สามารถเรยกใชฟงกชนตางๆ ทมอยในคลาส A ไดเหมอนกบวาเปนฟงกชนของตวเอง ส าหรบการสบสกลนคลาสทท าหนาทเปนสบคลาส กสามารถเปนซเปอรคลาสใหกบคลาสอนๆ ตอไปได จะเหนไดจากตวอยางในรป 4.2

Page 69: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

69

Class A

Class B Class C Class D

Class E Class F

รป 4.2 การสบสกลแบบหลายล าดบชน

คลาส A นนเปนซเปอรคลาสของ คลาส B, C และ D และในชนถดลงไปคลาส D กเปนซเปอรคลาสส าหรบคลาส E และ F ไดอกดวย ลกษณะของการสบสกลแบบทผานมา เราเรยกวาเปนการสบสกลแบบชนเดยวเนองจากเปนการสบสกลจากซเปอรคลาสเพยงคลาสเดยวเทานน แตในหลกการของการพฒนาโปรแกรมเชงวตถนนยอมใหมการสบสกลจากซเปอรคลาสหลายๆ ตวพรอมกนกไดเรยกวา Multiple inheritance อยางไรกตามการสบสกลแบบ Multiple inheritance นจะสามารถท าไดในบางภาษาเทานนอยางเชน ภาษา C++ แตส าหรบภาษาจาวาแลวจะไมยอมใหมการสบสกลแบบหลายล าดบชนเนองจากในกรณทซเปอรคลาสทงสองคลาสมสมาชกทมชอเดยวกน เวลาสบสกลอาจท าใหเกดความสบสนวาสมาชกตวนควรเปนของคลาสใด ดงนนเพอลดความสบสนในการเขยนโปรแกรม ดงนนภาษาจาวาจงไมสนบสนนการสบสกลจากหลายคลาส นนกคอ จะสามารถสบสกลไดจากซปเปอรคลาสเพยงคลาสเดยวเทานน ส าหรบการออกแบบโครงสรางของคลาสเปนแบบสบสกลนนนยมใชรปแบบของล าดบชน (hierarchy) การออกแบบคลาสโดยวธการสบสกลจะชวยลดปญหาของการเขยนโคดซ าซอน ซงเปนแนวคดทส าคญอยางหนงของการพฒนาเชงวตถคอ หลกการของการน าเอาโปรแกรมกลบมาใชใหม

4.1.2 ความสมพนธระหวางออบเจกต การวเคราะหออบเจกตโมเดลเชงนามธรรมนน ระบบ (System) หนงระบบนนประกอบดวยออบเจกตหลายๆออบเจกตทสามารถท างานรวมกนไดอยางเปนระบบ โดยทออบเจกตแตละออบเจกตนนมบทบาทเปนของตวเองภายในระบบ เรยกวา “Object Role” ตวอยางเชนรถยนต นนประกอบไปดวยเครองยนต ระบบไฟฟา ระบบขบเคลอน หรอแมกระทงอปกรณและเครองอ านวยความสะดวกตางๆ ภายในซงหากเราวเคราะหระบบทเรยกวารถยนตองคประกอบตางๆ อาจจะมองไดวาเปนออบเจกต ทมความเปนอสระตอกน สามารถถกผลตโดยตางบรษท ตางสถานท แตองคประกอบเหลาน

Page 70: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

70

มบทบาทการท างานทแยกออกจากกนชดเจนเมอน ามาเชอมตอกนเพอประกอบกนเปนรถยนต 1 คน ทงนในการวเคราะหหาความสมพนธของออบเจกตเราจะมองความสมพนธออกเปน 2 ลกษณะคอ 1. ความสมพนธแบบ Is-A Relationship

ความสมพนธแบบ Is-A นเปนความสมพนธทจดกลมออบเจกตใหเปนสมาชกหรอเครอญาตเดยวกน ตวอยางเชน ความสมพนธแบบการสบทอด/สบสกล ซงเปนความสมพนธแบบ Parent-Child ดงเชนตวอยางน จะเหนวาออบเจกตรถ รถยนต รถบรรทก รถบส ทง 4 ออบเจกตนมความสมพนธแบบ Is-A คอรถยนต รถบรรทก และรถบสจดวาเปนรถประเภทหนง แตมคณสมบตพเศษทมอยในตวรถทวไป รถตเองกจดวาเปนรถและรถบสประเภทหนง ซงมคณสมบตพเศษทมรายละเอยดปลกยอยลงไปอก ดงนนเราจะเหนวาความสมพนธทเปนแบบการสบทอดนนจะเปนแบบ Is-A Relationship หรอบางครงเราเรยกความสมพนธแบบ Generalization and Specialization เนองจากเมอมการถายทอดคณสมบตจาก Parent มาส Child แลวคณสมบตของคลาสทสบทอดกจะมความเปนเฉพาะมากขน หรอในทางกลบการคลาสทท าหนาทเปน Parent กจะมคณสมบตทเปนกลาง General มากขน

2. ความสมพนธแบบ Has-A Relationship

ความสมพนธแบบ Has-A เปนลกษณะของออบเจกตทเปนองคประกอบของอกออบเจกตหนง ซงในทนเราอาจจะเรยกวาออบเจกต A ประกอบไปดวยออบเจกต B และ C เพอท าใหออบเจกต A มความสมบรณและสามารถท างานได ดงตวอยางในเรองของรถยนตทไดกลาวมาแลว วารถยนตแตละคนจะตองประกอบดวยชนสวนอะไรบางเพอท าใหรถนนคณลกษณะและการท างานทเปนรถยนตอยางสมบรณ ซงเราสามารถจ าแนกชนดของของบทบาทความสมพนธในรายละเอยดไดดงน

ดกรของความสมพนธระหวางออบเจกต (Multiplicity) เปนการระบในรายละเอยดเพอแสดงใหเหนถงดกรของความสมพนธระหวางออบเจกตวาสมพนธ

กนในระดบไหน เชน นกเรยน 1 คน สามารถลงทะเบยนเรยนไดหลายวชา หรออาจารยหลายคนสามารถรวมกนสอนในกระบวนวชาหลายวชาไดอกดวย โดยปกตแลวเราจะใชสญลกษณทแสดงถง Multiplicity ไดดงน 1..1 เปนการแสดงถงดกรความสมพนธแบบหนงตอหนง 1..* เปนการแสดงถงดกรความสมพนธแบบหนงตอหลาย *..* เปนการแสดงถงดกรความสมพนธแบบหลายตอหลาย

พาธความสมพนธ (Navigability) เปนการแสดงถงพาธของความสมพนธระหวางออบเจกต ซงการแสดงผลจะใชสญลกษณของเสน

ทมหวลกศรช ไปยงคลาสทจะท าหนาทในการคงความสมพนธ

Page 71: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

71

School

- name : String

- address

Student

- name

- address

- faculty

Course

- courseCode

*

1

1..*

1..6

รป 4.3 แสดงพาธความสมพนธ

ชนดความสมพนธ (Type) เปนการจ าแนกดกรของความสมพนธลงในรายละเอยด วาออบเจกตนมความสมพนธกนแบบ

แนบแนน Strong Relationship หรอแบบ Weak Relationship ซงเราสามารถจ าแนกในรายละเอยดไดดงน

ความสมพนธแบบ Association

เปนความสมพนธของออบเจกตทแสดงถงบทบาททเกยวของระหวางกนเชนโรงเรยนหนงประกอบดวยนกเรยนทลงทะเบยนเรยน และนกเรยนลงทะเบยนเรยนสามารถเลอกเรยนในกระบวนวชาทเปดสอน

ความสมพนธแบบ Composition

เปนลกษณะของความสมพนธทผกตดกนและกน โดยทเมอออบเจกตใดออบเจกตหนงถกท าลายไป ออบเจกตจะไมคงความเปนคณสมบตของออบเจกตอกตอไป เชน ออบเจกต Polygon ประกอบไปดวยออบเจกต Point หลายๆจด หากออบเจกต Polygon ถกท าลายไป ออบเจกต Point กจะถกท าลายตามไปดวย

ความสมพนธแบบ Aggregation เปนความสมพนธทคลายกบ Composition แตมดกรของความสมพนธทไมผกตดหรอยด

ตดตอกน และตางออบเจกตกสามารถแยกออกจากกนอยางเปนอสระ คณสมบตของการสบสกลประกอบดวยหลกการของ Base Class / Derived Class, Abstraction และ is-a relationship ซงหลกการตางๆ เหลานจะชวยใหการออกแบบโครงสรางโปรแกรมแบบออบเจกตโอเรยนเทดท าไดงายขน การสบสกลคอ คณสมบตทคลาสหนงๆ สามารถสบทอดเอาคณสมบตทง attribute และ method

Page 72: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

72

ของ อกคลาส หนงได การท าเชนนท าใหสามารถ สรางคลาส ขนมาใหโดยน าสาระส าคญทเหมอนกนของ attribute และ behavior (method) จาก class อนมาใชได ดงรป 4.4

AB

C AB

C

D

Based class Derived class

รป 4.4 การสบสกลคณสมบตตางๆจากซเปอรคลาสไปยงสบคลาส

จากรปขางตน A, B และ C เปนเมทธอดทถกสรางขนในซเปอรคลาส ซงเมอมการสบสกล คณสมบตตางๆ ทงทเปนคณสมบต (Attribute) และการกระท า (Behavior) ของซเปอรคลาสจะถกถายทอดไปยงสบคลาส สวนเมทธอด D เปนเมทธอดท subclass สรางขนเพอแสดงลกษณะความเปนเฉพาะของตวเอง ตามลกษณะการสบสกลโดยทวไปจะม 2 แบบ คอ

แบบท 1 คอลกษณะของการสรางเปนออบเจกตใหม 1 ออบเจกต ถกสรางขนมามการสบทอดลกษณะจากซเปอรคลาส เพยง 1 คลาสจะเรยกวา Single inheritance จะเหนไดวา object Helicopter จะสบทอด ลกษณะมาจาก object Aircraft เพยงออบเจกตเดยว ดงรป 4.5

Vehicle Object

Ship Object Aircraft Object

Helicopter ObjectNew Object

รป 4.5 การสบสกลแบบชนเดยว

แบบท 2 บาง object จะมการสบทอดลกษณะจาก class แม 2 class ขนไปซงจะเรยกวา “multiple inheritance” ดงรป 4.6

Page 73: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

73

Vehicle Object

Ship Object Aircraft Object

Helicopter Object Missile Object

Weapon Object

An object derived

From two based

รป 4.6 การสบสกลจากหลายล าดบชน

เพราะฉะนน Single inheritance หมายถง การทออบเจกตหนง ๆ ไดรบการสบทอดลกษณะจากออบเจกตอน เพยง 1 ออบเจกต Multiple inheritance หมายถง การทออบเจกตหนงๆ ไดรบการสบทอดลกษณะจาก ออบเจกตอนมากกวา 1 ออบเจกต จากรปจะเหนวาออบเจกต missile จะเกดจากออบเจกต aircraft และ ออบเจกต weapon การสบทอดลกษณะแบบนมขอควรระวงคอ ชอของ attribute ในแตละออบเจกตทไดรบการสบทอดมา ถาชอซ ากนกจะเกดความก ากวมขน ซงควรหลกเลยงการตงชอซ ากนในแตละออบเจกต หลกของการสบสกลจะค านงถงความสมพนธระหวางคลาส (Superclass และ subclass) ในการถายทอดความสมพนธของ attribute และ method เปนหลก ซงมรปแบบความสมพนธเปน is-a relationship เชน poodle is a dog เปนตน สวนคอมโพซชนจะไมค านงถงความสมพนธในลกษณะของการถายทอด แตจะมองความสมพนธของออบเจกตในลกษณะของสวนประกอบระหวางกน ในรปแบบความสมพนธเปน has-a relationship เชน car has an engine หมายความวา car จะม engine เปนสวนประกอบหนง โดยททง engine และ car มลกษณะการท างานเปนของตนเองไมมความสมพนธกนในลกษณะการถายทอดคณสมบตใดๆ นอกจากนออบเจกต engine ยงอาจประกอบไปดวยออบเจกตยอยๆ ไดอกหลายออบเจกตเชน ออบเจกต piston หรอ oilTank เปนตน ในการออกแบบทงสองวธน โดยสวนใหญแลววธคอมโพซชน (Composition) มกจะไดรบความนยมมากกวาวธของการสบทอดสบสกลเนองจากความซบซอนของเทคนคการสบสกลทสามารถสรางความสบสนใหกบผทไมเชยวชาญในการออกแบบได แตวธการออกแบบดวยเทคนคการสบสกลกมขอดอยไมนอย ถาสามารถน าไปใชไดอยางถกวธ กจะเปนประโยชนอยางมากตอการเขยนโปรแกรมตอไปดวย สรปไดวาสบสกล คอ การสบทอดลกษณะทงหมดของคณสมบตและเมทธอดจากซเปอรคลาสไปยงสบคลาส ซงหลกแนวคดในการออกแบบออบเจกตดวยเทคนคการสบสกลจะเปนไปตามขนตอนตอไปน

การหาคลาสของระบบ ใหหาความสมพนธจากคลาสทมอยกอน โดยคลาสทเกดใหมจะสบทอดลกษณะจาก คลาสเดม

Page 74: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

74

มองระบบใหประกอบดวยระดบชน (hierarchy) ของคลาสตางๆโดยทในระดบเดยวกนของการสบทอดลกษณะจากซเปอรคลาสแตละคลาสจะตองมพฤตกรรมทตางกนอยางสนเชง

การเชอมความสมพนธ จะเรมจากคลาสแมเปนหลก และเชอมความสมพนธกบคลาสลกไปเรอยๆ ในลกษณะตนไม (tree)

ขอดการคณสมบตการถายทอด ขอเสยของคณสมบตการถายทอด 1. ท าใหประหยดเวลาในการพฒนาโปรแกรม

และการทดสอบโปรแกรม ซงหมายถงสวนของโปรแกรมทพฒนาไปแลวหรอใชอยในซเปอรคลาส สามารถสบทอดมายงสบคลาสได โดยไมจ าเปนตองเขยนใหม และไมตองท าการทดสอบใหมอกครงดวย

1. กรณทโครงสรางของการสบทอดไมไดถกควบคมการ ใชงานอย าง เ ขมงวด การเปลยนแปลงแกไขในซเปอรคลาสยอมมผลกระทบตอสบคลาสทมการถายทอดเอาคณสมบตตางๆไปดวย

2. การแกไขเพมเตมสามารถท าไดทซเปอรคลาสเพยงคลาสเดยวเทานน ไมจ าเปนตองท าการแกไขในทกๆสบคลาสทมการแกไขลกษณะเดยวกน

2. การปรบโครงสรางของคลาส ทอาจจะมการเพมเตมเขามาในอนาคตอาจจะไมไดเปนไปตามทไดก าหนดหรออกแบบไวตงแตตน

3. การสบทอดมโครงสรางทเออตอประโยชนของ การใชงานออบเจกตไดหลายรปแบบ (Polymorphism) ซงท าใหเกดประโยชนอยางมากตอผท าการออกแบบ เพราะจะลดความยงยากและความซบซอนของโปรแกรมลงไปได

3. การออกแบบโครงสรางทมการสบทอดจ าเปนตองค านงถงคณสมบตใดทสามารถถายทอดได การถายทอดบางสวน ซงท าใหการวเคราะหและออกแบบใชเวลานาน

4.2 การซอนคณสมบตของออบเจกต (Data Encapsulation) คณสมบตทส าคญของการท า Data Encapsulation นนกคอการรวบรวมเอาสงทเกยวของกบ

ขนตอนการท างานเชงนามธรรมมาจดกลมกน โดยทแบงสวนการท างานทสามารถเปดเผยโดยผานทางอนเตอรเฟส (Interface) หรอสงทควรซอนรายละเอยดของการท างานไวเบองหลง สงเกตวาค าวา Encapsulation นน มรากมาจากค าวา “แคปซล” หากเรามองวาแคปซลยาหนงเมด ขางในอาจประกอบดวยยาหลายตว ซงผใชยาไมจ าเปนตองร แตสงทมนท าคอตวยาเหลานชวยรกษาโรคเดยว นนคอแนวคดของการซอนและการรวบรวม ส าหรบการออกแบบโครงสรางของโปรแกรมเชงโครงสรางนน (Procedural Programming Language) มกจะแบงโครงสรางของซอฟตแวรออกเปนสวนทเรยกวา Interface และสวนทเปน Implementation ซงสวนทเปน Interface นนเปนสวนทยอมใหมการเขาถง

Page 75: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

75

หรอเรยกใชโดยโมดลหรอโปรแกรมอนได และสวนทเปน Implementation นนจะซอนรายละเอยดของการพฒนาเอาไว

ในการพฒนาซอฟตแวรเชงวตถ โครงสรางของออบเจกตจะถกนยามผานคลาส โดยคลาสจะเปนตวก าหนดโครงสรางและคณสมบต ทอธบายคณลกษณะของออบเจกตวาออบเจกตมหนาตาเปนอยางไร และสวนของการกระท า นนคอออบเจกตสามารถท าอะไรไดบาง ซงโครงสรางของคลาสจะแบงออกเปน 2 สวนส าคญคอ Property และ Method นอกจากนเรายงสามารถก าหนดขอบเขตของการเขาถงและการมองเหนของคณสมบตตางๆภายในออบเจกตซงเรยกวา Access Modifier เราสามารถระบขอบเขตการเขาถงสมาชกของคลาส ไดแก private, protected, public, published

การซอนคณสมบตของออบเจกตเปนรากฐานอยางหนงของแนวความคดในเชงออบเจกตโอเรยนเทดซงขอดคอ การปองกนคณสมบตตางๆ ของออบเจกตจากความเสยหาย เพราะหากสวนของโปรแกรมทงหมด อนญาตใหมการเขาถงขอมลทจดเกบในแตละออบเจกตไดตามทตองการแลวนนจะสงผลใหคณสมบตงายตอการถกใชอยางผดๆ หรอท าใหคาเปลยนแปลงไปซงกอใหเกดความเสยหายตามมา การซอนคณสมบตของออบเจกตจะท าหนาทปองกนไมใหออบเจกตอนทอยภายนอกเขาถ งออบเจกตหนงๆไดอยางอสระจะมเฉพาะเมทธอดทอยในออบเจกต เทานนทจะสามารถเชอมตอกบคณสมบตทอยในออบเจกตเดยวกนไดเรยกไดวาการท า Data Encapsulation มคณสมบตของการซอนขอมล (Information hiding) คณสมบตทส าคญของ Information hiding คอ การจ ากดการมองเหนขอมลภายในออบเจกตเชน การก าหนดคณลกษณะเปน public เพอใหสามารถเชอมตอกบออบเจกตภายนอกไดหรอการก าหนดเปน private เพอจ ากดคณสมบตใหอยภายในออบเจกตเทานน ขอดอกอยางของการ Encapsulation คอการรวม attribute และ method ไวดวยกนเปนหนงออบเจกต ซงถามการเปลยนแปลงเกดขนภายในออบเจกต หนงกจะไมสงผลกระทบตอออบเจกตอนมเพยง method และ attribute ของออบเจกตนนเทานน ทจะไดรบผลกระทบนอกจากนแลวเมทธอดของออบเจกต กสามารถถกเปลยนแปลงไดอยางอสระไมเกยวกบออบเจกตอน ดงรป 4.7

AB

C

Outside Objects

Method

D

Attribute

Object

รป 4.7 แสดงคณสมบตของ encapsulation

Page 76: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

76

Information hiding เปนแนวคดหนงของ Encapsulation คอ การมองเหนเฉพาะพฤตกรรมทใหเหนวาท าไดเฉพาะ operation ทอนญาต นอกจากนนจะท าการเปลยนแปลงหรอเขาถงไมได กลาวคอการกระท ากบ data จะตองท าผาน operation เทานน เนองจากโปรแกรมอาจจะประกอบดวยหลายๆคลาสและแตละคลาส จะมการก าหนดสทธในการเรยกใชเมทธอดของออบเจกตและไมใหมองเหนสวนทเปนคณสมบตของออบเจกต

ในการออกแบบคลาสทกลาวมา ออบเจกตหนงๆจะมคณสมบตทงสวนสมาชกและเมทธอดอกทงออบเจกตยงยอมใหเกดการสบสกลระหวางคลาสพนฐานและคลาสสบสกลไดอกดวย การควบคมการมองเหนหรอการเขาถงตวแปรทเปนสมาชกและเมทธอดของออบเจกตจงถอเปนเรองส าคญ การควบคมการมองเหนนเรยกวา Encapsulation หรอ Information Hiding เปนการควบคมวาจะยอมใหออบเจกตอนๆมองเหนสมาชกตวไหนหรอเมทธอดตวใดภายในออบเจกตปจจบน การมองเหนในทนหมายความวาสามารถแกไขตวแปรหรอเรยกใชเมทธอดได ส าหรบสทธของการควบคมการมองเหนนนจะมอย 3 ประเภทหลกไดแก

1. แบบทวไป (Public) 2. แบบสวนตว (Private) 3. แบบปองกน (Protected)

หากวเคราะหถงแนวคดของการท า Encapsulation ในการการพฒนาโปรแกรมเชงวตถนน เราจะเหนวาแนวคดนมคณสมบตเดนทเออประโยชนตอการพฒนาโปรแกรมมรปแบบ อกทงชวยใหการพฒนาซอฟตแวรทมขนาดใหญ และการพฒนาแบบทมเปนไปอยางมระบบ ซงเราสามารถสรปคณสมบตของ Encapsulation ไดดงน

ความเปนเอกภาพ (Modularity)

เมอเราสามารถแบงสวนโปรแกรมออกเปนคลาสตางๆ และในโปรแกรมหลก ซงมองคลาส เหลานเปนลกษณะของกลองด าท าให โปรแกรมหลกเขยนงายขน ลดความซบซอนของโครงสรางโปรแกรม ซงในลกษณะของการท างานทเปนทมงานคลาสตางๆเหลานสามารถน ามารวมกนเปน คอมโพเนนทหรอแพคเกจ และสามารถทจะแยกใหแตละทมงานพฒนาและตรวจสอบขอผดพลาด (Debuggin) และการทดสอบ (Testing) โปรแกรมในแตละสวนได

การน ากลบมาใชงานได (Reusability)

เมอเรามองคลาสเหลานในลกษณะของโมดล หรอคอมโพเนนท ทแยกการท างานอยา งเปนอสระแลว เราสามารถทจะน าเอาโปรแกรมโคดเหลานกลบมาใชไดอก หรอสามารถน าเอา คอมโพเนนทตางๆ มาประกอบกนเปนโปรแกรมใหมได ท าใหลดความซ าซอนของการพฒนา และท าใหการพฒนาซอฟตแวรใหมๆสามารถท าไดอยางรวดเรว

ความเสถยรภาพ (Robustness)

Page 77: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

77

การในประโยชนจากแนวคดของ Data Encapsulation ท าใหโปรแกรมโคดทพฒนามความเปนเอกภาพมากขน การควบคมการเขาถงและการมองเหนท าใหลดขอผดพลาดทอาจจะเกดขนจากการแกไขคณสมบตของออบเจกตโดยทไมไดตงใจ หรอกรณทออบเจกตนนผานการทดสอบและแกไขจนไมมขอผดพลาดเกดขนแลว เราสามารถมนใจไดวาออบเจกตนนสามารถน าไปใชพฒนาตอยอด หรอประกอบกนเปนซอฟตแวรใหมได

4.2.1 แบบทวไป (Public)

การก าหนดสทธแบบทวไปนนเปนการยอมใหคลาสอนๆสามารถมองเหนตวแปรและเมทธอดของคลาสปจจบนได โดยรปแบบของการก าหนดแบบทวไปจะใชคยเวรด public น าหนาเมอประกาศคลาส ประกาศตวแปร หรอสรางเมทธอด ซงปรกตแลวหากไมมการระบสทธเรมแรก (default) จะถกก าหนดใหเปนแบบทวไป

class CarPart {

String Model;

public setModel(String Model) {

this.Model = Model;

}

}

class MyProgram {

public static void main(String args[]) {

CarPart mycar = new CarPart();

mycar.Model = "Mazda"; // Accessing data member directly

mycar.setModel("Mazda"); // Accessing method

}

}

จากตวอยางแสดงถงการเขาถงตวแปร Model และเมทธอด setModel() ทอยในคลาส

CarPart สามารถท าไดจากภายนอกของคลาสในทนเราเรยกใชจากฟงกชน main() จะเหนไดวาการก าหนดสทธแบบทวไปของคลาสเปนการเปดใหคลาสอนๆสามารถมองเหนขอมลและฟงกชนการท างานภายในคลาสได ซงถาเปรยบเทยบกบการเขยนโปรแกรมโดยทวไปทไมใชออบเจกตกจะคลายกบการใชงานโครงสรางของขอมลแบบเรคคอรด (Record) ทมประกอบดวยฟงกชนท างานทเกยวของกบขอมล เรคคอรดนนเอง การออกแบบออบเจกตโดยใหสทธแกคลาสอนๆ เขามาจดการกบขอมลของคลาสท าใหการพฒนาโปรแกรมคอนขางงายในระดบหนง แตเมอโปรแกรมมขนาดใหญขนการปองกนขอมล รวมทงการจดการการเขาถงเมทธอดภายในคลาส ควรจะมการก าหนดสทธทเขมงวดกวาแบบทวไปซงเราจะกลาวถงในหวเรองตอไป 4.2.2 แบบสวนตว (Private)

การก าหนดสทธแบบสวนตวเปนการก าหนดใหสมาชกสามารถมองเหนไดเฉพาะภายในคลาสเดยวกนเทานน รปแบบของสทธแบบสวนตวนนจะใชคยเวรด private เปนตวก าหนด จดประสงคกเพอ

Page 78: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

78

เปนการซอนเมทธอดเทานน ในกรณนเมทธอดทนยมสรางในออบเจกตไดแก เมทธอด set() และ get()โดย set() จะเปนเมทธอดทท าหนาทในการก าหนดคาใหกบตวแปรสวนตว โดยคาจะมาจากการสงเปนอารกวเมนต สวนเมทธอด get() กจะท าหนาทในการสงคาของตวแปรสวนตวกลบไปใหเมทธอดทเรยกใช (caller function)

public class Circle {

private float radius; //private attribute which can only be

//seen within Circle class

public void setRadius(float r) {

this.radius = r;

}

public float getRadius() {

return (radius);

}

}

ในท านองเดยวกน การประกาศสทธแบบสวนตวกยงสามารถใชกบเมทธอดของคลาสไดอกดวย

และถาในกรณน เมทธอดทเปนแบบสวนตวจะสามารถถกเรยกใชไดจากเฉพาะภายในคลาสเดยวกนเทานน

class Circle {

final float PI = 3.141592;

private float radius = 50;

private float area;

private boolean checkRadius() {

boolean validRadius = false;

if ((radius > 0) && (radius <= 100))

validRadius = true;

return (validRadius);

}

}

public float calculateArea() {

if (checkRadius())

return (radius * PI * PI);

}

}

class MyProgram {

public static void main(String args[]) {

Circle c = new Circle();

boolean validRadius = c.checkRadius(); // Error

float area = calculateArea(); // OK

}

}

Page 79: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

79

จากตวอยางนจะเหนวาเมทธอด checkRadius() ประกาศเปนแบบสวนตว และเรยกใชโดยเมทธอด calculateArea() ซงอยในคลาสเดยวกน แตถาเรยกใชจากฟงกชน main() ภายในคลาส MyProgram กจะเกดขอผดพลาดขนเพราะถอวาไมไดอยในคลาสเดยวกน 4.2.3 แบบปองกน (Protected)

การก าหนดสทธแบบปองกนนจะใชคยเวรด protected น าหนาชอตวแปรหรอชอเมทธอด ลกษณะการท างานกจะคลายกบ 2 แบบทผานมาเพยงแตวาตวแปรและเมทธอดทเปนแบบปองกนนจะสามารถมองเหนไดเฉพาะภายในคลาสตวเองและคลาสทสบสกลเทานน

class A {

protected int number = 0;

protected void displayNumber() {

System.out.println("Number is : " = number);

}

}

class B extends A {

void display()

number = 45;

displayNumber();

}

}

4.3 การใชงานไดหลายรปแบบ (Polymorphism) ค าวา Poymorphism เปนค ามาจากภาษากรกแปลวา “Having many shapes” หมายถง

การทคลาสหนงๆ สามารถแปรเปลยนไปไดหลายรปรางขนอยกบสภาพแวดลอมหรอสถานการณในขณะนน ตวอยางการท างานของเครองคอมพวเตอรทมปม F1 เพอแสดงถงความตองการชวยเหลอ ซงปม F1 ทเรากดในแตละครงอาจจะไดรบผลลพธของการชวยเหลอไมเหมอนกน ทงนจะขนอยกบวา ณ ขณะนนเราก าลงท างานอยกบโปรแกรมอะไร หรอวาอยในหนาจอทเกยวของกบเรองใด ทงนเราจะเหนวาหลกการของ โพลมอรฟซมในออบเจกตพยายามทจะท าใหการใชงานระบบคอมพวเตอรสะดวกตอผใชงาน การกดปม F1 แตละครง ผใชงานแทบจะไมตองรในรายละเอยดเลยวา F1 ท างานอยางไรในแตละโปรแกรม

ลกษณะเดยวกนกบการใชงานคลาสหรอออบเจกต การเรยกใชงานเมทธอดทมชอเดยวกน แตการท างานอาจจะไมเหมอนกนซงจ าแนกตามสถานะของออบเจกต (Object's state) ณ ขณะนน ตามชนดของขอมล หรอ Massage ทฟงกชนจะไดรบขณะท างาน เมอฟงกชนไดรบขอมลทตองการแลวกจะไปเลอกฟงกชนทเหมาะสมกบขอมลนนๆ ท างานตอไป

หลกการท างานของโพลมอรฟซมจะเปนใชงานเมทธอดทเขยนทบ Overridden method จากคลาสทมการสบทอด ซงโปรแกรมจะท าการเลอกเมทธอดทเหมาะสมเพอท างานในขณะทมการเรยกใชงานเทานน โดยอาศยเทคนคเรยกวา Binding ซงหมายถง การเชอมตอระหวาง Method call (ค าสงท

Page 80: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

80

ใชเรยก Method มาท างาน) กบ Method body (ค าสงตางๆ ภายใน method) ถา Binding ถกท างานขณะทรนโปรแกรม (โดย compiler) จะเรยกวา “early binding” แตเทคนคของการเลอกใชเมทธอดขณะทรนโปรแกรมวา “Dynamic Binding” หรอ “Late binding” หรอ “Run-time binding” หรออาจเรยกอกอยางหนงตามลกษณะของออบเจกต โพลมอรฟซมถอไดวาเปนความสามารถในการสง Massage เดยวกนใหกบออบเจกตของซเปอรคลาสหรอสบคลาสเพอท าการตอบสนองตอ Massage อนเดยวกนในลกษณะทแตกตางกนทเหมาะสมกบคลาสและสถานะในขณะนน และเรยกใชเมทธอดไดอยางถกตอง โดยมกลไกในการตรวจสอบ กลาวโดยสรปกคอ คอมไพเลอรจะไมรวาออบเจกตนนเปนออบเจกตชนดใดลวงหนา แตจะตรวจสอบและเรยกใช Method body ทถกตองมาท างานโดยอตโนมต โพลมอรฟซมท าใหออบเจกตแตละออบเจกต ตอบสนองตอ Massage เดยวกนในลกษณะทเหมาะสมกบคลาสของตวเอง เชน DisplayInformation() ถกนยามโดยใหแสดงคาของขอมลบางตวของ ออบเจกต ท าให DisplayInformation นสามารถสงใหออบเจกตทกๆ ออบเจกตของซเปอรคลาสหรอสบคลาส ทท าใหออบเจกตนนรจก DisplayInformation และออบเจกตของคลาสทตางกนจะตอบสนองตอเมสเสจตางกนไป ซงความสามารถในการใชเมสเสจทเหมอนกนสงใหออบเจกตตางชนดกนไดสามารถเปรยบเทยบไดกบความคดของมนษยคอไมเปนธรรมชาต เนองจากมนษยเรามอาการตอบสนองกบสงตางๆ ทเขามาในทไมเหมอนกน ขนอยกบสถานการณหรอสภาพแวดลอมทตางกน

Page 81: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

81

บทท 5 – ภาษาเชงวตถ

ปจจบนโปรแกรมภาษาทรองรบการท างานแบบออบเจกตมอยหลายภาษาดวยกน แตละภาษาตางๆ มขอดและขอดอยทแตกตางกน ซงในบทนจะกลาวถงภาษาคอมพวเตอรทใชกนอยทวไป เพอใหเหนถงวาแตละภาษาไดมการน าเอาแนวคดของการพฒนาโปรแกรมเชงวตถทไดกลาวไปแลว การพฒนางานเชงวตถนนเปนการน าเอาสงทมอยแลวน ามาใชประโยชน ปจจบนภาษาจาวาเปนภาษาหนงทสนบสนนการพฒนาในเชงวตถไดเปนอยางด เราสามารถใชรปแบบการเขยนโปรแกรมแบบภาษาจาวา รวมไปถงกลมคลาสทจาวามใหเราใชได บางภาษาเปนภาษาทมอยเดมแตไดมการพฒนาโดยเพมคณสมบตทางดานออบเจกตเขาไปเพอใหสามารถรองรบการท างานเชงวตถได ตวอยางเชนภาษา Delphi ทมการพฒนามาจากภาษา Object Pascal (Pascal + OOP) ซงจดเปนภาษาทใชเขยนโปรแกรมแบบโครงสรางเชงวตถ (Object-Oriented Programming Language) และ Delphi มลกษณะเปน Hybrid OOP Language เหมอนกบ C++ คอ นอกจากการสรางหรอนยามคลาสแลวยง สามารถประกาศ ตวแปร และ สราง procedure หรอ function ไดตามปกต ซงตางจากภาษาจาวา ทเปนลกษณะ Pure OOP Language มการบงคบวาการประกาศตวแปรหรอการสรางฟงกชนจะตองกระท าภายในคลาสเทานน ปจจบน Delphi สามารถท างานไดทงบนระบบปฏบตการ Windows และ Linux โดยบนระบบ Linux จะใชชอวา Kylix ภาษา Perl เองกเชนกนทไดมการพฒนาความสามารถของตนเองเพอใหสามารถท างานเชงวตถได ซงเราเรยกลกษณะของภาษาวา Object Perl

ภาษา C# (อานวา ซ-ชารป) เปนภาษาเชงวตถเชนเดยวกบ C++ และ Java C# เปนภาษาเชงวตถททนสมย ชวยใหนกพฒนาสามารถสรางแอพพลเคชนหลายๆ รปแบบในแพลตฟอรม .NET ของไมโครซอฟท ซงเปนแพลตฟอรมทมเครองมอ และไลบราร ทสนบสนนการพฒนาอยางมากมายทงการประมวลผลและเทคโนโลยใหมๆ ทรองรบภาษาน ความงายของภาษา Visual Basic ท C# ไดรบมา คอ สามารถสราง Windows Form ดวยภาษา C# ไดงายพอๆ กบการเขยนฟอรมดวยภาษา Visual Basic รวมไปจนถงการสรางคอมโพเนนทกสามารถท าไดจากการสรางเปน Package และเนองจากภาษา C# ไดพฒนามาจากภาษา C++ ดงนนโปรแกรมจงเขยนดวยภาษา C++ ไวยากรณของภาษา C# มความคลายคลงกบภาษาจาวามาก รวมไปจนถงแนวคดกมลกษณะคลายๆ กน (เพราะเปนภาษาแบบ OOP เหมอน) ท าใหสามารถเรยนรภาษา C# ไดเรว โดยทงภาษา C# และ Java เหมอนตรงทมพนฐานมาจากภาษา C, C++ และผนวกกบคณสมบตทส าคญของออบเจกตมาดวย เชน garbage collection, exception handing เปนตน ซงภาษาทรองรบการพฒนาอยางรวดเรวนเรยกวาการพฒนาแบบวชวลโปรแกรม (Visual Programming) ทชวยใหสามารถพฒนาซอฟตแวรไดอยางรวดเรว และเพมประสทธภาพตอการพฒนาตนแบบ ท าใหผใชสามารถพฒนาโปรแกรมในสวนทตดตอกบผใช

Page 82: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

82

(User Interface) ไดอยางรวดเรว ซงซอฟตแวรทสนบสนนงานประเภทนเชน Microsoft Visual Studio, Borland Suite, Delphi และ Netbean

5.1 เครองมอพฒนาทสนบสนนการพฒนาเชงวตถ ปจจบนเครองมอทสนบสนนการพฒนาซอฟตแวรเชงวตถมการพฒนาการและมประสทธภาพ

มากกวาในอดต เครองมอเหลานเรยกวา IDE (Integrated Development Environment) นนกคอ Program Editor ในสมยกอน แตปจจบนเครองมอเหลานไดมพฒนาการไปอยางทนสมยและมความฉลาดในตวเองเพอทจะท าใหนกพฒนาโปรแกรมสามารถทจะพฒนาซอฟตแวรไดอยางรวดเรว

5.1.1 เครองมอส าหรบพฒนา Visual Programming เครองมอเหลานสนบสนนการท างานทเปนแบบวชวล เราเรยกวา Visual Programming คอ

สามารถมองเหนผลลพธของซอฟตแวรขณะทท าการออกแบบหรอระหวางการพฒนา และสนบสนนการพฒนาโปรแกรมโคดทซอนอยเบองหลงในลกษณะทเปน Code Behind เครองมอเหลานท างานโดยรวบรวมเครองมอตางๆทจ าเปนส าหรบการพฒนาโปรแกรม เชน Visual Tools, Editor, Compiler, Linker, Debugger ฯลฯ เขาดวยกน และทกอยางสามารถท าไดจากการลากและวาง (Drag and Drop) การพฒนาโปรแกรมทเปนลกษณะของ Project Base ทเครองมอเหลานจะท าการเตรยมสภาวะแวดลอม หรอโปรแกรมโคดตงตนในการสรางเคาโครงของโปรแกรม ประกอบกบเครองมอวซารด (Wizard Tool) ทชวยใหค าแนะน าแกนกพฒนา ตางๆเหลาน ท าใหนกพฒนาในปจจบนไดรบความสะดวกจากเครองมอเหลานมาก ซงโปรแกรมเหลานจดอยในประเภท RAD (Rapid Application Development) ซงท าใหในปจจบน ซอฟตแวรสามารถถกผลตและพฒนาออกมาไดอยางรวดเรว

5.1.2 การจดการกบโมดลและคอมโพเนนท

การจดการกบซอฟตแวรทมขนาดกลางถงขนาดใหญโดยทมนกพฒนาโปรแกรมท างานรวมกนเปนทมนนนยม การออกแบบสถาปตยกรรมของซอฟตแวรนยมจดเกบกลมโปรแกรมทมลกษณะการท างานคลายกนอยในกลมเดยวกน เรยกวา โมดลหรอไลบราร ซงในภาษา C นนเราจะเหนวามการจดกลมโปรแกรมเปนไลบราร ในภาษา Delphi นน การจดกลมโปรแกรมจะจดอยในรปของ Unit ซงภาษา Pascal มกแยกสวนของ source program ทมการใชงานรวมกนออกเปน unit เพอใหสามารถถกเรยกใชงานรวมกนได โดยไมตองเขยนใหมทกครง โปรแกรมโคดทอยใน Unit อาจเปนการก าหนดคาคงท นยามชนดขอมล รวมถงการนยามคลาสตางๆ การประกาศตวแปร Procedure และ Function สงทอยใน Unit อาจเปน source program ซงไฟลนนจะมนามสกลเปน .pas หรออาจเปน source program ทผานการคอมไพลแลว ซงไฟลนนจะมนามสกลเปน .dcu (Delphi compiled unit) การเรยกใชสงทอยใน unit จะใชค าสง “uses” เชน uses MyUnit;

Page 83: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

83

ในลกษณะเดยวกนกบภาษา C# C++ หรอภาษา Java ซงมไลบรารขนาดใหญมารองรบ การพฒนาซอฟตแวรทมขนาดใหญ ตวอยางเชน ภาษา C# Visual Basic และ C++ นนพฒนาขนมาบนพนฐานของ .NET Framework หรอหากเปนเวอรชนกอนหนาเทคโนโลย .NET นทางไมโครซอฟทเองจะสนบสนนคลาสไลบรารขนาดใหญชอวา Microsoft Foundation Class (MFC) สวนภาษา Java เองจะจดไลบรารเหลานใหอยในรปของ Java Package ในการเรยกใชงานไลบรารเหลานกสามารถท าไดงายขนโดยอาศยเครองมอ IDE ทอาศยการลากและวาง หรอเครองมอประเภท WYSIWYG (What-You-See-Is-What-You-Get) ทสามารถชวยในการพฒนาโปรแกรมเปนแบบวชวลโปรแกรมมง

เมอเราสรางคลาสขนมาตามความตองการของระบบ จนกระทงจ านวนของคลาสทพฒนาเพมขนเรอย ในภาษาจาวามวธการจดการคลาสทไดใหเปนหมวดหมอยางเปนระเบยบโดยการก าหนดกลมของคลาสขนมาเรยกวา แพคเกจ (Package) โดยท าหนาทคลาย Folder หรอ Directory ของระบบคอมพวเตอรส าหรบเกบไฟล และในการอางถงคลาสกจะใชแพคเกจเปนตวอางถงต าแหนงทอยของคลาสดวย เชน

package com.Company;

class Staff {

int StaffId;

String StaffName;

void setStaffId(int staffId){

this.StaffId = staffId

}

}

จากตวอยางนหมายถง เรามการสรางคลาส Staff อยในแพคเกจชอวา com.Company เมอเราไดก าหนดแพคเกจส าหรบระบบทพฒนาแลวและไดมการก าหนดคลาสเขาไปอยในแพคเกจ ทเหมาะสมแลวในการเรยกใชงานสามารถท าไดดงน

class Tester{

public static void main(String agrv[]){

com.Company.Staff employee = new com.Company.Staff();

employee.setStaffId(678);

}

}

เราสามารถอางถงคลาสผานแพคเกจไดดงคลาสตวอยางน com.Company.Staff เปนการอางถงคลาส Staff ทอยในแพคเกจ com.Company ส าหรบการสรางไลบรารขนมาใชในภาษา C# นนเราเรยกวา Namespace ซงใชในการก าหนดกลมของคลาสใหอยในไลบรารเดยวกน และวธการเรยกใชงานไลบรารจะอาศยค าสง use <Namespace> โดยทระบชอของ Namespace ทตองการเรยกใชงาน

using System;

namespace LibraryA

{

using LibraryB.lib;

Page 84: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

84

class MainProgram {

public static void Main()

{

SayHello hello = new SayHello();

hello.SayIt();

}

}

}

Namespace LibraryB.lib

{

class SayHello

{

public void SayIt()

{

Console.WriteLine("Hello, World");

}

}

}

การพฒนาโปรแกรมดวยภาษา Delphi จะใชภาษาออบเจกต Pascal ซงมหลกการเขยนทคลายคลงกบภาษาทสนบสนนการท างานเชงวตถอนๆ ซงอาศยการท างานแบบออบเจกตเปนหลกโดยแตละออบเจกตจะมองคประกอบทส าคญคอ ขอมล (ตวแปรภายใน) Data Member และพฤตกรรม (การท างาน) Method โดยออบเจกตทพฒนาขนจะถกน ามาประกอบกนเปนโปรแกรมเพอท างานตามทตองการ ส าหรบภาษา Delphi ออบเจกตจะถกแบงออกเปน 2 กลมคอ ออบเจกตปกตและคอมโพเนนท โดยมรายละเอยดของขอแตกตางระหวางกนดงน

คอมโพเนนทจดไดวาเปนออบเจกตทสรางขนจากคลาสทไดถกพฒนาไวกอนหนาแลวในไลบรารซง Delphi เรยกคลาสเหลานนวา VCL (Visual Component Library) สวน ออบเจกตนนจะถกสรางจากคลาสทผใชสรางขนเอง

คอมโพเนนทเปนออบเจกต ทถกสรางอยางอตโนมตโดยภาษา Delphi เอง เพยงแคผใช ใชเครองมอ IDE ในการลากและวางคอมโพเนนทจากคอมโพเนนท palette มาวางบน Form และเมอ Form ถกท าลายคอมโพเนนทกจะถกท าลายโดยอตโนมต สวนออบเจกต จะถกสรางโดยใชค าสงในขณะทโปรแกรมท างาน (Runtime) เทานน และผใชจะตองเปนผท าลายออบเจกตเอง

โดยเมอผใชงานลากคอมโพเนนทวางลงบน Form โปรแกรม Delphi จะท าการสราง คอมโพเนนท ใหโดยอตโนมต ซง Delphi จะท าการสรางคอมโพเนนทจากคลาสของ คอมโพเนนท ทถกสรางไวแลวใน VCL (Visual Component Library) และผใชสามารถ

Page 85: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

85

ก าหนดคณสมบตของคอมโพเนนททสรางขนในขณะออกแบบโปรแกรม โดยผานทางออบเจกต Inspector

คอมโพเนนท เปนออบเจกตทผใชสามารถจดการไดในขณะออกแบบ (Design time) โดยผานออบเจกต Inspector และผใชกสามารถจดการกบคอมโพเนนทในขณะทโปรแกรมท างานโดยใชค าสงได สวนออบเจกตจะถกจดการโดยใชค าสงในขณะทโปรแกรมท างานเทานน

ทงออบเจกตและคอมโพเนนทตางกมคณลกษณะเหมอนกบภาษาออบเจกตทวไปคอประกอบดวย

Field คอ Data Member ซงเปนขอมลภายในหรอตวแปรภายในของออบเจกต Method คอ พฤตกรรมหรอการท างานของออบเจกต (ในรปของ Procedure หรอ

Function)

นอกจากนคอมโพเนนทใน Delphi ยงประกอบดวย Property คอ กลไกในการเขาถงขอมลภายในของออบเจกตทงการอาน / เขยน

(read/write) ทงในขณะออกแบบและขณะทโปรแกรมท างานซงจรงๆ แลวกเปนการเขาถงขอมลภายในโดยเรยกผานเมทธอดนนเองซงตามแนวคดของออบเจกตแลว Property ใน Delphi คอลกษณะของ Method อยางหนงของคอมโพเนนทนนเอง เพอประโยชนในการเขาถง (Accessor) ขอมลภายใน (Field) ของคอมโพเนนทซงอาจจะเปนอานขอมลจากหรอเปนการเขยนขอมลลงในฟลด (Read/Write) โดยผาน Getters และ Setters นนเอง ดงนนอาจจะกลาวไดวา Property เปนการใชคณลกษณะของ Encapsulation ใน OOP เพอปองกนการเขาถงขอมลภายในฟลดของออบเจกตโดยตรง ตวอยางเชน Property ชอ Color จะเปนการเขาถงขอมลสในคอมโพเนนท ซงขอมลสในคอมโพเนนทจรงๆ จะอยในฟลดชอวา Fcolor แตปกตแลวผใชจะไมสามารถเขาถงฟลดของออบเจกตไดโดยตรงตองกระท าผาน Property

นอกจากนภาษา Delphi ยงสนบสนนการพฒนาโปรแกรมแบบ Event-driven programming คอ การเขยนโปรแกรมเพอตอบสนองตอเหตการณตางๆ ทอาจเกดขนกบคอมโพเนนท ซงมหลกการ เขยนชดของค าสงทจะกระท าในรปแบบของ procedure เมอเกดเหตการณใดๆ ขนกบคอมโพเนนท กจะมการไปเรยกใช (Trigger) procedure นนๆ เพอใหท างาน ซงชดค าสงนสามารถแบงออกไดเปน

- การเรยกใชค าสง procedure หรอ function - การเขาถง property ของ คอมโพเนนทใดๆ หรอ การเขาถง field ของ

ออบเจกตใดๆ - การเรยกใช method ของคอมโพเนนทหรอออบเจกตใดๆ

Page 86: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

86

แตเมอเปรยบเทยบกบอกภาษาหนงเชนภาษา Perl จะพบวาการจดโมดลในภาษา Perl นนจะอยในรปของ Package ซงคลายกบภาษาจาวานนเอง ซงเปน reusable package ทไดนยามไวใน library file ทมชอเดยวกนกบชอของ package (ทมนามสกล .pm) อยางไรกตามออบเจกต ทอยในภาษา Perl จะมพนฐานการอางองถงฟงกชนทอยภายใน Package นนคอ จะมการอางองถงสงใดกตามทรจกภายในคลาสทอยเทานน

5.2 การจดการกบหนวยงานจ าโดย Garbage Collection ลกษณะการอางองทอยในหนวยความจ าเรยกวา พอยตเตอร (Pointer) หรอทเราเรยกวาเปน

“ตวช” ในโปรแกรมภาษาแบบ Procedural Language ซงเปนคณสมบตส าคญทใชในภาษา C หรอภาษา C++ ในการจดการใชประโยชนจากการใชหนวยความจ าแบบไดนามก ซงท าใหโปรแกรมทพฒนามความยดหยนสง แตกเปนจดบกพรองอยางหนงของภาษาเนองจากการใชงานพอยตเตอรอยางไมถกตองกท าใหเกดปญหาหนวยความจ ารวไหล หรอเกดความผดพลาดในโปรแกรม ทนกพฒนาอาจจะไมไดตระหนกถงผลกระทบทตามมา ส าหรบภาษาทสนบสนนการท างานแบบออบเจกตในปจจบน สวนใหญจะไมสนบสนนโครงสรางขอมลแบบพอยตเตอรโดยตรง แตจะเรยกการอางองไปยงหนวยความจ านวา Reference หรออางอง (ซงนยหนงแลวมความคลายกบการอางองไปยงหนวยความจ าเหมอนกบพอยตเตอรนนเอง) การใชงาน Reference ในการท างานของภาษาจาวา หรอภาษา .NET เชนภาษา C#, Visual Basic .NET หรอ C++ .NET นน การจองใชหนวยความจ าไมไดท าโดยตรงผานทางระบบปฏบตการโดยตรงเหมอนกบพอยตเตอร แตจะท าการจองผาน CLR (Common Language Runtime) โดยท CLR จะท าหนาทในการตรวจสอบและจองหนวยความจ ากอนกระบวนการคอมไพลโปรแกรมใหเปน Native Code กอนแลวจงแปลงใหเปนภาษาเครองอกทหนง ซงกอนการคอมไพลโปรแกรมโมดลชอวา Verifier จะท าหนาทในการตรวจสอบเพอใหแนใจวาโปรแกรมทเขยนขนนนท างานไดอยางถกตอง เชน โปรแกรมไมไปเขยนทบหนวยความจ าในสวนอนๆ ของระบบ ซงเราจะเรยกโปรแกรมทท างานบน .NET Framework นวาเปน Safe Program เชนเดยวกนกบโปรแกรมภาษาจาวาซงจะจดการกบพอยตเตอรผานทาง Reference หรอเรยกวาเปน Reference Pointer ซงจะถกจดการโดย Java Virtual Machine (JVM) โดยทผใชงานไมสามารถเรยกดต าแหนงทอางองของพอยตเตอรนนไดโดยตรง ดงนนการใชงานโปรแกรมภาษาเชงออบเจกต ทมการใชงานหนวยความจ าทยดหยน ภาษาเหลานจงมตวจดการกบหนวยความจ าใหกบนกพฒนาเรยกวา Garbage Collection

กลไกควบคมขยะอนสแตนซ (อนสแตนซ คอ พนทในหนวยความจ าซงสรางตามแบบ โครงรางของคลาสใดๆ ดงนน อนสแตนซคอ พนททสามารถเกบขอมลและประมวลผลตามสวนทประมวลผลได) เกดขนเนองจากขณะทโปรแกรมท างาน โปรแกรมจ าเปนตองมการสรางอนสแตนซหลายๆอนสแตนซเพอใชงาน อนสแตนซบางอนสแตนซถกอางดวยตวแปรอางถง แตบางอนสแตนซกไมถกอางดวยตวแปรอางถง ดงนนเมอโปรแกรมถกท างานเปนระยะเวลาหนง ดงเชนในกรณทโปรแกรมโคดออกนอกกรอบการท างาน Out-of-Scope อาจท าใหอนสแตนซทไมถกอางถงเกดเปนขยะขนและไมสามารถน ากลบมาใชงานหรออางถงไดอกตอไป ส าหรบภาษาทสนบสนนการท างานเชงออบเจกต จะมกลไกพเศษท

Page 87: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

87

สามารถก าจดขยะอนสแตนซทไมถกใชงานเหลานออกจากหนวยความจ า เรยกวา Garbage Collector ซงจะท าการก าจดขยะเหลาน ท างานในฉากหลง (Background Process) โดยผเขยนโปรแกรมไมจ าเปนตองเขยนค าสงก าจดขยะดวยตนเอง และผใชโปรแกรมกไมรเลยวามการก าจดขยะอนสแตนซขนเมอใด เพราะเปนกลไกทท างานโดยอตโนมต ซงไมเหมอนกบภาษาเชงวตถตวอนๆ ทผเขยนโปรแกรมตองระมดระวงปญหาในลกษณะน โดยตองคนพนทใหกบหนวยความจ าทกครงทไมมการใชงานอนสแตนซ เชน ในภาษา C++ ตองใชค าสง free เพอก าจดอนสแตนซทงออกจากหนวยความจ าทกครง

ส าหรบภาษา Delphi แมวาภาษานจะไมมกลไกในการท าลายออบเจกตแบบอตโนมตอยางเชน Garbage Collector ในภาษา Java หรอในภาษา C# แตใน Delphi จะใชแนวคดทวาออบเจกตทเปน Owner หรอเจาของออบเจกต จะเปนผท าลายออบเจกตนนเอง ตวอยางเชน เมอเราท าการสรางออบเจกตหรอ คอมโพเนนทโดยใชค าสง เราจ าเปนตองระบชอของออบเจกตหรอคอมโพเนนททเปนเจาของออบเจกตนนๆในรปแบบ

object_reference := Class_name.create(Owner);

ตวอยางเชน

myButton := TButton.Create(Form1);

โดยเจาของออบเจกต (Owner) หรอคอมโพเนนท myButton คอ Form1 ดงนนเมอ Form1

ถกท าลายออบเจกต myButton กจะถกท าลายโดยอตโนมต หรออกกรณหนงคอเราสามารถสงท าลายออบเจกตใดๆไดโดยไมตองรอใหเจาของออบเจกตนนถกท าลายโดยใชเมทธอด free ของออบเจกตนน เชนmyButton.free;

ภาษา Perl ถกสรางขนมาโดยมแนวคดเพอใหสามารถใชงานงาย โดยจะมระบบทเรยกวา “Garbage Collection System” อย ซงเมอมการอางองของออบเจกตใดๆ กตามและเมอสนสดการท างานของโปรแกรมแลวออบเจกต จะถกท าลายเขาไปอยใน garbage collection ในระบบปฏบตการ UNIX จะมองวา garbage collection นนจะเปนขยะ แตในความเปนจรงแลว ระบบนมความจ าเปนทจะฝงหรอ embedded ลงในระบบ หรอในสภาพแวดลอมทเปน Multithreaded

ส าหรบภาษา Perl ออบเจกตทถกสรางขนมาจะมการเกบคาอางอง (Reference) ไปยงออบเจกตตางๆ เพอทจะท าการคนหนวยความจ าใหกบระบบ ซงออบเจกตเหลานจะถกท าลายไปโดยอตโนมต หลงจากทโปรแกรมสนสดการท างาน (Program Exit) หรอเมอโปรแกรมออกจาก Scope หรอ Block ทก าหนด แตถาตองการทจะควบคมการคนหนวยความจ า เราสามารถสราง เมทธอด DESTROY() ขนมาเองภายในคลาส โดยสงเกตวาชอของเมธอดนจะในอกษรตวพมพใหญทงหมด

Page 88: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

88

sub DESTROY {

#

# Add code here

#

}

โดยเราสามารถก าหนดใหมนท างานเมอใดกตามทมความจ าเปนทตองมการท าลายออบเจกต

ไป แต DESTROY( ) นนจะไมสามารถเรยกใช DESTROY( ) ในลกษณะของ nested function ได

5.3 การนยามคลาสและออบเจกตในภาษาเชงวตถ ส าหรบภาษาทสนบสนนการท างานแบบออบเจกตนน ออบเจกตจะถกสรางขนมาจากการนยามของคลาส (Class Definition) ซงออบเจกตจะถกสรางขนมาจากคลาสในลกษณะทเปน Static หรอ Dynamic ซงเกดขนขณะทโปรแกรมมการท างาน โดยคลาสทก าหนดขนมานนอาจจะเปนคลาสทสรางขนใหม หรอเปนคลาสทเกดขนจากการสบทอดจากอกคลาสหนงกได ภาษาจาวาเปนภาษาทมคณสมบตทางออบเจกตทเขมงวด โดยมขอก าหนดอยวาในหนงโปรแกรมตองมคลาสอยางนอยหนงคลาส การสรางตวแปรหรอเมทธอดของจาวาจ าเปนตองระบใหอยในคลาส โดยทการประกาศคลาสในภาษาจาวามขอก าหนดดงน

[modifier] class ClassName {

[class member]

}

ความหมายของสวนตาง ๆ ของคลาสมดงน [modifier] เปนตวทอธบายถงลกษณะของคลาส เชน public static abstract final

เปนตน class เปนค าทก าหนดวาสงทสรางคอ คลาส ClassName เปนชอของคลาสสวนใหญจะเปนค าทสอใหรถงเนอหาทอยภายในคลาส [class member] เปนสมาชกของคลาสประกอบดวย Data และ Method ตวอยางเชน

public ClassRoom {

int roomId;

String commonName;

public String getCommonName(){

return this.commonName;

}

}

ส าหรบภาษา C# ในลกษณะเดยวกนคลาสซงเปนแนวคดหนงของการท าชนดขอมลเชงนามธรรม (Abstract Data Type: ADT) และแนวทางการพฒนาเชงวตถ โดยมการจดท าเปนตนแบบของออบเจกตในลกษณะของคลาส ซงจะสงเกตเหนไดวาโครงสรางของภาษา C# นนมความคลายคลงกน

Page 89: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

89

กบโครงสรางของภาษา Java มาก สบเนองมาจาก 2 ภาษานมภาษาตนแบบมาจากภาษา C หรอ C++ นนเอง

using System;

public class Producer

{

private int NoOfDish;

Producer(int n) {

this.NoOfDish = n;

}

}

ซงหลงจากทมการประกาศคลาสแลวเราสามารถน าเอาคลาสนนมาสรางเปนออบเจกตเพอน าไปใชงานในโปรแกรมได

public class Consumer

{

public static void Main(){

Producer p;

p = new Producer(15);

}

}

ส าหรบการสรางออบเจกตในภาษา Delphi จ าเปนตองท าการสรางหรอนยามคลาสขนมากอนแลวจงจะสามารถท าการสรางออบเจกตขนมาจากนยามนนได ซงคลาสในทนคอ ขอก าหนดทระบรปแบบโครงสรางและพฤตกรรมหรอการท างานของออบเจกต หรออาจกลาวไดวาคลาสคอตนแบบของออบเจกต การสรางคลาสในภาษา Delphi จะอาศยชนดของขอมล (Type) ซงจะคลายกบขอมลชนดทเปน Record ทประกอบไปดวยฟลดขอมล แตคลาสในภาษา Delphi จะตางจากเรคคอรดตรงทขอมลของคลาส นอกจากจะมฟลดขอมลแลวยงสามารถมพฤตกรรม (Method) ซงเปนค าสงทเขยนขนในรปแบบของ Procedure หรอ Function ดงนนคลาสในภาษา Delphi กคอชนดของขอมล (Type) ชนดหนง ซงลกษณะการตงชอคลาสจะใชตวอกษร T น าหนา เชน TComponent, TButton, TLabel, TColor, TFont ส าหรบการนยามคลาสใน Delphi จะใชรปแบบ ดงน

type

Class_Name = class(Ancestor_Class)

Member List

end;

Class_Name คอ ชอคลาสทตองการสราง Ancestor_Class คอ ชอคลาสบรรพบรษหรอคลาสตนแบบ (Based Class) ทจะสบทอด

สงตางๆมาใชในคลาสทก าลงสราง แตถาหากไมระบ Ancestor คลาส จะถอวาคลาสนนสบทอดมาจากคลาส TObject ใน Delphi คลาส TObject จะเปนคลาสบรรพบรษของทกคลาส

Member List คอ สมาชกของคลาส ไดแก

Page 90: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

90

- Field คอ ขอมลหรอตวแปรภายในของออบเจกต - Method คอ พฤตกรรมของออบเจกตเปนชดค าสงทเขยนในรปแบบ Procedure

หรอ Function Method Properties คอ interface เปนวธการเขาถง Filed ขอมลซงเปนตวแปรภายในของออบเจกต

การเขาถงจะใช access specifies read หรอ write เพอระบวาจะเขาไปอาน หรอ เขยน (แกไข) ขอมลภายในของออบเจกต ซง Properties มเฉพาะออบเจกตทเปนคอมโพเนนทเพอใชเขาถงขอมลภายในคอมโพเนนทผาน Tab Properties ของออบเจกต Inspector ในขณะทท าการออกแบบโปรแกรม

แตส าหรบภาษา Perl แลวคลาสจะอยในระดบเดยวกนกบ Package ซงเมอใดทมการอางองถง

คลาสแลวภาษา Perl จะมองภาพการอางองเปน Package ในการออกแบบโครงสรางคลาสในภาษา Perl นนจะคลายกบภาษา C Programming ซงท าใหผทมพนฐานทางดานภาษา C มากอนสามารถเรยนรภาษา Perl ไดงายขน เนองจากม Syntax ของภาษาทคลายกน ตวอยางเชน การประกาศคลาสและการสบสกลของคลาสจะใชเครองหมาย Double colon “::” ดงตวอยางตอไปน

Package Cocoa::BigCocoa;

#

# Just add code here

#

1;

จากตวอยางเปนการสรางคลาส Cocoa โดยอาศยหลกการเดยวกนกบการสราง Package

โดยท Package ไฟลทสรางขนมานนจะมชอวา Cocoa.pm โดยทนามสกล .pm ทใชนนเปนนามสกลทเปนคา Default ส าหรบ Package ใน Perl Module

5.3.1 การสรางออบเจกต การสรางออบเจกตขนมาเพอใชงานภายในโปรแกรม แตละภาษามแนวคดทคลายกนคอออบเจกตจะถกสรางขนมาจากคลาส ซงเราเรยกวา “Instantiation” ในขนตอนนระบบจะท าการจดสรรหนวยความจ าเพอรองรบออบเจกตทสรางขนใหมน หลงจากทออบเจกต ถกสรางขนมาแลว เราสามารถเขาถงขอมลและเมทธอดภายในคลาสไดจาก instance ของคลาสนนเอง ส าหรบการสรางออบเจกตในภาษาจาวานน สามารถท าไดโดยอาศยคยเวรด new ดงตวอยางน

MyCircle circle = new MyCircle();

หรอกรณทตองการสรางออบเจกตขนมาใชงานมากกวา 1 ออบเจกต สามารถท าไดดงน MyCircle circle1 = new MyCircle();

MyCircle circle2 = new MyCircle();

Page 91: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

91

MyCircle circle3 = new MyCircle();

โดยท MyCircle เปนคลาสทไดมการนยามไว และ circle1, circle2, circle2 เปนออบเจกต

หรอเรยกไดวาเปนอนสแตนซของออบเจกต โดยเมอสรางออบเจกตแลวถาตองการเรยกใชงานขอมลหรอเมทธอดของออบเจกต MyCircle กสามารถเรยกใชงานผานอนสแตนซทสรางขนได โดยมรปแบบการใชงาน

ObjectName.Attribute หรอ ObjectName.Method() เชน

circle1.Area และ circle1.CalculateArea()

ซงถงแมวาแตละอนสแตนซทสรางขนทง 3 ตวนนจะมาจากคลาสเดยวกน แตในแตละออบเจกตนนกมความเปนอสระไมขนอยตอกน ส าหรบการสรางออบเจกตในภาษา Delphi จะมลกษณะการท างานคลายกบภาษาอนๆ โดยจะสรางออบเจกตขนมาจากคลาส ซงการสรางออบเจกตขนจากคลาสอาจเรยกวา การสราง Instance ของคลาสซงจะเปนขนตอนทเรยกวา การ Instantiate โดยมรปแบบการสรางออบเจกตดงน

object_referrence := Class_name.create(Owner);

โดยท object_reference คอ Object reference หรอ ตวแปร pointer ทชหรออางองไปยง object Class_name เปนชอของคลาสทจะใชส าหรบสรางเปนออบเจกต

Create เปนเมทธอดของคลาส (Class method) ทท าหนาทในการสรางออบเจกต ในหนวยความจ า ซงจะเรยกวาเมทธอดประเภทนวา Constructor method

Owner เปนชอออบเจกต ซงเปนเจาของออบเจกตนน หากไมมการระบถอวาเปน Nil เชน การสรางคอมโพเนนทชนด TButton โดยใชค าสง

var

myButton : TButton; // ประกาศออบเจกต reference begin

myButton := TButton.Create(Form1);

end;

ซงหลงจากนการอางถงออบเจกต โดยใชชอตวแปรออบเจกต reference ซงการเขาถงสมาชก

ขอ ง อ อ บ เ จ ก ต ใ ด ๆ จ ะ ใ ช ร ป แ บ บ object_reference.<Property> ห ร อ object_reference.<Method>

Page 92: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

92

5.3.2 คอนสตรคเตอร (Constructor) คอนสตรคเตอรจดเปนเมทธอดประเภทหนงทจ าเปนตองมในทกคลาส ส าหรบภาษา Java

ภาษา C++ และภาษา C# เองมรปแบบการใชงานคอนสตรคเตอรทเหมอนกน คอมองวาคอนสตรคเตอรนนเปนเมทธอดหนงๆ ในคลาสทมชอเดยวกนชอของคลาส สามารถท าการโอเวอรโหลดได โดยคอนสตรคเตอรมคณสมบตเหมอนกบเมทธอดทวไป ยกเวนทเมทธอดทท าหนาทเปนคอนสตรคเตอรจะไมสามารถสงคากลบได ดงตวอยาง

class Bicycle

{

int color;

Bicycle() //constructor

{

}

}

แตถาคลาสใดไมมคอนสตรคเตอรเมทธอด ในภาษาจาวาคอมไพเลอรจะสรางใหหนงเมทธอด

โดยปรยายในลกษะของ Default Constructor (เปนคอนสตรคเตอรทไมมการผานคาตวแปร ) ดงนนคลาสลกกจะไดรบการสบทอดคลาสดงกลาวมาดวยถาหากคลาสลกไมมการเขยนคอนสตรคเตอรใหม โดยจะมรปแบบดงน

class Player {

private String name;

private String address;

Player() {

Name = “John”;

addres = “Norfolk”;

}

public void showInfo() {

System.out.println(“In Player”);

}

}

class GoalKeeper extends Player {

private String skills;

GoalKeeper(String s) {

Skills = s; //No default constructor in Player class

}

public void showInfo() {

System.out.println(“In GoalKeeper”);

}

}

Page 93: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

93

class InheritConstructor {

public static void main(String[] args) {

Player p = new Player();

GoalKeeper g = new GoalKeeper();

g.showInfo();

}

}

จากตวอยาง คอนสตรคเตอรของ GoalKeeper จะสบทอดคอนสตรคเตอรของ Player โดย

ปรยาย อยางไรกตามถาซเปอรคลาสมการเขยนทบคอนสตรคเตอรไปแลว คอนสตรคเตอรของคลาสลกตองอางองถงคอนสตรคเตอรของซเปอรคลาสใหถกตอง เชน ถามการสรางคอนสตรคเตอรของคลาส Player เปน Player(String a, String b) คลาส GoalKeeper จะไมสามารถอางองถงคอนสตรคเตอรของคลาส Player ได เพราะไมมคอนสตรคเตอรทเปน Default Constructor การสรางคอนสตรคเตอรโดยอางองถงซเปอรคลาสคอนสตรคเตอร ตองใสค าสง super() เปนค าสงแรกเพอเรยกคอนสตรคเตอรทอยในคลาสแม และก าหนดคาตวแปรตางๆใหตรงกบคอนสตรคเตอรของคลาสแม เชน ถาคอนสตรคเตอรของคลาส GoalKeeper เปน GoalKeeper(String a, String b, String c) ค าสงทตองใสคอนสตรคเตอรของคลาส GoalKeeper คอ super(a, b) เพอเปนการเรยกคอนสตรคเตอรทอยใน Player เปนตน

ส าหรบ Delphi เมทธอดคอนสตรคเตอร สามารถมชออะไรกไดเนองจากการระบ คอนสตรคเตอรจะใชคยเวรด “constructor” ในการระบ ไมเหมอนบางภาษาทใชชอคลาสในการระบคอนสตรคเตอร แตใน Delphi กมกนยมตงชอคอนสตรคเตอรวา “Create” และสงทสงกลบมาจากเมทธอดคอนสตรคเตอรคอ reference ของออบเจกต ตวอยางเชน

var mycircle : TCircle;

begin

mycircle := TCircle.create; // ไมมการระบ owner end;

จากตวอยางน เมอเรยกใชคอนสตรคเตอร create mycircle จะชไปท ออบเจกตชนด TCircle

ในหนวยความจ าและฟลดขอมลของออบเจกต mycircle จะถกก าหนดใหเปน 0 หรอ Nil (ถาเปน reference) ตวอยางของการสรางคอนสตรคเตอรส าหรบคลาส Date

type

TDate = class

public

constructor Create (y,m,d:Integer);

end;

constructor TDate.Create (y,m,d:Integer);

begin

fDate := EncodeDate (y,m,d);

end;

Page 94: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

94

และตวอยางการเรยกใชงาน var

ADay:TDate;

begin

ADay := TDate.Create (1,10,2011);

end;

จากตวอยางขางตนการเรยกคอนสตรคเตอรจ าเปนตองมการสงคาพารามเตอรเนองจากมเพยง

คอนสตรคเตอรเดยว และจ าเปนตองมการสงคา หากตองการใหมการก าหนดคาเรมตน ใหท าการสรางคอนสตรคเตอรในลกษณะทเปน Overload Constructor ดงตวอยางตอไปน

type

Tdate = class

public

constructor Create; overload;

constructor Create (y,m,d:Integer); overload ;

end;

constructor TDate.Create (y,m,d:Integer);

begin

fDate :=EncodeDate (y,m,d);

end;

constructor TDate.Create;

begin

fDate :=Date;

end;

ส าหรบการคอนสตรคเตอรในภาษา Perl จดวาเปนฟงกชนหนงเรยกวา subroutine ซงจะ

คลายกบฟงกชน หรอซบรทนทวไป และสามารถสงคากลบในลกษณะของคาอางอง (Reference) การเรยกใช คอนสตรคเตอรนนจะตองเรยกผาน Subroutine ทมชอเฉพาะวา “bless” บางครงเราจะเรยก Subroutine นวา “blessing” ออบเจกต ตามตวอยางโคดตอไปนทจะแสดง จะเปนสวนทแสดงใหเหนถง syntax ของ bless ฟงกชน bless YeReference [ , classname]

YeReference จะอางองไปยง object ทก าลง bless Classname ใชส าหรบระบชอของคลาส จะเปน optional คอจะมหรอไมมกได และ

จะมการใสชอของ Package ทอางองถงดวย ถาไมใส classname กจะใชชอของ Package ทอยปจจบนแทน

package Cocoa;

sub new

{

my $this = { }; #Create an anonymous hash, and #self points to it.

Bless $this; #Connect the hash to the package Cocoa.

return $this; #Return the reference to the hash.

Page 95: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

95

}

#!/usr/bin/perl #Caller Program – Demonstrate how to call package Cocoa

use Cocoa;

$cup = new Cocoa;

จากตวอยางของการเรยกคอนสตรคเตอรจะเหนวามการสราง Package Cocoa และ

Subroutine ชอวา new เพอท าการสงคาอางองกลบ การเรยกใชงาน Package นนจะตองใชค าสง use package โดยการทจะคอนสตรคเตอรจะถกเรยกใชเมอมการสรางออบเจกตขนมา โดยค าสง

$cup = Cocoa -> new();

หรอ $cup = Cocoa :: new(); ซงมรปแบบการใชงานเหมอนกบภาษา C

5.3.3 การเขาถงสมาชกของออบเจกต (Object Accessibility)

แนวคดของการควบคมการเขาถง หรอบางครงเราเรยกวาเปนแนวคดของการควบคมการมองเหนของคณสมบตทซอนอยภายในออบเจกต เปนแนวคดทพฒนาตอมาจากชนดขอมลทเปนนามธรรม (Data Abstraction) ซงเปนการสรางมมมองใหมของออบเจกตทอาจจะมรายละเอยด และขนตอนการท างานทซบซอน ตวอยางเชนออบเจกตเครองเลนวดโอ VCR ทมกลไกการท างานทซบซอน แตในมมมองของผใชงานเครองเลนวดโอนน คอเพยงแคใสแผนซดหรอดวด และกดปม Play กจะท าใหสามารถเครองเลนท างานได โดยทผใชเพยงแครวา VCR นนสามารถท าอะไรได แตไมจ าเปนตองรถงวาสามารถท าไดอยางไร

การก าหนดการเขาถงสมาชกหรอเมทธอดภายในออบเจกตเรยกวา Encapsulation หรอ Data Hiding เปนรากฐานอยางหนงของแนวคดของการพฒนาซอฟตแวรเชงวตถ ซงขอดของเอนแคปซเลชนเปนการปกปองคณสมบตของออบเจกตจากความเสยหาย (ในทนจะหมายถงการเปลยนแปลงของคาทเกบในออบเจกต) โดยเอนแคปซเลชนจะท าการการหอหม (Wrapper) คณสมบต (Data Member) และเมทธอด (methods) เขาไวดวยกน จะท าหนาทปองกนมใหออบเจกตอนทอยภายนอกเขาถงออบเจกตหนงๆไดอยางอสระ ซงออบเจกตจะตองก าหนดวามคณสมบตใดบางทสามารถใหเขาถงได หรอจะมเฉพาะเมทธอดทก าหนดใหเทานนทจะสามารถตดตอกบคณสมบตภายในออบเจกตได การจ ากดการมองเหนของคณสมบตของออบเจกตนนเรยกวา Visibility หรอในท านองเดยวกนกบการก าหนด Scope of Variable ในการเขยนโปรแกรมแบบโครงสราง ซงมการก าหนดขอบเขตการมองเหน Scope of Visibility โดยคยเวรด public, private และ protected

1. public หมายถง ความสามารถในการเขาถงไดทงจากภายในออบเจกตตวเอง และตางออบเจกต

2. private หมายถง สามารถเขาถงไดจากเฉพาะภายในออบเจกตเดยวกนเทานน

Page 96: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

96

3. protected หมายถง ความสามารถทจะเขาถงคณสมบตภายในออบเจกตเดยวกน และออบเจกตทเปนทสบทอดเทานน

ประโยชนของแนวคดของเอนแคปซเลชนคอการควบคมการเขาถงคณสมบตและเมทธอดของ

ออบเจกต ทงในแงของการเรยกใชขอมล หรอการเปลยนแปลงขอมลเกดขนภายในออบเจกต ซงจะสงผลตอสถานะของออบเจกตทเปลยนไป หรอจะไมสงผลกระทบตอออบเจกตอน

ในภาษาจาวา การก าหนดการมองเหนของคลาสทมการสบทอดสามารถท าไดโดยอาศยคลาส เมทธอดสามารถเรยกใชงานผานอนสแตนซของออบเจกตทสรางขน ทงนการอางองถง Data Member หรอ Method ภายในคลาสโดยใชคยเวรด super และ this ซงเปนการอางองกบเมทธอดหรอตวแปรในคลาส คลาสทสบทอดหรอคลาสทเปนซเปอรคลาส ในล าดบทตอเนองกนเทานน ถาล าดบชนของคลาสมมากกวาสองล าดบชน และจ าเปนตองอางองถง ซเปอรคลาสในล าดบทสงกวาล าดบของซเปอรคลาสทก าลงอางองถง ตองเขยนโปรแกรมเปนลกโซเพออางองถงเทานน แตออบเจกตทสรางโดยการใชค าสง new สามารถอางองถงตวแปรในแตละคลาสไดโดยการแปลงชนดของออบเจกต (Object type casting) ไปยงออบเจกตทตองการ พจารณาจากตวอยางตอไปน

class People {

protect String name;

People (String n) {

this.name = n;

}

public void showInfo() {

System.out.println(name);

}

}

class Student extends People {

private Decimal GPA;

Student (String n, Decimal GPA) {

super(n);

this.GPA = GPA; //using „this‟ keyword to refer to class member

}

public void showInfo() {

super.showInfo(); //calling showInfo in Parent class

System.out.println(GPA);

}

}

class Program {

public static void main(String [] argv) {

People p = new People(“John”);

Student s = new Student(“Sam”, 3.50);

p.showInfo();

p = (Student) s;

p.showInfo();

}

Page 97: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

97

}

จากตวอยางดงกลาว จะเหนไดวามการสรางคลาส Student เพอท าการสบทอดจากคลาส People โดยทมการสงคาพารามเตอรระหวางคอนสตรคเตอรเพอใหมการก าหนดคาเรมตนใหแกตวแปร ซงตวแปร Name นนเปนตวแปรทประกาศในคลาส People แตกยงสามารถถายทอดคณสมบตนลงมาสคลาส Student ดวย สงเกตวาการอางองถงคณสมบตทอยในคลาสแมจะอางองโดยใชค าสง super ในคอนสตรคเตอรส าหรบคลาสลก

ส าหรบภาษา Delphi คลาสเมทธอดเปนเมทธอดทผกตดอยกบคลาสนนๆ ซงจะสามารถเรยกผานคลาสเมอไรกได ส าหรบการประกาศคลาสเมทธอดจะตองใชคยเวรด "class" น าหนาชอของคลาส เชน

type

Class_Name = class(Ancestor_Class)

Private

... { private declarations here}

protected

... { protected declarations here }

public

... { public declarations here }

published

... { published declarations here }

end;

ส าหรบนยามของแตละคยเวรดทใชส าหรบการควบคมการมองเหนนน อธบายไดดงตอไปน

Private เปนการระบวาฟลดขอมลหรอเมทธอดจะสามารถมองเหนไดเฉพาะ ภายใน unit หรอ program ทนยามคลาส นเทานน

Protected เปนการก าหนดใหสามารถถกมองเหนไดเฉพาะ unit หรอ source program ทนยามคลาสนและจาก unit หรอ source program อนๆ ทนยามคลาสทสบสกลจากคลาสนเทานน

Public เปนการก าหนดใหสามารถถกมองเหนไดจากทก unit และทก source program

Published เปนการก าหนดใหมขอบเขตการมองเหนเหมอน public members แตสงทแตกตางคอ จะมการสรางตาราง RTTI (RunTime Type Information) ในหนวยความจ าเพอใหสามารถเขาถง Properties ในขณะออกแบบโดยผานออบเจกต Inspector ดงนนสงทก าหนดในสวน published คอ property

5.3.4 การสบทอด (Inheritance) หวใจส าคญของการพฒนาโปรแกรมเชงวตถคอการใชประโยชนโปรแกรมโคดทมอย Code

Reusability หรอการน าสงทมอยมาใชโดยไมตองสรางใหม ซงคณสมบตทสนบสนนแนวคดนคอการ

Page 98: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

98

สบทอดซงเราสามารถสรางคลาสใหม โดยสบทอดโครงสรางและพฤตกรรมทงหมดจากคลาสตนแบบ หรอซเปอรคลาส ซงคลาสใหมทสบสกลมานอาจจะสบทอดโครงสรางหรอพฤตกรรม ของคลาสตนแบบโดยมการเพมคณสมบตหรอเมทธอด หรอ อาจจะเปนการแกไขพฤตกรรมของคลาสตนแบบ โดยการแกไขเมทธอดทสบทอดมาจากคลาส ตนแบบ การสบสกลในภาษา Delphi ไมจ าเปนตองใชค าสงพเศษใดๆ เนองจากรปแบบของการสรางคลาสมการระบชอคลาสตนแบบอยแลว เชน

type

Class_Name = class(Ancestor_Class)

Member_List

end;

type

TDog = class(TAnimal)

…..

End;

ในตวอยางนคลาส TDog สบทอดคณสมบตจาก TAnimal แตถาไมระบคลาสตนแบบ คลาสน

จะสบสกลมากจากคลาส TObject ซงใน Delphi ถอวาคลาส TObject เปนตนแบบใหกบทกคลาส การสบสกลใน Delphi จะมลกษณะเปน Single Inheritance คอ สามารถสบสกลจากคลาสตนแบบไดเพยงคลาสเดยวเทานนแต Delphi สามารถอมพลเมนทไดหลายอนเตอรเฟสในลกษณะเดยวกนกบ ภาษาจาวา

ส าหรบภาษา Object Perl เองซงเปนภาษาทสนบสนนแนวคดของการสบสกลดวย paths ทอยใน @ISA array และตวแปรตางๆ จะตองถกสบทอดมาดวย 5.3.5 โอเวอรโหลดและโอเวอรไรด (Overloading and Overriding)

การสราง Overloading method ใน Delphi จะใชคยเวรด overload ตามหลงชอเมทธอดซงคอมไพเลอรจะเปนตวตดสนใจวาจะเรยกใชเมทธอดไหน โดยพจารณาจาก Signature ของเมทธอด ดงตวอยางน ทท าการสราง overload method ชอ SetValue

type

TDate = class

public

procedure SetValue (y,m,d:Integer);overload;

procedure SetValue (NewDate:TDateTime);overload;

...//the rest of the class declaration

procedure TDate.SetValue (y,m,d:Integer);

begin

fDate := EncodeDate (y,m,d);

end ;

procedure TDate.SetValue(NewDate:TDateTime);

begin

fDate := NewDate;

Page 99: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

99

end;

การท าโอเวอรไรดเปนการการเปลยนแปลงแกไขเมทธอดทมการสบทอดมาจากคลาสตนแบบ

ในคลาสใหม ซงเมทธอดทจะท าการโอเวอรไรดไดนนตองเปน Virtual method หรอ Dynamic method เทานน ดงนนในขนตอนนยามเมทธอดในคลาส ถาตองการใหเมทธอดนนสามารถถกโอเวอรไรดได ในคลาสทจะสบสกลตอไป ตองระบ directive Virtual หรอ Dynamic และในคลาสทสบสกล ถาตองการ override virtual หรอ dynamic method ตองระบ override หลงการนยาม เมทธอดทตองการจะ override ดวย ดงตวอยาง

Type

TMyClass = class //Derived from TObject

Procedure One; Virtual; //Allow override

Procedure Two; //Static method ท า override ไมได End;

TMySubClass = Class(TMyClass)

Procedure One; Override; //Will be overrided

Procedure Two; //Overriding “Two” from based class

5.3.6 โพลมอรฟซม (Polymorphism)

โพลมอรฟซมหมายถง การทเมทธอดมไดหลายรปหรอหลายพฤตกรรมตามสถานะของออบเจกต ซงเปนคณสมบตทส าคญอยางหนงในการพฒนาโปรแกรมเชงวตถ ซงโพลมอรฟซมจะเปนการใชกลไกของการสบทอดและการท า late binding คอ การเรยกใชงานเมทธอดในขณะทโปรแกรมท างาน โพลมอรฟซมมหลกแนวคดทเปนความสามารถของ 2 ออบเจกต ขนไปทตอบสนองตอ message เดยวกน ในวธทตางกน ภาษา Java มกลไกสบทอดและการท า dynamic binding จงท าใหสามารถสรางเมทธอดทมลกษณะพเศษอยางหนงคอสามารถรบพารามเตอรเปนอนสแตนซของคลาสทตางกนได และแมวา เมทธอดจะจดการกบพารามเตอรทรบมาดวยโปรแกรมเดยวกนแตผลทไดจะขนกบวา พารามเตอรนนเปนอนสแตนซของคลาสใด ท าใหไมจ าเปนตองแบงแยกประเภทเพอจดการ เรยกแนวความคดในการจดการกบอนสแตนซของคลาสทตางกนดวยเมทธอดเดยวกนวาโพลมอรฟซม แนวความคดนไมไดจ ากดอยกบเพยงรปแบบของเมทธอดเทานน แตอาจจะขยายเปนอารเรยทเกบอนสแตนซของคลาสทตางกน เพอใหสามารถใชประโยค for จดการกบสมาชกในอารเรยนนดวยโปรแกรมเดยวกน ซงจะเหนในตวอยางตอไปน

// PolyMethod.java

class A { void print () { System.out.println („A‟); } }

class B extends A { void print () { System.out.println („B‟); }

}

class PolyMethod {

static void test (A x) { x.print (); }

public static void main (String args [] ) {

A a = new A ();

test (a);

a = new B ();

Page 100: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

100

test (a) ;

}

}

จากตวอยาง คลาส A มเมทธอด print() ทพมพอกษร ‘A’ ออกมา สวนคลาส B ทขยายมา

จากคลาส A และมเมทธอด print() ทพมพอกษร ‘B’ ออกมา ในคลาส PolyMethod มเมทธอด test () ทรบอนสแตนซของคลาส A เปนพารามเตอร ท าใหสามารถสงอนสแตนซของทงคลาส A และ B เปนพารามเตอร ทเมทธอด นได แสดงวา test() มคณสมบตของโพลมอรฟซม และในเมทธอด main() มการสรางอนสแตนซ a ของคลาส A และสงไปท test() ไดผลการพมพของ x.print() ออกมาเปน ‘A’ ตอมาจงสรางอนสแตนซของคลาส B และก าหนดคาใหแก reference a แลวสงไปท test() ไดผลการพมพของ x.print() ออกมาเปน ‘B’ สงเกตวา test() จดการกบวตถ x ดวยโปรแกรมเดยวกนคอ x.print() แต print() ถกผกชอแบบไดนามก ดงนนเมอสงอนสแตนซของคลาส A ไปจะไดผลของการพมพเปน ‘A’ และเมอสงอนสแตนซของคลาส B ไปกไดผลของการพมพเปน ‘B’ แสดงวา test() ใหผลการท างานขนกบวาอนสแตนซทสงเขามาวาเปนของคลาสใด

ลกษณะการท างานของโพลมอรฟซมในภาษา Delphi คอเมทธอดทสามารถจดการกบออบเจกตหรออนสแตนซของคลาสทตางกนได หากคลาสเหลานนสบสกลมาจากคลาสทก าหนดใหเปน parameter ของ polymorphism เมทธอดตวอยางเชนการนยามคลาส TShape เปนซเปอรคลาส และมการสรางคลาส TRectangle, TSquare, TEllipse โดยสบสกลจาก คลาส TShape และมการประกาศเมทธอด Draw ของคลาส TRectangle, TSquare, TEllipse เพอใหการท างานของเมทธอด Draw มการท างานทแตกตางกนในแตละคลาส เราสามารถสราง Polymorphism เมทธอดชอ DrawIt เพอใชงานรวมกนไดดงน

procedure DrawIt(Shape: TShape);

begin

Shape.Draw;

end;

และค าสงในการเรยกใชโพลมอรฟซมเมทธอด DrawIt

var

Rectangle: TRectangle;

Square: TSquare;

Ellipse: TEllipse;

begin

Rectangle := TRectangle.Create;

Square := TSquare.Create;

Ellipse := TEllipse.Create;

DrawIt(Rectangle); // Draws a rectangle

DrawIt(Square); // Draws a square

DrawIt(Ellipse); // Draws an ellipse

Rectangle.Free;

Square.Free;

Ellipse.Free;

end;

Page 101: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

101

5.3.7 การจดการเมทธอดแบบเวอรชวลและแบบไดนามก จากทไดกลาวมาแลววา เมทธอดทรบคาอนสแตนซของซเปอรคลาสเปนพารามเตอร จะ

สามารถรบอนสแตนซของสบคลาสเปนพารามเตอรไดดวย แตหากในระหวางซเปอรคลาสกบสบคลาสของอนสแตนซทสงไปเมทธอดเดยวกนมการบงชอเกดขน ภาษาจาวาจะจดการกบการบงชอฟลดทแตกตางจากการบงชอเมทธอด จงเปนเหตใหเรยกวา shadowing และ overriding เพอใหตางกน การผกคา (binding) เปนการระบวาชอสมาชกของอนสแตนซทถกสงมาเปนพารามเตอรในเมทธอดนน หมายถงชอใดกนแน ระหวางชอทบงกนอย ในภาษาจาวา จะท าการผกคาในกรณของ shadowing แบบ static นนคอ ท าในขณะคอมไพลโปรแกรมแตท าการผกคาในกรณของ overriding แบบ dyamic นนคอ ท าในขณะคอมไพลโปรแกรม แสดงไดตามตวอยางตอไปน

// Shadowing.java

class A { public int x = 10; }

//variable x in class B is shadow variable

class B extends A { public int x = 20; }

class Shadowing {

static void testShadow (A v) {

System.out.println (v.x);

}

Class Tester

public static void main (String args[]) {

testShadow (new A());

testShadow (new B());

}

}

คลาส A มการประกาศตวแปร x ถกก าหนดคาเรมตนใหเปน 10 สวนคลาส B มการสบ

ทอดมาจากคลาส A ประกาศตวแปร x และก าหนดคาเรมตนใหเปน 20 ในลกษณะทเปน Shadow Variable ในคลาส Shadowing ม method testShadow () ทรบอนสแตนซของคลาส A เปนพารามเตอร ท าใหสามารถสงอนสแตนซของทงคลาส A และ B เปนพารามเตอรไปทเมทธอดนได และใน testShadow ( ) มการพมพคา x ของอนสแตนซทเปนพารามเตอรออกมา ในเมทธอด main( ) มการสรางอนสแตนซของทงคลาส A และ คลาส B พรอมกบสงไปท testShadow ( ) ผลของการพมพคา v.x ใน testShadow ( ) ส าหรบทงสองอนสแตนซเปน 10 ทงค ทเปนเชนนเพราะ ขณะทคอมไพเลอรท าการคอมไพลโปรแกรม และเมทธอด testShadow( ) พบวาพารามเตอร v เปน อนสแตนซของคลาส A ดงนนเมอมการอางถง v.x ในประโยค System.out.println( ) จงจดการสรางโปรแกรมทใหคา v.x นเปน x ตว ทอยในคลาส A เรยกการผกคาระหวางชอตวแปร กบตวแปรทถกอางถงในตอนคอมไพลโปรแกรมอยางนวา static binding ดงนนขณะทโปรแกรมท างาน ไมวาอนสแตนซทสงมาท testShadow ( ) จะเปนของคลาส A หรอคลาส B กตาม โปรแกรมจะท าการพมพ x ทอยในคลาส A ซงเปน 10 ออกมาเสมอ

Page 102: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

102

ส าหรบอกตวอยางหนงคอลกษณะของการท า Overriding ซงเปนตวอยางหนงของการท า Late Binding ในกรณนคอมไพเลอรอาจจะไมรลวงหนามากอนวาโปรแกรมจะท าการเรยกใชงานเมทธอดใดเพอใหท างาน จากตวอยางตอไปนจะเหนวามการสรางคลาส A เปนคลาสแม และคลาส B เพอสบทอดจาก A และในทงสองคลาสนจะมเมทธอด print ทมการเขยนทบ Override แตมลกษณะการท างานทแตกตางกน ขนอยกบวาขณะทโปรแกรมท างาน (Run-Time) โปรแกรมจะมการเรยกใชงานเมทธอดจากคลาสไหน ภายในคลาส Tester มการสรางเมทธอด test ซงประกาศเปนแบบสถต หมายถงเมทธอดทถกสรางขนมาอตโนมตเมอมการรนโปรแกรม ซงเมทธอด test นรบคาทเปนออบเจกต A เปนพารามเตอร ซงจะเหนวาเมอมการเรยกใชเมทธอด test ภายใน main เราสามารถสงคาพารามเตอรเปน new A ซงจะไปเรยกเมทธอด print ทอยใน A หรอ new B กจะเรยก test ทอยใน B ได

// Overriding.java

class A {

void print ( ) {

for (int i = 0; i < 10; i++)

System.out.println (“In A ” + i);

}

}

class B extends A {

void print ( ) {

for (int i = 0; i < 20; i++)

System.out.println (“In B “ + i);

}

}

class Tester {

static void test (A v){

v.print ();

}

public static void main (String args []) {

test (new A ());

test (new B ());

}

}

ภาษา Delphi มกลไกในการเชอม (Bind) ซงเปนการเรยกใชเมทธอดทงแบบ Static Binding และ Late Binding ซงอยางหลงนสามารถน ามาใชส าหรบเมทธอดทเปนแบบเวอรชวล (Virtual method) ซงจะใชหนวยความจ ามากกวาการท างานเปนแบบไดนามก Dynamic method แตจะสามารถท างานไดรวดเรวกวา เพราะจะมการโหลด Virtual method เขาสหนวยความจ า ซงในขนตอนการโหลดนจะมการสรางตาราง VMT (Virtual Method Table) เพออางองไปยงต าแหนงของเวอรชวลเมทธอดทถกตอง และขอมลในตาราง VMT จะมการท าอนเดกซเพอใหคนหาเมทธอดทตองการเรยกใชไดอยางรวดเรว ท าสงผลใหการเรยกใช Virtual method จะเรวกวาการเรยกใช

Page 103: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

103

Dynamic method การก าหนดใหเมทธอดมชนดเปน Virtual method หรอ Static method จะใช directive Virtual และ Dynamic ตามหลงการประกาศเมทธอดในขนตอนของการสรางคลาส

ลกษณะของ Dynamic method จะคลายกบ Virtual method คอ จะมการเชอม (bind) การเรยกใชเมทธอด และเมทธอดทจะถกเรยกใช ในขณะทโปรแกรมท างาน แตแตกตางกนในสวนของรายละเอยดคอ Dynamic method จะถกโหลดเขาสหนวยความจ า เมอมการ เรยกใชเทานนและจะม การสรางตาราง DMT (Dynamic Method Table) ในการอางถงต าแหนงของ Dynamic method ทถกตอง ซงขอมลในตาราง DMT จะไมมการท าอนเดกซ ดงนนการคนหาจะท าแบบ linear จะท าใหคนหาชากวาการคนหาในตาราง VMT

type

TSomeThing = class(TCompoenent)

Private

// Private declarations

Protected

Procedure DoThis ; Virtual;

Procedure DoThisAlso; Dynamic;

Public

// Public declarations

Published

// Published declarations

End;

นอกจากนในภาษา C# ยงมคณสมบตพเศษส าหรบการท า Dynamic Binding นนกคอการท า

เมทธอด Reference Binding โดยมลกษณะการท างานแบบ Pointer ไปยงเมทธอดเรยกวา Delegate คอการทจดเกบเมทธอดในรปของตวแปรทสามารถสงเปนคาพารามเตอรไปยงเมทธอดอนๆเพอเรยกใชงานเมทธอด Delegate น ตวอยางเชนกรณทเรามเมทธอดอย 2 เมทธอดส าหรบการก าหนดคา Name และ Surname ซงทง 2 เมทธอดนจรงแลวท างานในลกษณะเดยวกนคอการก าหนดคาพารามเตอรใหกบตวแปรทเปนคณสมบตของออบเจกต

public static string set_name(string name)

{

return "My Name is : " + name;

}

public static string set_surname(string surname)

{

return "My surname is : " + surname;

}

ซงหากออบเจกตทเราสรางขนนนจ าเปนตองมการก าหนดคาคณสมบตในทกตวและแตละเมทธอดกมลกษณะการท างานทเหมอนหรอคลายกนเพยงแตเปลยนชนดของตวแปรไปดงนนเราสามารถใชคณสมบตของ Delegate ไดดวยก าหนดเปนเมทธอด Delegate ดงน

public delegate string SetString(string str);

Page 104: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

104

โดยในทนเราจะมองวา SetString เปนเมทธอดทเปรยบเสมอนเปนตวแปรหนง และวธการเรยกใชงาน

public static work(SetString x, string str)

{

string sentence;

sentence = x(str);

Console.WriteLine(sentence);

}

ซงจากตวอยางนจะเหนวาตวแปร x จะท าหนาทในการแมบเมทธอด set_name() และ set_surname() ใหอตโนมตขนอยกบพารามเตอร (SetString delegate เมทธอด) ทสงเขามา และโปรแกรมจะท า การเลอกใหเองวาจะเรยกใชเมทธอดตวไหน โดยลกษณะการท างานนจะเหนวา delegate เหมอนกบการรบและสงคา Pointer ไปยงเมทธอด SetString นนเอง และตวอยางตอไปนเปนตวอยางของโปรแกรม DelegateExample ทใชตวอยางโดยภาษา C#

using System;

public class DelegateExample

{

public delegate string SetString(string str);

public static string set_name(string name)

{

return "My Name is : " + name;

}

public static string set_surname(string name)

{

return "My Surname is : " + name;

}

public static void work(SetString x, string str)

{

string sentence;

sentence = x(str);

Console.WriteLine(sentence);

}

public static void Main()

{

SetString x = new SetString(set_name);

work(x, "John");

x = new SetString(set_surname);

work(x, "Doe");

}

}

Page 105: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

105

5.3.8 อนเตอรเฟส (Interface)

อนเตอรเฟสจดไดวาเปนคลาสอกประเภทหนง ซงมลกษณะพเศษคอ เมทธอดทประกาศภายในอนเตอรเฟสนจะเปน Abstract Method และ Member จะเปนคาคงทเทานน ภาษาเชงวตถในปจจบนมการสนบสนนการท างานของอนเตอรเฟส แตอาจจะตางกนทลกษณะการน าไปใชงาน ตวอยางเชน ในภาษาจาวา และภาษา Delphi ทไมสนบสนนแนวคดของการสบทอดหลายชด (Multiple Inheritance) เหมอนภาษา C++ ทงนเพราะคลาสของเมทธอดตางๆ ทตองการประมวลผลตองปรากฏในชวงของการคอมไพล เพอทคอมไพเลอรสามารถตรวจสอบ Signature ของเมทธอดได อยางไรกตามโดยหลกการทวๆไป ของการเทคโนโลยเชงวตถอนญาตใหหรอสนบสนนหลกการของการสบทอดหลายชด ภาษาจาวาประยกตหลกการของการสบทอดหลายชดโดยใชหลกการของตวเชอมประสานหรออนเตอรเฟส (Interface) ทจรงแลวจาวาใชอนเตอรเฟสเปนตวเชอมประสานระหวางคลาสทไมมความสมพนธกน แตตองการทจะตดตอหรอสงขอมลใหกบอกออบเจกตของอกคลาสหนง หรอตองการบรการของอกออบเจกต ดงนนอนเตอรเฟสจงเปรยบเสมอนเปนชองทางในการตดตอสอสารกบอกออบเจกตหนง เพอใหอกออบเจกตประมวลผลบางอยางทตวเองไมสามารถกระท าได

การสรางอนเตอรเฟสจะคลายกบการสรางคลาส แตวธในการระบหรอการประกาศจะแตกตางกนกบการสรางคลาสและอนเตอรเฟสจะมขอจ ากดมากกวาของคลาสเพม ดงน

1. อนเตอรเฟสไมสามารถมตวแปรอนสแตนซ แตสามารถมตวแปรคาคงทได การประกาศตวแปรคาคงทไมจ าเปนตองประกาศเปน public static final เพราะคอมไพเลอรจะเตมใหโดยอตโนมต

2. อนเตอรเฟสไมสามารถมตวแปรอนสแตนซ แตสามารถมตวแปรคาคงทได การประกาศตวแปรคาคงทไมจ าเปนตองประกาศเปน public static final เพราะคอมไพเลอรจะเตมใหโดยอตโนมต

3. เมทธอดตางๆ ในอนเตอรเฟสจะเปนเมทธอดแบบเชงนามกลาวคอ มแตชอตวแปรทสงหรอ ผานคา คาทสงคนซงจะแตกตางจากคลาสแบบเชงนามทเมทธอดในคลาสแบบเชงนามไมจ าเปนตองเปน เมทธอดแบบเชงนามอยางเดยว

4. เมทธอดตางๆ ตองม access modifier เปน public อยางเดยวเทานน

นอกจากนอนเตอรเฟสในภาษาจาวายงสามารถสบทอดจากอนเตอรเฟสอนได เชน ซเปอรอนเตอรเฟส และสามารถเพมไดหลายๆ อนเตอรเฟสในคราวเดยวกน ซงจะแตกตางจาก คลาสทสบทอดไดเพยงคลาสเดยวเทานน การสบทอดของอนเตอรเฟสจะใชหลกการเดยวกบการสบทอดของคลาส แตสงทสบทอดไดคอตวแปรคาคงทและเมทธอดเชงนามเทานน ตวอยางของการสรางอนเตอรเฟสในภาษาจาวา ดงน

Page 106: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

106

public abstract interface MainInterface

{

public abstract void interface1();

public abstract void interface2();

}

class X implements MainInterface

{

public void interface1()

{

System.out.println(“use interface 1”);

}

public void interface2()

{

System.out.println(“use interface 2”);

}

}

public class TestInterface

{

public static void main(String[] args)

{

System.out.println(“Show how to use interface”);

X obj = new X();

Obj.interface2();

MainInterface obj1 = new X();

Obj1.Interface1();

}

}

อนเตอรเฟสเปนการก าหนดกลมของ abstract method และ property ในลกษณะของ

template คลายกบ abstract คลาส เพอใหคลาสอนสามารถอมพลเมนทไดอยางสอดคลอง สาเหตหนงท Delphi จ าเปนตองมอนเตอรเฟสเนองจาก Delphi จะมลกษณะเปน Single Inheritance คอสามารถสบสกลจากคลาสตนแบบไดเพยงคลาสเดยวเทานน (เหมอนกบภาษา Java และภาษา C#) ดงนนจงใชกลไกของอนเตอรเฟสมาชวยในการท า Multiple Inheritance

ใน Delphi สามารถสบทอดจากซเปอรคลาสไดเพยงคลาสเดยว แตสามารถอมพลเมนทไดหลายๆ อนเตอรเฟสการประกาศคลาสอนเตอรเฟสสามารถท าไดดงตวอยางน

type

IVehicle = Interface(IInterface) //An interface definition

// Properties and their functions

function GetAge : Integer;

function GetDateOfBirth : Date;

property age : Integer read GetAge;

property dateOfBirth : Date read GetDateOfBirth;

// Non-property function function GetValue : Currency;

end;

หลงจากนนกท าการสรางคลาสทท าการอมพลเมนทอนเตอรเฟสน เชน TCar = Class (TInterfacedObject, IVehicle)

Page 107: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

107

ในทนคลาส TCar ท าหนาทอมพลเมนท interface Ivehicle โดยท TinterfacedObject เปนคลาสทถกสรางไวแลวใน Delphi ซงประกอบดวยเมทธอดทจ าเปนส าหรบการ implement interface

5.4 การพฒนาโปรแกรมเชงวตถดวยภาษาแบบวชวลโปรแกรมมง

ปจจบนการพฒนาโปรแกรมเชงวตถโดยภาษาทสนบสนนการท างานท างานแบบวชวล เชนภาษา C++, C#, Java และ Delphi ตางลวนมซอฟตแวรทสนบสนนการพฒนาทเปน Intergrated Development Environment: IDE และตางกสนบสนนการท างานทเปนแบบ Visual Programming โดยทเครองมอเหลานมการเชอมโยงกบไลบราร ซงในปจจบน ภาษาตางๆเหลานลวนแลวแตมคลงไลบราร ขนาดใหญไมวาจะเปน Microsoft Foundary Class (MFC), .NET Framework Class Library ของบรษทไมโครซอฟท หรอไลบราร Visual Component Library (VCL) ของบรษทบอรแลนด หรอแมกระทงของภาษาจาวาเองกมคลาสไลบราร Java Class Library ขนาดใหญ ซงเปนคลาสทสรางมาพรอมกบภาษาโดยคายตางๆ ซงการเรยกใชคลาสตางๆเหลานจะกระท าผาน Application Programming Interface (API) ทมมาใหโดยภาษาหรอเจาของผลตภณฑนนๆ

ภาษา เครองมอส าหรบพฒนา (IDE) คลาสไลบราร Visual Basic Microsoft Visual Studio .NET Framework Class Library Visual C++ Microsoft Visual Studio Microsoft Foundation Class (MFC),

.NET Framework Class Library Visual C# Microsoft Visual Studio .NET Framework Class Library Visual Delphi Borland Delphi Visual Component Library (VCL) Borland C++ Borland C++ Visual Component Library (VCL) Java Netbean, Eclipse Java Package

ซงประโยชนทนกพฒนาโปรแกรมจะไดรบกคอคลงไลบรารขนาดใหญทถกพฒนาขนมาใหเรยกใชได โดยเปนลกษณะของ Build-in Library หรอในบางครงเรยกวา Package หรอ Component ซงไลบรารเหลานถกพฒนาขนมาโดยอาศยแนวคดของของการพฒนาซอฟตแวรเชงวตถทไดกลางมาในขางตน และคลาสตางๆเหลานกคอออบเจกตตางๆทสามารถน ามาเชอมโยงและใชงานรวมกบซอฟตแวรทเราพฒนา

using System;

using System.Net.Sockets;

public class AsynchIOServer

{

public static void Main()

{

TCPListener tcpListener = new TCPListener(10);

tcpListener.Start();

Socket socketForClient = tcpListener.Accept();

Page 108: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

108

if (socketForClient.Connected())

{

Console.WriteLine("Client connected");

}

socketForClient.Close();

Console.WriteLine("Exiting...");

}

}

จากตวอยางตอไปน จะเหนวาการพฒนาโปรแกรมทเกยวของกบการเชอมตอกบระบบเครอขาย

โดยอาศย Socket Programming สามารถท าไดโดยเรยกใชไลบรารทเกยวของกบซอกเกจ using System.Net.Sockets ซงท าใหเราสามารถสรางออบเจกต TCPListerner และเรยกใชงานเมทธอด Start, Accept ได โดยในหลกการมองวาออบเจกต TCPListener เปนกลองด าทจะรบและสงคาอะไรออกมาจากกลองด านบาง ซงการเรยกใชงานผพฒนาไมจ าเปนตองเขาใจถงรายละเอยดการท างานภายใน แตในภาพรวมซงจะตองรวาเมทธอดทมบรการใหเรยกใชภายในออบเจกต TCPListener มอะไรบาง และท างานอะไร โดยผพฒนาจ าเปนตองศกษาถงเอกสาร API ทประกอบกบไลบราร โดยทเพมความรวดเรวในการพฒนาโปรแกรมในปจจบนเปนอยางมาก ดงตวอยาง API ตอไปน System.Net.Sockets Namespace4 .NET Framework 1.1

The System.Net.Sockets namespace provides a managed implementation of the Windows Sockets (Winsock) interface for

developers who need to tightly control access to the network.

The TCPClient, TCPListener, and UDPClient classes encapsulate the details of creating TCP and UDP connections to the

Internet.

Class Description

IrDAClient Provides connection information, and creates client connection objects for opening and closing connections to a server.

IrDADeviceInfo Provides information about available servers and ports obtained by the client during a discovery query.

IrDAListener Places a socket in a listening state to monitor connections from a specified service or network address.

LingerOption Specifies whether a Socket will remain connected after a call to Close and the length of time it will remain connected, if data remains to be sent.

MulticastOption Contains IPAddress values used for joining and dropping multicast groups.

NetworkStream Provides the underlying stream of data for network access.

4

Online Source: http://msdn.microsoft.com/en-us/library/system.net.sockets(v=vs.71).aspx

Page 109: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

109

Socket Implements the Berkeley sockets interface.

SocketException The exception that is thrown when a socket error occurs.

TcpClient Provides client connections for TCP network services.

TcpListener Listens for connections from TCP network clients.

UdpClient Provides User Datagram Protocol (UDP) network services.

การพฒนาซอฟตแวรโดยอาศยเครองมอ Visual Programming ท าใหเราสามารถพฒนาโปรแกรม

ไดอยางรวดเรวโดยอาศยออบเจกตตางๆทมมาในคลาสไลบรารของภาษา และเครองมอ IDE และสงทส าคญตอการพฒนาซอฟตแวรในปจจบนกคอ การพฒนาสวนการเชอมตอกบผใชงาน (User Interface: UI) ซงภาษาทเปนวชวลโปรแกรมในปจจบนจะมไลบรารทใหนกพฒนาสามารถสรางหนาจอในลกษณะทเปน Windows Form และกลมของออบเจกตทใชในการสราง UI เรยกวาคอนโทรล (Control) ทสามารถน ามาพฒนาเปนโปรแกรมตนแบบ Prototype ใหแกผใชงานเพอใหไดเหนผลลพธสดทาย (Program Output) ของโปรแกรมไดอยางรวดเรว ตวอยางเชน ในภาษา C# จะมไลบราร System.Windows.Forms และภาษาจาวาจะมไลบราร javax.swing ทงฟอรมและคอนโทรล ตางกถกพฒนาใหเปนออบเจกตตางๆ บางออบเจกตกจะมคณสมบตเปนคอนเทนเนอร (Container) คอสามารถทจะบรรจคอนโทรลอนๆเชนออบเจกต Forms, GroupBox, FlowLayOut, ToolStrip, StatusStrip, ToolStripContainer เปนตน

การสรางออบเจกตทเปน UI ขนมาใชงานโดยสวนใหญจะเรมตนจากการสรางฟอรมเพอส าหรบเปน

หนาแรกเรยกวา Startup Form โดยทฟอรมนมกจะเปนฟอรมเปลา โดยทยงไมมคอนโทรลใดๆท างานซงเมอมการสรางฟอรมแรกขนมา โปรแกรม IDE จะท าการสรางโปรแกรมโคดทจ าเปน โดยทผใชงานไมจ าเปนตองเขยนโคดเหลานเอง ดงตวอยางตอนซงโปรแกรม IDE เขยนขนใหเองอตโนมต

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

Page 110: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

110

{

}

}

}

5.4.1 การสรางคอนโทรลออบเจกต การสรางคอนโทรลออบเจกตในภาษาทสนบสนนการท างานแบบวชวลนน สามารถกระท าไดโดยอาศยเครองมอการออกแบบ Design Tool ใน IDE ซงสวนใหญจะเปนลกษณะของการลากและวาง ซงในเครองมอเหลานจะมคอนโทรลตางๆใหเลอกใชเพอส าหรบสรางสวนทเชอมตอกบผใช UI พนฐาน เชน Pointer, Button, CheckBox, CheckListBox, ComboBox, DateTimePicker, Label, LinkLabel, ListBox, ListView, TextBox เปนตน เมอท าการลากและวางคอนโทรลเหลานลงบนฟอรม โปรแกรมกจะท าการสรางโคดขนมาในสวนตางๆของโปรแกรมใหอตโนมตเชนเดยวกน ดงตวอยางตอไปนซงใชภาษา C# เปนการแสดงใหเหนถงโปรแกรมโคดเมอมการลากคอนโทรล Button มาใชงาน โดยทจะปรากฏโปรแกรมโคด ดงน

private System.Windows.Forms.Button button1;

private void button1_Click(object sender, EventArgs e)

{

}

ซงโปรแกรมโคดทสรางขนมาใหน เรยกวาหลกการของ Code Behind เนองจากคอนโทรลตางๆทสรางขนมาจะมโคดซอนอยเบองหลง ซงจะผกตดอยกบเหตการณทจะเกดขน เรยกวา Event ซงการพฒนาโปรแกรมทเปน Windows Base Application นนในบางครงเราจะเรยกวาการพฒนาโปรแกรมแบบ Event-Driven Programming เนองจากภายในโปรแกรมหนงๆ อาจจะมคอนโทรลอยหลายๆตวดวยกน โดยทผใชงานอาจจะใชเมาสคลกเพอทจะเลอกท างานกบคอนโทรลใดคอนโทรลหนง ซงกจะเกดเหตการณ (Event) หรอ Action ส าหรบคอนโทรลนน ตวอยางเชน เมอผใชเลอกปม “Open File” โปรแกรมกจะใหผใชเลอกชอไฟลทตองการเปดอาน หรอเมอผใชคลกเลอกรายงานเพลงใน ListBox กจะท าการเปดเพลงทผใชเลอก เปนตน ซงการพฒนาโปรแกรมทเปนลกษณะ Event-Driven นนจะตางจากการพฒนาโปรแกรมสมยกอนทเปนลกษณะ Top-Down คอโปรแกรมจะมการท างานทเปนล าดบขนตอน แต Event-Driven นน โปรแกรมท างานแบบไมเปนล าดบ และเหตการณทเกดขนกจะขนอยกบวาผใชจะเลอกคอนโทรลตวไหนเพอท างาน

การท างานของโปรแกรมแบบ Event-Driven ดงกลาว จะเหนวาในตวอยางทแสดง เมอท าการสรางคอนโทรลใดๆกตามขนมาในฟอรม โปรแกรม IDE จะท าการสรางโคดขนมา 2 สวนไดแก 1)เพอการเฝาฟงเหตการณใดๆทจะเกดขนกบคอนโทรลนนๆ เราเรยกวา “Event” ซงนนไดแกเหตการณทผใช น าเมาสไปคลก เรยกวา OnClick หรอเหตการณอนๆเชน OnClick, OnDoubleClick, OnMouseOver … ส าหรบในภาษา C# และ Visual Basic โคดสวนนไดถกซอนเอาไว แตกรณทเปน C++ หรอ Java จะตองสรางเปน

Page 111: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

111

อนเตอรเฟส Listener ขนมาเพอท าการเฝาฟงเหตการณเอง และ 2) เพอท าการจดการเมอมเหตการณนนๆเกดขน เรยกวาการ “Handle Event” ซงจากตวอยางการเขยน Event-Handle ในภาษาจาวาดงตอไปน

JButton myButton = new JButton("Click Me");

myButton.addActionListener(

new ActionListener() {

public void actionPerformed(ActionEvent e) {

doAction(); // code perform when button is pressed

}

}

);

จากตวอยางนจะเหนวาการเฝาฟงเหตการณทจะเกดขนกบปม นนจะตองท าการลงทะเบยน Register คอนโทรล Button นกอนดวยค าสง addActionListener และกรณทมเหตการณการกดปมเกดขนกจะ Handle โดยค าสง actionPerformed เพอท างานในสวนทผพฒนาตองการท าอะไรเมอผใชกดปมน 5.4.2 คณสมบตของคอนโทรลออบเจกต

เมอท าการสรางคอนโทรลโดยวธการลากและวางดงตวอยางขางตน โปรแกรม IDE จะท าการสรางโคดหลายอยางเพอเปนโคดส าหรบการตงตนในแกนกพฒนา เชน การเรยกใชไลบรารทจ าเปน การประกาศตวแปร การสรางอนสแตนซ การสรางการเฝาฟงเหตการณ และการจดการเมอมเหตการณเกดขน โดยทผพฒนาเพยงจะตองค านงถงโปรแกรมโคดทเกยวของกบเนองานเทานน จากตวอยาง

private void button1_Click(object sender, EventArgs e)

{

MessageBox.Show(“You click Button 1”);

}

จะเปนการ Handle เมอมการกดปม Button กจะท าการแสดงค าวา “You click Button 1” ซงในสวนนเปนสวนทผใชงานจะตองท าการเขยนโคดทเกยวของขนมาเอง แตนนกหมายความวาโปรแกรม IDE ไดเขยนโปรแกรมโคดสวนใหญใหกบทางผพฒนาแลว

การประกาศตวแปร button1 จากออบเจกต Button ซงเปนหนงออบเจกตทอยภายในโครงสรางของ Class Hierarchy ซงเราจะเหนจากล าดบชนของการสบทอดสบสกล ดงนนการอางองสามารถอางจาก Full Path ไดเปน System.Windows.Forms.Button ซงมการประกาศใช Access Modifier เปนแบบสวนตว Private ดงน private System.Windows.Forms.Button button1; โดยท Button นนเปนออบเจกตทมคณสมบตสองสวน Data Member เชนส ชอ ต าแหนง ขนาด ฯลฯ และ Behavior (Event) เชน Click, DragDrop, KeyPress … ดงทไดกลาวไปในบทกอนหนา ซงสามารถปรบแกไขไดโดยผานทาง User Interface ทผชวยเหลอผพฒนาเชนกน

Page 112: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

112

บทท 6 – การตรวจจบขอผดพลาด ซอฟตแวรทถกพฒนาขนมานนตางมวตถประสงคการท างานอยางชดเจน ซงการท างานจะตองม

ฟงกชนการท างานทถกตองตามขอบเขตทก าหนดใหท างานแลว ซอฟตแวรควรจะตองเปนซอฟตแวรทมคณภาพดวย ซงยอมหมายถงการทซอฟตแวรมคณสมบตตางๆ ดงตอไปน

มฟงกชนการท างานทครบถวนตามวตถประสงคและ ตามความตองการของผใชงาน (User Requirement)

มหนาจอและการเรยกใชงานเพอใหงายตอการใชงาน (User Friendly) โดยมการเอออ านวยความสะดวกในการเขาถงขอมลหรอฟงกชนงานโดยผานเมนและค าสงตางๆ หรอแมกระทงค าสงลด (Short Cut Key) ตางๆ

มการประมวลผลขอมลทถกตองแมนย า (Accuracy) มระยะเวลาในการตอบสนองการท างาน (User Response Time) ทเหมาะสม

ทงนโดยสวนใหญแลวซอฟตแวรจะตองมการท างานรวมกบผใชงาน ซงในความหมายคอการตอบสนองในลกษณะทเปนการโตตอบ (Interactive) และการแสดงขอความโตตอบถงสงทซอฟตแวรก าลงปฏบต เชน การรบอนพท การแสดงสถานะของการประมวลผล และเมอเสรจสนการประมวลผล หรอแมกระทงกรณทมขอผดพลาดใดๆกตามเกดขนกบซอฟตแวร ซงจะท าใหผใชงานไดเขาใจถงกระบวนการและสถานะการท างานของซอฟตแวรดวย

ส าหรบการพฒนาโปรแกรมเชงวตถ การดกจบขอผดพลาดของโปรแกรมถอวาเปนสวนทส าคญ เนองจากขอผดพลาดทเกดจากการพฒนาโปรแกรมมโอกาสเกดขนไดเสมอ ดงนนเมอมขอผดพลาดเกดขนระบบจะท าการโยนขอผดพลาดออกมา (Raise Exception) ท าใหโปรแกรมหยดท างาน หรอสงผลกระทบตอระบบปฏบตการ และเครองคอมพวเตอรโดยรวม ซงโดยทวไป การพฒนาโปรแกรมตางๆลวนแตมโอกาสทจะเกดขอผดพลาดได ซงขอผดพลาดเหลานอาจจะเกดขนจากตวโปรแกรมเองทท างานไดไมถกตอง หรอขอผดพลาดทเกดจากตวผใชงานเอง ซงปญหาตางๆเหลานควรจะตองมการปองกน หรอมการดกจบขอผดพลาดกอนทจะมขอผดพลาดเกดขน หรออกลกษณะหนงคอการแกไขปญหาในกรณทมขอผดพลาดเกดขนแลว ส าหรบในการพฒนาโปรแกรม ขอผดพลาดนนสามารถเกดขนไดอย 3 ลกษณะดวยกนคอ

1. ขอผดพลาดทเกดขณะคอมไพลโปรแกรม (Compile Error) ซงเปนขอผดพลาดทเกดขนขณะทท าการคอมไพลโปรแกรมจากโปรแกรมใหเปนภาษาเครอง โดยโปรแกรมทท าหนาทเปนคอมไพลเลอรจะท าหนาทในสวนน ซงโปรแกรมจะท าการตรวจสอบโคดของเราวาเปนไปตามไวยากรณภาษา (Syntax) ทเขยนหรอไม ซงในแตละภาษาทเขยนอาจจะมไวยากรณทแตกตางกน เชน การเขยน เมทธอด Calculate ในภาษา C#

Page 113: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

113

public int Calculate (int a, int b)

{

return (a + b);

}

จะเหนไดวาการประกาศชอหรอโครงสรางของเมทธอดนนจะตองประกอบดวย modifier ทเปน public หรอ private และการรเทรนคากลบ ตามดวยชอของเมทธอด และการใชเครองหมายปกกาส าหรบเปดปดบลอกของเมทธอด หรอการใชเครองหมาย ‘;’ เพอบงบอกถงจดสนสดของชดค าสง (Statement) ซงหากเราเขยนสวนใดสวนหนงผดพลาดไปโปรแกรมคอมไพลเลอรกจะแจงใหกบเราทราบวาโปรแกรมมขอผดพลาดในสวนใด หรอผดพลาดในบรรทดใดของโปรแกรม ซงในบางครงเราเรยกขอผดพลาดในลกษณะนวาเปน Syntax Error เนองจากเปนขอผดพลาดจากไวยากรณของโปรแกรมภาษา

2. ขอผดพลาดทเกดขนขณะทโปรแกรมท างาน (Runtime Error) เปนขอผดพลาดทเกดขนในระหวางทโปรแกรมมการท างานอย ซงในลกษณะนโปรแกรมนนผานการคอมไพลมาอยางถกตอง คอเขยนโปรแกรมไดอยางถกตองตามหลกไวยากรณ แตขณะทโปรแกรมท างานอาจจะยงมขอผดพลาดเกดขนได ซงขอผดพลาดนมกจะเกดจากการทโปรแกรมท างานไดไมครอบคลมลกษณะตางๆทก าหนดไวตงแตแรก ตวอยางเชน การรบคาอนพทจากผใชงานทอาจจะรบเปนตวเลข ตวอกษร หรอขอความเปนตน โดยทโปรแกรมอาจจะไมไดมการคาดการณไวลวงหนา ซงกรณนโปรแกรมจะตองมการแปลงคาชนดของขอมลไปเปนประเภทตางๆกอนทจะน าไปค านวณหรอประมวลผล ส าหรบขอผดพลาดทเกดขนขณะทโปรแกรมท างานนนอาจจะกอใหเกดผลขอผดพลาดทเลกนอย ทแสดงขอความของขอผดพลาดและโปรแกรมยงสามารถท างานตอไปน จนกระทงถงในระดบทโปรแกรมเกดขอผดพลาดทรายแรงจนท าใหโปรแกรมหยดจนไมสามารถท างานตอไปได (Program Crash) เชนการใชหนวยความจ ามากเกนไป (Out-of-Memory) หรอไมไดจองหนวยความจ า (Memory Allocation Error)

3. ขอผดพลาดทเกดขนจากตรรกะของโปรแกรม (Logic Error) ซงขอผดพลาดประเภทนอาจจะดเหมอนวาโปรแกรมสามารถท างานไดตามปกต แตเมอโปรแกรมท างานแลว โปรแกรมไมสามารถท างานหรอประมวลผลไดอยางถกตอง ตวอยางจากขอผดพลาดในลกษณะนเชนการใชเครองหมายตรรกะ AND, OR, NOT และการใชเครองหมายเปรยบเทยบส าหรบเงอนไขตางๆ เชน

if ((a < 10) && (a > 20))

{

//statement

}

ซงในกรณน โอกาสท a จะมคานอยกวา 10 และมคามากกวา 20 ในขณะเดยวกนแทบจะเปนไปไมไดเลย ซงกจะท าใหชดค าสงไมเกดการท างาน

Page 114: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

114

6.1 หลกการท างานเมอโปรแกรมมขอผดพลาด ในการตรวจสอบขอผดพลาดนนส าหรบภาษาในเชงวตถจะขนอยกบคณสมบตของภาษา แตการ

ตรวจจบขอผดพลาดจะมอย 2 ลกษณะคอการตรวจสอบ (Checked) กบการไมตรวจสอบ (Unchecked Exception) ขอผดพลาด ในภาษาจาวานนจะสนบสนนการท างานทง 2 แบบ แตตวอยางบางภาษาเชนภาษา C# จะสนบสนนเพยงแคแบบไมตรวจสอบ (Unchecked) เพยงอยางเดยว ส าหรบขอแตกตางระหวางการตรวจสอบขอผดพลาดทง 2 ประเภทนคอ

1) วธการตรวจเชค (Checked exception) จะตองใชวธการดกจบอยางชดเจน หรอใชวธการเผยแพรขอผดพลาดโดยใช try-catch-finally

2) วธการแบบไมตรวจเชค (Unchecked exception) ซงเปนลกษณะของการเผยแพรขอผดพลาด (Propagate) เปนการสงตอขอผดพลาดนนๆออกไปยงเมทธอดทเรยกใช

โดยหลกการท างานของโปรแกรมนนจะตองท างานอยบนระบบปฏบตการ ดงเชนโปรแกรมจาวา จะตองท างานอยบน JVM (Java Virtual Machine) อกทหนงซงสามารถมองเปนเลเยอรไดดงน

รป 6.1 ล าดบชนการท างานของซอฟตแวรบน Java Virtual Machine

ปจจบนระบบปฏบตการจะมความสามารถรองรบการท างานแบบ Multi-Tasking โดยแบงโปรแกรมทท างานเปนแบบโพรเซส (Process) ซงในแตละโพรเซสอาจจะมโพรเซสยอยภายในไดอกดวย ทเรยกวาเทรด (Thread) โดยหลกการของการแบงโปรแกรมเปนแบบโพรเซสน จะท าใหหลายๆโปรแกรมสามารถท างานและประมวลผลไดพรอมกน (โดยการจดการของระบบปฏบตการทอาศยหนวยประมวลผล 1 หนวยหรอมากกวากได) ส าหรบโปรแกรมทพฒนาขนมากเชนเดยวกน จะถกระบบปฏบตการมองวาเปนโพร เซสหนงๆ จากตวอยางจะเหนไดวาโปรแกรมท างานในอยบน JVM และ JVM ท างานอยบนระบบปฏบตการอกชนหนง ลกษณะของการดกจบขอผดพลาดจะมการท างานคอการดกจบในตวโปรแกรมเปนอนดบแรกกอน แตหากโปรแกรมไมมการดกจบกจะสงตอมายง JVM และหากไมเชนนนแลวกจะเปนการดกจบในระดบของระบบปฏบตการในลกษณะทเปนทอดๆไป

Software Application

Java Virtual Machine (JVM)

Operating System

Page 115: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

115

วธการดกจบขอผดพลาดของโปรแกรมทมกจะนยมท ากนกคอการปองกนขอผดพลาดทอาจจะเกดขนกอนการท างานอยางใดอยางหนงโดยอาศยเงอนไขทท าการตรวจสอบเชน ค าสง if … then หรอ switch case … ซงเปนวธทไดรบความนยม แตอยางไรกตามวธนเหมาะส าหรบกรณทเรารลวงหนาวาจะมขอผดพลาดอะไรเกดขนบาง เชนกรณทคาอนพทจะเกนคาทก าหนดหรอจะมตวหารดวยตวเลขศนยเปนตน แตส าหรบกรณทมเหตการณทไมสามารถคาดการณไดลวงหนา ซงมกจะเกดในขณะทโปรแกรมท างาน (Runtime) โปรแกรมควรจะตองมการดกจบขอผดพลาดเหลานดวย

โดยหลกการท างานของโปรแกรมทเปนออบเจกต โปรแกรมจะท างานอยบนเฟรมเวรกของภาษานนๆ เชนภาษาจาวาจะท างานอยบน Java Virtual Machine และโปรแกรมทอยในตระกลดอทเนทของไมโครซอฟทกจะท างานอยบน .NET Framework ซงจะมคณสมบตในการดกฟงขอผดพลาดตางๆทอาจจะเกดขน โดยเฟรมเวรกเหลานมหลกการท างานของออบเจกตตางๆจะถกสรางขนมาเพอสบทอดจากคลาส Throwable ดงตวอยางโครงสรางของคลาส และจากทไดอธบายไปกอนหนาทวาทกออบเจกตทสรางขน จะสบทอดจากคลาสออบเจกต ซงคลาสเหลานในเชงของเทคโนโลยการพฒนาโปรแกรมเชงวตถจะมความสามารถในการสรางตวดกขอผดพลาด (Raise Error Exception) ขนมาทงสน ซงชนดขอผดพลาดเหลานจะขนอยชนดของขอผดพลาด ซงจะเปนลกษณะของการโยน (Throw) ขอผดพลาดออกมาจากการท างานผานขนตอนการเรยก ใชงานเมทธอด (Method Caller) ซงจากตวอยางของโครงสรางเมทธอดทประกาศไวลวงหนา (Forward Declaration) ดงตอไปน public static Class forName(String className) throws ClassNotFoundException

public Object newInstance() throws InstantiationException, IllegalAccessException

จากตวอยาง การเรยกเมทธอด forName ในภาษาจาวาเพอทจะท าการสรางคลาสส าหรบ className ใ ห ม ข น ม า จ ะ เ ห น ไ ด ว า เ ม ท ธ อ ด น จ ะ ท า ก า ร ส ร า ง ข อ ผ ด พ ล า ด ช อ ว า ClassNotFoundException ซงเปนขอผดพลาดทใชส าหรบการดกจบกรณทหาคลาสนนๆไมพบ หรอเ ชนเด ยวก นก บ เมทธอดส าหรบสร าง อ นสแตนซ ใหมซ ง กจ ะม ก ารด กจ บ ขอผดพลาด ชอ วา InstantiationException และ IllegalAccessException ออกมาจากเมทธอดกรณทมขอผดพลาดใดๆกตามเกดขนขณะทมการเรยกใชงานเมทธอด5

6.2 ขอผดพลาด Error Exception เกดขนไดอยางไร ส าหรบการพฒนาโปรแกรมเชงวตถนน โดยสวนใหญแลวเราจะเปนผทเรยกใชคลาสและเมทธอดทมอยในคลาสไลบรารทมมาใหใน Packages ในภาษาจาวา หรอ .NET Framework ส าหรบภาษาในตระกลไมโครซอฟท และ Visual Control Language (VCL) ส าหรบภาษา Delphi ซงเปนไลบรารมาตราฐานทมาพรอมกบคอมไพเลอรของแตละภาษา โดยทโครงสรางการออกแบบของคลาสและวธการพฒนาคลาสเหลาน

5

ส าหรบเอกสารทใชเปนคมอส าหรบการอางองวาโครงสรางการท างานของเมทธอดและขอผดพลาดทจะมการดกจบนนสามารถอางองไดจาก Java Class Library

Reference

Page 116: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

116

จะมการตรวจสอบขอผดพลาดทอาจจะเกดขนในระหวางทมการเรยกใชคลาสหรอเมทธอดนนๆ โดยทโปรแกรมโคดจะท าการดกจบขอผดพลาดและท าการสราง Error Exception ขนมา โดยมวตถประสงคหลกคอเพอปองกนไมใหเกดขอผดพลาดทอาจจะเกดขนระหวางการเรยกใชเมทธอดกอใหเกดความเสยหายหรอสงผลกระทบตอโปรแกรมโดยรวม ซงความผดพลาดในบางประเภทอาจมผลเฉพาะโปรแกรมทก าลงท างานอยเทานน หรออาจจะมความรนแรงตอระบบปฏบตการ ท าใหเครองคอมพวเตอรหยดท างาน ท าใหตองมการปดและเปดเครองคอมพวเตอรใหม

public class Point

{

public void setLatitude(double lat)

{

if ((lat < -90) || (lat > 90))

// is it within the range

{

throw new IllegalArgumentException();

}

else

{

latitude = lat;

}

} }

จากตวอยางนจะเหนวาโปรแกรมจะท าการตรวจสอบวาคาพารามเตอรทรบเขามานนอยนอกเหนอชวงขอมลนอยกวา -90 หรอมากกวา 90 หากไมอยในชวงดงกลาวกใหหยดการท างาน โดยจะ Raise Error ขอผดพลาดชอวา IllegalArgumentException และโยน (Throw) กลบไปยงเมทธอดทเรยก (Caller Method) setLatitude น ส าหรบ IllegalArgumentException จรงแลวเปนคลาสทท าหนาทในการแสดงขอผดพลาด ซงจดไดวาเปนคลาสประเภทหนงทมคณสมบตพเศษ คอคลาสทอยในกลมนจะตองมการสบทอดมาจากคลาสแมคอคลาส java.lang.Exception ซงสบทอดมาจากคลาส java.lang.Throwable อกชนหนง

Page 117: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

117

รป 6.2 ผงโครงสรางของคลาส java.lang.Throwable

การทเมทธอด Caller ท าการเรยกใชเมทธอดใดๆทสามารถ Raise Error หรอโยน Error ออกมา ซงภาษาทสนบสนนการท างานเชงวตถจะบงคบใหเมทธอดทน าเอาคลาสเหลานไปใชจะตองท าการดกจบขอผดพลาดเหลานเมอมการเรยกใชงานเมทธอดเสยกอน ไมเชนนนแลวโปรแกรมจะไมสามารถคอมไพลได

6.3 วธการดกจบขอผดพลาดของโปรแกรม ส าหรบการดกจบขอผดพลาดของโปรแกรมทสามารถโยนขอผดพลาด (Throw Error Exception) จะตองอาศยวธการ try .. catch เปนการบอกใหแกโปรแกรมวาใหท าการลอง (try) ท าค าสงตอไปน (Action Statement) ด และหากวามขอผดพลาดเกดขน ใหท าการดกจบ (catch) และกระโดดไปท างานในสวนของ catch statement เพอท าการจดการ (handle) กบขอผดพลาดทโยนออกมาจากเมทธอดทเรยกใชงาน เพอไมใหเกดผลกระทบตอโปรแกรมโดยรวม

try { action statement …

action statement …

}catch(Throwable exception) {

Error handling statement …

}

จากตวอยางนจะเหนวาในบลอก try .. catch สามารถมค าสงทเรยกใชมากกวา 1 ค าสง ซงการตรวจจบขอผดพลาดนนสามารถทจะท าไดภายใน catch statement เดยว โดยในเบองตนเราจะตองรวาเมทธอดทเรยกใชจะท าการโยนขอผดพลาดใดกลบออกมา เพอใหสามารถดกจบไดอยางถกตอง แตส าหรบกรณทมการเรยกเมทธอดหลายเมทธอด หรอเมทธอดหนงๆสามารถโยนขอผดพลาดไดมากกวาหนง วธการ

Page 118: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

118

ตรวจจบขอผดพลาดสามารถท าไดในหลาย catch statement หรอ multiple catch statement ดงตอไปน

try { action statement …

action statement …

} catch (IOException e) {

Error handling statement …

} catch(FileNotFoundException e) {

Error handling statement …

}

จะเหนวาในการตรวจจบขอผดพลาด หากกรณทเปนขอผดพลาดทเกดจาก Input/Output กจะถกตรวจจบโดย IOException หรอกรณทเปนขอผดพลาดจากการหาไฟลไมเจอ กจะกระโดดไปในสวนของการตรวจจบใน FileNotFoundException ซงจะท าใหสามารถจดการกบขอผดพลาด (Handle) ไดอยางเหมาะสม

การดกจบขอผดพลาดในลกษณะนจ าเปนทจะตองรลวงหนาวาเมทธอดทก าลงเรยกใชอยนนจะโยนขอผดพลาดใดๆกลบออกมา ซงในเบองตนจะตองศกษาโครงสรางของเมทธอดและคลาสทเรยกใช แตในบางครงการตรวจจบขอผดพลาดเพอใหเกดความยดหยนเพยงพอในการทจะตรวจจบขอผดพลาดอนๆทนอกเหนอจากเมทธอดทเรยกใชก าหนดไว เราสามารถก าหนดใหสามารถดกจบขอผดพลาดทนอกเหนอไดโดยใช Exception ดงน

try { action statement …

action statement …

action statement … } catch (IOException e) {

Error handling statement …

} catch(FileNotFoundException e) {

Error handling statement …

} catch(Exception e) {

Error handling statement …

} จากโครงสรางของคลาสในรป 6.2 จะเหนไดวาโครงสรางของคลาส java.lang.Throwable นนมคลาส Exception ซงจะท าหนาทเปนคลาสแมของทกคลาสทท าหนาทในการดกจบและจดการขอผดพลาด (Exception Classes) ดงนนในการดกจบขอผดพลาดโดยทวไปแลวเราสามารถดกจบโดยใชคลาส Exception โดยตรงได เนองจากอาศยหลกการของ Polymorphism ทสามารถ Cascade จากคลาสลกไปยงคลาสแมไดการดกจบขอผดพลาดโดยใชค าสง try..catch นนเปนวธการทดกจบขอผดพลาดในลกษณะทใหโปรแกรมลองท างานบางอยาง และหากกรณทมขอผดพลาดใดๆกตาม โปรแกรมกจะกระโดดไปท างานในบลอกของค าสง catch ซงเปนการ Handle ขอผดพลาด โดยปกตจะแสดงขอความทอธบายใหผใชทราบถงขอผดพลาดวาเกดอะไรขน เพอใหผใชสามารถกลบไปแกไข ดงตวอยางพบขอผดพลาดกรณทผใชสงคา

Page 119: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

119

ตวอกษรเพอทจะท าการแปลงเปนตวเลข กจะเปนการบอกผใชงานวาตวอกษรทสงมานนไมสามารถแปลงเปนตวเลขได เปนตน

public int convert(String s)

{

int result = 0; try

{ result=Integer.parseInt(s);

}

catch (NumberFormatException e)

{ System.out.println(e + “Unable to convert to number”);

} }

การท างานของโปรแกรมทอยในบลอก try..catch สวนใหญมกจะเปนค าสงทมมากกวา 1 ค าสงท างานอยางตอเนองกน เพอท างานอยางเปนล าดบขนตอน เชนเราอาจจะก าหนดใหค าสงท างาน

1. ท าการเปดไฟลและอานขอมลทอยในไฟล 2. ท าการเชอมตอกบระบบเครอขาย 3. ท าการสงขอมลผานทางเครอขาย

ซงหากค าสงทง 3 ค าสงทท าการเสรจสนสมบรณแลวกจะตองท าการปดไฟล และปดการเชอมตอกบระบบเครอขาย แตหากกรณทมขอผดพลาดเกดขนจากค าสงใดค าสงหนง โปรแกรมกจะกระโดดไปท างานทบลอกของค าสง catch นนๆทนท ซงกรณเชนนจะท าใหโปรแกรมท างานไมตอเนอง และภายในบลอก catch กจะจดการเฉพาะค าสงทพบปญหาเทานน ไมไดท าการจดการกบค าสงหรอการจบการท างาน (Process Clean-up) อยางสมบรณ ดงนนเราจะจดการปญหาในลกษณะนโดยอาศย finally บลอก

try {

} catch {

} catch {

} finally {

}

โดย finally บลอกมลกษณะการท างานคอ finally จะถกท างานทกครงทมการท าค าสงภายใน

try..catch โดยไมวาจะเปนค าสง try หรอ catch ทท างานเสรจสนแลว โปรแกรมกจะท างานในสวนของ finally เปนบลอกสดทายเสมอ ซงจะเหนไดวาประโยชนของ finally คอจะถกเรยกใชงานเสมอไมวาจะเปนในกรณทโปรแกรมท างานปกต หรอมขอผดพลาดเกดขน ดงนนจากตวอยางปญหาดงกลาวขางตนเราจง

Page 120: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

120

สามารถใช finally เพอจดการกบค าสงทจ าเปนตองท างานในภาวะปกตหรอเมอมขอผดพลาดเกดขน ดงตวอยางตอไปนทใช finally บลอกเพอท าการปดไฟล ปดการเชอมตอกบระบบเครอขาย

try { Open file to read

Open network connection

Send information over the network

} catch {

Handle error from I/O or reading from file

} catch {

Handle error from opening network connection

} finally {

Close file

Close network connection

}

6.4 การจดการ Exception ในเมทธอดแบบซอนทบ (Overriding Method)

เราไดอธบายหลกการท างานของเมทธอดแบบซอนทบในบทท 4 ในกรณทมการสบทอดจากคลาสแม โดยทชอของเมดธอดในคลาสลกม Signature เหมอนกนกบคลาสแม เราจะเรยกเมทธอดนวาเปน Override Method ส าหรบในกรณเมทธอดทอยในคลาสแมมการโยน Exception ขอผดพลาดขนมา เมทธอดทถกสรางแบบซอนทบจะตองถกออกแบบใหมการโยน Exception ขอผดพลาดนดวย ดงตวอยางเชน Superclass

methodA() throws ExceptionX, ExceptionY

methodB() throws ExceptionZ

SubClass

methodA() throws ExceptionX, ExceptionY

methodB() throws ExceptionZ

คลาส Superclass มเมทธอด A ซงโยน Exception X และ Y ออกมา ดงนน เมอมเมทธอด Override

method ในคลาสลกกจ าเปนตองมการโยน Exception X และ Y ดวยเชนกน โดยเงอนไขของการท า Exception ส าหรบเมทธอดแบบซอนทบมดงตอไปน

1. เมทธอดแบบซอนทบจะตองโยนขอผดพลาดเหมอนกนกบคลาสทท าการ Override เชน ExceptionX, ExceptionY

2. เมทธอดแบบซอนทบจะตองโยนขอผดพลาดตวใดตวหนง เหมอนกนกบคลาสทท าการ Override เชน ExceptionX หรอ ExceptionY

6.5 วธการ Handle Exception โดยวธการเผยแพรขอผดพลาด การจดการกบขอผดพลาดทสรางขนโดยเมทธอดทเรยกใชงานโดยวธการ try..catch นนเปนวธหนงท

สามารถท าได และท าใหผใชงานสามารถรถงขอผดพลาดทเกดขนในทนทเมอมการเรยกค าสงในเมทธอด แต

Page 121: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

121

อกวธหนงทสามารถใชจดการกบขอผดพลาด Exception โดยวธการเผยแพรตอ จากตวอยางตอไปนเมอมการอานคาอนพทจากผใชงานผานทาง Console โดยปกตแลวจะตองเรยกภายในบลอก try..catch

try

{

BufferedReader stdin = new BufferedReader (new InputStreamReader

(System.in));

} catch (IOException e)

{

//catch error from BufferedReader

}

แตในกรณนโปรแกรมจะไมแสดงขอผดพลาดใดๆเกดขนจากคอมไพเลอรเนองจากเม ทธอด getUserInput ท าการเผยแพรขอผดพลาด IOException ตอออกไปยงเมดธอดทเรยก getUserInput อกตอหนง ซงกรณนคอเมทธอด Main กจะตองท าการจดการกบขอผดพลาดโดยใช try..catch เมอเรยกใช getUserInput

public String getUserInput () throws IOException

{

… BufferedReader stdin = new BufferedReader (new InputStreamReader

(System.in)); … String s = stdin.readLine( );

return s;

}

public static void main(String [] argv)

{

try {

getUserInput();

catch (IOException e) {

System.out.println(“Unable to read an input”);

}

}

ประโยชนของการท าเผยแพร Error Propagation คอการทเราไมจ าเปนตองท าการ Handle

ขอผดพลาดโดยวธ try..catch กบทกค าสงทเราตองการเรยกใช แตการเผยแพร Exception นนเปนการปลอยใหการดกจบขอผดพลาดนนเปนหนาทของเมทธอดตอๆไปทจะมาเรยกเมทธอดของเราอกทหนง ซงกเปนวธทมขอดคอลดความยงยากในการทจะตองมาคอยดกจบขอผดพลาด และความซ าซอนของโปรแกรม แตขอเสยกคอการดกจบขอผดพลาดและการแสดงขอความใหแกผใชงานอาจจะไมชดเจน และขาดรายละเอยดของขอผดพลาดไป เนองจากเปนการมองโปรแกรมทรวมเอาค าสง (ซงแตละค าสงอาจจะกอใหเกดขอผดพลาดได) ในลกษณะทเปนกลองด า (Blackbox) ดงตวอยางในคลาส Network ตอไปน ซงเปนการสรางการเชอมตอกบระบบเครอขาย หากมขอผดพลาดใดๆเกดขนกจะท าการโยนขอผดพลาด Exception กลบไปยง Caller Methor ซงเปนเมทธอดทเรยกใช OpenNetworkConnnection กจะรเพยงแความขอผดพลาดเกดขนจากการเชอมตอกบเครอขายแตอาจจะไมรวาเกดขนจากสาเหตใด

Page 122: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

122

public class Network { public void OpenNetworkConnection() throws Exception

{

Socket s = new Socket("SERVER", 50000);

ObjectOutputStream oos;

oos = new ObjectOutputStream(s.getOutputStream());

oos.writeObject(Locale.getDefault());

InputStreamReader isr;

isr = new InputStreamReader(s.getInputStream());

BufferedReader br = new BufferedReader(isr);

System.out.println(br.readLine());

}

public void Connect()

{

try

{

OpenNetworkConection();

} catch (Exception e) {

System.out.printlin(“Unable to connect to SERVER”);

}

}

}

6.6 การสราง Exception ส าหรบดกจบขอผดพลาดของโปรแกรมขนมาใชงานเอง

จากทผานมาเราจะพบวาการดกจบขอผดพลาดนนจะใชขอผดพลาดท อยในกลมของ Exception Class ทมลกษณะเปน Build-in Class และเมทธอดทสรางมาใหกบคอมไพลเลอรทอยในรปของแพคเกจตางๆนนจะมการดกจบขอผดพลาดและโยน Exception ตางๆออกมาอยแลว โดยทเมอเราเรยกใชงานเมทธอดเหลานน เราอาจจะตองศกษาคมอจากเอกสารอางองออนไลนของคอมไพลเลอรกอน เพอดวาเมทธอดทเราก าลงเรยกใชจะโยน Exception อะไรออกมา เพอจะไดท าการ try…catch ไดอยางถกตอง

ส าหรบกรณทตองการสรางคลาสทท าการโยน Exception เองนนสามารถท าไดโดยค าสง throw คลาสทท าหนาท Exception ทมมากบคอมไพลเลอร (Build-in Exception) โดยวธการสรางเปนอนสแตนซของคลาสขนมาใหม ดงตวอยางตอไปน

if (ErrorOccur)

{ throw new Exception(“message description” +

localVariable.toString() );

}

ซงกรณนเราสามารถเลอกวาคลาส Exception ไหนมความเหมาะสมกบขอผดพลาดของโปรแกรมทเราพฒนาอยางไร ดงกรณเชน

Page 123: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

123

คลาสทจดการขอผดพลาด ค าอธบาย IOException ไมสามารถอานคาอนพทจากไฟลได FileNotFoundException ไมสามารถหาไฟลทตองการได DataFormatException ไมสามารถแปลงเปนชนดของขอมลทตองการได ClassNotFound ไมสามารถพบคลาสทตองการได SQLException ไมสามารถท างานกบค าสง SQL ทก าหนดได FontFormatException ไมสามารถท างานกบรปแบบฟอนตทตองการได

หรอ Exception อนๆทเกยวของกบขอผดพลาดในเรองตางๆ ซงในภาษาจาวา หรอดอทเนตของ

ไมโครซอฟทเองจะมคลาสทเกยวของกบ Exception ใหเลอกอยมากมาย แตอยางไรกตามในบางครงคลาส Exception ทมมาใหนนอาจจะยงไมสอความหมาย หรอไมสามารถแสดงขอความตามทเราตองการใชไดจรง ซงกรณแบบนเรากอาจจะจ าเปนตองมการสรางคลาสทท าหนาทเปน Error Exception ของเราขนมาเอง ซงวธการกคอ

1. สรางคลาสของเราเองขนมาใหม โดยตงชอคลาสดวยชอทสอความหมาย และควรลงทายดวยค าวา …Exception เชน MyOwnErrorException และจะตองใหคลาสนท าการสบทอดจากคลาสแม Exception (ดงทไดกลาวมาขางตนแลววาทกคลาสทท าหนาทในการดกจบขอผดพลาดจะตองสบทอดจากคลาสแม Exception)

2. ภายในคลาสใหมน ใหท าการ Override คอนสตรกเตอรของคลาส Exception โดยการเรยกผาน ค าสง super(…) ซงจะตองมอยางนอย 2 คอนสตรกเตอร ไดแก

super() { … } //default constructor

super(String str) { … } //constructor with variable

ในลกษณะทเปนการโอเวอรโหลดคอนสตรกเตอร เพอเปนการก าหนดคาเรมตนใหแกคลาส ดงตวอยางทเปน Error Exception ส าหรบการตรวจสอบการท างานของสแตก (Stack)

public class FullStackException extends Exception

{ public FullStackException()

{ super();

}

public FullStackException (String message)

{

super(messsage); }

}

public class EmptyStackException extends Exception

{

public EmptyStackException() {

Page 124: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

124

super(); }

public EmptyStackException (String message) {

super(messsage); }

}

และเมอเราท าการเขยนโปรแกรมโคดเพอท าการน าขอมลเขาสสแตก (push) หรอการน าออกจาก

สแตก (pop) จะเหนวากรณทพบขอผดพลาดทอาจจะเกดขนในกรณทสแตกเตมหรอวางเปลา โปรแกรมจะท าการโยนขอผดพลาด (Throw Error) โดยเปนคลาส Error ทเราท าการสรางขนมาเอง

public class Stack

{

public void push(Object o) throw FullStackException

{ if (isFull()) {

throw new FullStackException(); } else { // else push the value

}

}

public Object pop() throw EmptyStackException {

if (isEmpty()) { throw new EmptyStackException();

} else {

// else pop the value from stack

}

} }

ดงนนเมอเวลาทเราเรยกใชเมทธอด push หรอเมทธอด pop เราจ าเปนตองเรยกใชภายในบลอก try..catch และท าการดกจบขอผดพลาด FullStackException หรอ EmptyStackException ตามท เมทธอด push หรอ pop ไดมการโยนออกมา

public static void main(String [] argv)

{

Stack s = new Stack();

try {

s.push( obj ); } catch (FulllStackException e) {};

try {

Object obj = s.pop();

} catch (EmptyStackException e) {}; }

Page 125: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

125

บรรณานกรม Abraham Silberschatz , Henry F. Korth , S. Sudarshan. Database System Concepts, Third

Edition, Mc Graw Hill, 1997. Bertrand Meyer, Object Success, Prentice Hall 1995. Bertrand Meyer, Object-Oriented Software Construction, 2nd Edition, Prentice-Hall

International Series. Cay Horstmann, Computing Concepts with Java Essentials. 3rd Edition. John Wiley & Sons,

Inc., 2003 Dan Osier, Steve Grobman and Steve Baston, Teach Yourself Delphi 2 in 21 days, SAMS

Publishing, 1996 Dennis Kafura. Object-Oriented Software Design & Construction with JAVA Web Enhanced.

Prentice Hall, 2000. Eric Herrmann. Teach Yourself CGI Programming with Perl in a week. Sams.Net Publishing,

1996. Grady Booch, Object-Oriented Analysis and Design with Applications, 2nd Edition, Addison

Wiley. Jamie Jaworski, Java 2 Certification, New Riders Publishing, 1999. Jesse Liberty. Teach Yourself C++ in 21 Days. 3rd Edition. Sams Publishing, 1999. Matt Weisfeld, The Object-Oriented Thought Process, 3rd Edition, Pearson Education, 2008 P. J. Plauger, The Standard C Library, Prentice Hall, 1992. S. Monk., J.A. Mariani., B. Elgalal. and H. Campbill. 1996. Migration from relational to

object-oriented database. Information and software Technology. Vol.38, pp. 467-475.

Syngress Media, Inc. Sun Certified Programmer for Java 2 Study Guide, 2nd Edition. Osborne McGraw-Hill, 2001.

W.Meng., A.Kamada. and Y.Chang. 1995. Transformation of Relational Schemas to Object-Oriented Schemas: IEEE.

Xavier Pacheco, Steve Teixeira, Delphi 2 Developer’s Guide, SAMS Publishing, 1996

Page 126: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

126

ดชนศพท

Abstract Class and Abstract Method, 60

Aggregation, 74 Application Framework, 27 Association, 74 Class, 4, 5, 25, 26, 33, 37, 38, 39, 45,

47, 59, 60, 62, 63, 64, 65, 70, 74, 86, 90, 91, 92, 94, 100, 101, 102, 104, 110, 111, 115, 119, 126

Class Library, 26 Code reusability, 31 Code Reusability, 4, 20, 23, 28, 35,

36, 70 Component, 26 Composition, 74 Constructor, 5, 6, 52, 54, 55, 56, 57,

64, 94, 95, 96, 97 Data Encapsulation, 22, 77 Destructor, 55 Encapsulation, 5, 24, 35, 77, 78, 79,

80, 88, 98 Event-Driven Programming, 20, 34,

113 Final, 62 Framework, 27 Function, 24 Garbage Collection, 89

Inheritance, 5, 6, 21, 26, 35, 36, 67, 68, 69, 70, 101, 108, 109

Interface, 63 Library, 25 Message Passing, 5, 18, 36, 38, 43, 48 Module, 24 Multiple Inheritance, 71 Object Accessibility, 98 Object Destruction, 5, 50 Object States, 4, 44 Overloading, 56 Override Method, 61 Polymorphism, 5, 6, 22, 36, 43, 63,

66, 77, 82, 102, 103, 122 Unified Modeling Language, 38, 70 User Friendly Environment, 40 การเกบซอนขอมล, 22 การจดการกบหนวยงานจ า, 89 การซอนคณสมบตของออบเจกต, 77 การตรวจจบขอผดพลาด, 115 การท าลายออบเจกต, 50 การประกาศคาตวแปรของออบเจกต, 50 การสบทอด, 21 การสบสกลแบบหลายล าดบชน, 71 ความสมพนธระหวางออบเจกต, 72 คอนโทรลออบเจกต, 113 คอนสตคเตอร, 52 คณสมบตของออบเจกต, 32

Page 127: แนวคิดของการพัฒนาซอฟต์แวร์ ...myweb.cmu.ac.th/rattasit.s/CS204734/แนวคิด...แนวค ดของการพ ฒนาซอฟต

แนวคดของการพฒนาซอฟตแวรเชงวตถ

127

โครงสรางเปนแบบโมดล, 17 ชนดขอมลแบบนามธรรม, 30 ซอฟตแวรเชงคอมโพเนนท, 28 ดฟอลตคอนสตคเตอร, 54 ดสตคเตอร, 55 ประเภทขอมลแบบนามธรรม, 32 โปรแกรมเชงวตถ, 18 โปรแกรมแบบมโครงสราง, 16 โปรแกรมแบบไมมโครงสราง, 15 โปรแกรมแบบวชวล, 18 พฤตกรรมของออบเจกต, 32 โพซเยอร, 16 ฟงกชน, 8, 10, 16, 17, 18, 19, 21, 22,

23, 24, 25, 28, 29, 31, 35, 36, 46, 47, 53, 56, 57, 58, 60, 71, 80, 82, 84, 89, 97, 115

ไฟนอล, 62 ภาษาเครอง, 8, 9, 10, 11, 14, 15, 25,

30, 89, 116 ภาษาแอสเซมบล, 10, 11, 13 เมทธอดแบบซอนทบ, 61 วชวลโปรแกรมมง, 110 เวอรชวลและแบบไดนามก, 104 สถานะของออบเจกต, 44 อนเตอรเฟส, 63 อนสแตนซของคลาส, 47 แอบสแตกคลาสและแอบสแตกเมทธอด,

60 โอเวอรโหลด, 56 โอเวอรโหลดคอนสตคเตอร, 57