מושגי תכנות מונחים עצמים בג'אווה

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

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

2. שיעורים

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

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

מחלקה ציבורית רכב {// שדות חברים פרטיים סוג מחרוזת; מודל מחרוזת פרטי; צבע מחרוזת פרטי; מהירות אינטנסיבית פרטית; // מכונית ציבורית בונה (סוג מחרוזת, מודל מחרוזת, צבע מחרוזת) {this.type = type; this.model = מודל; this.color = צבע; } // שיטות חבר ציבורי int להגדיל Speed ​​(int increment) {this.speed = this.speed + increment; להחזיר את זה.מהירות; } // ...}

שים לב כי בכיתה עשויים להיות יותר מבנאי אחד. אנו יכולים לקרוא עוד על השיעורים במאמר השיעורים שלנו.

3. חפצים

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

רכב ויירון = מכונית חדשה ("בוגאטי", "וויירון", "ארגמן"); קורבט לרכב = מכונית חדשה ("שברולט", "קורבט", "שחור"); 

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

4. הפשטה

הפשטה מסתירה את מורכבות היישום וחשיפת ממשקים פשוטים יותר.

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

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

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

5. אנקפסולציה

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

לדוגמה, שדות חברים בכיתה מוסתרים ממחלקות אחרות, וניתן לגשת אליהם בשיטות החברים. אחת הדרכים לעשות זאת היא ליצור את כל שדות הנתונים פְּרָטִי ונגיש רק באמצעות פּוּמְבֵּי שיטות חבר:

רכב בכיתה ציבורית {// ... מהירות אינטנסיבית פרטית; ציבורי int getSpeed ​​() {צבע להחזיר; } חלל ציבורי setSpeed ​​(מהירות int) {this.speed = מהירות; } // ...}

הנה, השדה מְהִירוּת מקופל באמצעות פְּרָטִי שינוי הגישה, וניתן לגשת אליו רק באמצעות getSpeed ​​ציבורי () ו קבע מהירות() שיטות. אנו יכולים לקרוא עוד על מכני שינוי במאמר שלנו.

6. ירושה

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

בג'אווה אנו עושים זאת על ידי הרחבת כיתת ההורים. לפיכך, חוג הילדים מקבל את כל המאפיינים מההורה:

רכב בכיתה ציבורית מאריך את הרכב {// ...}

כשאנחנו מרחיבים שיעור, אנו יוצרים מערכת יחסים של IS-A. ה אוטו הוא רכב. אז יש לו את כל המאפיינים של א רכב.

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

כדי להקל על העבודה נוכל לאגד את התכונות והמאפיינים הנפוצים של כל סוגי הרכב למודול (מחלקה במקרה של Java). ונוכל לאפשר לסוגים בודדים לרשת ולהשתמש מחדש במאפיינים אלה:

רכב בכיתה ציבורית {גלגלים פרטיים; מודל מחרוזת פרטי; התחלה של חלל ציבורי () {// תהליך התנעת הרכב} עצירה בטלנית ציבורית () {// תהליך כדי לעצור את הרכב} חלל ציבורי חלול () {// מייצר ברירת מחדל}}

סוג הרכב אוטו עכשיו יירש מההורה רכב מעמד:

רכב ממחלקה ציבורית מאריך את הרכב {int numberOfGears פרטי; חלל ציבורי openDoors () {// תהליך לפתיחת הדלתות}}

Java תומכת בירושה יחידה וירושה מרובת רמות. פירוש הדבר כי מחלקה אינה יכולה להתרחב מיותר ממחלקה אחת ישירות, אך היא יכולה להשתמש בהיררכיה:

מעמד ציבורי ArmoredCar מרחיב את המכונית {bullet בוליאני פרטיProofWindows; public void remoteStartCar () {// ניתן להפעיל רכב זה באמצעות שלט רחוק}}

הנה ה רכב משוריין מרחיב אוטו, ו אוטו מרחיב רכב. כך, רכב משוריין יורש נכסים משניהם אוטו ו רכב.

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

בדוגמה הנ"ל שלנו של רכב בכיתה, יש את לִצְפּוֹר() שיטה. ה אוטו כיתה המרחיבה את רכב מחלקה יכולה לעקוף שיטה זו וליישם באופן שהיא רוצה לייצר את הצפרור:

רכב בכיתה ציבורית מאריך את הרכב {// ... @Override public void honk () {// מייצר מכונית ספציפית לצפור}}

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

7. פולימורפיזם

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

מחלקה ציבורית TextFile מרחיב את GenericFile {// ... public String read () {להחזיר this.getContent () .toString (); } לקרוא מחרוזת ציבורית (מגבלת int) {להחזיר this.getContent (). toString (). substring (0, מגבלה); } לקרוא מחרוזת ציבורית (התחלה int, int stop) {להחזיר this.getContent () .toString (). substring (start, stop); }}

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

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

מחלקה ציבורית GenericFile {שם מחרוזת פרטי; // ... מחרוזת ציבורית getFileInfo () {להחזיר "Impl File File Implic"; }}

כיתת ילדים יכולה להרחיב את GenericFile בכיתה ולדרוס את getFileInfo () שיטה:

המחלקה הציבורית ImageFile מרחיבה את GenericFile {גובה פרטי פרטי; רוחב אינטי פרטי; // ... getters and setters מחרוזת getFileInfo () {להחזיר "Impl File File Impl"; }}

קרא עוד על פולימורפיזם במאמר הפולימורפיזם שלנו ב- Java.

8. מסקנה

במאמר זה למדנו על מושגי היסוד הבסיסיים של OOP עם Java.

דוגמאות הקוד במאמר זה זמינות באתר Github.


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