שינוי גישה 'ציבורי' של Java

1. סקירה כללית

במאמר מהיר זה, נסקור את פּוּמְבֵּי משנה לעומק, נדון מתי ואיך להשתמש בו עם שיעורים וחברים.

בנוסף, נמחיש את החסרונות בשימוש בשדות נתונים ציבוריים.

לקבלת סקירה כללית של מתכני גישה, בהחלט עיין במאמר שלנו בנושא מגניב גישה ב- Java.

2. מתי להשתמש בשינוי גישה ציבורית

שיעורים ציבוריים וממשקים, יחד עם חברי ציבור, מגדירים API. זה אותו חלק בקוד שאחרים יכולים לראות ולהשתמש בו כדי לשלוט בהתנהגות האובייקטים שלנו.

עם זאת, שימוש יתר בשינוי הציבורי מפר את עקרון הקפסולה של תכנות מונחה עצמים (OOP) ויש לו כמה חסרונות:

  • זה מגדיל את גודל ה- API, ומקשה על השימוש בלקוחות
  • קשה יותר לשנות את הקוד שלנו מכיוון שלקוחות מסתמכים עליו - כל שינוי עתידי עשוי לשבור את הקוד שלהם

3. ממשקים ושיעורים ציבוריים

3.1. ממשקים ציבוריים

ממשק ציבורי מגדיר מפרט שיכול להיות בעל יישום אחד או יותר. יישומים אלה יכולים להינתן על ידינו או להיכתב על ידי אחרים.

לדוגמה, ה- API של Java חושף את ה- חיבור ממשק להגדרת פעולות חיבור מסד נתונים, ומשאיר את היישום בפועל לכל ספק. בזמן ריצה, אנו מקבלים את החיבור הרצוי בהתבסס על הגדרת הפרויקט:

חיבור חיבור = DriverManager.getConnection (url);

ה getConnection השיטה מחזירה מופע של יישום ספציפי לטכנולוגיה.

3.2. שיעורים ציבוריים

אנו מגדירים שיעורים ציבוריים כך שלקוחות יוכלו להשתמש בחבריהם על ידי יישור והפניה סטטית:

assertEquals (0, BigDecimal חדש (0) .intValue ()); // חבר למשל assertEquals (2147483647, Integer.MAX_VALUE); // חבר סטטי 

יתר על כן, אנו יכולים לעצב שיעורים ציבוריים לירושה באמצעות האופציונלי תַקצִיר מַתקֵן. כאשר אנו משתמשים ב- תַקצִיר משנה, המחלקה היא כמו שלד שיש בו שדות ושיטות מיושמות מראש שכל יישום קונקרטי יכול להשתמש בהן, בנוסף לכך שיש שיטות מופשטות שכל תת-מחלקה צריכה ליישם.

לדוגמה, מסגרת אוספי Java מספקת את תקציר רשימה כיתה כבסיס ליצירת רשימות מותאמות אישית:

class class ListOfThree מרחיב את AbstractList {@Override public E get (int index) {// יישום מותאם אישית} @Override גודל int public () {// יישום מותאם אישית}}

אז אנחנו רק צריכים ליישם את לקבל() ו גודל() שיטות. שיטות אחרות כמו אינדקס של() ו מכיל את כל () מיושמים כבר עבורנו.

3.3. שיעורים ציבוריים מקוונים וממשקים

בדומה למחלקות ולממשקים ציבוריים ברמה העליונה, מחלקות ציבוריות וממשקים מקוננים מגדירים סוג נתונים של API. עם זאת, הם שימושיים במיוחד בשתי דרכים:

  • הם מצביעים בפני משתמש הקצה של ה- API כי הסוג הרמה העליונה הסוגרת וסוגיו הסגורים הם בעלי קשר הגיוני ומשמשים יחד.
  • הם הופכים את בסיס הקוד שלנו לקומפקטי יותר על ידי צמצום מספר קבצי קוד המקור שהיינו משתמשים בהם אם היינו מכריזים עליהם ככיתות וממשקים ברמה העליונה.

דוגמה לכך היא מַפָּה.כְּנִיסָה ממשק מממשק ה- API המרכזי של Java:

עבור (Map.Entry entry: mapObject.entrySet ()) {}

הֲכָנָה מַפָּה.כניסה א ממשק מקונן מאוד קשור לזה java.util.Map ממשק וחסך מאיתנו ליצור קובץ נוסף בתוך java.util חֲבִילָה.

אנא קרא את מאמר הכיתות המקוננות לפרטים נוספים.

4. שיטות ציבוריות

שיטות ציבוריות מאפשרות למשתמשים לבצע פעולות מוכנות. דוגמה לכך היא הציבור toLowerCase שיטה ב חוּט ממשק API:

assertEquals ("אלכס", "ALEX" .toLowerCase ());

אנו יכולים להפוך בבטחה שיטה ציבורית לסטטית אם היא אינה משתמשת בשדות מופעים כלשהם. ה מזויף שיטה מה- מספר שלם class הוא דוגמה לשיטה סטטית ציבורית:

assertEquals (1, Integer.parseInt ("1"));

קונסטרוקטורים הם בדרך כלל ציבוריים כדי שנוכל לייצר ולאותחז אובייקטים, אם כי לפעמים הם עשויים להיות פרטיים כמו ביחידים.

5. שדות ציבוריים

שדות ציבוריים מאפשרים לשנות את מצב האובייקט ישירות. כלל האצבע הוא שאסור לנו להשתמש בשדות ציבוריים. יש לכך כמה סיבות, כפי שאנו עומדים לראות.

5.1. חוט-בטיחות

השימוש בחשיפה ציבורית עם שדות שאינם סופיים או שדות ניתנים לשינוי סופי אינו בטיחות תבריג. איננו יכולים לשלוט על שינוי הפניות או המצבים שלהם בשרשור שונה.

אנא עיין במאמר שלנו בנושא בטיחות חוטים למידע נוסף על כתיבת קוד בטוח לשרשור.

5.2. נקיטת פעולות לשינויים

אין לנו שליטה על תחום ציבורי שאינו סופי מכיוון שניתן להגדיר ישירות את התייחסותו או מצבו.

במקום זאת, עדיף להסתיר את השדות באמצעות שינוי פרטי ולהשתמש במגדיר ציבורי:

סטודנט בכיתה ציבורית {גיל פרטי פרטי; בטל ציבורי setAge (int age) {if (גיל 150) {זרוק IllegalArgumentException (); } this.age = גיל; }}

5.3. שינוי סוג הנתונים

שדות ציבוריים, ניתנים לשינוי או לשינוי, הם חלק מהחוזה של הלקוח. קשה יותר לשנות את ייצוג הנתונים של שדות אלה במהדורה עתידית מכיוון שלקוחות יצטרכו לשקף את יישומם מחדש.

על ידי מתן שדות פרטיים פרטיים ושימוש באביזרים, יש לנו את הגמישות לשנות את הייצוג הפנימי תוך שמירה על סוג הנתונים הישן:

 כיתה ציבורית סטודנט {כיתה סטודנטית פרטית; // ייצוג נתונים חדש ציבורי בטל setGrade (כיתה int) {this.grade = StudentGrade חדש (כיתה); } ציבורי int getGrade () {להחזיר this.grade.getGrade (). intValue (); }}

היוצא מהכלל היחיד לשימוש בשדות ציבוריים הוא השימוש בשדות סטטיים בלתי ניתנים לשינוי סטטיסטיים לייצוג קבועים:

גמר סטטי ציבורי מחרוזת SLASH = "/";

6. מסקנה

במדריך זה ראינו שהמשנה הציבורי משמש להגדרת API.

כמו כן, תיארנו כיצד שימוש יתר בשינוי זה עשוי להגביל את היכולת להציג שיפורים ביישום שלנו.

לבסוף, דנו מדוע זה נוהג רע להשתמש בשינויים ציבוריים עבור שדות.

וכמו תמיד, דוגמאות הקוד של מאמר זה זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found