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

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

6
มีความแตกต่างระหว่างอินเตอร์เฟสและคลาส abstract ที่มีเมธอด abstract เท่านั้นหรือไม่?
สมมุติว่าเรามีคลาสนามธรรมและให้คลาสนี้มีวิธีนามธรรมเท่านั้น คลาสนามธรรมนี้แตกต่างจากอินเตอร์เฟสที่มีวิธีการเดียวกันเท่านั้นหรือไม่ สิ่งที่ฉันต้องการทราบคือหากมีความแตกต่างทั้งในเชิงปรัชญาวัตถุและในการใช้ภาษาโปรแกรมพื้นฐานระหว่างคลาสนามธรรมกับสมาชิกนามธรรมเท่านั้นและอินเทอร์เฟซที่เทียบเท่าหรือไม่

1
เป็นไปได้ที่การปรับปรุง Damerau-Levenshtein
ฉันเพิ่งใช้อัลกอริทึมระยะทาง Damerau-Levenshtein จาก pseudocode บน Wikipedia ฉันไม่สามารถหาคำอธิบายใด ๆ ว่าวิธีการทำงานและชื่อตัวแปรใช้ pseudocode uninformative สมบูรณ์เช่นDA, DB, i1และj1ที่เหลือฉันเกาหัวของฉัน นี่คือการใช้งานของฉันใน Python: https://gist.github.com/badocelot/5327337 การติดตั้ง Python ช่วยให้ฉันเดินผ่านโปรแกรมและค้นหาสิ่งที่เกิดขึ้นเปลี่ยนชื่อตัวแปรเป็นชื่อที่มีประโยชน์มากขึ้น ฉันคุ้นเคยกับแนวทางของ Wagner-Fischer มากพอที่จะคำนวณระยะทางของ Levenshtein ที่ฉันมีกรอบอ้างอิง ด้วยความเสี่ยงที่จะมีความยาวมากเกินไปนี่เป็นวิธีที่ฉันเข้าใจ Damerau-Levenshtein: ตัวแปรลึกลับ: DA( last_rowในรหัสของฉัน) เป็นแผนที่ชนิดหนึ่งที่ถือแถวสุดท้ายที่แต่ละองค์ประกอบถูกเห็น ในรหัสของฉันมันเป็นพจนานุกรม Python ที่แท้จริง DB( last_match_col) เก็บคอลัมน์สุดท้ายที่ตัวอักษรbตรงกับตัวอักษรในaแถวปัจจุบัน i1( last_matching_row) คือหมายเลขแถวจากDAสำหรับตัวอักษรปัจจุบันในb j1เป็นเพียงสำเนาของDB/ last_match_colก่อนที่จะอัปเดต ในรหัสของฉันฉันเพิ่งย้ายที่last_match_colมีการปรับปรุงและกำจัดตัวแปรนี้ ค่าขนย้าย: H[i1][j1] + (i-i1-1) + 1 + …

4
Spring - ความสับสนเกี่ยวกับการตั้งค่า?
ที่ไหนสักแห่งที่ฉันอ่านสปริงให้ความสะดวกสบายมากกว่าการตั้งค่า แต่คนในฤดูใบไม้ผลิกำลังนำการเปลี่ยนแปลงมามากมายในการกำหนดค่าซึ่งตอนนี้ฉันเริ่มสับสนแล้วที่จะใช้การกำหนดค่า xml หรือคำอธิบายประกอบ ฉันต้องการให้ทุกคนแนะนำวิธีการ Surefire หรือกฎง่ายๆในการใช้ xml และคำอธิบายประกอบ ตัวอย่างที่ SO เพื่อแสดงว่าผู้เริ่มต้นอย่างฉันเริ่มสับสนกับการกำหนดค่า การเชื่อมโยง-1 ฉันดูเหมือนจะไม่เข้าใจที่อยู่เบื้องหลังการทำงานและ<context:annotation-config><context:component-scan> จากสิ่งที่ฉันได้อ่านพวกเขาดูเหมือนจะจัดการกับคำอธิบายประกอบต่าง ๆ (@Required, @Autowired etc vs @Component, @Repository, @Service ฯลฯ ) แต่จากสิ่งที่ฉันได้อ่านพวกเขาลงทะเบียนคลาสตัวประมวลผล bean โพสต์เดียวกัน เพื่อสร้างความสับสนให้ฉันยิ่งขึ้นมีannotation-configแอตทริบิวต์ใน<context:component-scan>... ลิงค์ 2 ฉันยังมีแท็กสแกนองค์ประกอบ: <context:component-scan base-package="com.mycompany.maventestwebapp" /> แต่ฉันมีแท็กอื่น (ที่ดูเหมือนว่ามีงานที่คล้ายกัน) อันนี้: <annotation-driven /> ความแตกต่างระหว่างสองแท็กเหล่านี้คืออะไร อีกสิ่งที่ "แปลก" คือตัวอย่างก่อนหน้านี้ (ที่ไม่ได้ใช้แท็กคำอธิบายประกอบ) คล้ายกับโครงการสร้างโดย STS โดยใช้โครงการ Spring MVC …
9 java  spring 

5
การส่งคำขอดึงสามารถถือว่าเป็นการยอมรับข้อตกลงสิทธิ์การใช้งานของผู้สนับสนุนหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว บางโครงการซอฟต์แวร์มีข้อตกลงใบอนุญาตผู้ร่วมให้ข้อมูล ยกตัวอย่างเช่นข้อตกลงอาจกำหนดลิขสิทธิ์ของผลงานของบุคคลที่สามให้กับผู้สร้างโครงการดั้งเดิม สามารถส่งคำขอดึงบนgithubเคยถือว่ายอมรับข้อตกลงดังกล่าวหรือไม่?

4
เหตุใดจึงควรหลีกเลี่ยงการสร้างมรดก
ฉันจำการเรียนรู้ VB4 และการลากปุ่มไปยังแบบฟอร์มดับเบิลคลิกที่ปุ่มนั้นและพิมพ์รหัสลงในตัวจัดการเหตุการณ์ที่ฉันเพิ่งได้รับพรอย่างน่าอัศจรรย์ มาจาก QBASIC ฉันตื่นเต้นกับ "V" ใน "VB" นักออกแบบภาพเป็นสิ่งที่ดีที่สุดตั้งแต่ขนมปังหั่นบาง ๆ แน่นอนว่าคุณสามารถทำทุกอย่างได้โดยทางโปรแกรม แต่ความมหัศจรรย์ของ "V" นั้นน่าดึงดูดมากจนคุณอดไม่ได้ที่จะลาก แต่ปุ่ม เราได้รับการสนับสนุนให้ใช้เส้นทางนั้น แต่ไม่กี่ปีที่ผ่านมาฉันเริ่มเรียนรู้เกี่ยวกับ C # และ. net framework และรู้สึกทึ่งกับทุกสิ่งที่ฉันคิดว่าฉันรู้ว่าเพิ่งออกไปนอกหน้าต่าง มีเวทมนต์มากมายที่เกิดขึ้นใน VB6 ที่เปิดเผยอย่างสมบูรณ์ใน. net: ใช้ตัวสร้างและInitializeComponentsวิธีการเช่น ในภายหลังคุณจะพบอินสแตนซ์ควบคุมทั้งหมดที่คุณลากจากกล่องเครื่องมือกิจกรรมทั้งหมดที่คุณลงทะเบียนและคุณสมบัติที่คุณตั้งไว้ในตัวออกแบบ และก็ไม่เป็นไร ... ฉันเดา มันเป็นเพียงฉันรู้สึกเหมือนฉันไม่ "เป็นเจ้าของ" สิ่งที่เกิดขึ้นรหัสนี้ที่ฉันสามารถแก้ไขได้ผ่านทางนักออกแบบสร้างความรำคาญให้กับฉัน ทุกครั้งที่คุณคัดลอกปุ่มที่ระบุว่า "ตกลง" จากแบบฟอร์มหนึ่งไปยังอีกแบบหนึ่ง (บางครั้งพร้อมกับพี่ชายของ "ยกเลิก") คุณกำลังทำรหัสซ้ำจริง ๆ และนั่นเป็นบาปใช่ไหม แห้งจะไม่ทำซ้ำตัวเองกล่าวว่าสมเด็จพระสันตะปาปา ศาสนาและโรงเรียนที่มีความคิดนอกเหนือจากความเป็นกลางทุกอย่างเราไม่ควรได้รับแบบฟอร์มจากรูปแบบพื้นฐานแทนและมีปุ่ม "ตกลง" (และเพื่อน ๆ ทุกคน) …

2
เหตุใด Go จึงมีเคสพิเศษสำหรับ abs (0)
ฉันเล่นกับ Go และพบรหัสที่น่าสนใจนี้สำหรับฟังก์ชัน abs ในแพ็คเกจคณิตศาสตร์: http://golang.org/src/pkg/math/abs.go 14 func abs(x float64) float64 { 15 switch { 16 case x < 0: 17 return -x 18 case x == 0: 19 return 0 // return correctly abs(-0) 20 } 21 return x 22 } ทำไมเราต้องมีกรณีพิเศษของ x == 0 จะเกิดอะไรขึ้นถ้าฉันลบบรรทัดที่ 18 และ 19
9 go 

4
รูปแบบการเขียนโปรแกรมใน Perl
ฉันทำงานใน Java ดังนั้นโดยทั่วไปฉันใช้กระบวนทัศน์ OOP ในระหว่างการเข้ารหัส ฉันกำลังจะเริ่มทำงานใน Perl และฉันสงสัยว่ากระบวนทัศน์ที่นักพัฒนา Perl ติดตามคืออะไร ในวิกินั้นกล่าวว่ามันสนับสนุนกระบวนทัศน์จำนวนมาก แต่ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งนี้เพราะเป็นภาษาสคริปต์ ดังนั้นคำถามของฉันคือ: รูปแบบเชิงวัตถุที่ฉันคุ้นเคยใน Java idiomatic ใน Perl หรือฉันจะต้องเปลี่ยนสไตล์การออกแบบของฉันเพื่อเขียน Perl ที่มีประสิทธิภาพหรือไม่ หมายเหตุ: นี่ไม่ใช่คำถามที่จะวิจารณ์ Perl จริง ๆ แล้วฉันต้องทำงานใน Perl และต้องการที่จะเข้าใจวิธีการที่โปรแกรมปัจจุบันของฉันจะเปลี่ยนแปลง

4
การจัดการทรัพยากรที่ไม่ได้กำหนดไว้ว่าเป็นสิ่งที่เป็นนามธรรมหรือไม่?
จากสิ่งที่ฉันเห็นมีรูปแบบการจัดการทรัพยากรที่แพร่หลายอยู่สองรูปแบบคือการทำลายล้างที่กำหนดขึ้นและชัดเจน ตัวอย่างของอดีตจะเป็น destructors C ++ และตัวชี้สมาร์ทหรือย่อย DESTROY ของ Perl ในขณะที่ตัวอย่างหลังจะเป็นกระบวนทัศน์แบบบล็อกต่อการจัดการทรัพยากรของ Ruby หรืออินเทอร์เฟซ IDispose ของ. NET ภาษาที่ใหม่กว่าดูเหมือนจะเลือกใช้ในภายหลังซึ่งอาจเป็นผลข้างเคียงของการใช้ระบบรวบรวมขยะที่หลากหลายที่ไม่อ้างอิงการนับ คำถามของฉันคือ: เนื่องจาก destructors สำหรับสมาร์ทพอยน์เตอร์หรือระบบรวบรวมขยะอ้างอิง - เกือบจะเป็นสิ่งเดียวกัน - อนุญาตให้มีการทำลายทรัพยากรโดยปริยายและโปร่งใสมันเป็นสิ่งที่เป็นนามธรรมน้อยรั่วกว่าประเภทที่ไม่ได้กำหนดไว้ล่วงหน้า สัญกรณ์? ฉันจะยกตัวอย่างที่เป็นรูปธรรม หากคุณมีคลาสย่อย C ++ สามคลาสของซูเปอร์คลาสเดียวอาจมีการใช้งานที่ไม่ต้องการการทำลายที่เฉพาะเจาะจง บางทีมันอาจใช้เวทมนตร์ในอีกทางหนึ่ง ความจริงที่ว่ามันไม่ต้องการการทำลายพิเศษใด ๆ นั้นไม่เกี่ยวข้อง - คลาสย่อยทั้งหมดยังคงใช้ในลักษณะเดียวกัน ตัวอย่างอื่นใช้บล็อก Ruby คลาสย่อยสองคลาสจำเป็นต้องเพิ่มรีซอร์สดังนั้นคลาสคลาส opts สำหรับอินเตอร์เฟสที่ใช้บล็อกในตัวสร้างแม้ว่าคลาสย่อยย่อยอื่นอาจไม่ต้องการเนื่องจากมันไม่ต้องการการทำลายพิเศษ เป็นกรณีที่การรั่วไหลหลังรายละเอียดการใช้งานของการทำลายทรัพยากรในขณะที่อดีตไม่ได้หรือไม่ แก้ไข: การเปรียบเทียบสมมติว่า Ruby กับ Perl อาจมีความยุติธรรมมากกว่าเนื่องจากมีการทำลายล้างที่กำหนดและที่เหลือไม่ได้ แต่พวกเขาทั้งคู่เก็บขยะ

3
กฎเกี่ยวกับความคมชัดของชนิดพารามิเตอร์เมธอดชนิดส่งคืนและชนิดคุณสมบัติ
บางครั้งที่ผ่านมาฉันอ่าน "กฎของหัวแม่มือ" เกี่ยวกับความคมชัดของชนิดพารามิเตอร์เมธอดชนิดส่งคืนและชนิดคุณสมบัติ แต่ฉันจำไม่ได้ มันบอกอะไรบางอย่างเกี่ยวกับการรักษาประเภทการคืนสินค้าของคุณอย่างเป็นรูปธรรมมากที่สุดและพารามิเตอร์ประเภทของคุณจะเป็นนามธรรมมากที่สุด ... หรือในทางกลับกัน ฉันไม่รู้ว่าจริง ๆ แล้วมันเป็นคำแนะนำที่ดีหรือไม่ดีดังนั้นหากคุณมีความคิดของคุณเองเกี่ยวกับเรื่องนี้โปรดแจ้งความคิดเห็น ไชโย

3
ตัวอย่าง Array ความยาวตัวแปร C ที่ดี [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว คำถามนี้ค่อนข้างได้รับการแช่แข็งที่ดังนั้นฉันจึงตัดสินใจลบที่นั่นและลองที่นี่แทน หากคุณคิดว่ามันไม่พอดีที่นี่อย่างน้อยโปรดแสดงความคิดเห็นเกี่ยวกับคำแนะนำวิธีการหาตัวอย่างฉันหลังจาก ... คุณสามารถยกตัวอย่างได้หรือไม่ว่าการใช้ C99 VLA ให้ประโยชน์ที่เหนือกว่าบางอย่างเช่นฮีปมาตรฐานที่ใช้กลไก C ++ RAII ปัจจุบันหรือไม่ ตัวอย่างหลังจากฉันควร: บรรลุข้อได้เปรียบด้านประสิทธิภาพที่วัดได้ง่าย (10%) จากการใช้ heap ไม่มีวิธีแก้ปัญหาที่ดีซึ่งไม่จำเป็นต้องใช้ทั้งชุดเลย ประโยชน์ที่แท้จริงจากการใช้ขนาดไดนามิกแทนที่จะเป็นขนาดสูงสุดคงที่ ไม่น่าจะทำให้เกิดการล้นสแต็คในสถานการณ์การใช้งานปกติ แข็งแรงพอที่จะล่อลวงนักพัฒนาที่ต้องการประสิทธิภาพในการรวมไฟล์ต้นฉบับ C99 ในโครงการ C ++ การเพิ่มความกระจ่างเกี่ยวกับบริบท: ฉันหมายถึง VLA ตามความหมายโดย C99 และไม่รวมอยู่ในมาตรฐาน C ++: int array[n]โดยที่nเป็นตัวแปร และฉันเป็นตัวอย่างของกรณีการใช้งานที่มันสำคัญกว่าทางเลือกอื่น ๆ ที่เสนอโดยมาตรฐานอื่น ๆ (C90, C ++ 11): int …
9 c++  c  stack  heap 

1
การเข้าถึงประวัติของการอ้างอิงใน Clojure
เอกสารอ้างอิงการแสดง: ตัวเลือกสูงสุดประวัติศาสตร์และกล่าวว่า "refs สะสมประวัติศาสตร์แบบไดนามิกตามความจำเป็นเพื่อจัดการกับความต้องการอ่าน." ฉันเห็นว่ามีประวัติอยู่ที่ REPL แต่ฉันไม่เห็นวิธีการค้นหาค่าก่อนหน้าของการอ้างอิง: user=> (def the-world (ref "hello" :min-history 10)) #'user/the-world user=> (do (dosync (ref-set the-world "better")) @the-world) "better" user=> (let [exclamator (fn [x] (str x "!"))] (dosync (alter the-world exclamator) (alter the-world exclamator) (alter the-world exclamator)) @the-world) "better!!!" user=> (ref-history-count the-world) 2 สมมุติว่าโลกมีค่า "สวัสดี", "ดีกว่า" …
9 clojure  stm 

9
ทำไม (ตำแหน่ง <ขนาด) รูปแบบที่แพร่หลายเช่นนี้ในเงื่อนไข
ในคำสั่งเงื่อนไข (IF) ทุกคนใช้(position &lt; size)แต่ทำไม? การประชุมเท่านั้นหรือมีเหตุผลที่ดีสำหรับสิ่งนั้น? พบในป่า: if (pos &lt; array.length) { // do some with array[pos]; } ไม่ค่อยพบ: if (array.length &gt; pos) { // do some with array[pos]; }

3
การสร้างฐานข้อมูลการแปลสตริงสำหรับโครงการ (ในบ้าน) หลายโครงการ
ที่ บริษัท ของเราเรามีการแปล ms-sql table ที่เก็บสตริงเช่นนี้: Id | Key | Language | Value 1 | hello-world | nl-BE | Hallo Wereld 2 | hello-world | en-GB | Hello World มี 3 ภาษาในระบบและฉันคาดหวังว่าสิ่งนี้จะเติบโตสูงสุดประมาณ 10 ในอนาคต ตารางนี้ถูกอ่านโดยหลายโครงการที่แตกต่างกันมาก (ประมาณ 60 โครงการส่วนใหญ่เป็นเว็บไซต์ / เว็บแอปพลิเคชันและบริการบนเว็บบางอย่าง) ที่แต่ละเปิดการเชื่อมต่อฐานข้อมูลไปยังฐานข้อมูลการแปลแคชแปล ข้อเสนอแนะจาก front-end devs คือ UI ของเราที่จะใส่หรือแก้ไขข้อเสียที่ใหญ่ที่สุดของการแปลคือพวกเขาไม่สามารถรู้ว่าโครงการใดใช้สตริงอะไร บางครั้งพวกเขาปรับเปลี่ยนสตริงที่ไม่ทราบว่าพวกเขากำลังทำลาย 7 โครงการด้วย …
9 c#  resources 

2
รอบการจำกราฟ - คำอธิบายง่ายๆ
บางคนได้โปรดช่วยฉันเข้าใจวิธีหารอบในกราฟในแง่ laymans? ฉันได้อ่านคำถามอื่น ๆ เช่นหน้านี้และหน้าวิกิพีเดียบางหน้า แต่ดูเหมือนว่าพวกเขาจะเข้าสู่ศัพท์แสงทางคณิตศาสตร์ค่อนข้างเร็ว ฉันมีรูปแบบของกราฟในจาวาการสร้างแบบจำลองโหนดและ 'ใน' และ 'ออก' ขอบ - และรูปแบบรู้ว่าโหนดเชื่อมต่อเพียงทิศทางเดียวนี้ช่วยให้ฉันสามารถหาโหนดใบเป็นจุดเริ่มต้นแผนของฉันคือ เพื่อเดินกลับกราฟจากโหนดใบไม้เหล่านี้สำหรับ "เดิน" แต่ละอันเก็บรายการโหนดอื่น ๆ ทั้งหมดที่ฉันพบในเส้นทางของฉัน ถ้าฉันเห็นบางสิ่งบางอย่างในรายการอยู่แล้ว ณ จุดใดฉันจะรู้ว่าฉันพบวงจรในกราฟ อย่างไรก็ตามสิ่งนี้ให้ความรู้สึกเรียบง่ายเล็กน้อย ฉันแน่ใจว่านี่เป็นปัญหาที่แก้ไขแล้วมันจะดีถ้ามันสามารถอธิบายได้ในแง่ง่าย ๆ -ace
9 graph 

2
ฉันจะรวม 'Command' และ 'Composite' เพื่อจำลองการหน่วงเวลาได้อย่างไร
ในแบบฝึกหัดการเรียนรู้ (ฉันไม่ได้อยู่ที่โรงเรียน - เป็นเพียงแค่ชายแก่ที่พยายามเรียนรู้สิ่งใหม่) ฉันพยายามเขียนการจำลองประตูตรรกะที่รวมเอาการหน่วงเวลาไว้ ผู้ใช้ควรสามารถจัดกลุ่มประตูด้วยกันเพื่อสร้างวัตถุระดับสูงขึ้น ฉันต้องการใช้รูปแบบการออกแบบกับปัญหาของฉัน แต่ฉันมีเวลายาก ฉันอ่านHead First Design Patternsและฉันเห็นว่ารูปแบบคำสั่งเป็นวิธีที่ดีในการจำลองพัลส์ไฟฟ้าผ่านวงจรที่มีความล่าช้า ฉันยังเห็นว่ารูปแบบคอมโพสิตเป็นวิธีที่ดีในการจำลองหน่วยซ้อนกัน ฉันไม่รู้วิธีผสมสองอย่างนี้เข้าด้วยกัน กล่าวอีกนัยหนึ่งเมื่อฉันวนผ่านประตูของฉันฉันเห็นว่าประตู 'x' ควรยิง มันมีความล่าช้า 15 นาโนวินาทีดังนั้นฉันจึงสร้างคำสั่งด้วยการประทับเวลา 15 ns จากเวลาเล่นเกมปัจจุบัน ผู้แจกจ่ายอยู่ที่ไหน ในตัวอย่างของร้านอาหารที่มีคำสั่งเป็น 'สั่งซื้อ' พนักงานเสิร์ฟและผู้ปรุงแต่ละคนส่งคำสั่งและมีตัวเลือกในการแนะนำการหน่วงเวลา ถ้าฉันมีประตู 'ประกอบ' มันจะมีดิสแพตเชอร์ของตัวเองหรือไม่ ฉันต้องใช้ซิงเกิลตันเพื่อจัดการคิวหรือไม่ ฉันอ่านสิ่งที่ฉันสามารถหาได้ แต่ฉันยังต้องการแรงผลักดันในทิศทางที่ถูกต้อง: /programming/2015549/using-command-design-pattern /programming/12016314/client-server-command-design-pattern-with-variable-delays /programming/10560892/composite-of-commands-design-pattern /programming/8874705/how-can-i-calculate-propagation-delay-through-series-of-combinational-circuits-u

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