การเขียนโปรแกรมเชิงวัตถุ

Download Report

Transcript การเขียนโปรแกรมเชิงวัตถุ

การเขียนโปรแกรมเชิง
วัตถุ
โปรแกรมภาษาเชิงวัตถุ (ObjectOriented Programming Language
: OOPL)
ภาษาเชงิ วัตถุนี้ได ้เริม
่ มีมาตัง้ แต่กอ
่ น
ปี ค.ศ. 1960 และภาษาทีเ่ ป็ นต ้นแบบใน
้ น
ขณะนั น
้ คือ ภาษา Simula
ทีใ่ ชเป็
หลัก การของ Object
ในการสร ้าง
โ ป ร แ ก ร ม ท า ใ ห ร้ ะ บ บ ใ น ก า ร เ ขี ย น
โปรแกรมมีลักษณะทีเ่ ข ้าใกล ้กับความคิด
มนุษย์ในโลกความเป็ นจริงมากขึน
้ ต่อมา
ภาษา Smalltalk ก็ได ้รับการพัฒนาเข ้า
มาแทนที่ Simula
ื่ ว่า Smalltalk
โดยทีม
่ ผ
ี ู ้คนมากมายทีเ่ ชอ
คือภาษาเชงิ วัตถุ Programming อย่าง
แท ้จริง ต่อมาภาษา C++ ก็ได ้เกิดขึน
้
่ กันภาษา C++
ด ้วยหลักการเชงิ วัตถุ เชน
เป็ นภาษาทีไ่ ด ้รับความนิยมค่อนข ้างมาก
้
มี ก ารน าไปใช งานอย่
า งกว า้ งขวางใน
วงการต่างๆ แต่ปัจจุบันภาษา Java ได ้
เข ้ามามีบทบาทมากขึน
้ และเหมือนว่าจะ
เข ้ามาแทนที่ C++
ในไม่ช า้ ด ้วย
ความสามารถหลายๆ อย่ า งของภาษา
ี ของ C++ ได ้
Java ทีส
่ ามารถลดข ้อเสย
Object Orientation
Object Orientation หมายถึง การใช ้
Object
เป็ นตัวหลักเพือ
่ การพิจารณา
ความเป็ นจริงต่างๆ ทีเ่ กิดขึน
้ ในโลกด ้วย
ก า ร ม อ ง ทุ ก ๆ ส ิ่ ง ใ น โ ล ก ใ ห เ้ ป็ น วั ต ถุ
ทั ง้ หมด และมองว่า กิจ กรรมทั ง้ หมดที่
ั พันธ์และ
เกิดขึน
้ ในโลกนีเ้ กิดจากความสม
ั พันธ์ระหว่างวัตถุ
ปฏิสม
การมองทุกสงิ่ ในโลกให ้เป็ นวัตถุ เป็ นการ
ท า ใ ห ้ ปั ญ ห า ที่ เ ป็ น น า ม ธ ร ร ม
(Abstraction) กลายมาเป็ นรูปธรรม เพือ
่
ท าให ค
้ อมพิ ว เตอร์ ส ามารถแก ป
้ ั ญหา
เหล่านั น
้ ได ้ด ้วยการพัฒนาเป็ นซอฟต์แวร์
แ ล ะ ก า ร พั ฒ น า ซ อ ฟ ต์ แ ว ร์ ท ี่ ม ี ก า ร น า
้
เทคโนโลยี Object มาใชงานก็
คอ
ื การ
โปรแกรมเชงิ วัตถุ (Object – Oriented
Programming) นั่นเอง
Object – Oriented Programming
(OOP)
หรือ การโปรแกรมเช งิ วัต ถุ
หมายถึง การเขียนโปรแกรมทีป
่ ระกอบไป
ด ้วยกลุม
่ ของ Object ซงึ่ แต่ละ Object จะ
ถูกจัดกลุม
่ อยูใ่ นรูปของคลาส (Class) โดย
ที่ แ ต่ ล ะ ค ล า ส ส า ม า ร ถ มี ก า ร ถ่ า ย ท อ ด
ลักษณะ (Inheritance) กันลงมาอย่างเป็ น
ลาดับ (Hierachy)
คุณสมบัตก
ิ ารเขียนโปรแกรม
เชิงวัตถุ
ื ทอด
1. ความสามารถในการสบ
(Inheritance)
่ น
2. ความสามารถในการเก็บซอ
(Encapsulation)
3. ความสามารถในการแปลงร่าง
(Polymorphism)
4. ความสามารถในการจัดการโครงสร ้าง
ข ้อมูลแบบเชงิ นาม (Abstract)
ข้อดีการพัฒนาโปรแกรมด้วย
ภาษาจาวา
• ความง่าย จาวากล่าวได ้ว่าเป็ นภาษาทีง่ า่ ย
ึ ษา
ต่อการศก
ั ซอน
้
ภาษาจาวากาจัดสว่ นทีม
่ ค
ี วามซบ
่ multiple
ในภาษา C++ ออกไป เชน
Inheritance, automatic type
conversion, point และ memory
management ของ C++ ทาให ้ภาษาจา
้
ั ซอนน
้
วาใชงานง่
ายและมีความซบ
้อยลง
กว่า C++ มาก
• เป็ นภาษาเชงิ วัตถุทส
ี่ มบูรณ์
สว่ น C++ เป็ นภาษาผสม คือเขียนได ้ทัง้
แบบ Procedural และ OOP ทีส
่ นับสนุน
หลักการเชงิ วัตถุ แต่จาวาจะบังคับให ้เขียน
โปรแกรมได ้ด ้วยหลัก การเช งิ วัต ถุเ ท่า นั ้น
จึงถือได ้ว่าจาวาเป็ นภาษาทีส
่ ามารถแสดง
ลั ก ษ ณ ะ เ ช ิ ง วั ต ถุ ไ ด ้ อ ย่ า ง ชั ด เ จ น
่ เดียวกับภาษา Smalltalk
เชน
• การกันการผิดพลาด (Robust)
ภาษาจาวาเป็ นภาษาที่ ม ี ค วามคงทน
เนื่ อ งจากภาษาจาวามีร ะบบป้ องกั น และ
สามารถก าจั ด ความผิด พลาดเล็ ก ๆ น ้อยๆ
ทีอ
่ าจเกิดขึน
้ ได ้ในระบบ โดยไม่ต ้องหยุด
การทางานของโปรแกรมด ้วยสาเหตุเพียง
เล็ ก น อ
้ ยเหล่า นี้ นอกจากนี้ภ าษาจาวายั ง
ไม่ ส นั บ สนุ น การท างานโดยใช ้ pointer
เพราะ pointer
เป็ นสาเหตุทท
ี่ าให ้เกิด
ความผิดพลาดได ้ง่าย
• ความปลอดภัยในการทีจ
่ ะประมวลผล
(Secure)
ภาษาจาวาได ้รับการพัฒนาให ้เป็ นภาษา
สาหรับการดาเนินงานบนระบบเน็ ตเวิรก
์
ดังนัน
้ ภาษาจาวาจึงได ้รับการสร ้างมาให ้ยึด
หลักความปลอดภัยของข ้อมูลบนระบบเน็ ต
เวิรก
์ เป็ นสาคัญ
• มัลติเธรด (Multithread )
เป็ นการอนุ ญาตให ้โปรแกรมมากกว่า 1
โปรแกรมสามารถทางาน ณ เวลาเดียวกัน
ได ้ ทาให ้ระบบทางานแบบ real-time ได ้
มากขึน
้ ซงึ่ ในภาษาโปรแกรมอืน
่ ๆ การทา
้ น
Multithreading นั ้ น จ ะมี ค วาม ซั บ ซ อ
มาก แต่ในภาษาจาวาจะสามารถจัดการกับ
Multithreading ได ้อย่างง่ายดาย
• Architecture-neutral
จาวาสามารถท างานได ้บนทุ ก ๆ ระบบ
(Platform) เนื่องจากจาวาจะมีการแปลง
ภาษา 2 ขัน
้ ตอนคือ
การ Compile และ Interpreter โดยเมือ
่
ภาษาจาวาได ้รับการ Compile ออกมาเป็ น
ภาษาของ JVM
แล ้ว (Java
Virtual
Machine หรือ bytecode โดยทีเ่ รียกว่า
bytecode เพราะทุกๆ คาสงั่ ของ JVM มี
ขนาดเพียง 1 byte เท่านัน
้ ) จะสามารถนา
โค ้ดทีไ่ ด ้มาไปทางานได ้บนเครือ
่ งใดๆ ทีม
่ ี
ชุดคาสงั่ ของ JVM ติดตัง้ อยู่ ดังนั น
้ ภาษา
จาวาจึงเป็ นภาษาทีไ่ ม่ขน
ึ้ อยูก
่ บ
ั ระบบใดๆ
• High Performance
ในภาษาจาวาจะอนุ ญาตให ้เขียนโค ้ดจา
้
วาเพื่อ เรีย กใช งานโปรแกรมภาษาอื
่น ได ้
่ ภาษา C++ นอกจากนี้ ในการ
ด ้วย เชน
ประมวลผล JVM
ไปเป็ นชุด ค าสั่ง ที่
สามารถท างานได ้กับ เครื่อ งคอมพิว เตอร์
้
ใดๆ นั น
้ จะใช เวลาในการประมวลผลน
อ้ ย
้
กว่าเวลาทีใ่ ชในการ
Compile ภาษาอืน
่ ๆ
ความหมายของวัตถุ (Object)
วัตถุ (Object) คือ ตัวแทนของบุคคล
สถานที่ หรือสงิ่ ของทีส
่ นใจในเหตุการณ์
หนึง่ ซงึ่ อาจจับต ้องได ้หรือจับต ้องไม่ได ้
Object เป็ นองค์ประกอบสาคัญของการ
เขีย นโปรแกรมที่สามารถรับ ค่าและแสดง
ส่ง ค่าได ้ และจากนิย าม Object
คือ
ตัวแทนของสงิ่ ของทีอ
่ ยู่ใ นโลกของความ
เป็ นจริง ซ งึ่ อาจเป็ นส งิ่ ที่จั บ ต ้องได ้หรือ
ไม่ได ้ จะต ้องมีคณ
ุ ลักษณะ (Attribute) ที่
บ่งบอกว่าเป็ น Object
ของอะไร และมี
พฤติกรรม (Behavior) ทีบ
่ ง่ บอกให ้ทราบ
ว่า Object นั น
้ ทาอะไร ดังนั น
้ Object จะ
สามารถตอบสนองต่อ ส งิ่ ที่ก ระท าในการ
ร ้องขอสงิ่ ต่างๆ ได ้
ลักษณะที่ Object จะต้องมี
1. identity คือ เอกลักษณ์เฉพาะตัวทีท
่ าให ้
Object ของคลาสหนึง่ ๆ แตกต่างจาก
Object
ของอีกหนึง่ คลาสหนึง่ ซงึ่ ใน
ภาษาจาวา identity
จะหมายถึง
Attribute หรือตัวแปร (Variable)
2. State คือสถานะของ Object ณ เวลา
หนึ่ง ๆ ซ งึ่ สามารถเปลี่ย นแปลงได ้เมื่อ มี
การกระตุ ้นจาก Object อืน
่ โดยการสง่
Message
ในภาษาจาวา State
จะ
หมายถึงค่าของ Attribute (Value of
Attribute)
3. Behavior คือ พฤติกรรมที่ Object กระทา
และตอบสนองทุ ก ครั ้ง โดยการกระตุ น
้
Object อืนโดยการสง่ Message ต่อกันใน
ภาษาจาวา Behavior ก็คอ
ื Method
ในทาง OOP
คุณ สมบั ต ข
ิ อง
Object (identity+behavior) ทีค
่ ล ้ายกัน
จะถู ก จั ด ไว ใ้ นคลาสเดีย วกั น ดั ง นั ้น การ
แยกแยะ Object ทีส
่ ร ้างจากคลาสเดียวกัน
่ ชอ
ื่ ของ
จึงใช ้ State ในการพิจารณา เชน
Object (ค่าของตัวแปร “name”) เป็ นต ้น
สว่ นการแยกแยะ Object ทีส
่ ร ้างจากคลาส
ต่างกัน จะใช ้ identity และ Behavior ใน
การพิจ ารณาเพราะ identity
และ
behavior ของ Object ต่างกันทาให ้จัดอยู่
ต่างคลาสกันนั่นเอง
แนวคิดในการเขียนโปรแกรม
(Programming Concepts)
แ น ว ค ว า ม คิ ด ที่ ใ ช ใ น ก า ร เ ขี ย น
โปรแกรมในป จจุ บั น จะใช
2
แ น ว ค ว า ม คิ ด ห ลั ก ๆ ไ ด แ ก
แนวความคิดการเขียนโปรแกรมแบบโครง
สร าง และแนวความคิดเชงิ วัตถุ
แนวความคิดการเขียนโปรแกรมแบบ
โครงสร าง (Structured
Programming Concept)
แนวความคิดนี้เป นการจัดการคาสั่งต
า ง ๆ ใ ห มี รู ป แ บ บ แ ล ะ ม า ต ร ฐ า น ที่
สามารถเขีย นโปรแกรมได ง าย อีก ทั ง้
ยั ง มี ก า ร ต ร ว จ ส อ บ ก า ร ท า ง า น ข อ ง
โปรแกรมได โดยไม ยุ งยาก เมือ
่ เขียน
ื หรือ
โปรแกรมก็เหมือนกับการเขียนหนังสอ
ื คือมีจุดเริม
การอ านหนั งสอ
่ ต นจากซ
ายไปขวา และจากบนลงล างเหมือ นกา
แนวความคิดเชิงวัตถุ (ObjectOriented Programming
Concept)
เป นการเขียนโปรแกรมเพือ
่ ให เป
นไปตามหลักการเชงิ วัตถุ โดยผู เขียน
โปรแกรมต องพยายามมองรูปแบบวัตถุ
ั จินตนาการ
ให ออกก อน ซงึ่ ต องอาศย
พอสมควร
• แนวคิดการเขียนโปรแกรมแบบดังเดิมมักนิยมใช ้
การเขียนโปรแกรมเชงิ กระบวนการ (Procedural
Programming) ซงึ่ ให ้ความสาคัญกับขัน
้ ตอน
กระบวนการที่ท า โดยแบ่ง โปรแกรมออกเป็ น
ส่วนๆตามล าดับขัน
้ ตอนการทางาน แต่แนวคิด
การเขียนโปรแกรมเชงิ วัตถุนัน
้ ให ้ความสาคัญกับ
ข ้อมูล(data) และ พฤติกรรม(behavior) ของ
วั ต ถุ แ ล ะ ค ว า ม สั ม พั น ธ์ กั น ร ะ ห ว่ า ง วั ต ถุ กั น
มากกว่า
เปรียบเทียบแนวคิดระหว่างการ
เขียนโปรแกรมเชิงกระบวนการ และ
เชิงวัตถุ
• ตัวอย่างตู ้ขายเครือ
่ งดืม
่ อัตโนมัต ิ
วิธก
ี ารคิดแบบการเขียนโปรแกรมเชิง
กระบวนการ
เมือ
่ มีการหยอดเหรียญเข ้าตู ้:
• ตรวจสอบจานวนเหรียญและชนิดของเหรียญ
ื้ ได ้
• แสดงผลชนิดของน้ าทีส
่ ามารถเลือกซอ
• ตรวจสอบจานวนน้ ากระป๋ องทีม
่ อ
ี ยูใ่ นตู ้
•
•
•
•
รับผลการเลือกชนิดน้ า
่ ง
สง่ น้ าทีเ่ ลือกออกมาจากชอ
จัดเก็บเงินเข ้าระบบ
่ งรับเงิน
หากมีเงินทอน ให ้ทอนเงินทีเ่ หลือ ทีช
่ อ
ทอน
วิธก
ี ารคิดแบบการเขียนโปรแกรม
เชิงวัตถุ
• ตู ข
้ า ย เ ค รื่ อ ง ดื่ ม อั ต โ น มั ติ ป ร ะ ก อ บ ด ว้ ย
ส่ว นประกอบต่า งๆได ้แก่ หน่ ว ยตรวจสอบและ
จั ด การเรื่อ งเงิน หน่ ว ยจั ด การเครื่อ งดื่ม หน่ ว ย
แสดงผลและรอรับคาสงั่
• หน่วยตรวจสอบและจัดการเรือ
่ งเงิน มีข ้อมูล
เกีย
่ วกับเงินทีไ่ ด ้รับ และเงินทีม
่ อ
ี ยูใ่ นระบบ
สามารถรับและตรวจสอบเงินทีห
่ ยอดเข ้ามาได ้
และทอนเงินได ้
• หน่วยจัดการเครือ
่ งดืม
่ มีข ้อมูลชนิดของ
เครือ
่ งดืม
่ จานวนเครือ
่ งดืม
่ สามารถจัดเตรียม
ชนิดเครือ
่ งดืม
่ ทีพ
่ อกับเงินทีห
่ ยอด และสามารถ
จ่ายเครือ
่ งดืม
่ ออกมาจากตู ้ได ้
• หน่วยแสดงผลและรอรับคาสงั่ มีหน ้าทีร่ อรับ
คาสงั่ และแสดงผลเงินทีห
่ ยอดเข ้ามา
การเขียนโปรแกรมเชิงวัตถุ
(Object – Oriented Programming)
การเขียนโปรแกรมเชงิ วัตถุ เป็ นวิธก
ี าร
เ ขี ย น โ ป ร แ ก ร ม แ บ บ ใ ห ม่ ซ ึ่ ง จ ะ เ รี ย ก
โปรแกรมย่อยทีท
่ าหน ้าทีเ่ ฉพาะว่า Object
และยังรวม data เข ้าเป็ นสว่ นของ Object
ด ว้ ย นอกจากนี้ โ ปรแกรมเช ิง วั ต ถุ ยั ง มี
โ ค ร ง ส ร ้ า ง พิ เ ศ ษ น อ ก เ ห นื อ จ า ก
Procedure Programming หรือ Module
Programming คือ
การทางานของแต่ละ Object จะไม่
ส ิ้น สุ ด ลง เมื่ อ กระบวนการท างานของ
โปรแกรมจบการทางานบน Object
นั น
้
แล ้ว ซงึ่ Object ทีอ
่ ยูใ่ นโปรแกรมเหล่านี้
พร ้อมเสมอในการเริม
่ ท างานต่อ ต าแหน่ ง
้
เดิมเมือ
่ เกิดการเรียกใชงาน
Object อีก
ครัง้ ซงึ่ แตกต่างจากการเขียนโปรแกรมใน
แบบอื่น ๆ ที่โ ปรแกรมย่อ ยจะต ้องเริม
่ การ
ท างานใหม่ เ มื่อ ถูก เรีย กใช อี้ ก ครั ง้ ดั ง นั ้น
เทคนิคนี้จงึ ชว่ ยลดปั ญหาทีเ่ กิดขึน
้ จากการ
เขียนโปรแกรมด ้วยวิธอ
ี น
ื่ ๆ ได ้
Object 2
Object 1
data
data
Object 4
Object 3
data
data
่
แต่ละ Object สามารถติดต่อสือสารกั
นได ้โดยการส่ง
่
Message ไปที่ Object อืน
่ าคัญของ
แนวคิดทีส
การเขียนโปรแกรมเชิงวัตถุ
• คลาส (Class) - ประเภทของวัตถุ เป็ นการ
กาหนดว่า วัตถุ จะประกอบไปด ้วย ข ้อมูล(data)
ห รื อ คุ ณ ส ม บั ติ ( property) แ ล ะ พ ฤ ติ ก ร ร ม
(behavior)หรือการกระทา(method) อะไรบ ้าง
่ มนุ ษย์) เป็ นโครงสร ้างพื้น ฐาน
ซงึ่ คลาส (เชน
ของการเขียนโปรแกรมเชงิ วัตถุ
• วัตถุ (Object) - โดยมากจะเรียกว่า อ็อบเจกต์
คื อ ตั ว ตน(instance) ของ คลาส(เช ่ น นาย
ทักษิณ, นายสนธิ) ซงึ่ จะเกิดขึน
้ ระหว่าง runtime โดยแต่ละ อ็อบเจกต์ จะมีข ้อมูลเฉพาะ
ของตั ว เอง ท าให ้ อ็ อ บเจกต์ แต่ล ะ อ็ อ บเจกต์
ของ คลาส ซงึ่ ใช ้ source code เดียวกันมี
คุณลักษณะและคุณสมบัตท
ิ แ
ี่ ตกต่างกัน
• Encapsulation - การปิ ดบั ง ข ้อมู ล เป็ นวิธ ีก าร
ิ ธิในการเข ้าถึงข ้อมูล หรือการกระทา
กาหนดสท
กับ อ็อบเจกต์ ของ คลาสนั น
้ ๆ ทาให ้แน่ใจได ้ว่า
ข ้อมูลของอ็อบเจกต์นัน
้ จะถูกเปลีย
่ นแปลงแก ้ไข
ผ่านทาง methods หรือ properties ทีอ
่ นุญาต
่ การกาหนดตาแหน่งทางการเมือง
เท่านั น
้ (เชน
เป็ น public method ทีผ
่ ู ้อืน
่ สามารกระทาได ้
ส่ ว นก าร ล า อ อ ก จา ก ต าแ ห น่ ง เ ป็ น private
method ทีม
่ แ
ี ต่ อ็อบเจกต์ ของ คลาส เท่านั น
้ ที่
จะสามารถท าได ้ แต่ก ารกดดั น และการขั บ ไล่
สามารถสร ้าง data
ทีอ
่ าจจะส่งผลเกิดการ
่ กัน)
ลาออกได ้เชน
ื ทอดคุณสมบัต ิ เป็ นวิธก
• Inheritance - การสบ
ี าร
สร ้าง คลาสย่อย ทีเ่ รียกว่าซับคลาส (subclass)
ซ งึ่ จะเป็ นก าหนดประเภทของวั ต ถุ ใ ห ้จ าเพาะ
เจาะจงขึ้น ซ ึ่ง ซั บ คลาส จะได ร้ ั บ ถ่ า ยทอด
คุ ณ สมบั ต ิต่ า งๆมาจากคลาสหลั ก ด ว้ ย (เช ่ น
ื ทอดมาจาก คลาส สงิ่ มีชวี ต
คลาส มนุษย์ สบ
ิ )
• Abstraction - น า ม ธ ร ร ม เ ป็ น ก า ร แ ส ด ง ถึ ง
คุ ณ ลั ก ษณะและพฤติก รรมของ object เท่ า ที่
้
่ นสว่ นทีเ่ หลือ
จาเป็ นต ้องรับรู ้และใชงาน
โดยซอ
่ ตามปกติ
เอาไว ้เพือ
่ ไม่ให ้เกิดความสับสน เชน
แล ว้ นายทั ก ษิ ณ จั ดเป็ นตั ว ตนของ คลาส
มนุ ษย์ ซงึ่ จะมีพฤติกรรม การกระทาทุกอย่างที่
ตามที่ ก าหนดไว ต
้ ามโครงสร า้ งของ คลาส
้
มนุ ษ ย์ แต่ ใ นบางกรณี ท ี่ น าไปใช งาน
เราไม่
้
ต ้องการให ้เกิดการสับสนต่อการใชงานหรื
อการ
้
จั ด ประเภทมากเราสามารถจั ด การหรือ ใช งาน
• Polymorphism - ภาวะที่ม ีห ลายรู ป แบบ เป็ น
วิธก
ี ารกาหนดรูปแบบการกระทาทีเ่ หมือนกั นแต่
ได ้ผลที่แ ตกต่ า งกั น เช ่น การเปล่ ง เส ีย ง เป็ น
method หลักของ คลาส สงิ่ มีชวี ต
ิ ซงึ่ มีคลาส
ั คลาส แต่ผลของ
มนุษย์ และคลาสสุนัข เป็ น ซบ
ี งของอ็อบเจกต์จากคลาสทัง้ สอง
การเปล่งเสย
จะออกมาไม่เหมือนกัน
ตัวอย่างโปรแกรม
import javax.swing.*;
import java.awt.*;
public class CardView extends JLable
{
private ImageIcon icon;
public CardView(VCard card)
{
getImage(card.getImage());
setIcon(icon);
setBackground(Color.white);
setOpaque(true);
}
Object
1
data
private void getImage(String name)
{
java.net.URL url =
Object
2
this.getClass().getResource(name);
icon = new ImageIcon(url);
data
}
}
The End