บทที่6...

28
บบบบบ6 บบบบบบบบบบบบบบบ บบบบบบบบบบบบบบบบบบบบบบ บบบ

Transcript of บทที่6...

Page 1: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

บทท6 คลาสและการเขยนโปรแกรมเชงวตถเบองตน

Page 2: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ความหมายของโอโอพ โอโอพOOP หรอออบเจกตโอเรยนเทดโปรแกรมมง (Object Oriented Programming) เปนแนวคดในการเขยนโปรแกรมเชงวตถOOP เปนวธการเขยนโปรแกรมโดยอาศยแนวคดของวตถชนหนงม

ความสามารถในการปกปองขอมลและการสบทอดคณสมบต ซงบท นจะบอกถงความเปนมา ความหมาย และขอควรรเกยวกบหลกการ

เขยนโปรแกรมเชงวตถตลอดจนความสำาคญของการเขยนและออกแบบระบบงานกอนเขยนโปรแกรมรวมถงประโยชนของการเขยนโปรแกรมเชงวตถ

Page 3: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

คลาสและออบเจกต การสรางและใชงานคลาส (class) และออบเจกต (object)

ภาษาแบบ scripting language ในปจจบนหลายๆภาษาก สนบสนนการเขยนโปรแกรมเชงวตถดวย ตวอยางเชน Perl และ

PHP กรวมอยในนนดวย แมวาจะไมซบซอนเหมอนอยางภาษาซพลสพลสหรอจาวากตาม

Page 4: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

คลาส คอโครงสรางทประกอบดวยสมาชก (class members) หรอคณสมบต (properties) ตามแตจะเรยก และ ฟงกชน

สมาชก (member functions) การนยามคลาสขนมาใชงานจะเรมดวยclass { … } โดยขางในจะมสวนของตวแปรสมาชก และฟงกชนสมาชก

ตามลำาดบ ฟงกชนทมชอเดยวกบคลาสจะเรยกวา class constructor ทกครงทมการสรางออบเจกตจากคลาสโดยใชคำาสง new ฟงกชนททำา

หนาทเปน class constructor กจะถกเรยกมาทำางานกอนทกครง ประโยชนของการใชงานกเชน ใชกำาหนดคาเรมตน หรอเตรยมพรอม

กอนทจะเรมใชออบเจกต

Page 5: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ลองดตวอยาง การเขยนคลาสสำาหรบแบบขอมลเชง นามธรรม (Abstract Data Type) ทเรยกวา stack การทำางานของ

stack กเปนดงน ถาเราใสขอมลเขาไป ขอมลเหลานนกจะถกเกบไว เสมอนกบวา วางซอนกนจากขางลางขนขางบน ถาเราจะดงขอมล

ออกมาใชกจะไดขอมลทอยขางบนสด ซงกคอขอมลทเราใสเขาไป ครงลาสดนนเอง หนาทของ stack ทสำาคญกมเชน

Page 6: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ตวอยางการสรางคลาส stack ในภาษา PHP ทำาไดดงตวอยางตอ ไปน

Page 7: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

โปรดสงเกตวา ตวแปร $this ทปรากฎอยในคลาสจะ เหมอน this ทเราใชในภาษาซพลสพลส และการนยามและสราง

ฟงกชนสมาชกจะทำาภายในคลาสทงหมด (เหมอนในภาษาจาวา) PHP ยงสนบสนนการสบทอดคณสมบตของคลาส (inheritance)

ทำาใหเราสามารถสรางคลาสขนมาใหม โดยใชคลาสทมอยเดมและ เพอสวนขยายเขาไป การสบสอดคณสมบตจากคลาสหนงไปยงอก

คลาสหนง จะใชคำาสง extends คลายกบของภาษาจาวา ตาม ตวอยางดงน

Page 8: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Page 9: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

สแตตก (Static)

Page 10: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ตวแปรและเมทอดทเปน static คยเวรด static เปนคยเวรดทใชประกาศหนาตวแปรและเมทอด

ความพเศษของ static คอวาโดยปกตเวลาจะสรางออบเจกตตองทำาการ new ออบเจกตขนมา ตวแปรออบเจกตกจะอางองไปทออบเจกตทสราง

ขน แลวกเอาตวแปรนไปเรยกใชตวแปร ใชเมทอด แตถาตวแปรหรอเมท อดนนเปน static กจะทำาใหสามารถใชตวแปรหรอเมทอดนนไดเลยโดยไม

ตองสรางออบเจกตมาเรยกใชงาน สำาหรบตวแปรทเปน static นน จะทำาใหตวแปรนนเปนตวแปรของคลาส

ไมไดเปนของออบเจกตใดออบเจกตหนง ถามการเปลยนแปลงขนกบ ตวแปร static ออบเจกตอนๆ ทงหมดจะมองเหนการเปลยนแปลง

Page 11: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

วธประกาศ สำาหรบตวแปร modifier static ชนดตวแปร ชอตวแปร; สำาหรบเมทอด modifier static ประเภทผลลพธ ชอเมทอด( ) { }

วธการเรยกใชงานเมทอดทเปน static ถาอยในคลาสเดยวกนก ชอเมทอด(); แบบนไดเลย แตถาอยคนละคลาสก ใช ชอคลาส. ชอเมทอด static

เมทอดทเปน static ทไดใชมาแลวกคอ เมทอด main ใน public static void main(String [] args) เพราะวา main เปนเมทอดสำาหรบเรมทำางานดงนนตองสามารถทำางานไดเลยโดยไมตองมออบเจกตมาเรยกใชงาน

Page 12: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

เมทอดชอ f ในบรรทดท 17 ประกาศเปน เมทอด static ดงนนใน บรรทดท 12 สามารถเรยกใชเมทอด f ไดเลย แตบรรทดท 13 มการ

เรยกใชเมทอด println ซงอยในคลาส System กตองใชงานแบบ ชอคลาส.เมทอด

Page 13: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

สงเกตวาเมอเอาคำาวา static ออกในบรรทดท 17 จะเกด error ขนทนทท บรรทดท 12 ทเรยกเมทอด

Page 14: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

คอนสตรคเตอร(Constructor) ภาษาจาวามเมธอดพเศษตวหนงเรยกวา คอนสตรกเตอร ซง

จะม ชอเหมอนกบชอคลาส เราใชคอนสตรกเตอรสำาหรบเปนตว

กำาหนด คาเรมตนใหกบอนสแตนทโดยเฉพาะ เมอใดกตามทเราทำาการ

สราง อนสแตนทดวยคำาสง new คอนสตรกเตอรจะถกเรยกใหทำางาน

โดยอตโนมต ดงตวอยางตอไปน

//DriveAcar05.java class Vehicle { int numberOfWheels ; boolean hasEngine ; //constructor Vehicle() { // (1) numberOfWheels = 6 ; hasEngine = true ; } void run() { System.out.println("I am running") ; }}public class DriveAcar05 { public static void main(String[] args) { Vehicle myCar = new Vehicle() ; System.out.println("mycar has "+myCar.numberOfWheels+"Wheels.") ; // (2) System.out.println("That mycar has an engin is "+myCar.hasEngine+".") ; // (3) }}

Page 15: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ผลการรน

Page 16: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

สงทอยในคอนสตรกเตอรเราจะพบวาคอนสตรกเตอรกคอเมธอดเหมอนกบเมธอดทวไปเพยงแตชอเดยวกนกบชอคลาสดงนนคำาสงทอยในคอนสตรกเตอรจงไมจำาเปนทจะตองเปนคำาสงสำาหรบกำาหนดคาเรมตนเทานนจะเปนคำาสงอยางอนกไดเพยงแตจดประสงคหลกของคอนสรกเตอรใชสำาหรบกำาหนดคาเรมตนเทานนดงตวอยางตอไปน

//DriveAcar06.java class Vehicle { int numberOfWheels ; boolean hasEngine ; //constructor Vehicle() { numberOfWheels = 6 ; hasEngine = true ; System.out.println("A car has been built") ; // (1) notice this line } void run() { System.out.println("I am running") ; }}public class DriveAcar06 { public static void main(String[] args) { Vehicle myCar = new Vehicle() ; System.out.println("mycar has "+myCar.numberOfWheels+"Wheels.") ; // (2) System.out.println("That mycar has an engin is "+myCar.hasEngine+".") ; // (3) }}

Page 17: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ผลการรน

Page 18: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

โอเวอรโหลดคอนสตรกเตอร (Overloading Constructor)คอนสตรกเตอรกสามารถมชอซำากนไดเชนเดยวกบเมธอดทวไปเราเรยกลกษณะนวาโอเวอรโหลดคอนสตรกเตอรดงตวอยางตอไปน//OverloadConstructor.java

class Vehicle { int numberOfWheels ; boolean hasEngine ; //constructor and Overload Constructor Vehicle() { numberOfWheels = 6 ; hasEngine = true ; System.out.println("A car has been built") ; //notice this line } Vehicle(int number, boolean engine) { // (1) numberOfWheels = number ; hasEngine = engine ; System.out.println("A car has been built") ; //notice this line } void run() { System.out.println("I am running") ; }}public class OverloadConstructor { public static void main(String[] args) { Vehicle myCar = new Vehicle(4,true) ; // (2) System.out.println("mycar has "+myCar.numberOfWheels+"Wheels.") ; System.out.println("That mycar has an engin is "+myCar.hasEngine+".") ; }}

Page 19: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ผลการรน

Page 20: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

คำาสงthis()ภายในคอนสตรกเตอรเราสามารถเรยกคอนสตรกเตอรตวอนในคลาสเดยวกนไดโดยใชคำาสงthis() และตองเปนคำาสงแรกสดเสมอดงตวอยางตอไปน

//estThis.javaclass A { int a ; A() {T a = 0 ; System.out.println("Default constructor") ; } A(int i) { this() ; a = i ; System.out.println("constructor 1 ") ; } A(int i, int j) { this(i+j) ; System.out.println("constructor 2 ") ; }}public class DriveAcar06 { public static void main(String[] args) { System.out.println("Instantiate x"); A x = new A() ; System.out.println("Variable a is "+ x.a) ; System.out.println("Instantiate y "); A y = new A(5) ; System.out.println("Variable a is "+ y.a) ; System.out.println("Instantiate z "); A z = new A(5,6) ; System.out.println("Variable a is "+ z.a) ; }}

Page 21: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ผลการรน

Page 22: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

6.5. การสงออบเจกตไปยงเมธอดในการเขยนโปรแกรมทมการสรางคลาสขนมาหลายๆคลาสนนออบเจกตของคลาสหนงสามารถใชเปนอารกวเมนตเพอสงผานไปยงเมธอดของคลาสอกคลาสหนงไดเชนโปรแกรมStudent.Javaเปนโปรแกรมคลาสสำาหรบเกบขอมลนกเรยนไดแกซอและอเมลโดยมเมธอดสำาหรบกำาหนดและเรยกดชอและอเมลสำาหรบใชงาน

public class Student3 { private String name; private String email; public Student3() { name = "Unassigned"; email = "Unassigned"; } public String getEmail(){ return email; } public String getName(){ return name;} public void setEmail(String address){ email = address;} public void setName(String studentName){ name = studentName; } }

Page 23: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

6.6. ตวอยางการประยกตใชโปรแกรมเชงวตถจะเปนแบบการออกแบบคลาสแลวนำามาเขยนโปรแกรมประยกตสำาหรบใชงานจรงโดยอธบายขนตอนสำาคญในการทำางานแตละขนตอนโดยมโปรแกรมตวอยางการเขยนโปรแกรมสำาหรบเขารหสขอมลโดยสงขอมลผานเขาไปในเครอขายคอมพวเตอรเพอความปลอดภยไดนำาเทคโนโลยการเขารหสมาใชทำาโดยการเลอนขอมลแตถาเปนตวอกขระตวสดทายของภาษาองกฤษการเลอนขอมลจะกลบมาเรมตนทตวแรกใหมถาหากเปน2-shift ขอมลจะแทนไดดงนA แทนดวยCB แทนดวยD………………..Y แทนดวยAZ แทนดวยBถาขอมลตนฉบบเปน“DIZZY” แลวเขารหสแบบ2- shift ขอมลทเขารหสแลวจะเปน“FKBBA”

Page 24: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

อธบายการทำางานของโปรแกรม1.ถาหากพมพคำาวาSekaiลงไปจะทำาใหตวแปรmessage ชไปยงออบเจกตสตรง“Sekai”2.ตอมาถาหากกดคยตวเลข5ลงไปจะทำาใหตวแปรshift มคาเปน53.เมอโปรแกรมเรยกใชเมธอดencrypt จะทำาใหmsgซงเปนพารามเตอรของเมธอดชไปยงออบเจกตเดยวกบmessage และพารามเตอรshift มคาเปน5เชนกน4.เมอเมธอดencrypt ทำางานทำาใหตวแปรencryptedMessageชไปยงหนอยความจำาออบเจกตสตรงทสรางขนมาใหม5.จากนนจะทำาใหตวแปรmsgชไปยงสตรงชดใหมทผานการเขารหสแลว6.หลงจากนนจะใหencryptedMessageมคาสตรงทเขารหสแลว

Page 25: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

ตวอยางโปรแกรมจะแสดงการสรางคลาสของการนำาตวอกขระ[]มาสรางเปนรปสามเหลยมโดยการสรางคลาสสามารถทำาไดดงตอไปน1.สรางโปรเจกตใหม2.สรางคลาสใหมโดยเลอกเมนNew>Class3.กำาหนดชอคลาสแลวกดNext4.โปรแกรมจะแสดงคลาสใหมขนมา5.จากนนใหเตมโคดแลวรนโปรแกรม

Page 26: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

สรปคลาสเปรยบเสมอนพมพเขยวสำาหรบสรางออบเจกตตางๆออกมาทมลกษณะคลายกนมาอยรวมกนในการสรางคลาสนนภายในประกอบดวยสวนทเปนคณลกษณะหรอตวแปรตางๆและสวนทเปนเมธอดโดยทตวแปรและเมธอดนผทนยามคลาสสามารถกำาหนดไดวาจะใหผใชภายนอกสามารถเขาถงไดในระดบใดเมอมการออบเจกตของคลาสขนมาแลวตองการใหทำาเมธอดใดทนทในการนยามคลาสนนจะตองสรางเมธอดทมชอเดยวกบคลาสทเรยกวาคอนสตรคเตอรขนมา

Page 28: บทที่6 คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น

สมาชกนายอรรถพล ดคำา เลขท 1นางสาวจราย ไหลธรรมนญ เลขท 7นางสาวญาดา มนาง เลขท 8นางสาวสรกาญจน บงแกว เลขท 12นางสาววชญาพร ปลบตร เลขท 26

ชนมธยมศกษาปท 6/2