คำถามติดแท็ก procedural

16
เหตุใดผู้ประกอบการที่ผู้ใช้กำหนดเองจึงไม่ได้พบเห็นได้บ่อยนัก
ฟีเจอร์หนึ่งที่ฉันพลาดจากภาษาที่ใช้งานได้คือความคิดที่ว่าโอเปอเรเตอร์เป็นแค่ฟังก์ชั่นดังนั้นการเพิ่มโอเปอเรเตอร์ที่กำหนดเองมักจะง่ายเหมือนการเพิ่มฟังก์ชั่น ภาษาเชิงโพรซีเดอร์จำนวนมากอนุญาตให้โอเปอเรเตอร์โอเวอร์โหลดดังนั้นในบางโอเปอเรเตอร์จะยังคงใช้งานได้ (นี่เป็นความจริงในDที่โอเปอเรเตอร์ถูกส่งเป็นสตริงในพารามิเตอร์เทมเพลต) ดูเหมือนว่าที่อนุญาตให้ผู้ประกอบการมากเกินไปก็มักจะเล็กน้อยเพื่อเพิ่มผู้ประกอบการที่กำหนดเองเพิ่มเติม ฉันพบโพสต์บล็อกนี้ซึ่งระบุว่าตัวดำเนินการที่กำหนดเองไม่ได้ทำงานได้ดีกับสัญกรณ์ของ infix เนื่องจากกฎที่มีมาก่อน แต่ผู้เขียนให้วิธีการแก้ไขปัญหาหลายประการ ฉันมองไปรอบ ๆ และไม่พบภาษาที่ใช้ในการดำเนินการใด ๆ ที่รองรับตัวดำเนินการที่กำหนดเองในภาษานั้น มีแฮ็ก (เช่นมาโครใน C ++) แต่แทบจะไม่เหมือนกับภาษาที่รองรับ เนื่องจากคุณสมบัตินี้ค่อนข้างง่ายต่อการนำไปใช้ทำไมจึงไม่เป็นเรื่องปกติ ฉันเข้าใจว่ามันอาจนำไปสู่โค้ดที่น่าเกลียด แต่ที่ไม่ได้หยุดนักออกแบบภาษาในอดีตจากการเพิ่มคุณสมบัติที่มีประโยชน์ที่สามารถถูกทำร้ายได้ง่าย (มาโครผู้ประกอบการที่ประกอบไปด้วยตัวชี้ที่ไม่ปลอดภัย) กรณีการใช้งานจริง: ใช้โอเปอเรเตอร์ที่หายไป (เช่น Lua ไม่มีโอเปอเรเตอร์ bitwise) Mimic D's ~(การต่อข้อมูลอาร์เรย์) DSLs ใช้|เป็นไวยากรณ์น้ำตาลแบบ Unix pipe (ใช้ coroutines / generators) ฉันมีความสนใจในภาษาที่ทำให้ผู้ประกอบการที่กำหนดเอง แต่ฉันสนใจมากขึ้นในเหตุผลที่จะได้รับการยกเว้น ฉันคิดถึงการใช้ภาษาสคริปต์เพื่อเพิ่มโอเปอเรเตอร์ที่ผู้ใช้กำหนด แต่หยุดตัวเองเมื่อฉันรู้ว่าฉันไม่เห็นมันเลยดังนั้นอาจมีเหตุผลที่ดีที่นักออกแบบภาษาฉลาดกว่าที่ฉันไม่อนุญาต

12
เหตุใด C จึงไม่ถือว่าเป็นภาษา 'เชิงวัตถุ'
ดูเหมือนว่า C มีวัตถุเสมือนของตัวเองเช่น 'structs' ซึ่งถือได้ว่าเป็นวัตถุ (ในระดับสูงที่เราคิดว่าปกติ) และไฟล์ C เองก็แยก "โมดุล" เป็นหลักใช่มั้ย ถ้าเช่นนั้นโมดูลก็ไม่เหมือน 'วัตถุ' ด้วยใช่ไหม ฉันสับสนว่าทำไม C ซึ่งดูเหมือนคล้ายกับ C ++ ถือเป็นภาษา "ขั้นตอน" ในระดับต่ำซึ่ง C ++ เป็นระดับสูง "เชิงวัตถุ" * แก้ไข: (ชี้แจง) สาเหตุและสถานที่มีการลากเส้นสำหรับ 'วัตถุ' คืออะไรและไม่?

4
ความแตกต่างระหว่างการเขียนโปรแกรมที่จำเป็นขั้นตอนและมีโครงสร้างคืออะไร?
จากการค้นคว้าข้อมูล (หนังสือ, Wikipedia, คำถามที่คล้ายกันใน SE และอื่น ๆ ) ฉันมาทำความเข้าใจว่าการเขียนโปรแกรมที่จำเป็นเป็นหนึ่งในกระบวนทัศน์การเขียนโปรแกรมที่สำคัญซึ่งคุณอธิบายชุดคำสั่ง (หรือคำสั่ง) เพื่อให้คอมพิวเตอร์ทำงานได้ มากเพื่อที่จะดำเนินการเฉพาะดังนั้นชื่อ "จำเป็น") จนถึงตอนนี้ดีมาก ในทางกลับกันการเขียนโปรแกรมตามขั้นตอนเป็นประเภทเฉพาะ (หรือชุดย่อย) ของการโปรแกรมเชิงซ้อนซึ่งคุณใช้ขั้นตอน (เช่นฟังก์ชั่น) เพื่ออธิบายคำสั่งที่คอมพิวเตอร์ควรทำ คำถามแรก : มีภาษาโปรแกรมที่จำเป็นซึ่งไม่ได้เป็นขั้นตอนหรือไม่? กล่าวอีกนัยหนึ่งคุณสามารถตั้งโปรแกรมที่จำเป็นโดยไม่ต้องดำเนินการได้หรือไม่? ปรับปรุง : คำถามแรกนี้ดูเหมือนว่าจะตอบ ภาษามีความจำเป็นโดยไม่ต้องมีขั้นตอนหรือโครงสร้าง ตัวอย่างคือภาษาแอสเซมบลีบริสุทธิ์ จากนั้นคุณก็มีโปรแกรมแบบมีโครงสร้างซึ่งน่าจะเป็นประเภทอื่น (หรือส่วนย่อย) ของการโปรแกรมแบบไม่มีความจำเป็นซึ่งเกิดขึ้นเพื่อลบการเชื่อมั่นในคำสั่ง GOTO คำถามที่สอง : ความแตกต่างระหว่างการเขียนโปรแกรมแบบขั้นตอนและแบบโครงสร้างคืออะไร คุณสามารถมีหนึ่งโดยไม่มีอื่น ๆ และในทางกลับกัน? เราสามารถพูดได้หรือไม่ว่าการเขียนโปรแกรมเชิงกระบวนงานเป็นส่วนหนึ่งของการเขียนโปรแกรมเชิงโครงสร้างเช่นเดียวกับในภาพ

12
ประโยชน์ของการเขียนโปรแกรมเชิงวัตถุบนการเขียนโปรแกรมตามขั้นตอนคืออะไร
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างภาษาเชิงปฏิบัติเช่น C และภาษาเชิงวัตถุเช่น C ++ ฉันไม่เคยใช้ C ++ แต่ฉันได้คุยกับเพื่อน ๆ เกี่ยวกับวิธีแยกแยะทั้งสอง ฉันได้รับการบอกว่า C ++ มีแนวคิดเชิงวัตถุเช่นเดียวกับโหมดสาธารณะและส่วนตัวสำหรับการกำหนดตัวแปร: สิ่งที่ C ไม่มี ฉันไม่เคยใช้สิ่งเหล่านี้ในขณะที่กำลังพัฒนาโปรแกรมใน Visual Basic.NET: ประโยชน์ของสิ่งเหล่านี้คืออะไร? ฉันได้รับแจ้งด้วยว่าหากตัวแปรเป็นแบบสาธารณะมันสามารถเข้าถึงได้ทุกที่ แต่ไม่ชัดเจนว่ามันแตกต่างจากตัวแปรทั่วโลกในภาษาเช่น C หรือไม่และยังไม่ชัดเจนว่าตัวแปรส่วนตัวแตกต่างจากตัวแปรท้องถิ่นอย่างไร อีกสิ่งหนึ่งที่ฉันได้ยินคือเพื่อเหตุผลด้านความปลอดภัยหากจำเป็นต้องเข้าถึงฟังก์ชั่นควรได้รับการสืบทอดก่อน กรณีใช้งานคือผู้ดูแลระบบควรมีสิทธิ์มากเท่าที่ต้องการและไม่ใช่ทุกอย่าง แต่ดูเหมือนว่าเงื่อนไขจะทำงานได้ดี: if ( login == "admin") { // invoke the function } ทำไมสิ่งนี้จึงไม่เหมาะ เนื่องจากดูเหมือนว่าจะมีวิธีการในการทำทุกอย่างที่เกี่ยวกับวัตถุทำไมฉันจึงควรใส่ใจเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ

4
การเขียนโปรแกรมเชิงขั้นตอนคืออะไร? มันแตกต่างจาก OOP อย่างไร? มันเหมือนกับการเขียนโปรแกรมฟังก์ชั่น?
ฉันกำลังเขียนโปรแกรมในJavaในรูปแบบ object-oriented (OO) OOP มาถึงฉันอย่างสังหรณ์ใจ แต่ฉันมีความรู้น้อยมากเกี่ยวกับการเขียนโปรแกรมชนิดอื่น การเขียนโปรแกรมเชิงขั้นตอนคืออะไร? มันแตกต่างจาก OOP อย่างไร? มันเป็นสิ่งเดียวกับการเขียนโปรแกรมฟังก์ชั่น ? ฉันเคยคิดว่าการเขียนโปรแกรมทั้งหมดที่ไม่ใช่ OO นั้นเป็นขั้นตอน แต่ฉันเริ่มคิดว่ามันไม่เป็นความจริง

7
รูปแบบการออกแบบของยุคการเขียนโปรแกรมขั้นตอนคืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ที่คล้ายกัน: การเขียนโปรแกรมทำได้อย่างไรเมื่อ 20 ปีที่แล้ว? OOPเป็นแฟชั่นค่อนข้างปัจจุบันมีรากในSimula 67ในปี 1960 และต่อมาได้รับความนิยมจากสมอลล์ทอล์คและC ++ เรามีหนังสือแห้งหนังสือหลายเล่มเกี่ยวกับรูปแบบการออกแบบในโลกแห่งวัตถุ แต่สิ่งที่เป็นหลักการสำคัญในการเขียนโปรแกรมก่อนที่จะนำ OOP กระบวนทัศน์ที่กว้าง? และรูปแบบการออกแบบที่สำคัญคืออะไร

5
การทดสอบหน่วยรหัสขั้นตอนมีประสิทธิภาพ?
ในโครงการปัจจุบันอำนาจที่ต้องการให้มีการทดสอบหน่วยรวมอยู่ในวงจรการพัฒนาของเราเพื่อหลีกเลี่ยงข้อผิดพลาดจำนวนคงที่ที่ดูเหมือนจะซึมเข้าไปในรหัสของเรา ปัญหาคือรหัสสปาเก็ตตี้นั้นเป็นขั้นตอน 95% ซึ่งฉันไม่เคยทำการทดสอบหน่วยด้วย (ประสบการณ์ทั้งหมดของฉันกับการทดสอบหน่วยได้รับด้วยรหัส OOP) ดังนั้นคำถามของฉันสั้น ๆ ก็ควรที่จะดำเนินการทดสอบหน่วยกับ codebase ปัจจุบันของเราหรือแนะนำให้เลื่อนออกไปจนกว่าแอปพลิเคชันจะถูกย้ายไปยังกรอบงาน OOP ที่เหมาะสมหรือไม่ PS: ในขณะที่ฉันพยายามจัดรูปแบบคำถามนี้เป็นผู้ไม่เชื่อเรื่องภาษาฉันรู้สึกว่าการระบุแอปพลิเคชันที่เป็นปัญหานั้นใช้ PHP และ javascript จะช่วยให้คำตอบที่เฉพาะเจาะจงมากขึ้นซึ่งสามารถตอบคำถามนี้ได้

4
วิธีที่สะอาดที่สุดในการเขียนซอฟต์แวร์ที่มีขั้นตอนตามหลักเหตุผลในภาษา OO
ฉันเป็นวิศวกรไฟฟ้าและฉันไม่รู้ว่าฉันทำอะไรอยู่ โปรดบันทึกผู้ดูแลรหัสของฉันในอนาคต เมื่อเร็ว ๆ นี้ฉันได้ทำงานกับโปรแกรมขนาดเล็กจำนวนมาก (ใน C #) ซึ่งฟังก์ชั่นการใช้งานเป็น "ขั้นตอน" ตามหลักเหตุผล ตัวอย่างเช่นหนึ่งในนั้นคือโปรแกรมที่รวบรวมข้อมูลจากฐานข้อมูลต่าง ๆ ใช้ข้อมูลนั้นเพื่อสร้างเรียงลำดับของหน้าสรุปพิมพ์และจากนั้นออก ตรรกะที่จำเป็นสำหรับทั้งหมดนั้นอยู่ที่ประมาณ 2,000 บรรทัด แน่นอนฉันไม่ต้องการสิ่งทั้งหมดในที่เดียวmain()แล้ว "ทำความสะอาด" กับ#regions เป็นนักพัฒนาก่อนหน้านี้ได้ทำ (ตัวสั่น) นี่คือบางสิ่งที่ฉันได้ลองไปแล้วโดยที่ไม่พึงพอใจมาก: สร้างยูทิลิตี้แบบคงที่สำหรับการใช้งานแต่ละบิตอย่างคร่าวๆเช่น DatabaseInfoGetter, SummaryPageGenerator และ PrintUtility ทำให้ฟังก์ชั่นหลักดูเหมือนว่า: int main() { var thisThing = DatabaseInfoGetter.GetThis(); var thatThing = DatabaseInfoGetter.GetThat(); var summary = SummaryPageGenerator.GeneratePage(thisThing, thatThing); PrintUtility.Print(summary); } สำหรับโปรแกรมหนึ่งฉันยังไปกับอินเตอร์เฟส int main() …

2
การเขียนโปรแกรมไปยังอินเทอร์เฟซ Data Oriented
มีบางส่วนของ codebase ของเราเขียนในรูปแบบต่อไปนี้: // IScheduledTask.cs public interface IScheduledTask { string TaskName { get; set; } int TaskPriority { get; set; } List<IScheduledTask> Subtasks { get; set; } // ... several more properties in this vein } // ScheduledTaskImpl.cs public class ScheduledTaskImpl : IScheduledTask { public string TaskName { get; set; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.