Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept) วิชา การเขียนโปรแกรมเชิงวัตถุ โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com
วัตถุประสงค์ แนะนำออปเจ็คและคลาส อธิบายคุณลักษณะและเมธอด อธิบายการเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวา แนะนำการเขียนโปรแกรมโดยใช้คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค แนะนำ 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 ( [argument]) { [method_body] } - modifier คือคีย์เวิร์ดของภาษาจาวาที่ใช้อธิบายระดับการเข้าถึง - return_type คือชนิดข้อมูลของค่าที่จะมีการส่งกลับ - methodName คือชื่อของเมธอด - arguments คือ ตัวแปรที่ใช้ในการรับข้อมูลที่ออปเจ็คส่งมาให้ - method_body คือคำสั่งต่าง ๆ ของภาษาจาวาที่อยู่ในเมธอด
ตัวอย่างโปรแกรม public class Student { public String id; public String name; public double gpa; public static final double minGPA =2.00 ; 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);
เมธอดที่ชื่อ main() โปรแกรมจาวาประยุกต์ (Java Application) จะเริ่มต้นการทำงานในคลาสที่มีเมธอดที่ชื่อ main โดยมีรูปแบบของเมธอดดังนี้ public static void main (String args[]) { [method_body] }
การประกาศออปเจ็ค ออปเจ็คทุกออปเจ็คในโปรแกรมภาษาจาวาจะต้องมีคำสั่งประกาศเพื่อระบุว่าออปเจ็คนั้นเป็นออปเจ็คของคลาสใด โดยมีรูปแบบการประกาศดังนี้ [modifier] ClassName objectName; - modifier คือคีย์เวิร์ดที่อธิบายคุณสมบัติต่าง ๆ ของออปเจ็ค - ClassName คือชื่อของคลาสสำหรับออปเจ็คนั้น - objectName คือชื่อของออปเจ็ค ตัวอย่าง Student s1;
การสร้างออปเจ็ค คำสั่งที่ใช้ในการสร้างออปเจ็คจะมีรูปแบบดังนี้ ตัวอย่าง objectName = new ClassName ([argument]); objectName คือชื่อของออปเจ็ค new คือคีย์เวิร์ดของภาษาจาวาเพื่อใช้ในการสร้างออปเจ็ค ClassName คือชื่อของคลาส - arguments คือค่าที่ต้องการส่งผ่านในการเรียกเมธอด ตัวอย่าง s1 = new Student ();
การประกาศและสร้างออปเจ็ค คำสั่งในการประกาศและสร้างออปเจ็คสามารถที่จะรวมเป็นคำสั่งเดียวกันโดยมีรูปแบบคำสั่งดังนี้ [modifier] ClassName objectName = new className ([argument]); ตัวอย่าง 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(); }
คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค การห่อหุ้ม การสืบทอด การมีได้หลายรูปแบบ
การห่อหุ้ม หมายถึงการจะเรียกใช้คุณลักษณะของออปเจ็คจะทำได้โดยการเรียกผ่านเมธอดเท่านั้น หลักการของการห่อหุ้มคือการกำหนดให้คุณลักษณะของออปเจ็คมีคุณสมบัติเป็น private และกำหนดให้เมธอดมีคุณสมบัติเป็น public
ตัวอย่างโปรแกรม public class Student { private String id; private String name; private double gpa; public static final double minGPA =2.00 ; 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.printIn(“ID: “+id); System.out.printIn(“Name: “+name); System.out.printIn(“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;
การมีได้หลายรูปแบบ หมายถึงการที่สามารถตอบสนองต่อข่าวสาร (เมธอด) เดียวกันด้วยวิธีการที่ต่างกัน และสามารถกำหนดออปเจ็คได้หลายรูปแบบ ตัวอย่าง
ตัวอย่างโปรแกรม public class Ball { public void throw () {} } public class SoccerBall extends Ball { public void throw() { System.out.printIn(“Throwing soccerball”); public class TennisBall extends Ball { public void throw () { System.out.printIn(“Throwing tennisball”); public class TestBall { public static void main (String args[]) { Ball b1 = new Ball (); SoccerBall b2 = new SoccerBall(); Ball b3 = new SoccerBall();
สรุปเนื้อหาของบท ออปเจ็คต่าง ๆ จะประกอบไปด้วยคุณลักษณะและเมธอด ออปเจ็คหลายออปเจ็คสามารถถูกสร้างจากคลาสหนึ่งคลาสได้ คุณลักษณะแบ่งออกเป็นสองประเภทคือ - คุณลักษณะของออปเจ็ค คือข้อมูลที่เก็บอยู่ในแต่ละออปเจ็ค - คุณลักษณะของคลาส คือคุณลักษณะที่ใช้ร่วมกันของทุกออปเจ็ค เมธอดคือวิธีการเพื่อใช้ในการจัดการกับคุณลักษณะของ ออปเจ็คหรือคุณลักษณะของคลาส
สรุปเนื้อหาของบท การเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวามีรูปแบบต่าง ๆ ดังนี้ - การประกาศคลาส [modifier] class Classname { [class member] } - การประกาศคุณลักษณะ [modifier] dataType attributeName; - การประกาศเมธอด [modifier] return_type methodName ([arguments]) { [method_body]
สรุปเนื้อหาของบท การเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวามีรูปแบบต่าง ๆ ดังนี้ (ต่อ) - การประกาศออปเจ็ค [modifier] ClassName objectName; - การสร้างออปเจ็ค objectName = new ClassName ([arguments]); - การเรียกใช้คุณลักษณะของออปเจ็ค objectName.attributeName; - การเรียกใช้เมธอดของออปเจ็ค objectName.methodName ([arguments]);
สรุปเนื้อหาของบท คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค - การห่อหุ้ม คือการที่ให้คุณลักษณะถูกห่อหุ้มอยู่ภายในเมธอดโดยกำหนดให้คุณลักษณะมี access modifier เป็น private และกำหนดให้เมธอดมี access modifier เป็น public - การสืบทอด คือการที่คลาสใหม่สามารถนำเอาคุณลักษณะและเมธอดของคลาสที่ออกแบบไว้แล้วมาใช้ได้โดยใช้คีย์เวิร์ด extends ระบุการสืบทอด - การมีได้หลายรูปแบบ คือการที่สามารถตอบสนองต่อ เมธอดเดียวกันด้วยวิธีการที่ต่างกันได้ และสามารถกำหนดออปเจ็คได้หลายรูปแบบ