Object Oriented Programming(OOP)

posted on 12 Aug 2012 19:40 by inwprogramming in Programming

OOP ไม่ใช่ภาษา ไม่ใช่ซอฟท์แวร์ มันเป็นเพียง Paradigm (อ่านว่า พาราดิม แปลว่า แบบ หรือตัวอย่าง) หรือ สไตล์การเขียน มันยังเป็นวิธีคิดอีกด้วย หากนักเขียนโค้ดยังคิดแบบ non-OOP แม้จะใช้ซอฟท์แวร์หรือใช้ภาษา OOP อย่างดี โค้ดผลลัพธ์ก็จะไม่เป็น OOP ไปได้

OOP เป็นส่วนหนึ่งของวิชาวิศวกรรมซอฟท์แวร์ วิชานี้มีขึ้นเพื่อยกระดับการสร้างซอฟท์แวร์ให้เป็นไปตามหลักวิศวกรรม เพราะเดิมการเขียนโค้ดเป็นเรื่องของความสามารถเฉพาะตัว นักเขียนโปรแกรมแต่ละคนใช้หลักการเฉพาะตน ทำให้การสร้างซอฟท์แวร์มีความเป็นศิลปะมากกว่าศาสตร์ พฤติกรรมเช่นนี้เป็นปัจจัยหนึ่งซึ่งทำให้เกิดสภาพการณ์ที่เรียกว่า วิกฤตกาลซอฟท์แวร์ (Software crisis) ตอนปลายทศวรรษ 1960 เป็นวิกฤตกาลด้านความขาดแคลนซอฟท์แวร์ที่มีประสิทธิภาพ

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


การมาถึงของไมโครโปรเซสเซอร์มีส่วนทำให้วิกฤตกาลซอฟท์แวร์รุนแรงขึ้น

ในปีค.ศ. 1968 องค์การนาโต้ (NATO องค์การสนธิสัญญาแอตแลนติกเหนือ) ได้จัดสัมมนาเรื่อง วิศวกรรมซอฟท์แวร์ ที่ประเทศเยอรมัน เพื่อหาแนวทางแก้ไขวิกฤตกาลซอฟท์แวร์ การสัมมนานี้วางรากฐานของวิศวกรรมซอฟท์แวร์ โดยหยิบยืมเทคโนโลยีและวิธีปฏิบัติจากสาขาวิชาอื่น มาปรับใช้กับการสร้างซอฟท์แวร์ ซึ่งไม่ได้หมายถึงแค่วิธีเขียนโค้ด แต่ยังรวมถึงขึ้นตอนปฏิบัติอื่นๆ ด้วย เช่น การออกแบบ การทดสอบ การบริหารโครงการ และงานวางแผนต่างๆ เป็นต้น

ในปี ค.ศ. 1992 ไอวาร์ จาคอบสัน (Ivar Jacobson) ได้นำเสนอแนวคิด วิศวกรรมซอฟท์แวร์แบบวัตถุวิธี (Object-oriented software engineering หรือ OOSE) แนวคิดนี้เสนอให้นำหลักการ use cases มาประยุกต์ใช้กับการออกแบบซอฟท์แวร์โดยโดยการใช้ UML (Unified Modeling Language) เป็นเครื่องมือหลัก

ทั้ง OOSE และ OOP ต่างเป็นส่วนหนึ่งของวิชา “การออกแบบและวิเคราะห์แบบวัตถุวิธี” (Object-oriented Analysis and Design หรือ OOAD) แม้ OOSE และ OOP จะชื่อคล้ายกันและอยู่ในวิชา OOAD เหมือนๆ กัน แต่ก็เป็นสองหัวข้อวิชาที่แยกจากกัน โดย OOSE เน้นเรื่องการออกแบบ ส่วน OOP เน้นเรื่องการเขียนโค้ด ในหนังสือเล่มนี้ผู้เขียนจะสอนวิธีคิดและเขียนโค้ดให้เป็น OOP เท่านั้น หากต้องการศึกษาเรื่อง OOAD และ OOSE ท่านอาจศึกษาได้ชั้นเรียนวิชานี้ หรือจากตำราเล่มอื่น

ขอย้อนกลับไปในช่วงทศวรรษ 1970 มีการเสนอว่าหากจะแก้วิกฤตซอฟท์แวร์ ก็น่าจะหาทางทำให้การสร้างซอฟท์แวร์ง่ายเหมือนฮาร์ดแวร์ ในสมัยนั้นฮาร์ดแวร์ส่วนมากถูกสร้างจากไอซีดิจิตอล แบบ “โลจิกเกต” ยกตัวอย่าง เช่น หากท่านต้องการสร้างวงจรดิจิตอลอะไรสักอย่าง ท่านไม่จำเป็นต้องนำทรานซิสเตอร์ ตัวต้านทาน และตัวเก็บประจุมาต่อกัน แต่ท่านสามารถเลือกไอซีที่เป็น โลจิกเกต (logic gate) ที่มีอยู่มากมายหลายร้อยแบบ นำมาสร้างเป็นวงจร digital combination (ดิจิตอล คอมบิเนชัน คือวงจรดิจิตอลที่เกิดจากการนำ logic gate หลายๆ แบบมาเชื่อมต่อกัน) ที่มีคุณสมบัติตามที่ท่านต้องการได้ไม่ยาก

การนำไอซีดิจิตอลมาใช้งานท่านไม่จำเป็นต้องรู้กระบวนการทำงานภายในของมัน ท่านเพียงแต่ต้องรู้ว่ามันต้องการอินพุท (input) อย่างไร และจะให้ผลลัพธ์ (output) ออกมาเป็นอย่างไร (ข้อมูลเพื่อการนำไปเชื่อมต่อหรือ interface กับไอซีตัวอื่น) ซึ่งเป็นเรื่องดี เพราะท่านไม่ต้องเสียเวลาไปกับการเรียนรู้วิธีทำงานภายในของไอซีแต่ละตัว ทำให้การออกแบบสร้างวงจรใหม่ๆ ทำได้รวดเร็วและง่ายขึ้นมาก นี่คือสาเหตุหนึ่งที่ทำให้วงการฮาร์ดแวร์ก้าวหน้าไปได้อย่างรวดเร็ว

เราอาจจะมองว่าไอซีแต่ละตัวคือ component (อ่านว่า คอมโพเนนท์ แปลว่าชิ้นส่วนหรือส่วนประกอบ) เหมือนชิ้นของเล่นพลาสติก เลโก (Lego) ที่มีรูปแบบต่างๆ มากมาย ทุกชิ้นถูกออกแบบให้มี interface ตรงกัน เราจึงสามารถนำเลโกมาต่อเป็นของเล่นต่างๆ ได้สารพัด


ของเล่นพลาสติก เลโก (Lego) ทุกชิ้นถูกออกแบบให้มี interface ตรงกัน

ย้อนกลับไปอีกในปี 1968 องค์การนาโต้ (NATO องค์การสนธิสัญญาแอตแลนติกเหนือ) ได้จัดสัมมนาเรื่อง Mass Produced Software Components (การผลิตชิ้นส่วนซอฟท์แวร์เป็นจำนวนมาก) ที่ประเทศเยอรมัน เพื่อต้านวิกฤตกาลซอฟท์แวร์ การสัมมนานี้วางรากฐานแนวคิดการทำซอฟท์แวร์ให้เป็น component หรือซอฟท์แวร์ไอซี ผู้นำการสัมมนาเรียกแนวคิดนี้ว่า Component Oriented Programming (ย่อว่า COP) หรือการเขียนโปรแกรมโดยเน้นการสร้างชิ้นส่วน

component หมายถึง Object ที่ถูกสร้างขึ้นตามข้อกำหนดจะเพาะเพื่อตอบสนองเป้าหมายห้าประการคือ

  1. นำกลับมาใช้ใหม่ได้
  2. เป็นอิสระต่อสภาพแวดล้อม
  3. ทำงานร่วมกับ component อื่นได้
  4. ใช้วิธี Encapsulation
  5. เป็นอิสระต่อการนำไปใช้และการปรับเปลี่ยนเวอร์ชัน


ภาษา C# เป็นภาษา OOP ที่สนับสนุนหลักการ COP อย่างจริงจัง หลักการ COP มีหลายอย่างตรงกับ OOP เช่นการส่ง object ไปเก็บในหน่วยความจำ หรือส่งไปในเครือข่ายโดยเรียงออกไปกันแบบอนุกรม และให้อยู่ในรูปแบบที่คนสามารถอ่านได้ (เช่น XML) เมื่อไปถึงจุดหมายแล้วจะกลับมารวมตัวกันใหม่ (ซึ่งอันที่จริงแล้วเป็นสำเนาหรือ “โคลน” ของตัวจริง) วิธีทำเช่นนี้คำ จาร์กอน เรียกว่า serialization (อ่านว่า ซีเรียลไลเซชัน แปลว่าการทำให้เป็นอนุกรม) หรือ Marshalling (อ่านว่า มาแชลลิง แปลว่าการเรียงกันออกไป ในการเรียนภาษา C# ท่านจะพบกับการทำ มาแชลลิง อยู่เนืองๆ)

Comment

Comment:

Tweet