Mr.Vuttichai Vicheanchai (Onizuka)
[email protected]
วัตถุประสงค์ เพื่อให้ความหมายของการพัฒนาเชิงวัตถุ เพื่อให้ทาราบถึงข้อดีของการพัฒนาเชิงวัตถุ เพื่อให้เข้าถึงองค์ประกอบและลักษณะของออบเจ็ค เพื่อให้รู้จักมองสิ่งต่างๆให้เป็นออบเจ็คต์
หนูเป็น class ที่สบื ทอดมาจาก class เสือดาว กับ class คน อิอิ...
การออกแบบและเขียนโปรแกรมเชิงวัตถุ เป็นวิธีในการพัฒนาและจัดระเบียบการเขียนโปรแกรมอีกรูปแบบหนึง่ ที่มอง องค์ประกอบต่างๆ ให้เป็นวัตถุ (Object) ซึ่งวัตถุก็จะมีระเบียบวิธี (Method) ในการปฏิบัติที่แตกต่างกันไป แต่สามารถนำามาใช่รว่ มกันได้ (Reuse) จะไหวไม่น้า ลูกศิษย์เรา
ทำาไมต้องมีการออกแบบก่อนลงมือเขียนโปรแกรม? โปรแกรมที่เขียนง่ายๆ มักเป็นโปรแกรมที่ใช้สำาหรับงานบางอย่าง
มักมีคนใช้นอ้ ย เมือ่ ใช้นานเข้า จะมีแนวโน้วเปลี่ยนใหม่ทั้งหมดมากกว่าจะมีการปรับปรุงนำากลับมาใช้ใหม่ โปรแกรมที่มปี ระสิทธิภาพ มักจะมีความซับซ้อนค่อนข้างมากและสามารถปรับปรุงหรือนำากลับมาใช้ใหม่ ได้ ใช่แล้วโปรแกรมที่ดมี ักจะมีความซับซ้อน และเรากำาลังจะมุ่งประเด็นไปที่ความซับซ้อน เพราะถ้าหากเราควบคุมมันได้ เราก็สามารถที่จะพัฒนาโปรแกรมที่ซับซ้อนได้
ความซับซ้อนที่เกิดขึน้ กับโปรแกรมหรือแอพพลิชัน 1. ความซับซ้อนอันเนื่องมาจากขอบเขตงาน 2. ความยุง่ ยากในการจัดการเกี่ยวกับกระบวนการพัฒนาโปรแกรม 3. ความยืดหยุน่ ของโปรแกรม 4. ปัญหาที่เกิดจากพฤติกรรมของระบบแอพพลิเคชันในส่วนต่างๆ
แล้วข้อ 3 จะใช้ภาษาอะไรเขียนดีหละ ? JAVA สูๆ้ ความซับซ้อนในข้อ 1 มันต้องทำาใจน่ะ หลีกเลี่ยงไม่ได้เลย
อื้ม... แต่ในข้อ 2 เราสามารถเลือกได้ ว่าจะ in-house development หรือ industry development และเวลาเอาระบบหรือส่วนย่อยต่า งๆ ของโปรแกรม มาใช่ร่วมกันก็ให้ระวังดีนะครับ
กลวิธีในการพัฒนาแอพพลิเคชั่น วิธีการเชิงฟังก์ชนั (Functional) และวิธีการเชิงวัตถุ (Object oriented) Paradigms
Functional Pascal
C JAVA สู้ๆ JAVA สู้ตาย
Object oriented JAVA
C++
งั้น...เรามาเปรียบเที ยบกันดูว่าวิธีไหนเจ๋ งกว่ากัน โอ้ย..เหนื่อยนะเนี๊ยะ
SmallTalk
ตารางเปรียบเทียบวิธีในการพัฒนาแอพพลิเคชันแบบฟังก์ชั นกับแบบเชิงวัตถุ วิธีการเชิงฟังก์ชัน ลักษณะทั่วไป การจำาแนกงาน ความขึ้นตรงต่อกัน ขัน้ ตอนการทำางาน เห็นไหมหละ บอกแล้วเชิงวัต ถุ เจ๋งกว่า
แตกปัญหาออกเป็นส่วนย่อย ๆ ในรูปของ กระบวนการทำางาน แบ่งออกเป็น ฟังก์ชัน มี กำาหนดโครงสร้างและ ประเภทของข้อมูล จากนั้นกำาหนดฟังก์ชัน การทำางานกับโครงสร้างนั้น
วิธีการเชิงวัตถุ มองสิ่งต่างๆเป็นออบเจ็คต์ จำาแนกออบเจคต์แล้ว แบ่งกลุ่มตามคุณลักษณะ ไม่ขึ้นตรงต่อกัน(อิสระต่อกัน) กำาหนดคุณสมบัติและ พฤติกรรม จากนั้นสร้าง ความสัมพันธ์ ระหว่างออบเจ็คต์ว่าจะ ทำางานร่วมกันอย่างไร
Object (วัตถุ) ลักษณะของออบเจ็คต์ ลักษณะคือสิ่งใดๆ ที่เราสนใจ อาจจะเป็นสิ่งทีจ่ ับต้องได้ เช่น สินค้า ลูกค้า รถ ปากกา หรือ เป็นสิ่งทีจ่ ับต้องไม่ต้อง เช่น การขายสินค้า การประชุม การสอบ เป็นต้น โดยสามารถ ติดต่อสื่อสารกันได้ด้วยการส่ง message ถึงกัน ออบเจ็คต์สามารถติดต่อสื่อสารกันได้ ด้วยการส่ง message ถึงกัน
Open account
Customer
messages Account No
Account
ออบเจ็คต์ 1 ออบเจ็คต์ ไม่ว่าจะเป็นออบเจ็คต์แบบใดก็ตามล้วนมีลักษณะ 2 ประการคือ Attribute = ตัวแปร
- State (ขึ้นอยู่กับมุมมองของแต่ละคน) - Identity (ทำาให้เห็นว่าอ็อบเจ็คแต่ละอันแตกต่างกันอย่างไร) Behavior = method (การกระทำาบางอย่าง) ออบเจคต์จะประกอบไปด้วย 2 ส่วนหลักๆ คือ คุณสมบัติ (Attribute) และพฤติกรรม (Behavior) นะคะ
การสร้างแปลนให้ออบเจ็คต์ด้วยคลาส วิธกี ารสร้างออบเจ็คต์จะมีกลไกอย่างหนึง่ คือ class เมือ่ เราจะใช้งาน เราจะสร้าง instance - ล้อ - พวงมาลัย - เกียร์ (วิ่ง , เลี้ยว หรือ เบรค)
class เปรียบเสมือนตัวแบบ (template) ที่นำาไปใช้สร้างออบเจ็คต์
รถเก๋ง หรือ รถบรรทุก
ชนิดของ classes ตามทฤษฎีของ OO จะแบ่งออกเป็น 3 กลุ่ม 1. Entity classes (แสดงข้อมูล) 1.1 Concrete classes (เช่น บุคคล สถานที)่ 1.2 Conceptual classes (เช่น ข้อตกลง โครงสร้างองค์กร) 1.3 Event/State classes (เช่น การขาย การขนส่ง) 2. Interface classes (เช่น เมนู Dialog Button) 3. Control/Application classes (step การใช้งาน) เป็นงัยมาถึงจุดนี้ พอจะเรียนไหวไหม?
ตัวอย่างการกำาหนดคลาสให้แก่ออบเจ็คต์ บุคลากร => นางสาวสุนทริน วงศ์ศิริ , นายวุฒชิ ยั วิเชียรไชย ปฏิกิรยิ าเคมี => เหล็กขึ้นสนิม แม่นำ้า => เจ้าพระยา , แม่นำ้าโขง กีฬา => ฟุตบอล , บาสเกตบอล , เทนนิส
คุณลักษณะของวิธีการเชิงวัตถุ
Abstraction Encapsulation Hierarchy Polymorphism
เดีย๋ วจะอธิบายให้ฟังน่ะ ขอเล่นนำ้าก่อน
มุมมองออบเจ็คต์ (Abstraction) คือมุมมองของออบเจ็คว่าเป็นอย่างไร มีคุณสมบัติและพฤติกรรม อย่างไร เช่น มุมมองของออบเจ็คต์คอมพิวเตอร์
Laptop
Workstation
คุณค่าภายในออบเจ็คต์ (Encapsulation) เป็นกลไกที่ซ่อนสารสนเทศบางอย่างไว้ในออบเจ็คต์ เพือ่ ไม่ให้ออบเจ็คต์อื่นมองเห็น ถ้าเราอยากทราบสารสนเทศเหล่านั้นจะต้องทำาการเงื่อนไขหรือกฎของออบเจ็คต์นั้นๆ
ถ้าจะสร้างให้มี Encapsulation ให้นึกถึง Keyword private
ลำาดับชั้นของออบเจ็คต์ (Hierarchy) การนำาเอาออบเจ็คต์มาจัดกลุม่ และสร้างลำาดับความสัมพันธ์ เช่นเมือ่ กล่าวถึงสัตว์ Animal Insect
bee
butterfly
grasshopper
Mammal
rabbit
cat
ในการจัดกลุ่มลำาดับชั้น จะทำาให้ขอบเขตเล็กลง จนเห็นได้ชัดเจน
การตอบสนองต่อเมสเสจ (Polymorphism) เป็นพฤติกรรมที่ออบเจ็คต์ต่างๆ เมื่อมีเมสเสจหนึง่ ส่งมา ออบเจ็คต์ตา่ งๆจะมีการ ตอบสนองต่อเมสเสจเดียวกันนัน้ แตกต่างกันไป พวกเราคิดว่าอาจารย์น่ารักไหม? 555…โอเค เข้าเรื่องกันดีกว่า
ถ้าส่งเมสเสจ “+” ไปยัง 10 กับ 5 ซึ่งเป็นออบเจ็คต์ลูกทุ่งหละ ?
ถ้าส่งเมสเสจ “+” ไปยัง 10 กับ 5 ซึ่งเป็นออบเจ็คต์ตัวเลข การตอบสนองต่อเมสเสจก็จะนำา 10+5 ก็จะได้ค่าเป็น 15 ถ้าส่งเมสเสจ “+” ไปยัง 10 กับ 5 ซึ่งเป็นออบเจ็คต์สตริง การตอบสนองต่อเมสเสจก็จะนำา 10 มา concat กับ 5 ก็จะได้ค่าเป็น 105
ความสัมพันธ์ระหว่างออบเจ็คต์ 1. Links - unidirectional (ทิศทางเดียว) CHIP
- bidirectional (สองทิศทาง) Web Server
Application Server
โดยปกติ Link ของออบเจ็คต์จะเป็นไปในทิศทางเดี ยว
ความสัมพันธ์ระหว่างออบเจ็คต์ (ต่อ) 2. Aggregation คือความสัมพันธ์ในลักษณะที่ออบเจ็คต์หนึ่งเป็นส่วนหนึ่งหรือส่วน ประกอบ (component) ของอีกออบเจ็คต์หนึ่ง CHIP
สบายครับ
แกว่า ยากไหมว่ะ?
ความสัมพันธ์ระหว่างคลาส Inheritance (การสืบทอด)
เป็นความสัมพันธ์ระหว่างคลาสในลักษณะของ คลาสหนึง่ เป็นชนิดหรือ ประเภทหนึง่ ของ อีกคลาสหนึง่ ในรูปแบบของ superclass และ subclass 1 subclass สืบทอดมาจาก superclass เดียว รถ รถบรรทุก
รถกะบะ
ก็เหมือนกันพวกเรานั่นแหละ ก็สืบทอดมาจากพ่อกับแม่งัย
1 subclass สืบทอดมาจาก superclass มากกว่า 1 superclass (Multiple) คณบดี
อาจารย์
พนักงาน มหาวิทยาลัย
ความสัมพันธ์ระหว่างคลาส (ต่อ) Utilization (การใช้งานร่วมกัน)
เป็นความสัมพันธ์ระหว่างคลาสในลักษณะของ คลาสหนึง่ ของใช้ ออบเจ็คต์จากอีกคลาสหนึง่ เครื่องเขียน
นักเรียน
ปากกา คลาสนักเรียนไปเรียกใช้ออบเจ็คต์ป ากกาซึง่ เป็นส่วนประกอบของคลาส เครื่องเขียน
อย่าพึง่ ท้อนะ สู้ๆ