วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

2
การสร้างฟังก์ชั่นที่ซ้อนกันเพื่อเหตุผลด้านสุนทรียะล้วนๆ?
ฉันสงสัยอยู่เสมอว่าโปรแกรมเมอร์คนอื่น ๆ คิดอย่างไรเกี่ยวกับความคิดในการสร้างฟังก์ชั่นความงามที่บริสุทธิ์ Function ProcessBigDataว่าฉันมีฟังก์ชั่นที่ประมวลผลชิ้นของข้อมูลที่: Step1บอกว่าผมต้องทำตามขั้นตอนกระบวนการหลายใช้ได้เฉพาะสำหรับข้อมูลที่: Step2, Step3, aproach ปกติฉันเห็นมากที่สุดในซอร์สโค้ดคือการเขียนความเห็นเช่น: Function ProcessBigData: # Does Step1 Step1.. Step1.. #Does Step2 Step2.. Step2.. สิ่งที่ฉันมักจะทำ แต่มักจะรู้สึกผิดเพราะขาดรูปแบบการเข้ารหัสโดยเพื่อนร่วมงานคือ: Function ProcessBigData: Function Step1: Step1.. Step1.. Function Step2: Step2.. Step2.. Step1() -> Step2() ฉันเป็นห่วงถ้ามีข้อเสียสำหรับสไตล์ดังกล่าวในJavascriptและPython มีทางเลือกอื่นที่ฉันไม่เห็นหรือไม่?

5
วิธีหลีกเลี่ยงวิธีการมากไปที่มากไป?
เรามีสถานที่ค่อนข้างมากในซอร์สโค้ดของแอปพลิเคชันของเราที่คลาสหนึ่งมีวิธีการมากมายที่มีชื่อเดียวกันและพารามิเตอร์ที่แตกต่างกัน วิธีการเหล่านั้นมักจะมีพารามิเตอร์ทั้งหมดของวิธี 'ก่อนหน้า' บวกอีกหนึ่ง มันเป็นผลมาจากวิวัฒนาการที่ยาวนาน (รหัสดั้งเดิม) และความคิดนี้ (ฉันเชื่อ): " มีวิธี M ที่ทำสิ่ง A. ฉันต้องทำ A + B ตกลงฉันรู้ ... ฉันจะเพิ่มพารามิเตอร์ใหม่ให้กับ M สร้างวิธีการใหม่เพื่อย้ายรหัสจาก M ไปยังวิธีใหม่ ด้วยพารามิเตอร์อีกหนึ่งตัวให้ทำ A + B ตรงนั้นแล้วเรียกวิธีการใหม่จาก M ด้วยค่าเริ่มต้นของพารามิเตอร์ใหม่ " นี่คือตัวอย่าง (ในภาษา Java-like-language): class DocumentHome { (...) public Document createDocument(String name) { // just calls another method with …

6
จากมุมมองของ TDD ฉันเป็นคนไม่ดีถ้าฉันทดสอบกับจุดสิ้นสุดสดแทนการเยาะเย้ย
ฉันติดตาม TDD อย่างเคร่งครัด โครงการของฉันมักจะมี 85% หรือครอบคลุมการทดสอบที่ดีขึ้นพร้อมกรณีทดสอบที่มีความหมาย ฉันทำงานมากกับHBaseและอินเทอร์เฟซไคลเอนต์หลัก HTable เป็นความเจ็บปวดที่แท้จริงในการเยาะเย้ย ฉันใช้เวลาในการเขียนการทดสอบหน่วยของฉันนานกว่า 3 ถึง 4 เท่ากว่าการเขียนการทดสอบที่ใช้จุดปลายจริง ฉันรู้ว่าในทางปรัชญาการทดสอบที่ใช้ mocks ควรให้ความสำคัญมากกว่าการทดสอบที่ใช้จุดสิ้นสุดแบบสด แต่การเยาะเย้ยHTableเป็นความเจ็บปวดที่ร้ายแรงและฉันไม่แน่ใจว่าจริง ๆ แล้วมันมีข้อได้เปรียบมากกว่าการทดสอบกับ HBase แบบสด ทุกคนในทีมของฉันใช้อินสแตนซ์ HBase แบบโหนดเดียวบนเวิร์กสเตชันของพวกเขาและเรามีอินสแตนซ์ HBase แบบโหนดเดียวที่ทำงานบนกล่องเจนกินส์ของเราดังนั้นจึงไม่มีปัญหาเรื่องความพร้อมใช้งาน เห็นได้ชัดว่าการทดสอบจุดสิ้นสุดแบบสดใช้เวลานานกว่าการทดสอบที่ใช้ mocks แต่เราไม่สนใจสิ่งนั้น ตอนนี้ฉันเขียนการทดสอบจุดปลายสดและการทดสอบตามแบบจำลองสำหรับชั้นเรียนของฉันทั้งหมด ฉันชอบที่จะขุด mocks แต่ฉันไม่ต้องการให้มีคุณภาพลดลงเป็นผล คุณคิดอย่างไร?

3
สับสนเกี่ยวกับคำจำกัดความของ 'abstraction' ใน OOP
ฉันพยายามที่จะเข้าใจความหมายของ 'abstraction' ใน OOP ฉันได้เจอคำจำกัดความหลักสองสามข้อ พวกเขาทั้งหมดถูกต้องหรือไม่ เป็นหนึ่งในพวกเขาผิดหรือเปล่า? ฉันสับสน (ฉันเขียนคำจำกัดความใหม่ด้วยคำพูดของตัวเอง) คำจำกัดความ 1: สิ่งที่เป็นนามธรรมเป็นแนวคิดของการหยิบวัตถุบางอย่างจากโลกแห่งความเป็นจริงและแปลงเป็นเงื่อนไขการเขียนโปรแกรม เช่นการสร้างHumanการเรียนและให้มันint health, int age, String nameฯลฯ คุณสมบัติและeat()วิธีการอื่น ๆ คำจำกัดความ 2: คำจำกัดความทั่วไปมากขึ้น Abstraction เป็นแนวคิดที่เกิดขึ้นได้ทุกที่ในระบบซอฟต์แวร์ที่เกี่ยวข้องกับ'การทำให้สิ่งต่าง ๆเป็นเรื่องธรรมดา/ ง่ายขึ้น / เป็นนามธรรม' ตัวอย่างบางส่วน: ลำดับชั้นการสืบทอดที่คลาสที่สูงกว่าง่ายกว่าหรือทั่วไปกว่าและกำหนดการใช้งานทั่วไปและนามธรรมมากขึ้น ในขณะที่คลาสที่ต่ำกว่าในลำดับชั้นนั้นเป็นรูปธรรมมากขึ้นและกำหนดการใช้งานที่มีรายละเอียดมากขึ้น การใช้การห่อหุ้มเพื่อซ่อนรายละเอียดของการใช้คลาสจากคลาสอื่น ๆ จึงทำให้คลาส 'นามธรรม' (ง่ายกว่า) สู่โลกของซอฟต์แวร์ภายนอก คำจำกัดความ 3 นิยามทั่วไปอีกประการหนึ่ง: Abstraction เป็นแนวคิดของการย้ายโฟกัสจากรายละเอียดและการใช้สิ่งต่าง ๆ อย่างเป็นรูปธรรมกับประเภทของสิ่งต่าง ๆ (เช่นคลาส) การดำเนินการที่มีอยู่ (เช่นวิธีการ) ฯลฯ …

4
เป็นเรื่องปกติหรือไม่ที่นักพัฒนาซอฟต์แวร์จะแนะนำแนวคิดเกี่ยวกับคุณสมบัติให้กับเจ้าของผลิตภัณฑ์? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเพิ่งเริ่มทำงานในฐานะนักพัฒนาซอฟต์แวร์เมื่อไม่นานมานี้โดยทำงานเป็นผู้ดูแลระบบมาก่อน ความเข้าใจของฉันเกี่ยวกับวิธีการที่ทีมพัฒนาซอฟต์แวร์ใช้ฟังก์ชั่น Agile คือการสื่อสาร "สิ่งที่เราต้องใช้" นั้นส่วนใหญ่เกิดขึ้นในทิศทางเดียวตั้งแต่เจ้าของผลิตภัณฑ์ไปจนถึงนักพัฒนา นักพัฒนาซอฟต์แวร์สามารถแสดงความกังวลต่อเจ้าของผลิตภัณฑ์เกี่ยวกับหนี้ทางเทคนิค แต่การหาแนวคิดเกี่ยวกับคุณลักษณะไม่ควรเป็นหนึ่งในความรับผิดชอบหลักของพวกเขา บริษัท ที่ฉันทำงานอยู่มีมุมมองที่ต่างออกไป สำหรับพวกเขาผู้พัฒนาไม่ควรเพียงไปที่เจ้าของผลิตภัณฑ์ของทีมของตนเองเพื่อแนะนำแนวคิดเกี่ยวกับฟีเจอร์ แต่ยังรวมถึงเจ้าของผลิตภัณฑ์ของทีมอื่นด้วย แนวคิดคือเราทุกคนเป็นทีมใหญ่ <ชื่อ บริษัท > และนักพัฒนาทุกคนควรใช้ความเชี่ยวชาญของพวกเขาเพื่อผลักดันคุณสมบัติที่พวกเขาคิดว่าจะมีประโยชน์ วิธีการดังกล่าวเป็น "ปกติ" เพราะขาดคำดีกว่าหรือไม่ ฉันเป็นคนที่เฉยเมยเกินไปฉันควรจะริเริ่มและเริ่มผลักดันแนวคิดไปยังเจ้าของผลิตภัณฑ์หรือไม่? ในทางกลับกัน บริษัท ได้ทำผิดอย่างสมบูรณ์และฉันควรมองหางานที่อื่นหรือไม่?

4
เหตุใดรหัสเครื่องดั้งเดิมจึงไม่สามารถถอดรหัสได้อย่างง่ายดาย
ด้วยภาษาที่ใช้เครื่องเสมือนของ bytecode เช่น Java, VB.NET, C #, ActionScript 3.0 เป็นต้นบางครั้งคุณได้ยินเกี่ยวกับความง่ายในการดาวน์โหลดตัวแยกข้อมูลออกจากอินเทอร์เน็ตเรียกใช้ bytecode ในช่วงเวลาที่ดีและ บ่อยครั้งเกิดขึ้นกับสิ่งที่ไม่ไกลจากซอร์สโค้ดต้นฉบับในไม่กี่วินาที สมมุติว่าภาษาแบบนี้มีความเสี่ยงเป็นพิเศษ ฉันเพิ่งเริ่มสงสัยว่าทำไมคุณไม่ได้ยินเพิ่มเติมเกี่ยวกับเรื่องนี้เกี่ยวกับรหัสไบนารี่พื้นเมืองเมื่ออย่างน้อยคุณก็รู้ว่าภาษานั้นถูกเขียนเป็นภาษาดั้งเดิม (และภาษาใดที่จะพยายามถอดรหัส) เป็นเวลานานฉันคิดว่ามันเป็นเพียงเพราะภาษาเครื่องพื้นเมืองบ้าคลั่งมากและซับซ้อนกว่า bytecode ทั่วไป แต่โค้ดไบต์มีลักษณะอย่างไร ดูเหมือนว่านี้: 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 และรหัสเครื่องดั้งเดิมมีลักษณะอย่างไร (เป็นเลขฐานสิบหก) แน่นอนมันมีลักษณะเช่นนี้: 1000: 2A 40 F0 14 1001: …

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

2
อัลกอริทึมสำหรับการค้นหาแท็กที่รวดเร็ว
ปัญหาดังต่อไปนี้ มีชุดเอนทิตี้เรียบง่าย E แต่ละชุดมีแท็ก T ติดอยู่ แต่ละเอนทิตีอาจมีแท็กจำนวนเท่าใดก็ได้ จำนวนเอนทิตีทั้งหมดอยู่ใกล้ 100 ล้านและจำนวนแท็กทั้งหมดประมาณ 5000 ดังนั้นข้อมูลเริ่มต้นจะเป็นดังนี้: E1 - T1, T2, T3, ... Tn E2 - T1, T5, T100, ... Tk .. Ez - T10, T12, ... Tl ข้อมูลเริ่มต้นนี้มีการปรับปรุงค่อนข้างน้อย แอพของฉันสร้างนิพจน์เชิงตรรกะบนแท็กเช่นนี้: T1 & T2 & T3 | (T5 &! T6) สิ่งที่ฉันต้องการคือการคำนวณจำนวนเอนทิตีที่ตรงกับนิพจน์ที่กำหนด (หมายเหตุ - ไม่ใช่เอนทิตี แต่เป็นเพียงตัวเลข) อันนี้อาจไม่ถูกต้องแน่นอน …

8
กระบวนการตรวจสอบโค้ดทั่วไปคืออะไรและอะไรที่ถือว่าไม่ดี
บริษัท ของฉันเพิ่งเริ่มทำการตรวจสอบโค้ดอย่างเป็นทางการ กระบวนการดังกล่าวเป็นเช่นนี้: คุณส่งไปยัง GitHub, ร้องขอการดึง, โค้ดจะได้รับการตรวจสอบโดยคนประมาณสามคนจากนั้นถ้าผ่านไปทั้งหมด, รหัสของคุณจะเข้า กระบวนการดูเหมือนยุติธรรม แต่คนสามคนที่ทำรีวิวโค้ดดูเหมือนจะไม่ยุติธรรม ฉันสังเกตเห็นว่าเมื่อฉันใส่รหัสของฉันในการตรวจสอบฉันได้ทุกที่ระหว่าง 100-200 ความคิดเห็น หมายเลขสูงสุดสำหรับฉันคือ 300 ความคิดเห็นครั้งเดียว แน่นอนว่าคุณคิดว่ามันเป็นการเปลี่ยนแปลงครั้งใหญ่ แต่นี่อาจเป็นการเปลี่ยนแปลงเล็กน้อยมากพร้อมกับรหัสน้อยกว่า 50 บรรทัด (ซึ่งรวมถึงการทดสอบหน่วย) ความคิดเห็นทั้งหมดได้รับการพิจารณาว่า "ต้องทำ" และไม่มีข้อโต้แย้ง โดยที่ในใจปัญหาหลักของฉันที่นี่คือดูเหมือนว่ามากเกินไป ฉันได้พูดคุยกับกลุ่มและพวกเขาบอกฉันโดยทั่วไปว่าเพียงเพราะฉันมีเวลาหลายปีในการพัฒนา php ไม่ได้หมายความว่าฉันเป็น "นักพัฒนา" ของหลักสูตรนี้ดูเหมือนจะเป็นอันตรายมากกว่าไม่ นอกจากนี้ฉันสังเกตเห็นว่าภายในกลุ่มพวกเขาไม่ได้แสดงความคิดเห็นมากนักและส่วนใหญ่พวกเขาเพิกเฉยหรือไม่สนใจข้อคิดเห็นหรือคำแนะนำอื่น ๆ ที่ไม่ค่อยยอมรับว่าเป็นจุดที่ถูกต้องแม้ว่าจะมีบางอย่างขาดหายไป ดังนั้นคำถามของฉันคือถ้านี้ยุติธรรม หรือเป็นเรื่องธรรมดา?

4
เหตุใดจึงยากที่จะรับสมัครงานคอมไพเลอร์ [- เกี่ยวข้อง] [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เมื่อสัปดาห์ที่แล้วมีผู้ร่วมงานไม่กี่คนและฉันได้เข้าร่วมงานแสดงสินค้าในมหาวิทยาลัยที่สำคัญสามแห่ง (สองแห่งที่นี่ในสหรัฐอเมริกาและอีกแห่งในอังกฤษ) ซึ่งเราพยายาม (ไม่ประสบความสำเร็จมาก) ในการคัดเลือกผู้รวบรวมหลายตำแหน่งตั้งแต่ฝึกงานจนถึง รายการระดับ, ถึงอาวุโสมากขึ้นสำหรับทีมของเรา ด้วยความประหลาดใจของเรา 80% ของนักเรียนที่เราพูดคุยเพื่อตอบสนองต่อแถวยาวของ "ฉันต้องการสร้างแอป Ansroid" เมื่อถามว่าพวกเขาสนใจทำอะไร (และอีก 20% "แอป iPhone"!) บางคนแสดงอย่างเปิดเผยว่าพวกเขาไม่ได้ "ต้องการสร้างคอมไพเลอร์ ... มันน่าเบื่อ"; พวกเขาพูดและฉันพูด ดังนั้นเกี่ยวกับแอพมือถือที่ดึงดูด (รุ่นเยาว์) "ผู้พัฒนา" ในทุกวันนี้คืออะไร? และด้วยโทเค็นเดียวกันทำไมคอมไพเลอร์จึงมีหัวข้อ "น่าเบื่อ" สำหรับพวกเขา (ฉันไม่จำเป็นต้องคิดว่าทั้งสองนี้มีความพิเศษซึ่งกันและกันอย่างใดอย่างหนึ่งสามารถสร้างคอมไพเลอร์สำหรับโทรศัพท์มือถือได้ แต่ก็อยู่ข้างๆ) หากมีสิ่งใดที่เราสามารถทำได้เพื่อดึงดูดคนที่มีความสามารถมากขึ้นหรือแม้แต่ผู้สมัครที่สนใจ?

4
มีความแตกต่างระหว่าง iterable และ enumerable หรือไม่?
หลายภาษาดูเหมือนจะมีโครงสร้างที่คล้ายกันมากเรียกว่า iterable หรือ enumerable สิ่งเหล่านี้เป็นโครงสร้างที่สามารถทำซ้ำหรือแจกแจงซึ่งดูเหมือนสิ่งที่คล้ายกันมากกับฉัน คำเหล่านี้มีความหมายเหมือนกันหรือมีความหมายแตกต่างกันเล็กน้อยระหว่าง iterable และ enumerable ซึ่งแสดงให้เห็นถึงการเลือกคำศัพท์หรือไม่?

2
อินเทอร์เฟซที่ไม่มีผลข้างเคียงที่ด้านบนของไลบรารี stateful
ในการให้สัมภาษณ์กับ John Hughesที่ซึ่งเขาพูดเกี่ยวกับ Erlang และ Haskell เขามีดังต่อไปนี้ที่จะพูดเกี่ยวกับการใช้ห้องสมุด stateful ใน Erlang: ถ้าฉันต้องการใช้ไลบรารี stateful ฉันมักจะสร้างอินเทอร์เฟซที่ไม่มีผลข้างเคียงเพื่อให้ฉันสามารถใช้อย่างปลอดภัยในส่วนที่เหลือของรหัสของฉัน สิ่งนี้หมายความว่าอย่างไร ฉันพยายามคิดถึงตัวอย่างว่าสิ่งนี้จะมีลักษณะอย่างไร แต่จินตนาการและ / หรือความรู้ของฉันทำให้ฉันล้มเหลว

3
ยาชื่อสามัญมีการใช้งานอย่างไร?
นี่คือคำถามจากมุมมองภายในของคอมไพเลอร์ ฉันสนใจ generics ไม่ใช่แม่แบบ (C ++) ดังนั้นฉันจึงทำเครื่องหมายคำถามด้วย C # ไม่ใช่ Java เพราะ AFAIK ข้อมูลทั่วไปในทั้งสองภาษานั้นแตกต่างกันในการนำไปใช้งาน เมื่อฉันดูภาษาที่ไม่มี generics มันค่อนข้างตรงไปตรงมาคุณสามารถตรวจสอบคำจำกัดความของคลาสเพิ่มลงในลำดับชั้นและนั่นคือมัน แต่จะทำอย่างไรกับชั้นเรียนทั่วไปและที่สำคัญกว่านั้นจัดการกับการอ้างอิงได้อย่างไร วิธีตรวจสอบให้แน่ใจว่าฟิลด์คงที่นั้นเป็นเอกพจน์ต่ออินสแตนซ์ (เช่นแต่ละครั้งที่พารามิเตอร์ทั่วไปได้รับการแก้ไข) สมมติว่าฉันเห็นสาย: var x = new Foo<Bar>(); ฉันจะเพิ่มFoo_Barคลาสใหม่ให้กับลำดับชั้นหรือไม่ อัปเดต:จนถึงตอนนี้ฉันพบเพียง 2 โพสต์ที่เกี่ยวข้อง แต่ถึงแม้ว่าพวกเขาจะไม่ได้ลงรายละเอียดมากในแง่ "วิธีการทำด้วยตัวเอง": http://www.jprl.com/Blog/archive/development/2007/Aug-31.html http://www.artima.com/intv/generics2.html
16 c#  generics 

5
คุณสมบัติ C ++ ของทั้งทีม?
ใน C ++ คุณสมบัติเช่นข้อยกเว้นส่งผลกระทบต่อโปรแกรมทั้งหมดของคุณ: คุณสามารถปิดการใช้งานพวกเขาในโปรแกรมทั้งหมดของคุณหรือคุณต้องจัดการกับพวกเขาตลอดรหัสของคุณ ในฐานะที่เป็นบทความที่มีชื่อเสียง ในรายงาน C ++ทำให้มัน: ตอบโต้ส่วนที่ยากของข้อยกเว้นการเข้ารหัสไม่ใช่การขว้างและจับอย่างชัดเจน ส่วนที่ยากมากของการใช้ข้อยกเว้นคือการเขียนรหัสการแทรกแซงทั้งหมดในลักษณะที่ข้อยกเว้นโดยพลการสามารถแพร่กระจายจากไซต์ที่ส่งไปยังผู้จัดการของตนมาถึงอย่างปลอดภัยและไม่ทำให้ส่วนอื่น ๆ ของโปรแกรมเสียหายไปตลอดทาง เนื่องจากแม้จะมีการnewยกเว้นข้อยกเว้นทุกฟังก์ชั่นจะต้องให้ความปลอดภัยข้อยกเว้นขั้นพื้นฐาน - ยกเว้นว่าจะเรียกเฉพาะฟังก์ชั่นที่รับประกันว่าจะไม่มีข้อยกเว้น - เว้นแต่คุณจะปิดการใช้งานข้อยกเว้นทั้งหมดในโครงการทั้งหมดของคุณจนกว่าคุณจะปิดการใช้งานข้อยกเว้นโดยสิ้นเชิงในโครงการทั้งหมดของคุณ ดังนั้นข้อยกเว้นเป็นคุณลักษณะ "ทั้งโปรแกรม" หรือ "ทั้งทีม" เนื่องจากทุกคนในทีมต้องใช้ความเข้าใจ แต่ไม่ใช่ว่าคุณสมบัติ C ++ ทั้งหมดจะเป็นอย่างนั้นเท่าที่ฉันรู้ ตัวอย่างที่เป็นไปได้คือถ้าฉันไม่ได้รับเท็มเพลต แต่ฉันไม่ได้ใช้มันฉันจะยังสามารถเขียน C ++ ที่ถูกต้องได้หรือไม่? ฉันสามารถโทรsortหาอาเรย์ของจำนวนเต็มและเพลิดเพลินไปกับความได้เปรียบความเร็วที่น่าทึ่งของมัน C qsort(เพราะไม่มีตัวชี้ฟังก์ชั่นถูกเรียก) โดยไม่เสี่ยงต่อข้อบกพร่อง - หรือไม่? ดูเหมือนว่าเทมเพลตไม่ใช่ "ทั้งทีม" มีฟีเจอร์ C ++ อื่น ๆ ที่ส่งผลกระทบต่อรหัสที่ไม่ได้ใช้งานโดยตรงและเป็น "ทั้งทีม" หรือไม่? ฉันสนใจคุณสมบัติพิเศษที่ไม่มีใน C. …

1
ทำความเข้าใจกับรูปแบบของผู้มาเยี่ยม
ฉันมีลำดับชั้นของชั้นเรียนที่แสดงถึงการควบคุม GUI บางสิ่งเช่นนี้ Control->ContainerControl->Form ฉันต้องใช้ชุดของ algoritms ที่ทำงานกับวัตถุที่ทำสิ่งต่าง ๆ และฉันคิดว่ารูปแบบของผู้เข้าชมจะเป็นวิธีที่สะอาดที่สุด ลองยกตัวอย่างเช่นอัลกอริทึมที่สร้าง Xml Representaion ของลำดับชั้นของวัตถุ ใช้วิธี 'คลาสสิค' ฉันจะทำสิ่งนี้: public abstract class Control { public virtual XmlElement ToXML(XmlDocument document) { XmlElement xml = document.CreateElement(this.GetType().Name); // Create element, fill it with attributes declared with control return xml; } } public abstract class ContainerControl : …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.