คำถามติดแท็ก oop

การเขียนโปรแกรมเชิงวัตถุเป็นกระบวนทัศน์การเขียนโปรแกรมโดยใช้ "วัตถุ": โครงสร้างข้อมูลประกอบด้วยเขตข้อมูลและวิธีการร่วมกับการโต้ตอบของพวกเขา

10
ตัวสร้างและวิธีการของโรงงาน [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เมื่อสร้างโมเดลคลาสอะไรที่เป็นวิธีที่ดีที่สุดในการเริ่มต้น: ตัวสร้างหรือ วิธีการของโรงงาน และอะไรคือข้อควรพิจารณาในการใช้ทั้งสองอย่าง? ในบางสถานการณ์ฉันชอบที่จะใช้วิธีการจากโรงงานซึ่งคืนค่า null หากไม่สามารถสร้างวัตถุได้ ทำให้รหัสเรียบร้อย ฉันสามารถตรวจสอบว่าค่าที่ส่งคืนไม่เป็นโมฆะก่อนที่จะดำเนินการทางเลือกตรงกันข้ามกับการโยนข้อยกเว้นจากตัวสร้าง (โดยส่วนตัวแล้วฉันไม่ชอบข้อยกเว้น) บอกว่าฉันมีนวกรรมิกในคลาสที่คาดว่าจะมีค่า id ตัวสร้างใช้ค่านี้เพื่อเติมคลาสจากฐานข้อมูล ในกรณีที่ไม่มีเร็กคอร์ดที่มี id ที่ระบุตัวสร้างจะสร้าง RecordNotFoundException ในกรณีนี้ฉันจะต้องล้อมรอบการสร้างคลาสดังกล่าวทั้งหมดภายใน try..catch block ตรงกันข้ามกับที่ฉันสามารถมีวิธีการโรงงานคงที่ในชั้นเรียนเหล่านั้นซึ่งจะกลับเป็นโมฆะถ้าไม่พบบันทึก ในกรณีนี้วิธีการที่ดีกว่าวิธีการก่อสร้างหรือโรงงาน?
181 oop  ooad 


5
เมื่อใดฉันจึงควรใช้คลาสใน Python
ฉันเขียนโปรแกรมด้วยภาษาไพ ธ อนมาประมาณสองปี ข้อมูลส่วนใหญ่ (pandas, mpl, numpy) แต่ยังเป็นสคริปต์อัตโนมัติและเว็บแอปขนาดเล็ก ฉันพยายามเป็นโปรแกรมเมอร์ที่ดีขึ้นและเพิ่มความรู้ของหลามและหนึ่งในสิ่งที่รบกวนจิตใจฉันคือฉันไม่เคยใช้ชั้นเรียน (นอกการคัดลอกรหัสขวดแบบสุ่มสำหรับเว็บแอปขนาดเล็ก) โดยทั่วไปฉันเข้าใจว่าพวกเขาคืออะไร แต่ฉันไม่สามารถคาดศีรษะได้ว่าทำไมฉันถึงต้องการให้พวกเขาทำหน้าที่ง่ายๆ ในการเพิ่มความเฉพาะเจาะจงให้กับคำถามของฉัน: ฉันเขียนรายงานอัตโนมัติเป็นตันซึ่งเกี่ยวข้องกับการดึงข้อมูลจากแหล่งข้อมูลหลายแห่ง (mongo, sql, postgres, apis), ทำการแสดงข้อมูลและการจัดรูปแบบจำนวนมากหรือเล็กน้อยเขียนข้อมูลไปยัง csv / excel / html ส่งออกมาทางอีเมล สคริปต์มีตั้งแต่ ~ 250 บรรทัดถึง ~ 600 บรรทัด มีเหตุผลใดที่ฉันจะใช้คลาสเพื่อทำสิ่งนี้และทำไม?
177 python  oop 

6
การเรียกคลาสผู้ปกครอง __init__ ที่มีหลายมรดกวิธีที่ถูกต้องคืออะไร?
ว่าฉันมีสถานการณ์สืบทอดหลาย: class A(object): # code for A here class B(object): # code for B here class C(A, B): def __init__(self): # What's the right code to write here to ensure # A.__init__ and B.__init__ get called? มีสองวิธีทั่วไปเพื่อเขียนเป็นC's __init__: (แบบเก่า) ParentClass.__init__(self) (ใหม่สไตล์) super(DerivedClass, self).__init__() อย่างไรก็ตามในกรณีใดกรณีหนึ่งถ้าคลาสแม่ ( AและB) ไม่ปฏิบัติตามแบบแผนเดียวกันรหัสจะทำงานไม่ถูกต้อง (บางคนอาจพลาดหรือถูกเรียกหลายครั้ง) ดังนั้นวิธีที่ถูกต้องอีกครั้งคืออะไร? มันง่ายที่จะพูดว่า …

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

13
การใช้ property () บน classmethods
ฉันมีคลาสที่มีวิธีการเรียนสองวิธี (โดยใช้ฟังก์ชั่น classmethod ()) สำหรับการรับและการตั้งค่าสิ่งที่เป็นตัวแปรคงที่เป็นหลัก ฉันพยายามใช้คุณสมบัติ () กับสิ่งเหล่านี้ แต่มันส่งผลให้เกิดข้อผิดพลาด ฉันสามารถทำซ้ำข้อผิดพลาดด้วยสิ่งต่อไปนี้ในล่าม: class Foo(object): _var = 5 @classmethod def getvar(cls): return cls._var @classmethod def setvar(cls, value): cls._var = value var = property(getvar, setvar) ฉันสามารถสาธิตวิธีการเรียน แต่พวกเขาไม่ทำงานเป็นคุณสมบัติ: >>> f = Foo() >>> f.getvar() 5 >>> f.setvar(4) >>> f.getvar() 4 >>> f.var Traceback (most recent …
173 python  oop 

20
“ ข้อต่อหลวมคืออะไร” กรุณาให้ตัวอย่าง
ฉันดูเหมือนจะไม่สามารถห้อมล้อมแนวคิดของ "การแต่งงานกันอย่างหลวม ๆ " ฉันคิดว่ามันไม่ได้ช่วยว่าคำว่า "หลวม" มักจะมีความหมายเชิงลบดังนั้นฉันมักจะลืมว่าการมีเพศสัมพันธ์ที่หลวมเป็นสิ่งที่ดี ใครสักคนโปรดแสดงรหัส "ก่อน" และ "หลัง" (หรือรหัสเทียม) ที่แสดงแนวคิดนี้

17
อะไรคือความแตกต่างที่สำคัญระหว่าง Inheritance และ Polymorphism?
ฉันถูกนำเสนอด้วยคำถามนี้ในตอนท้ายของการสอบโมดูลเปิดจองวันนี้และพบว่าตัวเองหลงทาง ฉันอ่านHead first Javaและคำจำกัดความทั้งสองดูเหมือนจะเหมือนกันทุกประการ ฉันแค่สงสัยว่าความแตกต่างที่สำคัญสำหรับจิตใจของฉันคืออะไร ฉันรู้ว่ามีคำถามที่คล้ายกันจำนวนมาก แต่ไม่มีฉันเห็นซึ่งให้คำตอบที่ชัดเจน

15
ใช้คลาสเดี่ยวด้วยวิธีที่ดีที่สุด?
สมมติว่าฉันมีคลาสที่ตั้งใจจะทำหน้าที่เดียว หลังจากดำเนินการฟังก์ชั่นมันสามารถถูกทำลาย มีเหตุผลใดที่จะชอบแนวทางเหล่านี้หรือไม่? // Initialize arguments in constructor MyClass myObject = new MyClass(arg1, arg2, arg3); myObject.myMethod(); // Pass arguments to method MyClass myObject = new MyClass(); myObject.myMethod(arg1, arg2, arg3); // Pass arguments to static method MyClass.myMethod(arg1, arg2, arg3); ฉันถูกคลุมเครือโดยเจตนาเกี่ยวกับรายละเอียดพยายามหาแนวทางสำหรับสถานการณ์ที่แตกต่างกัน แต่ฉันไม่ได้นึกถึงฟังก์ชั่นห้องสมุดง่ายๆอย่าง Math.random () ฉันกำลังคิดว่าจะมีคลาสที่ทำงานเฉพาะอย่างซับซ้อนบางอย่าง แต่ต้องการเพียงหนึ่งวิธี (สาธารณะ) เท่านั้นที่จะทำได้
172 c#  java  oop  static-methods 

10
ควรใช้คลาสที่คงที่เทียบกับอินสแตนซ์
PHP เป็นภาษาโปรแกรมแรกของฉัน ฉันไม่สามารถคาดศีรษะได้เมื่อใช้คลาสที่คงที่และวัตถุที่สร้างอินสแตนซ์ ฉันรู้ว่าคุณสามารถทำซ้ำและคัดลอกวัตถุ อย่างไรก็ตามในทุกเวลาของฉันโดยใช้ php วัตถุหรือฟังก์ชั่นใด ๆ มักจะจบลงด้วยการกลับมาเป็นค่าเดียว (อาร์เรย์, สตริง, int) หรือโมฆะ ฉันเข้าใจแนวคิดในหนังสือเช่นคลาสของตัวละครในวิดีโอเกม ทำสำเนาวัตถุรถยนต์และสร้างใหม่ให้เป็นสีแดงซึ่งทั้งหมดนั้นสมเหตุสมผล แต่สิ่งที่ไม่มีในแอปพลิเคชันใน php และเว็บแอป ตัวอย่างง่ายๆ บล็อก. วัตถุใดของบล็อกที่จะใช้งานได้ดีที่สุดเป็นวัตถุแบบสแตติกหรืออินสแตนซ์ คลาส DB? ทำไมไม่ยกตัวอย่างวัตถุ db ในขอบเขตส่วนกลาง? ทำไมไม่ทำให้ทุกวัตถุคงที่แทน? แล้วประสิทธิภาพล่ะ มันเป็นแค่สไตล์หรือไม่? มีวิธีที่เหมาะสมในการทำสิ่งนี้หรือไม่?
170 php  oop  class 

8
วิธีการผูกมัด PHP?
ฉันใช้ PHP 5 และฉันเคยได้ยินเรื่องใหม่เกี่ยวกับวิธีการเชิงวัตถุที่เรียกว่า 'การโยงวิธีการ' มันคืออะไรกันแน่? ฉันจะใช้งานได้อย่างไร
170 php  oop  method-chaining 

8
การแยกรหัสชั้นเรียนออกเป็นส่วนหัวและไฟล์ cpp
ฉันสับสนเกี่ยวกับวิธีการแยกการใช้งานและรหัสการประกาศของคลาสแบบง่ายเป็นส่วนหัวและไฟล์ cpp ใหม่ ตัวอย่างเช่นฉันจะแยกรหัสสำหรับคลาสต่อไปนี้ได้อย่างไร class A2DD { private: int gx; int gy; public: A2DD(int x,int y) { gx = x; gy = y; } int getSum() { return gx + gy; } };
170 c++  oop  class 

16
Java หลายมรดก
ในความพยายามที่จะเข้าใจวิธีแก้ปัญหาการสืบทอดหลายอย่างของ Java อย่างสมบูรณ์ฉันมีคำถามแบบคลาสสิกที่ฉันต้องการชี้แจง ให้บอกว่าฉันมีคลาสAnimalนี้มีคลาสย่อยBirdและHorseและฉันจำเป็นต้องทำคลาสPegasusที่ขยายจากBirdและHorseเนื่องจากPegasusเป็นทั้งนกและม้า ฉันคิดว่านี่เป็นปัญหาเพชรแบบดั้งเดิม จากสิ่งที่ฉันสามารถเข้าใจวิธีที่คลาสสิกที่จะแก้ปัญหานี้คือการทำให้Animal, BirdและHorseการเชื่อมต่อการเรียนและการดำเนินการPegasusจากพวกเขา ฉันสงสัยว่ามีวิธีอื่นในการแก้ปัญหาที่ฉันยังสามารถสร้างวัตถุสำหรับนกและม้าได้หรือไม่ หากมีวิธีที่จะสามารถสร้างสัตว์ก็จะดี แต่ไม่จำเป็น


10
ฉันจะป้องกันการปรับเปลี่ยนเขตข้อมูลส่วนตัวในชั้นเรียนได้อย่างไร
ลองนึกภาพว่าฉันมีคลาสนี้: public class Test { private String[] arr = new String[]{"1","2"}; public String[] getArr() { return arr; } } ตอนนี้ฉันมีคลาสอื่นที่ใช้คลาสด้านบน: Test test = new Test(); test.getArr()[0] ="some value!"; //!!! ดังนั้นนี่คือปัญหา: ฉันได้เข้าถึงสนามส่วนตัวของชั้นเรียนจากภายนอก! ฉันจะป้องกันสิ่งนี้ได้อย่างไร ฉันหมายความว่าฉันจะทำให้อาร์เรย์นี้ไม่เปลี่ยนรูปแบบได้อย่างไร นี่หมายความว่าทุกวิธีทะเยอทะยานคุณสามารถหาทางเข้าถึงฟิลด์ส่วนตัวได้หรือไม่? (ฉันไม่ต้องการห้องสมุดใด ๆ เช่น Guava ฉันแค่ต้องรู้วิธีที่ถูกต้องในการทำเช่นนี้)
165 java  arrays  oop  class 

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