1 / 107

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

Lec07 :: OOP วิชา :: การเขียนโปรแกรมเชิงวัตถุ. โดน อ. นัฐพงศ์ ส่งเนียม xnatapong@hotmail.com http://www.siam2dev.com. Agenda. Imparative Programming : การเขียนโปรแกรมแบบดั้งเดิม OOP Programming : การเขียนโปรแกรมเชิงวัตถุ Imparative VS OOP : เปรียบเทียบข้อแตกต่าง

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lec07 :: OOPวิชา :: การเขียนโปรแกรมเชิงวัตถุ โดน อ. นัฐพงศ์ ส่งเนียม xnatapong@hotmail.com http://www.siam2dev.com

  2. Agenda • Imparative Programming : การเขียนโปรแกรมแบบดั้งเดิม • OOP Programming: การเขียนโปรแกรมเชิงวัตถุ • Imparative VS OOP: เปรียบเทียบข้อแตกต่าง • Fundamental of OOP : หลักการสำคัญของ OOP • Class : ความหมายของ Object • Object : ความหมายของ class • Inheritance • Polymorphism • Overloading

  3. Imperative Top-down design Procedure-oriented Algorithm Share global data Program-data separation Data transportation Single flow Object-oriented Bottom-up Object-oriented Behavior Information hiding Encapsulation Communication with messages Multiple objects Imperative VS Object-oriented

  4. การเขียนโปรแกรมแบบ imparative OOP Imparative

  5. ข้อดีของ OOP • เข้าใจง่าย เพราะการทำงานเปรียบเสมือนการจำลองเหมือนในโลกจริง โดยอาศัยการมองทุกอย่างเป็น object ซึ่งแต่ละตัวมีหน้าที่และความหมายในตัว • บำรุงรักษา และแก้ไขโปรแกรมได้ง่าย • มีความปลอดภัยสูง เพราะจัดการกับ error ได้ดี • นำกลับมาใช้ใหม่ได้ (reusability) ลดขั้นตอนในการเขียนโปรแกรม • โปรแกรมมีคุณภาพสูง ใช้ได้หลาย platform

  6. ข้อเสียของ OOP • เข้าใจยาก สำหรับผู้เริ่มต้นเขียนโปรแกรม หรือถนัดเขียนโปรแกรม แบบ procedural • ทำงานได้ช้ากว่าภาษาโปรแกรมอื่น • ภาษามีความกำกวม ถ้ามีลักษณะ multiple inheritance

  7. หลักการของการพัฒนาซอฟท์แวร์ด้วย Object-Oriented Programming • คือการแบ่งซอฟท์แวร์ออกเป็นส่วนๆ เรียกว่า class โดยการนิยาม class และ object ทั้งนี้เพื่อทำให้สามารถนำส่วนของซอฟท์แวร์นั้นกลับมาเรียกใช้ได้อีก(reuseable) ลดความซ้ำซ้อนและเวลาลงได้ • การทำงานของ class จะถูกกำหนดโดยส่วนอินเตอร์เฟสของ method ส่วนการทำงานของส่วนที่เป็นโค้ต จะไม่ถูกคำนึงถึงในการออกแบบ. ภาษา OOP สนใจเฉพาะข้อมูลที่จะถูกประมวลผลมากกว่าฟังก์ชั่นที่ทำการประมวลข้อมูลนั้น

  8. หลักการที่สำคัญบางประการของ OOP • Class and Subclass • Encapsulate • Inheritance • Polymorphism • Abstract Data Type

  9. เหตุผลที่ OOP มีบทบาทมากขึ้น • ง่าย และรวดเร็ว ทำให้ลดเวลาในการพัฒนาลงไปได้ • เพิ่มปริมาณงานที่ได้ และมีความน่าเชื่อถือมากกว่า • สามารถนำ code กลับมาใช้ได้อีก (เรียกใช้ class) • ทำต้นแบบ (Prototyping) ได้รวดเร็วกว่า • ลดต้นทุนในการสร้าง และบำรุงรักษาซอฟต์แวร์ • การเปลี่ยนแปลงแก้ไข ไม่ทำให้เกิดผลกระทบไปยังภายนอก class

  10. มารู้จักคลาสและวัตถุกันมารู้จักคลาสและวัตถุกัน • คลาสเป็นเหมือนส่วนของแม่พิมพ์ เพื่อบอกลักษณะว่าวัตถุในคลาสนี้มีลักษณะและพฤติกรรมเป็นอย่างไร • วัตถุเป็นสิ่งที่ถูกสร้างขึ้นมาจากคลาสเพื่อใช้งาน กำหนดค่าต่างๆ ส่งข้อความสั่งให้วัตถุทำงาน คลาสสี่เหลี่ยมผืนผ้า คุณสมบัติ:กว้าง, ยาว เมธทอด:คำนวณพื้นที่ วัตถุA:สี่เหลี่ยมผืนผ้า กว้าง 2 ยาว 3 เมธทอด:คำนวณพื้นที่

  11. Class คืออะไร • คือกลุ่ม (category) ของ objects ที่มีคุณสมบัติและพฤติกรรมที่เหมือนกัน โดย class จะต้องประกอบไปด้วย data, behavior และ interface • คือต้นแบบ (prototype) หรือพิมพ์เขียว ที่กำหนดตัวแปรและวิธีการ เพื่อนำไปใช้ได้ในทุก object ของ class

  12. เปรียบเทียบคลาสกับวัตถุเปรียบเทียบคลาสกับวัตถุ

  13. Class ทางบก ยานพาหนะ รถสี่ล้อ รถสิบล้อ รถสองล้อ รถสามล้อ ทางอากาศ ทางบก

  14. Objects • คือ สิ่งใดๆ ก็ตาม ซึ่งมีคุณลักษณะ (State) บ่งบอกถึงความเป็นตัวของมันเองในขณะนั้น และสามารถแสดงพฤติกรรม (Behavior) ของตัวเองออกมาได้ เช่น รถยนต์สีน้ำเงิน : มีความหมายคือ วัตถุประเภทรถยนต์ มีคุณลักษณะของสีเป็นสีน้ำเงิน และมีพฤติกรรมที่แสดงถึงการเคลื่อนที่ และหยุดได้ • หรือกล่าวได้ว่า object ก็คือข้อมูลของ class (เป็นentities ของ class) ซึ่งทุกๆ อย่างจะจัดเป็น objects โดยต้องประกอบไปด้วย • ชื่อ (Identity) • สถานะ (State) คุณสมบัติ หรือค่าของข้อมูล ซึ่งแทนด้วย value • พฤติกรรม (Behavior) ที่ระบุว่าสามารถทำอะไรได้บ้าง ซึ่งแทนด้วย method

  15. ตัวอย่างชนิดของวัตถุและวัตถุตัวอย่างชนิดของวัตถุและวัตถุ :siemens MobilePhone String bandname Button button Screen screen Antenna antenna Simm simNet :ericsson call() receive() hangup() sendSMS() :nokia

  16. Method • คือ function ที่บ่งบอกพฤติกรรมของ object ว่าทำอะไรได้บ้าง กำหนดไว้ใน class โดยต้องประกอบด้วย ชื่อของ method เรียกว่า Identifier   ตามด้วยเครื่องหมายวงเล็บ () โดยในวงเล็บอาจมี parameter list อยู่หรือไม่ก็ได้ เช่น • getBalance() • raiseSalary( float Salary, float Percent )

  17. Constructor Method • คือเมธอดที่ใช้สำหรับสร้าง instance object ของคลาสนั้นๆ โดยที่ ชื่อเมธอดนี้ต้องเหมือนกับชื่อคลาส และใช้สำหรับ initialize ข้อมูลให้กับ instance variable โดยจะไม่มีการถ่ายทอดให้กับ subclass และไม่มีการ return ค่า

  18. Message • คือคำสั่งหรือข้อความที่จะให้ข้อมูลหรือตัวแปรใดทำงาน ก็คือ parameter ในภาษาอื่นที่ไม่ใช่ OOP คือใช้เพื่อนำส่งค่าข้อมูลระหว่าง object โดยใน message นั้นต้องประกอบด้วย • Destination ก็คือชื่อของ object • Method • Parameters

  19. Accessibility • public : เข้าถึงได้ในทุกที่ • private : เข้าถึงได้เฉพาะภายใน class เท่านั้น ไม่รวม sub class • protected : เข้าถึงได้เฉพาะภายใน class และ sub class ที่สืบทอดกันมา (Inherit) • default : ถ้าไม่ระบุ จะเข้าถึงข้อมูลภายใน class และอยู่เพ็กเกจเดียวกัน

  20. Public Class Sub Class

  21. Encapsulate คือ การปิดบัง หรือจำกัดการเข้าถึงข้อมูลบางอย่าง (Information hiding) ที่ไม่จำเป็นต้องให้ส่วนอื่นรับรู้ ยกตัวอย่างเช่น เราจะไม่สนใจหรือมองเห็นได้ว่า เครื่องเล่น CD จะแปลงสัญญาณดิจิตอล ออกมาเป็นเพลงได้อย่างไร เราใช้และติดต่อกับเครื่องแค่ควบคุมการทำงานผ่านแผงควบคุม เช่น เปิด-ปิด เล่น เร่งเสียง เปลี่ยนแทร๊กไปข้างหน้า ย้อนกลับ เป็นต้น โดยเราต้องออกแบบควบคุมกฏเกณฑ์ต่างๆ ของซอฟท์แวร์ให้สอดคล้องกับความเป็นจริง • Encapsulate เป็นคุณสมบัติของ object ซึ่งมีลักษณะดังนี้ • กำหนดขอบเขตที่ชัดเจนให้กับ object • กำหนดอินเตอร์เฟสว่าจะติดต่อกับ object อื่นๆ อย่างไร • ส่วนอิมพลิเมนต์ไม่สามารถเข้าถึงได้ภายนอกขอบเขตของ class

  22. Encapsulate

  23. Inheritance • คือการถ่อยทอดข้อมูล (ซึ่งก็คือ state และ behavior) จาก class ลำดับที่สูงกว่า (super class หรือ parent class) ไปยังลำดับที่ต่ำกว่า (subclass) โดยที่ subclass นั้นสามารถเปลี่ยนแปลง หรือแทนที่ข้อมูล (override) ที่ได้รับการถ่ายทอดมานั้นได้

  24. Class Animal Animal • name • leg • Eat() • Sleep()

  25. Inheritance : สืบทอดคุณสมบัติ • ตัวอย่าง Tiger Class สามารถสืบทอดคุณสมบัติจาก Animal Class Animal Class super Class sub Class

  26. Polymorphisim • การทำให้ message อันหนึ่งสามารถส่งให้ object แต่ละตัวใน class และ subclass ตอบสนองต่อ message อันเดียวกัน ในลักษณะที่เหมาะสบกับ class ของตัวเอง • ยกตัวอย่างเช่น method print นี้สามารถส่งให้ทุก object ของ class และ subclass ที่ทำให้ object นั้นรู้จัก method print และแต่ละ object ที่ต่างกันจะตอบสนองต่อ message นี้ต่างกันออกไป ตามความสามารถในการใช้

  27. Shape Circle Line Rectangle +draw() +erase() +draw() +erase() +draw() +erase() +draw() +erase() Polymorphisim การถ่ายทอดให้เกิดลักษณะของพ้องรูป

  28. โครงสร้างของ Class โปรแกรมที่สร้างจากภาษาจาวา ต้องมีออปเจ็คหรือคลาสอย่างน้อยหนึ่งตัว โดยมีรูปแบบโครงสร้างดังนี้ class Class_Name   {  Data_Member       Method_Member  } //รูปแบบของ Data Member [ Accessibility ] [ final ] [ static ] Data_Type Data_Name เช่น   private static String   stu_name ;

  29. รูปแบบของ Data Member • [ Accessibility ] [ final ] [ static ] Data_Type Data_Name • เช่น   private static String   stud_name ; • Data คือส่วนประกอบส่วนหนึ่งของคลาส ถูกกำหนดเพื่อใช้สำหรับเก็บข้อมูล เช่นคลาส Pen มีดาต้า Color ไว้เก็บข้อมูลสี class Pen { String Color = “red”; // Data Member }

  30. final • final : เป็นคีย์เวิร์ดตัวหนึ่งซึ่งใช้บอกว่าดาต้าตัวนั้นใช้สำหรับเก็บข้อมูล โดยที่ข้อมูลจะไม่สามารถทำการเปลี่ยนแปลงได้ไม่ว่าในกรณีใดๆ ปกติจะใส่คีย์เวิร์ดนี้ไว้เมื่อต้องการให้ดาต้าเก็บข้อมูลที่เป็นข้อมูลที่คงที่ (Constant) ตลอดการทำงานของโปรแกรม • class CircleArea { public static void main(String args[]) { final double pi = 3.14;final double r = 10; System.out.println(“Circle Area = " + pi*r*r); } }

  31. static • static : เป็นคีย์เวิร์ด สำหรับใช้บอกถึงคุณลักษณะพิเศษในการใช้งาน เมื่อมีการกำหนดนำหน้าดาต้าใดๆ แล้ว ดาต้านั้นจะมีคุณลักษณะดังนี้  • ดาต้า จะถูกโหลดลงในหน่วยความจำและพร้อมที่จะถูกใช้งานในทันทีเมื่อมีการอ้างถึง ตามข้อกำหนดของระดับการเข้าถึง (Accessibility)• ดาต้า จะอยู่ในหน่วยความจำเพียงตัวเดียว ไม่มีการ copy static method ไปกับ instance object คือจะผูกติดอยู่กับคลาสเท่านั้น ดังนั้นจึงสามารถใช้ดาต้าเป็นที่เก็บข้อมูลรวมของกลุ่มคลาสเดียวกันได้• ไม่สามารถเรียกใช้ instance variables หรือ instance method ได้• ไม่สามารถใช้คีย์เวิร์ด this ได้

  32. โครงสร้างของ Object • เมื่อกล่าวถึงคำว่าออปเจ็คทุกคนจะเข้าใจว่าเป็นชื่อเรียกที่ใช้เรียกส่วนที่สร้างจากโครงร่างของคลาส ซึ่งออปเจ็คถูกสร้างโดยการใช้คำสั่งในภาษาจาวาสร้างขึ้น จากขั้นตอนสองขั้นตอน คือ 1. ขั้นตอนประกาศชื่อตัวแปรอ้างถึง(Reference Variable) 2. ขั้นตอนการสร้างอินสแตนซ์ (Instance of Class)

  33. 1. ขั้นตอนประกาศชื่อตัวแปรอ้างถึง (Reference Variable) • คือขั้นตอนที่ใช้กำหนดชื่อตัวแปรเพื่อใช้ในการอ้างถึงไปยังพื้นที่ในหน่วยความจำ โดยพื้นที่ส่วนนี้เป็นส่วนที่จัดเก็บอินสแตนซ์ที่สร้างขึ้นมาในภายหลัง โดยมีรูปแบบการกำหนดดังนี้ • Class_Name   Reference_Name • Class_Name : คือชื่อของคลาสซึ่งอ้างถึงด้วย Reference_Name ได้ • Reference_Name : คือชื่อตัวแปรที่ถูกกำหนดขึ้นโดยผู้เขียนโปรแกรม

  34. 2. ขั้นตอนการสร้างอินสแตนซ์ (Instance of Class) • อินสแตนซ์ คือพื้นที่ในหน่วยความจำซึ่งสร้างตามแบบโครงร่างของคลาสใดๆ ดังนั้นอินสแตนซ์คือพื้นที่ที่สามารถเก็บข้อมูลและประมวลผลตาม ส่วนที่สามารถประมวลผลได้นั่นเอง มีรูปแบบการสร้างดังนี้

  35. new Class_Constructor(Parameter_List  ) • - new : คือคีย์เวิร์ดของภาษาจาวา เพื่อเป็นคำสั่งให้มีการจัดสรรพื้นที่หน่วยความจำ ตามโครงสร้างของคลาสจากที่กำหนดไว้แล้วในขั้นตอนที่ผ่านมา • - Class_Constructor : คือเมธรอดของคลาสที่เป็นคอนสตรักเตอร์ (เมธรอดที่เป็นคอนสตรักเตอร์มีชื่อเดียวกับชื่อคลาสเสมอ) โดยคลาสหนึ่งคลาสสามารถมีเมธรอดคอนสตรักเตอร์นี้ได้หลายเมธรอด (ชื่อเดียวกันแต่พารามิเตอร์ต่างกัน) • -Parameter_List : คือพารามิเตอร์ (ตัวแปรหรือค่าคงที่ใดๆ) ที่ผ่านข้อมูลเข้าไปสู่เมธรอดคอนสตักเตอร์ ซึ่งจำนวนหรือชนิดข้อมูลที่เป็นพารามิเตอร์ ขึ้นอยู่ว่าผู้เขียนโปรแกรมเรียกใช้คอนสตรักเตอร์แบบไหน

  36. ตัวแปรอ้างถึงและอินสแตนซ์ (Reference variable and Instance) • ในภาษาจาวาตัวแปรอ้างถึงและอินแตนซ์มีความสัมพันธ์ซึ่งกันและกัน  กล่าวคือตัวแปรอ้างถึงถูกกำหนดขึ้น เพื่อประโยชน์ในการอ้างไปยังตำแหน่งของอินสแตนซ์ที่อยู่ในหน่วยความจำ โดยในหน่วยความจำบนเครื่องคอมพิวเตอร์ บางครั้งสามารถสร้างอินสแตนซ์ได้หลายๆอินสแตนซ์ของการทำงานแต่ละครั้ง จึงจำเป็นต้องใช้ชื่อตัวแปรอ้างถึงเพื่อให้สามารถเข้าใช้งานดาต้าและเมธรอดในอินสแตนซ์ได้ ตัวอย่างเช่น

  37. อินสแตนซ์ (instance) • ถ้าพิจารณาถึงลูกโป่งสวรรค์ เปรียบกับคนขายลูกโป่งสวรรค์ตามงานทั่วไป ถ้าให้ลูกโป่งแต่ละลูกเป็นอินสแตนซ์ และให้เชือกแต่ละเส้นคือตัวแปรอ้างถึง ดังนั้นเมื่อต้องการลูกโป่งลูกใดๆ ก็ให้หยิบเส้นเชือกขึ้นมาทำให้รู้ว่าเป็นเชือกที่ผูกอยู่กับลูกโป่งลูกใด instatnce reference

  38. ตัวอย่าง การสร้างอินสแตนซ์ • หรือจากคำสั่ง  Integer x = new Integer(237)หมายถึงกำหนดตัวแปรอ้างถึงชื่อ x โดยมีการอ้างถึงไปยัง อินสแตนซ์ที่เกิดจากคลาสที่ชื่อ Integer และให้อินสแตนซ์นั้นเก็บค่า 237 ไว้ โดยที่ Integer คือชื่อคลาสที่ใช้สำหรับจัดการข้อมูลตัวเลขจำนวนเต็ม

  39. ต.ย. การสร้าง คลาส และ ออบเจ็กต์ 10 class rectangle { int w=5; int h=10; public double CalArea() { return w*h; } } public class testRec { public static void main(String args[]) { rectangle r = new rectangle(); System.out.println(r.CalArea()); } }; 5

  40. ต.ย. การสร้าง คลาส และ ออบเจ็กต์ rectangle & constructor 10 class rectangle { int width; int height; rectangle(int w , int h) { width = w; height = h; } public double CalArea() { return width*height; } } public class testRec { public static void main(String args[]) { rectangle r = new rectangle(5,10); System.out.println(r.CalArea()); } }; 5

  41. Inheritance class father { void homeaddr(){ System.out.println(“lp”); } } class child extends father { public static void main (String args[]) { homeaddr(); } }

  42. Encapsulation class friend { private int val; public int getter(){ return this.val; } public void setter(int a) { this.val=a; } } class child { public static void main (String args[]) { friend x = new friend(); x.setter(5); System.out.println(x.getter()); } }

  43. ต.ย. เรียก object จากอีก class หนึ่งในแฟ้ม x.java เดียวกัน แต่ไม่มี constructor :: มี 2 กล่อง ให้เรียก object จากอีกกล่องมาทำงาน แสดงวิธีเรียก 2 วิธี class xxx { void prtxx() { System.out.println("xx"); } } class x { public static void main(String args[]) { System.out.println("x"); new xxx().prtxx(); xxx a = new xxx(); // ไม่มี constructor ใน xxx a.prtxx(); } } // Result of this program // x // xx // xx

  44. ต.ย. Constructor • Inheritance และ constructor : run constructor ของ superclass ตามด้วย subclass :: ปกติ default constructor คือ object ที่มีชื่อเดียวกับ class และไม่มีส่วนขยายใด ๆ :: a.java มี constructor เป็นโปรแกรมที่ compile ผ่าน run ไม่ได้ แต่มีไว้ให้ถูกเรียกใช้ได้ :: b.java มี constructor และทำงานภายใต้ main เรียก constructor ทั้ง 2 มาทำงาน :: constructor คือ default object จะส่งค่าให้ constructor ก็ได้ :: การแปล b.java จะเรียก a.java มาแปลด้วยถ้าไม่พบ a.class แต่ถ้าพบ และ a.java ไม่เปลี่ยน ก็จะไม่แปล a.java ใหม่

  45. // a.java public class a { a() { System.out.println("a constructor"); } } // b.java public class b extends a { b(int i) { System.out.println("b constructor " + i); } public static void main (String[] args) { b xxx = new b(100); } } // Result of this program // a constructor // b constructor 100

  46. Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control Object Oriented Programming Nattapong Songneam

  47. Overloading

  48. publicvoid deposit(double amount); publicvoid deposit(int amount); publicvoid deposit(double amount, double interest); publicboolean deposit(double amount); Overloading Methods • การประกาศเมทธอดซ้ำซ้อน (Overloading Methods) • คือ วิธีการเชิงวัตถุ ที่มีไว้เพื่อนำชื่อเมทธอด (Methods Name) กลับมาใช้ใหม่ (reuse) • ภาษาโปรแกรมจาวาสนับสนุน Overloading Methods โดย • อนุญาตให้ประกาศเมทธอดที่มีชื่อเดียวกันซ้ำกันได้ แต่มีเงื่อนไขดังนี้ • ชนิด หรือ จำนวน หรือ ลำดับของ argument จะต้องต่างกัน • return type ของเมทธอดจะเหมือนกัน หรือแตกต่างกันก็ได้

More Related