Object-Oriented
หลักการและแนวคดิ เชงิ วตั ถุ
ครผู สู อน นางสาวกนกพร บญุ นุช
เนื้อหาบทเรยี น
1. แนวคิดพื้นฐานเกี่ยวกับการออกแบบและพัฒนาโปรแกรมเชิง
วัตถุ
2. โครงสรางของภาษาเชิงวัตถุ เชน คลาส ออปเจ็ค เมธอด
อินเตอรเฟส แพคแกจ การสืบทอดคลาส เอนแคปซูเลชั่น
และพอริมอรฟซ ึม
ใบงานที่ 2
ใหค วามหมายพรอมทัง้ ยกตวั อยา งของคําศพั ทตอ ไปนี้
1. Polymorphism 8. Attribute และ Method
2. Inheritance 9. Overload
3. Encapsulation 10. Super class
4. Reusable 11. Sub class
5. OOP 12. Instance
6. Object 13. Information Hiding
7. Class
แนวคดิ เกี่ยวกับการโปรแกรมเชงิ วัตถุ
(OOP Concept)
เพราะเหตุใดในปจจุบันการเขียนโปรแกรมเชิงวัตถุ จึงเขามาแทนท่ีรูปแบบ
การเขยี นโปรแกรมแบบเดมิ ๆ การเขียนโปรแกรมในรูปแบบเดิมมีจุดบกพรองอยางไร
และแบบใหมสามารถแกไ ขจดุ บกพรองเหลา น้ันไดห รอื ไม เรามาดคู วามแตกตางระหวาง
การเขยี นโปรแกรมภาษารูปแบบเดมิ กบั รปู แบบใหมก นั
Imparative OOP
การเขียนโปรแกรม OOP
แต่สาํ หรับแนวทางการเขียนโปรแกรมแบบ OOP
แลว้ Data จะถกู ประกาศใชเ้ ฉพาะภายในแต่ละ
Object เท่าน้นั (ไม่ประกาศเป็น Global)
ภาษา OOP
การเขยี นโปรแกรม OOP มีหลายภาษา เชน C++ ,C# ,Java เปน ตน
การเขียนโปรแกรมเชิงวตั ถุ คืออะไร
• โปรแกรมท่ีจะรองรบั งานของเราไดนั้นมักจะซับซอ นเกินกวา การเขียนโปรแกรมแบบ
Structure Programming จะทาํ ไดผลดีพอแนวคดิ ของการเขยี นโปรแกรมเชงิ วตั ถจุ งึ ถกู
คิดขน้ึ มารองรับงานท่ซี ับซอน
• เทียบการเขยี นโปรแกรมแบบ OOP กับรถยนต อยางแรกโปรแกรมแบบ OOP แยก
เปนชน้ิ สว นที่มมี าตรฐานเหมือนรถยนต ซ่งึ เราเรียกชนิ้ สวนนัน้ วา วัตถุ หรือ Object
• พอมองเปน Object กง็ า ย เราจะถอดเขา ถอดเปลี่ยนดว ยชิ้นสว นใดกไ็ ด ขอใหมันมี
มาตรฐานเดยี วกัน (เหมอื นท่เี รามองวา เราถอดเปลีย่ นช้ินสว นรถยนตไ ดสะดวกนน่ั เอง)
ฉะนน้ั มนั ก็งายท่เี ราจะยอมใหใครหลายๆ คนมาชว ยสรางรถยนต หรอื ปรบั แตง รถยนต
ความหมายของ Object
• ความหมายของ Object แบ่งไดเ้ ป็ น 2 ประเภทคือ ส่ิงท่ีเป็นรูปธรรมและ
นามธรรม ที่มีอยจู่ ริงบนพ้ืนโลก (real-world)
• สิ่งที่มีลกั ษณะเป็นรูปธรรม (จบั ตอ้ งได)้ เช่น จกั รยาน รถ สุนขั องคก์ ร ใบ
รายการสินคา้ เป็นตน้
• สิ่งท่ีมีลกั ษณะเป็นนามธรรม (จบั ตอ้ งไมไ่ ด)้ เช่น ความเป็นเจา้ ของ เที่ยวบิน
การวง่ิ แสง เป็นตน้
ทําความรจู ักกบั Class และ Object
กอนท่ีจะสรางออบเจ็กตขึ้นมาไดเราตองสรางคลาสข้ึนมากอน คลาสก็
เปรียบเสมือนแมแ บบ หรอื พมิ พเขียว ในการสรางออบเจ็กตตา งๆ ขึ้นมา
Object คอื สง่ิ ทป่ี ระกอบดว ยคณุ สมบตั ิ 2 ประการคอื
คุณลกั ษณะ (Attribute หรอื Data) คอื สวนที่บง บอกลกั ษณะทว่ั ไปของ
วัตถุ
พฤตกิ รรม (Behavior หรอื Method) คอื ส่ิงทว่ี ัตถุสามารถกระทาํ
ออกมาได
ทาํ ความรจู กั กับ Class และ Object
คณุ ลกั ษณะ (Attribute หรือ Data) คอื สวนท่ีบงบอกลักษณะทั่วไปของวตั ถุ
พฤตกิ รรม (Behavior หรอื Method) คือสิ่งที่วตั ถุสามารถกระทําออกมาได
ตัวอยาง Class พนกั งานบรษิ ทั
Attribute รหัสพนกั งาน,เงนิ เดือน,เวลาเขา-ออกงาน
Method รดู บัตรพนักงาน ,รบั เงินเดอื น
ตวั อยาง class รถยนต
Attribute Class รถยนต
Method ยห่ี อ, รนุ , สี ,ความเร็ว
สตาร ,ดับเครือ่ ง ,เปลย่ี นเกยี ร ,เบรค
จาก Class นําไปสรางเปน Object
หากเขียนโปรแกรมประมวล
เก่ยี วกบั รถ จะตองสราง Object ของ
รถข้ึนมาโดยรถ 1 คนั หมายถงึ
Object 1 Object
. Class : คลาส “รถ”
Class รถยนต
Object รถ Civic รถ Toyota รถตู
Object ช่อื mycar, BillsCar
ตวั อยา ง Object Car
ตัวอยา ง 2 : Class “นกั เรยี น”
Attribute Class Student
Method
ช่ือ รหสั อายุ
ลงทะเบยี นเรยี น
สราง Object นกั เรยี น จาก Class Student
Class Student
Object Stu1 Stu2 Stu3
สรา ง Object คน จาก Class person
Class Student
ID
Name
Age
Object Student Student
Student ID 1235 ID 1236
ID Name Name
Name 1234
Age สมหญงิ Age สมหมาย Age สมชาย
15 16 9
Stu1 Stu2 Stu3
Note :
• กอนท่ีจะสรางออบเจ็กตข้ึนมาไดเราตองสรางคลาสขึ้นมากอน คลาสก็
เปรียบเสมอื นแมแบบ หรอื พมิ พเ ขยี ว ในการสรา งออบเจก็ ตตางๆ ขึ้นมาก
• ออบเจ็กตท่ีสรางมาจากคลาสเดียวกันอาจมีรายการของคุณสมบัติที่
เหมือนกัน, มีความสามารถท่ีเหมือนกัน แตจะแตกตางกันดวย คาของ
คุณสมบัติตางๆ
• ออบเจ็กตท่ถี กู สรางจากคลาสจะเรยี กวา “อินสแตนซ” instance
Class “รถยนต”
Attribute Method
ยหี่ อ สตารเครอ่ื ง()
สี เบรก()
รนุ เปลย่ี นเกียร()
จํานวนลอ ดับเคร่ือง()
ฯลฯ ฯลฯ
Class “people”
Attribute Method
หมายเลขบตั ร บอกเลขท่บี ตั รประชาชน()
ประชาชน บอกชือ่ ()
ชื่อ-สกุล บอกวนั เกิด()
วนั เกิด บอกท่อี ยู()
เพศ กิน()
ทีอ่ ยู นอน()
ฯลฯ วิ่ง()
ฯลฯ
การเขยี น Class diagram
Name
Attribute
Method
ตวั อยาง Class diagram ของ class “Student”
Student
- id
- Name
+ getName()
+ printGrade()
แสดงขอ มูล 2 instance จาก Class “Student”
หลกั การพนื้ ฐานของ Object oriented
• Encapsulation และ Information Hiding การหอ หุม และ
การซอ นรายละเอยี ด
• Inheritance การสบื ทอด และ (Reusable) การนาํ วตั ถมุ าใช
ใหม
• Polymorphism การพอ งรปู
การซอ นรายละเอยี ด (Information Hiding)
มีผูสังเกตเห็นวา ในชวี ติ ประจาํ วันของเรานัน้ ไมจาํ เปน ตอ งทราบหรือรทู กุ เรอื่ ง
ก็สามารถใชงานสงิ่ ของนั้นๆ ได เชน
โทรทัศนท ีม่ ีอยตู ามบา น เรา
ไมตอ งทราบการทํางานของ
อปุ กรณภายในของมัน แต
เราก็สามารถเปด เคร่อื งและ
ดูรายการโปรดของเราได
เพยี งรูวธิ ีการกดปุม ตางๆ
Encapsulation
• Encapsulation คือรากฐานอยางหน่ึงของแนวความคิดในเชิง Object-Oriented ซ่ึงขอดี
ของ Encapsulation คอื การปองกัน attribute (data) ของ object จากความเสียหาย เพราะถา
สวนของโปรแกรมทั้งหมด อนุญาตใหมีการเขาถึง Attribute ไดตามที่ตองการแลวน้ัน จะ
สงผลให attribute นั้นงายตอการถูกใชอยางผิดๆ ทําใหคา attribute เปลี่ยนแปลงไป ซึ่ง
กอ ใหเกดิ ความเสยี หายตามมา
• Encapsulation คือการหอ หุม attributes และ methods เขาไวด วยกัน
• Encapsulation จะทําหนาท่ีปองกันมิให Object อื่นท่ีอยูภายนอก เขาถึง Object หน่ึงๆ
ไดอยางอิสระจะมีเฉพาะ methods ที่อยูใน Object เทานั้นจะสามารถติดตอกับ attribute ท่ี
อยูใน Object เดยี วกันได เรยี กไดวาการ Encapsulation มคี ุณสมบัติของ Information hiding
Encapsulation การหอ หมุ
Method Method
object1 object2
Method Attribute Method Attribute
การเขาถึง Attribute จะตอ งผาน Method
Encapsulation & Information Hiding
+getId Student
- id
Student - Name
+getId()
+getName -id +getName()
-name +setName()
+setName
Information Hiding
• Information Hiding คอื การจํากดั การมองเหน็ ขอมูลภายใน Object
เชนการกําหนดคุณลักษณะเปน “public” + เพอื่ ใหสามารถเช่อื มตอ
กับ Object ภายนอกได และ
กาํ หนดเปน “private” - เพอ่ื จาํ กัด attribute ใหอยูภายใน object
เทานัน้
Inheritance (การสืบทอดคณุ สมบตั ิ)
• Inheritance คือ คณุ สมบตั ทิ ่ี Class ๆ หนง่ึ สามารถสบื ลักษณะของ
attribute และ method ของ อีก Class หนงึ่ ไดการทําเชนนท้ี าํ ใหคุณ
สามารถ Create Class ใหมข นึ้ โดยนําสาระสําคญั ทเี่ หมือนกันของ
attribute และ behavior(method) จาก class อื่นมาใชไ ด
Inheritance (การสบื ทอดคณุ สมบตั )ิ
Emp_ID
position
Emp_ID Emp_ID
Position Position
Position_Car Hout_per_mounth
Inheritance (การสบื ทอดคณุ สมบตั )ิ
คลาสแม (Super Class) Emp_ID
position
คลาสลกู (SubClass) คลาสลกู (SubClass)
Emp_ID Emp_ID
Position Position
Position_Car Hout_per_mounth
Inheritance (การสบื ทอดคุณสมบตั )ิ
Polymorphism การพองรปู
คือ การทําใหส่ิงหนึ่งสามารถทํางานไดหลากหลายรูปแบบตามความ
ตองการที่เกิดข้ึนในขณะหน่ึง ๆ เชนการท่ี Method ช่ือเดียวกันสามารถ
รบั คา ทส่ี งมาแตกตางกันไดหลายรปู แบบ
Polymorphism การพองรูป
ยกตวั อยา ง Method
calculate(int x)
calculate(double y)
หากมีผูใชโปรแกรมสงขอมูลเขามาเปนตัวเลขจํานวนเต็ม เราก็สามารถเรียกเมธอด
calculate(int x) ใหท าํ งาน
หากผูใชโปรแกรมสงขอมูลเลขทศนิยมเขามาเราก็สามารถเรียกคํานวณใหละเอียดมาก
ข้ึนโดยเรียกเมธอด calculate(double y)
โดยไมตองไปต้ังช่ือเมธอดใหม เพียงแคตั้งคา อารกิวเมนตท่ีแตกตางกัน มีศัพทเรียก
เฉพาะวา เมธอดชอื่ น้ันถกู “Overload”
การพองรปู (Polymorphism)
ค•ลารสาแกฐมาคนขอื องSกาhรaพpอ้ งeรูปคือคุณสมบตั ิการถ่ายทอด
ค•ลาคสุณลสูกมคบตัอื ิกาCรถiา่rยcทleอด, ยTนื rยiนaั ไnดgว้ ่าleคล, าRสeลูกcทtเ่ีaกิดnจgากleคลมาสีคแณุม่เดสียวมกบนั ยตั อ่ เิ มหมมีคือุณสนมบตั ิ
คลาเสหแมือมนท กุกนั ประการ
• เปน ทม่ี าของหนึง่ รูปหลายพฤตกิ รรม
การถายทอดใหเกิดลักษณะของพอ งรปู
Shape
+draw()
+erase()
Circle Line Rectangle
+draw() +draw() +draw()
+erase() +erase() +erase()