การเขียนโปรแกรมเชิงวัตถุ Object Oriented Programming

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "การเขียนโปรแกรมเชิงวัตถุ Object Oriented Programming"— ใบสำเนางานนำเสนอ:

1 การเขียนโปรแกรมเชิงวัตถุ Object Oriented Programming
Nerissa Onkhum 04/04/62

2 คำอธิบายรายวิชา หลักการการออกแบบและพัฒนาซอฟต์แวร์เชิงวัตถุ โครงสร้างโปรแกรมในภาษาเชิงวัตถุ ความหมายและ กลุ่มของวัตถุ คุณลักษณะและพฤติกรรมของวัตถุ คลาสและหลักการสำคัญของคลาส การห่อหุ้ม  การสืบทอด การพ้องรูป การนำเอาส่วนประกอบของซอฟต์แวร์กลับมาใช้ กราฟิก การสร้างและจัดการโครงสร้างข้อมูลพลวัต กรณีศึกษา การเขียนโปรแกรมเชิงวัตถุ 04/04/62

3 จุดประสงค์การเรียนรู้
เพื่อให้นักศึกษามีความรู้ ความเข้าใจเกี่ยวกับหลักการและแนวคิดเชิงวัตถุ เพื่อให้นักศึกษามีความรู้ ความเข้าใจเกี่ยวกับการออกแบบและการเขียนโปรแกรมเชิงวัตถุ 04/04/62

4 เนื้อหาวิชา ความรู้เบื้องต้นของภาษาจาวา หลักการเชิงออปเจ็ค
พื้นฐานโปรแกรมภาษาจาวา โครงสร้างควบคุม การเขียนโปรแกรมภาษาจาวาเชิงออปเจ็ค อะเรย์และคอลเล็กชัน การจัดการกับข้อมูลผิดพลาด อินพุตและเอาท์พุต โปรแกรมจาวาแบบกราฟฟิก 04/04/62

5 หนังสือที่ใช้ในรายวิชา
ตำราหลัก ธีรวัฒน์ ประกอบผล. คู่มือการเขียนโปรแกรมภาษา JAVA. พิมพ์ครั้งที่ : กรุงเทพฯ ; ซัคเซส มีเดีย. อรพิน. คู่มือการเขียนโปรแกรมด้วยภาษา JAVA. พิมพ์ครั้งที่ : กรุงเทพฯ ; โปรวิชั่น. 04/04/62

6 หนังสือที่ใช้ในรายวิชา
หนังสืออ่านประกอบ ยุทธนา ลีลาศวัฒนกุล. เริ่มต้นการเขียนโปรแกรมด้วยภาษา Java. พิมพ์ครั้งที่ : กรุงเทพ ฯ ; ไทยเจริญการพิมพ์. พนิดา พานิชกุล. การเขียนโปรแกรมคอมพิวเตอร์เบื้องต้นด้วยภาษา JAVA. พิมพ์ครั้งที่ : กรุงเทพฯ ; ไทยเจริญการพิมพ์. วรเศรษฐ สุวรรณิก และ ทศพล ธนะทิพานนท์. เขียนโปรแกรม Java เบื้องต้น. พิมพ์ครั้งที่ : กรุงเทพฯ ; ซีเอ็ดยูเคชั่น. 04/04/62

7 การวัดผล คะแนนระหว่างภาค 70 คะแนน เข้าเรียน 10 คะแนน การบ้าน 40 คะแนน
คะแนนระหว่างภาค 70 คะแนน เข้าเรียน คะแนน การบ้าน คะแนน สอบกลางภาค 10 คะแนน สอบปฏิบัติ 10 คะแนน คะแนนสอบปลายภาค 30 คะแนน 04/04/62

8 ข้อตกลงในชั้นเรียน เวลาเข้าเรียนไม่ต่ำกว่าร้อยละ 80
ขาดได้ไม่เกิน 3 ครั้ง มาสายกว่าเวลาเรียนครึ่งชั่วโมง ถือว่าขาด 1 ครั้ง ส่งงานที่ได้รับมอบหมายทั้งหมดครบและตรงตามระยะเวลา ที่กำหนด การแต่งกาย ให้เป็นไปตามระเบียบมหาวิทยาลัยกำหนด 04/04/62

9 ความรู้เบื้องต้นของภาษาจาวา (Introduction to Java Programming)
Nerissa Onkhum 04/04/62

10 Outline การเขียนโปรแกรมเชิงวัตถุ ประวัติของภาษาจาวา ข้อดีของภาษาจาวา
จาวาแพลตฟอร์ม การคอมไพล์และรันโปรแกรมภาษาจาวา โปรแกรม HelloWorld ในแบบตัวอักษรและแบบกราฟิก การติดตั้งเครื่องมือที่ใช้ในการพัฒนาโปรแกรมในภาษา Java 04/04/62

11 การเขียนโปรแกรมแบบโครงสร้าง (Structure programming)
การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming) เป็นการเขียนโปรแกรมแบบโครงสร้าง ซึ่งช่วยจัดระเบียบของคำสั่งในโปรแกรม สามารถตรวจสอบลำดับการทำงานได้ง่าย แต่เนื่องจากโปรแกรมประกอบด้วยคำสั่ง และข้อมูล เช่น ภาษา C แยกส่วนที่เป็นข้อมูลออกจากคำสั่ง ด้วยเหตุนี้ฟังก์ชันที่จัดการกับข้อมูลจึงอาจถูกวางไว้อย่างกระจัดกระจาย สร้างความลำบากในการติดตามสืบหาว่าข้อมูลถูกเปลี่ยนแปลง โดยฟังก์ชันใด 04/04/62

12 การเขียนโปรแกรมเชิงกระบวนการ
การเขียนโปรแกรมแบบโครงสร้าง (Procedural) จะแบ่งเป็น 2 ส่วนคือ ส่วนโปรแกรมหลัก(Main Program) และ โปรแกรมย่อย (Procedure หรือ Function) ลักษณะของ Data ที่มีการประกาศใช้ทั่วทั้งโปรแกรม เรียกว่าประกาศใช้แบบ “Global” 04/04/62

13 การเขียนโปรแกรมเชิงกระบวนการ
โปรแกรมย่อย 1 โปรแกรมหลัก Global Data โปรแกรมย่อย 3 โปรแกรมย่อย 2 โปรแกรมย่อย 4 แสดงการเขียนโปรแกรม แบบ Procedure 04/04/62

14 การเขียนโปรแกรมเชิงกระบวนการ
การเขียนโปรแกรมแบบโครงสร้าง โปรแกรมย่อยจะเรียกใช้ข้อมูลจากโปรแกรมหลักตัวเดียวกัน อาจทำให้เกิดปัญหาการเปลี่ยนแปลงค่าของข้อมูลตัวเดียวกันได้ โปรแกรมประกอบด้วยคำสั่งและข้อมูล การจัดระเบียบคำสั่ง เพียงอย่างเดียวนั้นจึงไม่สมบูรณ์ แยกส่วนที่เป็นข้อมูลออกจากคำสั่ง ด้วยเหตุนี้ฟังก์ชันที่จัดการกับข้อมูลจึงอาจจะถูกวางไว้อย่างกระจัดกระจาย สร้างความลำบาก ในการติดตามสืบหาว่าข้อมูลนี้ถูกเปลี่ยนแปลงโดยฟังก์ชันใด 04/04/62

15 การเขียนโปรแกรมเชิงกระบวนการ
การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming) หรือการโปรแกรมแบบมีโครงสร้าง (Structure Programming) มีหลักการ 3 อย่างนี้คือ การทำงานแบบตามลำดับ (Sequence) การเลือกกระทำตามเงื่อนไข (Decision) การทำซ้ำ (Loop) 04/04/62

16 การเขียนโปรแกรมเชิงกระบวนการ
1. การทำงานแบบตามลำดับ (Sequence) : รูปแบบการเขียนโปรแกรมที่ง่ายที่สุดคือ เขียนให้ทำงานจากบนลงล่าง เขียนคำสั่ง เป็นบรรทัด และทำทีละบรรทัดจากบรรทัดบนสุดลงไปจนถึงบรรทัดล่างสุด สมมติให้มี การทำงาน 3 กระบวนการคือ อ่านข้อมูล คำนวณ และพิมพ์ จะเขียนเป็นผังงาน (Flowchart) ในแบบตามลำดับได้ตามภาพ START Process1 Process2 Process3 STOP แสดงการเขียนโปรแกรมเชิงกระบวนการแบบลำดับ 04/04/62

17 การเขียนโปรแกรมเชิงกระบวนการ
START การทำงานแบบตามลำดับ (Sequence) ทำงานตามลำดับ ทำงานจากบนลงล่าง (จุดเริ่มต้นถึงสิ้นสุด) มีจุดเริ่มต้นจุดเดียว – จุดสิ้นสุดจุดเดียว Process1 Process2 Process3 STOP 04/04/62

18 การเขียนโปรแกรมเชิงกระบวนการ
2. การเลือกกระทำตามเงื่อนไข (Decision) : การตัดสินใจ หรือเลือกเงื่อนไขคือ เขียนโปรแกรมเพื่อนำค่าไปเลือกกระทำ โดยปกติจะมีเหตุการณ์ให้ทำ 2 กระบวนการ คือ เงื่อนไขเป็นจริงจะกระทำกระบวนการหนึ่ง และเป็นเท็จจะกระทำอีกกระบวนการหนึ่ง แต่ถ้าซับซ้อนมากขึ้น จะต้องใช้เงื่อนไขหลายชั้น เช่นการตัดเกรดนักศึกษา เป็นต้น ตัวอย่างผังงานนี้ จะแสดงผลการเลือกอย่างง่าย เพื่อกระทำกระบวนการเพียงกระบวนการเดียว Yes No Decision Process Process แสดงการเขียนโปรแกรมเชิงกระบวนการแบบเงื่อนไข 04/04/62

19 ตัวอย่าง โปรแกรมประมวลผลการเรียน
เงื่อนไข คะแนนสอบตั้งแต่ 80 คะแนนขึ้นไป ได้เกรด A คะแนนสอบ คะแนนขึ้นไป ได้เกรด B คะแนนสอบ คะแนนขึ้นไป ได้เกรด C คะแนนสอบ คะแนนขึ้นไป ได้เกรด D คะแนนสอบต่ำกว่า 50 คะแนน ได้เกรด F 04/04/62

20 ตัวอย่าง START Read Score N Y Write Grade STOP Score>=80
Grade = ‘A’ Grade = ‘F’ Score>=70 Grade = ‘B’ Score>=60 Grade = ‘C’ Score>=50 Grade = ‘D’ N Write Grade STOP 04/04/62

21 หรือ 04/04/62

22 ตัวอย่าง อัลกอริธึม รหัสเทียม (Pseudo Code) เริ่มต้นทำงาน
รับค่า คะแนนสอบ (Score) เปรียบเทียบคะแนนสอบ>=80 ถ้าเป็นจริง ให้ทำนิพจน์ Grade=‘A’ ถ้าเป็นเท็จ ให้เปรียบเทียบคะแนนสอบ >=70 ถ้าเป็นจริง ให้ทำนิพจน์ Grade=‘B’ ถ้าเป็นเท็จ ให้เปรียบเทียบคะแนนสอบ >=60 ถ้าเป็นจริง ให้ทำนิพจน์ Grade=‘C’ ถ้าเป็นเท็จ ให้เปรียบเทียบคะแนนสอบ >=50 ถ้าเป็นจริง ให้ทำนิพจน์ Grade=‘D’ ถ้าเป็นเท็จ ให้ให้ทำนิพจน์ Grade=‘F’ แสดงผล เกรด (Grade) จบการทำงาน รหัสเทียม (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 04/04/62

23 การเขียนโปรแกรมเชิงกระบวนการ
3. การทำซ้ำ (Repetition or Loop) : การทำกระบวนการหนึ่งหลายครั้ง โดยมีเงื่อนไขในการควบคุม หมายถึงการทำซ้ำเป็นหลักการที่ทำความเข้าใจได้ยากกว่า 2 รูปแบบแรก เพราะการเขียนโปรแกรมแต่ละภาษา จะไม่แสดงภาพอย่างชัดเจนเหมือนการเขียนผังงาน (Flowchart) ผู้เขียนโปรแกรมต้องจินตนาการ ถึงรูปแบบการทำงาน และใช้คำสั่งควบคุมด้วยตนเอง ตัวอย่างผังงานที่นำมาแสดงนี้เป็นการแสดงคำสั่ง ทำซ้ำ (do while) ซึ่งหมายถึงการทำซ้ำในขณะที่เป็นจริง และเลิกการทำซ้ำ เมื่อเงื่อนไขเป็นเท็จ Process Yes Decision No แสดงการเขียนโปรแกรมเชิงกระบวนการแบบลำดับ 04/04/62

24 การเขียนโปรแกรมเชิงกระบวนการ
ยกตัวอย่าง เช่น โปรแกรมตู้ขายเครื่องดื่มอัตโนมัติ วิธีการคิดแบบการเขียนโปรแกรมเชิงกระบวนการ เมื่อมีการหยอดเหรียญเข้าตู้: 1. ตรวจสอบจำนวนเหรียญและชนิดของเหรียญ 2. แสดงผลชนิดของน้ำที่สามารถเลือกซื้อได้ 3. ตรวจสอบจำนวนน้ำกระป๋องที่มีอยู่ในตู้ 4. รับผลการเลือกชนิดน้ำ 5. ส่งน้ำที่เลือกออกมาจากช่อง 6. จัดเก็บเงินเข้าระบบ 7. หากมีเงินทอน ให้ทอนเงินที่เหลือ ที่ช่องรับเงินทอน 04/04/62

25 ข้อเสียการเขียนโปรแกรมเชิงกระบวนการ
แนวคิดนี้มีข้อเสียอย่างไร? ขนาดของโปรแกรมใหญ่ขึ้น จะทำให้มีความซับซ้อนในแง่ของ การเขียนโปรแกรม ปัญหาในเรื่องของการนำกับมาใช้ใหม่ (Reusable) การแก้ไข (Modify) การขยายเพื่อเพิ่มประสิทธิภาพให้กับโปรแกรม 04/04/62

26 การเขียนโปรแกรมเชิงวัตถุ
การเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming, OOP) คือหนึ่งในรูปแบบการเขียนโปรแกรมคอมพิวเตอร์ ที่ให้ความสำคัญกับ วัตถุ ซึ่งสามารถนำมาประกอบกันและนำมาทำงานรวมกันได้ โดยการแลกเปลี่ยนข่าวสาร เพื่อนำมาประมวลผลและส่งข่าวสารที่ได้ไปให้วัตถุอื่นๆ ที่เกี่ยวข้องเพื่อให้ทำงานต่อไป 04/04/62

27 การเขียนโปรแกรมเชิงวัตถุ
การเขียนโปรแกรมเชิงวัตถุ Data จะถูกประกาศใช้เฉพาะภายใน Object เท่านั้น การที่ OOP จัด Data ไว้ในแต่ละ Object นั้น เป็นการปกป้องข้อมูลภายใน Object ลดปัญหาการเปลี่ยนแปลงข้อมูลภายใน Object โดยไม่ได้รับอนุญาต Object 1 Data Object 2 Data 04/04/62

28 การเขียนโปรแกรมเชิงวัตถุ
โปรแกรมตู้ขายเครื่องดื่มอัตโนมัติ วิธีการคิดแบบการเขียนโปรแกรมเชิงวัตถุ ตู้ขายเครื่องดื่มอัตโนมัติ ประกอบด้วยส่วนประกอบต่างๆได้แก่ หน่วยตรวจสอบและจัดการเรื่องเงิน หน่วยจัดการเครื่องดื่ม หน่วยแสดงผลและรอรับคำสั่ง 1. หน่วยตรวจสอบและจัดการเรื่องเงิน มีข้อมูลเกี่ยวกับเงินที่ได้รับ และเงินที่มีอยู่ในระบบสามารถรับและตรวจสอบเงินที่หยอดเข้ามาได้ และทอนเงินได้ 2. หน่วยจัดการเครื่องดื่ม มีข้อมูลชนิดของเครื่องดื่ม จำนวนเครื่องดื่ม สามารถจัดเตรียมชนิดเครื่องดื่มที่พอกับเงินที่หยอด และสามารถจ่ายเครื่องดื่มออกมาจากตู้ได้ 3. หน่วยแสดงผลและรอรับคำสั่ง มีหน้าที่รอรับคำสั่ง และแสดงผลเงินที่หยอดเข้ามา 04/04/62

29 ข้อดีของการพัฒนาโปรแกรมเชิงวัตถุ
แนวคิดการวิเคราะห์ปัญหาใกล้เคียงกับธรรมชาติของมนุษย์ ระบบจริง (real life) แบ่งตามออปเจ็ค ไม่ได้ขึ้นอยู่กับฟังก์ชันการทำงาน ขบวนการพัฒนาโปรแกรมทำได้รวดเร็วขึ้น ง่ายต่อการพัฒนาและแก้ไข นำโปรแกรมกลับมาใช้ใหม่ได้ง่าย 04/04/62

30 เปรียบเทียบแนวคิดระหว่างการเขียนโปรแกรมเชิงกระบวนการ และเชิงวัตถุ
เปรียบเทียบแนวคิดระหว่างการเขียนโปรแกรมเชิงกระบวนการ และเชิงวัตถุ แนวคิดการเขียนโปรแกรมแบบดั้งเดิมมักนิยมใช้ การเขียนโปรแกรมเชิงกระบวนการ(Procedural Programming) ซึ่งให้ความสำคัญกับขั้นตอนกระบวนการที่ทำ โดยแบ่งโปรแกรมออกเป็นส่วนๆตามลำดับขั้นตอนการทำงาน แต่แนวคิดการเขียนโปรแกรมเชิงวัตถุนั้นให้ความสำคัญกับข้อมูล (data) และ พฤติกรรม (behavior) ของวัตถุ และความสัมพันธ์กันระหว่างวัตถุกันมากกว่า 04/04/62

31 หลักการของโปรแกรมเชิงวัตถุ
โปรแกรมเชิงวัตถุจะแบ่งการทำงานของโปรแกรมเป็นวัตถุ การปรับปรุงหรือแก้ไขโปรแกรมเชิงวัตถุทำได้ง่ายกว่า จึงเหมาะกับการพัฒนาโปรแกรมขนาดใหญ่ที่จะต้องมีการปรับปรุงแก้ไขโปรแกรมอยู่ตลอด 04/04/62

32 วัตถุ (object) สิ่งไม่มีชีวิต เช่น รูปสี่เหลี่ยม โทรทัศน์ หรือบ้าน
โปรแกรมพจนานุกรมฉบับราชบัณฑิตยสถาน พ.ศ. ๒๕๒๕ นิยามคำว่า “วัตถุ” ว่าหมายถึงสิ่งของ และนิยามคำว่า “สิ่งของ” ว่าหมายถึงวัตถุต่างๆ ในโปรแกรมจะจำลองลักษณะและความสามารถของวัตถุต่างๆ ที่อยู่ในโลกจริง สิ่งไม่มีชีวิต เช่น รูปสี่เหลี่ยม โทรทัศน์ หรือบ้าน สิ่งมีชีวิต เช่น พนักงาน นก หรือต้นไม้ สิ่งที่เป็นนามธรรม เช่น แนวความคิด หลักการ หรือวิธีการ 04/04/62

33 คลาส (Class) คลาสเป็นเหมือนส่วนของแม่พิมพ์ เพื่อบอกลักษณะว่าวัตถุในคลาสนี้มีลักษณะและพฤติกรรมเป็นอย่างไร ส่วนประกอบของคลาส แอททริบิวท์(Attribute) หรือข้อมูล (Data) เป็นสิ่งที่ใช้บอกถึงลักษณะต่างๆของวัตถุในคลาส เมธอด(Method) หรือพฤติกรรม (Behavior) เป็นสิ่งที่ใช้อธิบายการทำงานของวัตถุในคลาส 04/04/62

34 ตัวอย่างของคลาส นักศึกษา อาจจะประกอบไปด้วยคุณลักษณะเช่น รหัส ชื่อ และเกรดเฉลี่ย และอาจจะมีเมธอดเช่น ลงทะเบียน สอบ และเดิน รถยนต์ อาจจะประกอบไปด้วยคุณลักษณะเช่น ยี่ห้อ รุ่น และสี และอาจจะมีเมธอดเช่น เคลื่อนที่ หยุดและเลี้ยว สุนัข อาจจะประกอบไปด้วยคุณลักษณะเช่น ชื่อ พันธุ์ และสี และอาจจะมีเมธอดเช่น เห่า คลาน และกระดิกหาง 04/04/62

35 คลาส (Class) คลาสหนึ่งคลาสสามารถสร้างออปเจ็คได้หลายออปเจ็ค อาทิเช่น คลาส Student อาจสร้างออปเจ็ค s1,s2 หรือ s3 ซึ่งเป็นออปเจ็คของคลาส Student 04/04/62

36 ตัวอย่างของออปเจ็คและคลาส
04/04/62

37 คุณสมบัติของโปรแกรมเชิงวัตถุ
1. การห่อหุ้ม (Encapsulation) - ซ่อนวิธีการทำงาน (Information Hiding) 2. การสืบทอด (Inheritance) 3. การพ้องรูป (Polymorphism) 04/04/62

38 แฟ้มเอกสารนี้เป็น private (แฟ้มส่วนบุคคล)
การห่อหุ้ม (Encapsulation) การห่อหุ้ม (Encapsulation) เป็นการซ่อนรายละเอียดการทำงานและข้อมูลไว้ภายใน ไม่ให้ภายนอกสามารถเห็นได้ อาจเป็นเพราะแฟ้มเอกสารถูก Encapsulation (ซ่อนอยู่หลังกำแพง) อยู่ครับ จะมีแต่เฉพาะบุคคลภายในบริษัท C มองเห็นแฟ้มเอกสารนี้ได้ ตัวผมก็มองไม่เห็นเช่นกัน เพราะผมเองก็เป็นบุคคลภายนอกเช่นกัน ดิฉันสมหญิงจากบริษัท A ทำไมดิฉันจึงมองไม่เห็นแฟ้มเอกสารเหมือนอย่างที่คุณสมศรีบริษัท C มองเห็นคะ ดิฉันชื่อสมศรีเป็นบุคคลภายในของบริษัท C ฉันจึงเห็นแฟ้มเอกสารเหล่านี้และมีสิทธิ์เข้ามาจัดการได้ค่ะ แฟ้มเอกสารนี้เป็น private (แฟ้มส่วนบุคคล) 04/04/62

39 แฟ้มเอกสารนี้เป็น public (แฟ้มสาธารณะ)
การห่อหุ้ม (Encapsulation) ใช่แล้วครับ โชคดีมาก เพราะจะทำให้เราสามารถเข้าไปดูข้อมูลในแฟ้มเอกสารนี้ได้ และนอกจาก เราจะดูข้อมูลได้แล้ว ยังสามารถแก้ไขข้อมูลได้ด้วย เป็นโอกาสของเราที่จะล้วงความลับและสร้างความเสียหายให้กับบริษัท C ซึ่งเป็นคู่แข่งของเราได้ ดีจังเลยนะคะที่บริษัท C ไม่ได้ทำการ encapsulate ซ่อนแฟ้มเอกสารนี้ไว้ ทำให้เราสามารถมองเห็นแฟ้มเอกสารนี้ได้ แย่แล้ว บุคคลภายนอกบริษัทดิฉันสามารถมองเห็นแฟ้มเอกสารนี้ได้ ข้อมูลของบริษัทต้องได้รับความเสียหายแน่นอนเลยค่ะ แฟ้มเอกสารนี้เป็น public (แฟ้มสาธารณะ) 04/04/62

40 ซ่อนวิธีการทำงาน (Information Hiding)
ซ่อนวิธีการทำงานของวัตถุ เพื่อป้องกันการเข้ามาใช้ข้อมูลของวัตถุโดยสิ่งอื่นที่ไม่เกี่ยวข้องแล้วทำให้เกิดการผิดเพี้ยนของการทำงานทั้งระบบ ทำให้เกิดความยืดหยุ่น ผู้สร้างวัตถุสามารถเปลี่ยนแปลงวิธีการทำงานของวัตถุได้โดยไม่กระทบต่อผู้ใช้วัตถุ เพื่อให้เกิดความปลอดภัยของวัตถุและระบบโดยรวมให้มากที่สุด 04/04/62

41 การสืบทอด (Inheritance)
ข้อดี สามารถนำสิ่งที่เคยสร้างขึ้นแล้วนำกลับมาใช้ใหม่ (re-use) ได้ ประหยัดเวลา 04/04/62

42 การสืบทอด (Inheritance)
ผมนาย ก. เป็นพนักงานคนหนึ่งครับ (Employee) คุณสมบัติผมประกอบด้วยรหัสพนักงานและตำแหน่ง ใครเป็นพนักงานเหมือนกัน เชิญสืบทอดคุณสมบัติของผมไปใช้งานได้เลยครับ ผมนาย ข. เป็นผู้จัดการครับ (Manager) ผมก็เป็นพนักงานคนหนึ่ง ดังนั้นจึงทำการสืบทอดคุณสมบัติมาจากนาย ก. ทำให้มีคุณสมบัติประกอบด้วยรหัสพนักงาน และตำแหน่ง แต่ในฐานะที่ผมเป็นผู้จัดการ ผมได้รับรถประจำตำแหน่งด้วย ดังนั้นผมจึงต้องสร้างคุณสมบัติขึ้นมาอีก 1 ข้อ inherit รหัสพนักงาน ตำแหน่ง รหัสพนักงาน ตำแหน่ง รถประจำตำแหน่ง 04/04/62

43 Polymorphism (การพ้องรูป)
เป็นคุณสมบัติที่ชนิดของวัตถุที่เกิดจากชนิดของวัตถุแม่เดียวกัน สามารถมีความสามารถเหมือนแม่แต่มีวิธีการดำเนินงานไม่เหมือนกัน คือมีลักษณะเฉพาะตัว เช่น สัตว์มีปีก::บิน() นก::บิน() กระพือปีกขึ้นลง แมลงปอ::บิน() กางปีกรับลม ผึ้ง::บิน() กระพือปีกถี่เร็ว 04/04/62

44 Polymorphism (การพ้องรูป)
ตัวอย่างเช่น public void calculate (int x) {} public void calculate (double x) {} เมธอดชื่อ calculate เหมือนกัน แต่มีการรับค่าเข้ามาภายใน เมธอดที่แตกต่างกัน เมธอดชื่อเดียวกันสามารถรับอาร์กิวเมนต์ที่แตกต่างกันได้หลายรูปแบบนี้ เรียกว่าเมธอดนั้นถูกโอเวอร์โหลด (overload) 04/04/62

45 Polymorphism (การพ้องรูป) สรุป
ถ้าเป็นลูกค้าขาจร ผมจะใช้เมธอด public void calculate(double y) ในการคำนวณราคาครับ ไม่ได้ซื้อประจำลดให้ไม่ได้ครับ เศษเล็กเศษน้อยต้องคิด แต่ถ้าเป็นลูกค้าประจำ ผมจะใช้เมธอด public void calculate(int x) ในการคำนวณราคาครับ เศษเล็ก ๆ น้อย ๆ ไม่คิดครับ 04/04/62

46 ประวัติของภาษาจาวา 04/04/62

47 ประวัติของภาษาจาวา เริ่มต้นขึ้นใน ปี ค.ศ. 1990
แพททริก นอทัน (Pattrick Naughton) เขียนข้อผิดพลาดที่เกิดขึ้นในบริษัท ซันไมโครซิสเต็มส์ เจมส์ กอสลิ่ง (James Gosling) ผู้ให้กำเนิดภาษาจาวา 04/04/62

48 ประวัติของภาษาจาวา กรีนทีม (Green Project) วัตถุประสงค์คือการสร้างคอมพิวเตอร์รุ่นใหม่ ยุคถัดจากคอมพิวเตอร์ส่วนบุคคล (personal computer) ก็คือคอมพิวเตอร์ในอุปกรณ์อิเล็กโทรนิกส์ (consumer electronics) 04/04/62

49 ประวัติของภาษาจาวา - รีโมตคอนโทรลควบคุมอุปกรณ์อิเล็กทรอนิกส์ มีชื่อว่า “สตาร์เซเว่น” (*7) - ภาษาที่ใช้ควบคุมอุปกรณ์อิเล็กทรอนิกส์คือ “ภาษาโอ๊ค” (Oak) ดุ๊ค 04/04/62

50 ประวัติของภาษาจาวา Gosling ได้รับมอบหมายให้สร้างภาษาใหม่ สำหรับติดตั้งให้กับอุปกรณ์ โดยภาษาที่สร้างขึ้นต้องเป็นภาษาที่มีขนาดเล็ก  อุปกรณ์ไม่ใช้หน่วยประมวลผลที่สูง สิ่งสำคัญ  ภาษาที่สร้างขึ้นจะต้องเป็นภาษาที่ไม่ยึดติดกับอุปกรณ์ฮาร์ดแวร์ (Platform-independent) Gosling ได้ประดิษฐ์ ภาษาโอ๊ค แทนภาษา C++ เพื่อใช้ในโปรแกรมอุปกรณ์อิเล็กทรอนิกส์ 04/04/62

51 ประวัติของภาษาจาวา เปลี่ยนชื่อจาก “Oak” เป็น “JAVA”
มาร์ค แอนดรีสเซน ออกแบบ Mosaic ซึ่งเป็นโปรแกรมเว็บเบราเซอร์ บิล จอย (Bill Joy) แจกจ่ายตัวพัฒนาภาษา นอทันพัฒนาเว็บเบราเซอร์ที่สนับสนุนภาษาจาวา โปรแกรมดังกล่าวมีชื่อว่า HotJava Netscape Navigator 23 มกราคม ค.ศ ซันได้ออก JDK 1.0 04/04/62

52 ข้อดีของภาษาจาวา 04/04/62

53 ข้อดีของภาษาจาวา ทำงานบนเว็บเบราเซอร์ได้ ความปลอดภัยสูง
สนับสนุนงานหลายระดับ 04/04/62

54 ข้อดีของภาษาจาวา สามารถทำงานบนเครื่องคอมพิวเตอร์ต่างระบบได้
ภาษาจาวาเป็นภาษาเชิงวัตถุ ความเรียบง่าย ไวยากรณ์ของภาษาจาวาถูกออกแบบมาเป็นอย่างดี ทำให้เข้าใจง่าย ระบบจัดการคืนพื้นที่ในหน่วยความจำอัตโนมัติ (Automatic Garbage Collection) 04/04/62

55 ข้อดีของภาษาจาวา มีคลาสจำนวนมากมายให้ใช้
ในจาวาแพล็ตฟอร์มมาตรฐาน J2SE รุ่น 5.0 มีคลาสและอินเทอร์เฟซ 3,279 ฟรี เครื่องมือในการพัฒนา,ตัวแปลภาษา,โปรแกรมเครื่องจักรเสมือน ฯลฯ 04/04/62

56 จาวาแพลตฟอร์ม 04/04/62

57 แพลตฟอร์ม (platform) ระบบที่โปรแกรมอาศัยทำงาน Hardware Software
Ex. แพล็ตฟอร์ม Wintel ซีพียูของอินเทล และระบบปฏิบัติการไมโครซอฟท์วินโดวส์ 04/04/62

58 แพลตฟอร์ม (platform) จาวาแพล็ตฟอร์ม เป็นซอฟแวร์ ซึ่งประกอบด้วย
ตัวแปลภาษา โปรแกรมเครื่องจักรเสมือนจาวา คลาส (แกนหลักของภาษาจาวา) 04/04/62

59 จาวามี 3 แพลตฟอร์ม 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 04/04/62

60 การคอมไพล์และรันโปรแกรมภาษาจาวา
04/04/62

61 องค์ประกอบของระบบคอมพิวเตอร์
4/4/2019 องค์ประกอบของระบบคอมพิวเตอร์ ฮาร์ดแวร์ (Hardware) ส่วนประกอบที่เป็นตัวเครื่องคอมพิวเตอร์ ระบบปฏิบัติการ (Operating System) Windows 7, Linux และ Solaris โปรแกรมประยุกต์ (Application Programs) โปรแกรมทั่วๆไป อาทิเช่น Word processor เกม บราวเซอร์ (Browser) พัฒนาโดยใช้ภาษาคอมพิวเตอร์ต่างๆ เช่น ฟอร์แทน (FORTRAN) โคบอล (COBOL) C++ หรือ JAVA 04/04/62

62 ภาษาคอมพิวเตอร์ ภาษาเครื่อง (Machine Language)
ภาษาแอสเซมบลี้ (Assembly Language) ADD R1,R2 ภาษาคอมพิวเตอร์ระดับสูง x = c1+c2 04/04/62

63 ภาษาคอมพิวเตอร์ระดับสูง
ภาษายุคแรก ฟอร์แทรน โคบอล เบสิก (BASIC) ภาษาเชิงกระบวนการ (Procedural Language) ปาสคาล (Pascal) ซี (C) ภาษาเชิงออปเจ็ค (Object Oriented Programming) C++ Smalltalk JAVA 04/04/62

64 ตัวแปลภาษา ภาษาระดับสูงจะต้องใช้ตัวแปลภาษา (Language Translator) เพื่อเปลี่ยนซอร์ดโค้ด (Source Code) ให้เป็นคำสั่งที่คอมพิวเตอร์สามารถเข้าใจได้ วิธีแปลภาษามีอยู่สองแบบ คอมไพเลอร์ (Compiler) อินเตอร์พรีตเตอร์ (Interpreter) 04/04/62

65 คอมไพเลอร์ ทำหน้าที่แปลซอร์ดโค้ดทั้งโปรแกรมให้เป็นโค้ดที่สามารถทำงานได้ (executable code) โปรแกรม executable code จะสามารถถูกนำไปใช้งานได้ทันที ตัวอย่างของภาษาที่ใช้คอมไพเลอร์คือ ฟอร์แทรน ปาสคาล และ C++ 04/04/62

66 ขั้นตอนการทำงานของคอมไพเลอร์
04/04/62

67 ข้อดีและข้อเสียของคอมไพเลอร์
ทำงานได้เร็ว ตรวจสอบข้อผิดพลาดของโปรแกรมซอร์ดโค้ดในขั้นตอนของการคอมไพล์ ข้อเสีย ต้องนำโปรแกรมซอร์ดโค้ดมาแปลใหม่เมื่อเปลี่ยนระบบปฏิบัติการ เนื่องจากคอมไพเลอร์เป็นตัวแปลภาษาที่ขึ้นอยู่กับแพลตฟอร์ม (Platform Specific) 04/04/62

68 อินเตอร์พรีตเตอร์ แปลโปรแกรมซอร์ดโค้ดทีละบรรทัดให้เป็น executable code และทำงานทันที มีข้อดีคือ อินเตอร์พรีตเตอร์ถูกสร้างขึ้นได้ง่ายกว่าและมีขนาดเล็ก ทำให้ภาษาที่ใช้อินเตอร์พรีตเตอร์สามารถทำงานข้ามแพลตฟอร์มได้ มีข้อเสียคือ ทำงานได้ช้ากว่าคอมไพเลอร์ ตัวอย่างของภาษาที่ใช้อินเตอร์พรีตเตอร์คือ เบสิก โปรล็อก(Prolog) และ Smalltalk 04/04/62

69 ขั้นตอนการทำงานของอินเตอร์พรีตเตอร์
04/04/62

70 ก่อนทีเราจะเขียนโปรแกรมด้วย Java ต้องมีอะไรบ้าง
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 แล้ว 04/04/62

71 องค์ประกอบของ JDK JDK JRE JVM
04/04/62

72 ชุดพัฒนาภาษาจาวา (JDK)
ชุดพัฒนาภาษาจาวา (Java Development Kit - JDK) ประกอบด้วย 1. จาวาคอมไพเลอร์ (javac.exe) ซอร์สโค้ด (ไฟล์ .java) คอมไพเลอร์ (โปรแกรม javac) Byte code (ไฟล์ .class) 04/04/62

73 ชุดพัฒนาภาษาจาวา (JDK)
2. สภาพแวดล้อมการรันโปรแกรมจาวา (Java Runtime Environment - JRE) (java.exe) Download Byte code (ไฟล์ .class) สภาพแวดล้อมสำหรับรันโปรแกรมจาวา(โปรแกรม java) ผลการทำงาน 04/04/62

74 ขั้นตอนการพัฒนาโปรแกรมภาษาจาวา
04/04/62

75 ขั้นตอนการพัฒนาโปรแกรมภาษาจาวา
04/04/62

76 Java Development Kit (JDK)
JDK เป็นส่วนประกอบหนึ่งของ JAVA SE เหมาะสำหรับผู้พัฒนาโปรแกรม หรือโปรแกรมเมอร์ดาวน์โหลดไปใช้งาน JDK ประกอบด้วย คอมไพเลอร์สำหรับคอมไพล์โปรแกรม ดีบักเกอร์สำหรับดีบักโปรแกรมเพื่อค้นหาและแก้ไขส่วนผิดพลาดของโปรแกรม JDK ประกอบด้วย JRE 04/04/62

77 Java Runtime Environment (JRE)
JRE ประกอบด้วย JVM, ไลบรารีต่าง ๆ และคอมโพเน้นท์ 04/04/62

78 Java Virtual Machine (JVM)
หน้าที่ของ JVM คือ จำลองคอมพิวเตอร์เสมือน (Virtual machine) ขึ้นบนเครื่องคอมพิวเตอร์ คอมพิวเตอร์เสมือนจะทำหน้าที่ในการแปลไบต์โค้ด (bytecode) ไปเป็นภาษาเครื่องที่เหมาะสมกับแพลตฟอร์มจริง ๆ ของแต่ละเครื่อง โปรแกรมภาษาจาวาจะคอมไพล์ได้ไบท์โค้ด โดย JVM จะเป็นอินเตอร์พรีตเตอร์ที่แปลไบท์โค้ดให้เป็นคำสั่งที่ภาษาเครื่องเข้าใจ จาวาไบท์โค้ดสามารถจะรันข้ามแพลตฟอร์ม (platform) ได้ ถ้าแพลตฟอร์มนั้นมี JVM อยู่ JVM เป็นโปรแกรมที่ขึ้นอยู่กับแพลตฟอร์ม (platform specific) JVM อาจพัฒนาเป็นโปรแกรมซอฟต์แวร์หรือฮาร์ดแวร์ได้ 04/04/62

79 เตรียมความพร้อม/ติดตั้งโปรแกรม
1. ติดตั้ง JDK 2. กำหนดที่อยู่ของไฟล์ต่าง ๆ (path) ที่จำเป็นสำหรับการ compile ภายในเครื่องเพื่อให้การcompile และ execute โปรแกรมเป็นไปได้ – ถ้าเราไม่กำหนด path เครื่องของเราจะไม่รู้จักคำสั่งต่าง ๆ ที่ Java ใช้ ให้กำหนดที่อยู่ 04/04/62

80 เตรียมความพร้อม/ติดตั้งโปรแกรม
หลังจากที่ได้ติดตั้ง JDK พร้อมทั้งไฟล์อื่นๆ แล้วหน้าตาของ directory ของ Java ก็จะมี folder ต่างๆ คล้ายๆ กับที่เห็นนี้ 04/04/62

81 การกำหนด path กดปุ่มขวาของ mouse บน icon My Computer (หรือ ไปที่ปุ่ม start ที่มุมล่างซ้ายของจอแล้วเลือก My Computer) แล้วเลือก Properties กดปุ่ม advanced บน System Properties กดปุ่ม Environment Variables 04/04/62

82 การกำหนด path ใน System Variables เลือกข้อความที่ขึ้นต้นด้วยคำว่า Path
เมื่อกดปุ่ม Edit ก็จะได้หน้าจอดังที่เห็น เติม ; (semicolon) ถ้ายังไม่มี แล้วจึงใส่ path ที่ได้ install JDK ไว้ เสร็จแล้วกดปุ่ม OK เพื่อให้ระบบบันทึกการเปลี่ยนแปลงที่ได้ทำขึ้น 04/04/62

83 โปรแกรมที่ใช้เขียนต้นฉบับโปรแกรม
Notepad มาพร้อมกับ Windows J-Lab Netbeans Eclipse 04/04/62

84 Notepad 04/04/62

85 J-Lab 04/04/62

86 Netbeans 04/04/62

87 Eclipse 04/04/62

88 โปรแกรม HelloWorld ในแบบตัวอักษร และแบบกราฟิก
04/04/62

89 โปรแกรม HelloWorld พิมพ์คำว่า Hello, World! ขึ้นบนหน้าจอคอมพิวเตอร์
04/04/62

90 การเปิดโปรแกรม cmd 2 1 3 04/04/62

91 คอมไพล์โปรแกรม 04/04/62

92 โปรแกรม HelloWorld public class HelloWorld { } 04/04/62

93 โปรแกรม HelloWorld public class HelloWorld {
public static void main(String[] args) } 04/04/62

94 โปรแกรม HelloWorld public class HelloWorld {
public static void main(String[] args) System.out.println("Hello, World!"); } 04/04/62

95 โปรแกรม HelloWorld แบบกราฟิก
04/04/62

96 โปรแกรม HelloWorld แบบกราฟิก
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); 04/04/62

97 คำอธิบายในโปรแกรม คอมเมนต์บรรทัดเดียว คอมเมนต์ที่เป็นย่อหน้า
// print the word hello คอมเมนต์ที่เป็นย่อหน้า /* This program will print the word hello */ 04/04/62

98 คอมเมนต์ที่เป็นย่อหน้าสำหรับการสร้างเอกสารด้วยโปรแกรม javadoc /** */
คำอธิบายในโปรแกรม คอมเมนต์ที่เป็นย่อหน้าสำหรับการสร้างเอกสารด้วยโปรแกรม javadoc /** */ 04/04/62

99 การเซตค่าโปรแกรม Edit Plus
เลือกที่ Menu tool > Preferences เลือก User tools เลือกที่ Group Name ตั้งชื่อ Java จากนั้นกด OK เลือกที่ Add Tool -> Program 04/04/62

100 การเซตค่าโปรแกรม Edit Plus
ตั้งชื่อ Java Compile กดปุ่ม Browse ไปที่ติดตั้งโปรแกรม j2sdk แล้วเข้าไปที่ bin เลือก javac.exe ดังรูป ที่ Argument เลือกที่ Flie Name เมื่อเซตได้ตามรูปแล้วกด OK 04/04/62

101 การเซตค่าโปรแกรม Edit Plus
กลับไปทำขั้นตอนเดิมที่ Add Tool ตั้งชื่อ Java Run เลือกไฟล์ java.exe ใน bin และ Argument ให้เลือก File Name Without Extension จากนั้นก็กด OK 04/04/62

102 สรุป 04/04/62

103 สรุป โปรแกรมในจาวาแพลตฟอร์มมาตรฐานมีอยู่สองประเภทคือ แอพพลิเคชัน และ แอพเพลท จาวาแอพพลิเคชันสามารถทำงานได้เหมือนกับโปรแกรมทั่วไป มันสามารถทำงานบนคอมพิวเตอร์ต่างรุ่นต่างระบบปฏิบัติการได้ เพราะว่ามันทำงานอยู่บนโปรแกรมเครื่องจักรเสมือน จาวาแอพเพลตสามารถทำงานบนเว็บเพจได้ มันสามารถทำงานบนคอมพิวเตอร์ต่างรุ่นต่างระบบปฏิบัติการได้ ขอเพียงแค่มีโปรแกรม เว็บเบราเซอร์ที่สนับสนุนภาษาจาวาติดตั้งอยู่บนระบบปฏิบัติการนั้น 04/04/62

104 สรุป ซอร์สโค้ดโปรแกรมจาวาอยู่ในแฟ้มที่มีนามสกุล .java
โปรแกรมที่ใช้คอมไพล์ภาษาจาวาชื่อ javac ผลการคอมไพล์จะได้แฟ้มที่มีนามสกุล .class ไฟล์นามสกุล class สามารถทำงานใน JRE ได้ ใช้โปรแกรม java รันไฟล์ .class ที่มีเมธอด main() การพิมพ์ข้อความใช้คำสั่ง System.out.println("ข้อความที่ต้องการพิมพ์") 04/04/62

105 04/04/62

106 แบบทดสอบ วิชา 4121306A การเขียนโปรแกรมเชิงวัตถุ
จงพิจารณาว่าประโยคนี้ถูกหรือผิด ทุกครั้งที่ติดตั้ง JRE จะได้ JDK ติดตั้งมาพร้อมกันด้วยเสมอ JVM ไม่ได้เป็นส่วนประกอบหนึ่งที่อยู่ใน JRE JDK ประกอบด้วย JRE, คอมไพเลอร์ และดีบักเกอร์ หากติดตั้ง JDK ลงที่เครื่อง ก็จะสามารถเรียกรันจาวาแอพเพลตได้เช่นเดียวกับการติดตั้ง JRE ลงที่เครื่อง โปรแกรมภาษาจาวาไม่เป็น Platfom-independent เมื่อ compile โปรแกรมแล้วจะได้เป็น bytecode ซึ่งเป็นไฟล์ที่มีนามสกุล .javac bytecode จะยึดติดกับ platform 04/04/62

107 แบบทดสอบ วิชา 4121306A การเขียนโปรแกรมเชิงวัตถุ
1. JAVA platform แบ่งออกเป็นกี่ประเภท อะไรบ้าง จงอธิบาย 2. JRE คืออะไร ประกอบด้วยอะไรบ้าง 3. JDK คืออะไร ประกอบด้วยอะไรบ้าง 4. ถ้าเป็นโปรแกรมเมอร์มีหน้าที่เขียนโปรแกรมภาษาจาวาให้กับบริษัท ควรเลือกดาวน์โหลด JDK หรือ JRE มาใช้งาน เพราะเหตุใด 5. ถ้าบุคคลทั่วไปที่ไม่ใช่โปรแกรมเมอร์ เป็นบุคคลที่ใช้เว็บทั่วไป โดยที่เว็บที่สนใจส่วนใหญ่ล้วนมีจาวาแอพเพลตรันอยู่ทั้งสิ้น เธอควรเลือกดาวน์โหลด JDK หรือ JRE มาใช้งาน เพราะเหตุใด 6. JVM คืออะไร จงอธิบาย 7. เพราะเหตุใดจึงไม่ต้องแยกเขียนโปรแกรมภาษาจาวาสำหรับแพลตฟอร์มแต่ละแพลตฟอร์ม แต่สามารถเขียนโปรแกรมภาษาจาวาเพียงแค่ครั้งเดียว แล้วนำไปรันได้บนทุกแพลตฟอร์ม 8. จงอธิบายคุณสมบัติของโปรแกรมเชิงวัตถุ ประกอบด้วยอะไรบ้าง อธิบายอย่างละเอียด พร้อมยกตัวอย่าง 9. จงอธิบายข้อดีของ JAVA 04/04/62


ดาวน์โหลด ppt การเขียนโปรแกรมเชิงวัตถุ Object Oriented Programming

งานนำเสนอที่คล้ายกัน


Ads by Google