หลักการเชิงวัตถุmathcom.uru.ac.th/~beebrain/slide/4121306a/02_oop.pdf ·...
TRANSCRIPT
LOGO
หลักการเชิงวัตถุ(Object Oriented Concept)
Nerissa Onkhum19/06/55 1
วัตถุประสงค์
แนะน าวัตถุและคลาส
อธิบายคุณลกัษณะและเมธอด
อธิบายการเขียนโปรแกรมเชิงวัตถโุดยใช้ภาษาจาวา
แนะน าการเขียนโปรแกรมโดยใช้คุณลักษณะเด่น
ของโปรแกรมเชิงวัตถุ
แนะน า Unified Modelling Language
อธิบายขั้นตอนการพัฒนาโปรแกรม19/06/55 2
หลักการเชิงวัตถุ
ภาษาจาวาเป็นภาษาคอมพิวเตอร์ที่ใช้หลักการเชิงวัตถุ OOP (Object Oriented Programming) OOP เป็นขบวนการการพัฒนาโปรแกรมโดยการจ าลองปัญหาว่า
ประกอบไปดว้ยวัตถใุดบ้าง นิยามที่ส าคัญคือ วัตถุ (object)
คลาส (class)
19/06/55 3
วัตถุ
วัตถุคือสิ่งต่าง ๆ ที่มีอยู่ในชีวิตประจ าวัน วัตถทุี่เป็นรูปธรรมเช่น นักศึกษา ใบลงทะเบียน ปากกา และรถ วัตถทุี่เป็นนามธรรมเช่น คะแนน รายชื่อวิชา บัญชีเงินฝาก และตารางเที่ยวบิน
วัตถปุระกอบด้วย คุณลักษณะ (attribute) หรือข้อมูล (data) พฤติกรรม (behavior) หรือเมธอด (method)
19/06/55 4
วัตถุ
คุณลกัษณะ ข้อมูลของวัตถุ แต่ละวัตถุอาจมีค่าของคุณลักษณะที่ต่างกนั
เมธอด สิ่งที่วัตถุสามารถกระท าได้ ค าส่ังในการท างานของโปรแกรมเชิงวัตถุ โปรแกรมจะจัดการกับข้อมูลโดยเรียกใช้เมธอด
19/06/55 5
ตัวอย่างของวัถตุ
19/06/556
วัตถุ “พนักงานบริษัท”แอตทริบิวต์ รหัสพนักงาน, เงินเดือน, เวลาเข้างาน
เมธอด รูดบัตรพนักงาน, รับเงินเดือน
วัตถุ “โทรทัศน์”แอตทริบิวต์ ยี่ห้อ, ขนาด, ระบบเสียง, ฟังก์ชันการท างาน
เมธอด เปิด, ปิด, เพิ่ม, ลดเสียง, ปรับความคมชัดของภาพ
ตัวอย่างของวัถตุ
19/06/557
วัตถุ “รถจักรยานยนต์”แอตทริบิวต์ ยี่ห้อ, รุ่น, สี, ระบบเกียร์, ปริมาตรกระบอกสูบ
เมธอด ติดเครื่อง, ออกตัว, เลี้ยว, เปลี่ยนเกียร์, หยุดรถ
วัตถุ “โทรศัพท์มือถือ”แอตทริบิวต์ ยี่ห้อ, รุ่น, จอภาพ, รูปแบบของเสียงเรียกเข้า
เมธอด เปิด, ปิด, เลือกรูปแบบของเสียงเรียกเข้า, ตั้งเวลาปลุก
ตัวอย่างของโปรแกรมเชิงวัตถุโปรแกรมระบบจัดการบัญชีเงินฝากของธนาคารตัวอย่างของวตัถุ Account Customer Transaction ATM
Account
อาจมีคุณลักษณะเช่น เลขที่บัญชี ชื่อเจ้าของบัญชี วันที่เปิดบัญชีและยอดเงินคงเหลือ อาจมีเมธอดเช่น ฝาก ถอน และโอนเงิน
19/06/558
คลาส
เปรียบเสมือนพิมพ์เขียวของวัตถุวัตถุจะถูกสร้างมาจากคลาส บางครั้งเรียกว่าเป็น instance ของคลาสคลาสหนึ่งคลาสสามารถสร้างวัตถุได้หลายวัตถุ อาทิเช่นคลาสชื่อ Student อาจสร้างวัตถชุื่อ s1,s2 หรอื s3 ซึ่งเป็นวัตถุชนิด Student
19/06/55 9
รูปแสดงการสร้างวัตถจุากคลาส Student
19/06/55 10
คุณลักษณะของวัตถุ
ข้อมูลที่เก็บอยู่ในวัตถแุบ่งเป็นตัวแปร (variable) และค่าคงที่ (constant) ตัวแปรคือคุณลักษณะที่สามารถเปลี่ยนค่าได้ ค่าคงที่คือคุณลักษณะที่ไม่สามารถเปลี่ยนค่าได้
19/06/55 11
ตัวอย่างคุณลักษณะของวัตถุ
19/06/55 12
คุณลักษณะของคลาส
เป็นคุณลักษณะที่ใช้ร่วมกันของทุกวัตถุทุกวัตถุจะใช้คุณลักษณะร่วมกันท าให้ประหยัดพื้นที่ในหน่วยความจ าตัวอย่างเช่น คุณลักษณะที่ก าหนดให้เป็นค่าคงที่ชื่อ
MIN_GPA
19/06/55 13
ตัวอย่างคุณลักษณะของคลาส
19/06/55 14
เมธอด
วิธีการหรือการกระท าที่นิยามอยู่ในคลาสหรอืวัตถุ เพื่อใช้ในการจัดการกับคุณลักษณะของวัตถุเปรียบเทียบได้กับ function, procedure หรอื subroutine ของโปรแกรมเชิงกระบวนการตัวอย่างเช่น เมธอด deposit() เพื่อเป็นเมธอดส าหรับฝากเงิน
19/06/55 15
การสื่อสารระหว่างวัตถุ
การส่ือสารระหว่างกันของวัตถทุ าได้โดยการผ่านข่าวสาร (message)
objB คือ ชื่อวัตถุmethod4 คือ ชื่อเมธอด(1,2) คือ argument
19/06/55 16
การสื่อสารระหว่างวัตถุ
ข่าวสารจะส่งผ่านจากวัตถุ objA ที่เป็นผู้ส่ง (sender) เพื่อเรียกการท างานของเมธอดที่ชื่อ method4 จากวัตถุ objB ที่เป็นผู้รับ (receiver)objB อาจส่งค่า (return value) บางค่ากลับมายัง objA
19/06/55 17
การเขียนโปรแกรมเชิงวัตถุโดยใช้ภาษาจาวา
Modifier ในภาษาจาวาการประกาศคลาสการประกาศคุณลักษณะการประกาศเมธอดการประกาศและสร้างวัตถุการเรียกใช้สมาชิกของวัตถุ19/06/55 18
Modifier ในภาษาจาวา
Modifier ในภาษาจาวาแบ่งออกเป็น 2 ประเภท คือ Access modifier ได้แก่ private, public, protected และ
package (อาจเรียก package ว่า none, default หรือ friendly) Non-access modifier ได้แก่ final, abstract, static, native,
transient, volatile, synchronized, strictfp
19/06/55 19
Modifier ในภาษาจาวา
การน า Access Modifier ไปใช้งาน access modifier ใช้ก าหนดไว้หน้าคลาส แอตทริบิวต์ เมธอด จุดประสงค์ เพื่อก าหนดระดับการเข้าใช้งาน access modifier : public, protected, package, private modifier public และ package สามารถใช้ก าหนดใหก้ับคลาส แอตทรบิิวต์หรือเมธอด Modifier protected และ private ใช้ก าหนดให้กบัคลาสไม่ได้ แต่สามารถก าหนดให้กบัแอตทริบิวตห์รือเมธอดได้
19/06/5520
Modifier ในภาษาจาวา
สรุปการน า access modifier แต่ละแบบไปใชง้าน
19/06/5521
Access modifier ใช้กับคลาส ใช้กับแอตทริบิวต์ ใช้กับเมธอด
public
protected
package
private
Modifier ในภาษาจาวาจาวาแบ่งระดับของ access modifier ออกเป็น 4 ระดับ คอื public (สาธารณะ) หากก าหนด modifier public ให้กบัคลาส แอตทริบิวต์ หรือเมธอดใดแล้ว คลาสอื่น ๆ จะสามารถเข้าใช้งานคลาส แอตทริบิวต์ หรือเมธอดนั้นได้อิสระ ไม่มีขดีจ ากัด
protected (ถูกปกป้อง) ไม่ได้เปิดให้คลาสใด ๆ สามารถเข้าใช้งานได้อย่างอิสระ แต่ไม่ถึงกับปิดไม่ให้ใครเข้าใช้งานเลย
19/06/5522
Modifier ในภาษาจาวา protected มีลักษณะการเข้าใช้งาน ดังนี้
• ก าหนด modifier เป็น protected ให้กับแอตทริบิวตแ์ละเมธอดของคลาส คลาสอื่น ๆ ในเพ็กเกจเดียวกันจะสามารถเรียกใช้งานแอตทรบิิวต์และ เมธอดได้
• ก าหนด modifier เป็น protected ให้กับแอตทริบิวตแ์ละเมธอดของคลาส คลาสอื่น ๆ ที่อยู่ต่างเพ็กเกจ จะไม่สามารถเรียกใช้งานแอตทริบิวตแ์ละ เมธอดได้
• ก าหนด modifier เป็น protected ให้กับแอตทริบิวตแ์ละเมธอดของคลาส คลาสอื่น ๆ ที่มีความสัมพันธ์เป็นคลาสแม่คลาสลูกกับคลาสนี้ ถึงแม้จะ อยู่คนละแพ็กเกจกัน ก็สามารถเรียกใช้งานแอตทริบิวตแ์ละเมธอดได้
19/06/55 23
Modifier ในภาษาจาวา package
• กรณีท่ีไม่ไดก้ าหนด modifier ใด ๆ ไว้หน้าคลาส แอตทริบิวต์หรือเมธอด จะท าให้คลาส แอตทริบิวต์ หรือเมธอดมีระดับเข้าถึงเป็น package
• ก าหนด modifier เป็น package หน้าคลาส แอตทริบิวต์ หรือเมธอด จะท าให้คลาสที่อยู่ในแพ็กเกจอื่นจะไม่สามารถเข้าใช้งานคลาส แอตทริบิวต์ หรือเมธอดได้
private (ส่วนบุคคล)• แอตทริบิวต์และเมธอดของคลาสจะถูกหุ้มห่อ (Encapsulate) เอาไว้ ปิดกั้นไม่ให้คลาสอื่นเข้ามาใช้งานแอตทริบิวต์หรือเมธอดที่ก าหนด modifier เป็น private ได้
• จะมีเฉพาะคลาสของมันเองเท่านั้นที่มีสิทธิ์ใช้งานได้ หลักการนี้เรียกว่า information hiding
19/06/55 24
Modifier ในภาษาจาวา
สรุปการท างาน access modifier แต่ละแบบ
19/06/5525
Access modifier
ใช้ได้ทั้งหมด
แพ็กเกจเดียวกัน
ต่างแพ็กเกจกัน
ต่างแพ็กเกจกันแต่เป็นคลาสแม่
คลาสลูก
คลาสเดียวกัน
public
protected
package
private
การประกาศคลาส
26
โปรแกรมภาษาจาวาแต่ละโปรแกรมจะประกอบไปด้วยคลาสอย่างน้อยหนึ่งคลาส โดยมีรูปแบบการประกาศ ดังนี้
[modifier] class Classname {[class member]
} modifier คือคีย์เวิร์ด (keyword) ของภาษาจาวาที่ใช้ในการอธิบายระดับการเข้าถึง
(access modifier) class คือคีย์เวิร์ดของภาษาจาวาเพื่อระบุว่าเป็นการประกาศคลาส Classname คือช่ือคลาส class member คือเมธอดหรือคุณลักษณะ
การประกาศคลาส
ตัวอย่าง
public class Student {
}
19/06/55 27
การประกาศคุณลักษณะ
คุณลักษณะของวัตถคุือตัวแปรหรือค่าคงที่ซ่ึงประกาศภายในวัตถุโดยมีรูปแบบการประกาศ ดังนี้
[modifier] dataType attributeName;
modifier คือคีย์เวิร์ดของภาษาจาวาที่อธิบายคุณสมบัติต่างๆของตัวแปรหรือค่าคงที่ dataType คือชนิดข้อมูลซึ่งอาจเป็นชนิดข้อมูลพื้นฐานหรือชนิดคลาส attributeName คือชื่อของคุณลักษณะ
19/06/55 28
การประกาศคุณลักษณะ
ตัวอย่าง
public class Student {
public String id;
public String name;
public double gpa;
}
19/06/55 29
การประกาศเมธอด
ภาษาจาวาก าหนดรูปแบบของการประกาศเมธอดที่อยู่ในคลาสไว้ดังน้ี[modifier] return_type methodName([arguments]) {
[method_body]
}
modifier คือคีย์เวิร์ดของภาษาจาวาที่ใช้อธิบายระดับการเข้าถึง return_type คือชนิดข้อมูลของค่าที่จะมีการส่งกลับ methodName คอืชื่อของเมธอด arguments คือตัวแปรที่ใช้ในการรับข้อมูลที่วัตถุส่งมาให้ method_body คือค าสั่งต่างๆของภาษาจาวาที่อยู่ในเมธอด
19/06/55 30
ตัวอย่างโปรแกรมpublic class Student { public String id;
public String name;
public double gpa;
public void setID(String ID) {id = ID;
}
public void setName(String n) {
name = n;}
public void setGPA(double GPA) {gpa = GPA;
}public void showDetails() {
System.out.println("ID: "+id);
System.out.println("Name: "+name);System.out.println("GPA: "+gpa);
}}
19/06/55 31
เมธอดที่ชื่อ main()
โปรแกรมจาวาประยุกต์ (Java Application) จะเริ่มต้นการท างานในคลาสที่มีเมธอดที่ชื่อ main โดยมีรูปแบบของเมธอด ดังนี้
public static void main(String args[]) {
[method_body]
}
19/06/55 32
การประกาศวัตถุวัตถทุุกวัตถใุนโปรแกรมภาษาจาวาจะต้องมีค าส่ังประกาศ เพื่อระบุว่า
วัตถนุั้นเป็นวัตถุของคลาสใด โดยมีรูปแบบการประกาศ ดังนี้
[modifier] ClassName objectName;
modifier คือคีย์เวิร์ดที่อธิบายคุณสมบัติต่าง ๆ ของวัตถุ ClassName คือชื่อของคลาสส าหรับวัตถนุั้น objectName คือชื่อของวัตถุ
ตัวอย่างStudent s1;
19/06/55 33
การสร้างวัตถุ
ค าส่ังที่ใช้ในการสร้างวัตถจุะมีรูปแบบ ดงันี้
objectName = new ClassName([arguments]);
objectName คือ ชื่อของวัตถุ new คือ คีย์เวิร์ดของภาษาจาวาเพื่อใช้ในการสร้างวัตถุ ClassName คือ ชื่อของคลาส arguments คือ ค่าที่ต้องการส่งผ่านในการเรียก Constructor
ตัวอย่างs1 = new Student();
19/06/55 34
การประกาศและสร้างวัตถุ
ค าส่ังในการประกาศและสร้างวัตถสุามารถที่จะรวมเป็นค าส่ังเดียวกันโดยมีรูปแบบค าส่ัง ดังนี้
[modifier] ClassName objectName = new ClassName([arguments]);
ตัวอย่างStudent s1 = new Student();
19/06/55 35
การเรียกใช้สมาชิกของวัตถุ
การเรียกใช้คุณลักษณะของวัตถมุีรูปแบบ ดังนี้
objectName.attributeName;
การเรียกใช้เมธอดของวัตถุมีรูปแบบ ดังนี้objectName.methodName([arguments]);
objectName คือชื่อของวัตถุที่สร้างขึ้น methodName คือช่ือของเมธอดของวัตถนุั้น arguments คือค่าที่ต้องการส่งผ่านไปใหก้ับเมธอดของวัตถุนั้น
19/06/55 36
การเรียกใช้สมาชิกของวัตถุ
ตัวอย่าง
s1.setName("Thana");
19/06/55 37
ตัวอย่างโปรแกรมpublic class Sample {
public static void main(String args[]) {
Student s1 = new Student();
Student s2 = new Student();Student s3 = new Student();
s1.setID("1234");
s1.setName("Thana");
s1.setGPA(3.25);
s1.showDetails();s2.setID("1122");
s2.setName("Somchai");
s2.setGPA(2.90);
s2.showDetails();s3.setID("2211");
s3.setName("Somsri");
s3.setGPA(3.00);
s3.showDetails();
}
}
19/06/55 38
คุณลักษณะเด่นของโปรแกรมวัตถุ
การหอ่หุ้ม (Encapsulation)การสืบทอด (Inheritance)การมีไดห้ลายรูปแบบ (Polymorphism)
19/06/55 39
การห่อหุ้ม
หมายถึงการจะเรียกใช้คุณลักษณะของวัตถุจะท าได้โดยการเรียกผ่านเมธอดเท่านั้นหลักการของการห่อหุ้มคือการก าหนดให้คุณลักษณะของวัตถุมี
คุณสมบัติเป็น private และก าหนดให้เมธอดมีคุณสมบัติเป็น public
19/06/55 40
ข้อดีของการห่อหุ้ม
การซ่อนเร้นข้อมูล (Information Hiding)
ท าใหว้ัตถุสามารถติดต่อกับวัตถุภายนอกผ่านเมธอดที่เป็นส่วนของ interface เท่านั้น
ความเป็นโมดูล (Modularity)
การพัฒนาโปรแกรมเชิงวัตถุจะสามารถก าหนดให้วัตถุแต่ละวัตถมุีความเป็นอิสระต่อกัน
19/06/55 41
ตัวอย่างโปรแกรมpublic class Student {
private String id;private String name;private double gpa;
public void setID(String ID) {id = ID;
}public void setName(String n) {
name = n;}public void setGPA(double GPA) {
gpa = GPA;}public void showDetails() {
System.out.println("ID: "+id);
System.out.println("Name: "+name);System.out.println("GPA: "+gpa);
}}
19/06/55 42
การสืบทอด
หมายถึงการนิยามคลาสใหม่จากรูปแบบของคลาสท่ีมีอยู่แล้ว โดยคลาสใหม่สามารถทีจ่ะน าคุณลักษณะและเมธอดของคลาสเดิมมาใช้ได้
โดยในภาษาจาวาจะใช้คีย์เวิร์ด extends เพื่อระบุการสืบทอดตัวอย่าง
19/06/55 43
ตัวอย่างโปรแกรมpublic class PartTimeStudent extends Student { }
public class FullTimeStudent extends Student { }
public class GradStudent extends Student {
private String thesisTitle;
private String supervisor;
public void setThesisTitle(String t) {thesisTitle = t;
}public void setSupervisor(String s) {
supervisor = s; }}public class PhDStudent extends GradStudent {
public boolean passQualify;public boolean isPassQualify() {
return passQualify;}
}
19/06/55 44
การมีได้หลายรูปแบบ
หมายถึงการที่สามารถตอบสนองต่อข่าวสาร (เมธอด) เดียวกันด้วยวิธีการที่ต่างกัน และสามารถก าหนดวัตถุได้หลายรูปแบบ
ตัวอย่าง
19/06/55 45
ตัวอย่างโปรแกรมclass Ball {
public void throw() { }}class SoccerBall extends Ball {
public void throw() {System.out.println("Throwing soccerball");
}}class TennisBall extends Ball {
public void throw() {System.out.println("Throwing tennisball");
}}public class TestBall {
public static void main(String args[]) {
Ball b1 = new Ball();
SoccerBall b2 = new SoccerBall();
Ball b3 = new SoccerBall();
}}19/06/55 46
Unified Modeling Language (UML)
เป็นภาษาที่สามารถน ารูปกราฟฟิกมาจ าลองโปรแกรมเชิงวัตถุได้ประกอบด้วยสองส่วนคือ ไดอะแกรมของคลาส (Class Diagram) ไดอะแกรมของวัตถุ (Object Diagram)
19/06/55 47
ไดอะแกรมของคลาส
เป็นสัญลักษณ์ที่ใช้แสดงคลาสประกอบด้วยส่วนต่างๆ สามส่วนคือ ชื่อของคลาส
คุณลักษณะภายในคลาส
เมธอดภายในคลาส
19/06/55 48
ไดอะแกรมของวัตถุประกอบไปด้วยส่วนต่างๆสองส่วนคือ ส่วนที่ระบุช่ือของวัตถุ ส่วนที่ระบุค่าของคุณลักษณะภายในวัตถุ
19/06/55 49
ขั้นตอนการพัฒนาโปรแกรม
ขั้นตอนการวิเคราะห์ (Analysis)ขั้นตอนการออกแบบ (Design)ขั้นตอนการเขียนโปรแกรม (Programming)ขั้นตอนการทดสอบ (Testing)ขั้นตอนการท างาน (Operation)
19/06/55 50
รูปแสดงขั้นตอนการพัฒนาโปรแกรม
19/06/55 51
สรุปเนื้อหาของบท
โปรแกรมเชิงวัตถุจะมีค านิยามที่ส าคัญสองค าคือวัตถุและคลาสวัตถุคือสิ่งต่างๆที่มีอยู่ในชีวิตประจ าวันจะประกอบไปด้วยคุณลักษณะและเมธอดคลาสเปรียบเสมือนพิมพ์เขียวของวัตถุ วัตถุที่ถูกสร้างมาจากคลาส วัตถุหลายวัตถุ
สามารถถูกสร้างจากคลาสหนึ่งคลาสได้คุณลักษณะของวัตถุคือข้อมูลที่เก็บอยู่ในวัตถุซึ่งจะแบ่งออกเป็น ตัวแปรและค่าคงที่คุณลักษณะของคลาสเป็นคุณลักษณะที่ใช้ร่วมกันของทุกวัตถุ เมธอดคือวิธีการเพื่อใช้ในการจัดการกับคุณลักษณะของวัตถุหรือคุณลักษณะของ
คลาส
19/06/55 52
สรุปเนื้อหาของบท
ภาษาจาวามีนิยามในการเขียนโปรแกรมเชิงวัตถเุพื่อประกาศคลาส คุณลักษณะ เมธอดและวัตถุ
โปรแกรมเชิงวัตถุจะมีคุณลักษณะเด่นอยู่สามประการคือ การห่อหุ้ม การสืบทอดและการมีได้หลายรูปแบบ
การห่อหุ้มคือการที่ให้คุณลักษณะถูกห่อหุ้มอยู่ภายในเมธอด โดยก าหนดให้คุณลักษณะมี access modifier เป็น private และก าหนดให้เมธอดมี access modifier เป็น public
ข้อดีของการห่อหุ้มคือการซ่อนเร้นข้อมูลและความเป็นโมดูลการสืบทอดคือการที่คลาสใหม่สามารถน าเอาคุณลักษณะและเมธอดของคลาสที่
ออกแบบไว้แล้วมาใช้ได้19/06/55
53
สรุปเนื้อหาของบท
การมีได้หลายรูปแบบคือการที่ก าหนดให้มีการตอบสนองต่อเมธอดเดียวกันด้วยวิธีการที่ต่างกัน และสามารถก าหนดวัตถไุด้หลายรูปแบบ
Unified Modeling Language (UML) เป็นภาษาที่ใช้รูปกราฟฟิกเพื่อจ าลองระบบซอฟต์แวร์ ในที่นี้ได้แนะน าสัญลักษณ์ของ UML ที่ส าคัญสองอย่างคือ ไดอะแกรมของคลาสและไดอะแกรมของวัตถุ
วัฎจักรการพัฒนาโปรแกรมจะประกอบไปด้วยขั้นตอนต่างๆ 5 ขั้นตอนคือขั้นตอนการวิเคราะห์ ขั้นตอนการออกแบบ ขั้นตอนการเขียนโปรแกรม ขั้นตอนการทดสอบ และขั้นตอนการท างาน
19/06/55 54
แบบทดสอบที่ 2
ให้นักศึกษาตอบค าถามต่อไปน้ี
1. จงอธิบายความหมายและส่วนประกอบของวัตถุ พร้อมทั้งยกตัวอย่างประกอบ2. คลาสคืออะไร
3. เมธอดคืออะไร 4. จงอธิบายการสื่อสารระหว่างวัตถุ 5. จงอธิบาย Modifier ในภาษาจาวาคืออะไร มีกี่ประเภท 6. จงสรุปการน า access modifier แต่ละแบบไปใช้งาน 7. จงสรุปการท างาน access modifier แต่ละแบบ 8. จงอธิบาย UML คืออะไร และมีส่วนประกอบอะไรบ้าง 19/06/55 55
LOGO
19/06/55 56