CS313: Object-Oriented Programming
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ การเขียนโปรแกรมเชิงวัตถุ (Object Oriented Programming) เปนการเขียนโปรแกรมที่มองโปรแกรม ในรูปของวัตถุ จัดเปนแนวทางหนึ่งของการจัดระบบโปรแกรม โดยจะเนนที่แนวทางการออกแบบโปรแกรม ไมได เนนหนักเกีย่ วกับรายละเอียดของตัวดําเนินการแตละตัว การเขียนโปรแกรมเชิงวัตถุ มีจุดเดนที่สําคัญ คือ การ นําโปรแกรมกลับมาใชใหม 1.1 ปญหาที่เกิดกับการเขียนโปรแกรมเชิงโครงสราง โปรแกรมเชิงโครงสราง (structured programming) เปนลักษณะการออกแบบโปรแกรมที่ระบุถึงคําสั่ง และเนนทีล่ าดั ํ บของคําสั่ง การออกแบบโปรแกรมเชนนี้ไดรับความนิยมมากในชวงหลายปที่ผานมา ลักษณะ เดนประการหนึ่ง คือ เมือ่ โปรแกรมเริ่มมีขนาดใหญขึ้น จะมีการแบงโปรแกรมเปนโปรแกรมยอย (sub-program) ซึ่งไดแก ฟงกชั่น (function) โพรซีเยอร (procedure) หรือโมดูล (module) โดยทีแ่ ตละโปรแกรมยอยจะถูกนิยาม จุดประสงคไวอยางชัดเจน ปญหาทีเ่ กิดกับโปรแกรมเชิงโครงสราง มักเกิดกับโปรแกรมที่มีขนาดใหญและซับซอนมาก สาเหตุหลัก ประการหนึง่ มาจาก ความสัมพันธระหวางขอมูลของโปรแกรมหลักและโปรแกรมยอย โดยทั่วไปหากโปรแกรม หนึง่ ๆ ตองการที่จะใหขอมูลชุดหนึ่งสามารถถูกเขาถึงไดโดยทุกฟงกชั่น หรือโพรซีเยอรในโปรแกรมนั้น ขอมูลชุด นัน้ จะตองถูกประกาศเปนตัวแปรสวนกลาง (global variable) สวนตัวแปรที่ถูกประกาศไวภายใตโปรแกรมยอย หนึง่ ๆ จะสามารถถูกเรียกใชไดเฉพาะโปรแกรมยอยนั้นๆ โดยที่โปรแกรมยอยอื่นๆ ไมสามารถเขาถึงตัวแปรชุด นี้ได ตัวแปรสวนกลางมีทั้งขอดีและขอเสีย ขอดี คือ ทุกๆ สวนของโปรแกรมสามารถเรียกใชขอมูลชุดนี้ได ทําใหงา ยตอการจัดการ แตในทางตรงกันขาม หากผูเขียนโปรแกรมทําการเปลี่ยนแปลงหรือแกไขโครงสรางของ ขอมูลชุดนี้ ก็จะมีผลกระทบตอการทํางานของโปรแกรมตางๆ ที่เรียกใชขอมูลชุดนี้ดวย ปญหาอีกประการหนึ่งคือ เรื่องของชนิดขอมูล (data type) โดยทัว่ ไป ภาษาเชิงโครงสราง จะมีการ กําหนดชนิดขอมูลที่ตายตัว การสรางชนิดขอมูลใหมเพื่อใหสอดคลองกับโปรแกรมที่ออกแบบ ทําไดคอนขาง ยากและซับซอน 1.2 ลักษณะการโปรแกรมเชิงวัตถุ ปญหาตางๆ ทีเ่ กิดกับการเขียนโปรแกรมเชิงโครงสราง ไดถูกกําจัดไปโดยการเขียนโปรแกรมเชิงวัตถุ ลักษณะเดนของการเขียนโปรแกรมแบบนี้ คือการรวมขอมูลและโปรแกรมยอยที่ดําเนินการตอขอมูลชุดนั้นๆ เขา ไวเปนหนวยเดียวกันที่เรียกวา วัตถุเปาหมาย (object) ในสวนของการออกแบบโปรแกรมเชิงวัตถุ ผูออกแบบ จะตัง้ คําถามในลักษณะที่วา “จะแบงปญหาออกไปเปนวัตถุเปาหมายไดอยางไร” วัตถุเปาหมายในโปรแกรม 2/2545
1
CS313: Object-Oriented Programming
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ
อาจอยูใ นลักษณะของวัตถุในโลกที่เปนจริง หรือวัตถุในระบบคอมพิวเตอร ตอไปนี้เปนตัวอยางจํานวนหนึ่งเกี่ยว กับวัตถุเปาหมาย -
-
-
-
-
วัตถุเปาหมายเชิงกายภาพ (physical objects) ♦ รถยนต ในการจําลองการเคลื่อนตัวของจราจร ♦ สวนประกอบไฟฟา ในโปรแกรมการออกแบบวงจร ♦ ประเทศ ในการจําลองทางเศรษฐกิจ ♦ เครือ่ งบิน ในระบบการควบคุมการจราจรทางอากาศ สวนประกอบของสภาพแวดลอมที่เกี่ยวของกับผูใชคอมพิวเตอร (elements of the computer-user environment) ♦ วินโดว (window) ♦ เมนู (menu) ♦ วัตถุกราฟกส - เสน สี่เหลี่ยมมุมฉาก วงกลม (graphics object) โครงประกอบโปรแกรม ( data-storage constructs) ♦ customized arrays, stacks, linked list, binary trees การรวมกลุมขอมูล (collections of data) ♦ บัญชีรายการสินคา ♦ แฟมบุคลากร ♦ พจนานุกรม ชนิดขอมูลที่ผูใชนิยาม (user-defined data types) ♦ เวลา ♦ มุม ♦ จํานวนเชิงซอน ♦ จุดบนระนาบ สวนประกอบในเกมคอมพิวเตอร (components in computer games) ♦ ปศาจในเกมเขาวงกต ♦ ตําแหนงในเกมกระดาน ♦ สัตวในการจําลองทางนิเวศวิทยา
การจับคูก นั ระหวางวัตถุเปาหมายในโปรแกรม กับวัตถุของโลกที่เปนจริง ทําใหเกิดการรวมตัวของขอ มูลและการทํางานของโปรแกรมยอยเขาไวดวยกัน วัตถุเปาหมายที่เกิดขึ้นไดทําใหเกิดการปฏิวัติการออกแบบ โปรแกรม ซึ่งลักษณะการรวมตัวเชนนี้จะไมปรากฎในโปรแกรมเชิงโครงสราง
2/2545
2
CS313: Object-Oriented Programming
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ
1.3 คุณสมบัติของโปรแกรมเชิงวัตถุ จุดประสงคหลักของการโปรแกรมเชิงวัตถุคือ การนําซอฟตแวรกลับมาใชใหม (software reusability) ซึง่ สามารถทําได เนือ่ งจากวัตถุเปาหมายแตละตัวมีความเปนอิสระตอกัน การจัดการตางๆ สามารถทําไดงาย ขึน้ โดยไมมีผลกระทบตอวัตถุเปาหมายอื่นๆ 1.3.1
คลาสและวัตถุเปาหมาย (class and object)
คลาส (class) และวัตถุเปาหมาย (object) มีความสัมพันธซึ่งกันและกัน กลาวคือ คลาสจะเปนแม พิมพ (pattern) ของวัตถุเปาหมาย แตละคลาสจะถูกกําหนดคุณสมบัติ (attributes) และวิธีการ (method) วัตถุเปาหมายจะถูกสรางจากคลาส ดังนั้นอาจกลาวไดอีกนัยหนึ่งคือ คลาสคือกลุมของวัตถุเปาหมายที่มีคุณ สมบัติและวิธีการที่คลายคลึงกัน วัตถุเปาหมายที่มาจากคลาสเดียวกัน จะมีคุณสมบัติและ Class Human ความสามารถพื้นฐานที่เหมือนกัน แตอาจมีคุณลักษณะเฉพาะตัว ที่ Attributes แตกตางกัน โดยทั่วไปวัตถุเปาหมายหนึ่งๆ จะมี 3 องคประกอบ คือ name, birthday, height, - คุณลักษณะเฉพาะ (Identity) เชน ชื่อของวัตถุเปาหมาย weight, eye color - สถานะ (state) คาของคุณสมบัติ (attributes) จะเปนตัว Method / behavior กําหนดสถานะใหกับวัตถุเปาหมายนั้นๆ walk - ความสามารถ (operations / behavior) วิธกี ารของวัตถุ eat เปาหมายแตละตัวจะเปนตัวเปลี่ยนสถานะของวัตถุเปาหมายนั้นๆ grow reproduce
1.3.2
แนวความคิดหลักของโปรแกรมเชิงวัตถุ ♦ การซอนขอมูล (encapsulation) ♦ การสืบทอด (inheritance) ♦ การเปลี่ยนรูป (polymorphism)
1.3.2.1 การซอนขอมูล (encapsulation) เปนการสรางขอบเขตการมองเห็นใหกับวัตถุเปาหมาย ทําใหสามารถขจัดปญหาเกี่ยวกับเรื่องตัวแปร สวนกลาง (global variable) ลงไปได การกําหนดขอบเขตขึ้นอยูกับความสัมพันธระหวางคลาส ซึ่งในโปรแกรม เชิงวัตถุมีความสัมพันธ 2 แบบ คือ 1. “ ..is a.. ” เชน class A is a class B หมายถึง คลาส A มีคณ ุ สมบัติและวิธีการทุกอยางเหมือน คลาส B แต คลาส B อาจไมมีคุณสมบัติทุกอยางที่คลาส A มี 2/2545
3
CS313: Object-Oriented Programming
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ
Class A Class B attributes Class B is class A with attributes
attributes
attributes
ตัวอยาง “is a” relationship a square is a rectangle that has equal sides 2. “..has a..” เชน class A has a class B หมายถึง คลาส A มีคลาส B เปนสวนประกอบ Class A
attributes Class B
attributes
Class A has class B
ตัวอยาง “has a” relationship every car has a steering wheel every radio has speaker(s)
2/2545
4
CS313: Object-Oriented Programming
บทที่ 1: แนะนําการเขียนโปรแกรมเชิงวัตถุ
1.3.2.2 การสืบทอด (inheritance) การสืบทอดเปนกระบวนการในการกําหนดคลาสหนึ่ง จากอีกคลาสหนึ่ง เชน คลาส A สืบทอดจาก คลาส B นัน่ หมายถึงวา คลาส A จะใชคุณลักษณะทั่วไปของคลาส B รวมกัน ขณะเดียวกัน คลาส A อาจมีคุณ สมบัติเฉพาะตัวที่คลาส A ไมมี การสืบทอดสามารถชวยลดขนาดของโปรแกรมและเวลาที่ใชในการพัฒนาโปรแกรม เนื่องมาจากการ ใชขอ มูลรวมกันระหวางคลาสที่สืบทอดกันมา รวมทั้งเปนที่มาของการนําซอฟตแวรกลับมาใชใหมอีกดวย ซึ่งถือ เปนจุดประสงคหลักของการโปรแกรมเชิงวัตถุ Inheritance
A
Base class / super class
A
A B
C
A
E
D
Derived class / sub class
1.3.2.3 การเปลี่ยนรูป (polymorphism) ลักษณะการใชตัวดําเนินการ หรือฟงกชนั่ ทีแ่ ตกตางกัน โดยขึ้นอยูกับวาตัวดําเนินการนั้นกําลังทํางาน อยูกับอะไร ตัวอยางเชน “ + ” หมายถึง การบวก สําหรับตัวเลข แตหมายถึงการรวมขอความ สําหรับตัวอักขระ “ draw (10,20) ” หมายถึง การวาดวงกลมที่ coordinate (10,20) สําหรับวัตถุเปาหมายวงกลม แต ถาเปนวัตถุเปาหมายแบบสี่เหลี่ยม method นีจ้ ะหมายถึงการวาดรูปสี่เหลี่ยมที่ coordinate (10,20) บทสรุป การเขียนโปรแกรมเชิงวัตถุ เปนแนวทางหนึ่งในการจัดระบบโปรแกรม โดยจะเนนหนักเกี่ยวกับแนวทาง การออกแบบโปรแกรม ไมไดเนนหนักเกี่ยวกับรายละเอียดของตัวดําเนินการแตละตัว จุดประสงคหลักของการ ออกแบบโปรแกรมวิธีนี้คือ การนําซอฟตแวรกลับมาใชใหม ซึ่งจะสามารถลดเวลาในการพัฒนาโปรแกรมลงไปได มาก ในบทตอไป จะเปนการแนะนําการเขียนโปรแกรมเชิงวัตถุโดยใชภาษาจาวา (Java) ซึ่งเปนภาษาที่ถูก พัฒนาขึน้ มาเพื่อการเขียนโปรแกรมดวยวิธีนี้โดยเฉพาะ 2/2545
5