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

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

1
ดูเหมือนว่าการเข้าร่วมของ Python จะไม่ได้มุ่งเน้นไปที่รายการที่จะเข้าร่วม แต่บนสัญลักษณ์เมื่อเทียบกับ Ruby หรือ Smalltalk ด้วยเหตุผลด้านการออกแบบ
ฉันคิดว่าหนึ่งในหลักสำคัญของ OOP คือเรามีวัตถุซึ่งเป็นรายการที่เราสนใจในการจัดการและจากนั้นเราส่งข้อความถึงพวกเขา ดังนั้นมันอาจดูเป็นธรรมชาติที่ฉันมีของสะสมและฉันจำเป็นต้องใส่มันเข้าไปในสายเดียวเพื่อที่จะทำมัน: ["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby (Smalltalk ทำเช่นเดียวกัน) " | "เป็นในทางที่บางคนคิดว่าการเป็นอาร์กิวเมนต์หนึ่งสัญลักษณ์ของวิธีการที่จะเข้าร่วมได้ อาจเป็น" "เช่นเดียวกันหากบอร์ดเกมนั้นเรียบง่ายขึ้น ดังนั้นองค์ประกอบการเข้าร่วม" | "ไม่ใช่สิ่งที่เราสนใจโดยเฉพาะ - มันไม่ใช่วัตถุหลักในโปรแกรมที่มีความสำคัญหรือความสำคัญเป็นพิเศษ ถ้า Python ใช้งาน " | ".join(["x", "o", "o"]) มันรู้สึกค่อนข้างแปลกที่เกือบจะรู้สึกเหมือนว่าเรากำลังส่งข้อความไปยังการโต้แย้งเพื่อบอกข้อโต้แย้งเกี่ยวกับบางสิ่ง Python อาจจะเป็นขั้นตอนมากกว่านี้ใช่ไหม เพื่อบอกให้สายการเข้าร่วมทำหน้าที่ให้เราบ้างไหม? เป็นการบันทึกการนำไปปฏิบัติเพื่อที่เราจะได้ไม่ต้องกำหนดjoinคลาสสำหรับคอลเลกชั่นแต่ละคลาสที่เรามี? แต่มันไม่เป็นความจริงเลยที่เราสามารถเขียนคลาสคอลเลกชันใด ๆ ก็ได้เช่นใน Ruby: module Enumerable def my_join(joiner) self.inject …

5
การประกาศตัวแปรที่ผันแปรหมายความว่าอย่างไร
โปรแกรมในระดับต่ำจำนวนมากใช้คำระเหยชนิดสำหรับการทำแผนที่หน่วยความจำและดังกล่าว แต่ฉันเรียงลำดับของการสับสนว่าสิ่งที่มันจริงๆจะอยู่ในพื้นหลัง กล่าวอีกนัยหนึ่งหมายความว่าอย่างไรเมื่อคอมไพเลอร์ไม่ "เพิ่มประสิทธิภาพ" ที่อยู่หน่วยความจำ
9 c++  c  low-level 

2
การแยกส่วนอินเทอร์เฟซหลักการ: จะทำอย่างไรถ้าส่วนต่อประสานมีการทับซ้อนกันอย่างมีนัยสำคัญ?
จากการพัฒนาซอฟต์แวร์หลักการรูปแบบและการปฏิบัติ: Pearson New International Edition : บางครั้งวิธีที่เรียกใช้โดยกลุ่มลูกค้าที่แตกต่างกันจะทับซ้อนกัน หากการซ้อนทับมีขนาดเล็กดังนั้นอินเทอร์เฟซสำหรับกลุ่มควรจะแยกจากกัน ควรประกาศฟังก์ชันทั่วไปในอินเทอร์เฟซที่ทับซ้อนกันทั้งหมด คลาสเซิร์ฟเวอร์จะสืบทอดฟังก์ชันทั่วไปจากแต่ละอินเตอร์เฟสเหล่านั้น แต่จะใช้งานเพียงครั้งเดียว ลุงบ๊อบพูดถึงกรณีที่มีการเหลื่อมกันเล็กน้อย เราควรทำอย่างไรหากมีการทับซ้อนอย่างมีนัยสำคัญ บอกว่าเรามี Class UiInterface1; Class UiInterface2; Class UiInterface3; Class UiIterface : public UiInterface1, public UiInterface2, public UiInterface3{}; เราควรทำอย่างไรหากมีการทับซ้อนกันระหว่างUiInterface1และUiInterface2?

1
ฉันจะเชื่อมโยงวัตถุคำสั่งกับผู้รับที่ถูกต้องได้อย่างไร
ฉันพยายามใช้รูปแบบคำสั่งสำหรับการนำ Undo และ Redo ไปใช้ในโครงการของฉัน public abstract class Command { protected Form Receiver { set; get; } protected HtmlElement Element { set; get; } abstract public void ReDo(); abstract public void UnDo(); public Command(Form receiver) { this.Receiver = receiver; } } class AddElementCmd : Command { public AddElementCmd(HtmlElement elem, Form …

2
เหตุใดจึงไม่เหมาะสมที่จะใช้ไดอะแกรม UML เพื่อวางแผนว่าจะจัดระเบียบรหัสของคุณอย่างไร
ดังนั้นใช่ไดอะแกรมอาจไม่เหมาะสมในบางครั้ง เมื่อใดที่ไม่เหมาะสม เมื่อคุณสร้างพวกเขาโดยไม่มีรหัสเพื่อตรวจสอบพวกเขาแล้วตั้งใจที่จะติดตามพวกเขา ไม่มีอะไรผิดปกติกับการวาดไดอะแกรมเพื่อสำรวจความคิด การพัฒนาซอฟต์แวร์แบบว่องไว: หลักการรูปแบบและการปฏิบัติ - Robert C. Martin สิ่งนี้หมายความว่าอย่างไร UML ไม่ได้ออกแบบมาเพื่อช่วยวางแผนวิธีจัดโครงสร้างโค้ดของคุณก่อน "ลงมือดำน้ำ" หรือไม่? อะไรคือจุดประสงค์ของการใช้มันถ้าคุณไม่ทำตามไดอะแกรมที่คุณคิดขึ้นมา บริบท: ในบทนี้ลุงบ็อบจัดทำแผนภาพ UML สำหรับผู้รักษาคะแนนของเกมโบว์ลิ่ง จากนั้นเขาก็ไปพัฒนาโปรแกรมในลักษณะทดสอบการขับเคลื่อนโดยไม่ปรึกษาแผนภาพ UML โปรแกรมที่ได้นั้นไม่มีอะไรเหมือนกับแผนภาพ UML และลุงบ๊อบก็มาถึงข้อสรุปที่กล่าวไว้ข้างต้น

8
การออกแบบและการปฏิบัติเพื่อป้องกันรายการ null ที่ผิดพลาดจากฐานข้อมูล
ส่วนหนึ่งของโปรแกรมของฉันดึงข้อมูลจากหลาย ๆ ตารางและคอลัมน์ในฐานข้อมูลของฉันเพื่อการประมวลผล บางคอลัมน์อาจเป็นnullแต่ในบริบทการประมวลผลปัจจุบันที่เป็นข้อผิดพลาด สิ่งนี้จะ "เกิดขึ้นตามหลักวิชา" ไม่ควรเกิดขึ้นดังนั้นหากมันชี้ไปที่ข้อมูลที่ไม่ดี ข้อผิดพลาดที่มีความรุนแรงแตกต่างกันขึ้นซึ่งข้อมูลคือnull; เช่นสำหรับบางฟิลด์การประมวลผลควรจะหยุดและบางคนได้รับแจ้งสำหรับคนอื่น ๆ การประมวลผลควรได้รับอนุญาตให้ดำเนินการต่อและเพียงแค่แจ้งใครบางคน มีสถาปัตยกรรมที่ดีหรือหลักการออกแบบเพื่อจัดการกับรายการที่หายาก แต่เป็นไปได้nullหรือไม่? โซลูชันควรเป็นไปได้ที่จะนำไปใช้กับ Java แต่ฉันไม่ได้ใช้แท็กเพราะฉันคิดว่าปัญหาค่อนข้างไม่เชื่อเรื่องภาษา ความคิดบางอย่างที่ฉันมี: ใช้ NOT NULL ที่ง่ายที่สุดคือการใช้ข้อ จำกัด NOT NULL ในฐานข้อมูล แต่ถ้าหากการแทรกข้อมูลดั้งเดิมมีความสำคัญมากกว่านั้นขั้นตอนการประมวลผลในภายหลังจะเป็นอย่างไร ดังนั้นในกรณีที่ส่วนแทรกจะใส่nullลงในตาราง (อาจเป็นเพราะข้อบกพร่องหรืออาจเป็นเหตุผลที่ถูกต้อง) ฉันไม่ต้องการให้ส่วนแทรกล้มเหลว สมมติว่าส่วนต่าง ๆ ของโปรแกรมขึ้นอยู่กับข้อมูลที่ใส่เข้าไป แต่ไม่ได้อยู่ในคอลัมน์นี้ ดังนั้นฉันจึงค่อนข้างเสี่ยงข้อผิดพลาดในขั้นตอนการประมวลผลปัจจุบันแทนขั้นตอนการแทรก นั่นเป็นเหตุผลที่ฉันไม่ต้องการใช้ข้อ จำกัด NOT NULL อย่างไร้เดียงสาขึ้นอยู่กับ NullPointerException ฉันสามารถใช้ข้อมูลราวกับว่าฉันคาดหวังว่ามันจะอยู่ที่นั่นเสมอ (และนั่นควรจะเป็นอย่างนั้นจริง ๆ ) และจับ NPE ที่ได้ในระดับที่เหมาะสม (เช่นเพื่อให้การประมวลผลของรายการปัจจุบันหยุดลง แต่ไม่ใช่ความคืบหน้าการประมวลผลทั้งหมด ) …

1
การจัดหากิจกรรมเฉพาะเมื่อการเขียนเป็นของหายากหรือไม่
ฉันกำลังอ่านข้อมูลเกี่ยวกับการจัดหางานและไม่สามารถหยุดถามตัวเองได้ว่ามันสมเหตุสมผลในสถานการณ์ที่แปลกใหม่ซึ่งการเขียนนั้นยากมากหรือต้องมีการตรวจสอบเกรดทางทหาร ระบบที่ไม่ธรรมดาซึ่งมีการใช้งานที่สำคัญอาจสร้างระหว่างการเขียนหลายร้อยถึงหลายพันครั้งต่อวันการแปลการพูดการเขียนหนึ่งล้านหรือ 2 ครั้ง (เช่นเหตุการณ์) ต่อปีของการทำงาน การรวมวัตถุหลายล้านรายการ (เหตุการณ์) เพียงเพื่อให้ได้สถานะปัจจุบันเหมือนข้อเสนอที่น่าหัวเราะเมื่อเทียบกับการอ่านแบบตรงขึ้นจากที่จัดเก็บแบบดั้งเดิม แต่การจัดหากิจกรรมอยู่เบื้องหลังระบบที่มีประสิทธิภาพมากที่สุด (คิดว่า LMAX) แล้วฉันจะพลาดอะไร การกู้คืนสถานะจากสตรีมเหตุการณ์ทำได้ปกติหรือไม่ หรือเป็นความคิดที่จะต้องทำเช่นนี้และใช้หน่วยเก็บข้อมูลที่แตกต่างกันโดยสิ้นเชิงสำหรับการดำเนินงานปกติ (เช่นใช้หน่วยเก็บข้อมูล Query จาก CQRS) และเรียกคืนจากเหตุการณ์เฉพาะในกรณีพิเศษ (เช่นการจำลองแบบการตรวจสอบ ฯลฯ )

1
การชักรอกใน Javascript === รวบรวม?
ฉันเจอมุมมองที่น่าสนใจในการสัมภาษณ์งานเมื่อเร็ว ๆ นี้ การยกใน Javascript นั้นเกี่ยวกับการย้ายการประกาศตัวแปรและการประกาศฟังก์ชันที่ด้านบนของสคริปต์ เราสามารถเรียกเฟสนี้เป็นการรวบรวมได้หรือไม่? ฉันทราบเกี่ยวกับความจริงที่ว่า Javascript interpreter มี 2 การส่งผ่านสคริปต์การป้อนข้อมูลซึ่งในครั้งแรกที่มันผ่านการชักรอกและครั้งที่สองที่มันดำเนินการสคริปต์จริง รู้ว่า Javascript เป็นภาษาที่ตีความคำถามนี้ทำให้ฉันสับสนเล็กน้อย

1
การประเมินชุดข้อมูลด้วยสูตรสตริงใน php
ฉันได้รับมอบหมายให้อัปเดตเงื่อนไขบางอย่างในแอปพลิเคชัน ฉันมีชุดข้อมูลที่จะทำการประเมินและมันได้รับการกำหนดค่าตายตัวในแอปพลิเคชันด้วยวิธีต่อไปนี้: $arr = array( 'a' => 'apple', 'b' => 'orange', 'c' => 1, 'd' => 2, 'e' => 5, 'f' => 'green', 'g' => 'red', 'h' => 'yellow', ) $res1 = ($arr['a'] == 'apple') ? TRUE : FALSE; $res2 = (($arr['b'] == $arr['f']) && ($arr['c'] < $arr['d']) ? TRUE …
9 php 

4
วิธีที่มีประสิทธิภาพที่สุดในการจัดเก็บข้อมูลนี้คืออะไร?
ฉันรับผิดชอบในการเขียนรหัส VB ​​เก่าอีกครั้ง ฉันเข้าใจว่ามันทำงานอย่างไร แต่ฉันรู้สึกว่ามีวิธีที่มีประสิทธิภาพมากกว่าในการทำสิ่งที่พวกเขาทำ ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร นี่คือตัวอย่างที่วางแผนไว้ว่าในแง่ของความต้องการข้อมูลนั้นคล้ายกับสิ่งที่ฉันต้องทำ ผู้ใช้ต้องเลือกผู้ผลิตยี่ห้อรุ่นและสีของรถใน GUI ฉันมีไฟล์ข้อความขนาดใหญ่ที่มีหน้าตาดังนี้: Ford Truck F150 red Ford Truck F150 blue Ford Truck F150 black Ford Truck F150 silver Ford Truck F250 red Ford Truck F250 green Ford Sedan Taurus red Ford Sedan Taurus green Ford Sedan Taurus white Ford... ... Subaru SUV …

2
ฉันสามารถตรวจสอบการมีอยู่ของคำอธิบายประกอบในการทดสอบหน่วยได้หรือไม่?
ฉันมีลำดับชั้นคลาส Java ที่เกิดขึ้นจากชั้นนามธรรมและส่วนขยาย N ของมัน ในคลาส abstract ฉันมีเมธอดที่ถูกเพิ่มความคิดเห็นด้วยหมายเหตุประกอบ @Remove แม้ว่าเราจะไม่ได้รับข้อยกเว้นใด ๆ ที่จะไม่ล้มเหลวหากลบหมายเหตุนี้เราอาจได้รับการยกเว้นหน่วยความจำดังนั้นฉันจึงต้องการให้แน่ใจว่าเราสังเกตเห็นอย่างรวดเร็วที่สุดหากคำอธิบายประกอบนี้หายไปในการซ่อมแซมบางส่วน ฉันกำลังพยายามสร้าง GUTS (การทดสอบหน่วยที่ดี) ดังนั้นฉันคิดว่าฉันสามารถจัดทำเอกสาร "ข้อกำหนดทางเทคนิค" นี้ในการทดสอบของฉันพร้อมกรณีทดสอบที่ระบุไว้ แต่นี่ไม่ใช่คุณสมบัติมันเป็นรายละเอียดการใช้งานและไม่ได้เชื่อมโยงกับพฤติกรรมของวิธีการ (วิธีการอาจว่างเปล่า แต่ต้องมีอยู่และจะต้องมีคำอธิบายประกอบ) การสร้างแบบทดสอบสำหรับสิ่งนั้นหรือมีวิธีอื่นในการตรวจสอบการมีอยู่ของคำอธิบายประกอบนี้หรือไม่?

1
อะไรคือความแตกต่างระหว่าง“ kk” และ“ HH” +1 ใน ISO-8601
ใน ISO-8601 มีรูปแบบหลายชั่วโมงรูปแบบหนึ่งคือ "kk" สำหรับชั่วโมง 1-24 จุดประสงค์ของสิ่งนี้คืออะไร? มีประเทศที่ชดเชยเวลาของพวกเขาหรือไม่? สำหรับการใช้งานทางทหารหรือไม่? บทความวิกิพีเดียไม่ได้ชี้แจงธรรมชาติที่แท้จริงระหว่าง HH และ kk แหล่งที่มาหลักของความกังวลของฉันคือพฤติกรรมของรูปแบบในที่SimpleDataFormatter แก้ไข: ส่วนโดยตรงจาก SimpleDateFormat ที่ฉันอ้างถึงคือ: ชั่วโมงในวัน (0-23) หมายเลข 0 k ชั่วโมงในวัน (1-24) หมายเลข 24 กำลังใช้ ... HH:mm:ss // 00:00:00 kk:mm:ss // 01:00:00

3
ความแตกต่างระหว่างสถาปัตยกรรม 3-Tier และ MVC (Model, View Controller) ใน ASP.Net
ฉันชอบที่จะรู้ว่าสถาปัตยกรรม 3 ชั้นแตกต่างจาก MVC (Model, View Controller) ใน ASP.Net อย่างไรเนื่องจากดูเหมือนว่าฉันจะใช้สถาปัตยกรรมเดียวกัน ใน 3 ชั้นเรามีUser Services Layer, BusinessLayerและDataAccessLayerในมืออื่น ๆ ที่เรามีModel, และView Controllerดูเหมือนสถาปัตยกรรมแบบเดียวกันกับฉัน มีใครอธิบายได้บ้างว่าสถาปัตยกรรมทั้งสองแตกต่างกันอย่างไรแต่ละชั้นแตกต่างกันอย่างไร

2
ทำไม Akka ถึงดีสำหรับการเกิดพร้อมกัน?
ฉันยังใหม่กับกรอบของอัคคาและนักแสดง - ฉันแน่ใจว่าฉันขาดอะไรที่ชัดเจนโปรดยอมรับคำขอโทษล่วงหน้า ฉันอ่านต่อไปว่าหนึ่งในประเด็นหลักในการเลือก Akka คือวิธีที่มันจัดการการทำงานพร้อมกัน ไม่ชัดเจนสำหรับฉันว่าทำไม Akka ถึงมีความพิเศษ ฉันเข้าใจว่ามีนักแสดงน้อยมากที่เบาและเร็วมาก อย่างไรก็ตามสิ่งนี้จะช่วยฉันได้อย่างไรเมื่อผู้ใช้สองคนบันทึกฟอร์มในเวลาเดียวกัน ฉันจะยังคงต้องล็อคการทำงานพร้อมกันบางอย่าง (มองโลกในแง่ร้าย / แง่ดี / ฯลฯ .. )?

5
มีข้อเสียอย่างมีนัยสำคัญหรือไม่ขึ้นอยู่กับ abstractions?
ผมอ่านวิกินี้บน Stable Abstractions หลักการ (SAP) SAP ระบุว่ายิ่งมีความเสถียรของแพคเกจมากเท่าไหร่ก็ควรที่จะเป็นนามธรรม นี่ก็หมายความว่าหากแพ็คเกจมีความเสถียรน้อยกว่า (มีแนวโน้มที่จะเปลี่ยนแปลงได้) ก็ควรมีรูปธรรมมากขึ้น สิ่งที่ฉันไม่เข้าใจจริงๆคือสาเหตุที่เป็นเช่นนี้ แน่นอนในทุกกรณีโดยไม่คำนึงถึงความมั่นคงเราควรขึ้นอยู่กับนามธรรมและซ่อนการดำเนินงานที่เป็นรูปธรรม?

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