บทที่ 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