อ่าน 6 นาที
รูปแบบการเขียนโปรแกรม
เปลี่ยนทางจากพหูพจน์/การเปลี่ยนเส้นทางที่ไม่สามารถพิมพ์ได้
รูปแบบการเขียนโปรแกรมคือวิธีการคิดและโครงสร้างระดับสูงในการดำเนินการโปรแกรมคอมพิวเตอร์ภาษาโปรแกรมสามารถจำแนกได้ว่ารองรับรูปแบบการเขียนโปรแกรมหนึ่งรูปแบบหรือหลายรูปแบบ
รูปแบบการเขียนโปรแกรม
รูปแบบการเขียนโปรแกรมคือวิธีการคิดและโครงสร้างระดับสูงในการดำเนินการโปรแกรมคอมพิวเตอร์ภาษาโปรแกรมสามารถจำแนกได้ว่ารองรับรูปแบบการเขียนโปรแกรมหนึ่งรูปแบบหรือหลายรูปแบบ[ 1 ]
รูปแบบการเขียนโปรแกรม (Paradigms) ถูกแบ่งและอธิบายตามมิติต่างๆ ของการเขียนโปรแกรม รูปแบบบางอย่างเกี่ยวข้องกับผลกระทบของแบบจำลองการทำงานเช่น การอนุญาตให้เกิดผลข้างเคียงหรือลำดับการทำงานถูกกำหนดโดยแบบจำลองการทำงานหรือไม่ รูปแบบอื่นๆ เกี่ยวกับวิธีการจัดระเบียบโค้ด เช่น การจัดกลุ่มเป็นหน่วยที่รวมทั้งสถานะและพฤติกรรม และรูปแบบอื่นๆ เกี่ยวกับไวยากรณ์และโครงสร้างประโยค
รูปแบบการเขียนโปรแกรมทั่วไปบางส่วนได้แก่ (แสดงในความสัมพันธ์แบบลำดับชั้น ): [ 2 ] [ 3 ] [ 4 ]
- คำสั่ง – โค้ดจะควบคุมการไหลของการทำงานและการเปลี่ยนแปลงสถานะโดยตรง ประกอบด้วยคำสั่งที่ระบุอย่างชัดเจนเพื่อเปลี่ยนแปลงสถานะของโปรแกรม
- ขั้นตอน – จัดเรียงเป็นขั้นตอนที่เรียกใช้ซึ่งกันและกัน
- การเขียน โปรแกรมเชิงวัตถุ – จัดระเบียบข้อมูลเป็นวัตถุที่ประกอบด้วยทั้งโครงสร้างข้อมูลและพฤติกรรมที่เกี่ยวข้อง โดยใช้โครงสร้างข้อมูลที่ประกอบด้วยฟิลด์ข้อมูลและเมธอด พร้อมทั้งปฏิสัมพันธ์ระหว่างกัน (วัตถุ) ในการออกแบบโปรแกรม
- การเขียนโปรแกรมเชิงวัตถุ แบบใช้คลาส – การเขียนโปรแกรมเชิงวัตถุที่ใช้ การกำหนดคลาสของวัตถุเพื่อสร้าง ชนิดข้อมูลนามธรรมและการสืบทอดแทนที่จะกำหนดตัววัตถุเอง
- แบบ จำลองเชิงวัตถุ - รูปแบบที่วัตถุมีโครงสร้างเพื่อห่อหุ้มสถานะและพฤติกรรม แต่ไม่มีการสืบทอดหรือการกำหนดชนิดย่อย
- การเขียนโปรแกรมเชิงวัตถุ แบบใช้ต้นแบบ – การเขียนโปรแกรมที่หลีกเลี่ยงการใช้คลาสและใช้การสืบทอดโดยการสร้างอินสแตนซ์ขึ้นมาแทน
- ข้อมูล บริบท และปฏิสัมพันธ์ - แนวคิดที่เน้นแบบจำลองทางจิตและพฤติกรรมขณะทำงานของเครือข่ายของวัตถุ ซึ่งความรับผิดชอบจะถูกกำหนดแบบไดนามิกตามบทบาทที่พวกมันมีในการปฏิสัมพันธ์กับวัตถุอื่นๆ
- การเขียน โปรแกรมแบบประกาศ (Declarative ) – โค้ดจะประกาศคุณสมบัติของผลลัพธ์ที่ต้องการ แต่ไม่ได้ระบุวิธีการคำนวณ อธิบายว่าการคำนวณควรทำอะไร โดยไม่ระบุการเปลี่ยนแปลงสถานะโดยละเอียด
- เชิงฟังก์ชัน – ผลลัพธ์ที่ต้องการจะถูกประกาศเป็นค่าของการประเมินฟังก์ชันหลายๆ ครั้ง ใช้การประเมินฟังก์ชันทางคณิตศาสตร์ และหลีกเลี่ยงสถานะและข้อมูลที่เปลี่ยนแปลงได้
- ตรรกศาสตร์ – ผลลัพธ์ที่ต้องการจะถูกประกาศว่าเป็นคำตอบของคำถามเกี่ยวกับระบบข้อเท็จจริงและกฎเกณฑ์ โดยใช้ตรรกศาสตร์ทางคณิตศาสตร์ที่ชัดเจนในการเขียนโปรแกรม
- เชิงตอบสนอง – ผลลัพธ์ที่ต้องการจะถูกกำหนดด้วยกระแสข้อมูลและการแพร่กระจายของการเปลี่ยนแปลง
- การเขียนโปรแกรมแบบขนาน – มีโครงสร้างภาษาสำหรับการทำงานแบบขนาน ซึ่งอาจเกี่ยวข้องกับการทำงานแบบมัลติเธรด การสนับสนุนการประมวลผลแบบกระจาย การส่งข้อความ ทรัพยากรที่ใช้ร่วมกัน (รวมถึงหน่วยความจำที่ใช้ร่วมกัน) หรือฟิวเจอร์ส
- การเขียนโปรแกรมแบบ Actor – การคำนวณแบบขนานโดยมีActor แต่ละตัวทำการตัดสินใจในระดับท้องถิ่นเพื่อตอบสนองต่อสภาพแวดล้อม (สามารถแสดงพฤติกรรมเห็นแก่ตัวหรือแข่งขันได้)
- การเขียนโปรแกรมแบบมีข้อจำกัด – ความสัมพันธ์ระหว่างตัวแปรต่างๆ จะถูกแสดงออกมาในรูปของข้อจำกัด (หรือเครือข่ายข้อจำกัด) ซึ่งกำหนดทิศทางของคำตอบที่เป็นไปได้ (โดยใช้การแก้ปัญหาข้อจำกัดหรือ อัลกอริธึ มซิมเพล็กซ์ )
- การเขียนโปรแกรมแบบ Dataflow – การคำนวณสูตรใหม่โดยอัตโนมัติเมื่อค่าข้อมูลเปลี่ยนแปลง (เช่นสเปรดชีต )
- การเขียนโปรแกรมแบบกระจาย – รองรับคอมพิวเตอร์อิสระหลายเครื่องที่สื่อสารกันผ่านเครือข่ายคอมพิวเตอร์
- การเขียนโปรแกรมแบบเจเนริก – ใช้ขั้นตอนวิธีที่เขียนขึ้นโดยใช้ประเภทข้อมูลที่จะระบุในภายหลัง จากนั้นจึงสร้างอินสแตนซ์ของประเภทข้อมูลนั้นตามความจำเป็นสำหรับประเภทข้อมูลเฉพาะที่ให้มาเป็นพารามิเตอร์
- เมตาโปรแกรมมิ่ง – การเขียนโปรแกรมที่เขียนหรือจัดการโปรแกรมอื่น (หรือตัวมันเอง) ในฐานะข้อมูล หรือที่ทำส่วนหนึ่งของงานในขั้นตอนการคอมไพล์ ซึ่งโดยปกติแล้วจะทำในขั้นตอนการทำงาน
- เมตาโปรแกรมมิงแบบใช้เทมเพลต – วิธีเมตาโปรแกรมมิงที่คอมไพเลอร์ใช้เทมเพลตในการสร้างซอร์สโค้ดชั่วคราว ซึ่งคอมไพเลอร์จะรวมเข้ากับซอร์สโค้ดส่วนที่เหลือแล้วจึงทำการคอมไพล์
- การเขียนโปรแกรมแบบสะท้อนกลับ – วิธีการเขียนโปรแกรมแบบเมตาที่โปรแกรมปรับเปลี่ยนหรือขยายตัวเอง
- การเขียนโปรแกรมแบบไปป์ไลน์ – การเปลี่ยนแปลงไวยากรณ์อย่างง่ายเพื่อเพิ่มไวยากรณ์สำหรับการเรียกฟังก์ชันซ้อนกันในภาษาที่ออกแบบมาแต่เดิมโดยไม่มีไวยากรณ์ดังกล่าว
- การเขียนโปรแกรมโดยใช้กฎเกณฑ์ – เครือข่ายของกฎพื้นฐานที่ประกอบเป็นฐานความรู้ และสามารถนำไปใช้กับระบบผู้เชี่ยวชาญ การอนุมาน และการแก้ปัญหาได้
- การเขียนโปรแกรมแบบภาพ – การจัดการองค์ประกอบของโปรแกรมด้วยภาพกราฟิก แทนการระบุด้วยข้อความ (เช่นSimulink ) หรือเรียกอีกอย่างว่าการเขียนโปรแกรมแบบแผนภาพ
ภาพรวม

รูปแบบการเขียนโปรแกรมมาจากงานวิจัยทางวิทยาศาสตร์คอมพิวเตอร์ เกี่ยวกับแนวทางปฏิบัติที่มีอยู่ในการพัฒนาซอฟต์แวร์ผลการวิจัยช่วยให้สามารถอธิบายและเปรียบเทียบแนวทางการเขียนโปรแกรมและภาษาที่ใช้ในการเขียนโปรแกรมได้ เพื่อเป็นข้อมูลประกอบ งานวิจัยในสาขาอื่น ๆ ศึกษาเกี่ยวกับ กระบวนการทางวิศวกรรมซอฟต์แวร์และอธิบายวิธีการ ต่าง ๆ เพื่ออธิบายและเปรียบเทียบกระบวนการเหล่านั้น
ภาษาโปรแกรมสามารถอธิบายได้ในแง่ของกระบวนทัศน์ ภาษาบางภาษาสนับสนุนเพียงกระบวนทัศน์เดียว ตัวอย่างเช่นSmalltalkสนับสนุนการเขียนโปรแกรมเชิงวัตถุ และHaskellสนับสนุนการเขียนโปรแกรมเชิงฟังก์ชัน ภาษาโปรแกรมส่วนใหญ่สนับสนุนหลายกระบวนทัศน์ ตัวอย่างเช่น โปรแกรมที่เขียนด้วยC++ , Object PascalหรือPHPสามารถเป็นแบบเชิงกระบวนการ ล้วนๆ เป็น แบบเชิงวัตถุล้วนๆหรืออาจมีส่วนประกอบของทั้งสองกระบวนทัศน์ หรืออื่นๆ ก็ได้
เมื่อใช้ภาษาโปรแกรมที่รองรับหลายรูปแบบการเขียนโปรแกรม นักพัฒนาจะเลือกใช้ส่วนประกอบของรูปแบบการเขียนโปรแกรมนั้นๆ แต่การเลือกนี้อาจไม่ได้คำนึงถึงรูปแบบการเขียนโปรแกรมโดยตรงเสมอไป นักพัฒนามักใช้คุณสมบัติของภาษาตามที่ภาษานั้นมีให้ และเท่าที่นักพัฒนารู้จัก การจัดหมวดหมู่โค้ด ที่ได้ ตามรูปแบบการเขียนโปรแกรมมักเป็นกิจกรรมทางวิชาการที่ทำในภายหลัง
ภาษาโปรแกรมที่จัดอยู่ในประเภทกระบวนทัศน์เชิงคำสั่งมีคุณลักษณะหลักสองประการ คือ ระบุลำดับการทำงานของคำสั่งต่างๆ ด้วยโครงสร้างที่ควบคุมลำดับนั้นอย่างชัดเจน และอนุญาตให้มีผลข้างเคียงได้ กล่าวคือ สถานะสามารถเปลี่ยนแปลงได้ ณ จุดเวลาหนึ่งภายในหน่วยโค้ดหนึ่ง แล้วอ่านค่ากลับได้ในภายหลัง ณ จุดเวลาอื่นภายในหน่วยโค้ดอื่น การสื่อสารระหว่างหน่วยโค้ดนั้นไม่ได้ระบุไว้อย่างชัดเจน
ในทางตรงกันข้าม ภาษาในรูปแบบประกาศจะไม่ระบุลำดับในการดำเนินการ แต่จะจัดเตรียมการดำเนินการที่มีอยู่จำนวนหนึ่งในระบบ พร้อมกับเงื่อนไขที่อนุญาตให้แต่ละการดำเนินการดำเนินการได้[ 7 ] การนำแบบจำลองการดำเนินการของภาษาไปใช้จะติดตามว่าการดำเนินการใดบ้างที่สามารถดำเนินการได้อย่างอิสระ และเลือกลำดับโดยอิสระ ดูเพิ่มเติมได้ที่ การเปรียบเทียบภาษาการ เขียน โปรแกรมหลายรูปแบบ
ใน การเขียนโปรแกรม เชิงวัตถุโค้ดจะถูกจัดระเบียบเป็นวัตถุซึ่งประกอบด้วยสถานะที่เป็นของและ (โดยปกติ) ถูกควบคุมโดยโค้ดของวัตถุนั้น ภาษาเชิงวัตถุส่วนใหญ่ก็เป็นภาษาเชิงคำสั่งด้วยเช่นกัน
ในการเขียนโปรแกรมเชิงวัตถุ โปรแกรมจะถูกมองว่าเป็นชุดของวัตถุที่โต้ตอบกัน ในการเขียนโปรแกรมเชิงฟังก์ชันโปรแกรมจะถูกมองว่าเป็นลำดับของการประเมินฟังก์ชันที่ไม่มีสถานะ เมื่อเขียนโปรแกรมคอมพิวเตอร์หรือระบบที่มีโปรเซสเซอร์จำนวนมาก ในการเขียนโปรแกรมเชิงกระบวนการ โปรแกรมจะถูกมองว่าเป็นชุดของกระบวนการที่ทำงานพร้อมกันซึ่งกระทำกับ โครงสร้างข้อมูล เชิงตรรกะ ที่ ใช้ร่วมกัน
รูปแบบการเขียนโปรแกรมหลายรูปแบบเป็นที่รู้จักกันดีทั้งในด้านเทคนิคที่ ห้ามใช้และเทคนิค ที่ สนับสนุนตัวอย่างเช่น การเขียนโปรแกรมเชิงฟังก์ชันบริสุทธิ์ไม่อนุญาตให้ใช้ผลข้างเคียงในขณะที่การเขียนโปรแกรมเชิงโครงสร้างไม่อนุญาตให้ ใช้โครงสร้าง gotoส่วนหนึ่งเป็นเพราะเหตุนี้ รูปแบบการเขียนโปรแกรมใหม่จึงมักถูกมองว่าเป็นแบบยึดติดกับหลักการหรือเข้มงวดเกินไปโดยผู้ที่คุ้นเคยกับรูปแบบเก่า[ 8 ]อย่างไรก็ตาม การหลีกเลี่ยงเทคนิคบางอย่างสามารถทำให้เข้าใจพฤติกรรมของโปรแกรมได้ง่ายขึ้น และพิสูจน์ทฤษฎีบทเกี่ยวกับความถูกต้องของโปรแกรมได้
รูปแบบการเขียนโปรแกรมยังสามารถเปรียบเทียบได้กับแบบจำลองการเขียนโปรแกรมซึ่งช่วยให้สามารถเรียกใช้แบบจำลองการทำงาน ได้ โดยใช้เพียง API เท่านั้น แบบจำลองการเขียนโปรแกรมยังสามารถจำแนกออกเป็นรูปแบบต่างๆ ได้ตามคุณลักษณะของแบบจำลองการทำงานด้วย
สำหรับการประมวลผลแบบขนานการใช้แบบจำลองการเขียนโปรแกรมแทนภาษาเป็นเรื่องปกติ เหตุผลก็คือ รายละเอียดของฮาร์ดแวร์แบบขนานจะรั่วไหลเข้าไปในนามธรรมที่ใช้ในการเขียนโปรแกรมฮาร์ดแวร์ ทำให้โปรแกรมเมอร์ต้องแมปรูปแบบในอัลกอริทึมไปยังรูปแบบในแบบจำลองการทำงาน (ซึ่งถูกแทรกเข้ามาเนื่องจากการรั่วไหลของฮาร์ดแวร์เข้าไปในนามธรรม) ผลที่ตามมาคือ ไม่มีภาษาการเขียนโปรแกรมแบบขนานภาษาใดที่เหมาะสมกับปัญหาการคำนวณทั้งหมด ดังนั้น การใช้ภาษาแบบลำดับพื้นฐานและแทรกการเรียกใช้ API ไปยังแบบจำลองการทำงานแบบขนานผ่านแบบจำลองการเขียนโปรแกรมจึงสะดวกกว่า แบบจำลองการเขียนโปรแกรมแบบขนานดังกล่าวสามารถจำแนกได้ตามนามธรรมที่สะท้อนถึงฮาร์ดแวร์ เช่นหน่วยความจำร่วมหน่วยความจำแบบกระจายที่มีการส่งข้อความแนวคิดของตำแหน่งที่มองเห็นได้ในโค้ด และอื่นๆ สิ่งเหล่านี้สามารถพิจารณาได้ว่าเป็นรูปแบบของกระบวนทัศน์การเขียนโปรแกรมที่ใช้ได้เฉพาะกับภาษาและแบบจำลองการเขียนโปรแกรมแบบขนานเท่านั้น
การวิจารณ์
นักวิจัยภาษาโปรแกรมบางคนวิจารณ์แนวคิดเรื่องกระบวนทัศน์ในการจำแนกประเภทของภาษาโปรแกรม เช่น Harper [ 9 ]และ Krishnamurthi [ 10 ] พวกเขาโต้แย้งว่าภาษาโปรแกรมหลายภาษาไม่สามารถจำแนกได้อย่างเคร่งครัดให้อยู่ในกระบวนทัศน์เดียว แต่รวมคุณสมบัติจากหลายกระบวนทัศน์ไว้ด้วยกัน ดู การเปรียบเทียบภาษา โปรแกรม หลายกระบวนทัศน์
ประวัติศาสตร์
วิธีการเขียนโปรแกรมที่แตกต่างกันได้พัฒนาขึ้นตามกาลเวลา การจำแนกประเภทของแต่ละวิธีนั้นมักจะถูกอธิบายไว้ในขณะที่วิธีนั้นได้รับการพัฒนาขึ้นเป็นครั้งแรก แต่บ่อยครั้งที่ไม่ได้ถูกอธิบายจนกระทั่งเวลาผ่านไปนานแล้วในภายหลัง วิธี การเขียน โปรแกรมแบบมีโครงสร้าง (structured programming)ซึ่งได้รับการสนับสนุนมาตั้งแต่ช่วงกลางทศวรรษ 1960 แนวคิดของกระบวนทัศน์การเขียนโปรแกรมนั้นมีมาอย่างน้อยตั้งแต่ปี 1978 ใน การบรรยาย รางวัล Turing AwardของRobert W. Floydในหัวข้อThe Paradigms of Programmingซึ่งอ้างถึงแนวคิดของกระบวนทัศน์ที่Thomas Kuhn ใช้ ในหนังสือThe Structure of Scientific Revolutions (1962) [ 11 ]ภาษาการเขียนโปรแกรมในยุคแรกๆ ไม่มีกระบวนทัศน์การเขียนโปรแกรมที่กำหนดไว้อย่างชัดเจน และบางครั้งโปรแกรมก็ใช้คำสั่ง goto อย่างกว้างขวาง ซึ่งการใช้คำสั่ง goto อย่างแพร่หลายทำให้เกิดโค้ดสปาเก็ตตี้ที่ยากต่อการเข้าใจและบำรุงรักษา สิ่งนี้จึงนำไปสู่การพัฒนากระบวนทัศน์การเขียนโปรแกรมแบบมีโครงสร้างที่ไม่อนุญาตให้ใช้คำสั่ง goto แต่ให้ใช้เฉพาะโครงสร้างการเขียนโปรแกรมที่มีโครงสร้างมากขึ้นเท่านั้น[ 12 ]
ภาษาและกระบวนทัศน์
รหัสเครื่อง
รหัสเครื่องเป็นระดับต่ำสุดของการเขียนโปรแกรมคอมพิวเตอร์ เนื่องจากเป็นคำสั่งเครื่องที่กำหนดพฤติกรรมในระดับนามธรรมที่ต่ำที่สุดเท่าที่จะเป็นไปได้สำหรับคอมพิวเตอร์ เนื่องจากเป็นวิธีการเขียนโค้ดที่กำหนดรายละเอียดมากที่สุด จึงถูกจัดอยู่ในประเภทของการเขียนโปรแกรมเชิงคำสั่ง (imperative)
บางครั้งมันถูกเรียกว่าภาษา โปรแกรมรุ่นแรก
การประกอบ
ภาษาแอสเซมบลีได้นำเอาตัวย่อมาใช้แทนคำสั่งเครื่องและที่อยู่หน่วยความจำภาษาแอสเซมบลีจัดอยู่ในประเภทภาษาเชิงคำสั่ง และบางครั้งเรียกว่าภาษา โปรแกรมรุ่นที่สอง
ในทศวรรษ 1960 ภาษาแอสเซมบลีได้รับการพัฒนาขึ้นเพื่อรองรับการคัดลอกไลบรารีและการสร้างมาโครแบบมีเงื่อนไขที่ค่อนข้างซับซ้อน รวมถึงความสามารถในการประมวลผลล่วงหน้า การเรียกใช้ซับรูทีนตัวแปรภายนอก และส่วนทั่วไป (โกลบอล) ซึ่งช่วยให้สามารถนำโค้ดกลับมาใช้ซ้ำได้อย่างมาก และแยกออกจากรายละเอียดเฉพาะของฮาร์ดแวร์ผ่านการใช้ตัวดำเนินการเชิงตรรกะ เช่น READ/WRITE/GET/PUT ภาษาแอสเซมบลีถูกใช้และยังคงถูกใช้ในระบบที่สำคัญต่อเวลา และมักใช้ในระบบฝังตัวเนื่องจากให้การควบคุมการทำงานของเครื่องได้มากที่สุด
ภาษาเชิงกระบวนการ
ภาษาเชิงขั้นตอนหรือที่เรียกว่าภาษาโปรแกรมรุ่นที่สามเป็นภาษาโปรแกรมระดับสูง กลุ่มแรกๆ โดยมีคำศัพท์เฉพาะที่เกี่ยวข้องกับปัญหาที่กำลังแก้ไข ตัวอย่างเช่น
- ภาษาโปรแกรมเชิงธุรกิจทั่วไป ( COBOL ) – ใช้คำศัพท์เช่นไฟล์ย้ายและคัดลอก
- FORTRAN (Formula Translation ) – เป็นภาษาที่ใช้ ศัพท์ ทางคณิตศาสตร์โดยได้รับการพัฒนาขึ้นเพื่อแก้ปัญหาทางวิทยาศาสตร์และวิศวกรรมเป็นหลัก
- ภาษาอัลโกริธมิก ( ALGOL ) – มุ่งเน้นที่จะเป็นภาษาที่เหมาะสมสำหรับการกำหนดอัลกอริธึมโดยใช้ศัพท์ทางคณิตศาสตร์ และมุ่งเป้าไปที่ปัญหาทางวิทยาศาสตร์และวิศวกรรม เช่นเดียวกับ FORTRAN
- ภาษาโปรแกรมมิ่งหมายเลขหนึ่ง ( PL/I ) – ภาษาโปรแกรมมิ่งแบบผสมผสานระหว่างเชิงพาณิชย์และวิทยาศาสตร์ที่ใช้งานได้ทั่วไปและรองรับตัวชี้ (pointers )
- ภาษา BASIC (All purpose Symbolic Instruction Code ) สำหรับผู้เริ่มต้น – ถูกพัฒนาขึ้นเพื่อให้ผู้คนจำนวนมากขึ้นสามารถเขียนโปรแกรมได้
- C – ภาษาโปรแกรมอเนกประสงค์ ซึ่งได้รับการพัฒนาขึ้นครั้งแรกโดยเดนนิส ริตชีระหว่างปี 1969 ถึง 1973 ที่ห้องปฏิบัติการ AT&T Bell Labs
ภาษาเหล่านี้จัดอยู่ในประเภทของกระบวนทัศน์เชิงขั้นตอน โดยจะควบคุมกระบวนการทีละขั้นตอนที่โปรแกรมคอมพิวเตอร์ปฏิบัติตามโดยตรง ดังนั้น ประสิทธิภาพและประสิทธิผลของโปรแกรมดังกล่าวจึงขึ้นอยู่กับทักษะของโปรแกรมเมอร์เป็นอย่างมาก
การเขียนโปรแกรมเชิงวัตถุ
เพื่อเป็นการปรับปรุงภาษาโปรแกรมเชิงขั้นตอน จึง ได้มีการสร้างภาษา โปรแกรมเชิงวัตถุ (OOP) ขึ้นมา เช่นSimula , Smalltalk , C++ , Eiffel , Python , PHP , JavaและC#ในภาษาเหล่านี้ข้อมูลและเมธอดสำหรับจัดการข้อมูลจะอยู่ในหน่วยโค้ดเดียวกันที่เรียกว่าวัตถุ การ ห่อ หุ้ม นี้ทำให้มั่นใจได้ว่าวิธีเดียวที่วัตถุจะเข้าถึงข้อมูลได้คือผ่านทางเมธอดของวัตถุที่บรรจุข้อมูลนั้น ดังนั้น การทำงานภายในของวัตถุจึงสามารถเปลี่ยนแปลงได้โดยไม่ส่งผลกระทบต่อโค้ดที่ใช้งานวัตถุนั้น
มีข้อโต้แย้งเกิดขึ้นจากAlexander Stepanov , Richard Stallman [ 13 ]และโปรแกรมเมอร์คนอื่นๆ เกี่ยวกับประสิทธิภาพของกระบวนทัศน์ OOP เมื่อเทียบกับกระบวนทัศน์เชิงกระบวนการ ความจำเป็นที่วัตถุทุกชิ้นจะต้องมีเมธอดแบบเชื่อมโยงทำให้ผู้ที่สงสัยบางคนมองว่า OOP เกี่ยวข้องกับซอฟต์แวร์ที่บวมการพยายามแก้ไขปัญหานี้เกิดขึ้นผ่านทางโพลีมอร์ฟิซึม
แม้ว่าภาษา OOP ส่วนใหญ่จะเป็นภาษารุ่นที่สาม แต่ก็เป็นไปได้ที่จะสร้างภาษาแอสเซมบลีเชิงวัตถุ ภาษาแอสเซมบลีระดับสูง (HLA) เป็นตัวอย่างหนึ่งของภาษาที่รองรับชนิดข้อมูลขั้นสูงและการเขียนโปรแกรมภาษาแอสเซมบลีเชิงวัตถุอย่างเต็มที่ แม้ว่าจะมีต้นกำเนิดมาจากยุคแรกก็ตาม ดังนั้น รูปแบบการเขียนโปรแกรมที่แตกต่างกันจึงอาจมองได้ว่าเป็นเหมือนแรงบันดาลใจของผู้สนับสนุนมากกว่าที่จะแสดงถึงความก้าวหน้าจากระดับหนึ่งไปอีกระดับหนึ่ง การเปรียบเทียบประสิทธิภาพของรูปแบบการเขียนโปรแกรมที่แข่งขันกันอย่างแม่นยำมักทำได้ยากขึ้นเนื่องจากคำศัพท์ใหม่และแตกต่างกันที่ใช้กับเอนทิตีและกระบวนการที่คล้ายคลึงกัน รวมถึงความแตกต่างในการใช้งานมากมายในแต่ละภาษา
ภาษาเชิงประกาศ
โปรแกรมเชิงประกาศ (Declarative programming)อธิบายว่าปัญหาคืออะไร ไม่ใช่ว่าจะแก้ปัญหาอย่างไร โครงสร้างของโปรแกรมจะอยู่ในรูปของชุดคุณสมบัติที่จะค้นหาในผลลัพธ์ที่คาดหวัง ไม่ใช่ในรูปของขั้นตอนที่จะต้องปฏิบัติตาม เมื่อได้รับฐานข้อมูลหรือชุดกฎ คอมพิวเตอร์จะพยายามหาคำตอบที่ตรงกับคุณสมบัติที่ต้องการทั้งหมด ตัวอย่างของภาษาเชิงประกาศ ได้แก่ ภาษา SQL ซึ่งเป็น ภาษารุ่นที่สี่ และตระกูลภาษาเชิงฟังก์ชันและภาษาโปรแกรมเชิงตรรกะ
การเขียนโปรแกรมเชิงฟังก์ชันเป็นส่วนย่อยของการเขียนโปรแกรมเชิงประกาศ โปรแกรมที่เขียนโดยใช้แนวคิดนี้ใช้ฟังก์ชันซึ่งเป็นบล็อกของโค้ดที่ออกแบบมาให้ทำงานเหมือนฟังก์ชันทางคณิตศาสตร์ภาษาโปรแกรมเชิงฟังก์ชันไม่สนับสนุนการเปลี่ยนแปลงค่าของตัวแปรผ่านการกำหนดค่าแต่จะใช้การเรียกซ้ำ (recursion)แทน เป็นอย่างมาก
แนวคิดการเขียนโปรแกรมเชิงตรรกะมองว่าการคำนวณเป็นการให้เหตุผลอัตโนมัติเหนือชุดความรู้ ข้อเท็จจริงเกี่ยวกับขอบเขตของปัญหาจะถูกแสดงออกมาในรูปของสูตรตรรกะ และโปรแกรมจะถูกดำเนินการโดยการใช้กฎการอนุมานกับสูตรเหล่านั้นจนกว่าจะพบคำตอบของปัญหา หรือจนกว่าจะพิสูจน์ได้ว่าชุดสูตรนั้นไม่สอดคล้องกัน
รูปแบบอื่นๆ
การเขียนโปรแกรมเชิงสัญลักษณ์เป็นกระบวนทัศน์ที่อธิบายโปรแกรมที่สามารถจัดการสูตรและส่วนประกอบของโปรแกรมเป็นข้อมูลได้[ 4 ]ดังนั้นโปรแกรมจึงสามารถปรับเปลี่ยนตัวเองได้อย่างมีประสิทธิภาพ และดูเหมือนว่าจะ "เรียนรู้" ทำให้เหมาะสำหรับแอปพลิเคชันต่างๆ เช่นปัญญาประดิษฐ์ระบบผู้เชี่ยวชาญ การประมวล ผลภาษาธรรมชาติและเกมคอมพิวเตอร์ ภาษาที่รองรับกระบวนทัศน์นี้ได้แก่LispและProlog [ 14 ]
โครงสร้าง การเขียนโปรแกรมที่สามารถหาอนุพันธ์ได้จะจัดโครงสร้างโปรแกรมเพื่อให้สามารถหาอนุพันธ์ได้ ตลอดทั้ง โปรแกรมโดยปกติผ่านการหาอนุพันธ์อัตโนมัติ[ 15 ] [ 16 ]
การเขียนโปรแกรมเชิงวรรณกรรมซึ่งเป็นรูปแบบหนึ่งของการเขียนโปรแกรมเชิงคำสั่งจะจัดโครงสร้างโปรแกรมให้เป็นเว็บที่เน้นมนุษย์เป็นศูนย์กลาง เช่นเดียวกับ บทความ ไฮเปอร์เท็กซ์ กล่าวคือ เอกสารประกอบเป็นส่วนสำคัญของโปรแกรม และโครงสร้างของโปรแกรมนั้นเป็นไปตามตรรกะของการอธิบายร้อยแก้ว มากกว่าความสะดวกของคอมไพเลอร์
เทคนิค การเขียนโปรแกรมเชิงสัญลักษณ์เช่นการเขียนโปรแกรมแบบสะท้อน (reflection) ซึ่งช่วยให้โปรแกรมสามารถอ้างอิงถึงตัวเองได้ อาจถูกพิจารณาว่าเป็นกระบวนทัศน์การเขียนโปรแกรมอย่างหนึ่งได้เช่นกัน อย่างไรก็ตาม นี่เป็นเพียงการเข้ากันได้กับกระบวนทัศน์หลักๆ ดังนั้นจึงไม่ใช่กระบวนทัศน์ที่แท้จริงในตัวของมันเอง
ดูเพิ่มเติม
ลิงก์ภายนอก
- การจำแนกประเภทของกระบวนทัศน์การเขียนโปรแกรมหลัก
- รูปแบบการเขียนโปรแกรมพัฒนาและได้รับการยอมรับได้อย่างไร?
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ รูปแบบการเขียนโปรแกรม
รูปแบบการเขียนโปรแกรมคือวิธีการคิดและโครงสร้างระดับสูงในการดำเนินการโปรแกรมคอมพิวเตอร์ภาษาโปรแกรมสามารถจำแนกได้ว่ารองรับรูปแบบการเขียนโปรแกรมหนึ่งรูปแบบหรือหลายรูปแบบ
ภาพรวม
รูปแบบการเขียนโปรแกรมมาจาก งานวิจัย ทางวิทยาศาสตร์คอมพิวเตอร์ เกี่ยวกับแนวทางปฏิบัติที่มีอยู่ใน การพัฒนาซอฟต์แวร์ ผลการวิจัยช่วยให้สามารถอธิบายและเปรียบเทียบแนวทางการเขียนโปรแกรมและภาษาที่ใช้ในการเขียนโปรแกรมได้ เพื่อเป็นข้อมูลประกอบ งานวิจัยในสาขาอื่น ๆ...
การวิจารณ์
นักวิจัยภาษาโปรแกรมบางคนวิจารณ์แนวคิดเรื่องกระบวนทัศน์ในการจำแนกประเภทของภาษาโปรแกรม เช่น Harper [ 9 ] และ Krishnamurthi [ 10 ] พวกเขาโต้แย้งว่าภาษาโปรแกรมหลายภาษาไม่สามารถจำแนกได้อย่างเคร่งครัดให้อยู่ในกระบวนทัศน์เดียว...
ประวัติศาสตร์
วิธีการเขียนโปรแกรมที่แตกต่างกันได้พัฒนาขึ้นตามกาลเวลา การจำแนกประเภทของแต่ละวิธีนั้นมักจะถูกอธิบายไว้ในขณะที่วิธีนั้นได้รับการพัฒนาขึ้นเป็นครั้งแรก แต่บ่อยครั้งที่ไม่ได้ถูกอธิบายจนกระทั่งเวลาผ่านไปนานแล้วในภายหลัง วิธี การเขียน โปรแกรมแบบมีโครงสร้าง...