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

9
ความหมายของโอโอพี โอโอพี หรื OOP เปนคํายอของ Object-Oriented Programming หมายถึงการเขียนโปรแกรมเชิงวัตถุ หรือเขียนโปรแกรมแบบออบเจ็กต การเขียนโปแกรมในลักษณะนี้จะแตกตางจากการเขียน โปรแกรมที่ประมวลผลเชิงคําสั่งที่มีการทํางานทีละตําสั่งดังที่เคยศึกษามา แตจะเปนการสรางขอมูลเปนวัตถุหรือออบเจ็กต แลว เขียนโปแกรมประมวลกับออบเจ็กตนั้นๆ ใหทํางานตามตองการ นอกจากนั้นยังเขียนโปรแกรมประมวลผลกับออบเจ็กตได ซึ่ง ออบเจ็กตจะมีลักษณะ 3 ประการดังตอไปนีstate เปนคุณลักษณะของออบเจ็กตนั้นๆ ที่บอกวาออบเจ็กตนั้นเปนอะไรบาง หรือเรียกอีกอยางหนึ่งวาเปน คุณลักษณะประจํา โดยคุณสมบัติขึ้นกับมุมมองของแตละคน ในการเขียนโปรแกรมเชิงวัตถุ คุณลักษณะประจํานี้มักจะเปน ขอมูล หรือตัวแปรตางๆ ของออบเจ็กตนั้น Behavior หมายถึง พฤติกรรมของออบเจ็กต I dentity เปนคุณลักษณะที่ทําใหออบเจ็กตแตละออบเจ็กตตางกัน ในการเขียนโปรแกรมนั้นออบเจ็กตมีไดหลายตัว โดยออบเจ็กตแตละตัวจะเปนอิสระ ไมขึ้นตอกันแตละออบเจ็กต สามารถที่จะสื่อสารหรือโตตอบกันไดโดยวิธีสงเมสเสจ ถึงกัน

Upload: finian-nian

Post on 15-Feb-2017

1.514 views

Category:

Documents


0 download

TRANSCRIPT

ความหมายของโอโอพ โอโอพ หร OOP เปนคายอของ Object-Oriented Programming

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

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

Behavior หมายถง พฤตกรรมของออบเจกต I dentity เปนคณลกษณะททาใหออบเจกตแตละออบเจกตตางกน

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

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

สวนสาคญสองสวนของออบเจกตคอ คณลกษณะซงเปนขอมลประจาตวของออบเจกตและพฤตกรรมหรอเมธอด ซงบอกวาออบเจกตกาลงทาสงใดอยถาหากมการสรางออบเจกตขนมาและโปรแกรมตองการจดการกบขอมลทเปนคณลกษณะของออบเจกตกจะกระทาผานเมธอด

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

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

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

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

การนยามคลาส

ในภาษาจาวาสามารถนยามคลาสหรอประกาศคลาสขนมาโดยมรปแบบดงน

AccessSpecifier เปนความสามารถในการเขาถงคลาสนนๆclass เปนคยเวรดในภาษาจาวาเพทอใชในการประกาศคลาสName เปนชอคลาสมประกาศขนMembers เปนคณลกษณะหรอเมธอดตางๆ ของคลาสทนยามขน การสรางออบเจกต หลงจากนยามคลาสขนมาแลว ถาหากโปรแกรมตองการใชงานจะตองสรางออบเจกตขนมา เพอบอกวาออบเจกตเปนของคลาสใด โดยจะตองประกาศออบเจกตขนมากอนซงมรปแบบดงน

ClassName ObjectName;

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

objecyName = new ClassName([arguments])

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

[AccessSpecifier] Class Name

{Members

}

สแตตก(static) ในจาวามคลาสตางๆใหใชงานมากมาย การสรางคลาสขนมาใหมนทาใหเราสามารถสรางเมธอดใหมๆ ขนมาใชงานแลวรวมกนเปนคลาสได และทผานมาในบทนจะเหนวาถาหากมการประกาศออบเจกตตองการใชงานสรางออบเจกตดวยคาสง new เชน

จากโปรแกรมนจะเปนวาเมธอดในคลาส Scanner ทใชรบขอมลจะไมเปนแบบสแตตก ซงจะตองสรางออบเจกตขนมา แตเมธอดชอmax ในคลาส TestMax ทสรางขนปนแบบสแตตก จงเรยกชอคลาสและตามดวยเมธอดมาใชงานไดทนทโดยไมตองสรางออบเจกต

import java.util.Scanner;public class Cal_Max {

public static void main(String args[]){

int num1,num2;Scanner stdin = new Scanner(System.in);System.out.print("Input Number 1 : ");

num1 = stdin.nextInt();System.out.print("Input Number 2 : ");

num2 = stdin.nextInt();int larger = TestMax.max(num1,num2);

System.out.println("Max Data is "+larger);}}

class TestMax{

static int max(int num1, int num2){

if(num1 > num2)return num1;

elsereturn num2;

}}

Constructors เปนฟงกชนในคลาสทจะถกเรยกอตโนมตเมอเราสรางออบเจคใหกบคลาสนน ๆ ดวยคาสง new ซงมนจะเปนฟงกชน Constructors ไดกตอเมอชอของมนเหมอนชอคลาส ถาภายในคลาสไมม constructor ดงนนมนจะทาการเรยก constructure ของ base class (ถามนม) เชน

// ในกรณทไมสงคาพารามเตอรใหกบ Constructor function $default_cart = new Constructor_Cart; // ในกรณนฟงกชน Constructor ของ Constructor_Cart นนไดกาหนดคา default ใหกบพารามเตอรอยแลว // ดงนนเรากไมจาเปนตองสงคาพารามเตอรกได ไมเกด error// กรณทสงคา parameter ไปดวย $different_cart = new Constructor_Cart("20", 17); ?>

<?phpclass Auto_Cart extends Cart

{ function Auto_Cart() {

$this->add_item("10", 1);} }

?> Constructors function นนสามารถรบคาพารามเตอรไดเชนกน ดงน

<?phpclass Constructor_Cart extends Cart

{function Constructor_Cart(

$item = "10", $num = 1) { $this->add_item($item, $num); } }

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

เชนโปรแกรม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;}

}

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

ถาขอมลตนฉบบเปน “DIZZY” แลวเขารหสแบบ 2- shift ขอมลทเขารหสแลวจะเปน “FKBBA”

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

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

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

นายปตพงษ ปลบตร เลขท10นางสาว รงทวา ผดงพฒนดษฐ เลขท20

นางสาวจณสตา ลมทอง เลขท30นางสาวจนทรา แสงสรยาอทย เลขท31

นางสาวนศาชล ไทยพทรา เลขท33นางสาวอารษา งามขา เลขท37

นกเรยนชน ม.6/1โรงเรยนเฉลมพระเกยรตสมเดจพระศรนครนทร กาญจนบร

วชาการเขยนโปรแกรมประยกต (ง30213)เสนอ

ครทรงศกด โพธเอยม