object and classes

22
Object and classes

Upload: tivona

Post on 06-Jan-2016

25 views

Category:

Documents


1 download

DESCRIPTION

Object and classes. บทนี้เรียนอะไรบ้าง. แนะนำ Object-oriented programming บอกวิธีการสร้าง object จากคลาสที่จาวาให้มา สอนวิธีสร้างคลาสของเราเอง. แนะนำ Object-Oriented Programming. โปรแกรมประกอบขึ้นจากออบเจ็กต์ แต่ละออบเจ็กต์จะมีฟังก์ชั่นให้เรียกใช้ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Object and classes

Object and classes

Page 2: Object and classes

บทนี้��เรี�ยนี้อะไรีบ�าง• แนี้ะนี้�า Object-oriented programming• บอกวิ�ธี�การีสรี�าง object จากคลาสท��จาวิาให้�มา• สอนี้วิ�ธี�สรี�างคลาสของเรีาเอง

Page 3: Object and classes

แนี้ะนี้�า Object-Oriented Programming

• โปรีแกรีมปรีะกอบข �นี้จากออบเจ!กต์#• แต์$ละออบเจ!กต์#จะม�ฟั&งก#ชั่( �นี้ให้�เรี�ยกใชั่�– คนี้เรี�ยกใชั่�ไม$จ�าเป)นี้ต์�องรี* �วิ$าข�างในี้ออบเจ!กต์#ท�างานี้ย(งไง

– ขอให้�ใชั่�ได้�ต์ามท��ต์�องการีก!พอ• วิ�ธี�ค�ด้ในี้การีโปรีแกรีม– เม-�อต์�องการีแก�ป&ญห้า ให้�ออกแบบต์(วิข�อม*ลท��ต์�องใชั่�ก$อนี้

– แล�วิวิ�ธี�แก�ป&ญห้าค$อยต์ามมา

Page 4: Object and classes

ต์(วิอย$าง“Hello”.length();

Object ท��เป)นี้ ชั่นี้�ด้ String เมธีอด้

เม-�อรี(นี้แล�วิจะได้� 5 เป)นี้ค�าต์อบออกมา สามารีถ print ออกมาได้� เชั่$นี้

System.out.println(“Hello”.length());

Page 5: Object and classes

System.out.println(“Hello”.length());

นี้��เป)นี้ explicit พารีาม�เต์อรี# ของ

เมธีอด้ println ครี(�งนี้��

นี้��เป)นี้ implicit พารีาม�เต์อรี# ของ

เมธีอด้ println ครี(�งนี้��

จรี�งๆม(นี้ก!ค-อ ออบเจ!กต์#ท��เรี�ยกเมธีอด้

นี้(�นี้เอง

Page 6: Object and classes

การีสรี�างออบเจ!กต์#• ต์(วิอย$าง คลาส RectangleRectangle box = new Rectangle(5,10,20,30);

System.out.println(new Rectangle());

พารีาม�เต์อรี# ของคอนี้สต์รี(คเต์อรี#

สรี�างออบเจ!กต์#

ควิรีเก!บไวิ�ในี้ต์(วิแปรีไม$ง(�นี้เอาไปใชั่�ต์$อยาก

เอาออบเจ!กต์# ท��สรี�างไปเป)นี้พารีาม�เต์อรี#เมธีอด้อ-�นี้ก!ได้�

คอนี้สต์(รีคเต์อรี#ไม$ม�พารีาม�เต์อรี#ก!ได้�

Page 7: Object and classes

API documentation

• ค-อ help file ท��บอกวิ�ธี�ใชั่�งานี้ท1กคลาสและเมธีอด้ท��คนี้เข�ยนี้จาวิาท�ามาแล�วิ

• เรีาเข�ยนี้ของคลาสเรีาเองได้�ด้�วิยนี้ะ• ลองท�าควิามรี* �จ(ก จากห้นี้�า

java.sun.com/javase/7/docs/api/index.html– ลองห้าของ Rectangle ด้*

Page 8: Object and classes

เรีาสามารีถเรี�ยกเมธีอด้ของ Rectangle ก(บออบ เจ!กต์#ชั่นี้�ด้นี้��ท��เรีาพ �งสรี�างข �นี้มา เชั่$นี้

box.translate(15,25); เคล-�อนี้ส��เห้ล��ยมไป 15 จ1ด้ต์าม แนี้วิแกนี้ x และ 25 จ1ด้ต์ามแนี้วิแกนี้ y

อย$าล-ม วิ$าถ�าจะเอา Rectangle มาใชั่�ได้� เรีาต์�องimport package ท��ม(นี้อย*$ เข�ามาในี้โปรีแกรีมท��เรีาเข�ยนี้ก$อนี้

import java.awt.Rectangle;

Package ค-อกล1$มของคลาสท��จ(ด้ไวิ�ชั่1ด้

เด้�ยวิก(นี้ ไวิ�ใชั่�งานี้รี$วิมก(นี้

Page 9: Object and classes

exercise

• จงใชั่�คลาส Day ในี้ API เข�ยนี้โปรีแกรีมท��รี (บวิ(นี้ เด้-อนี้ป2เก�ด้ แล�วิพ�มพ#ค�าต์อบวิ$า คนี้ท��เก�ด้วิ(นี้เด้-อนี้

ป2นี้(�นี้ ม�ชั่�วิ�ต์มาแล�วิท(�งห้มด้ก��วิ(นี้• จงใชั่�คลาส Picture มาเข�ยนี้โปรีแกรีมในี้การี

เปล��ยนี้รี*ปภาพ ทด้ลองเมธีอด้ต์$างๆต์ามท��ต์�องการี

Page 10: Object and classes

คลาส• คลาสค-อ template ท��เรีาจะใชั่�สรี�างออบเจ!กต์#– พ*ด้ง$ายๆ ม(นี้เป)นี้ต์(วิก�าห้นี้ด้วิ$า ออบเจ!กต์#ท��สรี�างจาก

ม(นี้ จะม�ข�อม*ลอะไรีอย*$ภายในี้บ�าง– คลาสเปรี�ยบเสม-อนี้แม$พ�มพ# ส$วินี้ออบเจ!กต์#ก!เป)นี้ส��งท��แม$พ�มพ#พ�มพ#ออกมา

• เม-�อเรีาสรี�างออบเจ!กต์#ข �นี้จากคลาส– เรีาเรี�ยกเห้ต์1การีณ์#นี้��วิ$า การีสรี�าง instance ของคลาส

Page 11: Object and classes

• ภายในี้แต์$ละออบเจ!กต์#– ข�อม*ล ห้รี-อด้าต์�า เรีาเรี�ยกวิ$า instance fields ห้รี-อ

instance variables• แต์$ละออบเจ!กต์# จะม�ค$าของแต์$ละ instance field เป)นี้ของต์นี้เองไม$ใชั่�ค$ารี$วิมก(บออบเจ!กต์#อ-�นี้• สถานี้ะของค$าต์(วิแปรีเห้ล$านี้��ท( �งห้มด้ ถ-อเป)นี้ state ของออบเจ!กต์#• ซึ่ �งเม-�อเรี�ยกเมธีอด้ state ของออบเจ!กต์#อาจเปล��ยนี้ได้�

– ส$วินี้ฟั&งก#ชั่(�นี้ท��ออบเจ!กต์#นี้(�นี้เรี�ยกเพ-�อจ(ด้การีข�อม*ลข�างต์�นี้ เรี�ยกวิ$า methods

Page 12: Object and classes

• ห้�ามเข�าถ งค$าของ instance field โด้ยต์รีง• ต์�องอ$านี้ และเข�ยนี้ค$าต์(วิแปรี จากเมธีอด้เท$านี้(�นี้• ท(�งนี้��เพ-�อ– ป6องก(นี้การีย(ด้ค$าผิ�ด้ๆ ใส$ลงไปในี้ instance field• เชั่$นี้ a.x = 100; จรี�งๆ x อาจจะม�ค$าเก�นี้ 99 ไม$ได้� ด้(งนี้(�นี้เข�ยนี้เมธีอด้ค1มด้�กวิ$า

– เวิลาจะเปล��ยนี้พฤต์�กรีรีมการีท�าอะไรี จะได้�แก�ในี้เมธีอด้ ท�เด้�ยวิ ไม$ต์�องมาแก�ห้ลายๆท��

Page 13: Object and classes

ต์(วิอย$างpublic class Counter{

private int value;public void count(){ value = value+1;} public int getValue(){return value;}

}

public class Auser{…Counter tally = new Counter();Counter tally02 = new Counter();tally.count();tally.count();int result = tally.getValue(); //result is set to 2int result02 = tally02.getValue(); //result 02is 0, a default value

}

อ$านี้ได้�เฉพาะเมธีอด้ของคลาสCounter เท$านี้(�นี้ เพรีาะเป)นี้ private

ค-อ ต์�องเรี�ยกใชั่�ต์(วิแปรีนี้��ผิ$านี้ เมธีอด้ท��คลาส Counter ม� เท$านี้(�นี้

เรี�ยกวิ$าencapsulation

Instance var ม�ค$า default แต์$local var ต์�อง initiailize ท1กครี(�งนี้ะไม$เห้ม-อนี้ก(นี้

Page 14: Object and classes

อ�กต์(วิอย$างpublic class BankAccount{

private double balance;public BankAccount(){…}public BankAccount(double initialBalance){…}

public void deposit(double amount){…}public void withdraw(double amount){…}public double getBalance(){…}

mutator

accessor

Constructor ห้�าม return นี้ะ

อย$าล-ม initialize ในี้คอนี้ สต์รี(คเต์อรี# เพรีาะ null เรี�ยก

เมธีอด้ไม$ได้�นี้ะ

Page 15: Object and classes

จากห้นี้�าท��แล�วิ ถ�าเรีาต์�องการีท�าให้�คลาสของเรีา ม� help file แบบท�� API ต์ามปกต์�ม�

เต์�มคอมเม�นี้ไวิ�ด้�านี้บนี้ของคลาสห้รี-อเมธีอด้ท��ต์�องการีสรี�าง API ด้(งต์(วิอย$างนี้��/**

Withdraws money from the bank account.@param amount the amount to withdraw

*/public void withdraw(double amount){…}

/**Gets the current balance of the bank account.@return the current balance

*/public double getBalance(){…}

ใชั่� javadoc สรี�างไฟัล# API

จากคอมเม�นี้ ได้�อ(ต์โนี้ม(ต์�

ท1ก tool ม�ให้�ทด้ลอง

Page 16: Object and classes

สรี1ป วิ�ธี�เข�ยนี้คลาสของเรีาข �นี้มาใชั่�งานี้เอง

• ค�ด้ก$อนี้ วิ$าคลาสของเรีาต์�องม�เมธีอด้อะไรีท��เรี�ยกใชั่�ได้�บ�าง

• เข�ยนี้ห้(วิเมธีอด้เห้ล$านี้(�นี้ออกมาก$อนี้• เข�ยนี้คอมเม�นี้ของเมธีอด้นี้(�นี้ให้�เรี�ยบรี�อย• ห้าวิ$า ต์�องใชั่� instance variable อะไรีบ�าง• เข�ยนี้โค�ด้ของคอนี้สต์รี(คเต์อรี#และเมธีอด้• Test ต์(วิโค�ด้ท�ละเมธีอด้ ด้�วิยเครี-�องม-อ อย$างเชั่$นี้

Junit ( คลาสไม$จ�าเป)นี้ต์�องม� main นี้ะ ขอให้�ม�เมธีอด้ให้�เรี�ยกใชั่�ได้�ก!โอเคแล�วิ)

Page 17: Object and classes

ครีาวินี้��มาด้*เรี-�อง object ref

• ต์(วิแปรีท��ม�ไทป:เป)นี้คลาส ไม$ได้�เก!บออบเจ!กต์#– แต์$เก!บต์�าแห้นี้$งในี้เมมโมรี�� ของออบเจ!กต์#นี้(�นี้

• Object reference ห้มายถ งต์�าแห้นี้$งในี้เมมโมรี��ของอ!อบเจ!กต์#

• ต์(วิแปรีท��เก!บต์�าแห้นี้$งในี้เมมโมรี��ของอ!อบเจ!กต์# เรีาเรี�ยกวิ$าต์(วิแปรีนี้(�นี้ refer to อ!อบเจ!กต์#นี้(�นี้

Page 18: Object and classes

Rectangle box = new Rectangle(5,10,20,30);

box RectangleX=5y=10

Width = 20 Height = 30

Rectangle box2 = box;

box2

Page 19: Object and classes

เปรี�ยบเท�ยบ int ก(บ อ!อบเจ!กต์#int n =13;int n2 = n;n2 = 12;

เม-�อรี(นี้เสรี!จ n จะเท$าก(บ13 ส$วินี้ n2 จะเท$าก(บ12

Rectangle box = new Rectangle(5,10,20,30);Rectangle box2 = box; box2.translate(15,25);

เม-�อรี(นี้เสรี!จจะได้�box ก(บbox2 ท��ข�างในี้เห้ม-อนี้

ก(นี้ท(�งค*$

Page 20: Object and classes

this

ถ�าใชั่�ในี้เมธีอด้ ห้รี-อคอนี้สต์รี(คเต์อรี# จะห้มายถ งออบเจ!กต์#ท��เมธี อด้นี้(�นี้ๆถ*กเรี�ยก เชั่$นี้

public void deposit(double amount){balance = balance + amount;

} ซึ่ �งม�ควิามห้มายเห้ม-อนี้ก(บ

public void deposit(double amount){this.balance = this.balance + amount;

}

Page 21: Object and classes

• ห้รี-อจะใชั่�เพ-�อแยก instance var ก(บ local var ก!ได้�เชั่$นี้

public BankAccount(double balance){this.balance = balance;

}

Page 22: Object and classes

ใชั่�คอนี้สต์รี(คเต์อรี#ต์(วิห้นี้ �งเป)นี้ฐานี้เรี�ยกต์(วิอ-�นี้

public BankAccount(double initialBalance){balance = initialBalance;

}

public BankAccount(){this(0); // การีเรี�ยกคอนี้สต์รี(คเต์อรี#อ-�นี้ ท�าได้�แค$บรีรีท(ด้แรีกของ

//คอนี้สต์รี(คเต์อรี#เท$านี้(�นี้}