490 likes | 641 Views
การเขียนโปรแกรมเชิงวัตถุ. โปรแกรมภาษาเชิงวัตถุ (Object-Oriented Programming Language : OOPL).
E N D
การเขียนโปรแกรมเชิงวัตถุการเขียนโปรแกรมเชิงวัตถุ
โปรแกรมภาษาเชิงวัตถุ (Object-Oriented Programming Language : OOPL) ภาษาเชิงวัตถุนี้ได้เริ่มมีมาตั้งแต่ก่อนปี ค.ศ. 1960 และภาษาที่เป็นต้นแบบในขณะนั้นคือ ภาษา Simula ที่ใช้เป็นหลักการของ Object ในการสร้างโปรแกรม ทำให้ระบบในการเขียนโปรแกรมมีลักษณะที่เข้าใกล้กับความคิดมนุษย์ในโลกความเป็นจริงมากขึ้น ต่อมาภาษา Smalltalk ก็ได้รับการพัฒนาเข้ามาแทนที่ Simula
โดยที่มีผู้คนมากมายที่เชื่อว่า Smalltalk คือภาษาเชิงวัตถุ Programming อย่างแท้จริง ต่อมาภาษา C++ ก็ได้เกิดขึ้น ด้วยหลักการเชิงวัตถุ เช่นกันภาษา C++ เป็นภาษาที่ได้รับความนิยมค่อนข้างมาก มีการนำไปใช้งานอย่างกว้างขวางในวงการต่างๆ แต่ปัจจุบันภาษา Java ได้เข้ามามีบทบาทมากขึ้นและเหมือนว่าจะเข้ามาแทนที่ C++ ในไม่ช้า ด้วยความสามารถหลายๆ อย่างของภาษา Java ที่สามารถลดข้อเสียของ C++ ได้
Object Orientation Object Orientationหมายถึง การใช้ Object เป็นตัวหลักเพื่อการพิจารณาความเป็นจริงต่างๆ ที่เกิดขึ้นในโลกด้วยการมองทุกๆ สิ่งในโลกให้เป็นวัตถุทั้งหมด และมองว่า กิจกรรมทั้งหมดที่เกิดขึ้นในโลกนี้เกิดจากความสัมพันธ์และปฏิสัมพันธ์ระหว่างวัตถุ
การมองทุกสิ่งในโลกให้เป็นวัตถุ เป็นการทำให้ปัญหาที่เป็นนามธรรม (Abstraction) กลายมาเป็นรูปธรรม เพื่อทำให้คอมพิวเตอร์สามารถแก้ปัญหาเหล่านั้นได้ด้วยการพัฒนาเป็นซอฟต์แวร์ และการพัฒนาซอฟต์แวร์ที่มีการนำเทคโนโลยี Object มาใช้งานก็คือ การโปรแกรมเชิงวัตถุ (Object – Oriented Programming) นั่นเอง
Object – Oriented Programming (OOP)หรือ การโปรแกรมเชิงวัตถุ หมายถึง การเขียนโปรแกรมที่ประกอบไปด้วยกลุ่มของ Object ซึ่งแต่ละ Object จะถูกจัดกลุ่มอยู่ในรูปของคลาส (Class) โดยที่แต่ละคลาสสามารถมีการถ่ายทอดลักษณะ (Inheritance) กันลงมาอย่างเป็นลำดับ (Hierachy)
คุณสมบัติการเขียนโปรแกรมเชิงวัตถุคุณสมบัติการเขียนโปรแกรมเชิงวัตถุ • ความสามารถในการสืบทอด (Inheritance) • ความสามารถในการเก็บซ่อน (Encapsulation) • ความสามารถในการแปลงร่าง (Polymorphism) • ความสามารถในการจัดการโครงสร้างข้อมูลแบบเชิงนาม (Abstract)
ข้อดีการพัฒนาโปรแกรมด้วยภาษาจาวาข้อดีการพัฒนาโปรแกรมด้วยภาษาจาวา • ความง่าย จาวากล่าวได้ว่าเป็นภาษาที่ง่ายต่อการศึกษา ภาษาจาวากำจัดส่วนที่มีความซับซ้อนในภาษา C++ ออกไป เช่น multiple 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) แนวความคิดนี้เปนการจัดการคําสั่งตางๆ ใหมีรูปแบบและมาตรฐานที่สามารถเขียนโปรแกรมไดงาย อีกทั้งยังมีการตรวจสอบการทํางานของโปรแกรมไดโดยไมยุงยาก เมื่อเขียนโปรแกรมก็เหมือนกับการเขียนหนังสือหรือการอานหนังสือ คือมีจุดเริ่มตนจากซายไปขวา และจากบนลงลางเหมือนการอานหนังสือ
แนวความคิดเชิงวัตถุ (Object-Oriented Programming Concept) เปนการเขียนโปรแกรมเพื่อใหเปนไปตามหลักการเชิงวัตถุ โดยผูเขียนโปรแกรมตองพยายามมองรูปแบบวัตถุใหออกกอน ซึ่งตองอาศัยจินตนาการพอสมควร
แนวคิดการเขียนโปรแกรมแบบดังเดิมมักนิยมใช้ การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming) ซึ่งให้ความสำคัญกับขั้นตอนกระบวนการที่ทำ โดยแบ่งโปรแกรมออกเป็นส่วนๆตามลำดับขั้นตอนการทำงาน แต่แนวคิดการเขียนโปรแกรมเชิงวัตถุนั้นให้ความสำคัญกับ ข้อมูล(data) และ พฤติกรรม(behavior) ของวัตถุ และความสัมพันธ์กันระหว่างวัตถุกันมากกว่า
เปรียบเทียบแนวคิดระหว่างการเขียนโปรแกรมเชิงกระบวนการ และเชิงวัตถุ
ตัวอย่างตู้ขายเครื่องดื่มอัตโนมัติตัวอย่างตู้ขายเครื่องดื่มอัตโนมัติ
วิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการวิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการ เมื่อมีการหยอดเหรียญเข้าตู้: • ตรวจสอบจำนวนเหรียญและชนิดของเหรียญ • แสดงผลชนิดของน้ำที่สามารถเลือกซื้อได้ • ตรวจสอบจำนวนน้ำกระป๋องที่มีอยู่ในตู้
รับผลการเลือกชนิดน้ำ • ส่งน้ำที่เลือกออกมาจากช่อง • จัดเก็บเงินเข้าระบบ • หากมีเงินทอน ให้ทอนเงินที่เหลือ ที่ช่องรับเงินทอน
วิธีการคิดแบบการเขียนโปรแกรมเชิงวัตถุวิธีการคิดแบบการเขียนโปรแกรมเชิงวัตถุ • ตู้ขายเครื่องดื่มอัตโนมัติ ประกอบด้วยส่วนประกอบต่างๆได้แก่ หน่วยตรวจสอบและจัดการเรื่องเงิน หน่วยจัดการเครื่องดื่ม หน่วยแสดงผลและรอรับคำสั่ง
หน่วยตรวจสอบและจัดการเรื่องเงิน มีข้อมูลเกี่ยวกับเงินที่ได้รับ และเงินที่มีอยู่ในระบบ สามารถรับและตรวจสอบเงินที่หยอดเข้ามาได้ และทอนเงินได้
หน่วยจัดการเครื่องดื่ม มีข้อมูลชนิดของเครื่องดื่ม จำนวนเครื่องดื่ม สามารถจัดเตรียมชนิดเครื่องดื่มที่พอกับเงินที่หยอด และสามารถจ่ายเครื่องดื่มออกมาจากตู้ได้
หน่วยแสดงผลและรอรับคำสั่ง มีหน้าที่รอรับคำสั่ง และแสดงผลเงินที่หยอดเข้ามา
การเขียนโปรแกรมเชิงวัตถุ(Object – Oriented Programming) การเขียนโปรแกรมเชิงวัตถุ เป็นวิธีการเขียนโปรแกรมแบบใหม่ ซึ่งจะเรียกโปรแกรมย่อยที่ทำหน้าที่เฉพาะว่า Object และยังรวม data เข้าเป็นส่วนของ Object ด้วย นอกจากนี้โปรแกรมเชิงวัตถุยังมีโครงสร้างพิเศษนอกเหนือจาก Procedure Programming หรือ Module Programming คือ
การทำงานของแต่ละ Object จะไม่สิ้นสุดลง เมื่อกระบวนการทำงานของโปรแกรมจบการทำงานบน Object นั้นแล้ว ซึ่ง Object ที่อยู่ในโปรแกรมเหล่านี้ พร้อมเสมอในการเริ่มทำงานต่อตำแหน่งเดิมเมื่อเกิดการเรียกใช้งาน Object อีกครั้ง ซึ่งแตกต่างจากการเขียนโปรแกรมในแบบอื่นๆ ที่โปรแกรมย่อยจะต้องเริ่มการทำงานใหม่เมื่อถูกเรียกใช้อีกครั้ง ดังนั้นเทคนิคนี้จึงช่วยลดปัญหาที่เกิดขึ้นจากการเขียนโปรแกรมด้วยวิธีอื่นๆ ได้
Object 2 data Object 1 data Object 4 data Object 3 data แต่ละ Object สามารถติดต่อสื่อสารกันได้โดยการส่ง Message ไปที่ Object อื่น
แนวคิดที่สำคัญของการเขียนโปรแกรมเชิงวัตถุแนวคิดที่สำคัญของการเขียนโปรแกรมเชิงวัตถุ
คลาส (Class) - ประเภทของวัตถุ เป็นการกำหนดว่า วัตถุ จะประกอบไปด้วย ข้อมูล(data) หรือคุณสมบัติ(property) และ พฤติกรรม(behavior)หรือการกระทำ(method) อะไรบ้าง ซึ่ง คลาส (เช่น มนุษย์) เป็นโครงสร้างพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ
วัตถุ (Object) - โดยมากจะเรียกว่า อ็อบเจกต์ คือ ตัวตน(instance) ของ คลาส(เช่น นายทักษิณ, นายสนธิ) ซึ่งจะเกิดขึ้นระหว่าง run-time โดยแต่ละ อ็อบเจกต์ จะมีข้อมูลเฉพาะของตัวเอง ทำให้ อ็อบเจกต์ แต่ละ อ็อบเจกต์ ของ คลาส ซึ่งใช้ 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 = this.getClass().getResource(name); icon = new ImageIcon(url); } } Object 2 data