Introduction to Java Chapter 1
History of Java Java is an object-oriented programming language created in 1995 by James Gosling, which means that it represents concepts as "objects" with "fields" (which are attributes that describe the object) and "methods" (actions that the object can make). Java is a "write once, run anywhere" language, which means that it is designed to run on any platform that has a Java Virtual Machine (JVM).
Cross platform ( platform independence)
Component of Java platform Java application programming interfaces (APIs) Java APIs เป็นไลบรารีสำเร็จรูปสามารถเรียกใช้ในโปรแกรมได้ จะ มาพร้อมกับ JDK Java virtual machine (JVM) แทนที่โปรแกรมที่คอมไพล์ได้(คลาส)จะรันที่ระบบปฏิบัติการ โดยตรง แต่จะถูกแปลโดย JVM อีกทอดหนึ่งให้เป็นคำสั่งที่ ระบบปฏิบัติการนั้นเข้าใจ
JDK and JRE JDK is a superset of JRE, and contains everything that is in JRE, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language.
JDK
Write java using Netbeans Follow : https://netbeans.org/kb/docs/java/quickstart.html
Enabling Java Web Start in the NetBeans IDE สำหรับส่งการบ้าน https://netbeans.org/kb/73/java/javase- jws.html
คำถามท้ายบท จงอธิบายที่ทำให้จาวาสามารถทำงานข้ามแพล็ตฟอร์ม (cross platform) ได้ จงบอกข้อแตกต่างระหว่าง JVM JDK JRE จงบอกขั้นตอนการพัฒนาโปรแกรมจาวาบนวินโดวส์ ให้นิสิตทุกคนไป set ให้จาวาโปรแกรมของตนเองรันผ่าน Java web start ได้เพื่อการส่งการบ้าน
ความหมายของวัตถุ (object) การเขียนโปรแกรมเชิงวัตถุเป็นรูปแบบการเขียนโปรแกรมที่พยายามมองการเขียนโปรแกรม เรียนแบบโลกความเป็นจริง โดยข้อเท็จจริงที่ว่าระบบหรืองานต่าง ๆ ในโลกนี้เกิดจากการ ทำงานร่วมกัน (interaction)ของวัตถุต่าง ๆ วัตถุในโลกที่นี้จะหมายถึงสิ่งต่าง ๆ ที่มีอยู่จริง เช่น รถ เก้าอี้ คน หรืออาจเป็นวัตถุใน แนวคิด เช่น การชำระหนี้ การเสียภาษี ฯลฯ และวัตถุต่าง ๆ นั้นจะมีเพียงชิ้นเดียวเท่านั้น ไม่เคยมีวัตถุที่มีลักษณะเหมือนกันทุกอย่างบนโลก
สิ่งที่ทำให้วัตถุต่าง ๆ ไม่เหมือนกัน คือคุณสมบัติ (properties /attributes) ต่าง ๆของวัตถุ สิ่งที่ทำให้วัตถุสามารถมีปฏิกิริยาตอบสนองกับวัตถุอื่นได้คือพฤติกรรม (behaviors/methods) ดังนั้นสิ่งที่เราควรกำหนดเป็นพื้นฐานให้กับวัตถุ(objects)ที่สนใจ ต้อง ประกอบด้วย properties และ behavior เพื่อการเขียนโปรแกรม เชิงวัตถุ
รายละเอียดออบเจ็กต์ properties behaviors
โลกเป็นจริงกับการเขียนโปรแกรมจาวา Computer system Real world object1 object1 object2 object2 object2 Class object2 object3 object3 object4 object4
ต.ย การแปลงออบเจ็กต์จากโลกเป็นจริงเป็นออบเจ็กต์ในโปรแกรมจาวา Computer system Real world Class Person{ string id; string name; study() {…} play(){…} drink(){…} } Person: id name study() play() drink() p1.study(); p1.play(); p1.drink();
แนวคิดการเขียนโปรแกรมเชิงวัตถุ การเขียนโปรแกรมเชิงวัตถุ (ไม่ว่าจะใช้ภาษาใด) จะประกอบด้วยกลไก ต่อไปนี้ การห่อหุ้ม (encapsulation) หมายถึงการปกปิดรายละเอียดต่าง ๆ ภายในตัวออบเจ็กต์ ไม่ให้ออบเจ็กต์อื่นรู้รายละเอียด แต่จะสามารถรู้ ข้อมูลของออบเจ็กต์นั้นได้ผ่านช่องทางที่เรียกว่าอินเตอร์เฟส (interface) ซึ่งสร้างเป็นเมธอด (method) กลไกนี้ช่วย สนับสนุนความปลอดภัยในการแก้ไข หรืออ่านข้อมูล จากภายนอก ออบเจ็กต์นั้น ซึ่งในทางโปรแกรมทำโดยการประกาศให้ attributes ต่าง ๆ มีการเข้าถึงแบบ private
การแปลงตัวหลายร่าง(polymorphism) หมายถึงการสั่งงานให้ ออบเจ็กต์ใด ๆ ด้วยรูปแบบคำสั่งเดียวแต่ออบเจ็กต์สามารถทำงานได้หลาย บทบาท เช่น การหมุนพวงมาลัยรถ เราเพียงแต่หมุนพวงมาลัยเท่านั้น แต่ พวงมาลัย อาจใช้วิธีไม่เหมือนกันในการบังคับรถ เช่น แบบpower แบบ rack and pinion หรือแบบธรรมดาmanual การแปลงหลาย ร่างมีประโยชน์ทำให้เขียนเมธอดที่กระชับ การสืบทอดคุณสมบัติ (Inheritance) หมายถึงความสามารถของ คลาสใด ๆ ที่สามารถรับการถ่ายทอดคุณสมบัติ (attributes) และ พฤติกรรม (method) จากคลาสอื่น เราเรียก คลาสที่ถ่ายทอดว่า parent class / base class คลาสที่รับถ่ายทอดว่า child class / extend class กลไกนี้สนับสนุนทำให้คลาสสามารถนำ กลับมาใช้ใหม่ (reuse) ประหยัดเวลาในการพัฒนาโปรแกรม
ลักษณะของโปรแกรมจาวาเบื้องต้น การเขียนโปรแกรมด้วยจาวา จะต้องเขียนคำสั่งอยู่ภายในโครงสร้างที่ เรียกว่าคลาส (class) ทั้งหมดเท่านั้น โดยคลาสที่เขียนขึ้นจะเป็น พิมพ์เขียวในการสร้างออบเจ็กต์ในหน่วยความจำ โปรแกรมหนึ่ง ๆ อาจสร้างขึ้นโดยมีคลาสมากกว่า 1 คลาสขึ้นไป แต่ จะต้องมีคลาสหนึ่งคลาสที่มีเมธอด main(){…} เพื่อทำหน้าที่ เป็นจุดเริ่มต้นการทำงานของโปรแกรม
Comment สามารถเขียนใน /*...........*/ หรือ // /* This is a simple Java program. Call this file Example.java. */ class Hello { // A Java program begins with a call to main(). public static void main(String args[]) { System.out.println(“Hello world"); } } Comment สามารถเขียนใน /*...........*/ หรือ // class Hello การเขียนคลาสต้องขึ้นต้นด้วย class แล้วตามด้วย ชื่อ ในที่นี้คือ Hello {….} หมายถึงชุดปีกกาที่แสดงถึงพื้นที่เริ่มต้นและสิ้นสุดการเขียน รายละเอียดของคลาส
public static void main (String args[]) {…} หมายถึง เมธอด main โดยเมธอดนี้จะมี parameter ชื่อ args ซึ่งเป็นตัวแปรแบบ อาร์เรย์ มีชนิดเป็น string เราสามารถส่งค่า parameter ให้กับ main method นี้ได้, public เป็นคำสงวนที่ใช้ประกาศว่าเมธอด main นี้ สามารถเรียกทำงานได้จากภายนอกคลาสนี้ ซึ่งจะต้องกำหนดเป็น public เท่านั้น สำหรับ main method System.out.println("Hello world"); เป็นคำสั่งที่เขียนไว้ใน main method เพื่อเขียนคำว่า Hello world ออกจอภาพแล้วขึ้น บรรทัดใหม่ โดยเรียกใช้เมธอด println() จากออบเจ็กต์ out ในคลาส System คำสั่งจาวาจะต้องจบด้วย ; (semi-colon)เสมอ
รูปแบบโครงสร้างคลาส class class_name { } process ส่วนประกาศตัวแปรเพื่อแทนคุณสมบัติ(attributes) process ส่วนประกาศตัวเมธอดเพื่อแทนพฤติกรรม (behaviors)
การตั้งชื่อคลาส ตัวแปร เมธอด ภาษาจาวาถืออักษรตัวใหญ่และเล็กต่างกัน (case sensitive) การตั้งชื่อคลาสมักใช้คำนามโดยให้อักษรตัวแรกของแต่ละคำเป็นตัวใหญ่ นอกนั้นเล็กหมด ซึ่งเรียกการตั้งแบบนี้ว่า camel notation เช่น BlackBox , InformationStudent, Dog, BoogieDog การตั้งชื่อตัวแปรให้ใช้อักษรตัวเล็กหมด เช่น int money, String name, double dolloar การตั้งชื่อเมธอดให้อักษรตัวแรกของคำแรกเป็นตัวเล็ก นอกนั้นอักษรตัวแรกเป็นตัวใหญ่ และมักใช้คำกริยา เช่น getGrade(), sendData(), calculate()
การตั้งชื่อ source file ปกติเราสร้างคลาสหนึ่งคลาสในหนึ่งไฟล์ ซึ่งเราจะต้องตั้งชื่อไฟล์ให้ตรงกับชื่อคลาสที่บรรจุ ในไฟล์นั้น เวลาคอมไพล์ก็ทำการคอมไพล์แต่ละไฟล์ ซึ่งจะให้ผลลัพธ์เป็นคลาสไฟล์ ที่มีชื่อ เหมือนเดิมแต่นามสกุล . class เราสามารถเขียนคลาสมากกว่า 1 คลาสภายในไฟล์เดียวกันได้ โดยจะต้องตั้งชื่อไฟล์ให้ตรง กับคลาสที่มี method main ลงท้ายด้วย .java เมื่อทำการคอมไพล์ จะได้ไฟล์ output ที่เป็น .class ออกมาเท่ากับ จำนวนคลาสที่มีใน source file
Source file : Example.java class Example { public static void main(String args[]) { System.out.println(“My name id Ladda"); } class Greeting { Public void bark( ) { System.out.println(“Season Greeting"); Example.class compiled Greeting.class
ตัวอย่าง program แบบง่าย -1
Run build project / clean build project
ตัวอย่าง program แบบง่าย -2
ความหมายของชุดวงเล็บปีกกา {…} หรือ block block หมายถึงการสิ้นสุด หรืออาณาเขต ของชุดคำสั่ง แล้วแต่ว่าจะถูกนำไปใช้ที่ใด เช่น ถ้าตามหลังชื่อคลาสจะหมายถึงขอบเขตของ คลาส แต่ถ้าใช้หลังเมธอดหมายถึงขอบเขตเมธ อด แต่ถ้าใช้ในโครงสร้าง if หรือที่อื่นจะ หมายถึงกลุ่มของคำสั่งที่ต้องทำงานในคราว เดียวกัน
แต่ที่สำคัญคือblock จะเป็นตัวกำหนดขอบเขตการมองเห็นตัวแปรภายใน block โดยมีหลักการคือถ้าการทำงานพ้นจาก blockใด ๆ แล้ว ก็จะไม่สามารถอ้างหรือทำงานกับตัวแปรภายในblock ที่พ้นการทำงานมาแล้ว เช่น { int a = 10 ; System.out.println(a); // a = 10 int a = 20; System.out.println(a); // a = 20 }
การจัดกลุ่มคลาสด้วยคำสั่ง package คำสั่ง package ต้องเขียนเป็นบรรทัดแรกเสมอ มีไว้เพื่อสนับสนุนการจัดกลุ่ม คลาสที่ทำงานคล้ายกันไว้เป็นกลุ่มเดียวกัน โดยในhard disk จะมีการสร้าง folder ที่ชื่อเดียวกับ package ดังนั้นเราสามารถสร้างชื่อคลาสที่เหมือนกัน แต่อยู่คนละ package ได้
การใช้คำสั่ง import เป็นคำสั่งที่ใช้บอก package ที่บรรจุคลาสนั้น เพื่อหลีกเลี่ยงความกำกวมในการเรียกใช้งานคลาสที่อาจมีชื่อซ้ำกันในระบบเกิดขึ้น เรามักใช้คำสั่ง import เสมอเมื่อมีการเรียกใช้งานคลาส ยกเว้นการเรียกใช้คลาส System ซึ่งไม่จำเป็นต้องระบุ ระบบจะ ทราบเอง
การรับค่าจากคีย์บอร์ดด้วยคลาส Scanner ได้ทั้งตัวเลขและตัวอักษร ดังโปรแกรมตัวอย่างมีการรับค่าชื่อของผู้ซื้อเป็นตัวอักษร และจำนวนที่ซื้อเป็นตัวเลข ต้องมีการใช้คำสั่ง import java.util.Scanner; เพื่อระบุ package ที่อยู่ของคลาส Scanner เมื่อต้องการใช้คลาส Scanner ต้องสร้างออบเจ็กต์ก่อน ในที่นี้คือ scan คลาส Scanner มี method nextInt() สำหรับรับค่าตัวเลข Next() สำหรับรับค่าตัวอักษร
Lab-1 ให้นิสิตเปิด netbeans แล้วสร้างคลาสชื่อ Hello เขียนคำสั่งดังนี้ class Sample{ public static void main(String args[]) { System.out.println("Hello …"); } เกิดอะไรขึ้น ต้องแก้ไขอย่างไรให้ถูกต้อง........................................... 2. เมื่อแก้ถูกแล้ว Run program แล้วตรวจดูว่ามีไฟล์ .class กี่ไฟล์ 3. ถ้าตัดคำว่า static ออก เกิดอะไรขึ้น ? 4. แก้ System.out.println("Hello…"); เป็น System.out.println("Hello…" + args[0]); 5. Click ขวาที่ชื่อ project เลือก properties จะได้รูป
6. ไปที่ run แล้วใส่ชื่อของแต่ละคนที่ช่อง arguments: 7 6. ไปที่ run แล้วใส่ชื่อของแต่ละคนที่ช่อง arguments: 7. กด run ให้บันทึกผลลัพธ์ 8. ท่านคิดว่าจะเพิ่มนามสกุลท่านให้ program จะทำอย่างไร
11. ไปที่ tab file folder dist 9. เพิ่มคำสั่งต่อท้ายคลาส Hello ดังนี้ class Hello { public static void main(String args[]) { System.out.println("Hello …"); } Class Dog { 10. Run clean build 11. ไปที่ tab file folder dist 12. มี class file ที่เกิดขึ้นชื่ออะไรบ้าง
แบบฝึกหัด ให้สร้างคลาสชื่อ Profile เพื่อรับค่าประวัติส่วนตัว ได้แก่ name lastname sex พร้อม แสดงทางจอภาพ ดังรูป