บทที่ 5 : Class String And Encapsulation(การห่อหุ้ม)

Download Report

Transcript บทที่ 5 : Class String And Encapsulation(การห่อหุ้ม)

Object-Oriented Programming
การเขียนโปรแกรมเชิงวัตถุ
ผูส้ อน อ.วาทินี ดวงอ่อนนาม
class Ex1{
………………….(….. ……. [ ]){
………… A = 9;
………… x = new …….();
………… y = x.go(A);
System.out.println(A+“ * 2 =”+y);
}
int ………..(int b){
b =b*2;
……… b;
}
}
ตัวอย่างข้อสอบ : จงเติมโปรแกรมนี้ให้สมบูร์
Output
9 * 2 = 18
Keyword
Keyword ในภาษาจาวา
Keyword คือ ชื่อที่มีความหมายพิเศษในจาวา compilerของภาษาจาวาจะ
เข้าใจความหมายและคาสัง่ ที่จะต้องดาเนินการสาหรับ keyword แต่ละตัว
บทที่ 6 : ตัวแปร object, Class String ,Encapsulation
เนื้อหา
ตัวแปร Object, Class String
 Encapsulation
 Access modifier
 private,
 public,
 protected
 package (none หรื อ default)

ชนิดข้ อมูลแบบอ้ างอิง
ตัวแปรหรื อค่าคงที่ที่ประกาศเป็ นชนิดข้อมูลอืน่ ๆ ซึ่ งไม่ใช่
ชนิดข้อมูลแบบพื้นฐาน จะเป็ นชนิดข้อมูลแบบอ้างอิงซึ่ งก็
คือ Object ในภาษาจาวา โดยแบ่งเป็ น 2 แบบคือ
1. ชนิดข้ อมูลทีเ่ ป็ น class
2. ชนิดข้ อมูลทีเป็ น array
ชนิดข้ อมูลที่เป็ น class
คือชนิดข้อมูล ที่ถูกสร้างมาจาก class
(instance)
ตัวอย่าง
Rectanger rec;
ชนิดข้ อมูลที่เป็ น class : String
ชนิดข้อมูลแบบอ้างอิงจะมีวิธีการ
เก็บข้อมูลในหน่วยความจาที่แตกต่าง
จากการเก็บชนิดข้อมูลพื้นฐานตัวอย่าง
class Test_String{
public static void main(String args []){
int x=18;
String s=new String("wathinee");
String y;
}
}
ชนิดข้ อมูลที่เป็ น class : String
int x=18;
String s=new String(“ wathinee”);
String y;
main
{
y
s
x
null
OX3432434
18
wathinee
stack
heap
ข้ อแตกต่าง
กร์ี ที่ไม่ใช้คาสัง่ new ภาษาจาวาจะกาหนดตาแหน่งอ้างอิงใน
หน่วยความจาของข้อความที่ระบุในเครื่ อง “ ” โดยพิจาร์าจาก String Pool
ว่ามีขอ้ ความเดิมอยูห่ รื อไม่ หากมีกจ็ ะใช้ตาแหน่งอ้างอิงที่ซ้ ากัน แต่ถา้ ยังไม่มีก็
จะสร้างข้อความขึ้นมาใหม่และกาหนดตาแหน่งอ้างอิงของข้อความนั้น
String s1= “wathinee”
String s2= “wathinee”
String s3= “Wathinee”
s3
s2
s1
OX345344
OX3432432
OX3432432
Stack
Wathinee
wathinee
Heap
class : String
 String เป็ น Object ที่มีค่าคงที่ขอ้ มูลซึ่ งก็คือข้อความใด ๆ ที่อยู่
ภายในเครื่ องหมาย double quote (“”) ตัวอย่างเช่น
“วิชา OOP”
 String เป็ น object ที่สามารถถูกสร้างขึ้น และกาหนดค่าได้โดยไม่
จาเป็ นต้องใช้คาสัง่ new เช่น
String s=“wathinee”;
โดยไม่จาเป็ นที่จะต้องใช้คาสัง่
String s =new String(“wathinee”);
ข้ อแตกต่าง
กร์ี ที่ใช้คาสัง่ new ภาษาจาวาจะสร้างข้อความใหม่และจองเนื้อที่ใน
หน่วยความจาเสมอ
String s1= new String(“wathinee”);
String s2= new String(“wathinee”);
String s3= new String(“Wathinee”);
Wathinee
wathinee
s3
s2
s1
Oxoaaa
Oxooee
Oxdefe
wathinee
Stack
Heap
String เปลี่ยนค่าไม่ได้
เป็ น object ที่เปลี่ยนค่าไม่ได้ การกาหนดค่าให้กบั object ชนิด String ใหม่
เป็ นการเปลี่ยนตาแหน่งอ้างอิงในหน่วยความจาเท่านั้น ไม่ได้มีการเปลี่ยน
ค่า ภายในตาแหน่งอ้างอิงเดิม
String s1;
s1=“ข้อความ 1”;
s1=“ข้อความ 2”;
ข้อความ 2
ข้อความ 1
s1
null
Ox7777
Ox7899
Stack
Heap
การเปรี ยบเทียบ String
โดยใช้เครื่ องหมาย = =
โดยใช้เมธอด
equals
คาตอบจะเป็ น true , false
โดยใช้เครื่ องหมาย = =
รู ปแบบ
สตริ งตัวแรก = = สตริ งตัวที่สอง
หมายถึง
Memory location เดียวกันหรื อไม่
โดยใช้เมธอด equals
รู ปแบบ
สตริ งตัวแรก.equals(สตริ งตัวที่สอง)
หมายถึง
ข้อความของString เหมือนกันหรื อไม่?
String เป็ น Object ที่มีตวั ดาเนินการในการเชื่อม
ข้ อความ
String s1=“Hi !”+ “There”;
System.out.print(s1);
String s2=“This”;
String s3=s2+ “is a book”;
System.out.print(s3);
String s4=s2+4;
System.out.print(s4);
ภาษาจะแปลงข้อมูลดังกล่าวให้เป็ น String โดยอัตโนมัติ
การเชื่อมต่อ String
(String Concatenation)
ตัวอย่าง การใช้เครื่ องหมาย + เป็ นการต่อString เช่น
String name1=“Java”;
String name2=“Programming”;
String name3= name1+name2;
String name4= name1+ “ ”+name2;
การเชื่อมต่อ String
(String Concatenation)
ตัวอย่าง String + ตัวเลข
String msg=“”Hello;
int num= 123;
String message =msg +num;
การเชื่อมต่อ String
(String Concatenation)
ตัวอย่าง คาสัง่ System.out.println() กับการเชื่อมต่อ String
int num=3;
System.out.println(“ My Number is : ”+num);
การแปลง String
แปลงจากอักษรตัวเล็กไปเป็ นอักษรตัวใหญ่
แปลงจากอักษรตัวใหญ่ไปเป็ นอักษรตัวเล็ก
แปลงจาก String ไปเป็ นตัวเลข
แปลงจาก ตัวเลข ไปเป็ น String
แปลงจากอักษรตัวเล็กไปเป็ นอักษรตัวใหญ่
รู ปแบบ
String ที่ตอ้ งการแปลง.toUpperCase();
ตัวอย่าง
String s1="Hi !"+ "There";
System.out.println(s1.toUpperCase());
System.out.println("This".toUpperCase());
แปลงจากอักษรตัวใหญ่ไปเป็ นอักษรตัวเล็ก
รู ปแบบ
String ที่ตอ้ งการแปลง.toLowerCase();
ตัวอย่าง
String s1="Hi !"+ "There";
System.out.println(s1.toLowerCase());
System.out.println("This".toLowerCase());
แปลงจากตัวเลขไปเป็ น String โดยใช้ .toString
รู ปแบบแปลงเลขจานวนเต็ม
Integer.toString(เลขจานวนเต็มที่ตอ้ งการแปลง);
ตัวอย่าง
int num1=123;
String s1=Integer.toString(num1);
System.out.print(num1);
แปลงจากตัวเลขไปเป็ น String โดยใช้ .toString
รู ปแบบแปลงเลขจานวนทศนิยม
Double.toString(เลขจานวนเต็มที่ตอ้ งการแปลง);
ตัวอย่าง
double num1=123.00;
String s1=Double.toString(num1);
System.out.print(num1);
การหาความยาวของ String
รู ปแบบ
ชื่อตัวแปรสตริ ง.length()
ตัวอย่าง
String message=“Hello”;
int x=message.length();
// x=5
String s1=“hello”;
String s2=“world”;
String s3=new String(“hell”);
String s4=“hell”;
String s5=“hello”;
String s6=new String(“hell”);
คาถาม
s1 == s5
s3 == s4
s4 == s6
s3 == s6
s1.equals(s5)
s3.equals(s4)
s4.equals(s6)
s3.equals(s6)
Encapsulation (การหุม้ ห่อ)
Modifier ในภาษาจาวา
1. Access modifier :
เพื่อกาหนดระดับการเข้าใช้งาน
ได้แก่ private, public, protected และ package (none หรื อ
default)
2. non –access modifier
ได้แก่ final , static, abstract ,native transient ,volatile
,synchronized ,strictfp
static ใช้ กบั attribute หมายถึง
Encapsulation(การหุม้ ห่อ)
เป็ นกระบวนการซ่อนรายละเอียดการทางานและข้อมูลไว้ภายใน
ไม่ให้ภายนอกสามารถมองเห็นได้ และเมื่อภายนอกมองไม่เห็นสิ่ งที่ถูกซ่อนไว้
ภายในแล้ว ก็จะไม่สามารถทาการเปลี่ยนแปลง แก้ไข หรื อสร้างความเสี ยหาย
ให้กบั สิ่ งต่าง ๆ ที่อยูภ่ ายในได้
หากจะเปรี ยบเทียบหลักการของ Encapsulation แล้วก็เหมือนกับการ
ซ่อนกระบวนการทางานและข้อมูลไว้หลังกาแพง ซึ่งสิ่ งที่อยูด่ า้ นนอกของ
กาแพงจะไม่สามารถเปลี่ยนแปลงกระบวนการทางานหรื อเข้าถึงข้อมูล ที่อยู่
หลังกาแพงได้
ข้อดี ของ Encapsulation คือ สามารถสร้างความปลอดภัยให้กบั ข้อมูล
ได้เนื่องจากข้อมูลจะถูกเข้าถึงได้จากผูม้ ีสิทธิ์เท่านั้น
รู้จกั กับ คาต่อไปนี ้ที่เกี่ยวข้ องกับ Encapsulation
 Access modifier
 private,
 public,
 protected
 package (none หรื อ default)
Access modifier
เพื่อกาหนดระดับการเข้าใช้งานได้แก่
 private,
 package (none หรื อ default)
 protected
 public
คนในบ้าน
คนทั่วไปอื่ นๆ ในโลกนี้
class อืน่ ๆ ทัว่ ไป
อยู่ต่าง class แต่อยู่ใน
package เดียวกัน
เจ้าของห้อง
อยู่ใน class เดียวกัน
package เดียวกัน (folder เดียวกัน)
•ญาติพนี่ ้อง เป็ น Class ทีส่ บื ทอดมา (class ลูก ,subclass)
หมายเหตุ
: เจ้าของห้อง
: คนในบ้านเดียวกัน หรื ออยูใ่ น folder
เดียวกัน
class ที่สืบทอด หรือเป็ น subclass : ญาติ
class อืน่ ๆ
: คนทัว่ ไปในโลกนี้
อยู่ใน class เดียวกัน
package
private (-) : attribute , method
คนในบ้าน
คนทั่วไปอื่ นๆ ในโลกนี้
เจ้าของห้อง
•ญาติพนี่ ้อง
Access Modifier
คียเวิรด private (-) ส่ วนบุคคล
เป็ นระดับการเข้าถึงข้อมูล สาหรับการใช้งานภายใน
คลาสเท่านั้น ที่สามารถมองเห็นข้อมูลและมีสิทธิ์เข้ามา
จัดการแก้ไขเพิ่มเติมข้อมูลได้
private
Student
- id
- Name
+ getId()
+ getName();
+ setName();
Test_Student
Controlling Access to Members of a Class
การนา access modifier แต่ละแบบไปใช้งาน

class
public
protected
package
private
X
attributle Method


package (none หรื อ default)
class , attribute , method
คนในบ้าน
คนทั่วไปอื่ นๆ ในโลกนี้
เจ้าของห้อง
•ญาติพนี่ ้อง
Access Modifier
package (none หรื อ default)
สาหรับกร์ี ที่ไม่ได้กาหนด modifier ใดๆ ไว้หน้า
Class Attribute หรื อ Method
หมายความว่ า
Class ที่อยู่ package อื่น ๆ ไม่สามารถเข้าใช้งาน Class
,attribute หรื อ Method เหล่านี้ได้
package (none หรื อ default))
Student
Grad
Id
Name
- Grade
getId()
getName();
setName();
+ printGrade()
+ printDetailStudent()
xxxx
X
Y
Xx()
การนา access modifier แต่ละแบบไปใช้งาน

class
public
protected
package
private

X
attributle Method




Controlling Access to Members of a Class
protected (#)
attribute , method
คนในบ้าน
คนทั่วไปอื่ นๆ ในโลกนี้
เจ้าของห้อง
•ญาติพนี่ ้อง
การนา access modifier แต่ละแบบไปใช้งาน

class
public
protected
package
private
X

X
attributle Method






Access Modifier
protected (#) ถูกปกป้ อง
 class ที่อยูใ่ น package เดียวกันสามารถเรี ยกใช้งาน
attribute and method ของ Class ที่กาหนดเป็ น protected
ได้
 ต่าง package ไม่สามารถเรี ยกใช้งานได้นอกเสี ยจากว่า
เป็ น Class ที่ได้สืบทอดหรื อเป็ น subclass จึงจะสามารถ
เรี ยกใช้งานได้(มีความสัมพันธเป็ นclass แม่ Class ลูกกัน)
protected (#)
Student
Grad
#Id
# Name
- Grade
getId()
getName();
setName();
+ printGrade()
+ printDetailStudent()
Xxxx
W
yx()
Yyyy
X
Y
xx()
Controlling Access to Members of a Class
public (+)
class, attribute , method
คนในบ้าน
คนทั่วไปอื่ นๆ ในโลกนี้
เจ้าของห้อง
•ญาติพนี่ ้อง
การนา access modifier แต่ละแบบไปใช้งาน

public
protected
package
private
class

X

X
attributle




Method




Access Modifier
public (+) สาธาร์ะ
ั class ,Attribute
 หากกาหนด modifier public ให้กบ
,Method ใดแล้ว คลาสอื่น ๆ ก็จะสามารถเข้าใช้งาน class
,Attribute ,Method นั้น ๆ ได้อย่างอิสระ ไม่มีขีดกาจัด
public (+)
Student
Grad
+ Id
+ Name
- Grade
getId()
getName();
setName();
+ printGrade()
+ printDetailStudent()
Xxxx
W
yx()
Yyyy
X
Y
xx()
Controlling Access to Members of a Class
Access Modifier
คียเวิรด private (-) เป็ นระดับการเข้าถึงข้อมูล สาหรับการใช้งานภายใน
คลาสเท่านั้น
ถ้าไม่ระบุคียเวิรด เป็ นระดับการเข้าถึงข้อมูลภายในคลาส และอยูเ่ พ็กเกจ
เดียวกัน
คียเวิรด protected (#) เป็ นระดับการเข้าถึงข้อมูลภายในคลาส และ
สาหรับคลาส ที่อยูใ่ น แพ็กเก็ตเดียวกัน แต่ถา้ ต่างแพ็กเก็ต
ต้องเป็ น Class ที่มีความสัมพันธกันจึงจะสามารถเรี ยกใช้
ได้ (ที่สืบทอดมา (Inherit)
คียเวิรด public (+) เป็ นระดับการเข้าถึงข้อมูลที่ไม่มีขอ้ จากัดใดๆ
package and import
package :
การรวบรวม class ให้อยูด่ ว้ ยกันให้ง่ายต่อการจัดการ
import
การนา class อื่น ๆ มาใช้ในโปรแกรม เราก็จะใช้คาสัง่ import
เพื่อบอกให้คอมไพเลอรทราบว่า จะหาคลาสที่เราต้องการใช้
อยูใ่ น package ใด
package
สิ่ งที่ใช้ในการรวบรวมคลาสที่มีความเกี่ยวข้อสัมพันธกันไว้ในกลุ่ม
เดียวกัน เพื่อให้ง่ายต่อการจัดการและง่ายต่อการค้นหาคลาส สาหรับการใช้
งานในแต่ละครั้ง
รูปแบบ
package ชื่อแพ็กเกจหลัก.ชื่อแพ็กเกจย่อย;
ลักษ์ะสาคัญของ package
o ต้องประกาศไว้ที่บรรทัดบนสุ ดเท่านั้น แต่สามารถใส่
คอมเมนตหรื อช่องว่างไว้ก่อนหน้าได้
o สามารถประกาศเพียง 1 แพ็กเกจต่อ 1 ไฟล(.java)
o ถ้าไม่ได้ประกาศแพ็กเกจ ไฟล .class ที่ได้จะถูกเก็บไว้
ที่ Directory ปัจจุบนั ที่ทางานอยู(่ คือ ที่ .java อยู)่
import
หากต้องการนาคลาสที่มีอยูแ่ ล้วมาใช้ในโปรแกรมที่กาลังจะสร้างขึ้น
ใหม่ เราจะต้องใช้คาสัง่ import เพื่อบอกให้คอมไพเลอรทราบว่าจะสามารถ
หาคลาสที่เราต้องการใช้งานได้จากใน package ใด โดยต้องใช้คาสัง่ import
ก่อนการประกาศคลาสเสมอ
รูปแบบ
import ชื่อแพ็กเกจหลัก.ชื่อแพ็กเกจย่อย.ชื่อคลาสที่จะใช้;
หรื อ
import ชื่อแพ็กเกจหลัก.ชื่อแพ็กเกจย่อย.*;
ฝึ กปฏิบตั ิ
1.โจทย์
ให้สร้างไฟลต่อไปนี้ แล้วบันทึกไฟล java เก็บไว้ที่ c:\sourcejava
1.1 สร้าง class Student โดยให้จดั เก็บไว้ใน package
student.information
Student
id : String
name :String
gpa :double
setDetails(ID :String,N :String,GPA :double)
getName( ) : String
getGPA( ) : double
showDetails()
student
information
2 .สร้ างไฟล์ขึ ้นมาเพื่อทดสอบ Access
modifier ต่าง ๆ
2.1 สร้างไฟล Test_Student
และกาหนด Access modifier ต่าง ๆ
student
information
test
Test_Student
student
information
test
Test_Student
Test_Student2
Note
Dos
เข้าไปยัง directory ของ java แล้วพิมพ์
Javac –d . *.java