קונצפטים של תכנות מונחה עצמים הם חשובים מאוד לתחום התכנות. ללא הבנה טובה של קונצפטים אלו, ייתכן שלא תוכל לבנות מערכות במודל של תכנות מונחה עצמים.
מהו מודל התכנות המונחה עצמים?
מודל התכנות המונחה עצמים נסמך על המושג של אובייקטים. מהו אובייקט? אובייקט הוא מופע של קלאס. הוא מכיל מאפיינים ופונקציות. הם דומים לאובייקטים בעולם האמיתי. לדוגמה, המכונית שלך, הבית שלך, המחשב הנייד שלך וכו'. יש להם מאפיינים ספציפיים ושיטות לביצוע פעולות מסוימות. מהו קלאס? הקלאס מגדיר את הטפס של האובייקטים. הם מגדירים את המאפיינים והפונקציות של האובייקטים. לדוגמה, לפטופ הוא קלאס והלפטופ שלך הוא מופע שלו.
קונצפטים של תכנות מונחה עצמים
הקונצפטים המרכזיים של תכנות מונחה עצמים הם:
- הצטיינות
- איטומטיזציה
- פולימורפיזם
- ירושה
- שותפות
- אגרגציה
- הרכב
בואו נתעדף על המושגים הבסיסיים של תכנות מונחה עצמים אחד אחד. אנו נשתמש בשפת תכנות Java כדי להציג דוגמאות לקוד וכך תוכלו להבין איך מיושמים מושגי OOPS בשפת Java.
1. סיכום
סיכום הוא המושג הנפוץ של כיסוי הפרטים הפנימיים ותיאור דברים במונחים פשוטים. לדוגמה, שיטה שמוסיפה שני מספרים שלמים. עיבוד השיטה נסתר מהעולם החיצוני. ישנם דרכים רבות להשיג סיכום בתכנות מונחה עצמים, כגון חסינות וירושה. תוכנית Java היא גם דוגמה נהדרת לסיכום. כאן ג'אווה מטפלת בהמרת הפקודות הפשוטות לשפת מכונה ומסתירה את פרטי ההיבט הפנימי מהעולם החיצוני.
לקריאה נוספת: מה זו סיכום ב-OOPS?
2. חסינות
האטיף הוא הטכניקה שמשמשת ליישום של ייחודיות בתכנות מונה. האטיף משמש להגבלת גישה לחברי המחלקה ולשיטותיה. מילות מפתח מגבלות גישה נעשה באמצעות האטיף בתכנות מונה. לדוג, האטיף ב-Java משתמש במילות פרטי
, מוגן
ו-ציבור
.
3. פולימורפיזם
פולימורפיזם הוא המושג בו אובייקט נתפס באופן שונה במצבים שונים. ישנם שני סוגים של פולימורפיזם – פולימורפיזם בזמן קומפילציה ופולימורפיזם בזמן ריצה. פולימורפיזם בזמן קומפילציה משיגים באמצעות עמסת שיטות. לדוג, ניתן להגדיר מחלקה כך:
public class Circle {
public void draw(){
System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
}
public void draw(int diameter){
System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
}
public void draw(int diameter, String color){
System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
}
}
כאן יש לנו מספר של מתודות draw
אך להן התנהגות שונה. זהו מקרה של העמסה של מתודה מכיוון ששם כל המתודות זהה והארגומנטים שונים. במקרה זה, המהדר יכול לזהות את המתודה להפעל בזמן הקומפילציה, ולכן נקרא לכך פולימורפיזם בזמן קומפילציה. הפולימורפיזם בזמן ריצה מיושם כאשר יש יחס "הוא-סוג של" בין אובייקטים. זה נקרא גם התאמה מתודתית מחדש מאחר שהמחלקה המפורטת צריכה לדרוס את מתודת המחלקה האב כדי לממש פולימורפיזם בזמן ריצה. כאשר אנו עובדים במונחי המחלקה האב, המחלקה הממומנת המממשת נקבעת בזמן ריצה. המהדר אינו מסוגל להחליט על איזו מחלקת מתוך המחלקות יופעל המתודה. ההחלטה הזו נעשית בזמן ריצה, ולכן נקרא לזה פולימורפיזם בזמן ריצה או שידור של מתודה דינמית.
package com.journaldev.test;
public interface Shape {
public void draw();
}
package com.journaldev.test;
public class Circle implements Shape{
@Override
public void draw(){
System.out.println("Drwaing circle");
}
}
package com.journaldev.test;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing Square");
}
}
Shape
היא המחלקה האב ויש שתי מחלקות מפורטות, Circle
ו־Square
. למטה דוגמה לפולימורפיזם בזמן ריצה.
Shape sh = new Circle();
sh.draw();
Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();
בדוגמה לעיל, מהדר ה-Java אינו יודע אילו מחלקה ממומנת ישמש בזמן הריצה, ולכן יש פולימורפיזם בזמן ריצה.
4. ירושה
ירושה היא העקרון בתכנות עצמים שבו אובייקט מבוסס על אובייקט אחר. ירושה היא המנגנון של שימוש בקוד. האובייקט שמתבצעת לו ירושה נקרא סופר-מחלקה והאובייקט שיורש מהסופר-מחלקה נקרא תת-מחלקה. אנו משתמשים במילת המפתח extends
ב-Java כדי ליישם ירושה. להלן דוגמה פשוטה של ירושה ב-Java.
package com.journaldev.java.examples1;
class SuperClassA {
public void foo(){
System.out.println("SuperClassA");
}
}
class SubClassB extends SuperClassA{
public void bar(){
System.out.println("SubClassB");
}
}
public class Test {
public static void main(String args[]){
SubClassB a = new SubClassB();
a.foo();
a.bar();
}
}
5. עיגול
עיגול הוא העקרון ב-OOPS שמגדיר את היחס בין אובייקטים. העיגול מגדיר את הרב מיניות בין האובייקטים. לדוגמה אובייקטים של מורים ותלמידים. קיים יחס של אחד לרבים בין מורה ותלמידים. באופן דומה, תלמיד יכול להכיל יחס של אחד לרבים עם אובייקטי מורה. אך, גם תלמיד ומורה הם תלויים בעצמם.
כיווץ
כיווץ הוא סוג מיוחד של עיגול. בכיווץ, אובייקטים יש להם מחזור חיים אבל ישנה האפשרות לבעלות. כל פעם שיש לנו יחס "יש-לו" בין אובייקטים ובעלות, אז זהו מקרה של כיווץ.
6. הרכבה
הרכבה היא מקרה מיוחד של אגרוגציה. הרכבה היא צורה מצומצמת יותר של אגרוגציה. כאשר העצם שבתוך "יש-לו" אינו יכול להתקיים לבד, אז זהו מקרה של הרכבה. לדוגמה, בית יש-לו חדר. כאן החדר לא יכול להתקיים בלעדי הבית. נאמר כי הרכבה עדיפה על הירושה, קרא עוד ב- הרכבה נגד הירושה.
קריאה נוספת: הרכבה ב-Java
זהו הכל לסיכום מהיר על עקרונות ה-OOPS.
אתה יכול לעיין בעוד דוגמאות לתוכניות דוגמא ב-Java ב- מאגר הקוד שלנו ב-GitHub.
הפניות: https://docs.oracle.com/javase/tutorial/java/concepts/
Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example