800 likes | 1.01k Views
Object-Oriented Programming. ผู้สอน อ.วาทินี ดวงอ่อนนาม. การเขียนโปรแกรมเชิงวัตถุ. ตัวอย่างข้อสอบ : จงเติมโปรแกรมนี้ให้สมบูรณ์. class Ex1{ ………………….(….. ……. [ ]){ ………… A = 9; ………… x = new …….(); ………… y = x.go (A);
E N D
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 แบบคือ • ชนิดข้อมูลที่เป็น class • ชนิดข้อมูลทีเป็น array
ชนิดข้อมูลที่เป็น class คือชนิดข้อมูล ที่ถูกสร้างมาจาก class (instance) ตัวอย่าง Rectangerrec;
ชนิดข้อมูลที่เป็น 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; { y null s new String OX3432434 wathinee main x 18 heap stack
ข้อแตกต่าง กรณีที่ไม่ใช้คำสั่ง new ภาษาจาวาจะกำหนดตำแหน่งอ้างอิงในหน่วยความจำของข้อความที่ระบุในเครื่อง “ ” โดยพิจารณาจาก String Pool ว่ามีข้อความเดิมอยู่หรือไม่ หากมีก็จะใช้ตำแหน่งอ้างอิงที่ซ้ำกัน แต่ถ้ายังไม่มีก็จะสร้างข้อความขึ้นมาใหม่และกำหนดตำแหน่งอ้างอิงของข้อความนั้น String s1= “wathinee” String s2= “wathinee” String s3= “Wathinee” Wathinee s3 OX345344 wathinee s2 OX3432432 s1 • OX3432432 Heap Stack
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 Oxoaaa wathinee s2 Oxooee s1 • Oxdefe Heap Stack
String เปลี่ยนค่าไม่ได้ เป็น object ที่เปลี่ยนค่าไม่ได้ การกำหนดค่าให้กับ object ชนิด String ใหม่ เป็นการเปลี่ยนตำแหน่งอ้างอิงในหน่วยความจำเท่านั้น ไม่ได้มีการเปลี่ยนค่าภายในตำแหน่งอ้างอิงเดิม String s1; s1=“ข้อความ 1”; s1=“ข้อความ 2”; ข้อความ 2 ข้อความ 1 null Ox7899 Ox7777 s1 Heap Stack
การเปรียบเทียบ 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; intnum= 123; String message =msg +num;
การเชื่อมต่อ String(String Concatenation) ตัวอย่างคำสั่งSystem.out.println() กับการเชื่อมต่อ String intnum=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)
Modifier ในภาษาจาวา 1. Access modifier : เพื่อกำหนดระดับการเข้าใช้งาน ได้แก่ private, public, protectedและpackage (none หรือ default) • non –access modifier ได้แก่final , static, abstract ,native transient ,volatile ,synchronized ,strictfp
Encapsulation(การหุ้มห่อ) เป็นกระบวนการซ่อนรายละเอียดการทำงานและข้อมูลไว้ภายใน ไม่ให้ภายนอกสามารถมองเห็นได้ และเมื่อภายนอกมองไม่เห็นสิ่งที่ถูกซ่อนไว้ ภายในแล้ว ก็จะไม่สามารถทำการเปลี่ยนแปลง แก้ไข หรือสร้างความเสียหายให้กับสิ่งต่าง ๆ ที่อยู่ภายในได้ หากจะเปรียบเทียบหลักการของ Encapsulation แล้วก็เหมือนกับการซ่อนกระบวนการทำงานและข้อมูลไว้หลังกำแพง ซึ่งสิ่งที่อยู่ด้านนอกของกำแพงจะไม่สามารถเปลี่ยนแปลงกระบวนการทำงานหรือเข้าถึงข้อมูล ที่อยู่หลังกำแพงได้ ข้อดี ของ Encapsulation คือ สามารถสร้างความปลอดภัยให้กับข้อมูลได้เนื่องจากข้อมูลจะถูกเข้าถึงได้จากผู้มีสิทธิ์เท่านั้น
รู้จักกับ คำต่อไปนี้ที่เกี่ยวข้องกับ Encapsulation • Access modifier • private, • public, • protected • package (none หรือ default)
Access modifier เพื่อกำหนดระดับการเข้าใช้งานได้แก่ • private, • package (none หรือ default) • protected • public
คนในบ้าน คนทั่วไปอื่นๆ ในโลกนี้ อยู่ต่าง class แต่อยู่ใน package เดียวกัน class อื่น ๆ ทั่วไป เจ้าของห้อง อยู่ใน class เดียวกัน package เดียวกัน (folder เดียวกัน) • ญาติพี่น้อง เป็น Class ที่สืบทอดมา (class ลูก ,subclass)
หมายเหตุ อยู่ใน class เดียวกัน : เจ้าของห้อง package : คนในบ้านเดียวกัน หรืออยู่ใน folder เดียวกัน class ที่สืบทอด หรือเป็น subclass : ญาติ class อื่น ๆ : คนทั่วไปในโลกนี้
private (-) : attribute , method คนในบ้าน คนทั่วไปอื่นๆ ในโลกนี้ เจ้าของห้อง • ญาติพี่น้อง
Access Modifier คีย์เวิร์ด private (-) ส่วนบุคคล เป็นระดับการเข้าถึงข้อมูล สำหรับการใช้งานภายใน คลาสเท่านั้น ที่สามารถมองเห็นข้อมูลและมีสิทธิ์เข้ามา จัดการแก้ไขเพิ่มเติมข้อมูลได้
private Student - id • Name • + getId() • + getName(); • + setName(); Test_Student