วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

แนวคิดเชิงวัตถุ (Object)



แนวคิดเชิงวัตถุ (Object)
         เป็นแนวคิดรูปแบบใหม่ที่นำมาใช้กันในปัจจุบัน เพื่อแก้ปัญหาดังกล่าวของการเขียนโปรแกรมแบบ Structure ถึงแม้รูปแบบการเขียนจะค่อนข้างยากและมีความซับซ้อน แต่จะส่งผลดีต่อการแก้ไขโปรแกรม
ในระยะยาว ซึ่งแนวคิดนี้จะแยกปัญหา หรือแยกระบบงานออกเป็นส่วนย่อยเช่นกัน เพื่อลดความซับซ้อนให้น้อยลง ส่วนย่อยหรือโปรแกรมย่อยที่ว่า เรียกว่า “Class” ซึ่งภาย Class จะสร้างตัวแทนขึ้นมาทำงานแทนตนเอง เรียกว่า “Object” ตัว Object นี้เองจะเป็นตัวที่เก็บข้อมูลต่าง ๆ รวมกันเอาไว้ให้เป็นวัตถุชิ้นเดียวกัน เพื่อให้ง่ายต่อการเรียกใช้งาน ง่ายต่อการแก้ไข (Modify) และง่ายต่อการนำกับมาใช้ใหม่ (Reuse) ของระบบในอนาคต

ข้อเสียของแนวคิดนี้คือ
          สำหรับบางภาษาที่ใช้ในการพัฒนาโปรแกรมเชิงวัตถุ อาจจำเป็นต้องประยุกต์ใช้กับฐานข้อมูลเชิงวัตถุซึ่งมีลักษณะที่แตกต่างไปจากฐานข้อมูลเชิงสัมพันธ์ อาจมีความยุ่งยากบ้างในการพัฒนาระบบและยังขาดแคลน Programmer

โปรแกรมภาษาจาวา
          จาวาพัฒนาจากแนวคิดการเขียนโปรแกรมเชิงวัตถุ (Object Oriented Programming:OOP) ซึ่งมีหลักการทำงานโดยอาศัยคลาส(Class) และอ็อบเจ็ค (Object) คลาสทำหน้าที่เป็นต้นแบบสำหรับจัดกลุ่ม (Group) อ็อบเจ็คเข้าไว้ด้วยกัน ส่วนอ็อบเจ็คเป็นตัวแปรชนิดหนึ่งของคลาสสร้างขึ้นเพื่อใช้เข้าถึงข้อมูลและเมธอด (Mothod) ภายในคลาส จาวายังสามารถจัดการกับโปรแกรมขนาดใหญ่ที่มีความซับซ้อนสูง รวมถึงมีความสามารถในการสืบทอดคลาส (Inheritance) โดยสามารถสืบทอดข้อมูลหรือคุณลักษณะทั้งหมดของคลาสแม่ (Super Class) สู่คลาสลูก(Sub Class) และคลาสลูกก็สามารถเขียนชุดคำสั่งพิเศษเพื่อเพิ่มเติมความสามารถได้
          นอกจากนี้ยังมีจุดเด่นในเรื่องของการเขียนโปรแกรมเพียงครั้งเดียวแล้วสามารถนำกลับมาใหม่ได้อีก (Reuseable) ทำให้ลดระยะเวลาในการเขียนโปรแกรม และลดการเขียนโค้ด (Code) ที่ซ้ำซ้อน
พร้อมกันนั้น สิ่งที่ทำให้จาวาแตกต่างจากภาษาเขียนโปรแกรมอื่น ๆ คือ ความสามารถของจาวาเวอชวลแมชชีน (Java Virtual Machine:JVM) ที่ทำหน้าที่เป็นตัวกลางในการแปลงไฟล์ดอทคลาส (.class) ให้สามารถนำไปใช้งานได้กับทุกแพลทฟอร์ม (Platform) โดยไม่ยึดติดอยู่กับระบบปฏิบัติการ เรียกได้ว่าเป็นการเขียนโปรแกรมเพียงครั้งเดียวและสามารถรัน (Run) ได้กับทุกระบบปฏิบัติการ(Multi-platform) ดังตัวอย่างในรูปที่ 1


รูปที่ 1 โครงสร้างการแปลโปรแกรม (Compile) ภาษาจาวา

         จากรูปที่ 1 เมื่อทำการเขียนโปรแกรมด้วยภาษาจาวาเป็นที่เรียบร้อยแล้ว จากนั้นสั่งบันทึกโปรแกรม(Save) ไฟล์ที่ได้จากการบันทึกจะมีส่วนขยายเป็นดอทจาวา (.java) เรียกไฟล์นี้ว่าไฟล์ต้นฉบับ โดยไฟล์นี้จะยังไม่สามารถทำงานได้ ต้องผ่านกระบวนการแปลภาษา (Compile) จากภาษาระดับสูง (High-level language) ให้เป็นภาษาเครื่อง โดยจะแปลโปรแกรมด้วยคำสั่งจาวาซี (javac) จากนั้นจะได้ไฟล์ที่มีส่วนขยายเป็นดอทคลาส (.class) ซึ่งจะเก็บข้อมูลในลักษณะไบต์โค้ด (Bytecode) กล่าวคือพร้อมใช้งานแต่จะไม่สามารถแก้ไขข้อมูลที่อยู่ในไฟล์นี้ได้ หากต้องการแก้ไขจะต้องย้อนกลับไปแก้ไขที่ไฟล์ต้นฉบับแล้วสั่งแปลโปรแกรมซ้ำอีกครั้ง และสามารถสั่งรัน (Run) โปรแกรมเพื่อแสดงผลลัพธ์โดยใช้คำสั่งจาวา (java) ในการแปลโปรแกรมนั้นจาวาจะทำการแปลสองรอบ (Double Compile) การแปลในรอบที่สองจะถูกกระทำจาวาเวอชวลแมชชีน (Java Virtual Machine:JVM) จะทำการแปลงไฟล์ที่มีส่วนขยายดอทคลาส (.class) ให้สามารถนำไฟล์นั้นไปทำงานได้กับทุก ๆ ระบบปฏิบัติการ ซึ่งภาษาเขียนโปรแกรมอื่นไม่สามารถทำได้

เทคโนโลยีจาวา (Java Technology)
       ได้จัดกลุ่มการทำงานออกเป็น 3 กลุ่ม ได้แก่
        1) J2SE (Standard Edition) สำหรับใช้เขียนโปรแกรมบนเครื่องคอมพิวเตอร์ส่วนบุคคล (Personal Computer:PC) และเครื่องสถานีงานวิศวกรรม (Work Station)
        2) J2EE (Enterprise Edition) สำหรับทำงานบนเครื่องแม่ข่าย (Server) และรองรับการทำงานของ เซิร์ฟเลท (Servlets) เจเอสพี (JSP) และเอ็กซ์เอ็มแอล ( XML)
        3) J2ME (Micro Edition) สำหรับเขียนโปรแกรมบนอุปกรณ์ไร้สายที่มีหน่วยความจำจำกัด เช่น โทรศัพท์มือถือ(Mobile Phone) เครื่องปาล์ม(Palm) หรือเครื่องพีดีเอ (PDA)
ซึ่งการเริ่มศึกษาภาษาจาวานั้น แนะนำให้เริ่มจาก J2SE จากนั้นก็จะสามารถเรียนรู้ J2EE และ J2ME ได้ไม่ยากนัก นอกจากนี้การเลือกเขียนโปรแกรมด้วยภาษาจาวายังมีความสอดคล้องกับแนวทางการพัฒนาซอฟต์แวร์ในปัจจุบันอีกด้วย

แนวทางการพัฒนาซอฟต์แวร์
          จากที่กล่าวมาแล้วข้างต้น ว่าการเขียนโปรแกรมด้วยจาวานั้นใช้หลักการและแนวคิดเชิงวัตถุ(Object Oriented Programming:OOP) เป็นแนวคิดที่ใช้ในการพัฒนาซอฟต์แวร์ในปัจจุบัน มีความแตกต่างจากแนวคิดการเขียนโปรแกรมในอดีตที่ใช้แนวคิดของการโปรแกรมแบบโครงสร้าง (Structure programming) เรียกอีกชื่อหนึ่งว่า การเขียนโปรแกรมเชิงกระบวนการ (Procedure programming) แนวคิดแบบเดิมนี้จะส่งผลเสียต่อการพัฒนาโปรแกรมเมื่อระบบงานมีขนาดใหญ่และซับซ้อนมากขึ้น และไม่รองรับความสามารถของการนำโค้ดของระบบงานเดิมกลับมาใช้พัฒนาใหม่ (Reuseable) เมื่อเขียนชุดคำสั่งให้ขยายความสามารถเพิ่มเติม
จากข้อจำกัดของแนวคิดดังกล่าว ส่งผลให้แนวคิดของการเขียนโปรแกรมแบบเดิมสิ้นสุดลง และถูกแทนที่ด้วยแนวคิดแบบใหม่ที่เรียกว่า “การเขียนโปรแกรมเชิงวัตถุ” และเพื่อให้สอดคล้องกับแนวคิดแบบใหม่นี้ จึงได้มีการปรับเปลี่ยนวิธีในการออกแบบระบบสารสนเทศซึ่งแต่เดิม การออกแบบระบบทางด้านตรรกะ (Logic) จะใช้แผนภาพบริบท (Context Diagram) ในการแสดงภาพรวมการทำงานของระบบสารสนเทศดังกล่าว และใช้แผนภาพกระแสข้อมูล (Data Flow Diagrm:DFD) เพื่อแสดงการทำงานในกระบวนการย่อยในแต่ละส่วนของระบบ ซึ่งการใช้แผนภาพบริบทกับแผนภาพกระแสข้อมูลนี้อาจส่งผลเสียในส่วนที่ไม่สามารถทำให้นักพัฒนามองภาพฟังก์ชั่น (Function) การทำงานของระบบได้ชัดเจนอย่างที่ควรจะเป็น
สำหรับการเขียนโปรแกรมเชิงวัตถุนี้จะใช้หลักการออกแบบที่แตกต่างไปจากแบบเดิม เรียกว่า “การออกแบบโปรแกรมเชิงวัตถุ” ซึ่งยังคงใช้กระบวนการวิเคราะห์ระบบตามแบบของวัฎจักรการพัฒนาระบบ (System Development Life Cycle:SDLC) ที่ประกอบด้วย 4 ขั้นตอน ได้
         1) การวางแผน (Planing)
         2) การวิเคราะห์ระบบ (Analysis)
         3) การออกแบบระบบ (Design) และ
         4) การพัฒนาและนำระบบไปใช้งาน (Implementation) แต่กระบวนการออกแบบนั้นจะเปลี่ยนไปใช้วิธีการของยูเอ็มแอล (Unified Modeling Language:UML) ซึ่ง เป็นภาษาสัญลักษณ์รูปภาพมาตรฐานที่ใช้สำหรับสร้างแบบจำลองเชิงวัตถุ แทนที่การใช้แผนภาพบริบทกับแผนภาพกระแสข้อมูล ซึ่ง UML มีผู้คิดค้นร่วมกันหลายคนได้แก่ เกรดี้ บูช (Grady Booch) เจมส์ รัมบักช์(James Raumbaugh) และไอวา เจคอบสัน ( lvar Jacobson) โดยแผนภาพ (Diagram) ที่ใช้ในการออกแบบนั้นประกอบด้วย (Alan Dennis,Barbara Haley Wixom and Tegarden , 2001)
1) ยูสเคสไดอะแกรม (Use-Case diagram) เป็นแผนภาพที่แสดงความต้องการของผู้ใช้(User) และบรรยายความสามารถของระบบ ซึ่งแสดงภาพตัวอย่างของยูสเคสไดอะแกรมของระบบจัดทำใบนัดหมายระหว่างคนไข้กับแพทย์ ดังรูปที่ 2 2)คลาสไดอะแกรม (Class diagram) เป็นแผนภาพที่แสดงความสัมพันธ์ระหว่างคลาสกับอ๊อบเจ็ค 3) แอคทิวิตี้ไดอะแกรม (Activity diagram) เป็นแผนภาพที่แสดงขั้นตอนการทำงานของยูสเคสและกิจกรรมย่อยที่เกิดขึ้นในแต่ละขั้นตอน 4)สเตทชาร์ทไดอะแกรม (Statechart diagram) เป็นแผนภาพที่แสดงการเปลี่ยนแปลงสถานะต่าง ๆ ของอ๊อบเจ็ค 5)ซีเควนซ์ไดอะแกรม (Sequence diagram) เป็นแผนภาพที่ใช้บรรยายการทำงานระหว่างอ๊อบเจ็คย่อยของทุก ๆ ยูสเคส เพื่อให้ทราบว่าภายใน ยูสเคสนั้นมีเมธอด (Method) ใดบ้างและแสดงลำดับเวลาในการทำงาน 6) คะแลบบะเรชันไดอะแกรม (Collaboration diagram) จะคล้ายกับซีเควนซ์ไดอะแกรมแต่ไม่แสดงลำดับของเวลา แต่จะบอกลำดับการทำงานของแต่ละเมธอด (Method) และ 7)ดีพลอยเมนท์ไดอะแกรม
(Deployment diagram) ใช้ออกแบบแผนภาพที่เกี่ยวข้องกับฮาร์ดแวร์หรือทางด้านสถาปัตยกรรมของระบบ ทั้งด้านโครงสร้างและด้านเครือข่าย (Network Topology)ซึ่งในที่นี้อาจกล่าวได้ว่ายูสเคสไดอะแกรมและคลาสไดอะแกรม เป็นแผนภาพที่มีความสำคัญ จะขาดไม่ได้สำหรับการออกแบบโปรแกรมเชิงวัตถุ แต่ก็ไม่ได้หมายความว่าในการออกแบบระบบนั้น นักวิเคราะห์หรือนักพัฒนาจะวาดแผนภาพเพียง 2 แผนภาพนี้เท่านั้น ยังคงจำเป็นต้องวาดแผนภาพอื่นเพื่ออธิบายการทำงานของโปรแกรมและระบบควบคู่ไปด้วย



รูปที่ 2 ยูสเคสไดอะแกรมของระบบจัดทำใบนัดหมายคนไข้ 


          จากรูปที่ 2 แสดงแผนภาพการทำงานของการจัดทำใบนัดหมาย ซึ่งมีบุคคลที่เกี่ยวข้องกับระบบสามคนได้แก่ คนไข้ (Patient) แพทย์ (Doctor) และคนจัดทำใบนัดหมาย (Management) ในการทำงานของระบบนั้นได้จำแนกสถานะของคนไข้ออกเป็นสองสถานะ ได้แก่ คนไข้เก่า(Old patient) และคนไข้ใหม่ (New patient) ข้อมูลของคนไข้เหล่านี้จะเกี่ยวข้องกับยูสเคสในการสร้างใบนัดหมาย (Make appointment) โดยยูสเคสนี้ประกอบด้วยการทำงานสองส่วนย่อยได้แก่ ยูสเคสจัดทำใบนัดหมายสำหรับคนไข้เก่า (Make old patient appt) และทำใบนัดหมายสำหรับคนไข้ใหม่ (Make new patient appt) ดังนั้นเมื่อมีการนัดหมายเกิดขึ้นระหว่างแพทย์กับคนไข้ใหม่ ข้อมูลของคนไข้ใหม่จะต้องถูกส่งเข้ามาทำงานในกระบวนการของยูสเคสทำใบนัดหมายสำหรับคนไข้ใหม่ (Make new patient appt) ก่อน โดยคนไข้ทุกคนมีสิทธิ์เป็นคนไข้ใหม่ได้เพียงหนึ่งครั้งเท่านั้น จากนั้นก็จะเปลี่ยนสถานะของตนเองกลายเป็นคนไข้เก่า ส่วนคนไข้เก่าเมื่อมีการนัดหมายเกิดขึ้นก็จะส่งข้อมูลไปทำงานในกระบวนการของการจัดทำใบนัดหมายสำหรับคนไข้เก่า (Make old patient appt) โดยคนไข้เก่าสามารถมีการนัดหมายกับแพทย์ได้หลายครั้ง นอกจากนี้พบว่าในยูสเคสจัดทำใบนัดหมายสำหรับคนไข้เก่า (Make old patient appt) ยังได้แยกการทำงานย่อยออกไปอีก กล่าวคือ มีการจัดเรียงลำดับเวลาในการนัดหมายของคนไข้แต่ละรายในยูสเคสของการจัดลำดับรายการนัดหมาย (Make payment arrangements) ส่วน ยูสเคสสร้างใบนัดหมาย (Make appointment) ก็ได้แยกการทำงานย่อยออกไปอีกเพื่อให้สามารถปรับปรุงข้อมูลข่าวสารการนัดหมายของคนไข้ได้ เช่น การยกเลิกการนัดหมาย การเปลี่ยนแปลงวันและเวลานัดหมาย เป็นต้น โดยทำงานผ่านยูสเคสย่อยที่ชื่อว่าปรับปรุงข่าวสารคนไข้ (Update patient information)
คนจัดทำใบนัดหมาย (Management) จะมีหน้าที่รวบรวมข้อมูลข่าวสารเพื่อใช้ดำเนินการในการสร้างตารางนัดหมาย (Produce schedule information) จากนั้นนำข้อมูลในกระบวนการนี้ไปสร้างเป็นตารางการนัดหมาย (Manage schedule) ซึ่งก่อนที่จะสร้างเป็นตารางการนัดหมายได้นั้นต้องใช้ข้อมูลของแพทย์ (Record avilability) เป็นองค์ประกอบด้วยและแพทย์ (Doctor) ก็เป็นองค์ประกอบหนึ่งของยูสเคสไดอะแกรมที่สามารถเข้าใช้งานตารางการนัดหมายได้
          ดังนั้น เมื่อเลือกใช้แนวทางการออกแบบเชิงวัตถุเนื่องจากทำการเขียนด้วยโปรแกรมที่มีลักษณะเป็นการโปรแกรมเชิงวัตถุซึ่งสอดคล้องกับแนวทางการพัฒนาซอฟแวร์ในปัจจุบันอย่างเช่นภาษาจาวา ก็จำเป็นต้องเลือกเครื่องมือ (Tools) ที่มีความสามารถรองรับการทำงานดังกล่าว ในปัจจุบันพบว่าโปรแกรมแรชชันนัลโรซ (Rational Rose) ก็เป็นอีกหนึ่งเครื่องมือที่ใช้ออกแบบการโปรแกรมเชิงวัตถุ และเป็นโปรแกรมที่ได้รับความนิยมเป็นอย่างมาก

ไม่มีความคิดเห็น:

แสดงความคิดเห็น