1 / 38

บทที่ 2

บทที่ 2. การเขียนโปรแกรมเชิงวัตถุ Object-Oriented Programming. วัตถุประสงค์การเรียนรู้. เมื่อจบบทนี้แล้วผู้เรียนสามารถ รู้ถึงหลักการ abstraction, encapsulation และ packages นิยาม class,member,attribute,method,constructor และ packages เข้าใจ modifier แบบ private และ public

palmer-luna
Download Presentation

บทที่ 2

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. บทที่ 2 การเขียนโปรแกรมเชิงวัตถุ Object-Oriented Programming โดย วชิราวุธ ธรรมวิเศษ

  2. วัตถุประสงค์การเรียนรู้วัตถุประสงค์การเรียนรู้ • เมื่อจบบทนี้แล้วผู้เรียนสามารถ • รู้ถึงหลักการ abstraction, encapsulation และ packages • นิยาม class,member,attribute,method,constructor และ packages • เข้าใจ modifier แบบ private และ public • สามารถเรียกใช้งาน method ของ object • ใช้งาน Java API online document ได้ โดย วชิราวุธ ธรรมวิเศษ

  3. พัฒนาการของ Software Engineering โดย วชิราวุธ ธรรมวิเศษ

  4. การ วิเคราะห์ และ ออกแบบ • การวิเคราะห์ เพื่อให้รู้ว่า อะไร ที่ระบบต้องการที่จะทำ WHATสร้าง Model วิเคราะห์ actors และ activities • การออกแบบ เพื่อให้รู้ว่า ระบบจะทำงานอย่างไร HOW • ออกแบบความสัมพันธ์ และ การติดต่อกันระหว่าง วัตถุ และ actor ในระบบ • ค้นหา abstraction ที่จะช่วยแก้ปัญหา หรือ ทำให้ปัญหาง่ายขึ้น โดย วชิราวุธ ธรรมวิเศษ

  5. Abstraction • สร้างการสื่อความหมายที่เป็นนามธรรม แทน การอธิบายกระบวนการในชีวิตประจำวัน เรา ใช้ชื่อ แทนสิ่งต่าง ๆ เพื่ออธิบายลักษณะที่ซับซ้อน • เป็นแนวคิดการซ่อน กระบวนการทำงานที่ซับซ้อนไว้ภายใน (Implements) และ เปิดเผยเฉพาะส่วนติดต่อใช้งาน (Interface) Implementation Interface โดย วชิราวุธ ธรรมวิเศษ

  6. Abstraction • Functions - เขียน algorithm ครั้งเดียว สามารถใช้กับหลายๆ เหตุการณ์ void push(data, x) data1 int pop(data) data2 ตัวอย่าง Stack มี ฟังก์ชัน push,pop ซึ่งสามารถใช้กับ data หลายๆ อันได้ โดย วชิราวุธ ธรรมวิเศษ

  7. Abstraction • Objects –เป็นการรวมเอา ข้อมูล หรือ คุณลักษณะ และ ฟังก์ชัน หรือ พฤติกรรม ที่สัมพันธ์กัน ไว้ใน class Class stack • data ข้อมูล และ ฟังก์ชันถูกรวมเข้าด้วยกัน ทำให้มีการจัดการที่ดีขึ้น • void push(x) • int pop() โดย วชิราวุธ ธรรมวิเศษ

  8. Abstraction • Framework and API • เป็นกลุ่มของ Object ขนาดใหญ่ • ใช้เพื่อสนับสนุนการปฏิบัติการที่ซับซ้อน โดย วชิราวุธ ธรรมวิเศษ

  9. Classes as Blueprints for Objects • ในอุตสาหกรรมพิมพ์เขียว จะใช้เป็นตัวกำหนดในการสร้างชิ้นงานต่างๆ • ใน Software นั้น คลาส จะเป็นตัวอธิบายลักษณะของออปเจ็ค • ข้อมูล data (Attribute) • พฤติกรรม behaviors (Method) • Class หนึ่ง class สามารถใช้สร้าง ออปเจ็คได้หลายออปเจ็ค • ออบเจ็คแต่ละอัน จะมีข้อมูลของตัวเอง • ออบเจ็คจากคลาสเดียวกันใช้พฤติกรรมเดียวกัน โดย วชิราวุธ ธรรมวิเศษ

  10. คุณสมบัติหลักของ OOP • Encapsulation • Inheritance • Polymorphism จาวาจะสนับสนุนคุณสมบัติเหล่านี้ โดย วชิราวุธ ธรรมวิเศษ

  11. การนิยาม Class ของจาวา • ไวยกรณ์ <modifiers> class <class_name>{ [attribute declaration] [constructor declaration] [method declaration] } • Example public class Vehicle{ private double maxLoad; public void setMaxLoad(double value){ maxLoad = value; } } โดย วชิราวุธ ธรรมวิเศษ

  12. การนิยาม Attributes • ไวยกรณ์ • [<modifiers>] type name [= value ]; • Example public class Foo{ private int x; public float y = 100.0F; String name = “KKU“; } โดย วชิราวุธ ธรรมวิเศษ

  13. การนิยาม Method • ไวยกรณ์ • [<modifiers>] type name([ argument list ]){ คำสั่ง } • Example public class Foo{ private int x; public void setX(int newx){ x = newx; } public int getX(){ return x; } } โดย วชิราวุธ ธรรมวิเศษ

  14. การใช้ สมาชิกในออปเจคต์ • ใช้สัญลักษณ์ dot <object>.<member> • ตัวอย่าง public class Test { public static void main(String[] args) { Foo f = new Foo(); f.setX(100); System.out.println("X is " + f.getX() ); } } โดย วชิราวุธ ธรรมวิเศษ

  15. Information Hiding • ปัญหา class MyDate{ public int day; public int month; public int year; } ไม่สามารถควบคุม ความถูกต้องของข้อมูลได้ เพราะค่าตัวแปรสามารถถูก เปลี่ยนได้โดยตรง เช่น d.day = 32; โดย วชิราวุธ ธรรมวิเศษ

  16. Information Hiding • วิธีแก้ไข ควบคุมความถูกต้องของข้อมูลได้ เพราะค่าตัวแปรสามารถไม่ถูก เปลี่ยนได้โดยตรง เช่น d.setMonth(13); • class MyDate{ • private int day, month, year; • public int getDay(){ return day;} • public int getMonth(); • public int getYear(); • public void setDay(int n); • public void setMonth(int n){ • if(n>12)n=12; • month = n; • } • public void setYear(int n); • } โดย วชิราวุธ ธรรมวิเศษ

  17. Access Control • เราจะควบคุมการเข้าถึง สมาชิกใน Class โดยใช้ Modifier • public หมายถึง สมาชิกนั้นเปิดเผยให้เข้าถึงได้จาก class ภายนอกอื่นทั้งหมด • private หมายถึง สมาชิกนั้นไม่อนุญาตให้เข้าถึงจาก class ภายนอก • (default) ไม่ระบุ modifier หมายถึง อนุญาตให้เข้าถึงสมาชิกนั้น เฉพาะ class ที่อยู่ใน package เดียวกัน โดย วชิราวุธ ธรรมวิเศษ

  18. Encapsulation • Hides the implementation details of class • Forces the user to use an interface to access data • Make the code more maintainable • class MyDate{ • private int day, month, year; • public int getDay() • public int getMonth(); • public int getYear(); • public void setDay(int n); • public void setMonth(int n); • public void setYear(int n); • } โดย วชิราวุธ ธรรมวิเศษ

  19. Declaring Constructors • [<modifier>] <classname> ([argument list]){ คำสั่ง } • ตัวอย่าง โดย วชิราวุธ ธรรมวิเศษ

  20. Default Constructors • ถ้าไม่มี Constructor จะไม่สามารถสร้าง Object ได้ • ดังนั้นทุกคลาสจะต้องมี Constructor อย่างน้อย 1 อัน • ถ้าไม่เขียน Java จะสร้าง constructor เปล่า ๆ ให้ อัตโนมัติ • เพื่อให้เราสามารถสร้าง instance ของ class ได้ • เรียกว่า Default Constructors โดย วชิราวุธ ธรรมวิเศษ

  21. การสร้างออบเจคต์ Object ในอีกความหมายหนึ่ง คือ ตัวแทนของ Class (Instance of Class) เราจึงเรียกกระบวนการสร้าง Object ว่า Instantiating • การประกาศตัวแปร • ใช้คำสำคัญ new เพื่อจองหน่วยความจำ • เรียก Constructor เพื่อสร้าง Object Foo f1 = new Foo( ); Foo f2 = new Foo( ); โดย วชิราวุธ ธรรมวิเศษ

  22. Inheritance • เป็นกลไกที่ใช้ในการสืบทอดคุณสมบัติของ Class • ใช้สร้าง Class ใหม่ โดยการอ้างถึง คุณสมบัติจาก Class เดิม class Person{ String name; String address; } class Student extends Person{ String student_id; String major,faculty; } ในจาวาจะใช้คำสำคัญ extends ในการสร้าง class เพื่อบอกว่า Class นั้น สืบต่อ หรือ ขยาย มาจาก Class ใด โดย วชิราวุธ ธรรมวิเศษ

  23. Class java.lang.Object • ในจาวา Class ทั้งหมดจะสืบทอด (extends) มาจาก class Object • ถ้าเราสร้าง Class ใหม่ โดยไม่ระบุ extends จาวาจะถือว่า class นั้น extends จาก class Object ซึ่งอยู่ใน package java.lang โดยอัตโนมัติ • การประกาศ • class Foo { } จึงมีค่าเท่ากับ • class Foo extends Object { } โดย วชิราวุธ ธรรมวิเศษ

  24. Polymorphism • เป็นคุณสมบัติที่ทำให้ Object ที่เป็นจากต่าง Class กันสามารถตอบสนองต่อคำสั่งเดียวกันได้ • ตัวอย่างในชีวิตประจำวัน เช่น • แชมพู น้ำปลา น้ำมันพืช เป็นวัตถุจากคนละ classแต่เมื่อจะใช้งานจะใช้แบบเดียวกัน คือ เปิดฝา และ เท มันอาจจะให้ผลที่ต่างกัน หรือเหมือนกัน • เมื่อเราเห็นสิ่งของ ลักษณะคล้ายกัน เราก็สามารถใช้งานได้ โดยใช้คำสั่งเดียวกัน โดย วชิราวุธ ธรรมวิเศษ

  25. Polymorphism • โดย Abstraction สามารถมอง Object ที่เป็นคนล่ะ Class เป็นสิ่งที่เหมือนกันได้ ทำให้เราสามารถกระทำกับ สิ่งที่ต่างประเภทกันด้วยวิธีการเดียวกัน • เมื่อเรามองว่า แชมพู น้ำปลา น้ำมันพืช เป็นขวดเหมือนกัน เราก็จะใช้งานมันได้ด้วยวิธีเปิดฝา และ เท เหมือนกัน โดย วชิราวุธ ธรรมวิเศษ

  26. Polymorphism • ในอีกมุมหนึ่ง Object หนึ่ง ก็สามารถมีพฤติกรรมตอบสนอง ต่อข้อมูลที่ต่างชนิดกันด้วยวิธีที่ต่างกันได้เช่นกัน • เช่น การกินอาหารของมนุษย์ การกินอาหารทุกชนิดจะเข้าทางปากเหมือนกัน แต่ใช้วิธีกินแตกต่างกัน และ มีผลที่ต่างกันได้ • กินข้าวราดแกง • กินก๋วยเตี๋ยว • กินขนม • กินยา นั่นคือ กิน มีคุณสมบัติ Polymorphism โดย วชิราวุธ ธรรมวิเศษ

  27. Polymorphism • จึงเป็นการเลียนแบบ พฤติกรรมการตอบสนอง และ การสื่อสารกันระหว่าง Object ต่างๆ ในโลกความจริง มาใช้ในการเขียนโปรแกรม • จาวาจะสนับสนุน Polymorphism ด้วย • Method Overriding • Method Overloading • Interface (ซึ่งจะกล่าวโดยละเอียดในบทต่อไป) โดย วชิราวุธ ธรรมวิเศษ

  28. Method Overriding • การที่ Sub Class ทำการ Implement Method ที่มีใน Parent Class ใหม่ ทำให้ Sub Class สามารถมีพฤติกรรมต่างจาก Parent Class ได้ • ตัวอย่าง การ Override method toString class Foo{ String name; public String toString(){ return “My name is “+name; } } เมื่อเรียกใช้คำสั่ง System.out.println กับ Object จาก class Foo จะได้ผลลัพธ์ เป็น ข้อความจาก Method toString โดย วชิราวุธ ธรรมวิเศษ

  29. Method Overriding • ตัวอย่าง การ Override method toString class Person{ String name; public String toString(){ return “My name is “+name; } } class Car{ String brand,color; public String toString(){ return “Band:“+brand+” Color:”+color; } } Person p = new Person(); Car c=new Car(); …… System.out.println(p); System.out.println( c ); // จะได้ผลต่างกัน โดย วชิราวุธ ธรรมวิเศษ

  30. Source File Layout ในไฟล์ .java จะประกอบด้วย • การประกาศ package ถ้าไม่มีจะถือว่าไม่กำหนด • การประกาศ import ถ้าไม่มี java จะ import ให้เฉพาะ java.lang • การประกาศ class ต้องประกาศ • ไฟล์หนึ่งอาจจะมี class ได้หลาย class • แต่ต้องมี class ที่เป็น public ได้เพียง class เดียว โดย วชิราวุธ ธรรมวิเศษ

  31. Source File Layout ตัวอย่าง โดย วชิราวุธ ธรรมวิเศษ

  32. Software Package • ใช้เพื่อช่วยจัดการระบบ Software ขนาดใหญ่ • ภายใน Package สามารถเก็บ class และ package ย่อยไว้ภายใน • เหมือนกับระบบ Directory ในการจัดการไฟล์ • Package => folder • Class => file โดย วชิราวุธ ธรรมวิเศษ

  33. ประโยค package • package <ชื่อ>[.<ชื่อย่อย] ; • ตัวอย่าง • package kku; • package kku.game.ox; • package kku.app.talk; • ในไฟล์ .java หนึ่งไฟล์จะระบุ package ได้เพียง 1 อัน โดย วชิราวุธ ธรรมวิเศษ

  34. ประโยค import • import package[.subpackage].classname; • import package[.subpackage].*; • ตัวอย่าง • import kku.*; • import kku.game.ox.Game1; • import kku.game.ox.*; โดย วชิราวุธ ธรรมวิเศษ

  35. Directory Layout and Packages • เมื่อเรา compile ไฟล์ class จะถูกเก็บแยกลงใน directory ตามชื่อ package C:\Kku\ game\ ox\ Game1.class app\ talk\ Talk.class Client.class โดย วชิราวุธ ธรรมวิเศษ

  36. ทวนคำศัพท์ • Class • Object , Instance of class • Attribute • Method • Constructor • Package โดย วชิราวุธ ธรรมวิเศษ

  37. การใช้งาน Java API Document • เป็น HTML document • เอกสารอธิบาย รายละเอียดของ class ที่อยู่ใน Java API • http://www.cs.kku.ac.th/java/docs/ • http://java.sun.com โดย วชิราวุธ ธรรมวิเศษ

  38. Java API Document โดย วชิราวุธ ธรรมวิเศษ

More Related