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

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

2
เราควรเลียนแบบเอนทิตีและวัตถุที่มีค่าเมื่อทำ DDD หรือไม่
หลังจากที่อ่านไม่กี่ บทความเกี่ยวกับnewable VS ฉีดวัตถุและวิธีการแนวความคิดเหล่านี้เกี่ยวข้องกับ DDD บริการหน่วยงานและวัตถุค่าฉันถูกทิ้งให้อยู่กับข้อสงสัยบางอย่างเกี่ยวกับการใช้ newables ในรหัสของฉันโดยเฉพาะอย่างยิ่งในการทดสอบหน่วยของฉัน ผู้สมัครหลักสำหรับ newables คือ Entities และ Value objects หมายถึงแทนที่จะฉีดการขึ้นต่อกันเหล่านี้ไปยังอ็อบเจกต์อื่นเราควรnewเป็นเพียงตัวอย่างของอ็อบเจกต์เหล่านี้และใช้มันโดยตรงในโค้ด อย่างไรก็ตามแนวปฏิบัติที่ดีของ DDD สนับสนุนการมอบหมายความรับผิดชอบให้แก่หน่วยงานและวัตถุที่มีค่าหากพวกเขาเห็นว่าเหมาะสม ดังนั้นเอนทิตีและวัตถุค่าจะสิ้นสุดลงด้วยตรรกะทางธุรกิจที่ร้ายแรงบางอย่างในนั้น ตอนนี้ถ้าบริการทำงานบนเอนทิตีหรือวัตถุที่มีค่าฉันควรล้อเลียนเอนทิตีหรือวัตถุที่มีค่าและส่งจำลองไปยังบริการ (การเยาะเย้ยจะต้องมีinterfaceสำหรับวัตถุค่าหรือหน่วยงานที่ดูเหมือนจะสนับสนุน) หรือฉันควรnewเป็นเพียงแค่เอนทิตี / ค่าวัตถุและผ่านการใช้งานที่เป็นรูปธรรมไปยังบริการและทำให้เป็นการละเมิดหลักการทดสอบหน่วยของการทดสอบเพียงหนึ่งหน่วย?

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

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

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

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

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

2
มีหลักการอินเตอร์เฟซ“ ถามเฉพาะสิ่งที่คุณต้องการ” หรือไม่?
ฉันได้เติบโตขึ้นโดยใช้หลักการในการออกแบบและใช้งานส่วนต่อประสานที่พูดโดยทั่วไปว่า "ถามเฉพาะสิ่งที่คุณต้องการ" ตัวอย่างเช่นหากฉันมีประเภทที่สามารถลบได้มากมายฉันจะสร้างDeletableส่วนต่อประสาน: interface Deletable { void delete(); } จากนั้นฉันสามารถเขียนคลาสสามัญ: class Deleter<T extends Deletable> { void delete(T t) { t.delete(); } } ที่อื่นในรหัสฉันมักจะถามถึงความรับผิดชอบที่เล็กที่สุดที่เป็นไปได้เพื่อตอบสนองความต้องการของรหัสลูกค้า ดังนั้นถ้าฉันจะต้องลบFileก็ยังจะขอไม่ได้ DeletableFile หลักการนี้เป็นความรู้ทั่วไปและมีชื่อยอมรับแล้วหรือไม่? มันขัดแย้งหรือไม่ มันถูกกล่าวถึงในตำราหรือไม่?

11
ภาพควรจะสามารถปรับขนาดตัวเองใน OOP หรือไม่?
ฉันกำลังเขียนแอพที่จะมีImageเอนทิตีและฉันมีปัญหาในการตัดสินใจว่าควรรับผิดชอบงานใด ก่อนอื่นฉันมีImageชั้นเรียน มันมีเส้นทางความกว้างและคุณลักษณะอื่น ๆ แล้วฉันจะสร้างชั้นสำหรับการดึงภาพด้วยวิธีการเดียวและการทดสอบเช่น:ImageRepositoryfindAllImagesWithoutThumbnail() createThumbnail()แต่ตอนนี้ผมยังจะต้องมีความสามารถในการ ใครควรจัดการกับสิ่งนั้น? ฉันกำลังคิดว่าจะมีImageManagerชั้นเรียนซึ่งจะเป็นชั้นเรียนเฉพาะแอป (จะมีองค์ประกอบที่สามารถนำมาใช้ใหม่ได้อีกด้วยซึ่งเป็นทางเลือกของการจัดการภาพของบุคคลที่สาม หรืออาจจะเป็น 0K เพื่อให้การImageปรับขนาดตัวเอง หรือปล่อยให้ImageRepositoryและImageManagerเป็นชั้นเดียวกันได้หรือไม่ คุณคิดอย่างไร?

5
ควรหยุดการสืบทอดเมื่อใด
กาลครั้งหนึ่งนานมานี้ฉันถามคำถามเกี่ยวกับการโอเวอร์โฟลว์เกี่ยวกับการสืบทอด ฉันได้กล่าวว่าฉันออกแบบเครื่องมือหมากรุกในแบบ OOP ดังนั้นฉันจึงรับช่วงต่อของฉันทั้งหมดจากระดับนามธรรมของ Piece แต่การสืบทอดยังคงดำเนินต่อไป ให้ฉันแสดงด้วยรหัส public abstract class Piece { public void MakeMove(); public void TakeBackMove(); } public abstract class Pawn: Piece {} public class WhitePawn :Pawn {} public class BlackPawn:Pawn {} โปรแกรมเมอร์พบว่าการออกแบบของฉันมีความเหนือกว่าทางวิศวกรรมเล็กน้อยและแนะนำให้เอาคลาสสีที่มีสีออกมา public abstract class Piece { public Color Color { get; set; } public abstract void …

2
โครงการ PHP โอเพ่นซอร์สใดที่มีการออกแบบ OOP ที่สมบูรณ์แบบที่ฉันสามารถเรียนรู้ได้ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันเป็นมือใหม่สำหรับ OOP และฉันเรียนรู้จากตัวอย่างได้ดีที่สุด คุณสามารถพูดได้ว่าคำถามนี้คล้ายกับโครงการโอเพ่นซอร์สสกาล่าใดที่ฉันควรศึกษาเพื่อเรียนรู้วิธีการเขียนโค้ดที่ดีที่สุด - แต่ใน PHP ฉันได้ยินมาแล้วว่า Symfony มี 'สถาปัตยกรรม' ที่ดีที่สุด (ฉันจะไม่แกล้งฉันรู้ว่ามันหมายถึงอะไร) และ Doctrine ORM มันคุ้มไหมที่จะใช้เวลาหลายเดือนในการอ่านซอร์สโค้ดของโครงการเหล่านี้พยายามที่จะอนุมานรูปแบบที่ใช้และเรียนรู้เทคนิคใหม่ ๆ ? ฉันได้เห็นหน้าเว็บจำนวนเท่ากันที่มีการปฏิเสธและชื่นชอบ codebase ของ Zend (จะให้ลิงก์หากเห็นว่าจำเป็น) คุณรู้หรือไม่เกี่ยวกับโครงการอื่น ๆ ที่จะทำให้นักพัฒนา OOP ที่มีประสบการณ์หลั่งน้ำตาแห่งความสุข? โปรดให้ฉันเพิ่มว่าการใช้งานจริงและขอบเขตการใช้งานไม่ใช่เรื่องที่น่ากังวลเลย - ฉันแค่ต้องการทำ: เลือกโครงการที่มี codebase ซึ่งถือว่ายอดเยี่ยมโดยผู้พัฒนาและดีกว่าฉัน เขียนโค้ดที่บรรลุสิ่งที่โครงการทำ เปรียบเทียบผลลัพธ์และลองเรียนรู้สิ่งที่ฉันไม่รู้ โดยทั่วไปฐานความสนใจด้านวิชาการ มีคำแนะนำอะไรมั้ย

2
เราควรสร้างแบบจำลองความสัมพันธ์เอนทิตีหรือการสร้างแบบจำลองเชิงวัตถุก่อนหรือไม่
เมื่อสร้างแอปพลิเคชันจากศูนย์ฉันควรเริ่มต้นด้วยโมเดลเชิงวัตถุ (OO) หรือโมเดลเอนทิตีสัมพันธ์ (ER) หรือไม่

7
กำลังตรวจสอบว่าเมธอดส่งคืน false หรือไม่: กำหนดผลลัพธ์ให้กับตัวแปรชั่วคราวหรือทำให้การเรียกใช้เมธอดตรงตามเงื่อนไขหรือไม่
เป็นวิธีปฏิบัติที่ดีในการเรียกใช้เมธอดที่ส่งคืนค่าจริงหรือเท็จในคำสั่ง if หรือไม่? บางสิ่งเช่นนี้ private void VerifyAccount() { if (!ValidateCredentials(txtUser.Text, txtPassword.Text)) { MessageBox.Show("Invalid user name or password"); } } private bool ValidateCredentials(string userName, string password) { string existingPassword = GetUserPassword(userName); if (existingPassword == null) return false; var hasher = new Hasher { SaltSize = 16 }; bool passwordsMatch = hasher.CompareStringToHash(password, …

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

7
คุณสมบัติที่จำเป็นสำหรับการวางแนววัตถุคืออะไร?
ฉันแค่สงสัยว่าคุณสมบัติหรือภาษาใดที่ห้องสมุดต้องมีเพื่อให้มันถูกกำหนดให้เป็น 'Object Oriented' คือการจัดวางวัตถุบางสิ่งบางอย่างที่สามารถมากขึ้นหรือน้อยกว่าจะประสบความสำเร็จในการใด ๆวัตถุประสงค์ทั่วไปการเขียนโปรแกรมภาษาที่มีคุณสมบัติที่ดี? หรือเป็นสิ่งที่สามารถทำได้ในภาษาที่โฆษณาเฉพาะที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ? ตัวอย่างเช่นดูที่รหัส C ต่อไปนี้: SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE); SDL_FreeSurface( screen ); หรือรหัสที่กล่าวถึงที่นี่ ตอนนี้โค้ดด้านบนไม่ได้ใช้การสืบทอด, ความแปรปรวนแบบรันไทม์ (?), ฟังก์ชั่นเสมือนจริง ฯลฯ แต่ดูเหมือนว่า OOP จะค่อนข้างดีสำหรับฉัน Object-Orientation เป็นเพียงการเขียนโค้ดซึ่งขึ้นอยู่กับโครงสร้างข้อมูลที่สร้างขึ้นได้และสามารถทำลายได้เช่นอ็อบเจกต์คลาสคลาส structs เป็นต้นซึ่งไม่ต้องการรูปแบบหรือคุณสมบัติพิเศษใด ๆ ที่จัดทำโดยภาษาโปรแกรมหรือไลบรารี ?

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

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