Object Oriented Programming with JAVA

Download Report

Transcript Object Oriented Programming with JAVA

Object Oriented Programming with JAVA
Introduction JAVA Programming Language
Java Program
• องค์ ประกอบของโปรแกรมภาษาจาวาจะต้ อง
ประกอบไปด้ วยองค์ ประกอบ 3 ส่ วนหลัก ได้ แก่
• คลาส (Class)
• วิธีการ / เมธอด (Method)
• คาสั่ ง (Statement)
Class Name / Source Code Filename
• โปรแกรม Java จะต้ องเขียนอยู่ภายใต้ class
• ชื่อของ class จะเป็ นชื่อของโปรแกรม กล่ าวคือ
Source Code ในโปรแกรม Java จะต้ องบันทึก
แฟ้ มเป็ นชื่อเดียวกันกับชื่อคลาส (ในกรณีที่เป็ น
ชื่อของ file จะต้ องมี . Java เพิม่ ต่ อท้ าย)
Class Name / Source Code Filename
• ชื่อคลาส โดยส่ วนใหญ่ นิยมขึน้ ต้ นดัวยตัวอักษร
พิมพ์ใหญ่
• Java เป็ น case-sensitive ซึ่งหมายความว่ า
ตัวอักษรพิมพ์ใหญ่ และพิมพ์เล็กไม่ สามารถใช้
แทนกันได้
คลาส (Class)
public class ClassName
{ - ใช้ เครื่องหมายปี กกาในการบอกขอบเขตของคลาส
}
- ชื่อคลาส นิยมขึน้ ต้ นด้ วยตัวพิมพ์ใหญ่
- คีย์เวิร์ดแต่ ละคาต้ องมีการเว้ นช่ องว่ างอย่ างน้ อย 1
ช่ องว่ าง
เมธอดหลัก (Main Method)
• ภายในคลาสจะประกอบด้ วยเมธอด (Method) 1
เมธอดหรือจะมากกว่ า 1 เมธอดก็ได้
• เมธอด คือกลุ่มของคาสั่ งในการแก้ ปัญหา ถ้ า
โปรแกรมมีขนาดใหญ่ กจ็ ะมีเมธอดหลายเมธอด
เพราะต้ องแก้ ปัญหาหลายปัญหา แต่ ถ้าโปรแกรมมี
ขนาดเล็กก็จะมีเพียงแค่ เมธอดเดียวคือ main
Method
เมธอดหลัก (Main Method)
• เมื่อโปรแกรมเริ่มทางาน คอมพิวเตอร์ จะเริ่มทา
คาสั่ งแรกทีอ่ ยู่ในเมธอด main
• main method heading :
public static void main(String[] args)
เมธอดหลัก (Main Method)
• public คือการประกาศว่ า method main นีเ้ ป็ น
สาธารณะ ใครก็สามารถที่จะมาเรียกใช้ กไ็ ด้
• static เป็ นตัวที่กาหนดให้ method main เริ่ม
ทางานได้ ทันที โดยที่ไม่ ต้องสร้ าง instance ของ
คลาสด้ วยคาสั่ ง new
เมธอดหลัก (Main Method)
• void จะบอกว่ า method main นีไ้ ม่ มีการส่ งใดๆ
กลับออกมาหลังจากจบการทางานแล้ ว
• String[] args หรือ String args[ ] ทาหน้ าที่ส่ง
ค่ าเข้ ามาใน method main เป็ นชนิดข้ อมูลทีเ่ ป็ น
อาร์ เรย์ สตริง
เมธอดหลัก (Main Method)
public class ClassName
{
public static void main(String[] args)
{
}
}
- ใช้ เครื่องหมายปี กกาในการบอกขอบเขตของเมธ
อดซึ่งอยู่ซ้อนเข้ าไปภายในขอบเขตของคลาสอีก
ชั้นหนึ่ง
- ชื่อเมธอด นิยมขึน้ ต้ นด้ วยตัวพิมพ์เล็ก
•
•
•
•
Demo 1.1
ทาการสร้ าง class ชื่อ Hello
แสดงข้ อมูล “Hello Java” ออกทางหน้ าจอ
คอมไพล์ และรันโปรแกรม
ดูผลลัพธ์
Demo 1.1 : Code Review
public class Hello
{
public static void main (String [ ] gars)
{
System.out.println(“Hello Java”);
}
}
System.out.print/System.out.println
• คาสั่ ง System.out.print() / System.out.println() เป็ น
คาสั่ งแสดงข้ อมูล
• ตัวอย่ าง แสดงข้ อความ Hello, world!
System.out.println("Hello, world!");
หมายเหตุ - ให้ ใส่ รายการที่ต้องการแสดงในวงเล็บ
- ถ้ าเป็ นข้ อความ (String) ให้ ใส่ double quotes ครอบ
- ใส่ เครื่องหมาย semicolon ท้ ายคาสั่ งเสมอ
Escape Sequence
• อักขระ escape sequence ในภาษาจาวา
• escape sequence เป็ นอักขระพิเศษ จะไม่ แสดงออก
ทางหน้ าจอแต่ จะมีผลต่ อการจัดหน้ าจอ อักขระ
พิเศษชนิดนีจ้ ะขึน้ ต้ นด้ วย \ และเขียนอยู่ภายใน
เครื่องหมาย “ ”
Escape Sequence
• อักขระ escape sequence ทัว่ ไป
escape sequence
\n
\t
\f
\r
ชื่อ
newline
tab
form feed
carriage return
ความหมาย
ขึน้ บรรทัดใหม่
เว้ นระยะในแนวระดับ
ขึน้ หน้ าใหม่
เลือ่ นไปทางซ้ ายสุ ด
Escape Sequence
• อักขระ escape sequence ทัว่ ไป
escape sequence
ชื่อ
\b
backspace
\\
\’
\”
Backslash
Single quote
double quote
ความหมาย
เลือ่ นไปทางซ้ าย 1
ตัวอักษร
การกดเครื่องหมาย \\
การกดเครื่องหมาย ‘
การกดเครื่องหมาย “
Demo 1.2
public class Hello{
public static void main (String [ ] gars){
System.out.print(“Hello Java\n”);
System.out.println(“\“We are learning Java !\””);
System.out.println(123654);
System.out.println(4.00);
System.out.println(‘A’);
}
}
Comments
• ภายในโปรแกรมนอกจากจะมี 3 องค์ ประกอบ
หลักแล้ ว ก็ยงั มีส่วนที่เรียกว่ า “หมายเหตุ
(Comment)”
• Comment เป็ นข้ อความทีแ่ ทรกอยู่ภายใน
โปรแกรมซึ่ง compiler จะไม่ แปลข้ อความนีใ้ ห้
เป็ นส่ วนหนึ่งของโปรแกรม กล่ าวคือ ข้ อความนี้
จะไม่ มีผลต่ อการทางานของโปรแกรม
Comments
• Comment เขียนไว้ เพือ่ อธิบายโปรแกรมเพือ่ ให้
ผู้อ่านเข้ าใจโปรแกรมง่ ายยิง่ ขึน้ และช่ วยทาให้
การแก้ ไขและปรับปรุงโปรแกรมเป็ นไป ได้ ง่าย
ขึน้
• Comment สามารถอยู่บริเวณใดหรือบรรทัดใด
ของโปรแกรมก็ได้
Comments
• Comment ในภาษาจาวามี 2 รูปแบบดังนี้
• // Your Comment มีความหมายว่ าสิ่ งใดก็
ตามทีอ่ ยู่หลังเครื่องหมาย // ภายในบรรทัด
เดียวกันนั้นจะเป็ นหมายเหตุท้งั หมด
• /* Your Comment */ มีความหมายว่ าสิ่ งใดก็
ตามทีอ่ ยู่ระหว่ างเครื่องหมาย /* กับ */ จะกี่
บรรทัดก็ได้ จะเป็ นหมายเหตุท้งั หมด
Identifiers
• Identifier คือชื่อทีต่ ้งั ขึน้ ในภาษาจาวา ซึ่งอาจเป็ นชื่อ
ของคลาส ชื่อของตัวแปร ชื่อของเมธอด หรือชื่ อของ
ค่ าคงที่ โดยจะต้ องเป็ นไปตามกฎการตั้งชื่อ ดังนี้
• ต้ องขึน้ ต้ นด้ วยอักขระ A-Z, a-z, _ หรือ $ เท่ านั้น
• ประกอบด้ วยตัวอักขระมากกว่ าหนึ่งตัว ตัวอักขระหลังจากตัว
แรกนั่นจะต้ องเป็ นตัวอักขระข้ างต้ น หรือเป็ นตัวเลข 0-9
เท่ านั้น
• ห้ ามมีช่องว่ างระหว่ างคา
• ต้ องไม่ ตรงกับคาสงวน (reserve words)
Identifiers
• ตัวอย่ าง ของ identifiers ที่
ถูกต้ อง
•
•
•
•
•
MyVariable
_data
$data
data1
Sum_Score
•
ตัวอย่ าง ของ identifiers ที่
ไม่ ถูกต้ อง
•
•
•
•
•
My Variable
1data
@data
System
1234
Variables (ตัวแปร)
• Variables คือชื่อที่กาหนดขึน้ สาหรั บเก็บค่ า
ต่ างๆ
• Variables ต้ องมี Data Type (ชนิดข้ อมูล) เสมอ
• เมื่อมีการใช้ Variables ในภาษาจาวาจะต้ องมี
การการประกาศตัวแปรทุกครั้ง
Variables (ตัวแปร)
• การประกาศตัวแปร
dataType variableName[,variableName];
หมายเหตุ :
dataType คือชนิดข้ อมูล
variableName คือชื่อของตัวแปรทีเ่ ป็ นไปตามกฎการตั้งชื่อ
• ตัวอย่างการประกาศตัวแปร
String firstName;
String lastName;
int studentId;
int row, col;
Data type (ชนิดข้ อมูล)
• ภาษาจาวา แบ่ งประเภทข้ อมูลออกเป็ น 2 ประเภท
คือ
• ชนิดข้ อมูลพืน้ ฐาน (primitive data type)
• ชนิดข้ อมูลอ้ างอิง (reference data type)
Data type (ชนิดข้ อมูล)
• ชนิดข้ อมูลพืน้ ฐาน (primitive data type) แบ่ งประเภท
ได้ 3 ประเภทคือ
• ข้ อมูลประเภทตัวเลข แบ่ งเป็ น 2 แบบ คือ
» เลขจานวนเต็ม ได้ แก่ชนิดข้ อมูล byte, short, int, long
» เลขจานวนจริง ได้ แก่ชนิดข้ อมูล float, double
• ข้ อมูลประเภทอักขระ ได้ แก่ชนิดข้ อมูล char
• ข้ อมูลประเภทตรรกะได้ แก่ชนิดข้ อมูล boonlean
Data type (ชนิดข้ อมูล)
• ตารางข้ อมูลพืน้ ฐานในภาษาจาวา
ชนิดข้ อมูล
ช่ วงทีเ่ ก็บข้ อมูลได้
boolean true (1) หรือ false (0)
char 0 ถึง 65535
byte
short
int
-128 ถึง 127
-32,768 ถึง 32,767
-2,147,483,648 ถึง 2,147,483,647
จานวนไบต์ , บิต
1 บิต
2 ไบต์
1 ไบต์
2 ไบต์
4 ไบต์
Data type (ชนิดข้ อมูล)
• ตารางข้ อมูลพืน้ ฐานในภาษาจาวา
ชนิดข้ อมูล
ช่ วงทีเ่ ก็บข้ อมูลได้
จานวนไบต์ , บิต
long มากกว่ า ชนิด int
8 ไบต์
float มีจานวนทศนิยม
2 ไบต์
double มีจานวนทศนิยมมากกว่ าชนิด float
4 ไบต์
Data type (ชนิดข้ อมูล)
• ชนิดข้ อมูลอ้ างอิง (reference data type) เป็ นชนิด
ของข้ อมูลทีเ่ กิดจากเป็ น Class ซึ่งอาจจะเป็ น Class
ที่ภาษาจาวาสร้ างหรือจะเป็ น Class ที่เขียนขึน้ มา
เองก็ได้
• String เป็ นชนิดข้ อมูลแบบอ้ างอิง
Demo 1.3
• ทาการสร้ าง class ชื่อ Profile
• ประกาศตัวแปรดังนี้
ชื่อตัวแปร
id
name
surname
Status
Salary
ข้ อมูลทีเ่ ก็บ
รหัสพนักงาน
ชื่อพนักงาน
นามสกุลพนักงาน
สถานะ (‘M’ หรือ‘S’)
เงินเดือน
ชนิดข้ อมูล
เลขจานวนเต็ม
ข้ อความ
ข้ อความ
ตัวอักษร
ตัวเลขจานวนจริง
Demo 1.3 : Code Review
public class Profile{
public static void main (String [ ] gars){
int id;
String name, surname;
char status;
double salary;
}
}
Assignment Statements
• การกาหนดค่ า (Assignment) ให้ กบั ตัวแปร ในภาษาจาวา
จะใช้ เครื่องหมายเท่ ากับ (=) เป็ นคาสั่ งการกาหนดค่ า ซึ่งมี
รู ปแบบคาสั่ งดังต่ อไปนี้
variableName = expression/value;
ตัวอย่ างการกาหนดค่ า
sum = 89; //คือกาหนดให้ ตัวแปร sum เก็บข้ อมูล 89
x = a+b*4; //คือกาหนดให้ ตัวแปร x เก็บข้ อมูลของ a+b*4
salary = 1500.50 //คือกาหนดให้ ตัวแปร salary เก็บข้ อมูล 1500.50
Assignment Statements
• โดยพืน้ ฐานค่ าของตัวเลขจานวนเต็มในภาษา Java จะ
เป็ นชนิดข้ อมูล int
• โดยพืน้ ฐานค่ าของตัวเลขทศนิยมในภาษา Java จะเป็ น
ชนิดข้ อมูล double
• ตัวอย่ าง
8, -45, 2000000 : integer constants
-34.6, .009, 8. : floating point constants
Demo 1.4
• จาก Demo 1.3 ให้ ทาการกาหนดค่ าตัวแปร
ดังต่ อไปนี้
ชื่อตัวแปร
id
name
surname
Status
Salary
ค่ าที่เก็บในตัวแปร
4007020
Maliwan
Boonploy
S
20000
Demo 1.4 : Code Review
public class Profile{
public static void main (String [ ] gars){
int id;
String name, surname;
char status;
double salary;
id = 4007020;
name = “Maliwan”;
surname = “Boonploy”;
status = ‘S’;
salary = 20000.00;
}
}
Demo 1.5
• จาก Demo 1.4 ให้ นาข้ อมูลในตัวแปรดังกล่ าวมา
แสดงออกทางหน้ าจอดังนี้
My id is 4007020
My name is Maliwan Boonploy
My status is S
My salary is 20000
Demo 1.5 : Code Review
public class Profile{
public static void main (String [ ] gars){
int id; String name, surname;
char status; double salary;
id = 4007020;
name = “Maliwan”;
surname = “Boonploy”;
status = ‘S’;
salary = 20000.00;
System.out.println(“My id is 4007020”);
System.out.println(“My name is ”+name+ “ ”+surname);
System.out.println(“My status is ”+status);
System.out.println(“My salary is ”+salary);
}}
Exercise 1.1
• ทาการสร้ าง class ชื่อ MyProfile
• ประกาศตัวแปรดังนี้
ชื่อตัวแปร
id
name
surname
gender
gpa
ข้ อมูลทีเ่ ก็บ
รหัสนักศึกษา
ชื่อนักศึกษา
นามสกุลนักศึกษา
เพศ (‘M’ หรือ ‘F’)
เกรดเฉลีย่
ชนิดข้ อมูล
เลขจานวนเต็ม
ข้ อความ
ข้ อความ
ตัวอักษร
ตัวเลขจานวนจริง
Exercise 1.1
• กาหนดค่ าให้ กบั ตัวแปรและนาข้ อมูลในตัวแปร
ดังกล่ าวมาแสดงออกทางหน้ าจอดังนี้
Id is รหัสนักศึกษา
My name is ชื่อนาม สกุล
My gender is M/F
I have GPA is เกรดเฉลีย่
Constants
• ค่ าคงที่ (Constants) คือข้ อมูลทีก่ าหนดค่ าได้ เพียงครั้ง
เดียวและไม่ สามารถเปลีย่ นแปลงค่ าได้ ในโปรแกรม
• ค่ าคงทีแ่ บ่ งเป็ น 2 ประเภทคือ
• hard-coded constants เป็ นค่ าทีร่ ะบุไว้ อย่ างชัดเจน เช่ น
Hard-coded
constants
area = 3.1415 * r * r
• named constant เป็ นค่ าทีท่ ี่มีชื่อมาเกีย่ วข้ อง เช่ น กาหนดให้ ค่า
PI มีค่าเท่ ากับ 3.1415
Constants
• วิธีการประกาศตัวแปรที่เป็ น named constant
final dataType variableName[,variableName];
• ถ้ าขึน้ ต้ นการประกาศตัวแปรด้ วยคาว่ า final ตัวแปร
นั้นๆ จะไม่ สามารถมีค่าอืน่ ๆ ได้ อกี ไม่ ว่าจะเป็ นการ
เปลีย่ นค่ าภายในโปรแกรม หรือ การเปลีย่ นแปลงที่
เกิดจากการใส่ ข้อมูลใหม่ ผ่านทาง keyboard
Demo 1.6
• ทาการสร้ าง class ชื่อ Circle
• ให้ คานวณหาพืน้ วงกลม โดยมีสูตรการคานวณ
ดังต่ อไปนี้ area = r2
• กาหนดให้ ค่ า ให้ แทนด้ วยตัวแปร PI ซึ่งเป็ น
ค่ าคงที่มีค่าเท่ ากับ 3.1415 และ ค่ า r มีค่าเท่ ากับ
2.5
Demo 1.6 : Code Review
public class Circle{
public static void main (String [ ] gars){
final double PI =3.1415;
double r, area;
r = 2.5;
area = PI * r * r;
System.out.println(“area is ”+area);
}
}
Arithmetic Operators
• ตัวดาเนินการ สั ญลักษณ์ ทถี่ ูกกาหนดขึน้ เพือ่ ใช้ ในการสร้ าง
นิพจน์ (Expression) โดยในแต่ ละนิพจน์ น้ัน อาจประกอบด้ วย
ตัวแปรค่ าคงที่ และตัวดาเนินการ สามารถทาได้ 3 ประเภท
• Unary Operator เป็ นตัวดาเนินการที่ใช้ Operand เพียงตัวเดียว เช่ น -3,
++x เป็ นต้ น
• Binary Operator เป็ นตัวดาเนินการทีใ่ ช้ Operand สองตัว เช่ น 4-3, x+y
เป็ นต้ น
• Ternary Operator เป็ นตัวดาเนินการทีใ่ ช้ Operand สามตัว ซึ่งไม่ ค่อยได้
ใช้ บ่อยนัก มันช่ วยทาให้ โค้ ดกระชับ แต่ อ่านเข้ าใจยาก
Arithmetic Operators
• โปรแกรมคอมพิวเตอร์ ส่วนใหญ่ มกี ารดาเนินการกับข้ อมูล
เพือ่ ให้ ได้ ผลลัพธ์ ตามทีต่ ้ องการ Arithmetic Operator
คือ ตัวดาเนินการทางด้ านคณิตศาสตร์ ได้ แก่ เครื่ องหมาย
ดังต่ อไปนี้
เครื่องหมาย การดาเนินการ ตัวอย่ างการใช้ งาน
คาอธิบาย
+
บวก
x=a+b
บวกค่ าในตัวแปร a กับค่ าในตัว
แปร b ผลลัพธ์ เก็บทีต่ ัวแปร x
Arithmetic Operators
เครื่องหมาย
*
/
%
การดาเนินการ ตัวอย่ างการใช้ งาน
คาอธิบาย
ลบ
x=a-b
ลบค่ าในตัวแปร a ด้ วยค่ าในตัว
แปร b ผลลัพธ์ เก็บทีต่ ัวแปร x
คูณ
x=a*b
คูณค่ าในตัวแปร a ด้ วยค่ าในตัว
แปร b ผลลัพธ์ เก็บทีต่ ัวแปร x
หาร
x=a/b
หารค่ าในตัวแปร a ด้ วยค่ าในตัว
แปร b ผลลัพธ์ เก็บทีต่ ัวแปร x
หารเอาเศษ x = a % b
หารค่ าในตัวแปร a ด้ วยค่ าในตัว
(Modulus)
แปร b ผลลัพธ์ คือเศษที่ได้ จาก
การหาร โดยเก็บไว้ ทตี่ ัวแปร x
Arithmetic Operators
เครื่องหมาย การดาเนินการ ตัวอย่ างการใช้ งาน
คาอธิบาย
++
เพิม่ ค่ าทีล่ ะหนึ่ง x = ++a
บวกค่ าในตัวแปร a เพิ่มขึ้น 1
(Increment)
ก่ อน แล้ วกาหนดค่ าให้ กับตัวแปร
x
x=a++
กาหนดค่ าของตัวแปร a ให้ กับตัว
แปร x ก่ อน แล้ วเพิ่มค่ าของตั ว
แปร a เพิม่ ขึน้ อีก 1
-ลดค่ าทีล่ ะหนึ่ง x = --a
ลบค่ าในตัวแปร a เพิม่ ขึน้ 1 ก่ อน
(Decrement)
แล้ วกาหนดค่ าให้ กบั ตัวแปร x
x = a -กาหนดค่ าของตัวแปร a ให้ กับตัว
แปร x ก่ อน แล้ วลบค่ าของตัว
แปร a เพิม่ ขึน้ อีก 1
Arithmetic Operators
• ข้ อแนะนาในกรณีเครื่องหมายหาร
• กรณีทตี่ ัวตั้งหรือตัวหารตัวใดตัวหนึ่งเป็ นจานวน
จริง ผลลัพธ์ ทไี่ ด้ จะเป็ นจานวนจริง
• แต่ ถ้าหากตัวตั้งและตัวหารเป็ นจานวนเต็ม
ผลลัพธ์ ทไี่ ด้ จะเป็ นเลขจานวนเต็ม
The priority of operators
• ในบางครั้งนิพจน์ ประกอบด้ วยตัวดาเนินการมากมาย ทาให้ เกิด
ความยุ่งยากในการพิจารณาขั้นตอนการทางานของตัว
ดาเนินการ จึงได้ ต้งั กฎเกีย่ วกับลาดับการทางานก่อนหลังของตัว
ดาเนินการ (Operator) ดังนี้
เครื่องหมาย
ลาดับการทางาน
()
*, /, %
+,=, +=, -=, *=, /=, %=
ก่อน
หลัง
Type Conversion
• การเปลีย่ นชนิดของข้ อมูล ในภาษาจาวามี 2 แบบ
• Implicit Conversion คือการเปลีย่ นชนิดของข้อมูลโดย
อัตโนมัติ
• Explicit Conversion คือสามารถเปลีย่ นแปลงชนิดของ
ข้ อมูลตามความต้ องการได้ โดยการระบุชนิดของตัวแปร
ที่ต้องการเปลีย่ นภายใน ( ) แล้ วนาไปวางไว้ หน้ าตัวแปร
หรือข้ อมูลทีต่ ้ องการเปลีย่ นชนิด
Demo 1.7
public class TypeConversion {
public static void main (String [ ] gars){
int ch;
char letter = ‘J’;
ch = (int) letter;
letter = (char) 68;
System.out.println(ch);
System.out.println(letter);
}
}
Exercise 1.2
• เขียนโปรแกรมให้ มี Output ดังต่ อไปนี้
•
•
•
•
The summary of 10, 20 and 30 is 60.
The summary of
15 and 35 is
50
String Basic
• สตริง (String) หรือข้ อความ คือกลุ่มของอักขระ
หรือสายอักขระตั้งแต่ 0 ตัวขึน้ ไปมาเรียงต่ อกัน
• การประกาศตัวแปร String
String empty = new String(“ ”);
String message = “Hello”;
String repeat = message;
String Basic
• Operator + ใช้ ในกรณีที่นาข้ อความตั้งแต่ 2
ข้ อความมาเชื่อมต่ อกัน หรือนาข้ อความมาเชื่อมต่ อ
กับตัวเลขหรือตัวแปร
Demo 1.8
import java.util.Scanner;
public class Test{
public static void main (String [ ] gars){
String s1;
String s2 = new String(“and I say hello”);
s1 = “goodbye”;
s1 = “You say ” + s1;
s1 += “ , ” + s2 + ‘.’;
System.out.println(s1);
}
}
String Methods
• เมธอด charAt() เป็ นเมธอดที่ใช้ ดึงตัวอักษร 1 ตัว
จากข้ อความโดยระบุตาแหน่ งทีต่ ้ องการ ซึ่งตาแหน่ ง
ของตัวอักษรในสตริงจะเริ่มจากตาแหน่ งที่ 0
• เมธอด length() เป็ นเมธอดที่ใช้ หาความยาวของ
ข้ อความ
String Methods
• เมธอด equals() เป็ นเมธอดที่ในการเปรียบเทียบข้ อความ 2
ชุ ดว่ ามีสมาชิกหรือข้ อความทีเ่ หมือนกันหรือไม่ เป็ นแบบ
case-sensitive คือ อักษรตัวใหญ่ ตวั เล็กต้ องเหมือนกันหมด
• เมธอด equalsIgnoreCase() เป็ นเมธอดทีใ่ นการ
เปรียบเทียบข้ อความ 2 ชุ ดว่ ามีสมาชิกหรือข้ อความที่
เหมือนกันหรือไม่ เป็ นแบบ case-insensitive คือ ตัวใหญ่
ตัวเล็กไม่ มีผล
Demo 1.9
public class Test{
public static void main (String [ ] gars){
String s = “Sripatum University”;
System.out.println(“Last character : ” + s.charAt(2));
System.out.println(“Length of String : ”+ s.length());
System.out.println(s.equals(“sripatum university”));
System.out.println(s.equals(“Sripatum University”));
System.out.println(s.equalsIgnoreCase(“Sripatum University”));
}
}
String Methods
• เมธอด compareTo(String s) เป็ นเมธอดที่ใช้
เปรียบเทียบข้ อความ 2 ข้ อความตามลาดับตัวอักษร
• ถ้ าเป็ นค่ าเดียวกันเมธอดจะ return ค่ า 0
• ถ้ า String Object นีม้ ากกว่ า s เมธอดจะ return ค่ า
จานวนเต็มบวก
• ถ้ า String Object นีน้ ้ อยกว่ า s เมธอดจะ return ค่ า
จานวนเต็มลบ
Demo 1.10
public class Test{
public static void main (String [ ] gars){
String s1 = “Sripatum”;
String s2 = “University”;
System.out.println(s1.compareTo(s2));
System.out.println(s2.compareTo(s2));
System.out.println((s2.compareTo(s1));
}
}
Selection Statement
• ในภาษาจาวามีคาสั่ งในการตัดสิ นใจ 2 อย่ างคือ
• if Statement
• switch Statement
if Statement
• คาสั่ ง if แบ่ งออกเป็ น 3 รูปแบบ
• คาสั่ ง if ใช่ สาหรับกรณีที่มี 1 ทางเลือก
• คาสั่ ง if else ใช่ สาหรับกรณีที่มี 2 ทางเลือก
• คาสั่ ง if else if ใช่ สาหรับกรณีที่มีหลาย
ทางเลือก
if Statement
• คาสั่ ง if
• condition ต้ องสรุปได้ ว่า
เป็ น true หรือ false
• ถ้ า condition เป็ น true ก็
ทา statement
// Syntax
if(condition)
{
statement;
}
Demo 2.1
public class Test{
public static void main (String [ ] gars){
int score = 80;
if(score > 60)
{
System.out.println(“You did pass”);
System.out.println(“Keep up the good work”);
}
}
}
if Statement
• คาสั่ ง if else
• ถ้ า condition เป็ น true ก็
ทา statement ของ if
• แต่ ถ้า condition เป็ น false
ก็ทา statementของ else
// Syntax
if(condition){
statement;
}
else{
statement;
}
Demo 2.2
public class Test{
public static void main (String [ ] gars){
int score = 80;
if(score > 60){
System.out.println(“You did pass”);
System.out.println(“Keep up the good work”);
}
else{
System.out.println(“You did not pass”);
System.out.println(“Try harder next time”);
}
}}
if Statement
• คาสั่ ง if else if (Nested-if)
• ถ้ า condition เป็ น true ก็ทา
statement ของ if
• แต่ ถ้า condition เป็ น false ก็ทา
ตรวจสอบ condition ถัดไป ถ้ าเป็ น
true ก็ทา statement ของ condition
นั้น
• แต่ ถ้า condition ไม่ ตรงกับ condition
ไหนเลยก็จะทา statement ของ else
// Syntax
if (condition) {
statement;
}
else if (condition) {
statement;
}
else {
statement;
}
Demo 2.3
public class Test{
public static void main (String [ ] gars){
int number1 = 10, number2 = 10;
if(number1 < number2)
System.out.println(“number1 is less than number2”);
else(number1 == number2)
System.out.println(“number1 is equal to number2”);
else
System.out.println(“number1 is greater than number2”);
}
}
Condition
• boolean : true = true และ false = flase
• Operator ที่ใช้ กบั condition ได้ แก่
• >, <, <= , >=, !=, = =
• &&, ||
Demo 2.4
public class Test{
public static void main (String [ ] gars){
boolean isGoodQuality = True;
boolean isExpensive = True;
if(isGoodQuality && isExpensive)
System.out.println(“Good quality and expensive”);
else if(isGoodQuality || isExpensive)
System.out.println(“Only good quality or only expensive”);
else
System.out.println(“Not good quality and not expensive”);
}}
Demo 2.5
public class Test{
public static void main (String [ ] gars){
boolean isGoodQuality = True;
boolean isExpensive = True;
int price = 3000;
if(isGoodQuality && isExpensive && price <= 3000)
System.out.println(“I will buy it”);
else
System.out.println(“I will not buy it”);
}
}
Demo 2.6
public class Test{
public static void main (String [ ] gars){
boolean isRunning = false;
if (isRunning)
System.out.println(“running….”);
if (!isRunning)
System.out.println(“not running….”);
boolean isWalking = !isRunning;
if (isWalking)
System.out.println(“walking…”);
if (!isWalking)
System.out.println(“not walking…”);
}}
if Statement
• คาสั่ ง switch
• expression เป็ นตัวแปรทีต่ ้ องการ
ตัดสิ นใจ
• caseClause เป็ นค่ าทีใ่ ช้ ตัดสิ นใจ
• ถ้ าข้ อมูลของ expression ไม่ ตรง
กับ caseClause ใดๆ เลย จะเข้ าไป
ทางานที่ default (default จะมีก็
ได้ ไม่ มีกไ็ ด้ )
// Syntax
switch (expression)
{
caseClause1: statement;
break;
caseClause2: statement;
break;
…
…
default: statement;
break;
}
Demo 2.5
public class Test{
public static void main (String [ ] gars){
int lottery = 1234;
switch(lottery)
{
case 1111: System.out.println(“get 1st reward!”); break;
case 2222: System.out.println(“get 2st reward!”); break;
default: System.out.println(“no reward!”);
}
}
}
Demo 2.7
public class Test{
public static void main (String [ ] gars){
char ch = ‘a’;
switch(ch)
{
case ‘a’: System.out.println(“the token is a”); break;
case ‘b’: System.out.println(“the token is b”); break;
default: System.out.println(“the token unknow”);
}
}
}
Exercise 2.1
• ประกาศตัวแปรแล้ วกาหนดค่ าให้ ตัวแปร
ดังต่ อไปนี้
• isResourcesLoaded = YES;
• isDisplayingPage1 = YES;
• isDisplayingPage2 = NO;
• isAlertDialogShowing = NO;
• isPausing = NO;
Exercise 2.1
• จงสร้ างเงื่อนไขการตัดสิ นใจให้ ได้ ผลลัพธ์ ที่แสดง
หน้ าจอด้ วยข้ อความดังต่ อไปนี้
“Resources loaded and display some page, No pausing no alert.”
Loop Statement
• ในภาษาจาวามีคาสั่ งในการทาซ้า 3 แบบคือ
• for Statement
• while Statement
• do .. while Statement
Demo 3.1
• เขียนโปรแกรมหา Triangular Number
• Triangular Number คือเลขประเภททีจ่ ัดวาง
จุดแทนจานวนให้ เป็ นรูปสามเหลีย่ มได้ เช่ น
1
3
6
Demo 3.1
public class Test{
public static void main (String [ ] gars){
// Determine 5th triangular number = 1 + 2 + 3 + 4 + 5
int trinumber = 0;
trinumber = trinumber + 1;
trinumber = trinumber + 2;
trinumber = trinumber + 3;
trinumber = trinumber + 4;
trinumber = trinumber + 5;
System.out.println(“The 5th triangular number is ”+trinumber);
}}
Demo 3.2
public class Test{
public static void main (String [ ] gars){
// Calculate 5! = 5*4 * 3 * 2 * 1 = 120
int number = 5;
int fac = number * --number; //(5*4)
fac = number * --number; //(5*4) *3
fac = number * --number; //(5*4 *3)*2
fac = number * --number; //(5*4*3*2)*1
System.out.println(“ 5! = ”+fac);
}}
for Statement
• รูปแบบของคาสั่ ง for
for (initialVariable; condition; increment/decrement)
{
statement;
}
• loop condition ถ้ าเป็ นจริงจะทาต้ อไป แต่ ถ้าเป็ นเท็จจะหยุดการ
ทางาน
Demo 3.3
public class Test{
public static void main (String [ ] gars){
// Determine 5th triangular number
int trinumber = 0;
int tn=5;
for(int i = 1; i <= tn; i++){
trinumber = trinumber+i;
}
System.out.println(“The 5th triangular number is ”+trinumber);
}}
Demo 3.4
public class Test{
public static void main (String [ ] gars){
int sum = 0;
int number=5
for(int i = number; i >= 1; i--){
sum = sum+i;
}
System.out.println(“sum is ”+ sum);
}
}
while Statement
• รูปแบบของคาสั่ ง while
initialVariable
while(condition)
{
statement;
increment/decrement
}
Demo 3.5
public class Test{
public static void main (String [ ] gars){
int trinumber = 0, tn = 5;
int i = 1;
while(i <= tn){
trinumber = trinumber+i;
i++;
}
System.out.println(“The 5th triangular number is ”+trinumber);
}}
do ..while Statement
• รูปแบบของคาสั่ ง do..while
initialVariable
do
{
statement;
increment/decrement
} while(condition);
Demo 3.6
public class Test{
public static void main (String [ ] gars){
int trinumber = 0, tn = 5;
int i = 1;
do{
trinumber = trinumber+i;
i++;
} while(i <= tn);
System.out.println(“The 5th triangular number is ”+trinumber);
}}
Object Oriented Programming with JAVA
Classes and Object
Object Oriented Programming
• หลักการ (concept)
• คิด มอง และออกแบบโปรแกรมให้ เป็ นวัตถุ (Object)
• ประโยชน์
• ทาให้ code ของโปรแกรมเข้ าใจง่ ายขึน้ (Readability)
• นา code เก่ ากลับมาใช้ ได้ ใหม่ (Reusability)
• ดูแลรักษา เพิม่ เติม เปลีย่ นแปลงง่ ายขึน้
(Maintainability)
Instances, Members and Methods
•
•
•
•
•
Class ไม่ ใช่ Object
Object คือ Instance ของ Class
Action ที่ Instance กระทาคือ Methods
แต่ ละ Instance มี Members เป็ นของตัวเอง
Members (data) และ Method ถูกประกาศไว้ ที่
Class
Difference between class and object.
• class
• เป็ นแม่ แบบที่มีสมาชิกทั้ง
data และ method
• ไม่ มีตัวตนขณะที่
โปรแกรมกาลัง execute
• ไม่ มีการเปลีย่ นแปลงขณะ
โปรแกรม execute
• object
• ต้ องเกิดมาจาก class
• มีตัวตนขณะที่โปรแกรม
execute
• สามารถเปลีย่ นแปลงค่ า
ของ data ขณะ execute
Data Members and Methods
• โดยทัว่ ไปการออกแบบ class จะมีส่วนประกอบทีจ่ าเป็ น
และสาคัญอยู่ 2 ส่ วนคือ
• Data Member (Field) คือตัวแปรสาหรับการเก็บข้ อมูลของ object
ที่บ่งบอกถึงความเหมือน หรือ ความแตกต่ างกันของ object ทีเ่ กิด
มาจาก class เดียวกันและยังเป็ นทีเ่ ก็บผลลัพธ์ ของการประมวลผล
ของ class
• Method หมายถึงกระบวนการ (operation) ต่ างๆ ที่สามารถทาได้
กับ object นั้นๆ ของclass ซึ่งกระบวนการต่ างๆ ที่ทาได้ ส่วนใหญ่
จะกระทา กับ data member ทีม่ อี ยู่ใน class
Class Modifier
• ในการสร้ าง class นั้นสามารถที่จะกาหนดให้ class ที่สร้ างขึน้ มี
คุณลักษณะตามทีต่ ้ องการได้ ด้วยการใช้ class modifier
• public เป็ นการกาหนดให้ การเข้ าหา class เป็ นไปได้ ตลอดเวลา นั้นก็
คือสามารถสร้ าง object จาก class นีไ้ ด้ ทุกเมื่อ
• abstract class ทีป่ ระกาศเป็ น abstract เปรียบเสมือนว่ าเป็ น class ที่
ยังไม่ สมบรู ณ์ และไม่ สามารถสร้ าง object จาก class นีไ้ ด้ โดยส่ วน
ใหญ่ แล้ วการประกาศแบบนีจ้ ะมีการกาหนดให้ class ดังกล่ าวมี
method ทีเ่ ป็ น abstract ด้ วย
• final เป็ น class ทีไ่ ม่ สามารถมี subclass ได้ คอื ไม่ สามารถสื บทอดได้
Demo 4.1
• ให้ สร้ าง class Student โดยมีข้อมูลดังต่ อไปนี้
• รหัสนักศึกษา (id)
• ชื่อนักศึกษา (name)
• สาขา (major)
• จากนั้นให้ สร้ าง class TestStudent เรียกใช้
ข้ อมูลใน class Student
Demo 4.1 : Code Review
public class TestStudent{
public class Student{
public static void main(String [ ] args){
// data member
Student stu = new Student();
String id, name, major;
stu . id = “5400000”;
}
stu.name = “somsri”;
stu.major = “CS”;
System.out.println(“id : ”+ stu.id);
System.out.println(“name:”+stu.name);
System.out.println(“major:”+stu.major);
}
}
Field Modifier
• field สามารถที่จะมี modifier เป็ นตัวกาหนด
คุณลักษณะได้ เหมือน class
• access modifier เช่ น private, package, protected, และ
public
• static เป็ นการกาหนดให้ field เป็ น filed ที่ใช้ ร่วมกันของ
object
• final เป็ นการกาหนดให้ field เป็ นค่ าที่ไม่ สามารถ
เปลีย่ นแปลงได้
Demo 4.2
public class Student{
// data member
private String id, name, major;
}
public class TestStudent{
public static void main(String [ ] args){
Student stu = new Student();
stu . id = “5400000”;
stu.name = “somsri”;
stu.major = “CS”;
System.out.println(“id : ”+ stu.id);
System.out.println(“name:”+stu.name);
System.out.println(“major:”+stu.major);
}
}
Create Method
• ในการสร้ าง method นั้นจะต้ องกาหนดชื่อให้ กบั
method กาหนด parameter (ถ้ ามี) และกาหนดการ
ส่ งค่ ากลับของ method (ถ้ ามี) โดยทั่วไป method ได้
ถูกแบ่ งออกเป็ น 2 แบบคือ
• Method ทีส่ ่ งค่ ากลับให้ แก่ ผ้ ูทเี่ รียกใช้ method
• Method ทีไ่ ม่ มกี ารส่ งค่ าใดๆ กลับไปให้ ผ้เู รียก
Create Method
• โครงสร้ างของ method โดยทัว่ ไปจะมีรูปแบบดังนี้
ชนิดของค่าที่ส่งกลับ
เป็ นชนิดไหนก็ได้
ใช้ คาสั่ง void ถ้ าไม่ มี
ค่าที่ต้องส่ งกลับ
ชนิดของค่ าที่ส่งกลับ ชื่อ method
Parameter (ถ้ ามี)
[Modifier] returnType methodName(arg1,arg2 ,.. , argn)
Method Modifier
• access modifier เช่ น private, protected และ public
• abstract เป็ น method ทีไ่ ม่ มชี ุดคาสั่ งใน class นีแ้ ต่ จะมี
อยู่ใน subclass
• static เป็ น method ทีท่ างานสาหรับ class ทั้งหมดไม่ ใช่
object ใด object หนึ่งทีเ่ กิดจาก class
• final เป็ น method ทีไ่ ม่ สามารถเปลีย่ นแปลงโดย
subclass ได้
Demo 4.3
public class Student{
private String id, name, major;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}}
public class TestStudent{
public static void main(String [ ] args){
Student stu = new Student();
stu . setId(“5400000”);
stu.setName (“somsri”);
System.out.println(“id : ”+ stu.getId());
System.out.println(“name:”+stu.getName());
}
}
Constructor
• Constructor มีไว้ สาหรับการกาหนดค่ าเบือ้ งต้ น
(initialization) ให้ กบั ตัวแปรทีอ่ ยู่ใน class
• การเรียกใช้ constructor จะถูกเรียกโดยอัตโนมัติ
ผ่ านทางการสร้ าง object จาก class
Demo 4.4
public class Student{
private String id, name, major;
Student(){
id = “no id”;
name = “no name”;
this.major = “no major”;
}
public void setId(String id){….}
public String getId(){ …}
public void setName(String name){ …}
public String getName(){…}
}
public class TestStudent{
public static void main(String [ ] args){
Student stu = new Student();
stu . setId(“5400000”);
stu.setName (“somsri”);
System.out.println(“id : ”+ stu.getId());
System.out.println(“name:”+stu.getName());
}
}
Constructor Overloading
• สามารถที่จะสร้ าง constructor ให้ กบั class ได้
มากกว่ า 1 method แต่ จะต้ องอยู่ภายใต้ เงือ่ นไขที่
Java กาหนดไว้ คือ parameter ที่ส่งไปยัง
constructor ต้ องไม่ มีจานวนที่เท่ ากันและ ถ้ าจานวน
ของ parameter เท่ ากัน ชนิดของ parameter ต้ อง
ไม่ เหมือนกัน
Demo 4.5
public class Student{
private String id, name, major;
Student(){
this(“no id”, “no name”, “no major”);
}
Student(String id, String name, String major){
this.id = id;
this.name = name;
this.major = major;
}
public void setId(String id){….}
public String getId(){ …}
public void setName(String name){ …}
public String getName(){…}
}
public class TestStudent{
public static void main(String [ ] args){
Student stu = new Student();
stu . setId(“5400000”);
stu.setName (“somsri”);
System.out.println(“id : ”+ stu.getId());
System.out.println(“name:”+stu.getName());
}
}
Exercise 4.1
• สร้ าง class Dog โดยมีการทางานต่ อไปนี้
• หมาจะมีค่าความหิวคือ หิวไม่ มาก กับ หิวมาก
• หมาวิง่ ได้ แต่ จะหิวมาก
• ถ้ าหมาหิวมากจะวิง่ ไม่ ออก
• เมื่อหมาหิวก็สามารถให้ อาหารได้
Exercise 4.1
• ดังนั้น Class ของ Dog จะประกอบด้ วย
• Members
» ค่ าความหิว
• Methods
» วิง่
» ให้ อาหาร
Exercise4.1
• Class in UML ของ Dog
Dog
- hungryindicator : int
+ run()
+ feed()
• visibility: public (+), protected (#), private (-)
Exercise 4.1 : Solution
public class Dog{
private int hungryindicator;
Dog(){
hungryindicator = 0;
}
public void run(){
if(hungryindicator == 0)
System.out.println(“I'm so hungry, can't run.”);
else
System.out.println(“OK, running”);
}
public void feed(){
hungryindicator = hungryindicator + 2;
System.out.println(“feed”);
}
}
Exercise 4.1 : Solution
public class TestDog{
public static void main(String [ ] args) {
Dog d = new Dog();
d.run();
d.feed()
d.run();
}
}
Homework
• สร้ าง class Cat โดยมีการทางานต่ อไปนี้
• แมวจะมีค่าความหิวคือ หิวไม่ มาก กับ หิวมาก
• แมววิง่ ได้ ความหิวจะเพิม่ ขึน้ ที่ละ 2
• ถ้ าแมวมีความหิวเกิน 5 จะไม่ ยอมวิง่
• เมื่อแมวหิวก็สามารถให้ อาหารได้ โดยการให้
อาหารครั้งหนึ่งความหิวจะเป็ น 0