คำถามติดแท็ก access-modifiers

17
ทำไมถึงมีช่องส่วนตัวไม่ได้รับการป้องกันเพียงพอ
ทัศนวิสัยprivateของฟิลด์คลาส / คุณสมบัติ / แอ็ตทริบิวต์มีประโยชน์หรือไม่? ใน OOP ไม่ช้าก็เร็วคุณจะสร้างคลาสย่อยของคลาสและในกรณีนั้นมันเป็นเรื่องดีที่จะเข้าใจและสามารถปรับใช้งานได้อย่างสมบูรณ์ หนึ่งในสิ่งแรกที่ฉันทำเมื่อฉันคลาสย่อยคลาสคือการเปลี่ยนprivateวิธีการprotectedมากมาย แต่ซ่อนรายละเอียดจากโลกภายนอกเป็นสำคัญดังนั้นเราจึงจำเป็นและไม่เพียงprotectedpublic คำถามของฉันคือ: คุณรู้เกี่ยวกับกรณีการใช้งานที่สำคัญprivateแทนที่จะprotectedเป็นเครื่องมือที่ดีหรือสองตัวเลือก " protected& public" เพียงพอสำหรับภาษา OOP หรือไม่?

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

3
ทำไมไม่มีตัวดัดแปลงการเข้าถึงที่ชัดเจนใน Python:
หาก 'ชัดเจนดีกว่านัย' เหตุใดจึงไม่มีการปรับเปลี่ยนการเข้าถึงอย่างชัดเจนใน Python: สาธารณะการป้องกันส่วนตัว ฯลฯ ฉันรู้ว่าความคิดนี้คือโปรแกรมเมอร์ควรรู้ว่าต้องทำอะไรผ่านคำใบ้ - ไม่จำเป็นต้องใช้ 'กำลังดุร้าย' แต่ IMO 'Encapsulation' หรือ 'การซ่อนข้อมูล' ไม่เพียง แต่จะช่วยให้ผู้คนออกไปมันเป็นคำถามขององค์กรและโครงสร้าง: เลเยอร์การพัฒนาของคุณควรมีการกำหนดขอบเขตและเส้นขอบที่กำหนดขอบเขตได้เองอย่างชัดเจนเหมือนกับระบบทางกายภาพ ใครบางคนโปรดช่วยฉันออกมาที่นี่พร้อมคำอธิบายที่ชัดเจนว่าทำไมข้อ จำกัด การเข้าถึงจึงบอกเป็นนัยมากกว่าชัดเจนใน Python ภาษาที่ดูเหมือนใกล้จะสมบูรณ์แบบ แก้ไข: จนถึงตอนนี้ฉันเห็นคำตอบที่เสนอมา 3 ข้อแล้วและฉันก็รู้ว่าคำถามของฉันมี 2 ส่วน: ทำไมไม่มีคำสำคัญเช่น private def myFunc(): dostuff.... แทน IMO ผู้น่าเกลียดและยากที่จะพิมพ์ขีดล่าง แต่นั่นไม่ใช่ประเด็นสำคัญ ที่สำคัญกว่า: เหตุใดตัวดัดแปลงการเข้าถึงเหล่านี้จึงเป็นเพียง 'คำแนะนำ' หรือคำแนะนำเท่านั้นและไม่บังคับใช้ มันจะยากที่จะเปลี่ยนในภายหลัง มันง่ายมากที่จะเปลี่ยน 'ป้องกัน' เป็น 'สาธารณะ' - และถ้าคุณมีเครือข่ายการถ่ายทอดที่ซับซ้อนที่ทำให้มันยากคุณมีการออกแบบที่ไม่ดี - …

6
ทำไม Java ถึงทำให้ค่าเริ่มต้นการเข้าถึงแพคเกจ?
ฉันถามคำถามนี้เพราะฉันเชื่อว่าพวกเขาทำมันด้วยเหตุผลที่ดีมากและคนส่วนใหญ่ไม่ได้ใช้อย่างถูกต้องดีจากประสบการณ์ในอุตสาหกรรมจนถึงตอนนี้ แต่ถ้าทฤษฎีของฉันเป็นจริงฉันก็ไม่แน่ใจว่าทำไมพวกเขาถึงรวมตัวแก้ไขการเข้าถึงส่วนตัว ... ? ฉันเชื่อว่าหากใช้การเข้าถึงเริ่มต้นอย่างเหมาะสมจะช่วยเพิ่มความสามารถในการทดสอบในขณะที่ยังคงการห่อหุ้ม และยังทำให้ตัวแก้ไขการเข้าถึงส่วนตัวซ้ำซ้อน ตัวดัดแปลงการเข้าถึงเริ่มต้นสามารถใช้เพื่อให้ผลกระทบแบบเดียวกันโดยใช้แพคเกจเฉพาะสำหรับวิธีการที่ต้องซ่อนจากส่วนอื่น ๆ ของโลกและทำได้โดยไม่กระทบต่อความสามารถในการทดสอบเป็นแพคเกจในโฟลเดอร์ทดสอบ สามารถเข้าถึงวิธีการเริ่มต้นทั้งหมดที่ประกาศในโฟลเดอร์ต้นทาง ฉันเชื่อว่านี่เป็นสาเหตุที่ Java ใช้การเข้าถึงแพคเกจเป็น 'ค่าเริ่มต้น' แต่ฉันไม่แน่ใจว่าทำไมพวกเขาถึงรวมการเข้าถึงส่วนตัวฉันแน่ใจว่ามีกรณีการใช้ที่ถูกต้อง ...

5
ทำไมมันไม่กลายเป็นรูปแบบทั่วไปในการใช้ตัวตั้งค่าในตัวสร้าง
อุปกรณ์เสริมและตัวดัดแปลง (aka setters and getters) มีประโยชน์ด้วยเหตุผลสามประการ: พวกเขา จำกัด การเข้าถึงตัวแปร ตัวอย่างเช่นตัวแปรสามารถเข้าถึงได้ แต่ไม่สามารถแก้ไขได้ พวกเขาตรวจสอบพารามิเตอร์ พวกเขาอาจทำให้เกิดผลข้างเคียง มหาวิทยาลัยหลักสูตรออนไลน์บทช่วยสอนบทความในบล็อกและตัวอย่างโค้ดบนเว็บล้วนเน้นหนักเกี่ยวกับความสำคัญของผู้เข้าถึงและผู้ดัดแปลงพวกเขาเกือบรู้สึกว่า "ต้องมี" สำหรับรหัสในปัจจุบัน ดังนั้นเราสามารถค้นหาได้แม้ว่าพวกเขาจะไม่ให้ค่าเพิ่มเติมใด ๆ เช่นรหัสด้านล่าง public class Cat { private int age; public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } ดังที่ได้กล่าวมามันเป็นเรื่องธรรมดามากที่จะหาตัวดัดแปลงที่มีประโยชน์มากกว่าซึ่งตัวตรวจสอบความถูกต้องของพารามิเตอร์และส่งข้อยกเว้นหรือส่งคืนบูลีนหากมีการป้อนข้อมูลที่ไม่ถูกต้อง /** * Sets the age for …

7
ใน Java ทำไมสมาชิกที่ได้รับความคุ้มครองทำให้เข้าถึงคลาสของแพ็คเกจเดียวกันได้
จากเอกสารอย่างเป็นทางการ... แพ็คเกจ Class Class ย่อย YYYY สาธารณะ ป้องกัน YYYN ไม่มีตัวแก้ไข YYNN YNNN ส่วนตัว สิ่งนี้คือฉันจำไม่ได้ว่ามีกรณีการใช้งานที่ฉันต้องการเข้าถึงสมาชิกที่ได้รับความคุ้มครองจากชั้นเรียนภายในแพ็คเกจเดียวกัน อะไรคือสาเหตุของการนำไปใช้นี้? แก้ไข:เพื่อชี้แจงฉันกำลังมองหากรณีการใช้งานเฉพาะที่ทั้งคลาสย่อยและคลาสภายในแพ็คเกจเดียวกันจำเป็นต้องเข้าถึงเขตข้อมูลหรือวิธีการป้องกัน package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); …

6
สถานการณ์ในโลกแห่งความเป็นจริงสำหรับวิธีการป้องกัน
วันนี้ฉันสังเกตเห็นว่าโดยทั่วไปฉันไม่เคยใช้protectedวิธีการในรหัส C ++ เพราะฉันไม่ค่อยรู้สึกว่าจำเป็นต้องเรียกวิธีการที่ไม่ใช่แบบสาธารณะของผู้ปกครอง ฉันใช้การป้องกันใน Java ในรูปแบบวิธีการแม่แบบ แต่เนื่องจากคุณสามารถแทนที่วิธีส่วนตัวใน C ++ ฉันไม่จำเป็นต้องprotectedมี ดังนั้นสถานการณ์จริงที่ฉันต้องการใช้protectedวิธีการในรหัส C ++ คืออะไร (โปรดทราบว่าฉันไม่ชอบการนำมรดกไปใช้โดยทั่วไปซึ่งอาจอธิบายได้มาก ... )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.