คำถามติดแท็ก object-oriented

วิธีการที่ทำให้ระบบสามารถสร้างแบบจำลองเป็นชุดของวัตถุที่สามารถควบคุมและจัดการในลักษณะโมดูลาร์

14
ชื่อสำหรับ antipattern นี้? ฟิลด์เป็นตัวแปรท้องถิ่น [ปิด]
ในบางรหัสที่ฉันกำลังตรวจสอบอยู่ฉันเห็นสิ่งที่มีค่าเทียบเท่ากับสิ่งต่อไปนี้: public class Foo { private Bar bar; public MethodA() { bar = new Bar(); bar.A(); bar = null; } public MethodB() { bar = new Bar(); bar.B(); bar = null; } } สนามbarที่นี่เป็นเหตุผลตัวแปรท้องถิ่นเช่นค่าของมันจะไม่เคยตั้งใจที่จะยังคงมีอยู่ทั่วโทรวิธี แต่เนื่องจากหลายวิธีในFooความต้องการวัตถุของการพิมพ์Bar, Barผู้เขียนรหัสเดิมได้ทำเพียงแค่ด้านการพิมพ์ เห็นได้ชัดว่ามันไม่ถูกต้องใช่มั้ย antipattern นี้มีชื่อหรือไม่?

10
อะไรคือการใช้ downcasting ที่เหมาะสม?
Downcasting หมายถึงการคัดเลือกจากคลาสพื้นฐาน (หรืออินเทอร์เฟซ) ไปยังคลาสย่อยหรือคลาสลีฟ ตัวอย่างของการดาวน์สตรีมอาจเป็นหากคุณส่งจากSystem.Objectประเภทอื่น Downcasting นั้นเป็นที่นิยมอาจจะเป็นกลิ่นรหัส: หลักคำสอนเชิงวัตถุนั้นต้องการที่จะยกตัวอย่างเช่นการกำหนดและการเรียกวิธีเสมือนหรือนามธรรมแทนที่จะเป็นการลดทอน หากมีกรณีใดบ้างเป็นกรณีการใช้งานที่เหมาะสมและเหมาะสมสำหรับการลดความเร็ว? นั่นคือในสถานการณ์ใดมันเป็นสิ่งที่เหมาะสมในการเขียนรหัสที่ downcasts? หากคำตอบของคุณคือ "none" ดังนั้นทำไมระบบ downcasting จึงรองรับภาษานี้

10
ฉันไม่สามารถใช้วิธีการคงที่ทั้งหมดได้หรือไม่
UpdateSubject ทั้งสองวิธีด้านล่างแตกต่างกันอย่างไร ฉันรู้สึกว่าการใช้วิธีการคงที่จะดีกว่าถ้าคุณเพียงต้องการที่จะทำงานกับหน่วยงาน ในสถานการณ์ใดที่ฉันควรไปด้วยวิธีการที่ไม่คงที่ public class Subject { public int Id {get; set;} public string Name { get; set; } public static bool UpdateSubject(Subject subject) { //Do something and return result return true; } public bool UpdateSubject() { //Do something on 'this' and return result return true; } } ฉันรู้ว่าฉันจะได้รับความบันเทิงมากมายจากชุมชนสำหรับคำถามที่น่ารำคาญนี้ …

11
ชี้แจงหลักการความรับผิดชอบเดี่ยว
หลักการความรับผิดชอบเดี่ยวระบุว่าคลาสควรทำอย่างเดียวและอย่างเดียวเท่านั้น บางกรณีมีบาดแผลที่ค่อนข้างชัดเจน แม้ว่าคนอื่นจะยากเพราะสิ่งที่ดูเหมือน "สิ่งหนึ่ง" เมื่อดูในระดับที่เป็นนามธรรมอาจเป็นหลายสิ่งเมื่อดูในระดับที่ต่ำกว่า ฉันยังกลัวว่าหากหลักการความรับผิดชอบแบบเดี่ยวได้รับการยกย่องในระดับที่ต่ำกว่า decoupled มากเกินไปรหัส veravose รหัสราวีโอลี่ที่เส้นมากขึ้นจะใช้เวลาในการสร้างชั้นเรียนเล็ก ๆ สำหรับทุกอย่างและข้อมูลประปารอบกว่าการแก้ปัญหาที่เกิดขึ้นจริง คุณจะอธิบายความหมายของ "สิ่งหนึ่ง" ได้อย่างไร อะไรคือสัญญาณที่ชัดเจนว่าชั้นเรียนทำอะไรได้มากกว่า "สิ่งเดียว"?

11
การออกแบบระดับนี้ละเมิดหลักการความรับผิดชอบเดี่ยวหรือไม่?
วันนี้ฉันมีข้อโต้แย้งกับใครบางคน ฉันอธิบายถึงประโยชน์ของการมีรูปแบบโดเมนที่หลากหลายซึ่งต่างจากแบบจำลองโดเมนแบบโลหิตจาง และฉันสาธิตจุดของฉันด้วยคลาสที่เรียบง่ายที่ดูเหมือนว่า: public class Employee { public Employee(string firstName, string lastName) { FirstName = firstName; LastName = lastname; } public string FirstName { get private set; } public string LastName { get; private set;} public int CountPaidDaysOffGranted { get; private set;} public void AddPaidDaysOffGranted(int numberOfdays) { // Do stuff …

11
เหตุใดจึงเป็นการดีที่จะแยกโปรแกรมออกเป็นหลายคลาส [ปิด]
ฉันยังเป็นนักเรียนในโรงเรียนมัธยม (เข้าเกรด 10) และฉันยังไม่ได้เรียนหลักสูตรคอมพิวเตอร์จริงในโรงเรียน ทุกสิ่งที่ฉันทำจนถึงตอนนี้ก็คือผ่านหนังสือ หนังสือเหล่านั้นสอนฉันเกี่ยวกับแนวคิดเช่นการสืบทอด แต่การแบ่งโปรแกรมออกเป็นหลาย ๆ ชั้นช่วยได้อย่างไร หนังสือไม่เคยบอกฉัน ฉันถามสิ่งนี้เป็นหลักเพราะโครงการล่าสุด มันเป็นวิดีโอเกมอาร์เคดเหมือนกับเกม Flash ที่บางคนพูด (แม้ว่าฉันไม่รู้ว่าเกม Flashคืออะไร) มันเป็นเพียงชั้นเดียวเท่านั้น มันใช้งานได้ดีอย่างสมบูรณ์แบบ (ล่าช้าเล็กน้อยเป็นครั้งคราว) ด้วยชั้นเรียนเพียงชั้นเดียว ดังนั้นฉันแค่ถามว่าการแยกมันออกเป็นหลายคลาสจะช่วยได้อย่างไร โครงการนี้อยู่ใน Java และฉันเป็นคนเดียวที่ทำงานกับมันสำหรับการบันทึก

14
MVC ต่อต้าน OOP ไม่ใช่หรือ
แนวคิดหลักที่อยู่เบื้องหลัง OOP คือการรวมข้อมูลและพฤติกรรมในเอนทิตีเดียว - วัตถุ ในการเขียนโปรแกรมแบบโพรซีเดอร์จะมีข้อมูลและอัลกอริธึมแยกต่างหากที่แก้ไขข้อมูล ในรูปแบบ Model-View-Controller ข้อมูลและตรรกะ / อัลกอริธึมจะถูกวางไว้ในเอนทิตีที่แตกต่างกันโมเดลและคอนโทรลเลอร์ตามลำดับ ในวิธีการ OOP ที่เทียบเท่ากันไม่ควรวางโมเดลและคอนโทรลเลอร์ไว้ในเอนทิตีแบบโลจิคัลเดียวกัน

8
ORM เป็น Anti-Pattern หรือไม่ [ปิด]
ฉันมีการสนทนาที่กระตุ้นและขัดขวางมากกับเพื่อนร่วมงานเกี่ยวกับ ORM และข้อดีและข้อเสีย ในความคิดของฉัน ORM มีประโยชน์เฉพาะในกรณีที่หายาก อย่างน้อยในประสบการณ์ของฉัน แต่ฉันไม่ต้องการแสดงข้อโต้แย้งของตัวเองในเวลานี้ ดังนั้นฉันถามคุณคุณคิดอย่างไรเกี่ยวกับออม? ข้อดีและข้อเสียคืออะไร?

8
ฉันจะพิสูจน์หรือหักล้าง“ วัตถุพระเจ้า” ผิดได้อย่างไร?
สรุปปัญหา: เรื่องสั้นสั้นฉันได้รับรหัสฐานและทีมพัฒนาที่ฉันไม่ได้รับอนุญาตให้แทนที่และการใช้ God Objects เป็นปัญหาใหญ่ ก้าวไปข้างหน้าฉันต้องการให้เราทำปัจจัยอีกครั้ง แต่ฉันได้รับการผลักดันกลับจากทีมที่ต้องการทำทุกอย่างกับ God Objects "เพราะมันง่ายกว่า" และนี่หมายความว่าฉันจะไม่ได้รับอนุญาตให้ทำปัจจัยอีกครั้ง ฉันผลักดันการอ้างอิงประสบการณ์การพัฒนาเป็นเวลาหลายปีว่าฉันเป็นเจ้านายคนใหม่ที่ได้รับการว่าจ้างให้รู้จักสิ่งเหล่านี้และอื่น ๆ บริษัท ภายนอกในต่างประเทศทำบัญชีตัวแทนฝ่ายขายและตอนนี้อยู่ในระดับผู้บริหารและการประชุมของฉัน เป็นวันพรุ่งนี้และฉันต้องการที่จะใช้กระสุนทางเทคนิคจำนวนมากเพื่อสนับสนุนการปฏิบัติที่ดีที่สุดเพราะฉันรู้สึกว่ามันจะถูกลงในระยะยาว (และโดยส่วนตัวฉันรู้สึกว่าเป็นสิ่งที่บุคคลที่สามเป็นห่วง) สำหรับ บริษัท ปัญหาของฉันมาจากระดับเทคนิคฉันรู้ดีในระยะยาว แต่ฉันมีปัญหากับระยะสั้นพิเศษและ 6 เดือนในขณะที่บางสิ่งที่ฉัน "รู้" ฉันไม่สามารถพิสูจน์ได้ด้วยการอ้างอิงและแหล่งอ้างอิงภายนอก ของคนคนหนึ่ง (Robert C. Martin หรือลุงลุง Bob) นั่นคือสิ่งที่ฉันถูกขอให้ทำเพราะฉันได้รับการบอกว่ามีข้อมูลจากบุคคลหนึ่งและมีเพียงคนเดียวเท่านั้น (Robert C Martin) ไม่ดีพอที่จะโต้แย้ง . คำถาม: มีแหล่งข้อมูลอะไรบ้างที่ฉันสามารถอ้างอิงได้โดยตรง (ชื่อเรื่อง, ปีที่พิมพ์, หมายเลขหน้า, คำพูด) โดยผู้เชี่ยวชาญที่รู้จักกันดีในสาขาที่กล่าวอย่างชัดเจนว่าการใช้ "พระเจ้า" วัตถุ / คลาส / ระบบนี้ไม่ดี …

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

17
การเขียนโปรแกรม OO มีความสำคัญเทียบเท่ากับการว่าจ้าง บริษัท หรือไม่ [ปิด]
ฉันเพิ่งจบปริญญาโท (ในการคำนวณ) และสมัครงาน ฉันสังเกตเห็นว่า บริษัท หลายแห่งร้องขอความเข้าใจเกี่ยวกับการวางแนววัตถุโดยเฉพาะ คำถามสัมภาษณ์ที่ได้รับความนิยมเกี่ยวกับการถ่ายทอดทางพันธุกรรม OO สำคัญจริง ๆ ไหม ฉันยังมีการสัมภาษณ์งานเขียนโปรแกรมใน C และอีกครึ่งหนึ่งการสัมภาษณ์คือ OO ในโลกแห่งความเป็นจริงการพัฒนาแอพพลิเคชั่นจริงการวางแนววัตถุมักจะถูกนำไปใช้หรือไม่? ฟีเจอร์สำคัญเช่น polymorphism ใช้ A LOT หรือไม่? ฉันคิดว่าคำถามของฉันมาจากหนึ่งในจุดอ่อนของฉัน แม้ว่าฉันจะรู้เกี่ยวกับ OO แต่ดูเหมือนว่าฉันจะไม่สามารถรวมเข้ากับโปรแกรมของฉันได้

1
มิกซ์อินหรือลักษณะนิสัยดีกว่าการรับมรดกหลายแบบธรรมดาอย่างไร
C ++ มีการสืบทอดหลายแบบธรรมดาการออกแบบหลายภาษานั้นห้ามมิให้มีอันตราย แต่ภาษาบางภาษาเช่น Ruby และ PHP ใช้ไวยากรณ์แปลก ๆ เพื่อทำสิ่งเดียวกันและเรียกว่า mixins หรือลักษณะ ฉันได้ยินมาหลายครั้งแล้วว่ามิกซ์อิน / คุณลักษณะนั้นยากต่อการทารุณมากกว่าการถ่ายทอดทางพันธุกรรมที่หลากหลาย อะไรที่ทำให้พวกเขามีอันตรายน้อยลง? มีบางสิ่งที่เป็นไปไม่ได้สำหรับ mixins / traits แต่เป็นไปได้ด้วย C ++ - กำหนดลักษณะการสืบทอดหลาย ๆ แบบ? เป็นไปได้ที่จะพบปัญหาเพชรกับพวกเขาหรือไม่? ดูเหมือนว่าเราใช้มรดกหลายอย่าง แต่เพียงแค่แก้ตัวว่ามันเป็นส่วนผสม / คุณลักษณะเพื่อให้เราสามารถใช้มันได้

9
วิธีการของชั้นเรียนควรเรียกผู้ได้รับและผู้ตั้งตน?
ฉันทำงานที่ไหนฉันเห็นชั้นเรียนจำนวนมากที่ทำสิ่งนี้: public class ClassThatCallsItsOwnGettersAndSetters { private String field; public String getField() { return field; } public void setField(String field) { this.field = field; } public void methodWithLogic() { setField("value"); //do stuff String localField = getField(); //do stuff with "localField" } } หากฉันเขียนสิ่งนี้ตั้งแต่เริ่มต้นฉันจะเขียนสิ่งmethodWithLogic()นี้แทน: public class ClassThatUsesItsOwnFields { private String field; public …

20
การเขียนโปรแกรมเชิงวัตถุจริง ๆ แบบจำลองโลกแห่งความจริงหรือไม่ [ปิด]
ฉันเคยเห็นมันซ้ำแล้วซ้ำเล่าการเขียนโปรแกรมเชิงวัตถุจะขึ้นอยู่กับการสร้างแบบจำลองโลกแห่งความจริง แต่มันคืออะไร? ดูเหมือนว่าฉันจะไม่เป็นความจริงกับสิ่งใดนอกชั้นธุรกิจ คลาส GUI / คลาสการเข้าถึงข้อมูลของฉันไม่ได้จำลองสิ่งใดในโลกแห่งความเป็นจริง แม้ในชั้นธุรกิจของฉันฉันมีชั้นเรียนเช่นผู้สังเกตการณ์ผู้จัดการโรงงาน ฯลฯ ซึ่งไม่ใช่วัตถุในโลกแห่งความเป็นจริง ฉันพยายามออกแบบชั้นเรียนของฉันเพื่อใช้ประโยชน์จากสิ่งต่าง ๆ เช่น encapsulation แต่โลกแห่งความจริงนั้นห่อหุ้มหรือไม่? ในขณะที่บางวัตถุที่ฉันสร้างกำลังสร้างแบบจำลองวัตถุในโลกแห่งความเป็นจริงจะไม่ทำโค้ดล่วงหน้าของ OOP หรือไม่ ฉันสงสัยว่า OO เป็นคนแรกที่รวมแนวคิดเช่นลูกค้าในฐานรหัสของพวกเขา แต่ OO เป็นจริงเกี่ยวกับวิธีจำลองสิ่งต่าง ๆ และวิธีการสร้างแบบจำลองนั้นดูเหมือนจะไม่ได้รับแรงบันดาลใจจากโลกแห่งความเป็นจริงสำหรับฉัน ดังนั้น: การเขียนโปรแกรมเชิงวัตถุจริง ๆ จำลองโลกแห่งความจริง?

5
ภาชนะบรรจุ IOC ทำลายหลักการ OOP
วัตถุประสงค์ของ IOC Containers คืออะไร? เหตุผลที่รวมกันสามารถทำให้เป็นดังต่อไปนี้: เมื่อใช้หลักการพัฒนา OOP / SOLID การพึ่งพาการฉีดจะทำให้เกิดความยุ่งเหยิง ไม่ว่าคุณจะมีจุดเริ่มต้นระดับสูงสุดที่จัดการการพึ่งพาสำหรับหลายระดับต่ำกว่าตนเองและผ่านการอ้างอิงซ้ำผ่านการก่อสร้างซ้ำหรือคุณมีรหัสที่ซ้ำกันในรูปแบบโรงงาน / ผู้สร้างและอินเตอร์เฟสที่สร้างการพึ่งพาตามที่คุณต้องการ ไม่มีวิธี OOP / SOLID ในการดำเนินการนี้และมีรหัสสวยมาก หากข้อความก่อนหน้านั้นเป็นจริงแล้วตู้คอนเทนเนอร์ IOC จะทำอย่างไร เท่าที่ฉันรู้พวกเขาไม่ได้ใช้เทคนิคที่ไม่รู้จักบางอย่างที่ไม่สามารถทำได้ด้วยตนเอง DI ดังนั้นการอธิบายเพียงอย่างเดียวคือ IOC Containers ทำลายหลักการ OOP / SOLID โดยการใช้อ็อบเจกต์ส่วนตัวแบบคงที่ ตู้ IOC ทำลายหลักการต่อไปนี้หรือไม่? นี่เป็นคำถามจริงเนื่องจากฉันมีความเข้าใจที่ดี แต่มีความรู้สึกว่ามีคนอื่นมีความเข้าใจที่ดีขึ้น: การควบคุมขอบเขต ขอบเขตคือเหตุผลสำหรับเกือบทุกการตัดสินใจของฉันในการออกแบบรหัสของฉัน บล็อกท้องถิ่นโมดูลคงที่ / ทั่วโลก ขอบเขตควรชัดเจนมากที่สุดเท่าที่ระดับบล็อกและน้อยที่สุดที่คงที่ที่สุด คุณควรเห็นการประกาศการสร้างอินสแตนซ์และการสิ้นสุดวงจรชีวิต ฉันเชื่อมั่นในภาษาและ GC ในการจัดการขอบเขตตราบใดที่ฉันชัดเจนด้วย จากการวิจัยของฉันฉันพบว่า IOC Containers ตั้งค่าการพึ่งพาส่วนใหญ่หรือทั้งหมดเป็นแบบคงที่และควบคุมพวกมันผ่านการใช้งาน …

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