380 likes | 562 Views
Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept). วิชา การเขียนโปรแกรมเชิงวัตถุ โดย อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com xnattapong@hotmail.com. วัตถุประสงค์. แนะนำออปเจ็คและคลาส อธิบายคุณลักษณะและเมธอด อธิบายการเขียนโปรแกรมเชิงออปเจ็คโดยใช้ภาษาจาวา
E N D
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รูปแสดงการสร้างออปเจ็คจากคลาส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 ระบุการสืบทอด - การมีได้หลายรูปแบบ คือการที่สามารถตอบสนองต่อ เมธอดเดียวกันด้วยวิธีการที่ต่างกันได้ และสามารถกำหนดออปเจ็คได้หลายรูปแบบ