บทที่6...
-
Upload
pat-sirikan-bungkaew -
Category
Data & Analytics
-
view
250 -
download
0
Transcript of บทที่6...
บทท6 คลาสและการเขยนโปรแกรมเชงวตถเบองตน
ความหมายของโอโอพ โอโอพOOP หรอออบเจกตโอเรยนเทดโปรแกรมมง (Object Oriented Programming) เปนแนวคดในการเขยนโปรแกรมเชงวตถOOP เปนวธการเขยนโปรแกรมโดยอาศยแนวคดของวตถชนหนงม
ความสามารถในการปกปองขอมลและการสบทอดคณสมบต ซงบท นจะบอกถงความเปนมา ความหมาย และขอควรรเกยวกบหลกการ
เขยนโปรแกรมเชงวตถตลอดจนความสำาคญของการเขยนและออกแบบระบบงานกอนเขยนโปรแกรมรวมถงประโยชนของการเขยนโปรแกรมเชงวตถ
คลาสและออบเจกต การสรางและใชงานคลาส (class) และออบเจกต (object)
ภาษาแบบ scripting language ในปจจบนหลายๆภาษาก สนบสนนการเขยนโปรแกรมเชงวตถดวย ตวอยางเชน Perl และ
PHP กรวมอยในนนดวย แมวาจะไมซบซอนเหมอนอยางภาษาซพลสพลสหรอจาวากตาม
คลาส คอโครงสรางทประกอบดวยสมาชก (class members) หรอคณสมบต (properties) ตามแตจะเรยก และ ฟงกชน
สมาชก (member functions) การนยามคลาสขนมาใชงานจะเรมดวยclass { … } โดยขางในจะมสวนของตวแปรสมาชก และฟงกชนสมาชก
ตามลำาดบ ฟงกชนทมชอเดยวกบคลาสจะเรยกวา class constructor ทกครงทมการสรางออบเจกตจากคลาสโดยใชคำาสง new ฟงกชนททำา
หนาทเปน class constructor กจะถกเรยกมาทำางานกอนทกครง ประโยชนของการใชงานกเชน ใชกำาหนดคาเรมตน หรอเตรยมพรอม
กอนทจะเรมใชออบเจกต
ลองดตวอยาง การเขยนคลาสสำาหรบแบบขอมลเชง นามธรรม (Abstract Data Type) ทเรยกวา stack การทำางานของ
stack กเปนดงน ถาเราใสขอมลเขาไป ขอมลเหลานนกจะถกเกบไว เสมอนกบวา วางซอนกนจากขางลางขนขางบน ถาเราจะดงขอมล
ออกมาใชกจะไดขอมลทอยขางบนสด ซงกคอขอมลทเราใสเขาไป ครงลาสดนนเอง หนาทของ stack ทสำาคญกมเชน
ตวอยางการสรางคลาส stack ในภาษา PHP ทำาไดดงตวอยางตอ ไปน
โปรดสงเกตวา ตวแปร $this ทปรากฎอยในคลาสจะ เหมอน this ทเราใชในภาษาซพลสพลส และการนยามและสราง
ฟงกชนสมาชกจะทำาภายในคลาสทงหมด (เหมอนในภาษาจาวา) PHP ยงสนบสนนการสบทอดคณสมบตของคลาส (inheritance)
ทำาใหเราสามารถสรางคลาสขนมาใหม โดยใชคลาสทมอยเดมและ เพอสวนขยายเขาไป การสบสอดคณสมบตจากคลาสหนงไปยงอก
คลาสหนง จะใชคำาสง extends คลายกบของภาษาจาวา ตาม ตวอยางดงน
สแตตก (Static)
ตวแปรและเมทอดทเปน static คยเวรด static เปนคยเวรดทใชประกาศหนาตวแปรและเมทอด
ความพเศษของ static คอวาโดยปกตเวลาจะสรางออบเจกตตองทำาการ new ออบเจกตขนมา ตวแปรออบเจกตกจะอางองไปทออบเจกตทสราง
ขน แลวกเอาตวแปรนไปเรยกใชตวแปร ใชเมทอด แตถาตวแปรหรอเมท อดนนเปน static กจะทำาใหสามารถใชตวแปรหรอเมทอดนนไดเลยโดยไม
ตองสรางออบเจกตมาเรยกใชงาน สำาหรบตวแปรทเปน static นน จะทำาใหตวแปรนนเปนตวแปรของคลาส
ไมไดเปนของออบเจกตใดออบเจกตหนง ถามการเปลยนแปลงขนกบ ตวแปร static ออบเจกตอนๆ ทงหมดจะมองเหนการเปลยนแปลง
วธประกาศ สำาหรบตวแปร modifier static ชนดตวแปร ชอตวแปร; สำาหรบเมทอด modifier static ประเภทผลลพธ ชอเมทอด( ) { }
วธการเรยกใชงานเมทอดทเปน static ถาอยในคลาสเดยวกนก ชอเมทอด(); แบบนไดเลย แตถาอยคนละคลาสก ใช ชอคลาส. ชอเมทอด static
เมทอดทเปน static ทไดใชมาแลวกคอ เมทอด main ใน public static void main(String [] args) เพราะวา main เปนเมทอดสำาหรบเรมทำางานดงนนตองสามารถทำางานไดเลยโดยไมตองมออบเจกตมาเรยกใชงาน
เมทอดชอ f ในบรรทดท 17 ประกาศเปน เมทอด static ดงนนใน บรรทดท 12 สามารถเรยกใชเมทอด f ไดเลย แตบรรทดท 13 มการ
เรยกใชเมทอด println ซงอยในคลาส System กตองใชงานแบบ ชอคลาส.เมทอด
สงเกตวาเมอเอาคำาวา static ออกในบรรทดท 17 จะเกด error ขนทนทท บรรทดท 12 ทเรยกเมทอด
คอนสตรคเตอร(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) }}
ผลการรน
สงทอยในคอนสตรกเตอรเราจะพบวาคอนสตรกเตอรกคอเมธอดเหมอนกบเมธอดทวไปเพยงแตชอเดยวกนกบชอคลาสดงนนคำาสงทอยในคอนสตรกเตอรจงไมจำาเปนทจะตองเปนคำาสงสำาหรบกำาหนดคาเรมตนเทานนจะเปนคำาสงอยางอนกไดเพยงแตจดประสงคหลกของคอนสรกเตอรใชสำาหรบกำาหนดคาเรมตนเทานนดงตวอยางตอไปน
//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) }}
ผลการรน
โอเวอรโหลดคอนสตรกเตอร (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+".") ; }}
ผลการรน
คำาสง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) ; }}
ผลการรน
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; } }
6.6. ตวอยางการประยกตใชโปรแกรมเชงวตถจะเปนแบบการออกแบบคลาสแลวนำามาเขยนโปรแกรมประยกตสำาหรบใชงานจรงโดยอธบายขนตอนสำาคญในการทำางานแตละขนตอนโดยมโปรแกรมตวอยางการเขยนโปรแกรมสำาหรบเขารหสขอมลโดยสงขอมลผานเขาไปในเครอขายคอมพวเตอรเพอความปลอดภยไดนำาเทคโนโลยการเขารหสมาใชทำาโดยการเลอนขอมลแตถาเปนตวอกขระตวสดทายของภาษาองกฤษการเลอนขอมลจะกลบมาเรมตนทตวแรกใหมถาหากเปน2-shift ขอมลจะแทนไดดงนA แทนดวยCB แทนดวยD………………..Y แทนดวยAZ แทนดวยBถาขอมลตนฉบบเปน“DIZZY” แลวเขารหสแบบ2- shift ขอมลทเขารหสแลวจะเปน“FKBBA”
อธบายการทำางานของโปรแกรม1.ถาหากพมพคำาวาSekaiลงไปจะทำาใหตวแปรmessage ชไปยงออบเจกตสตรง“Sekai”2.ตอมาถาหากกดคยตวเลข5ลงไปจะทำาใหตวแปรshift มคาเปน53.เมอโปรแกรมเรยกใชเมธอดencrypt จะทำาใหmsgซงเปนพารามเตอรของเมธอดชไปยงออบเจกตเดยวกบmessage และพารามเตอรshift มคาเปน5เชนกน4.เมอเมธอดencrypt ทำางานทำาใหตวแปรencryptedMessageชไปยงหนอยความจำาออบเจกตสตรงทสรางขนมาใหม5.จากนนจะทำาใหตวแปรmsgชไปยงสตรงชดใหมทผานการเขารหสแลว6.หลงจากนนจะใหencryptedMessageมคาสตรงทเขารหสแลว
ตวอยางโปรแกรมจะแสดงการสรางคลาสของการนำาตวอกขระ[]มาสรางเปนรปสามเหลยมโดยการสรางคลาสสามารถทำาไดดงตอไปน1.สรางโปรเจกตใหม2.สรางคลาสใหมโดยเลอกเมนNew>Class3.กำาหนดชอคลาสแลวกดNext4.โปรแกรมจะแสดงคลาสใหมขนมา5.จากนนใหเตมโคดแลวรนโปรแกรม
สรปคลาสเปรยบเสมอนพมพเขยวสำาหรบสรางออบเจกตตางๆออกมาทมลกษณะคลายกนมาอยรวมกนในการสรางคลาสนนภายในประกอบดวยสวนทเปนคณลกษณะหรอตวแปรตางๆและสวนทเปนเมธอดโดยทตวแปรและเมธอดนผทนยามคลาสสามารถกำาหนดไดวาจะใหผใชภายนอกสามารถเขาถงไดในระดบใดเมอมการออบเจกตของคลาสขนมาแลวตองการใหทำาเมธอดใดทนทในการนยามคลาสนนจะตองสรางเมธอดทมชอเดยวกบคลาสทเรยกวาคอนสตรคเตอรขนมา
อางอง https://classoop
412.wordpress.com/lesson/
สมาชกนายอรรถพล ดคำา เลขท 1นางสาวจราย ไหลธรรมนญ เลขท 7นางสาวญาดา มนาง เลขท 8นางสาวสรกาญจน บงแกว เลขท 12นางสาววชญาพร ปลบตร เลขท 26
ชนมธยมศกษาปท 6/2