Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

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

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

Published by koroimt116, 2021-09-27 04:13:36

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

Search

Read the Text Version

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

แนวความคดิ ภาษาเชิงวตั ถุ คล้ายๆจําลองชวี ติ ความเปน็ อยู่ของมนุษย์ที่จะประกอบดว้ ย คน สตั ว์ สงิ่ ของ และใชส้ งิ่ ตา่ งๆ เพอื่ แกป้ ญั หา คือแตล่ ะสงิ่ มหี น้าทใ่ี น การแกป้ ญั หา



เชงิ กระบวนการ VS เชิงวตั ถุ ภาษาเชงิ กระบวนการ (Procedural Programming Language) โปรแกรมจะแบง่ ออกเปน็ สว่ นย่อยๆ เรยี กวา่ โมดลู (Module) แตล่ ะโมดลู ควรออกแบบใหม้ กี ารทํางานเพยี ง 1 งานเทา่ น้ัน การออกแบบใหแ้ ตล่ ะโมดลู มคี วามเปน็ อสิ ระตอ่ กนั น้ันทาํ ไดย้ าก ภาษาเชงิ วตั ถุ (Object Oriented Programming Language) การพฒั นาโปรแกรมเปน็ การเลยี นแบบการทํางานเชงิ ออปเจค็ การออกแบบใหว้ ตั ถมุ คี วามเปน็ อสิ ระตอ่ กนั ทาํ ไดง้ ่ายดว้ ยคุณสมบตั เิ ชงิ วตั ถุ สามารถนําโปรแกรมกลบั มาใชใ้ หม่ (Reuse) ไดด้ กี วา่ ภาษาเชงิ กระบวนการ

เชงิ กระบวนการ VS เชิงวตั ถุ

เชิงกระบวนการ VS เชงิ วตั ถุ ภาษาเชงิ กระบวนการ ภาษาเชิงวตั ถุ กําหนดขั้นตอนการแกป ญหา กําหนดปญ หาเปน องคป ระกอบ (วัตถ)ุ โปรแกรมและขอ มลู อยูคนละสว นกัน เอาสวนโปรแกรมและขอมลู ไวด ว ยกัน ออกแบบจากลางข้ึนบน ออกแบบเปนวัตถุ แกไขงายเพราะแตล ะสวนไมม ีความสัมพันธก ัน การแกไ ขไมก ระทบสว นอืน่ ๆของโปรแกรมเพราะวตั ถุจะมีค วามสมบรู ณในตวั เอง

แนวความคิดภาษาเชิงวัตถุ การพัฒนาโปรแกรมท่ใี ชวตั ถุเปนเคร่ืองมือโดยทีว่ ัตถุน้นั มลี ักษณะพืน้ ฐานดังน้ี คลาส (Class) & วตั ถุ (Object) การหอ หมุ (Encapsulation) การสบื ทอดคณุ สมบัติ (Inheritance) การพอ งรปู (Polymorphism)

แนวความคดิ ภาษาเชิงวัตถุ คลาส (class) คือตน้ แบบของวตั ถุ การจะสร้างวตั ถขุ ้นึ มาอยา่ งหน่ึงจะตอ้ ง สร้างคลาสข้นึ มาเปน็ โครงสร้างตน้ แบบสาํ หรบั วตั ถกุ อ่ นเสมอ วตั ถหุ รือออบเจค็ (object) คอื สง่ิ ท่ปี ระกอบไปดว้ ยคณุ สมบตั ิ 2 ประการ คอื คุณลักษณะ และพฤตกิ รรม คุณลกั ษณะ (attribute หรอื data member) คอื สง่ิ ทบี่ ง่ บอกลักษณะท่ัวไป ของวตั ถุ พฤตกิ รรม (behavior หรอื method) คอื พฤตกิ รรมท่ัวไปขอวตั ถทุ ี่สามารถ กระทาํ ได้

แนวความคดิ ภาษาเชิงวตั ถุ







Access Modifier  คือ ระดบั ในการเข้าถึง Class, Attribute, Method และ อ่ืน ๆ ในภาษาเชงิ วตั ถุ โดยมีประโยชน์อยา่ งมากในเร่ืองของการกาํ หนด ระดบั การเขา้ ถงึ สทิ ธิในการเข้าใชง้ าน การซ้อนข้อมูล และอนื่ ๆ  Public  เปน็ การประกาศระดบั การเขา้ ถงึ ท่ีเข้มงวดน้อยทส่ี ดุ หรือกล่าวไดว้ า่ ใคร ๆ ก็สามารถเข้าถงึ และเรียกใชง้ านได้ Protected  เปน็ การประกาศระดบั การเขา้ ถงึ ที่เกีย่ วข้องกบั เรื่องการสบื ทอด (Inheritance) คลาสท่ีอยู่ในแพ็กเกจเดยี วกันกบั คลาสท่ถี กู กําหนด modifier เปน็ protected จะสามารถเรียกใชง้ านสมาชกิ ของคลาสท่ีถูกกําหนดเปน็ protected ได้ Private เปน็ การประกาศระดบั การเขา้ ถึงทีเ่ ข้มงวดที่สดุ กลา่ วคือ จะมีแตค่ ลาสของ ตัวมนั เองเท่าน้ันท่มี สี ทิ ธ์ิใชง้ านได้

การหอ่ หมุ้ (Encapsulation) • เซนง่ึ ทเขือ่ ปเปอาํงนใจดนกหาีขผรกภ อละขางทบยอกวาํ นมาในรลูอหกหจกเากะอไรถดิหมซกู คสมุ อาวคนมาือรมาสารายถมลทาะาํรเอกถยีาสรดรเากปงาลครยี่ วทนาาํ มแงปานลง



การสบื ทอดคุณสมบตั ิ (Inheritance) หลกั การของ inheritance คือ ทําการสรางสิ่งใหมข้นึ ดว ยการสืบทอด หรือรบั เอา (inherit) คุณสมบตั บิ างอยางมาจากสิ่งเดิมทมี่ ีอยู แลว โดยการสรางเพ่ิมเติมจากสิ่งทม่ี อี ยแู ลวไดเ ลย ขอ ดขี องการ inheritance คอื จากการท่ีสามารถนําสง่ิ ท่ีเคยสรา งขน้ึ แลวนํากลบั มาใชใ หม (re-use) ได ทาํ ใหช วยประหยัดเวลาการทํางานลง เนื่องจากไมตอ งเสียเวลาพัฒนาใหมห มด

คลาสแม่ (Superclass) คลาสลกู (Subclass)

Employee

คยี ์เวริ ด์ THIS & SUPER คีย์เวริ ์ด this การใชค้ ีย์เวริ ์ด this คอื เมื่อตอ้ งการเรียกใชง้ านคอนสตรัคเต อร์อืน่ ๆ ท่ีอยูภ่ ายในคลาสเดยี วกนั คยี ์เวริ ์ด super เมอื่ ตอ้ งการเรียกคอนสตรัคเตอร์ของคลาสแม่ใหท้ าํ งาน คีย์เวริ ์ด super ในการเรียกใชง้ านคอนสตรัคเตอร์ของคลาสแมจ่ ะตอ้ งทาํ การเรียกที่บรรทดั แรกสดุ ของคอนสตรคั เตอร์น้ันๆ เทา่ น้ัน

การพองรปู (POLYMORPHISM) Polymorphism เกดิ จาก poly (หลากหลาย) + morphology (รูปแบบ) ในทางโปรแกรมคือการท่เี มธอดชอื่ เดียวกนั สามารถรับอาร์กวิ เมนตท์ ่ีแตก ต่างกนั ได้หลายรูปแบบ โดยเมธอดนี้จะถกู เรียกวา่ overload method (เมธ อดถูกโอเวอร์โหลด)

OVERLOADING & OVERRIDING METHOD Overloading method คือ เมธอดทีม่ ชี อ่ื เหมอื นกนั และอย่ภู ายในคลาส เดยี วกนั สง่ิ ทแ่ี ยกความแตกตา่ งของเมธอดทเี่ ปน็ overload method คอื พารามเิ ตอร์ (เปน็ ผลมาจากคณุ สมบตั ิ OO คือ polymorphism)

Class & Object คลาส (class) คือ ตน้ แบบของวตั ถุ หรือ เปน็ แมแ่ บบสาํ หรับวตั ถุ (Template, Prototype) วตั ถุ (Object) คือ สง่ิ ท่ถี ูกสร้างข้ึนจากคลาส

❑ ตวั อยา่ งการสรา้ ง Class และ Properties public class Employee{ private String id; private String name; private double salary; Modifier Data Type Name }

Method เปน็ กลไกท่กี ําหนดพฤติกรรมใหก้ ับคลาส ???

Method เปน็ กลไกที่กําหนดพฤติกรรมใหก้ บั คลาส Modifier Return Type Method Name Parameter public void setFirstName ( String name ){ this.name = name; Statements }

Modifier Class Name Parameter public Bicycle ( ) { Statements ownerName = “Unassigned”; } Constructor เปน็ Method พิเศษที่จะถกู ส่งั ใหท้ าํ งานโดยอัตโนมตั ิ เม่อื มีการ สร้างวตั ถุข้ึน เพอื่ กาํ หนดคา่ เริ่มตน้ ใหก้ บั ตวั แปรคลาสของวตั ถุ - มชี อ่ื เหมอื นกบั ชอื่ คลาส - Method มกี ารคืนค่ากลบั แต่ Constructor ไมม่ กี ารคืนค่ากลบั - ประกาศการเข้าถึงเปน็ แบบ public

Encapsulation การหอ่ หมุ้ คอื กระบวนการซ่อนรายละเอยี ดการทาํ งานและขอ้ มลู ไว้ ภายในไมใ่ หภ้ ายนอกสามารถมองเหน็ ได้ เพอื่ ไมใ่ หภ้ ายนอกสามารถทํา การเปลี่ยนแปลง แกไ้ ข หรอื สรา้ งความเสยี หายใหก้ บั สง่ิ ตา่ งๆ ท่ีอยู่ ภายในได้

การนํา ACCESS MODIFIER มาใช้งาน Access ใชไดท ้งั หมด package เดียวกัน ตาง package กัน ตา ง package กัน แตเปน คลาสเดียวกนั Modifier คลาสแม คลาสลกู กัน ✔ ✔ ✔ public ������ ������ ✔ ✔ protected package ������ ������ ������ ������ private ������ ������ ������ ✔✔✔✔

Non-access modifier: static ใชก้ ําหนดหน้า Method หรือตวั แปรเพ่อื ใหเ้ ปน็ แบบ static การกาํ หนดให้ method เปน็ static เรียกวา่ static method จะทาํ ใหเ้ ราสามารถ เรียกใชง้ าน method น้ันโดยไม่ต้องสร้างออปเจ็ค การกาํ หนดใหข้ อ้ มลู เปน็ static เรียกวา่ static attribute จะทาํ ใหเ้ ราสามารถ เรียกใชง้ านโดยไม่ต้องสร้างออปเจ็คข้นึ มากอ่ น

Inheritance การนิยามคลาสใหมจ่ ากรูปแบบของคลาสทมี่ อี ยู่แล้ว โดยคลาสใหมจ่ ะนํา attribute และ method ของคลาสเดมิ มาใชไ้ ด้ • สามารถนําโปรแกรมเดมิ มาพฒั นาเพมิ่ เตมิ ใหมไ่ ด้งา่ ยข้นึ (re-use) ประหยดั เวลา • ทาํ ใหโ้ ปรแกรมแตล่ ะโปรแกรมมขี นาดเล็ก ซ่ึงทาํ ใหง้ า่ ยตอ่ การเข้าใจ และปรับปรุ งแก้ไข • สง่ ผลใหเ้ กิด Overriding method คอื เมธอดของคลาสลูก (subclass) ทมี่ ชี อื่ เหมอื นกบั เมธอดของคลาสแม่ (superclass)

Employee -> Programmer

modifier: final final เปน็ คยี เ์ วริ ์ดหน่ึงในภาษาจาวา สามารถทจี่ ะกาํ หนดคยี เ์ วริ ์ด final น้ีใหก้ บั class , method , attribute final ใหค้ ลาส จะทาํ ใหค้ ลาสน้ันไมส่ ามารถมี subclass ได้ final ใหเ้ มธอด จะทาํ ใหเ้ มธอดน้ันไมส่ ามารถ override method น้ันได้ final ให้ data หรอื attribute จะทาํ ใหเ้ ปน็ คา่ คงท่ี (constant)

Polymorphism “ ข้อความเดียวกนั แตก่ ระบวนการทาํ งานภายในแตกตา่ งกัน น้ัน เรียกว่า การพอ้ งรูป หรือ polymorphism ” กา

คุณสมบตั กิ ารพอ้ งรูป คอื คณุ สมบัติทสี่ ามารถ ตอบสนองต่อ Method เดยี วกันด้วยวธิ ีการที่ตา่ ง กันและสามารถกาํ หนด object ไดห้ ลายรูปแบบ ขอ้ ดี คอื ทําใหโ้ ปรแกรมสามารถปรับเปลี่ยน หรือเพ่มิ เติมได้ง่ายข้ึน

การโอเวอรโ์ หลดเมธอด (Method overloading) เปน็ การนิยามคลาสท่ี ประกอบดว้ ยเมธอดหลายเมธอดทมี่ ีชอ่ื เหมอื นกันจะต้องมหี น้าทเี่ หมอื นกนั แตต่ า่ งกนั ในสว่ นของรายการพารามเิ ตอร์ การโอเวอร์ไรดง้ิ เมธอด (Method Overriding) เปน็ การกําหนดการทํา งานใหก้ บั เมธอดท่สี บื ทอด มาจากการถา่ ยทอดคณุ สมบตั ิ (Inheritance)

Abstract Class abstract เปน็ คีย์เวิร์ดในภาษาจาวา สามารถกําหนดคีย์เวริ ์ด abstract น้ีใหก้ บั คลาส หรือเมธอด ก็ได้ abstract method คอื เมธอดว่างเปลา่ ทีย่ ังไมไ่ ดม้ กี ารกําหนด รายละเอียดการทาํ งานลงไป จะถกู กําหนดรายละเอียดลงไป ภายหลงั โดยคลาสลูกทไี่ ด้รับการสบื ทอดจากคลาสของ abstract method เหล่าน้ัน

Abstract Method abstract class หากคลาสใดก็แล้วแต่ทป่ี ระกอบไปด้วยเมธอดทเี่ ปน็ abstract method เพียงเมธอดเดยี ว จะตอ้ งประกาศคลาสน้ันเปน็ abstract ด้วย กฎของ abstract หากคลาสใดสบื ทอดมาจาก abstract class คลาสน้ัน จะต้องทาํ การระบเุ มธอดทุกเมธอดที่เปน็ abstract method ใน abstract class ไวเ้ สมอ (ไม่กําหนดรายละเอยี ดก็ได้แต่จะ ตอ้ งมกี ารเขยี น abstract method ทุกเมธอดลงไปในคลาสน้ันด้วย)

อนิ เทอรเ์ ฟซ (Interface) interface มหี ลกั การคลา้ ยกับ abstract class คอื สร้างอินเทอร์เฟซ ข้นึ มากเ็ พ่ือกําหนดโครงสร้างของเมธอดทจ่ี ําเปน็ ใชง้ านข้นึ มาแตย่ ังไมไ่ ด้ กําหนดรายละเอยี ดการทาํ งานใดๆ ลงไปใหก้ บั เมธอดน้ัน (abstract method) เมธอดในอนิ เทอร์เฟซจึงเปน็ เมธอดทว่ี า่ งเปล่า ซ่ึงในภายหลังจึง มีการกําหนดรายละเอยี ดของเมธอดเหลา่ น้ันลงไป โดยถกู กาํ หนดโดยคลา สที่เรียกใชอ้ ินเทอร์เฟซน้ันๆ

Interface กบั Abstract class ตา่ งกนั อย่างไร เมธอดใน abstract class ไม่เปน็ abstract method กไ็ ด้ แต่เมธอดทุกเมธอดใน interface เปน็ abstract method คลาสทจ่ี ะเรียกใชง้ าน abstract method ใน abstract class จะ ตอ้ งสบื ทอดคณุ สมบัตไิ ปจาก abstract class น้ัน แลว้ จึงทําการ สร้างเมธอดของตวั เองข้ึนมาใหม้ ีชอ่ื เดียวกับ abstract method ใน abstract class โดยกําหนดรายละเอยี ดการทํางานใหก้ ับ abstract method เหล่าน้ันตามตอ้ งการ แตค่ ลาสท่จี ะเรียกใชง้ านเมธอดในอนิ เทอร์เฟซไม่จําเปน็ ตอ้ งมีค วามสมั พันธ์ใดๆ กับอนิ เทอร์เฟซท้งั สน้ิ


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook