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

ใน OOP กลไกในการ จำกัด การเข้าถึงส่วนประกอบบางอย่างของออบเจ็กต์หรือหลักการออกแบบที่สนับสนุนการแยกส่วนจากรายละเอียดการนำไปใช้งาน

15
ความแตกต่างระหว่างการสืบทอดส่วนบุคคลสาธารณะและการป้องกัน
ความแตกต่างระหว่างคืออะไรpublic, privateและprotectedมรดกในc ++? คำถามทั้งหมดที่ฉันพบในการจัดการกับกรณีเฉพาะ

12
ทำไมวิธีการแบบส่วนตัวของ Python จึงไม่เป็นแบบส่วนตัว
Python ช่วยให้เราสามารถสร้างวิธีการและตัวแปร 'ส่วนตัว' ภายในชั้นเรียนโดยการใส่เครื่องหมายขีดล่างคู่กับชื่อดังนี้: __myPrivateMethod(). แล้วจะอธิบายได้อย่างไร >>> class MyClass: ... def myPublicMethod(self): ... print 'public method' ... def __myPrivateMethod(self): ... print 'this is private!!' ... >>> obj = MyClass() >>> obj.myPublicMethod() public method >>> obj.__myPrivateMethod() Traceback (most recent call last): File "", line 1, in AttributeError: MyClass instance has no …

30
เมื่อใดที่คุณควรใช้ 'เพื่อน' ใน C ++
ฉันได้อ่านคำถามที่พบบ่อย C ++และอยากรู้เกี่ยวกับการfriendประกาศ ฉันเองไม่เคยใช้มันเป็นการส่วนตัว แต่ฉันสนใจที่จะสำรวจภาษา ตัวอย่างที่ดีของการใช้friendคืออะไร อ่านคำถามที่พบบ่อยอีกเล็กน้อยฉันชอบความคิดของ<< >>ผู้ประกอบการมากไปและเพิ่มเป็นเพื่อนของชั้นเรียนเหล่านั้น อย่างไรก็ตามฉันไม่แน่ใจว่าวิธีนี้จะไม่ทำลาย encapsulation ข้อยกเว้นเหล่านี้จะอยู่ภายในความเข้มงวดของ OOP เมื่อใด
354 c++  oop  encapsulation  friend 


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

22
การสรุปข้อมูล VS การสรุปข้อมูล Encapsulation
คุณช่วยบอกฉันว่าอะไรคือความแตกต่างระหว่างสิ่งที่เป็นนามธรรมและการซ่อนข้อมูลในการพัฒนาซอฟต์แวร์? ฉันสับสน. สิ่งที่เป็นนามธรรมจะซ่อนการใช้รายละเอียดและข้อมูลที่ซ่อนอยู่ในบทคัดย่อรายละเอียดทั้งหมดของบางสิ่งบางอย่าง อัปเดต:ฉันพบคำตอบที่ดีสำหรับแนวคิดทั้งสามนี้ ดูคำตอบที่แยกต่างหากด้านล่างหลายอ้างอิงที่นำมาจากที่นั่น

9
ฉันควรส่งคืนคอลเล็กชันหรือสตรีมหรือไม่
สมมติว่าฉันมีวิธีที่ส่งกลับมุมมองแบบอ่านอย่างเดียวในรายการสมาชิก: class Team { private List < Player > players = new ArrayList < > (); // ... public List < Player > getPlayers() { return Collections.unmodifiableList(players); } } นอกจากนี้สมมติว่าลูกค้าทั้งหมดทำซ้ำในรายการทันที อาจจะนำผู้เล่นเข้าสู่ JList หรืออะไรบางอย่าง ลูกค้าไม่ได้จัดเก็บการอ้างอิงไปยังรายการสำหรับการตรวจสอบในภายหลัง! ในสถานการณ์ทั่วไปนี้ฉันควรส่งคืนสตรีมแทนหรือไม่ public Stream < Player > getPlayers() { return players.stream(); } หรือส่งคืนสตรีมที่ไม่มีลักษณะเฉพาะใน Java หรือไม่ สตรีมที่ออกแบบมาให้ "ยุติ" …

9
Java: การมองเห็น Subpackage หรือไม่
ฉันมีสองแพคเกจในโครงการของฉัน: และodp.proj odp.proj.testมีวิธีการบางอย่างที่ฉันต้องการให้ปรากฏเฉพาะกับคลาสในแพ็กเกจทั้งสองนี้ ฉันจะทำสิ่งนี้ได้อย่างไร แก้ไข:หากไม่มีแนวคิดของแพ็กเกจย่อยใน Java มีวิธีแก้ไขหรือไม่? ฉันมีวิธีการบางอย่างที่ฉันต้องการให้ผู้ทดสอบและสมาชิกคนอื่น ๆ ของแพ็คเกจใช้งานได้เท่านั้น ฉันควรจะทิ้งทุกอย่างลงในแพ็คเกจเดียวกันหรือไม่? ใช้การสะท้อนที่ครอบคลุมหรือไม่

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

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

25
วิธีที่ดีในการห่อหุ้ม Integer.parseInt ()
ฉันมีโปรเจ็กต์ที่เรามักจะใช้Integer.parseInt()ในการแปลง String เป็น int เมื่อมีบางอย่างผิดพลาด (ตัวอย่างเช่นStringไม่ใช่ตัวเลข แต่เป็นตัวอักษรaหรืออะไรก็ตาม) วิธีนี้จะทำให้เกิดข้อยกเว้น อย่างไรก็ตามหากฉันต้องจัดการกับข้อยกเว้นในโค้ดของฉันทุกที่สิ่งนี้จะเริ่มดูน่าเกลียดอย่างรวดเร็ว ฉันต้องการใส่วิธีนี้ แต่ฉันไม่มีเงื่อนงำในการส่งคืนค่าที่สะอาดเพื่อแสดงว่าการแปลงผิดพลาด ใน C ++ ฉันสามารถสร้างเมธอดที่ยอมรับตัวชี้ไปที่ int และปล่อยให้เมธอดนั้นส่งคืนจริงหรือเท็จ อย่างไรก็ตามเท่าที่ฉันรู้สิ่งนี้ไม่สามารถทำได้ใน Java ฉันยังสามารถสร้างออบเจ็กต์ที่มีตัวแปรจริง / เท็จและค่าที่แปลงแล้ว แต่ดูเหมือนจะไม่เหมาะเช่นกัน สิ่งเดียวกันนี้เกิดขึ้นกับมูลค่าทั่วโลกและสิ่งนี้อาจทำให้ฉันมีปัญหากับมัลติเธรด มีวิธีที่สะอาดในการทำเช่นนี้หรือไม่?

2
อะไรคือความแตกต่างระหว่างคีย์เวิร์ดส่วนตัวและฟิลด์ส่วนตัวใน TypeScript?
ใน TypeScript 3.8+ ความแตกต่างระหว่างการใช้ privateคำหลักเพื่อทำเครื่องหมายสมาชิกส่วนตัวคืออะไร: class PrivateKeywordClass { private value = 1; } และใช้#ฟิลด์ส่วนตัวที่เสนอสำหรับ JavaScript : class PrivateFieldClass { #value = 1; } ฉันควรจะเลือกอันไหนมากกว่ากัน?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.