class Rectangle

Download Report

Transcript class Rectangle

Class หมายถึง โครงสร ้างของ object
่ การจัดกลุม
ซึงมี
่ ของโครงสร ้างจาก
คุณสมบัตท
ิ เราสนใจว่
ี่
ามี Attribute
และ Method อะไรบ ้าง
ชนิ ดของ Class
่
่
 Concrete Class คือ Class ทัวไปที
เรียกใช ้ได ้เลย
 Abstract Class คือ Class ใช ้งานใน
แบบลาดับชน้ั
การประกาศ Class ในจาวา จะมีรป
ู แบบ
ดังต่อไปนี้
class ClassName
{
……..
}
โปรแกรม Java 1 โปรแกรม สามารถมี
โครงสร ้างทีป
่ ระกอบด ้วย Class ตัง้ แต่ 1
Class ขึน
้ ไปได ้ และเมือ
่ มีการ Compile
โปรแกรม จะทาให ้ได ้ไฟล์ทม
ี่ น
ี ามสกุล
เป็ น .class สาหรับแต่ละ Class ออกมา
ื่ ไฟล์เหมือนกับชอ
ื่ Class
ทีม
่ ช
ี อ
้ อไฟล
่
่ Cla
ข้อกาหนดในการตังชื
์และชือ
่
1) กรณีท ี่ Class ไม่ม ี modifier (เชน
‘public’ หรือ ‘private’) ระบุอยูห
่ น ้า
ื่ ของ Class ไม่จาเป็ นต ้อง
‘class’ ชอ
ื่ ของไฟล์ โปรแกรม จะ
เกีย
่ วข ้องกับชอ
ื่ ไฟล์โปรแกรมเป็ นชอ
ื่ อะไรก็ได ้
สร ้างตัง้ ชอ
จะเห็นว่าไฟล ์
่
เชน
// class1.java
class Class1
{ }
class Class2
{ }
class Class3
่
โปรแกรมชือ
class1.java แต่ชอ
ื่
Class เป็ น Class1,
Class2 และ Class3
่ การ Compile
เมือมี
จะทาให้ได้ไฟล ์
Class1.class,
2) ถ ้า Class มี modifier คือ ‘public’ อยู่
ื่ ไฟล์ให ้
หน ้าคาว่า ‘class’ จะต ้องตัง้ ชอ
ื่ Class และจาเป็ นต ้องมี
เหมือนกับชอ
‘public’ ได ้ไม่เกิน 1 class เท่านัน
้
ดังนั
้ class1.java
ตัวอย่างต่อไปนีจ
้ ะไม่
ถก
ู ต ้อง
// น
// Test3.java
public class
Class1 { }
public class
Test3 { }
public class
Class1 { }
3) โดยทั่วไปแล ้ว ถ ้าไฟล์นัน
้ มีเพียง
ื่ ไฟล์และชอ
ื่
Class เดียว ก็ควรตัง้ ชอ
Class ให ้เหมือนกัน
4) ถ ้าเป็ นไฟล์ของ Application
Program ทีม
่ ห
ี ลาย Class จะต ้องมี 1
class ทีม
่ เี มธอด main() อยูภ
่ ายใน และ
ื่ class ทีม
จะต ้องตัง้ ชอ
่ ี main() อยูน
่ ัน
้ ให ้
ื่ ไฟล์ (ยกเว ้นว่า ถ ้าทุก Class
เหมือนกับชอ
ื่ ไฟล์
ไม่ม ี modifier อยูข
่ ้างหน ้า ก็จะตัง้ ชอ
เป็ นอะไรก็ได ้)
ื่ class นิยมขึน
5) การตัง้ ชอ
้ ต ้นด ้วย
ื่ ของ
ตัวอักษรตัวใหญ่ สว่ นชอ
variables, method และ instance จะ
ขึน
้ ต ้นด ้วยตัวอักษรตัวเล็ก
Declaring and Creating
Objects
 Class เปรียบเสมือนกับเป็ นพิมพ์เขียว
้ นต ้นแบบในการสร ้าง
(Blueprint) ทีใ่ ชเป็
Objects
 ข ้อมูล(Data) และ Method ของ
Objects จะต ้องถูกสร ้างอยูภ
่ ายใน
Class
 ใน Java การสร ้าง Object ก็คอ
ื การ
สร ้าง Instance ของ Class หรือเรียกได ้
อีกอย่างว่าเป็ นการ “Instantiating a
class”
 การสร ้าง Instance ของ class ใน Java จะ
Rectangle rect;
rect = new Rectangle();
หรือสามารถเขียนได ้อีก
รูปแบบหนึง่ คือ
่
เชน
ClassName objectName =
new ClassName();
Rectangle rect = new
Rectangle();
การสร ้าง Instance ข ้างต ้น จะ
ประกอบด ้วยขัน
้ ตอนการทางาน 3
ขัน
้ ตอนคือ
1. Declaration ได ้แก่ Rectangle
rect
- rect จะเป็ นตัวแปรทีเ่ รียกว่า
Reference Variable หรือ Object ทีจ
่ ะ
ประกาศให ้ Compiler รู ้ว่า rect จะถูกใช ้
ในการอ ้างอิง ถึง Object Rectangle
ื่ Class สามารถ
- ให ้สงั เกตว่าชอ
้ นชนิดตัวแปรได ้ด ้วย
ถูกใชเป็
2. Instantiation : ได ้แก่ การใช ้
Operator new
- เป็ นการสร ้าง Object ใหม่ขน
ึ้ มาคือ
Rectangle ซงึ่ จะมีการจองเนือ
้ ที่
หน่วยความจาให ้สาหรับ Object ทีส
่ ร ้าง
ขึน
้ มานีด
้ ้วย
3. Initialization : ได ้แก่ Rectangle()
- เป็ นการกาหนดค่าเริม
่ ต ้นของ
ื่
Object โดยผ่าน Constructor ชอ
Rectangle() (จากตัวอย่างนีจ
้ ะไม่มก
ี าร
 สามารถแทนการประกาศและการ
สร ้าง Object ด้วยรู ปภาพดังนี ้
Class
ประกาศ
สร ้าง
Reference Variables
Objects
หรือ Object Name อ ้างถึง
การอ้างถึง Attibute
และ Method
 หลังจากที่ Object ถูกสร ้างขึน
้ มาแล ้ว การจะ
เข ้าถึงข ้อมูลและ Method ของ Object ได ้ จะทา
ั ลักษณ์ dot(.) ดังนี้
ได ้โดยการใชส้ ญ
objectName.attribute
==> เป็ น
การอ ้างถึงข ้อมูลของ Object
objectName.method ==> เป็ นการอ ้าง
ถึง Method ของ Object
้
ตัวอย่างการสร ้างและการใชงาน
Object 1
class Testclass{
public static void main(String[]
args){
Method_return x = newThe factory
Method_return ();
is 120
int m = x.fac(5);
System.out.println(“The factory
is "+m);
}
class Method_return{
int fac( int n) {
int f = 1;
for (int i=1;i<=n;i++)
f*=i;
return f;
}
}
้
ตัวอย่างการสร ้างและการใชงาน
Object
class TestRectangle
{ 2
public static void main(String[] args) {
Rectangle rect = new Rectangle();
System.out.println(“Width is
”+rect.width+ “ Height is ”+rect.height);
System.out.println(“Area of Rectangle is
”+rect.findArea());
}
Width
is
100.0
}
Height is 50.0
class Rectangle {
Area of Rectangle is
double width = 100.0;
double height = 50.0;
5000.0
double findArea() {
return (width * height);
}
้
ตัวอย่างการสร ้างและการใชงาน
Object 3
class TestStudent{
public static void main(String[] args){
Student z = new Student();
z.id = 46001;
46001 Malee
z.setName("Malee");
4.00
z.setGpa (4.00);
System.out.println(z.id +" "+
z.getName()+" "+ z.getGpa());
}
}
class Student{
public int id;
private String
name;
private double gpa;
public void
setName(String n) {
name = n;
}
public String
getName() {
public void
setGpa(double g) {
gpa = g;
}
public double
getGpa(){
return gpa;
}
}
Method
 การเรียกใช้งาน Method
 Method ทีถ
่ ก
ู สร ้างจะทางานได ้ ก็ตอ
่ เมือ
่
้
มีการเรียกใชงาน
้
 ในการเรียกใชงาน
Method ทาได ้โดยการ
ื่ large
อ ้างถึint
งชอ
Method
นั
น
้
โดยตรง
ดั
ง
ตั
ว
อย่
า
ง
=
ต่อไปนี
้
maxValue(3,4);
ื่
ตัวอย่างนีเ้ ป็ น การเรียกใช ้ Method ชอ
maxValue ในขณะเดียวกันก็จะสง่ ข ้อมูลที่
เป็ น argument หรือ actual parameter
อันได ้แก่ ตัวเลข 3 และ 4 ไปให ้กับ
 Pass by Value
้
 เมือ
่ มีการเรียกใชงาน
Method ทีม
่ ี
parameter ทีเ่ ป็ น primitive data
่ int ค่าของ argument จะถูก
type เชน
สง่ ไปยัง Method ทีถ
่ ก
ู เรียก และเก็บ
ไว ้ใน parameter ของ Method
 การเปลีย
่ นแปลงค่าข ้อมูลภายใน
parameter จะไม่มผ
ี ลกระทบกับค่า
ของ argument แต่อย่างใด ลักษณะ
การสง่ ข ้อมูลแบบนีจ
้ ะเรียกว่า “pass by
value”
 ก่อนการสง่ ค่าจะเกิดขึน
้ arguments
จะถูกคานวณให ้ได ้ผลลัพธ์กอ
่ น แล ้ว
ค่านัน
้ จะถูกสง่ ให ้แก่ parameter
 จะมีการกาหนดค่าแบบ copy by
value คือ ค่าในกล่อง value ของ
argument ถูก copy ให ้แก่
argment
parameter
parameter
Copy by value
 ตัวอย่าง Pass by
Value
var1 = 5;
Class A {
var2 = 5;
int x = 10, y =10;
void methodA (int a, System.out.println("var1(be
ore) = " +var1);
int b) {
System.out.println("var2(be
x = a;
ore) = " +var2);
y = b;
objA.methodA(var1, var2);
}
System.out.println("var1(aft
}
er) = " + objA.x);
var1(before)=5
class TestPassByValue { System.out.println("var2(aft
var2(before)=5
public static void main er) = " + objA.y);
var1(after) = 10
}
(String args[]) {
var2(after) = 10
}
int var1, var2;
A objA = new A();
 Pass by Refference
 argument ต ้องเป็ น ตัวแปรเท่านัน
้
 เมือ
่ เกิดการเรียก method ค่า
address ของตัวแปรที่ เป็ น argument
จะถูกสง่ ให ้แก่ parameter
้
ใชการก
าหนดค่าแบบ copy by
reference
คื
อ
ค่
า
ในกล่
อ
ง
address
argument
parameter
Copy by
ของ argument
ถูก copy ให ้แก่
reference
parameter
 ตัวอย่าง Pass by
class A {
reference
int x = 10, y = 10;
objB.var1
= 5;
void methodA (B objB)
{
objB.var2 = 5;
objB.var1 = x;
System.out.println("var1(befo
objB.var2 = y;
System.out.println("var2(befo
}
objA.methodA(objB);
}
System.out.println("var1(after
class B { int var1, var2;}System.out.println("var2(after
}
var1(before)=5
class TestPassByValue1} {
public static void main(String args[]) { var2(before)=5
var1(after)=10
B objB = new B();
var2(after)=10
A objA = new A();
Constructor
 Java จะยอมให ้มีการกาหนดค่าเริม
่ ต ้น
ให ้กับข ้อมูลของ Object ในขณะทีส
่ ร ้าง
Object ขึน
้ มาได ้ โดยใชส้ งิ่ ทีเ่ รียกว่า
Constructor
ื่
 Constructor ก็คอ
ื Method ทีม
่ ช
ี อ
เหมือนกับ class นัน
้ และจะถูกเรียกให ้มี
การทางานเสมอเมือ
่ มีการสร ้าง Object
ขึน
้ มา
 ค่า Accessibility ของ Constructor มี
2 ค่า คือ public และ default เท่านัน
้
Header ของ Constructor ต ้องไม่มค
ี า่
Constructor สามารถถูก overloaded
ื่
ได ้ โดยการเรียก Constructor ทีม
่ ช
ี อ
เหมือนกัน แต่สง่ argument ทีเ่ ป็ นค่า
เริม
่ ต ้นของข ้อมูลทีแ
่ ตกต่างกันให ้แก่
Constructor ได ้
 การใช้งาน Overloaded
้ าได้โดยการเรียก
Constructor นันท
Constructor และส่ง argument ที่
่
่ น
ต้องการให้ เพือใช้
กาหนดค่าเริมต้
สาหร ับการสร ้าง instance ซึง่
compiler จะเป็ นตัวตัดสินใจเองว่า
ถ้าไม่มก
ี ารกาหนด Constructor
ให้แก่ class ใดๆ compiler จะทา
การ สร ้าง “default constructor”
่ การสร ้าง
ให้โดยอต
ั โนมัตเิ มือมี
่
Instance แต่ละครง้ั ซึงจะไม่
มก
ี าร
ทางานใดๆใน default constructor
นี ้
Constru
่

เชน
ctor
class Test{
Test(){}
ตัวอย่างการใช้ Constructor1
class TestConstructor {
public static void main(String[]
Second area = 1
args){
First area =
Rectangle rect;
5000.0
rect = new Rectangle();
System.out.println("Second area
= "+rect.FindArea());
rect= new Rectangle(100.0,50.0);
System.out.println(”First area =
"+rect.FindArea());
class Rectangle {
double width, height;
Rectangle(double w, double
h) {
width = w;
height = h;
}
Rectangle() {
width = 1.0;
height = 1.0;
}
double FindArea() {
return (width * height);
}
}
ตัวอย่างการใช้
Constructor
2
public
class TestStudent{
public static void main(String args[]) {
Student x = new Student();
null 0.0
Student y = new Student("John
John Ram
Rambo“,3.50);
Student z = new Student(y);
John Ram
System.out.println(x.getName()+"
"+x.getGpa());
System.out.println(y.getName()+"
y.setName(“John Rambo”);
"+y.getGpa());
y.setGpa(3.50);
System.out.println(z.getName()+"
System.out.println(y.getName()+" "+y.g
"+z.getGpa());
class Student {
private String name;
private double gpa;
public Student() {
name = null; gpa
= 0.0;
}
public Student(String
n,double g) {
name = n; gpa =
g;
}
public
Student(Student s) {
public void
setName(String n) {
name = n;
}
public String
getName() {
return name;
}
public void
setGpa(double g) {
gpa = g;}
public double
getGpa() {
Overloading
มี 2 แบบคือ
1. Overloading Method
- Java จะอนุญาตให ้ Method มากกว่า
ื่ ทีเ่ หมือนกันได ้ แต่ต ้องมี
1 Method มีชอ
parameter ทีแ
่ ตกต่างกัน ซงึ่ เรียกว่า
Overloading Methods
่
เชน
MyMethod(1);
MyMethod(1,2);
- Java Compiler สามารถทีจ
่ ะตรวจสอบ
ได ้ว่า Method ใดถูกเรียกขึน
้ มาทางาน
ซงึ่ มันจะดูจากจานวนและชนิดข ้อมูลของ
parameter ทีถ
่ ก
ู สง่ ให ้กับ Method
นั่นเอง
- Java Compiler ไม่อนุญาต ให ้ Method
ทีเ่ ป็ น Overloading มี return type ที่
ต่างกัน
่
เชน
public String Getdate();
ตัวอย่างการใช้
Overloading Method
public class MaxOverCons{
public static void main(String args[]) {
FindMax maxval = new FindMax();
System.out.prinln(“The Max value1 is
” + maxval.max(3,4));
System.out.prinln(“The Max value2 is
The Max
” + maxval.max(4.5,7.9));
value1
is 3
The
Max
}
value1 is 7.9
}
Class FindMax{
double max(double
n1, double n2){
if (n1>n2)
return n1;
else
return n2;
}
int max(int n1, int
n2){
if (n1>n2)
return
n1;
else
return
n2;
}
}
2. Overloading Constructor
- Overloading Constructor จะคล ้าย
ื่
กับ Overloading Method ตรงทีใ่ ชช้ อ
เหมือนกัน แต่ parameter ต่างกัน
- Overloading Constructor จะไม่ม ี
การคืนค่า คือไม่มค
ี าว่า return
่
เชน
public Circle(double a, double b,
double c)
public Circle(double c)
public Circle(Circle aCircle)
class Student {
private String name;
private double gpa;
public Student() {
name = null; gpa
= 0.0;
}
public Student(String
n,double g) {
name = n; gpa =
g;
}
public
Student(Student s) {
public void
setName(String n) {
name = n;
}
public String
getName() {
return name;
}
public void
setGpa(double g) {
gpa = g;}
public double
getGpa() {
ตัวอย่างการใช้
publicOverloading
class Student_Cons1{
Constructor
public
static void main(String args[]) {
Student x = new Student();
null 0.0
Student y = new Student("John
John Ram
Rambo“,3.50);
Student z = new Student(y);
John Ram
System.out.println(x.getName()+"
"+x.getGpa());
System.out.println(y.getName()+"
"+y.getGpa());
System.out.println(z.getName()+"
"+z.getGpa());
This
Reference
s
้
ิ ภายใน
• เพือ
่ ใชในการเรี
ยกสมาชก
คลาสได ้ทันทีโดยไม่ต ้องมีประโยค
ประกาศใดๆ
้ ้ภายในคลาสของตัวเอง
• this นีจ
้ ะใชได
เท่านัน
้
• เพือ
่ ให ้เกิดความแตกต่างของตัวแปร
ระหว่าง class และ ภายใน method
การใช้ This อ้างถึงตัวแปรของ
class
้
ื่ สมาชก
ิ ในคลาส
จะใชในการอ
้างถึงชอ
ื่ อืน
ิ
นัน
้ เพือ
่ ให ้แตกต่างจากชอ
่ เนือ
่ งจากสมาชก
ื่ เหมือนกับชอ
ื่ พารามิเตอร์
ของคลาสอาจมีชอ
ื่ เหมือนกับ
ของบาง Method ในคลาส หรือมีชอ
ิ ในคลาสอืน
สมาชก
่ ทีถ
่ ก
ู อ ้างถึงในคลาสนัน
้
รู ปแบบ
this.attribute
ต ัวอย่างการใช้ This Attribute1
Class Complex {
private double r,i;
Complex(double r, double i) { this.r =
r; this.i = i}
public void add(Complex c)
{
r += c.r; // หรือ this.r +=c.r;
i += c.i; // หรือ this.i+=c.i;
}
ตัวอย่างการใช้ This Attribute2
class Rectangle {
double width, height;
Rectangle(double width, double
height) {
this.width = width;
this.height = height;
}
Rectangle() {
width = 1.0;
height = 1.0;
}
double FindArea() {
return (width * height);
การใช้ This อ้างถึง Constructor
้
• ใชในการส
ง่ instance ของตัวเองไป
ให ้กับ instance หนึง่ เพือ
่ ให ้ instance
นัน
้ อ ้างถึงหรือเรียกกลับมาทีต
่ วั เองอีก
ครัง้ หนึง่
้
• จะต ้องเรียกใชภายใน
Constructor
เท่านัน
้
• จะต ้องเรียกเป็ นคาสงั่ แรกใน
Constructor
้ ้
• ใน Constructor หนึง่ จะเรียกใชได
ต ัวอย่างการใช้ This
Constructor1
Class Complex {
private double r,i;
Complex() {this(0.0,0.0);}
Complex(double r, double i) { this.r =
r; this.i = i}
Complex(Complex c) {this(c.r, c.i);}
public void add(Complex c) {
this.r += c.r;
this.i += c.i;
}
}
ต ัวอย่างการใช้ This
Constructor2
class Rectangle {
double width, height;
Rectangle(double width, double
height) {
this.width = width;
this.height = height;
}
Rectangle() {this(1.0,1.0);
}
double FindArea() {
return (width * height);
}
แบบฝึ กหัด
1. จงเขียนโปรแกรมหาค่า min, max โดยการ
เปรียบเทียบค่า 3 ค่า
FindMinMa
TestMinMax
+ main():void
FindMinMax()
min(n:int,n1:int,n2:int)
min(n:double,n1:double,n2:dou
max(n:int,n1:int,n2:int)
max(n:double,n1:double,n2:do
้
• FindMinMax() ใชในการพิ
มพ์ This is
program for find Minimum and
Maximum
• min(n:int,n1:int,n2:int) ใช้หาค่าน้อย
กว่าเป็ น int
• min(n:double,n1:double,n2:double)
ใช้หาค่าน้อยกว่าเป็ น double
ผลการ RUN
• max(n:int,n1:int,n2:int) ใช้หาค่า
This is program for find Minimum
มากกว่าเป็ น int
and Maximum
• Minimum
max(n:double,n1:double,n2:double)
value between 23 87 59
หาค่ามากกว่าเป็ น double
isใช้
23
Minimum value between 35.54 93.5
2. จากตัวอย่าง Overloading Construtor จงปรับ
TestStudent
+ main():void
Student
String id,String name, int age,
Student()
Student(id:String,name:String,a
setName(name:String)
setId(id:String)
setAge(age:int)
setYear(year:int)
getName()
getId()
getAge()
getYear()
้
• Student() ใชในการพิ
มพ์ ID
Student
Age
Year
• Student(id:int,name:String,age:int,year:i
ึ ษา
nt) กาหนดรายละเอียดข ้อมูลนักศก
้ บ Name
• setName(name:String) ใชเก็
ิ
นิสต
้ บ ID นิสต
ิ
• setId(id:String) ใชเก็
้ บ Age นิสต
ิ
• setAge(age:int) ใชเก็
้ บ Year นิสต
ิ
• setYear(year:int) ใชเก็
ื่
• getName() ใช ้ return ชอ
• getId() ใช ้ return ID
• getAge() ใช ้ return Age
้
ผลรัน
ID
Age
470001
21
490028
1
480052
20
460034
25
หมายเหต
Student
Year
Somchat Meedee
3
Anun Pondee
Bundit Jongdee
2
Porntip Dongdang
4
19
ตัวอย่าง class diagram