"Δημιούργησε ένα αυτοκίνητο" ... Vehicle car = new Vehicle();
"Δημιούργησε ένα μικρο κουτί" ... Box small_box = new Box();
"Δημιούργησε ένα μεγάλο κουτί" ... Box big_box = new Box();
"Βάψε το αυτοκίνητο μπλε" ... car.setColor(blue);
"Κανε το αυτοκίνητο μικρότερο" ... car.setSize(small);
"Τοποθέτησε το αυτοκίνητο μέσα στο μικρό κουτί" ... small_box.add(car);
"Τοποθέτησε το μικρό κουτί μέσα στο μεγάλο κουτί" ... big_box.add(small_box);
... κ.ο.κ
Ας δούμε τώρα ένα πιο extreme παράδειγμα(!), εμπνευσμένο από τη φύση.
Παρακάτω ακολουθεί ένα παράδειγμα εμβολιασμού φυτού.

Σε αυτή τη περίπτωση υπάρχουν δυο αντικείμενα, το ρίζωμα και ο βλαστός. Η λογική του εμβολιασμού είναι να τοποθετήσουμε τον βλαστό ενός φυτού στο ρίζωμα ενός άλλου φυτού, ώστε το πρώτο να επικρατήσει και να αναπτυχθεί κανονικά υποβοηθούμενο από το δεύτερο...
Μιλώντας με έννοιες του αντικειμενοστραφούς προγραμματισμού, τόσο το ρίζωμα όσο και ο βλαστός έχουν την ιδιότητα του υποδοχέα (container), δηλαδή το ένα μπορεί να τοποθετηθεί μέσα στο άλλο, τηρώντας πάντα κάποιους κανόνες. Στη περίπτωση των φυτών πρέπει να είναι συγγενικά είδη, ενώ στη περίπτωση του Α.Π ένας από τους κανόνες είναι να είναι του ίδιου τύπου δεδομένων.
Πιο κάτω ακολουθεί ένα πολύ απλό παράδειγμα σε Java. Χρησιμοποιώ δυο υποδοχείς JPanel οι οποίοι είναι τοποθετημένοι ο ένας μέσα στον άλλο, ενώ και οι δυο μαζί είναι τοποθετημένοι σε έναν τρίτο υποδοχέα JFrame.
Να πώς το κάνει η Java ....

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class panel_grafting {
private static void createAndShowGUI() {
JFrame frame = new JFrame("JPanel Grafting");
JPanel quince_tree = new JPanel();
JPanel pear_tree = new JPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel C1_Labe1 = new JLabel("C1_1");
JLabel C1_Labe2 = new JLabel("C1_2");
JLabel C2_Labe1 = new JLabel("C2_1");
JLabel C2_Labe2 = new JLabel("C2_2");
frame.setPreferredSize(new Dimension(400, 400));
frame.setLayout(new BorderLayout());
quince_tree.setLayout(new BorderLayout());
pear_tree.setLayout(new BorderLayout());
quince_tree.setBorder(BorderFactory.createTitledBorder("Quince tree"));
pear_tree.setBorder(BorderFactory.createTitledBorder("Pear tree"));
frame.getContentPane().add(quince_tree, BorderLayout.CENTER);
quince_tree.add(C1_Labe1, BorderLayout.EAST);
quince_tree.add(C1_Labe2, BorderLayout.WEST);
quince_tree.add(pear_tree, BorderLayout.CENTER); //τοποθέτηση ενός αντικειμένου μέσα σε ένα άλλο
pear_tree.add(C2_Labe1, BorderLayout.EAST);
pear_tree.add(C2_Labe2, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}









































































