450 likes | 614 Views
บทที่ 2. หลักการเชิงออปเจ็ค (Object Oriented Concept). วัตถุประสงค์. แนะนำ ออปเจ็คและคลาส อธิบายคุณลักษณะและเมธอด อธิบายการเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวา แนะนำการเขียนโปรแกรมโดยใช้คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค แนะนำ Unified Modelling Language อธิบายขั้นตอนการพัฒนาโปรแกรม.
E N D
บทที่ 2 หลักการเชิงออปเจ็ค (Object Oriented Concept)
วัตถุประสงค์ • แนะนำออปเจ็คและคลาส • อธิบายคุณลักษณะและเมธอด • อธิบายการเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวา • แนะนำการเขียนโปรแกรมโดยใช้คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค • แนะนำ Unified Modelling Language • อธิบายขั้นตอนการพัฒนาโปรแกรม
หลักการเชิงออปเจ็ค • ภาษาจาวาเป็นภาษาคอมพิวเตอร์ที่ใช้หลักการเชิงออปเจ็ค • OOP (Object Oriented Programming) • OOP เป็นขบวนการการพัฒนาโปรแกรมโดยการจำลองปัญหาว่าประกอบไปด้วยออปเจ็คใดบ้าง • นิยามที่สำคัญคือ • ออปเจ็ค (object) • คลาส (class)
ออปเจ็ค • ออปเจ็คคือสิ่งต่างๆที่มีอยู่ในชีวิตประจำวัน • ออปเจ็คที่เป็นรูปธรรมเช่น นักศึกษา ใบลงทะเบียนปากกา และรถ • ออปเจ็คที่เป็นนามธรรมเช่น คะแนน รายชื่อวิชา บัญชีเงินฝาก และตารางเที่ยวบิน • ออปเจ็คประกอบด้วย • คุณลักษณะ (attribute) หรือข้อมูล (data) • พฤติกรรม (behavior) หรือเมธอด (method)
ออปเจ็ค • คุณลักษณะ • ข้อมูลของออปเจ็ค • แต่ละออปเจ็คอาจมีค่าของคุณลักษณะที่ต่างกัน • เมธอด • สิ่งที่ออปเจ็คสามารถกระทำได้ • คำสั่งในการทำงานของโปรแกรมเชิงออปเจ็ค • โปรแกรมจะจัดการกับข้อมูลโดยเรียกใช้เมธอด
ตัวอย่างของออปเจ็ค • นักศึกษา • อาจจะมีคุณลักษณะเช่น รหัส ชื่อและเกรดเฉลี่ย • อาจจะมีเมธอดเช่น ลงทะเบียน สอบ และเดิน • รถยนต์ • อาจจะมีคุณลักษณะเช่นยี่ห้อรุ่น และสี • อาจจะมีเมธอดเช่น เคลื่อนที่ หยุด และเลี้ยว • สุนัข • อาจจะมีคุณลักษณะเช่น ชื่อ พันธ์และสี • อาจจะมีเมธอดเช่น เห่า คลาน และกระดิกหาง
ตัวอย่างของโปรแกรมเชิงออปเจ็คตัวอย่างของโปรแกรมเชิงออปเจ็ค • โปรแกรมระบบจัดการบัญชีเงินฝากของธนาคาร • ตัวอย่างของออปเจ็ค • Account • Customer • Transaction • ATM • Account • อาจมีคุณลักษณะเช่น เลขที่บัญชี ชื่อเจ้าของบัญชี วันที่เปิดบัญชี และยอดเงินคงเหลือ • อาจมีเมธอดเช่น ฝาก ถอน และโอนเงิน
คลาส • เปรียบเสมือนพิมพ์เขียวของออปเจ็ค • ออปเจ็คจะถูกสร้างมาจากคลาส บางครั้งเรียกว่าเป็น instance ของคลาส • คลาสหนึ่งคลาสสามารถสร้างออปเจ็คได้หลายออปเจ็ค อาทิเช่น คลาสชื่อ Student อาจสร้างออปเจ็คชื่อ s1,s2 หรือ s3 ซึ่งเป็นออปเจ็คชนิด Student
รูปแสดงการสร้างออปเจ็คจากคลาส Student
คุณลักษณะของออปเจ็ค • ข้อมูลที่เก็บอยู่ในออปเจ็ค • แบ่งเป็นตัวแปร (variable) และค่าคงที่ (constant) • ตัวแปรคือคุณลักษณะที่สามารถเปลี่ยนค่าได้ • ค่าคงที่คือคุณลักษณะที่ไม่สามารถเปลี่ยนค่าได้
ตัวอย่างคุณลักษณะของออปเจ็คตัวอย่างคุณลักษณะของออปเจ็ค
คุณลักษณะของคลาส • เป็นคุณลักษณะที่ใช้ร่วมกันของทุกออปเจ็ค • ทุกออปเจ็คจะใช้คุณลักษณะร่วมกันทำให้ประหยัดพื้นที่ในหน่วยความจำ • ตัวอย่างเช่น คุณลักษณะที่กำหนดให้เป็นค่าคงที่ชื่อ MIN_GPA
ตัวอย่างคุณลักษณะของคลาสตัวอย่างคุณลักษณะของคลาส
เมธอด • วิธีการหรือการกระทำที่นิยามอยู่ในคลาสหรือออปเจ็คเพื่อใช้ในการจัดการกับคุณลักษณะของออปเจ็ค • เปรียบเทียบได้กับ function, procedure หรือ subroutine ของโปรแกรมเชิงกระบวนการ • ตัวอย่างเช่น เมธอด deposit()เพื่อเป็นเมธอดสำหรับฝากเงิน
การสื่อสารระหว่างออปเจ็คการสื่อสารระหว่างออปเจ็ค • การสื่อสารระหว่างกันของออปเจ็คทำได้โดยการผ่านข่าวสาร (message) objBคือชื่อออปเจ็ค method4 คือชื่อเมธอด (1,2) คือargument
การสื่อสารระหว่างออปเจ็ค • ข่าวสารจะส่งผ่านจากออปเจ็ค objA ที่เป็นผู้ส่ง (sender) เพื่อเรียกการทำงานของเมธอดที่ชื่อ method4 จากออปเจ็ค objB ที่เป็นผู้รับ (receiver) • objB อาจส่งค่า (return value) บางค่ากลับมายัง objA
การเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวาการเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวา • การประกาศคลาส • การประกาศคุณลักษณะ • การประกาศเมธอด • การประกาศและสร้างออปเจ็ค • การเรียกใช้สมาชิกของออปเจ็ค
การประกาศคลาส • โปรแกรมภาษาจาวาแต่ละโปรแกรมจะประกอบไปด้วยคลาสอย่างน้อยหนึ่งคลาส โดยมีรูปแบบการประกาศดังนี้ [modifier] class Classname { [class member] } • modifier คือคีย์เวิร์ด (keyword) ของภาษาจาวาที่ใช้ในการอธิบายระดับการเข้าถึง (access modifier) • class คือคีย์เวิร์ดของภาษาจาวาเพื่อระบุว่าเป็นการประกาศคลาส • Classnameคือชื่อคลาส • class memberคือเมธอดหรือคุณลักษณะ • ตัวอย่าง public class Student { }
การประกาศคุณลักษณะ • คุณลักษณะของออปเจ็คคือตัวแปรหรือค่าคงที่ซึ่งประกาศภายในออปเจ็ค โดยมีรูปแบบการประกาศดังนี้ [modifier] dataType attributeName; • modifier คือคีย์เวิร์ดของภาษาจาวาที่อธิบายคุณสมบัติต่างๆของตัวแปรหรือค่าคงที่ • dataType คือชนิดข้อมูลซึ่งอาจเป็นชนิดข้อมูลพื้นฐานหรือชนิดคลาส • attributeName คือชื่อของคุณลักษณะ • ตัวอย่าง public class Student { public String id; public String name; public double gpa; }
การประกาศเมธอด • ภาษาจาวากำหนดรูปแบบของการประกาศเมธอดที่อยู่ในคลาสไว้ดังนี้ [modifier] return_type methodName([arguments]) { [method_body] } • modifier คือคีย์เวิร์ดของภาษาจาวาที่ใช้อธิบายระดับการเข้าถึง • return_type คือชนิดข้อมูลของค่าที่จะมีการส่งกลับ • methodName คือชื่อของเมธอด • arguments คือตัวแปรที่ใช้ในการรับข้อมูลที่ออปเจ็คส่งมาให้ • method_body คือคำสั่งต่างๆของภาษาจาวาที่อยู่ในเมธอด
ตัวอย่างโปรแกรม public class Student { public String id; public String name; publicdouble gpa; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public voidsetGPA(double GPA) { gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
เมธอดที่ชื่อ main() • โปรแกรมจาวาประยุกต์ (Java Application) จะเริ่มต้นการทำงานในคลาสที่มีเมธอดที่ชื่อ main โดยมีรูปแบบของเมธอดดังนี้ public static void main(String args[]) { [method_body] }
การประกาศออปเจ็ค • ออปเจ็คทุกออปเจ็คในโปรแกรมภาษาจาวาจะต้องมีคำสั่งประกาศเพื่อระบุว่าออปเจ็คนั้นเป็นออปเจ็คของคลาสใด โดยมีรูปแบบการประกาศดังนี้ [modifier] ClassName objectName; • modifier คือคีย์เวิร์ดที่อธิบายคุณสมบัติต่างๆของออปเจ็ค • ClassName คือชื่อของคลาสสำหรับออปเจ็คนั้น • objectName คือชื่อของออปเจ็ค • ตัวอย่าง Student s1;
การสร้างออปเจ็ค • คำสั่งที่ใช้ในการสร้างออปเจ็คจะมีรูปแบบดังนี้ objectName = new ClassName([arguments]); • objectName คือชื่อของออปเจ็ค • new คือคีย์เวิร์ดของภาษาจาวาเพื่อใช้ในการสร้างออปเจ็ค • ClassName คือชื่อของคลาส • arguments คือค่าที่ต้องการส่งผ่านในการเรียก Constructor • ตัวอย่าง s1 = new Student();
การประกาศและสร้างออปเจ็คการประกาศและสร้างออปเจ็ค • คำสั่งในการประกาศและสร้างออปเจ็คสามารถที่จะรวมเป็นคำสั่งเดียวกัน โดยมีรูปแบบคำสั่งดังนี้ [modifier] ClassName objectName = new ClassName([arguments]); • ตัวอย่าง Student s1 = new Student();
การเรียกใช้สมาชิกของออปเจ็คการเรียกใช้สมาชิกของออปเจ็ค • การเรียกใช้คุณลักษณะของออปเจ็คมีรูปแบบดังนี้ objectName.attributeName; • การเรียกใช้เมธอดของออปเจ็คมีรูปแบบดังนี้ objectName.methodName([arguments]); • objectName คือชื่อของออปเจ็คที่สร้างขึ้น • methodName คือชื่อของเมธอดของออปเจ็คนั้น • arguments คือค่าที่ต้องการส่งผ่านไปให้กับเมธอดของออปเจ็คนั้น • ตัวอย่าง s1.setName("Thana");
ตัวอย่างโปรแกรม 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(); } }
คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็คคุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค • การห่อหุ้ม (Encapsulation) • การสืบทอด (Inheritance) • การมีได้หลายรูปแบบ (Polymorphism)
การห่อหุ้ม • หมายถึงการจะเรียกใช้คุณลักษณะของออปเจ็คจะทำได้โดยการเรียกผ่านเมธอดเท่านั้น • หลักการของการห่อหุ้มคือการกำหนดให้คุณลักษณะของออปเจ็คมีคุณสมบัติเป็น private และกำหนดให้เมธอดมีคุณสมบัติเป็น public
ข้อดีของการห่อหุ้ม • การซ่อนเร้นข้อมูล (Information Hiding) • ทำให้ออปเจ็คสามารถติดต่อกับออปเจ็คภายนอกผ่านเมธอดที่เป็นส่วนของ interface เท่านั้น • ความเป็นโมดูล (Modularity) • การพัฒนาโปรแกรมเชิงออปเจ็คจะสามารถกำหนดให้ออปเจ็คแต่ละออปเจ็คมีความเป็นอิสระต่อกัน
ตัวอย่างโปรแกรม 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 voidsetGPA(double GPA) { gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
การสืบทอด • หมายถึงการนิยามคลาสใหม่จากรูปแบบของคลาสที่มีอยู่แล้ว โดยคลาสใหม่สามารถที่จะนำคุณลักษณะและเมธอดของคลาสเดิมมาใช้ได้ • โดยในภาษาจาวาจะใช้คีย์เวิร์ด extends เพื่อระบุการสืบทอด • ตัวอย่าง
ตัวอย่างโปรแกรม 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; } }
การมีได้หลายรูปแบบ • หมายถึงการที่สามารถตอบสนองต่อข่าวสาร (เมธอด) เดียวกันด้วยวิธีการที่ต่างกัน และสามารถกำหนดออปเจ็คได้หลายรูปแบบ • Overridden method • Dynamic Binding
ตัวอย่างโปรแกรม 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(); } }
Unified Modeling Language (UML) • เป็นภาษาที่สามารถนำรูปกราฟฟิกมาจำลองโปรแกรมเชิงออปเจ็คได้ • ประกอบด้วยสองส่วนคือ • ไดอะแกรมของคลาส (Class Diagram) • ไดอะแกรมของออปเจ็ค (Object Diagram)
ไดอะแกรมของคลาส • เป็นสัญลักษณ์ที่ใช้แสดงคลาส • ประกอบด้วยส่วนต่างๆสามส่วนคือ • ชื่อของคลาส • คุณลักษณะภายในคลาส • เมธอดภายในคลาส
ไดอะแกรมของออปเจ็ค • ประกอบไปด้วยส่วนต่างๆสองส่วนคือ • ส่วนที่ระบุชื่อของออปเจ็ค • ส่วนที่ระบุค่าของคุณลักษณะภายในออปเจ็ค
ขั้นตอนการพัฒนาโปรแกรมขั้นตอนการพัฒนาโปรแกรม • ขั้นตอนการวิเคราะห์ (Analysis) • ขั้นตอนการออกแบบ (Design) • ขั้นตอนการเขียนโปรแกรม (Programming) • ขั้นตอนการทดสอบ (Testing) • ขั้นตอนการทำงาน (Operation)
รูปแสดงขั้นตอนการพัฒนาโปรแกรมรูปแสดงขั้นตอนการพัฒนาโปรแกรม
สรุปเนื้อหาของบท • โปรแกรมเชิงออปเจ็คจะมีคำนิยามที่สำคัญสองคำคือ ออปเจ็คและคลาส • ออปเจ็คคือสิ่งต่างๆที่มีอยู่ในชีวิตประจำวันจะประกอบไปด้วยคุณลักษณะและเมธอด • คลาสเปรียบเสมือนพิมพ์เขียวของออปเจ็ค ออปเจ็คที่ถูกสร้างมาจากคลาส ออปเจ็คหลายออปเจ็คสามารถถูกสร้างจากคลาสหนึ่งคลาสได้ • คุณลักษณะของออปเจ็คคือข้อมูลที่เก็บอยู่ในออปเจ็ค ซึ่งจะแบ่งออกเป็น ตัวแปรและค่าคงที่ • คุณลักษณะของคลาสเป็นคุณลักษณะที่ใช้ร่วมกันของทุกออปเจ็ค • เมธอดคือวิธีการเพื่อใช้ในการจัดการกับคุณลักษณะของออปเจ็คหรือคุณลักษณะของคลาส
สรุปเนื้อหาของบท • ภาษาจาวามีนิยามในการเขียนโปรแกรมเชิงออปเจ็คเพื่อประกาศคลาส คุณลักษณะ เมธอด และออปเจ็ค • โปรแกรมเชิงออปเจ็คจะมีคุณลักษณะเด่นอยู่สามประการคือ การห่อหุ้ม การสืบทอด และการมีได้หลายรูปแบบ • การห่อหุ้มคือการที่ให้คุณลักษณะถูกห่อหุ้มอยู่ภายในเมธอด โดยกำหนดให้คุณลักษณะมี access modifier เป็น private และกำหนดให้เมธอดมี access modifier เป็น public • ข้อดีของการห่อหุ้มคือการซ่อนเร้นข้อมูลและความเป็นโมดูล • การสืบทอดคือการที่คลาสใหม่สามารถนำเอาคุณลักษณะและเมธอดของคลาสที่ออกแบบไว้แล้วมาใช้ได้
สรุปเนื้อหาของบท • การมีได้หลายรูปแบบคือการที่กำหนดให้มีการตอบสนองต่อเมธอดเดียวกันด้วยวิธีการที่ต่างกัน และสามารถกำหนดออปเจ็คได้หลายรูปแบบ • Unified Modeling Language (UML) เป็นภาษาที่ใช้รูปกราฟฟิกเพื่อจำลองระบบซอฟต์แวร์ ในที่นี้ได้แนะนำสัญลักษณ์ของ UML ที่สำคัญสองอย่างคือ ไดอะแกรมของคลาสและไดอะแกรมของออปเจ็ค • วัฎจักรการพัฒนาโปรแกรมจะประกอบไปด้วยขั้นตอนต่างๆ 5 ขั้นตอนคือ ขั้นตอนการวิเคราะห์ ขั้นตอนการออกแบบ ขั้นตอนการเขียนโปรแกรม ขั้นตอนการทดสอบ และขั้นตอนการทำงาน
แบบฝึกหัด • แบบฝึกหัดที่ 1 การออกแบบคลาส • เขียนข้อกำหนดอธิบายระบบโปรแกรมสำหรับการตัดเกรดของรายวิชาหนึ่งรายวิชา • เขียนไดอะแกรมของคลาสเพื่ออธิบายคุณลักษณะและเมธอดทั้งหมดที่มีอยู่ในคลาส