1 (Object Oriented Concept)

Download Report

Transcript 1 (Object Oriented Concept)

LOGO
07/08/59
1
ความเป็ นมาของการเขียนโปรแกรมเชิงวัตถุ
การเขียนโปรแกรมแบบโครงสร้าง
การเขียนโปรแกรมเชิงวัตถุ
คุณสมบัติการเขียนโปรแกรมเชิงวัตถุ
แนะนา JAVA
สรุ ป
07/08/59
2
ภาษา
 ภาษาอังกฤษ
 ภาษาไทย
Mango
มะม่วงเขียวเสวย มะม่วงน้ าดอกไม้ มะม่วงอกร่ อง
มะม่วงแรด และอื่น ๆ อีกมากมาย
ภาษาคอมพิวเตอร์
 BASIC, Cobol, Pascal, C, C++, ADA, JAVA และภาษาอื่น ๆ
 ภาษาที่มีคุณสมบัติและสนับสนุนการเขียนโปรแกรมเชิงวัตถุ
คือ ภาษา C++, JAVA, Eiffel
07/08/59
3
คาถาม คือ การเขียนโปรแกรมเชิงวัตถุคืออะไร
คาตอบ คือ การเขียนโปรแกรมตามธรรมดาทัว่ ๆ ไป เพื่อแก้ไขปัญหาที่เกิด
ขึ้นกับการพัฒนาโปรแกรมคอมพิวเตอร์ในช่วงประมาณปี ค.ศ. 1980
คาถาม คือ ปัญหาของการเขียนโปรแกรมคอมพิวเตอร์สมัยนั้นคืออะไร
คาตอบ คือ สรุ ปหัวใจหลัก ๆ ของปัญหาได้ดงั นี้
 ความสลับซับซ้อนของโปรแกรม ซึ่ งเกิดมาจากระบบงานที่ตอ้ งการพัฒนา
 ความรวดเร็ วในการพัฒนาระบบงานใหม่
 ความยุง่ ยากในการแก้ไข บารุ งรักษาระบบงานเดิม
07/08/59
4
คาถาม คือ นักศึกษาคิดว่าการเขียนโปรแกรมแบบเดิมจะหมดไปหรื อล้ม
หายตายจากไปหรื อไม่
คาตอบ คือ การเขียนโปรแกรมแบบเดิมจะคงอยูต่ ่อไป เพราะมันเป็ น
รากฐานประการหนึ่งของการเขียนโปรแกรมเชิงวัตถุ
คาถาม คือ ภาษาแบบเก่า เช่น BASIC, COBOL จะใช้เขียนโปรแกรมเชิง
วัตถุได้หรื อไม่
คาตอบ คือ ภาษาคอมพิวเตอร์ต่าง ๆ ที่ใช้กนั อยูส่ ามารถเขียนตาม
แนวความคิดการเขียนโปรแกรมเชิงวัตถุได้ท้ งั สิ้ น แต่ค่อนข้างยุง่ ยาก
และไม่เป็ นที่นิยม แต่กม็ ีบางบริ ษทั พยายามพัฒนาภาษาคอมพิวเตอร์
เช่น Object – Oriented Cobol, Visual BASIC.net เป็ นต้น
07/08/59
5
การเขียนโปรแกรมเชิงกระบวนการ (Procedural
Programming) เป็ นการเขียนโปรแกรมแบบโครงสร้าง ซึ่ง
ช่วยจัดระเบียบของคาสัง่ ในโปรแกรม สามารถตรวจสอบ
ลาดับการทางานได้ง่าย แต่เนื่องจากโปรแกรมประกอบด้วย
คาสัง่ และข้อมูล เช่น ภาษา C แยกส่ วนที่เป็ นข้อมูลออกจาก
คาสัง่ ด้วยเหตุน้ ีฟังก์ชนั ที่จดั การกับข้อมูลจึงอาจถูกวางไว้
อย่างกระจัดกระจาย สร้างความลาบากในการติดตามสื บหา
ว่าข้อมูลถูกเปลี่ยนแปลง โดยฟังก์ชนั ใด
07/08/59
6
การเขียนโปรแกรมแบบโครงสร้าง (Procedural) จะแบ่งเป็ น 2 ส่ วน
คือ ส่ วนโปรแกรมหลัก(Main Program) ที่มา Data เป็ น
ส่ วนประกอบและ โปรแกรมย่อย (Procedure หรื อ Function)
โดย Data ที่ประกาศใช้อยูภ่ ายในโปรแกรมหลัก จะถูกเรี ยกโดย
โปรแกรมย่อยต่าง ๆ ที่อยูภ่ ายในโปรแกรม ลักษณะของ Data ที่มี
การประกาศใช้ทวั่ ทั้งโปรแกรม เรี ยกว่าประกาศใช้แบบ “Global”
07/08/59
7
โปรแกรมย่อย 1
โปรแกรมย่อย 2
โปรแกรมหลัก
Global Data
โปรแกรมย่อย 4
07/08/59
โปรแกรมย่อย 3
แสดงการเขียนโปรแกรม
แบบ Procedure
8
การเขียนโปรแกรมแบบโครงสร้าง โปรแกรมย่อยจะเรี ยกใช้ขอ้ มูล
จากโปรแกรมหลักตัวเดียวกัน อาจทาให้เกิดปัญหาการเปลีย่ นแปลง
ค่าของข้อมูลตัวเดียวกันได้
โปรแกรมประกอบด้วยคาสัง่ และข้อมูล การจัดระเบียบคาสัง่
เพียงอย่างเดียวนั้นจึงไม่สมบูรณ์
แยกส่ วนที่เป็ นข้อมูลออกจากคาสัง่ ด้วยเหตุน้ ีฟังก์ชนั ที่จดั การกับ
ข้อมูลจึงอาจจะถูกวางไว้อย่างกระจัดกระจาย สร้างความลาบาก
ในการติดตามสื บหาว่าข้อมูลนี้ถูกเปลี่ยนแปลงโดยฟังก์ชนั ใด
07/08/59
9
การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming)
หรื อการโปรแกรมแบบมีโครงสร้าง (Structure Programming)
มีหลักการ 3 อย่างนี้คือ
 การทางานแบบตามลาดับ (Sequence)
 การเลือกกระทาตามเงื่อนไข (Decision)
 การทาซ้ า (Loop)
07/08/59
10
1. การทางานแบบตามลาดับ (Sequence)
: รูปแบบการเขียนโปรแกรมทีง่ ่ ายทีส่ ุ ดคือ
เขียนให้ทางานจากบนลงล่าง เขียนคาสัง่
เป็ นบรรทัด และทาทีละบรรทัดจากบรรทัด
บนสุ ดลงไปจนถึงบรรทัดล่างสุ ด สมมติให้มี
การทางาน 3 กระบวนการคือ อ่านข้อมูล
คานวณ และพิมพ์ จะเขียนเป็ นผังงาน
(Flowchart) ในแบบตามลาดับได้ตามภาพ
START
Process1
Process2
Process3
STOP
แสดงการเขียนโปรแกรมเชิงกระบวนการแบบลาดับ
07/08/59
11
การทางานแบบตามลาดับ (Sequence)
ทางานตามลาดับ
ทางานจากบนลงล่ าง (จุดเริ่มต้ นถึงสิ้นสุ ด)
มีจุดเริ่มต้ นจุดเดียว – จุดสิ้นสุ ดจุดเดียว
START
Process1
Process2
Process3
STOP
07/08/59
12
2. การเลือกกระทาตามเงื่อนไข (Decision)
: การตัดสิ นใจ หรื อเลือกเงื่อนไขคือ
เขียนโปรแกรมเพื่อนาค่าไปเลือกกระทา
โดยปกติจะมีเหตุการณ์ให้ทา 2 กระบวนการ คือ
เงื่อนไขเป็ นจริ งจะกระทากระบวนการหนึ่ง และ
เป็ นเท็จจะกระทาอีกกระบวนการหนึ่ ง แต่ถา้
ซับซ้อนมากขึ้น จะต้องใช้เงื่อนไขหลายชั้น เช่น
การตัดเกรดนักศึกษา เป็ นต้น
ตัวอย่างผังงานนี้ จะแสดงผลการเลือกอย่าง
ง่าย เพื่อกระทากระบวนการเพียงกระบวนการเดียว
07/08/59
Yes
Process
Decision
No
Process
แสดงการเขียนโปรแกรมเชิงกระบวนการแบบเงื่อนไข
13
เงื่อนไข
- คะแนนสอบตั้งแต่ 80 คะแนนขึน้ ไป
- คะแนนสอบ 70-79 คะแนนขึน้ ไป
- คะแนนสอบ 60-69 คะแนนขึน้ ไป
- คะแนนสอบ 50-59 คะแนนขึน้ ไป
- คะแนนสอบต่ากว่ า 50 คะแนน
07/08/59
ได้ เกรด A
ได้ เกรด B
ได้ เกรด C
ได้ เกรด D
ได้ เกรด F
14
START
Read Score
Y
N
Score>=80
Y
Grade = ‘A’
N
Score>=70
Y
Grade = ‘B’
Grade = ‘C’
Score>=60
Y
Grade = ‘D’
07/08/59
Write Grade
STOP
N
Score>=50
N
Grade = ‘F’
15
Start
Read Score
หรื อ
Y
Score >= 80
Grade = ‘A’
N
Score >= 70
Y
Grade = ‘B’
N
Score >= 60
Y
Grade = ‘C’
N
Y
Score >= 50
Grade = ‘D’
N
Grade = ‘F’
Write Grade
07/08/59
Stop
16
อัลกอริธึม
1. เริ่มต้ นทางาน
2. รับค่ า คะแนนสอบ (Score)
3. เปรียบเทียบคะแนนสอบ>=80 ถ้ าเป็ นจริง ให้
ทานิพจน์ Grade=‘A’ ถ้ าเป็ นเท็จ ให้
เปรียบเทียบคะแนนสอบ >=70 ถ้ าเป็ นจริง ให้
ทานิพจน์ Grade=‘B’ ถ้ าเป็ นเท็จ ให้
เปรียบเทียบคะแนนสอบ >=60 ถ้ าเป็ นจริง ให้
ทานิพจน์ Grade=‘C’ ถ้ าเป็ นเท็จ ให้
เปรียบเทียบคะแนนสอบ >=50 ถ้ าเป็ นจริง ให้
ทานิพจน์ Grade=‘D’ ถ้ าเป็ นเท็จ ให้ ให้ ทา
นิพจน์ Grade=‘F’
4. แสดงผล เกรด (Grade)
5. จบการทางาน
07/08/59
รหัสเทียม (Pseudo Code)
Begin
READ Score
IF Score >= 80
THEN Grade = ‘A’
ELSE IF Score >=70
THEN Grade = ‘B’
ELSE IF Score >=60
THEN Grade = ‘C’
ELSE IF Score >=50
THEN Grade = ‘D’
ELSE Grade = ‘F’
WRITE Grade
End
17
3. การทาซ้า (Repetition or Loop)
: การทากระบวนการหนึ่งหลายครั้ง
โดยมีเงื่อนไขในการควบคุม หมายถึงการทาซ้ าเป็ น
หลักการที่ทาความเข้าใจได้ยากกว่า 2 รู ปแบบแรก เพราะการ
Process
เขียนโปรแกรมแต่ละภาษา จะไม่แสดงภาพอย่างชัดเจนเหมือน
Yes
การเขียนผังงาน (Flowchart) ผูเ้ ขียนโปรแกรมต้องจินตนาการ
ถึงรู ปแบบการทางาน และใช้คาสั่งควบคุมด้วยตนเอง ตัวอย่าง Decision
ผังงานที่นามาแสดงนี้ เป็ นการแสดงคาสั่ง ทาซ้ า (do while) ซึ่ ง
No
หมายถึงการทาซ้ าในขณะที่เป็ นจริ ง และเลิกการทาซ้ า
เมื่อเงื่อนไขเป็ นเท็จ
แสดงการเขียนโปรแกรมเชิงกระบวนการแบบลาดับ
07/08/59
18
ยกตัวอย่ าง เช่ น โปรแกรมตู้ขายเครื่ องดื่มอัตโนมัติ
วิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการ
เมื่อมีการหยอดเหรี ยญเข้าตู:้
1. ตรวจสอบจานวนเหรี ยญและชนิดของเหรี ยญ
2. แสดงผลชนิดของน้ าที่สามารถเลือกซื้ อได้
3. ตรวจสอบจานวนน้ ากระป๋ องที่มีอยูใ่ นตู ้
4. รับผลการเลือกชนิดน้ า
5. ส่ งน้ าที่เลือกออกมาจากช่อง
6. จัดเก็บเงินเข้าระบบ
7. หากมีเงินทอน ให้ทอนเงินที่เหลือ ที่ช่องรับเงินทอน
07/08/59
19
แนวคิดนีม้ ขี ้ อเสี ยอย่ างไร?
• ขนาดของโปรแกรมใหญ่ ขนึ้ จะทาให้ มีความซับซ้ อนในแง่ ของ
การเขียนโปรแกรม
• ปัญหาในเรื่ องของการนากับมาใช้ ใหม่ (Reusable)
• การแก้ไข (Modify)
• การขยายเพื่อเพิม่ ประสิ ทธิภาพให้ กบั โปรแกรม
07/08/59
20
การเขียนโปรแกรมเชิงวัตถุ (Object-oriented
programming, OOP) คือหนึ่งในรู ปแบบการเขียนโปรแกรม
คอมพิวเตอร์ ที่ให้ความสาคัญกับ วัตถุ ซึ่งสามารถนามาประกอบกัน
และนามาทางานรวมกันได้ โดยการแลกเปลี่ยนข่าวสาร เพื่อนามา
ประมวลผลและส่ งข่าวสารที่ได้ไปให้วตั ถุอื่นๆ ที่เกี่ยวข้องเพื่อให้
ทางานต่อไป
07/08/59
21
การเขียนโปรแกรมเชิงวัตถุ Data จะถูกประกาศใช้เฉพาะภายใน
Object เท่านั้น
Object 1
Data
Object 2
Data
การที่ OOP จัด Data ไว้ในแต่ละ Object นั้น เป็ นการปกป้อง
ข้อมูลภายใน Object ลดปัญหาการเปลี่ยนแปลงข้อมูลภายใน
Object โดยไม่ได้รับอนุญาต
07/08/59
22
โปรแกรมตู้ขายเครื่ องดื่มอัตโนมัติ
วิธีการคิดแบบการเขียนโปรแกรมเชิงวัตถุ
ตูข้ ายเครื่ องดื่มอัตโนมัติ ประกอบด้วยส่ วนประกอบต่างๆได้แก่ หน่วยตรวจสอบ
และจัดการเรื่ องเงิน หน่วยจัดการเครื่ องดื่ม หน่วยแสดงผลและรอรับคาสัง่
1. หน่วยตรวจสอบและจัดการเรื่ องเงิน มีขอ้ มูลเกี่ยวกับเงินที่ได้รับ และเงิน
ที่มีอยูใ่ นระบบสามารถรับและตรวจสอบเงินที่หยอดเข้ามาได้ และทอนเงินได้
2. หน่วยจัดการเครื่ องดื่ม มีขอ้ มูลชนิดของเครื่ องดื่ม จานวนเครื่ องดื่ม
สามารถจัดเตรี ยมชนิ ดเครื่ องดื่มที่พอกับเงินที่หยอด และสามารถจ่ายเครื่ องดื่ม
ออกมาจากตูไ้ ด้
3. หน่วยแสดงผลและรอรับคาสั่ง มีหน้าที่รอรับคาสั่ง และแสดงผลเงินที่
หยอดเข้ามา
07/08/59
23
แนวคิดการวิเคราะห์ปัญหาใกล้เคียงกับธรรมชาติของมนุษย์
ระบบจริ ง (real life) แบ่งตามออปเจ็ค ไม่ได้ข้ ึนอยูก่ บั ฟังก์ชนั
การทางาน
ขบวนการพัฒนาโปรแกรมทาได้รวดเร็ วขึ้น
ง่ายต่อการพัฒนาและแก้ไข
นาโปรแกรมกลับมาใช้ใหม่ได้ง่าย
07/08/59
24
แนวคิดการเขียนโปรแกรมแบบดัง้ เดิมมักนิยมใช้ การเขียน
โปรแกรมเชิงกระบวนการ(Procedural Programming) ซึ่งให้
ความสาคัญกับขั้นตอนกระบวนการที่ทา โดยแบ่งโปรแกรม
ออกเป็ นส่ วนๆตามลาดับขั้นตอนการทางาน แต่แนวคิดการเขียน
โปรแกรมเชิงวัตถุน้ นั ให้ความสาคัญกับข้ อมูล (data) และ
พฤติกรรม (behavior) ของวัตถุ และความสัมพันธ์กนั ระหว่าง
วัตถุกนั มากกว่า
07/08/59
25
โปรแกรมเชิงวัตถุจะแบ่งการทางานของโปรแกรมเป็ นวัตถุ
การปรับปรุ งหรื อแก้ไขโปรแกรมเชิงวัตถุทาได้ง่ายกว่า จึงเหมาะกับ
การพัฒนาโปรแกรมขนาดใหญ่ที่จะต้องมีการปรับปรุ งแก้ไข
โปรแกรมอยูต่ ลอด
07/08/59
26
โปรแกรมพจนานุกรมฉบับราชบัณฑิตยสถาน พ.ศ. ๒๕๒๕ นิยามคาว่า “วัตถุ”
ว่าหมายถึงสิ่ งของ และนิยามคาว่า “สิ่ งของ” ว่าหมายถึงวัตถุต่างๆ
ในโปรแกรมจะจาลองลักษณะและความสามารถของวัตถุต่างๆ ที่อยูใ่ นโลกจริ ง
 สิ่ งไม่มีชีวติ เช่น รู ปสี่ เหลี่ยม โทรทัศน์ หรื อบ้าน
 สิ่ งมีชีวติ เช่น พนักงาน นก หรื อต้นไม้
 สิ่ งที่เป็ นนามธรรม เช่น แนวความคิด หลักการ หรื อวิธีการ
07/08/59
27
คลาสเป็ นเหมือนส่ วนของแม่พิมพ์ เพื่อบอกลักษณะว่าวัตถุใน
คลาสนี้มีลกั ษณะและพฤติกรรมเป็ นอย่างไร
ส่ วนประกอบของคลาส
แอททริบิวท์ (Attribute) หรื อข้อมูล (Data) เป็ นสิ่ งที่ใช้บอกถึง
ลักษณะต่างๆของวัตถุในคลาส
เมธอด(Method) หรื อพฤติกรรม (Behavior) เป็ นสิ่ งที่ใช้อธิบาย
การทางานของวัตถุในคลาส
07/08/59
28
นักศึกษา อาจจะประกอบไปด้วยคุณลักษณะเช่น รหัส ชื่อ และเกรด
เฉลี่ย และอาจจะมีเมธอดเช่น ลงทะเบียน สอบ และเดิน
รถยนต์ อาจจะประกอบไปด้วยคุณลักษณะเช่น ยีห่ อ้ รุ่ น และสี
และอาจจะมีเมธอดเช่น เคลื่อนที่ หยุดและเลี้ยว
สุ นัข
อาจจะประกอบไปด้วยคุณลักษณะเช่น ชื่อ พันธุ์ และสี
และอาจจะมีเมธอดเช่น เห่า คลาน และกระดิกหาง
07/08/59
29
 คลาสหนึ่งคลาสสามารถสร้างออปเจ็คได้หลายออปเจ็ค
อาทิเช่น คลาส Student อาจสร้างออปเจ็ค s1,s2 หรื อ s3
ซึ่งเป็ นออปเจ็คของคลาส Student
07/08/59
30
07/08/59
31
1. การห่ อหุ้ม (Encapsulation)
- ซ่ อนวิธีการทางาน (Information Hiding)
2. การสื บทอด (Inheritance)
3. การพ้องรูป (Polymorphism)
07/08/59
32
การห่ อหุ้ม (Encapsulation) เป็ นการซ่ อนรายละเอียดการทางาน
และข้ อมูลไว้ ภายใน ไม่ ให้ ภายนอกสามารถเห็นได้
ดิฉนั สมหญิงจากบริ ษทั A
ทาไมดิฉนั จึงมองไม่เห็นแฟ้ม
เอกสารเหมือนอย่างที่คุณ
สมศรี บริ ษทั C มองเห็นคะ
07/08/59
อาจเป็ นเพราะแฟ้มเอกสารถูก Encapsulation
(ซ่อนอยูห่ ลังกาแพง) อยูค่ รับ จะมีแต่เฉพาะ
บุคคลภายในบริ ษทั C มองเห็นแฟ้มเอกสารนี้ ได้
ตัวผมก็มองไม่เห็นเช่นกัน เพราะผมเองก็เป็ น
บุคคลภายนอกเช่นกัน
ดิฉนั ชื่อสมศรี เป็ นบุคคลภายใน
ของบริ ษทั C ฉันจึงเห็นแฟ้ม
เอกสารเหล่านี้และมีสิทธิ์ เข้ามา
จัดการได้ค่ะ
แฟ้มเอกสารนีเ้ ป็ น private
(แฟ้มส่ วนบุคคล)
33
ดีจงั เลยนะคะที่บริ ษทั C
ไม่ได้ทาการ encapsulate
ซ่อนแฟ้มเอกสารนี้ไว้ ทาให้
เราสามารถมองเห็นแฟ้ม
เอกสารนี้ได้
07/08/59
ใช่แล้วครับ โชคดีมาก เพราะจะทาให้เราสามารถ
เข้าไปดูขอ้ มูลในแฟ้มเอกสารนี้ได้ และนอกจาก
เราจะดูขอ้ มูลได้แล้ว ยังสามารถแก้ไขข้อมูลได้
ด้วย เป็ นโอกาสของเราที่จะล้วงความลับและ
สร้างความเสี ยหายให้กบั บริ ษทั C ซึ่งเป็ นคู่แข่ง
ของเราได้
แย่แล้ว บุคคลภายนอกบริ ษทั ดิฉนั
สามารถมองเห็นแฟ้มเอกสารนี้ ได้
ข้อมูลของบริ ษทั ต้องได้รับความ
เสี ยหายแน่นอนเลยค่ะ
แฟ้มเอกสารนีเ้ ป็ น public
(แฟ้มสาธารณะ)
34
 ซ่อนวิธีการทางานของวัตถุ เพื่อป้องกันการเข้ามาใช้ขอ้ มูลของวัตถุ
โดยสิ่ งอื่นที่ไม่เกี่ยวข้องแล้วทาให้เกิดการผิดเพี้ยนของการทางานทั้ง
ระบบ
 ทาให้เกิดความยืดหยุน่ ผูส้ ร้างวัตถุสามารถเปลี่ยนแปลงวิธีการทางาน
ของวัตถุได้โดยไม่กระทบต่อผูใ้ ช้วตั ถุ
 เพื่อให้เกิดความปลอดภัยของวัตถุและระบบโดยรวมให้มากที่สุด
07/08/59
35
การสื บทอด (Inheritance) คือการทาการสร้างสิ่ งใหม่ข้ ึนด้วยการ
สื บทอดหรื อรับเอาคุณสมบัติบางอย่างมาจากสิ่ งเดิมที่มีอยูแ่ ล้ว และ
สร้างเพิ่มเติมได้
• ข้อดี
• สามารถนาสิ่ งที่เคยสร้างขึ้นแล้วนากลับมาใช้ใหม่ (re-use) ได้
• ประหยัดเวลา
•
07/08/59
36
ผมนาย ก. เป็ นพนักงานคนหนึ่งครับ (Employee) คุณสมบัติผม
ประกอบด้วยรหัสพนักงานและตาแหน่ง ใครเป็ นพนักงาน
เหมือนกัน เชิญสื บทอดคุณสมบัติของผมไปใช้งานได้เลยครับ
ผมนาย ข. เป็ นผูจ้ ดั การครับ (Manager) ผมก็เป็ นพนักงาน
คนหนึ่ง ดังนั้นจึงทาการสื บทอดคุณสมบัติมาจากนาย ก.
ทาให้มีคุณสมบัติประกอบด้วยรหัสพนักงาน และตาแหน่ง
แต่ในฐานะที่ผมเป็ นผูจ้ ดั การ ผมได้รับรถประจาตาแหน่ง
ด้วย ดังนั้นผมจึงต้องสร้างคุณสมบัติข้ ึนมาอีก 1 ข้อ
inherit
รหัสพนักงาน
ตาแหน่ ง
รถประจาตาแหน่ ง
07/08/59
รหัสพนักงาน
ตาแหน่ ง
37
เป็ นคุณสมบัติที่ชนิดของวัตถุที่เกิดจากชนิ ดของวัตถุแม่เดียวกัน สามารถมี
ความสามารถเหมือนแม่แต่มีวธิ ี การดาเนินงานไม่เหมือนกัน คือมีลกั ษณะเฉพาะตัว
เช่น
สั ตว์ มีปีก::บิน()
นก::บิน()
กระพือปี กขึน้ ลง
07/08/59
แมลงปอ::บิน()
กางปี กรับลม
ผึง้ ::บิน()
กระพือปี กถี่เร็ว
38
ตัวอย่างเช่น
public void calculate (int x) {}
public void calculate (double x) {}
 เมธอดชื่อ calculate เหมือนกัน แต่มีการรับค่าเข้ามาภายใน
เมธอดที่แตกต่างกัน
 เมธอดชื่อเดียวกันสามารถรับอาร์กิวเมนต์ที่แตกต่างกันได้หลาย
รู ปแบบนี้ เรี ยกว่าเมธอดนั้นถูกโอเวอร์โหลด (overload)
07/08/59
39
สรุป
ข้ อดีของ Polymorphism คือ การทาให้ สิ่งหนึ่งสามารถทางาน
ได้ หลากหลายรูปแบบตามความต้ องการทีเ่ กิดขึน้ ในขณะหนึ่ง ๆ
ถ้าเป็ นลูกค้าขาจร ผมจะใช้เมธอด public void calculate(double y)
ในการคานวณราคาครับ ไม่ได้ซ้ือประจาลดให้ไม่ได้ครับ เศษเล็ก
เศษน้อยต้องคิด
แต่ถา้ เป็ นลูกค้าประจา ผมจะใช้เมธอด public void
calculate(int x) ในการคานวณราคาครับ เศษเล็ก ๆ น้อย ๆ
ไม่คิดครับ
07/08/59
40
LOGO
07/08/59
41
เริ่ มต้นขึ้นใน ปี ค.ศ. 1990
แพททริก นอทัน (Pattrick Naughton) เขียนข้อผิดพลาดที่
เกิดขึ้นในบริ ษทั ซันไมโครซิ สเต็มส์
เจมส์ กอสลิง่ (James Gosling) ผูใ้ ห้กาเนิดภาษาจาวา
07/08/59
42
กรีนทีม (Green Project)
 วัตถุประสงค์คือการสร้างคอมพิวเตอร์รุ่นใหม่
 ยุคถัดจากคอมพิวเตอร์ส่วนบุคคล (personal computer)
ก็คือคอมพิวเตอร์ในอุปกรณ์อิเล็กโทรนิกส์ (consumer
electronics)
07/08/59
43
- รี โมตคอนโทรลควบคุมอุปกรณ์อิเล็กทรอนิกส์ มีชื่อว่า “สตาร์
เซเว่ น” (*7)
- ภาษาที่ใช้ควบคุมอุปกรณ์อิเล็กทรอนิกส์คือ “ภาษาโอ๊ ค” (Oak)
ดุ๊ค
07/08/59
44
-Gosling ได้รับมอบหมายให้สร้างภาษาใหม่ สาหรับติดตั้งให้กบั อุปกรณ์
- โดยภาษาที่สร้ างขึน้ ต้ องเป็ นภาษาทีม่ ีขนาดเล็ก  อุปกรณ์ ไม่ ใช้ หน่ วย
ประมวลผลทีส่ ู ง
- สิ่ งสาคัญ  ภาษาทีส่ ร้ างขึน้ จะต้ องเป็ นภาษาทีไ่ ม่ ยดึ ติดกับอุปกรณ์
ฮาร์ ดแวร์ (Platform-independent)
-Gosling ได้ประดิษฐ์ ภาษาโอ๊ ค แทนภาษา C++ เพื่อใช้ในโปรแกรม
อุปกรณ์อิเล็กทรอนิกส์
07/08/59
45
เปลีย่ นชื่ อจาก “Oak” เป็ น “JAVA”
มาร์ ค แอนดรีสเซน ออกแบบ Mosaic ซึ่งเป็ นโปรแกรมเว็บเบราเซอร์
บิล จอย (Bill Joy) แจกจ่ ายตัวพัฒนาภาษา
นอทันพัฒนาเว็บเบราเซอร์ ทสี่ นับสนุนภาษาจาวา โปรแกรมดังกล่ าว
มีชื่อว่ า HotJava
Netscape Navigator
23 มกราคม ค.ศ. 1996 ซันได้ ออก JDK 1.0
07/08/59
46
LOGO
07/08/59
47
ทางานบนเว็บเบราเซอร์ ได้
ความปลอดภัยสู ง
สนับสนุนงานหลายระดับ
07/08/59
48
สามารถทางานบนเครื่ องคอมพิวเตอร์ ต่างระบบได้
ภาษาจาวาเป็ นภาษาเชิงวัตถุ
ความเรียบง่ าย ไวยากรณ์ของภาษาจาวาถูกออกแบบมาเป็ น
อย่างดี ทาให้เข้าใจง่าย
ระบบจัดการคืนพืน้ ทีใ่ นหน่ วยความจาอัตโนมัติ (Automatic
Garbage Collection)
07/08/59
49
มีคลาสจานวนมากมายให้ ใช้
 ในจาวาแพล็ตฟอร์ มมาตรฐาน J2SE รุ่น 5.0 มีคลาสและ
อินเทอร์ เฟซ 3,279
ฟรี เครื่ องมือในการพัฒนา,ตัวแปลภาษา,โปรแกรมเครื่ องจักร
เสมือน ฯลฯ
07/08/59
50
LOGO
07/08/59
51
ระบบที่โปรแกรมอาศัยทางาน
Hardware
Software
Ex. แพล็ตฟอร์ม Wintel
ซีพยี ูของอินเทล และระบบปฏิบัติการไมโครซอฟท์ วนิ โดวส์
07/08/59
52
จาวาแพล็ตฟอร์ม เป็ นซอฟแวร์ ซึ่งประกอบด้วย
 ตัวแปลภาษา
 โปรแกรมเครื่ องจักรเสมือนจาวา
 คลาส (แกนหลักของภาษาจาวา)
07/08/59
53
Java 2 Platform, Standard Edition (J2SE) เป็ นแพลตฟอร์มมาตรฐาน
 จาวาแอพพลิเคชัน (Java application) ใช้สาหรับเขียนโปรแกรมทัว่ ไป
 แอพเพลต (Java applet) โปรแกรมที่ทางานบนเว็บเบราเซอร์
Java 2 Platform, Enterprise Edition (J2EE)
 โปรแกรมแบบมัลติเทียร์ (multitiered) สาหรับการพัฒนาโปรแกรมในระดับ
องค์กร
Java 2 Platform, Micro Edition (J2ME)
 สิ นค้าอีเล็กโทรนิกส์ เช่น โทรศัพท์มือถือ พีดีเอ (personal digital assistant) และ
กล่องเคเบิ้ลทีวี (TV set-top box
07/08/59
54
LOGO
07/08/59
55
ฮาร์ ดแวร์ (Hardware)
 ส่ วนประกอบที่เป็ นตัวเครื่ องคอมพิวเตอร์
ระบบปฏิบัติการ (Operating System)
 Windows 7, Linux และ Solaris
โปรแกรมประยุกต์ (Application Programs)
 โปรแกรมทัว่ ๆไป อาทิเช่น Word processor เกม บราวเซอร์ (Browser)
 พัฒนาโดยใช้ภาษาคอมพิวเตอร์ ต่างๆ เช่น ฟอร์แทน (FORTRAN) โคบอล
(COBOL) C++ หรื อ JAVA
07/08/59
56
ภาษาเครื่ อง (Machine Language)
 01010110
ภาษาแอสเซมบลี้ (Assembly Language)
 ADD R1,R2
ภาษาคอมพิวเตอร์ ระดับสู ง
 x = c1+c2
07/08/59
57
ภาษายุคแรก
 ฟอร์แทรน โคบอล เบสิ ก (BASIC)
ภาษาเชิงกระบวนการ (Procedural Language)
 ปาสคาล (Pascal) ซี (C)
ภาษาเชิงออปเจ็ค (Object Oriented Programming)
 C++ Smalltalk JAVA
07/08/59
58
ภาษาระดับสู งจะต้องใช้ตวั แปลภาษา (Language Translator)
เพื่อเปลี่ยนซอร์ดโค้ด (Source Code) ให้เป็ นคาสัง่ ที่คอมพิวเตอร์
สามารถเข้าใจได้
วิธีแปลภาษามีอยูส่ องแบบ
 คอมไพเลอร์ (Compiler)
 อินเตอร์พรี ตเตอร์ (Interpreter)
07/08/59
59
ทาหน้าที่แปลซอร์ดโค้ดทั้งโปรแกรมให้เป็ นโค้ดที่
สามารถทางานได้ (executable code)
โปรแกรม executable code จะสามารถถูกนาไปใช้งาน
ได้ทนั ที
ตัวอย่างของภาษาที่ใช้คอมไพเลอร์คือ ฟอร์แทรน
ปาสคาล และ C++
07/08/59
60
07/08/59
61
ข้ อดี
 ทางานได้เร็ ว
 ตรวจสอบข้อผิดพลาดของโปรแกรมซอร์ดโค้ดในขั้นตอนของการ
คอมไพล์
ข้ อเสี ย
 ต้องนาโปรแกรมซอร์ดโค้ดมาแปลใหม่เมื่อเปลี่ยนระบบปฏิบตั ิการ
เนื่องจากคอมไพเลอร์เป็ นตัวแปลภาษาที่ข้ ึนอยูก่ บั แพลตฟอร์ม
(Platform Specific)
07/08/59
62
แปลโปรแกรมซอร์ดโค้ดทีละบรรทัดให้เป็ น executable code
และทางานทันที
มีขอ้ ดีคือ อินเตอร์พรี ตเตอร์ถูกสร้างขึ้นได้ง่ายกว่าและมีขนาดเล็ก
ทาให้ภาษาที่ใช้อินเตอร์พรี ตเตอร์สามารถทางานข้ามแพลตฟอร์มได้
มีขอ้ เสี ยคือ ทางานได้ชา้ กว่าคอมไพเลอร์
ตัวอย่างของภาษาที่ใช้อินเตอร์พรี ตเตอร์คือ เบสิ ก โปรล็อก
(Prolog) และ Smalltalk
07/08/59
63
07/08/59
64
1. Text Editor เช่นเดียวกันกับการเขียนโปรแกรมในภาษาอื่น ๆ เราต้องมี
Text Editor ที่ใช้สร้างและเก็บ source code
2. JDK (Java Development Kit) ซึ่งมีหลาย version เราต้องใช้ JDK ในการ
compile โปรแกรมที่เราได้เขียนขึ้น
3. Java VM หรื อที่เรี ยกว่า Java Virtual Machine ซึ่งเป็ นตัวกลางที่เปลี่ยน
code ที่ได้จากการ compile เป็ น code ที่สามารถ execute บนเครื่ องต่าง ๆ
(code ที่เครื่ องนั้น ๆ รู ้จกั – machine code หรื อที่ชาว Java เรี ยกว่า byte
code) โดยปกติ VM จะถูกติดตั้งพร้อมกับ JDK
4. JRE (Java Runtime Environment) ตัวรัน ภาษา java ทีถูกแปลงเป็ น
byte code แล้ว
07/08/59
65
JDK
JRE
JVM
07/08/59
66
ชุ ดพัฒนาภาษาจาวา (Java Development Kit - JDK) ประกอบด้ วย
 1. จาวาคอมไพเลอร์ (javac.exe)
ซอร์ สโค้ ด
(ไฟล์ .java)
07/08/59
คอมไพเลอร์
(โปรแกรม javac)
Byte code
(ไฟล์ .class)
67
 2. สภาพแวดล้อมการรันโปรแกรมจาวา (Java Runtime Environment JRE) (java.exe)
Byte code
(ไฟล์ .class)
Download http://java.sun.com
07/08/59
สภาพแวดล้ อมสาหรับ
รันโปรแกรมจาวา
(โปรแกรม java)
ผลการทางาน
68
07/08/59
69
07/08/59
70
JDK เป็ นส่ วนประกอบหนึ่งของ JAVA SE
เหมาะสาหรับผูพ้ ฒั นาโปรแกรม หรื อโปรแกรมเมอร์ดาวน์
โหลดไปใช้งาน
 JDK ประกอบด้วย
 คอมไพเลอร์สาหรับคอมไพล์โปรแกรม
 ดีบกั เกอร์สาหรับดีบกั โปรแกรมเพื่อค้นหาและแก้ไขส่ วนผิดพลาด
ของโปรแกรม
 JDK ประกอบด้วย JRE
07/08/59
71
JRE เป็ นส่ วนที่จาเป็ นสาหรับการเรี ยกรันโปรแกรมที่เขียนขึ้น
ด้วยภาษาจาวา
JRE ประกอบด้วย JVM, ไลบรารี ต่าง ๆ และคอมโพเน้นท์
07/08/59
72
หน้าที่ของ JVM คือ จาลองคอมพิวเตอร์เสมือน (Virtual machine) ขึ้นบนเครื่ อง
คอมพิวเตอร์
คอมพิวเตอร์เสมือนจะทาหน้าที่ในการแปลไบต์โค้ด (bytecode) ไปเป็ น
ภาษาเครื่ องที่เหมาะสมกับแพลตฟอร์ มจริ ง ๆ ของแต่ละเครื่ อง
โปรแกรมภาษาจาวาจะคอมไพล์ได้ไบท์โค้ด โดย JVM จะเป็ นอินเตอร์พรี ตเตอร์ที่
แปลไบท์โค้ดให้เป็ นคาสั่งที่ภาษาเครื่ องเข้าใจ
จาวาไบท์โค้ดสามารถจะรันข้ามแพลตฟอร์ม (platform) ได้ ถ้าแพลตฟอร์ มนั้นมี
JVM อยู่
JVM เป็ นโปรแกรมที่ข้ ึนอยูก่ บั แพลตฟอร์ ม (platform specific)
JVM อาจพัฒนาเป็ นโปรแกรมซอฟต์แวร์หรื อฮาร์ ดแวร์ได้
07/08/59
73
1. ติดตั้ง JDK
2. กาหนดที่อยูข่ องไฟล์ต่าง ๆ (path) ที่จาเป็ นสาหรับการ compile
ภายในเครื่ องเพื่อให้การcompile และ execute โปรแกรมเป็ นไป
ได้ – ถ้าเราไม่กาหนด path เครื่ องของเราจะไม่รู้จกั คาสั่งต่าง ๆ
ที่ Java ใช้ ให้กาหนดที่อยู่
07/08/59
74
หลังจากที่ได้ติดตั้ง JDK พร้อมทั้งไฟล์อื่นๆ แล้วหน้าตาของ
directory ของ Java ก็จะมี folder ต่างๆ คล้ายๆ กับที่เห็นนี้
07/08/59
75
กดปุ่ มขวาของ mouse บน icon My Computer (หรื อ ไปที่
ปุ่ ม start ที่มุมล่างซ้ายของจอแล้วเลือก My Computer) แล้ว
เลือก Properties
กดปุ่ ม advanced บน System Properties
กดปุ่ ม Environment Variables
07/08/59
76
ใน System Variables เลือกข้อความที่ข้ ึนต้นด้วยคาว่า Path
เมื่อกดปุ่ ม Edit ก็จะได้หน้าจอดังที่เห็น
เติม ; (semicolon) ถ้ายังไม่มี แล้วจึงใส่ path ที่ได้ install JDK ไว้
เสร็ จแล้วกดปุ่ ม OK เพื่อให้ระบบบันทึกการเปลี่ยนแปลงที่ได้ทาขึ้น
07/08/59
77
Notepad
 มาพร้อมกับ Windows
J-Lab
 http://www.cp.eng.chula.ac.th/~somchai/JLab/
Netbeans
 http://www.netbeans.org/
Eclipse
 http://www.eclipse.org/
07/08/59
78
07/08/59
79
07/08/59
80
07/08/59
81
07/08/59
82
LOGO
07/08/59
83
พิมพ์คาว่า Hello, World! ขึ้นบนหน้าจอคอมพิวเตอร์
07/08/59
84
2
1
3
07/08/59
85
07/08/59
86
public class HelloWorld
{
}
07/08/59
87
public class HelloWorld
{
public static void main(String[] args)
{
}
}
07/08/59
88
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
07/08/59
89
07/08/59
90
import java.awt.*;
import javax.swing.*;
public class HelloGraphicsWorld {
public static void main(String[] args) {
JFrame frame = new JFrame() {
public void paint(Graphics g) {
g.drawString("Hello, World!", 110, 150);
g.drawOval(100, 130, 90, 30);
}
};
frame.setSize(300, 300);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
07/08/59
91
คอมเมนต์ บรรทัดเดียว
// print the word hello
คอมเมนต์ ทเี่ ป็ นย่ อหน้ า
/*
This program
will print
the word hello
*/
07/08/59
92
คอมเมนต์ที่เป็ นย่อหน้าสาหรับการสร้างเอกสารด้วย
โปรแกรม javadoc
/**
*/
07/08/59
93
เลือกที่ Menu tool > Preferences เลือก User tools
เลือกที่ Group Name ตั้งชื่อ Java จากนั้นกด OK
เลือกที่ Add Tool -> Program
07/08/59
94
ตั้งชื่อ Java Compile กดปุ่ ม Browse ไปที่ติดตั้งโปรแกรม j2sdk แล้วเข้าไปที่
bin เลือก javac.exe ดังรู ป ที่ Argument เลือกที่ Flie Name เมื่อเซตได้ตามรู ป
แล้วกด OK
07/08/59
95
กลับไปทาขั้นตอนเดิมที่ Add Tool ตั้งชื่อ Java Run เลือกไฟล์ java.exe ใน bin
และ Argument ให้เลือก File Name Without Extension จากนั้นก็กด OK
07/08/59
96
LOGO
07/08/59
97
โปรแกรมในจาวาแพลตฟอร์ มมาตรฐานมีอยู่สองประเภทคือ
แอพพลิเคชัน และ แอพเพลท
จาวาแอพพลิเคชันสามารถทางานได้ เหมือนกับโปรแกรมทั่วไป มัน
สามารถทางานบนคอมพิวเตอร์ ต่างรุ่นต่ างระบบปฏิบัตกิ ารได้ เพราะว่ า
มันทางานอยู่บนโปรแกรมเครื่ องจักรเสมือน
จาวาแอพเพลตสามารถทางานบนเว็บเพจได้ มันสามารถทางานบน
คอมพิวเตอร์ ต่างรุ่นต่ างระบบปฏิบัตกิ ารได้ ขอเพียงแค่ มีโปรแกรม
เว็บเบราเซอร์ ทสี่ นับสนุนภาษาจาวาติดตั้งอยู่บนระบบปฏิบัติการนั้น
07/08/59
98
ซอร์ สโค้ ดโปรแกรมจาวาอยู่ในแฟ้มทีม่ ีนามสกุล .java
โปรแกรมทีใ่ ช้ คอมไพล์ ภาษาจาวาชื่ อ javac
ผลการคอมไพล์ จะได้ แฟ้ มทีม่ ีนามสกุล .class
ไฟล์ นามสกุล class สามารถทางานใน JRE ได้
ใช้ โปรแกรม java รันไฟล์ .class ที่มีเมธอด main()
การพิมพ์ข้อความใช้ คาสั่ ง
System.out.println("ข้ อความที่ต้องการพิมพ์ ")
07/08/59
99
จงพิจารณาว่าประโยคนี้ถูกหรื อผิด
1.
2.
3.
4.
5.
6.
7.
07/08/59
ทุกครั้งที่ติดตั้ง JRE จะได้ JDK ติดตั้งมาพร้อมกันด้วยเสมอ
JVM ไม่ได้เป็ นส่ วนประกอบหนึ่งที่อยูใ่ น JRE
JDK ประกอบด้วย JRE, คอมไพเลอร์ และดีบกั เกอร์
หากติดตั้ง JDK ลงที่เครื่ อง ก็จะสามารถเรี ยกรันจาวาแอพเพลตได้เช่นเดียวกับการติดตั้ง
JRE ลงที่เครื่ อง
โปรแกรมภาษาจาวาไม่เป็ น Platfom-independent
เมื่อ compile โปรแกรมแล้วจะได้เป็ น bytecode ซึ่งเป็ นไฟล์ที่มีนามสกุล .javac
bytecode จะยึดติดกับ platform
100
1. JAVA platform แบ่งออกเป็ นกี่ประเภท อะไรบ้าง จงอธิบาย
2. JRE คืออะไร ประกอบด้วยอะไรบ้าง
3. JDK คืออะไร ประกอบด้วยอะไรบ้าง
4. ถ้าเป็ นโปรแกรมเมอร์มีหน้าที่เขียนโปรแกรมภาษาจาวาให้กบั บริ ษทั ควรเลือกดาวน์โหลด JDK หรื อ
JRE มาใช้งาน เพราะเหตุใด
5. ถ้าบุคคลทัว่ ไปที่ไม่ใช่โปรแกรมเมอร์ เป็ นบุคคลที่ใช้เว็บทัว่ ไป โดยที่เว็บที่สนใจส่วนใหญ่ลว้ นมีจาวา
แอพเพลตรันอยูท่ ้งั สิ้น เธอควรเลือกดาวน์โหลด JDK หรื อ JRE มาใช้งาน เพราะเหตุใด
6. JVM คืออะไร จงอธิบาย
7. เพราะเหตุใดจึงไม่ตอ้ งแยกเขียนโปรแกรมภาษาจาวาสาหรับแพลตฟอร์มแต่ละแพลตฟอร์ม แต่สามารถ
เขียนโปรแกรมภาษาจาวาเพียงแค่ครั้งเดียว แล้วนาไปรันได้บนทุกแพลตฟอร์ม
8. จงอธิบายคุณสมบัติของโปรแกรมเชิงวัตถุ ประกอบด้วยอะไรบ้าง อธิบายอย่างละเอียด พร้อม
ยกตัวอย่าง
9. จงอธิบายข้อดีของ JAVA
07/08/59
101
LOGO
07/08/59
102