บทที่ 2 - wathinee . reru . ac . th

Download Report

Transcript บทที่ 2 - wathinee . reru . ac . th

Object - Oriented Programming
การเขียนโปรแกรมเชิงวัตถุ
ผูส้ อน อ.วาทินี ดวงอ่อนนาม
งานใบที่ 2
บทที่ 4
 ปูพ้นื ฐาน ก่อนเริ่ มเขียนโปรแกรม
เนื ้อหา
 กฎการตั้งชื่อ Identify
 ชนิ ดข้อมูลในภาษาจาวา
 ชนิ ดข้อมูลพื้นฐาน
 ตัวดาเนิ นการทางคณิ ตศาสตร์
 การแปลงชนิ ดข้อมูล
Class diagram
Class
Attribute(Data)
Class Name
AttributeName
Method
MethodName ( )
กฎการตังชื
้ ่อ Identify
Identifier คือชื่อที่ต้ งั ขึ้นในภาษาจาวา ซึ่ งอาจ
เป็ นชื่อของคลาส ชื่อของตัวแปร ชื่อของเมธอด หรื อ
ชื่อของค่าคงที่ ซึ่งจะต้องเป็ นไปตามกฎการตั้งชื่อ
ดังนี้
กฎการตังชื
้ ่อ Identify
1.ซึ่งที่ต้ งั สามารถประกอบด้วยตัวอักษรภาษาอังกฤษ
ตัวเลข underscore(_),dollar sign($)
myCom2 
2.แต่ต้ งั ขึ้นต้นด้วยภาษาอังกฤษ _mycom2
,_ ,$ เท่านั้น (ห้
าม
ขึ้นต้นด้วยตัวเลข)
_myCom$ 
my_Com2 
2mycom 
กฎการตังชื
้ ่อ Identify
3. ชื่อที่ต้ งั เว้นวรรค หรื อ มีช่องว่างไม่ได้
my_Com2 
my com2 
กฎการตังชื
้ ่อ Identify
4. จาวาเป็ น case-sensitive เหมือนกับ C คือ
ภาษาอังกฤษตัวใหญ่ ตัวเล็กถือว่าแตกต่างกันต้อง
ระมัดระวังให้ดี ไม่เช่นนั้นจะเกิดขึ้นผิดพลาดได้
myCom, Mycom, MYCOM
กฎการตังชื
้ ่อ Identify
5. ความยาวตัวอักษรไม่ควรเกิน 65535 ตัวอักษร
กฎการตังชื
้ ่อ Identify
6. ต้องไม่ตรงกับคียเ์ วิร์ด (Keyword )ใดในภาษาจาวาดังต่อไปนี้
Keyword คือ ชื่อที่มีความหมายพิเศษในจาวา compilerของภาษาจาวาจะ
เข้าใจความหมายและคาสัง่ ที่จะต้องดาเนินการสาหรับ keyword แต่ละตัว
เพิ่มเติม
คำสงวน (JAVA Keywords)
คาสงวน (Keywords or Reserved Word) คือ คาที่ถูกสงวน หรื อสารองไว้
โดยตัวแปลภาษา ที่ผพู ้ ฒั นาไม่สามารถนามาใช้เป็ นชื่อตัวแปร ชื่อเมธอด
หรื อชื่อคลาส เพราะคาสงวนจะมีหน้าที่ของตนเอง ในการควบคุม
โครงสร้างของโปรแกรม (Structure) เป็ นชนิดของข้อมูล (Data Type) หรื อ
คาขยายแบบของข้อมูล (Modifier) ดังนั้นตัวแปลภาษาจะประกาศคาที่ถูก
สงวนไว้ล่วงหน้า มิให้ผพู ้ ฒั นานาไปใช้ และเกิดความสับสนในการพัฒนา
โปรแกรม
identifier
ตัวอย่ ำงของ identifier ที่ถกู ต้ อง
 MyVariable
 _MyVariable
 $data
 Sum_Score
…
ตัวอย่างของ identifier ทีไ่ ม่ถูกต้อง
 My Variable
 9Pi
 @net
 System
…
ตัวอย่างการตังชื
้ ่อ
x
 dayofWeek
 3dGraph
 data1
 week
 public
 _name
day
ถูกต้อง
ถูกต้อง
ไม่ถูกต้อง
ถูกต้อง
ไม่ถูกต้อง
ไม่ถูกต้อง
ข้ อแนะนาสาหรับการตังชื
้ ่อให้ กบั class
 เป็ นไปตามกฎข้อ 1-6
 นิ ยมขึ้นต้นด้วยตัวอักษรตัวใหญ่ หากประกอบด้วย
หลายคานิยมให้ตวั อักษรแต่ละตัวของคาเป็ นตัว
ใหญ่
 นิ ยมตั้งชื่อเป็ นคานาม
Employee, Student, Television
MobliePhone, Moblie_Phone
ข้ อแนะนาสาหรับการตังชื
้ ่อให้ กบั Attribute,Data
และตัวแปร
 เป็ นไปตามกฎข้อ 1-6
 นิ ยมตั้งชื่อเป็ นคานาม
 นิ ยมขึ้นต้นด้วยตัวอักษรตัวเล็ก หากประกอบด้วย
หลายคาให้คาแรกขึ้นตัวด้วยตัวเล็กตัวแรกของคา
ต่อ ๆ ไปขึ้นตัวด้วยตัวใหญ่
employeeId, salary, department
name,address ,firstName,last_Name
ข้ อแนะนาสาหรับการตังชื
้ ่อให้ กบั Method
 เป็ นไปตามกฎข้อ 1-6
 นิ ยมตั้งชื่อเป็ นคากริ ยา
 นิ ยมขึ้นต้นด้วยตัวอักษรตัวเล็ก หากประกอบด้วย
หลายคาให้คาแรกขึ้นตัวด้วยตัวเล็กตัวแรกของคา
ต่อ ๆ ไปขึ้นตัวด้วยตัวใหญ่
openMobile , getTime ,closeMobile
,setRingtone
ข้ อแนะนาสาหรับการตังชื
้ ่อให้ กบั Constant
 เป็ นไปตามกฎข้อ 1-6
 จะใช้ตวั อักษรพิมพ์ใหญ่ท้ งั หมด และจะแยกคาโดยใช้
เครื่ องหมาย _ (underscore)
 ควรเป็ นคานาม
PI, MAX
Class diagram : Employee
Class
Attribute(Data)
Method
Employee
-empId : int
-salary : double
-timeIn : String
-timeOut :String
+ setEmpId (empId : int)
+ getSalary (empId : int) :double
Class
-->
Object
Employee
-empId : int
-salary : double
-timeIn : String
-timeOut :String
+ setEmpId (empId : int)
+ getSalary (empId : int) :double
setEmpId
empId
Salary
timeIn
timeOut
getSalary
Harddisk
-->
Ram
4 bytes
Employee
-empId : int
-salary : double
-timeIn : String
-timeOut :String
+ setEmpId (empId : int)
+ getSalary (empId : int) :double
setEmpId
empId
6 bytes
Salary
n bytes
timeIn
timeOut
n bytes
4 bytes
4 bytes
getSalary
ชนิ ดข้อมูล (Data type)
ชนิดข้ อมูลในภาษา Java
Primitive Data Types ชนิดของข้อมูลพื้นฐาน
 Class Types(reference data type) ชนิ ดของข้อมูลที่ถ่ายทอดมากจากคลาส
หรื อ Interface
 Array Types ชนิ ดของข้อมูลที่เป็ นอาร์ เรย์ หรื อข้อมูลเป็ นชุดๆ

ชนิดข้ อมูลพืน้ ฐาน (Primitive Data Type)
 หมายถึงชนิ ดข้อมูลที่สามารถเก็บข้อมูลที่เป็ นข้อมูลทัว่ ไป
หรื อข้อมูลพื้นฐาน ภาษาจาวาถูกออกแบบให้มีชนิดข้อมูล
พื้นฐาน เนื่องจากผูอ้ อกแบบต้องการให้ผทู ้ ี่สนใจภาษาจาวา
และเคยเขียนโปรแกรมมาก่อน สามารถเข้าใจภาษาจาวาได้
อย่างไม่ยากเย็นนัก ชนิดข้อมูลพื้นฐานมี 4 ประเภทหลักๆ
ดังนี้
ชนิดข้ อมูลแบบพืน้ ฐาน
 ชนิดข้ อมูลแบบพืน
้ ฐำนแบ่ งเป็ น 4 ประเภทคือ
ชนิ ดข้อมูลตรรกะ (logical) คือชนิ ด boolean
ชนิ ดข้อมูลอักขระ (textual) คือชนิ ด char
ชนิ ดข้อมูลตัวเลขจานวนเต็ม (integer) คือชนิ ด byte,
short, int และ long
ชนิ ดข้อมูลตัวเลขทศนิ ยม (floating point) คือชนิ ด float
และ double
ชนิดข้ อมูลแบบพืน้ ฐาน
ข้ อมูลชนิด Primitive Data Types
ชนิด
ข้ อมูล
สาหรับ
ค่ าที่เป็ นไปได้
byte
short
int
ตัวเลขจานวนเต็มเล็กๆ ใช้พ้นื ที่เก็บเพียงแค่ 1 ไบต์
ตัวเลขจานวนเต็ม (ใช้พ้นื ที่เก็บ 16 บิต หรื อ 2 ไบต์)
ตัวเลขจานวนเต็มทัว่ ไป (ใช้พ้นื ที่เก็บ 32 บิต หรื อ
4 ไบต์)
ตัวเลขจานวนเต็มขนาดใหญ่ (ใช้พ้นื ที่เก็บ 64 บิต
หรื อ 8 ไบต์)
ตัวเลขทศนิยมทัว่ ไป (ใช้พ้นื ที่เก็บ 32 บิต หรื อ 4
ไบต์)
ตัวเลขทศนิยมขนาดใหญ่ (ใช้พ้นื ที่เก็บ 64 บิต หรื อ
8 ไบต์)
ตัวอักษรทุกชนิด ตามมาตรฐาน 16-bit Unicode
ค่าความเป็ นจริ งทางตรรกะ (ใช้พ้นื ที่เก็บ 1 บิต)
-128 ถึง 127
-32,768 ถึง 32,767
-2,147,483 ถึง 2,147,483,647
long
float
double
char
boolean
-9,223,372,036,845,775,808 ถึง
9,223,372,036,845,775,807
1.4e-45 ถึง 3.4028235e+38
4.9e-324 ถึง
1.7976931348623157e+308
ตัวอักษรต่างๆ
มี 2 ค่าเท่านั้นคือ true กับ false
ชนิดข้ อมูลใน กลุ่ม ตรรกะ (logical)
- ชนิดข้อมูล boolean
 ใช้พ้น
ื ที่เก็บ 8 บิต
 มีข้อมูลค่ ำคงทีอ
่ ยู่ 2 ค่ ำคือ
true (จริ ง) และ false (เท็จ)
 ตัวอย่ ำง
 boolean check = true;
เป็ นการกาหนดให้ตวั แปรชื่อ check มีชนิดข้อมูล
เป็ น boolean และกาหนดให้มีค่าเป็ น true
ชนิดข้อมูลในกลุ่มตัว อักขระ (textual)
- ชนิดข้อมูล char
 ใช้พ้น
ื ที่เก็บ 16 บิต
 ข้ อมูลชนิดอักขระใช้ เพือ่ แสดงตัวอักขระ 1 ตัว
 คลุมด้วยเครื่ องหมาย ‘’ (single quote)
ตัวอย่ ำง
char alphabet = ‘M’;
เป็ นการประกาศตัวแปรชื่อ alphabet มีชนิดข้อมูลเป็ น char
โดยมีค่าเป็ นตัวอักขระ M
ตัวอย่าง
char X,Y;
X=‘A’;
Y=‘/uoo41’;
ชนิดข้อมูลในกลุ่ม ตัวเลขจานวนเต็ม (integer)
- ชนิด byte, short, int และ long
datatype ขนำด
(bit)
byte
8
ค่ ำต่ำสุ ด
ค่ ำสู งสุ ด
-128
127
short
16
-32768
32767
int
32
-2147483648
2147483647
long
64
-9223372036854775808
9223372036854775807
ชนิดข้อมูลในกลุ่ม ตัวเลขจานวนเต็ม (integer)
- ชนิด byte, short, int และ long
ข้ อมูลค่ ำคงทีข่ องเลขจำนวนเต็มทีเ่ ป็ นชนิด long จะมีตวั อักษร l หรือ
L ต่ อท้ ำย เช่ น
 3l, 7l,7000L,80L
* ไม่เช่นนั้นค่าที่กาหนดให้ตวั แปรจะถูกมองเป็ น ชนิด int
ตัวอย่าง
byte a = 1;
short b = 2;
int
c = 3;
long d = 4L;
ชนิดข้อมูลในกลุ่ม ตัวเลขทศนิยม (floating point)
- ชนิด float และ double
datatype
ค่ ำตำ่ สุ ด
ค่ ำสู งสุ ด
float
ขนำด
(bit)
32
-3.4 x 1038
3.4 x 1038
double
64
-1.7 x 10308
1.7 x 10308
การกาหนดให้ตวั แปรชนิด float ต้องระบุ f ,F ต่อท้ายไม่เช่นนั้นค่าที่
กาหนดให้ตวั แปรจะถูกมองเป็ น ชนิด double
ชนิดข้อมูลในกลุ่ม ตัวเลขทศนิยม (floating point)
- ชนิด float และ double
ตัวอย่าง
float e = 5.0f;
double x = 6.0;
Note
 ตอนนี้ ยงั ไม่ได้กล่าวถึง
String นะคะ
 ซึ่ งไว้สาหรับเก็บค่าข้อมูลที่เป็ นกลุ่มคาเช่น
“Hello ” , “Somchai” , “ asdfasfsdf”
ตัวดาเนินการทางคณิตศาสตร์
เช่น
A+B*C
นิพจน์ (expression)
+ ,* คือ Operator
ตัวดาเนินการ
A,B,Cคือ Operand
ตัวถูกดาเนินการ
จัดการข้ อมูลด้ วยตัวดาเนินการ

ตัวดาเนินการ (Operator) ทาหน้าที่จดั การ และเราเรี ยกตัวแปรที่ทางาน
ร่ วมกับตัวดาเนินการว่า Operand
ตัวดาเนินการทางคณิตศาสตร์
Operator
()
*
/
%
+
-
ควำมหมำย
วงเล็บ
คูณ
หาร
(MOD) หารเอาเศษจากการ
หาร
บวก
ลบ
ตัวอย่ำง Expression (นิพจน์ )
(A+B)/C
tax = cost * rate;
salePrice=original/2
remainder=value % 3;
total = const+tax;
cost = total -tax
ตัวดาเนินการ + ,- สามารถกระทากับตัวถูกดาเนินการตัวเดียวได้ เช่น
- 5 , +4 เรี ยกว่า unary operator (ยูนารี )
ลาดับความสาคัญ
12 + 6 / 3 % 2
จะได้ค่าเท่ากับเท่าไหร่ ?
ลาดับความสาคัญ
Operator
()
unary
*
/
%
+
-
ลำดับควำมสำคัญ
สูงสุ ด
ต่าสุ ด
5+2*4
10 / 2 – 3
8+12*2-4
10/(5-3)
(4+17) % 2-1
(6 -3 )* (2+7)/3
ได้ค่า
ได้ค่า
ได้ค่า
ได้ค่า
ได้ค่า
ได้ค่า
13
2
28
5
0
9
ตัวดาเนินการแบบย่อ (shortcut operator)
Operator
+=
-=
*=
/=
%=
ตัวอย่ ำง
X+=5
Y-=2
Z*=10
A/=B
C%=3
ควำมหมำย
X=X+5;
Y=Y-2;
Z=Z*10;
A=A/B;
C=C%3;
Assignment Operator : ตัวดาเนินกาหนดค่ า

ตัวดำเนินกำรกำหนดค่ำจะทำหน้ำทีก่ ำหนดค่ำของข้อมูล โดยนำข้อมูลจำกด้ำนขวำของ
ตัวดำเนินกำรมำกำหนดให้กบั ตัวแปรทีอ่ ยู่ด้ำนซ้ำยของตัวดำเนินกำร
ตัวดาเนินการ
=
+=
-=
*=
/=

คาอธิบาย
กาหนดค่า
เพิ่มค่าแล้วกาหนดค่า
ลดค่าลงแล้วกาหนดค่า
คูณแล้วกาหนดค่า
หารแล้วกาหนดค่า
ตัวอย่ าง
a = b คือนาค่า b มาใส่ ใน a
a += b คือ a = a + b หรื อเอา a + b แล้วกลับมากาหนดค่าให้ a
a -= b คือ a = a - b หรื อเอา a - b แล้วกลับมากาหนดค่าให้ a
a *= b คือ a = a * b หรื อเอา a * b แล้วกลับมากาหนดค่าให้ a
a /= b คือ a = a / b หรื อเอา a / b แล้วกลับมากาหนดค่าให้ a
ทดลองเขียนโปรแกรมโดยใช้ตวั ดาเนินกาหนดค่า
Comparison Operator : ตัวดาเนินการเปรียบเทียบ

ตัวดาเนินการเปรี ยบเทียบนั้น เป็ นการเปรี ยบเทียบข้อมูลที่อยูค่ นละฝั่งของ
ตัวดาเนินการว่าเหมือน หรื อแตกต่างกันอย่างไร
ตัวดำเนินกำร
==
!=
<
<=
>
>=

คำอธิบำย
เท่ากันหรือไม่
ไม่เท่ากันหรือไม่
น้อยกว่า
น้อยกว่าหรือเท่ากับ
มากกว่า
มากกว่าหรือเท่ากับ
ตัวอย่ำง
a == b จะเป็ นจริงเมือ่ a เท่ากับ b
a != b จะเป็ นจริงเมือ่ a ไม่เท่ากับ b
a < b จะเป็ นจริงเมือ่ a น้อยกว่า b
a <= b จะเป็ นจริงเมือ่ a น้อยกว่าหรือเท่ากับ b
a > b จะเป็ นจริงเมือ่ a มากกว่า b
a >= b จะเป็ นจริงเมือ่ a มากกว่าหรือเท่ากับ b
ทดลองเขียนโปรแกรมโดยใช้ตวั ดาเนินการเปรี ยบเทียบ
Logical Operator : ตัวดาเนินการทางตรรกศาสตร์

ตัวดาเนินการทางตรรกศาสตร์จะนาข้อมูลมาประมวลผลในทาง
ตรรกศาสตร์ ซึ่งผลลัพธ์จะออกมาเป็ นค่า true หรื อ false เท่านั้น ซึ่งเรา
มักจะใช้เพื่อตัดสิ นใจกาหนดทิศทางของการทางานของโปรแกรม
ตัวดาเนินการ
!
&& หรื อ &
|| หรื อ |

คาอธิบาย
นิเสธ (Negation)
และ (And)
หรื อ (Or)
ตัวอย่ าง
!a ผลลัพธ์คือนิเสธของ a (มีค่าความจริ งตรงกันข้ามกับ a)
a && b ผลลัพธ์จะเป็ นจริ งเมื่อ a และ b ต่างเป็ นจริ ง
a || b ผลลัพธ์จะเป็ นจริ งเมื่อ a หรื อ b เป็ นจริ ง
ทดลองเขียนโปรแกรมโดยใช้ตวั ดาเนินการทางตรรกศาสตร์
ตัวอย่าง
ตัวดาเนินการเพิ่มค่าและลดค่า (++ , --)
X ++ , ++ X ต่างกันหรื อไม่ ?
ตัวดาเนินการเพิ่มค่าและลดค่า (++ , --)
X ++
++X
X---X
หลังประมวลผลจะได้เป็ น
ก่อนประมวลผลจะได้เป็ น
หลังประมวลผลจะได้เป็ น
ก่อนประมวลผลจะได้เป็ น
X =X+1
X =X+1
X =X-1
X =X-1
ตัวอย่าง
Y= ++X;
คือ จะเพิ่มค่า X ขึ้น 1 ค่าก่อนแล้วจึงส่ งให้ตวั แปร Y
Y = X++;
คือ นาค่า x ไปกาหนดให้ Y ก่อน จากนั้น จึงเพิ่มค่า X ขึ้นมา 1 ค่า
ตัวอย่าง
count=13
จากนั้น value เท่ากับ 6
ตัวอย่าง
value=17
การแปลงชนิดของข้ อมูล
เมื่อต้องการดาเนินการทางคณิ ตศาสตร์
ระหว่าง Operand ที่มีชนิดข้อมูลที่แตกต่างกัน
เราจะต้องแปลงชนิดของข้อมูลของ Operand
ให้เป็ นชนิดเดียวกันก่อน จึงจะสร้าง
ดาเนินการกันได้
ชนิดข้ อมูลต่าง ๆ จากสูงสุด  ต่าสุด
ชนิดข้อมูล
double
float
long
int
short
byte
char 16 bits
ขนาด(bit)
64
32
64
32
16
8
นัยสาคัญ
สูงสุ ด
ต่าสุ ด
การแปลงชนิดข้ อมูล
การแปลงชนิดข้ อมูล
1. การแปลงข้อมูลให้มีขนาดใหญ่ข้ ึน
เป็ นการแปลงชนิดข้อมูลที่ภาษาจาวาทาให้โดย
อัตโนมัติตามความเหมาะสม (implicit type
conversion)
2 .การแปลงข้อมูลให้มีขนาดเล็กลง
เป็ นการแปลงชนิดข้อมูล Emplicit type conversion
หรื อ Casting (ผูเ้ ขียนโปรแกรมต้องทาเอง)
1. การแปลงชนิดของข้อมูลให้มีขนาดใหญ่ข้ ึน
(lmplicit type conversion)
หลักการ :การแปลงอัตโนมัติ
ตัวอย่าง ที่ถกู
int x;
32 bits
short y=2;
16 bits
x=y;
16 bits  32 bits
ผลที่ได้ คือ x = 2
เป็ นชนิดข้อมูล int
ตัวอย่าง ที่ถกู
int x=10;
32 bits
double y;
64 bits
y=x;
32bits  64 bits
ผลที่ได้ คือ y = 10.0
เป็ นชนิดข้อมูล double
ตัวอย่าง
short a=1;
a+5
ผลที่ได้ คือ short+int int
เป็ นชนิดข้อมูล int
เพราะภาษาจาวาจะทาให้ auto
ตัวอย่าง
ตัวอย่าง ที่ผิด “possible loss of precision”
int x;
32 bits
double y=2.5;
64 bits
x=y;
64 bits  32 bits
ตัวอย่าง
2. การแปลงชนิดของข้อมูลให้มีขนาดเล็กลง
(Emplicit type conversion หรื อ Casting)
คือ การแปลงชนิดข้อมูลที่ ผูพ้ ฒั นาจะต้องเขียนคาสัง่ ด้วย
ตนเอง
รู ปแบบ
(ชนิดข้อมูลที่ตอ้ งการ) นิพจน์ที่ตอ้ งการแปลงชนิ ดข้อมูล
ตัวอย่าง
b3 = (byte) b1+b2
int b4 = b1+b2
ตัวอย่าง
int x;
32 bits
double y=2.5;
64 bits
x=(int)y;
64 bits  32 bits
casting
จะได้ x เป็ นชนิด int มีค่าเท่ากับ 2
ตัวอย่าง
short a=1;
short num1= a+5;
ผิด เพราะจะได้ค่าเป็ น int
ดังนั้นเราจึงต้อง casting
short num1=(short)a+5; หรื อ
int num= a+5;
short a;
short num1=(short)a+5; Casting
int num= a+5;
แปลงอัตโนมัติ
(implicit)
 float x=3.4;
// ผิด
 float x=(float)3.4;
//ถูก
คาถามก่อนจบบท
int a=1,b=2;
(long)g
long c=3L,d=4L;
(g*h)
float e=5.0F, f =6.0f;
(float)(g*h)
double g=7.0, h=8.0;
(int)(a+b+c+d+e+f+g+h)
(long)g
g*h
(float)(g*h)
(int)(a+b+c+d+e+f+g+h)
// 7 long
// 56.0 double
// 56.0 float
// 36 , int