380 likes | 528 Views
บทที่ 2. การเขียนโปรแกรมเชิงวัตถุ Object-Oriented Programming. วัตถุประสงค์การเรียนรู้. เมื่อจบบทนี้แล้วผู้เรียนสามารถ รู้ถึงหลักการ abstraction, encapsulation และ packages นิยาม class,member,attribute,method,constructor และ packages เข้าใจ modifier แบบ private และ public
E N D
บทที่ 2 การเขียนโปรแกรมเชิงวัตถุ Object-Oriented Programming โดย วชิราวุธ ธรรมวิเศษ
วัตถุประสงค์การเรียนรู้วัตถุประสงค์การเรียนรู้ • เมื่อจบบทนี้แล้วผู้เรียนสามารถ • รู้ถึงหลักการ abstraction, encapsulation และ packages • นิยาม class,member,attribute,method,constructor และ packages • เข้าใจ modifier แบบ private และ public • สามารถเรียกใช้งาน method ของ object • ใช้งาน Java API online document ได้ โดย วชิราวุธ ธรรมวิเศษ
พัฒนาการของ Software Engineering โดย วชิราวุธ ธรรมวิเศษ
การ วิเคราะห์ และ ออกแบบ • การวิเคราะห์ เพื่อให้รู้ว่า อะไร ที่ระบบต้องการที่จะทำ WHATสร้าง Model วิเคราะห์ actors และ activities • การออกแบบ เพื่อให้รู้ว่า ระบบจะทำงานอย่างไร HOW • ออกแบบความสัมพันธ์ และ การติดต่อกันระหว่าง วัตถุ และ actor ในระบบ • ค้นหา abstraction ที่จะช่วยแก้ปัญหา หรือ ทำให้ปัญหาง่ายขึ้น โดย วชิราวุธ ธรรมวิเศษ
Abstraction • สร้างการสื่อความหมายที่เป็นนามธรรม แทน การอธิบายกระบวนการในชีวิตประจำวัน เรา ใช้ชื่อ แทนสิ่งต่าง ๆ เพื่ออธิบายลักษณะที่ซับซ้อน • เป็นแนวคิดการซ่อน กระบวนการทำงานที่ซับซ้อนไว้ภายใน (Implements) และ เปิดเผยเฉพาะส่วนติดต่อใช้งาน (Interface) Implementation Interface โดย วชิราวุธ ธรรมวิเศษ
Abstraction • Functions - เขียน algorithm ครั้งเดียว สามารถใช้กับหลายๆ เหตุการณ์ void push(data, x) data1 int pop(data) data2 ตัวอย่าง Stack มี ฟังก์ชัน push,pop ซึ่งสามารถใช้กับ data หลายๆ อันได้ โดย วชิราวุธ ธรรมวิเศษ
Abstraction • Objects –เป็นการรวมเอา ข้อมูล หรือ คุณลักษณะ และ ฟังก์ชัน หรือ พฤติกรรม ที่สัมพันธ์กัน ไว้ใน class Class stack • data ข้อมูล และ ฟังก์ชันถูกรวมเข้าด้วยกัน ทำให้มีการจัดการที่ดีขึ้น • void push(x) • int pop() โดย วชิราวุธ ธรรมวิเศษ
Abstraction • Framework and API • เป็นกลุ่มของ Object ขนาดใหญ่ • ใช้เพื่อสนับสนุนการปฏิบัติการที่ซับซ้อน โดย วชิราวุธ ธรรมวิเศษ
Classes as Blueprints for Objects • ในอุตสาหกรรมพิมพ์เขียว จะใช้เป็นตัวกำหนดในการสร้างชิ้นงานต่างๆ • ใน Software นั้น คลาส จะเป็นตัวอธิบายลักษณะของออปเจ็ค • ข้อมูล data (Attribute) • พฤติกรรม behaviors (Method) • Class หนึ่ง class สามารถใช้สร้าง ออปเจ็คได้หลายออปเจ็ค • ออบเจ็คแต่ละอัน จะมีข้อมูลของตัวเอง • ออบเจ็คจากคลาสเดียวกันใช้พฤติกรรมเดียวกัน โดย วชิราวุธ ธรรมวิเศษ
คุณสมบัติหลักของ OOP • Encapsulation • Inheritance • Polymorphism จาวาจะสนับสนุนคุณสมบัติเหล่านี้ โดย วชิราวุธ ธรรมวิเศษ
การนิยาม 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; } } โดย วชิราวุธ ธรรมวิเศษ
การนิยาม Attributes • ไวยกรณ์ • [<modifiers>] type name [= value ]; • Example public class Foo{ private int x; public float y = 100.0F; String name = “KKU“; } โดย วชิราวุธ ธรรมวิเศษ
การนิยาม 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; } } โดย วชิราวุธ ธรรมวิเศษ
การใช้ สมาชิกในออปเจคต์ • ใช้สัญลักษณ์ 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() ); } } โดย วชิราวุธ ธรรมวิเศษ
Information Hiding • ปัญหา class MyDate{ public int day; public int month; public int year; } ไม่สามารถควบคุม ความถูกต้องของข้อมูลได้ เพราะค่าตัวแปรสามารถถูก เปลี่ยนได้โดยตรง เช่น d.day = 32; โดย วชิราวุธ ธรรมวิเศษ
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); • } โดย วชิราวุธ ธรรมวิเศษ
Access Control • เราจะควบคุมการเข้าถึง สมาชิกใน Class โดยใช้ Modifier • public หมายถึง สมาชิกนั้นเปิดเผยให้เข้าถึงได้จาก class ภายนอกอื่นทั้งหมด • private หมายถึง สมาชิกนั้นไม่อนุญาตให้เข้าถึงจาก class ภายนอก • (default) ไม่ระบุ modifier หมายถึง อนุญาตให้เข้าถึงสมาชิกนั้น เฉพาะ class ที่อยู่ใน package เดียวกัน โดย วชิราวุธ ธรรมวิเศษ
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); • } โดย วชิราวุธ ธรรมวิเศษ
Declaring Constructors • [<modifier>] <classname> ([argument list]){ คำสั่ง } • ตัวอย่าง โดย วชิราวุธ ธรรมวิเศษ
Default Constructors • ถ้าไม่มี Constructor จะไม่สามารถสร้าง Object ได้ • ดังนั้นทุกคลาสจะต้องมี Constructor อย่างน้อย 1 อัน • ถ้าไม่เขียน Java จะสร้าง constructor เปล่า ๆ ให้ อัตโนมัติ • เพื่อให้เราสามารถสร้าง instance ของ class ได้ • เรียกว่า Default Constructors โดย วชิราวุธ ธรรมวิเศษ
การสร้างออบเจคต์ Object ในอีกความหมายหนึ่ง คือ ตัวแทนของ Class (Instance of Class) เราจึงเรียกกระบวนการสร้าง Object ว่า Instantiating • การประกาศตัวแปร • ใช้คำสำคัญ new เพื่อจองหน่วยความจำ • เรียก Constructor เพื่อสร้าง Object Foo f1 = new Foo( ); Foo f2 = new Foo( ); โดย วชิราวุธ ธรรมวิเศษ
Inheritance • เป็นกลไกที่ใช้ในการสืบทอดคุณสมบัติของ Class • ใช้สร้าง Class ใหม่ โดยการอ้างถึง คุณสมบัติจาก Class เดิม class Person{ String name; String address; } class Student extends Person{ String student_id; String major,faculty; } ในจาวาจะใช้คำสำคัญ extends ในการสร้าง class เพื่อบอกว่า Class นั้น สืบต่อ หรือ ขยาย มาจาก Class ใด โดย วชิราวุธ ธรรมวิเศษ
Class java.lang.Object • ในจาวา Class ทั้งหมดจะสืบทอด (extends) มาจาก class Object • ถ้าเราสร้าง Class ใหม่ โดยไม่ระบุ extends จาวาจะถือว่า class นั้น extends จาก class Object ซึ่งอยู่ใน package java.lang โดยอัตโนมัติ • การประกาศ • class Foo { } จึงมีค่าเท่ากับ • class Foo extends Object { } โดย วชิราวุธ ธรรมวิเศษ
Polymorphism • เป็นคุณสมบัติที่ทำให้ Object ที่เป็นจากต่าง Class กันสามารถตอบสนองต่อคำสั่งเดียวกันได้ • ตัวอย่างในชีวิตประจำวัน เช่น • แชมพู น้ำปลา น้ำมันพืช เป็นวัตถุจากคนละ classแต่เมื่อจะใช้งานจะใช้แบบเดียวกัน คือ เปิดฝา และ เท มันอาจจะให้ผลที่ต่างกัน หรือเหมือนกัน • เมื่อเราเห็นสิ่งของ ลักษณะคล้ายกัน เราก็สามารถใช้งานได้ โดยใช้คำสั่งเดียวกัน โดย วชิราวุธ ธรรมวิเศษ
Polymorphism • โดย Abstraction สามารถมอง Object ที่เป็นคนล่ะ Class เป็นสิ่งที่เหมือนกันได้ ทำให้เราสามารถกระทำกับ สิ่งที่ต่างประเภทกันด้วยวิธีการเดียวกัน • เมื่อเรามองว่า แชมพู น้ำปลา น้ำมันพืช เป็นขวดเหมือนกัน เราก็จะใช้งานมันได้ด้วยวิธีเปิดฝา และ เท เหมือนกัน โดย วชิราวุธ ธรรมวิเศษ
Polymorphism • ในอีกมุมหนึ่ง Object หนึ่ง ก็สามารถมีพฤติกรรมตอบสนอง ต่อข้อมูลที่ต่างชนิดกันด้วยวิธีที่ต่างกันได้เช่นกัน • เช่น การกินอาหารของมนุษย์ การกินอาหารทุกชนิดจะเข้าทางปากเหมือนกัน แต่ใช้วิธีกินแตกต่างกัน และ มีผลที่ต่างกันได้ • กินข้าวราดแกง • กินก๋วยเตี๋ยว • กินขนม • กินยา นั่นคือ กิน มีคุณสมบัติ Polymorphism โดย วชิราวุธ ธรรมวิเศษ
Polymorphism • จึงเป็นการเลียนแบบ พฤติกรรมการตอบสนอง และ การสื่อสารกันระหว่าง Object ต่างๆ ในโลกความจริง มาใช้ในการเขียนโปรแกรม • จาวาจะสนับสนุน Polymorphism ด้วย • Method Overriding • Method Overloading • Interface (ซึ่งจะกล่าวโดยละเอียดในบทต่อไป) โดย วชิราวุธ ธรรมวิเศษ
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 โดย วชิราวุธ ธรรมวิเศษ
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 ); // จะได้ผลต่างกัน โดย วชิราวุธ ธรรมวิเศษ
Source File Layout ในไฟล์ .java จะประกอบด้วย • การประกาศ package ถ้าไม่มีจะถือว่าไม่กำหนด • การประกาศ import ถ้าไม่มี java จะ import ให้เฉพาะ java.lang • การประกาศ class ต้องประกาศ • ไฟล์หนึ่งอาจจะมี class ได้หลาย class • แต่ต้องมี class ที่เป็น public ได้เพียง class เดียว โดย วชิราวุธ ธรรมวิเศษ
Source File Layout ตัวอย่าง โดย วชิราวุธ ธรรมวิเศษ
Software Package • ใช้เพื่อช่วยจัดการระบบ Software ขนาดใหญ่ • ภายใน Package สามารถเก็บ class และ package ย่อยไว้ภายใน • เหมือนกับระบบ Directory ในการจัดการไฟล์ • Package => folder • Class => file โดย วชิราวุธ ธรรมวิเศษ
ประโยค package • package <ชื่อ>[.<ชื่อย่อย] ; • ตัวอย่าง • package kku; • package kku.game.ox; • package kku.app.talk; • ในไฟล์ .java หนึ่งไฟล์จะระบุ package ได้เพียง 1 อัน โดย วชิราวุธ ธรรมวิเศษ
ประโยค import • import package[.subpackage].classname; • import package[.subpackage].*; • ตัวอย่าง • import kku.*; • import kku.game.ox.Game1; • import kku.game.ox.*; โดย วชิราวุธ ธรรมวิเศษ
Directory Layout and Packages • เมื่อเรา compile ไฟล์ class จะถูกเก็บแยกลงใน directory ตามชื่อ package C:\Kku\ game\ ox\ Game1.class app\ talk\ Talk.class Client.class โดย วชิราวุธ ธรรมวิเศษ
ทวนคำศัพท์ • Class • Object , Instance of class • Attribute • Method • Constructor • Package โดย วชิราวุธ ธรรมวิเศษ
การใช้งาน Java API Document • เป็น HTML document • เอกสารอธิบาย รายละเอียดของ class ที่อยู่ใน Java API • http://www.cs.kku.ac.th/java/docs/ • http://java.sun.com โดย วชิราวุธ ธรรมวิเศษ
Java API Document โดย วชิราวุธ ธรรมวิเศษ