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

Download Report

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

1
ความรู้ เบือ้ งต้ นเกีย่ วกับการเขียน
โปรแกรมเชิงวัตถุ
ภาษาโปรแกรมเชิงวัตถุ
ในปี 1967 ภาษา Simula67 ถูกพัฒนาที่นอร์เวย์ เพื่อช่วยในการเขียน
โปรแกรมสาหรับจาลอง (Simulation)
 โดยทัว่ ไประบบที่ซบ
ั ซ้อนจะประกอบด้วยวัตถุจานวนมากที่ทางาน
เกี่ยวข้องกัน โดยการสร้างโปรแกรมที่จาลองการทางานของแต่ละ
วัตถุไปที่ละขั้นจนกว่าจะได้คาตอบ ซึ่งแนวคิดนี้เรี ยกว่า การ
โปรแกรมเชิงวัตถุ
 1990s มีภาษาเก่าถูกเพิ่มเติมในส่ วนของการโปรแกรมเชิงวัตถุ แต่
โดยพื้นฐานของภาษาจึงทาให้กลไกไม่เป็ นเชิงวัตถุอย่างสมบูรณ์

โปรแกรมเชิงวัตถุ (Object Oriented Programming)

การเขียนโปรแกรมคอมพิวเตอร์มี 2 แบบ
 การเขียนโปรแกรมเชิงฟังก์ชนั
 การเขียนโปรแกรมเชิงวัตถุ
โปรแกรมเชิงฟังก์ ชัน (Functional Programming)
การเขียนโปรแกรมเชิงฟังก์ ชัน คือ การเขียนคาสัง่ เรี ยงต่อกันไป
เรื่ อยๆ ทีละบรรทัด โปรแกรมจะเริ่ มทางานจากคาสัง่ แรกสุ ดเรื่ อยไป
จนถึงคาสัง่ ท้ายสุ ด เป็ นอันจบโปรแกรม อาจมีการสร้างเป็ น
โปรแกรมย่อยๆ ในโปรแกรมใหญ่บา้ ง เพื่อลดคาสัง่ ที่ซ้ าซ้อน
 ตัวอย่างเช่น ภาษาเบสิ ก ภาษาโคบอล ภาษาฟอร์ แทรน ภาษาปาสคาล
และ ภาษาซี

โปรแกรมเชิงวัตถุ (Object Oriented Programming)
การเขียนโปรแกรมเชิงวัตถุ คือ การสร้างวัตถุสมมติข้ ึนมาก่อน แล้ว
เขียนคาสัง่ นิยามวัตถุน้ นั จนสามารถทาให้วตั ถุน้ นั ทางานตามที่
ต้องการได้
 ซอร์ สโค้ดของโปรแกรมเชิงวัตถุแทนที่จะเป็ นคาสัง่ เขียนเรี ยงต่อกัน
ไปเรื่ อยๆ จะเป็ นนิยามของวัตถุเขียนเรี ยงต่อไปเรื่ อยๆ แทนและ
โปรแกรมจะทางานได้เองถ้าวัตถุน้ นั ถูกนิยามขึ้นอย่างเหมาะสม
 ตัวอย่างเช่น ภาษาจาวา และภาษาซี พลัสพลัส (ภาษาซี พลัสพลัสเขียน
ได้ท้ งั แบบโครงสร้างและวัตถุ)

โปรแกรมเชิงวัตถุ (Object Oriented Programming)
การเขียนโปรแกรมเชิงวัตถุตอ้ งใช้เวลาในการศึกษานานพอสมควร
โดยเฉพาะอย่างยิง่ นักเขียนโปรแกรมต้องมีความชานาญในการสร้าง
วัตถุสมมติที่ทางานตามอย่างที่เราต้องการได้
 โปรแกรมประยุกต์ที่ใช้งานจริ งในปั จจุบน
ั ล้วนแล้วแต่เขียนด้วย
โปรแกรมเชิงวัตถุท้ งั สิ้ น
 การศึกษาการเขียนโปรแกรมเชิงวัตถุจึงเป็ นสิ่ งที่นกั เขียนโปรแกรม
รุ่ นใหม่ทุกคนควรจะฝึกฝนไว้

โปรแกรมเชิงวัตถุ (Object Oriented Programming)
ข้ อดี : มีความกะทัดรัด
 ข้ อเสี ย : ต้องใช้เวลาศึกษานาน โดยเฉพาะอย่างยิง่ คนที่ไม่ใช่
นักเขียนโปรแกรมมืออาชีพ เพราะการเขียนโปรแกรมเชิงวัตถุ ไม่ใช่
เรื่ องที่จะเรี ยนรู ้ได้ในเวลาอันรวดเร็ ว

เปรียบเทียบขั้นตอนการเขียนโปรแกรมเชิงฟังก์ ชัน
และการเขียนโปรแกรมเชิงวัตถุ
เปรียบเทียบระหว่ างการเขียนโปรแกรมเชิงฟังก์ ชัน
และการเขียนโปรแกรมเชิงวัตถุ
แนวความคิดภาษาเชิงวัตถุ
การเน้นที่ปัญหาและองค์ประกอบของปัญหาเพื่อการแก้ปัญหานั้น
เรี ยกว่า Problem space
 เหมือนการจาลองความเป็ นจริ งในชีวติ ความเป็ นอยูข่ องมนุษย์ที่จะ
ประกอบด้วย คน สัตว์ สิ่ งของ และใช้สิ่งต่างๆ เพื่อแก้ปัญหา คือ แต่
ละสิ่ ง มีหน้ าทีใ่ นการแก้ ปัญหา

Problem Space
หญ้ าในสนามรก
คนตัดหญ้ า >> ตัดหญ้ า ใช้ เครื่องตัดหญ้ า
เครื่องตัดหญ้ า >> ตัดหญ้ า ทาให้ หญ้ าที่สูงถูกตัด
Solution Space
(Problem)
Problem Space
ตัวอย่ างปัญหากับการมองปัญหาแบบเก่ า

ปัญหาการหาพืน้ ทีร่ ู ปสี่ เหลีย่ มผืนผ้ าใดๆ
 สามารถหาพื้นที่สี่เหลี่ยมผืนผ้าโดยใช้สูตร
พืน้ ทีส่ ี่ เหลีย่ ม = กว้ าง x ยาว
 ดังนั้น ต้องทราบ ความกว้ าง และ ความยาว ของสี่ เหลี่ยม
เสี ยก่อน
(
)
=
x
ขั้นตอนการหาพืน้ ทีร่ ูปสี่ เหลีย่ มผืนผ้ า
ตัวอย่ างปัญหากับการมองปัญหาแบบใหม่
1. ในระบบนี้จะต้องประกอบด้วยวัตถุทจี่ าเป็ นใดบ้าง
- หาวัตถุทเี่ กีย่ วข้ อง เช่น สี่ เหลี่ยม ความกว้าง ความยาวและพื้นที่
- ตัดวัตถุทมี่ ีลกั ษณะเหมือนกันออก
- วิเคราะห์ ลกั ษณะของแต่ ละวัตถุ เช่น สี่ เหลี่ยมควรมีส่วนประกอบ
เป็ นตาแหน่ง ความกว้าง ความยาว และพื้นที่ เป็ นต้น ดังนั้นเราสามารถ
รวม พื้นที่ ความกว้างและความยาว เป็ นของสี่ เหลี่ยม
- วิเคราะห์ พฤติกรรมของแต่ ละวัตถุ ตอนนี้มีวตั ถุเดียวสี่เหลี่ยม
อาจจะต้อง คานวณเส้นรอบรู ป คานวณพื้นที่ วาดตัวเอง เป็ นต้น
ตัวอย่ างปัญหากับการมองปัญหาแบบใหม่

วัตถุสี่เหลีย่ มผืนผ้ า
ความยาว
พืน้ ที่
ความกว้ าง
ตัวอย่ างปัญหากับการมองปัญหาแบบใหม่

พฤติกรรม
 คานวณความยาวเส้ นรอบรู ป
 คานวณพืน้ ที่
 วาดตัวเอง

ตอนนีท้ ราบว่าจะมีวตั ถุใดอยู่ในระบบบ้าง ขัน้ ตอนต่อมา คือ ต้องหาความสัมพันธ์ ของแต่
ละวัตถุ แต่ในทีน่ ม้ ี วี ตั ถุเดียวจึงไม่ต้องทา
แนวคิดของเอลัน เคย์ (Alan Kay)

เป็ นผูห้ นึ่งที่พฒั นาภาษา small Talk ซึ่งเป็ นต้นแบบของการเขียนโปรแกรม
เชิงวัตถุ ได้ให้นิยามของภาษาเชิงวัตถุไว้ดงั นี้
 ทุกๆ สิ่ งเป็ นวัตถุ
 โปรแกรม คือ กลุ่มของวัตถุที่ส่งสารบอกกันเพื่อทางาน
 วัตถุแต่ละวัตถุมีหน่วยความจา
 วัตถุตอ้ งมีชนิด
 วัตถุที่จดั อยูใ่ นประเภทเดียวกันย่อมได้รับข่าวสารเหมือนกัน
ทุกๆ สิ่ งเป็ นวัตถุ
องค์ประกอบของโปรแกรมคอมพิวเตอร์ทุกๆ ส่ วนจะต้องเป็ นวัตถุ
 ซึ่ งกฎข้อนี้ เองที่ทาให้ล่ามแปลภาษาส่ วนมากรวมทั้งภาษาจาวา
(JAVA) ด้วย ไม่เป็ นภาษาเชิงวัตถุแบบบริ สุทธิ์
 เพราะในล่ามแปลภาษา (JAVA) ยังมีบางส่ วนที่ไม่เป็ นวัตถุ เช่น การ
กาหนดตัวแปร เป็ นต้น

โปรแกรมคือกลุ่มของวัตถุ

โปรแกรมในความหมายของการเขียนโปรแกรมเชิงวัตถุ คือ กลุ่มของวัตถุที่
ส่ งข้อความข่าวสาร(Message) ถึงกันและกันเพื่อบอกให้วตั ถุทางาน
วัตถุมหี น่ วยความจา
วัตถุในความหมายของการเขียนโปรแกรมเชิงวัตถุ จะต้องมี
หน่วยความจาของตัวเอง คือ ส่ วนที่เก็บข้อมูลส่ วนของวัตถุน้ นั ๆ เอง
ซึ่งเรี ยกว่า attribute
 ส่ วนของข้อมูลนี้อาจจะประกอบขึ้นจากวัตถุอื่นๆ ได้
 เป็ นที่มาของการเกิดคุณสมบัติการถ่ายทอดและคุณสมบัติของ
องค์ประกอบคอมโพสิ ต

วัตถุมหี น่ วยความจา
Attribute
(Object)
หน่ วยความจาคอมพิวเตอร์
CPU
RAM
ROM
DISK
วัตถุจะต้ องจัดอยู่ในกลุ่มหรือชนิด
ชนิดของวัตถุ คือ คลาส (Class)
 ในการเขียนโปรแกรมเชิงวัตถุจะต้องเขียนคลาสขึ้นมาก่อนเสมอ แล้วจึงจะ
สร้างวัตถุจากคลาส ดังนั้นวัตถุจึงจะต้องอยูใ่ นคลาสใดคลาสหนึ่ง

(Class)
Object
Object
Object
Object
Object
Object
วัตถุจะต้ องจัดอยู่ในกลุ่มหรือชนิด
ดังนั้น คลาส เปรี ยบเหมือน แม่พิมพ์
 ส่ วนวัตถุ คือ สิ่ งที่เกิดจากแม่พิมพ์ วัตถุที่เกิดจากคลาสเดียวกันจึงมีคุณสมบัติ
พื้นฐานเหมือนกัน

เขียน
เขียน
เขียน
ตัวอย่ างชนิดของวัตถุและวัตถุ
MobilePhone
String bandname
Button button
Screen screen
Antenna antenna
Simm simNet
call()
receive()
hangup()
sendSMS()
Siemens
Ericsson
Nokia
วัตถุชนิดเดียวกันย่ อมได้ ข่าวสารเหมือนกัน
วัตถุที่อยูใ่ นประเภทเดียวกันย่อมได้ข่าวสารเหมือนกัน คุณสมบัติขอ้
นี้ทาให้การเขียนโปรแกรมเชิงวัตถุมีประสิ ทธิภาพเพิ่มขึ้นเพราะชนิด
ของวัตถุมิได้กาหนดหรื ออยูอ่ ย่างโดดๆ แต่สามารถจัดเป็ นกลุ่ม
 ผูเ้ ขียนคาสัง่ สามารถกาหนดชนิดย่อย ๆ ของวัตถุได้อีก เช่น

 คลาส คือ shape สามารถแตกออกเป็ นชนิดที่จาเพาะลงไปเป็ น
Circle, Triangle, Rectangle เป็ นต้น
 ดังนั้น เมื่อวัตถุในคลาส Circle สามารถได้รับข่าวสาร
เหมือนกับ Triangle และ Rectangle
วัตถุชนิดเดียวกันย่ อมได้ ข่าวสารเหมือนกัน
Shape Class
Circle Class
Triangle Class
Rectangle Class
Message1
Message1
Message1
text
คุณสมบัตขิ องภาษาการโปรแกรมเชิงวัตถุ

คุณสมบัติของภาษาที่เป็ นการโปรแกรมเชิงวัตถุควรมีคุณสมบัติ
พื้นฐานดังต่อไปนี้
 Encapsulation (การห่ อหุ ม้ วัตถุ)
 Data Hiding (การซ่อนรายละเอียด)
 Inheritance (การสื บทอด)
 Polymorphism (การพ้องรู ป)
Encapsulation (การห่ อหุ้มวัตถุ)

คือ การรวมคุณลักษณะของวัตถุและพฤติกรรมของวัตถุเข้าไว้ดว้ ยกัน โดย
กาหนดให้เป็ นลักษณะชนิดของวัตถุน้ นั ๆ
Function
Data
Function
Data
Function
Data
Data
Data
Encapsulation
Data
Data
Data
Data
Function
Data
Function
Data Hiding (การซ่ อนรายละเอียด)
คือ การกาหนดระดับในการเข้าถึงข้อมูล
 เพื่อป้ องกันการเข้ามาใช้ขอ้ มูลของวัตถุโดยสิ่ งอื่นที่ไม่เกี่ยวข้องแล้ว
ทาให้เกิดการผิดเพี้ยนของการทางานทั้งระบบ
 ดังนั้นข้อมูลบางอย่างไม่ยน
ิ ยอมให้วตั ถุอื่นใดมาใช้งานได้
จาเป็ นต้องซ่อนรายละเอียดตรงจุดนี้เอาไว้ เพื่อให้เกิดความปลอดภัย
ของวัตถุและระบบโดยรวมให้มากที่สุด

Data Hiding (การซ่ อนรายละเอียด)

ตัวอย่างเช่น
()
()
จะเห็นว่า หมายเลขเครื่ อง และ
ปุ่ มกดไม่ควรเปลี่ยนแปลง
ดังนั้นข้อมูลนี้จึงควรซ่อนไว้
แต่หน้ากากอาจเปลี่ยนได้ เป็ น
ต้น
Inheritance (การสื บทอด)

เป็ นการขยายลักษณะพิเศษหรื อความสามารถของชนิดวัตถุใหม่จากชนิดวัตถุ
พื้นฐานให้มีลกั ษณะของเดิมและเพิ่มเติมสิ่ งใหม่ๆ เข้าไปด้วย
()
()
()
()
()
()
Inheritance (การสื บทอด)
 การสื บทอดคุณสมบัติ (Properties และ Method) ของ Object
หรื อ Class จาก Object หรื อ Class อื่น
Composition
คุณสมบัติของ Inheritance ทาให้การโปรแกรมเชิงวัตถุมีขอ้ ดี คือ
สามารถสร้างงานต่างๆ ได้เร็ วเพราะสามารถนาของเก่ามาใช้งานใหม่
ได้ เรี ยกว่า “Reused”
 แต่กย็ งั มีลกั ษณะอีกอย่างที่ช่วยให้เกิด “Reused” ได้เช่นกัน คือ
Composition คือ การสร้างวัตถุใดๆ ด้วยการประกอบจากวัตถุอื่น

Composition

ตัวอย่างเช่น นาฬิกา ประกอบด้วย แกนนับ เฟื อง เข็มสั้น เข็มยาว
หน้าปัด เป็ นต้น
Polymorphism (การพ้ องรู ป)

เป็ นคุณสมบัติที่ชนิดของวัตถุที่เกิดจากชนิดของวัตถุแม่เดียวกันสามารถมี
ความสามารถเหมือนแม่แต่ผลลัพธ์การดาเนินงานไม่เหมือน คือ มีลกั ษณะ
เฉพาะตัว ตัวอย่างเช่น
()
()
()
()
มารู้ จักคลาสและวัตถุกนั
คลาสเป็ นเหมือนส่ วนของแม่พิมพ์ เพื่อบอกลักษณะว่าวัตถุในคลาส
นี้มีลกั ษณะและพฤติกรรมเป็ นอย่างไร
 วัตถุเป็ นสิ่ งที่ถูกสร้างขึ้นมาจากคลาสเพื่อใช้งาน กาหนดค่าต่างๆ ส่ ง
ข้อความสัง่ ให้วตั ถุทางาน

มารู้ จักคลาสและวัตถุกนั
คลาสสี่ เหลี่ยมผืนผ้า
คุณสมบัติ:กว้าง, ยาว
เมธทอด:คานวณพื้นที่
วัตถุA:สี่ เหลี่ยมผืนผ้า
กว้าง 2 ยาว 3
เมธทอด:คานวณพื้นที่
,
()
= 2 cm,
=3 cm
()
การสร้ างคลาส
คลาสเปรียบเสมือนแม่ พมิ พ์ วัตถุเป็ นผลิตผลที่เกิดจากแม่พิมพ์
 ดังนั้นการที่จะสร้ างวัตถุได้จึงจาเป็ นต้ องอาศัยแม่ พม
ิ พ์หรือคลาสนี้
 โดยคลาสจะบ่งบอกถึงข้อมูลที่วตั ถุที่อยูใ่ นคลาสนี้ ควรจะมี และ
พฤติกรรมที่วตั ถุในคลาสนี้สามารถทาได้

การสร้ างคลาส

คลาส และวัตถุประกอบไปด้ วย
 คุณลักษณะ (Attribute) หรื อข้อมูล (Data)
 เมธอด (Method) หรื อพฤติกรรม (Behavior)
Class
Object
คือ
คือ
กลุมของ
Object
่
ตัวอยางหนึ
่งๆของ Object type
่
Class
คน
รถยนต ์
สั ตว ์
คอมพิวเตอร ์
Object
นายอน,
้ นางสาวดี, นางตัง้ ใจ
รถบรรทุก, รถเกง,
๋ รถกะบะ
เสื อ, นก, ปลา, ช้าง, มด
PC, Notebook, Mini computer
ตัวอย่ างคลาส
นักศึกษา
 คุณลักษณะ เช่น รหัส ชื่อ และ
เกรดเฉลี่ย
 เมธอด เช่น ลงทะเบียน สอบ และ
เดิน

, ,
()
()
()
ตัวอย่ างคลาส
รถยนต์
 คุณลักษณะ เช่น ยีห
่ อ้ รุ่ น และสี
 เมธอด เช่น เคลื่อนที่ หยุดและ
เลี้ยว

, ,
()
()
()
ตัวอย่ างคลาส
สุ นัข
 คุณลักษณะ เช่น ชื่อ พันธุ์ และสี
 เมธอด เช่น เห่ า คลาน และกระดิก
หาง

,
,
()
()
()
เปรียบเทียบคลาสกับวัตถุ
Class
Object
เปรียบเทียบคลาสกับวัตถุ
เปรียบเทียบคลาสกับวัตถุ
แนวคิดอัตประโยชน์ จากการโปรแกรมเชิงวัตถุ
การซ่อนรายละเอียด
 การเชื่อมต่อ
 การนาวัตถุมาใช้ใหม่
 การพ้องรู ป: หนึ่งรู ปหลายพฤติกรรม

การซ่ อนรายละเอียด (Information Hiding)

มีผสู ้ งั เกตเห็นว่าในชีวิตประจาวันนั้น ไม่จาเป็ นต้องทราบหรื อรู ้ทุกเรื่ องก็
สามารถใช้งานสิ่ งของนั้นๆ ได้ เช่น
โทรทัศน์ ทมี่ อี ยู่ตามบ้ าน
ไม่ ต้องทราบการทางานของ
อุปกรณ์ ภายใน แต่ ก็
สามารถเปิ ดเครื่องและ
ดูรายการโปรดได้
เพียงรู้ วธิ ีการกดปุ่ มต่ างๆ
การเชื่อมต่ อ (Interface)

โดยปกติการเชื่อมต่อระหว่างผูใ้ ช้กบั คอมพิวเตอร์ เรี ยกว่า User interface
แต่ คาว่ าอินเตอร์ เฟสสาหรับวัตถุคือ ส่ วน
ทีบ่ อกว่ าวัตถุน้ันให้ บริการหรือสามารถ
ทาอะไรได้ บ้าง
การนาวัตถุมาใช้ ใหม่ (Reusable)
จุดประสงค์ใหญ่ของการเขียนโปรแกรมเชิงวัตถุ คือ การนาส่ วน
ต่างๆ ของวัตถุที่สร้างขึ้นกลับมาใช้ใหม่หรื อที่เรี ยกในภาษาอังกฤษ
ว่า “Reuse”
 เมื่อมีวตั ถุถูกสร้างขึ้นมาก็สามารถนาวัตถุต่างๆ มาประกอบกันเป็ น
วัตถุอีกชนิดหนึ่งได้ เพื่อให้วตั ถุใหม่มีความสามารถมากกว่าเดิม
 ตัวอย่างเช่น กรณี ของรถยนต์สามารถประกอบขึ้นจาก เครื่ องยนต์
ตัวถัง ประตู และล้อ เป็ นต้น

ตัวอย่ างวัตถุทเี่ กิดจากวิธีคอมโพสิ ต
การพ้ องรู ป (Polymorphism)
 การพ้องรู ป คือ คุณสมบัติการถ่ายทอด
 คุณสมบัติการถ่ายทอดยืนยันได้วา่ คลาสลูกที่เกิดจากคลาสแม่เดียวกัน
ย่อมมีคุณสมบัติเหมือนกัน
 มีประโยชน์อย่างมากเพราะบางครั้งการทางานของคลาสลูกแต่ละคลาส
ไม่เหมือนกัน ดังนั้นแทนที่จะกาหนด Method ขึ้นมามากมายเพื่อรองรับ
การทางานของคลาสลูกแต่ละคลาส ก็เพียงแต่กาหนดโครงสร้างไว้ภายใน
คลาสแม่ก่อน แล้วให้คลาสลูกสื บทอดคุณสมบัติแล้วไปกาหนด
รายละเอียดการทางานของ Method เอาเอง
 เป็ นที่มาของหนึ่ งรู ปหลายพฤติกรรม
การถ่ ายทอดให้ เกิดลักษณะของพ้องรู ป
()
()
()
()
การถ่ ายทอดให้ เกิดลักษณะของพ้ องรู ป
Shape Class
draw()
erase()
Class รูปสี่ เหลีย
่ ม กับ Class รูป
สามเหลีย
่ ม ไดรั
ิ าก
้ บการสื บทอดคุณสมบัตจ
Class รูปหลายเหลีย
่ ม โดยทัง้ คูมี
่ Function
ทีช
่ อ
ื่ draw() เหมือนกัน แตเมื
่ มีการเรียกใช้
่ อ
function ดังกลาว
่ รางจาก
Class
่ Object ทีส
้
รูปสี่ เหลีย
่ มจะมีการวาดรูปสี่ เหลีย
่ ม ขณะที่
Object ทีส
่ รางจาก
Class รูปสามเหลีย
่ มจะมี
้
การวาดรูปสามเหลีย
่ ม
Circle Class
Triangle Class
Rectangle Class
draw()
erase()
draw()
erase()
draw()
erase()