Προγραμματισμός με αντικείμενα

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Ορισμός κλάσεων

Χρήση αντικειμένων

Χωρισμός κλάσεων σε αρχεία

Ορατότητα

Μέθοδοι κατασκευής και καταστροφής

Ιδιότητες και μέθοδοι της κλάσης

Σε μια κλάση μπορούν να δηλωθούν (με τον προσδιορισμό static) μεταβλητές οι οποίες υπάρχουν μόνο μια φορά για όλη την κλάση, καθώς και συναρτήσεις που μπορούν να κληθούν με τη σύνταξη κλάση.συνάρτηση. Οι μεταβλητές αυτές χρησιμοποιούνται για την επεξεργασία στοιχείων που αφορούν ολόκληρη την κλάση και όχι τα αντικείμενά της. Οι συναρτήσεις που έχουν οριστεί static δεν έχουν πρόσβαση σε μη static μεταβλητές ούτε στη μεταβλητή this. Το παρακάτω παράδειγμα ορίζει έναν μετρητή numPoints που μετρά πόσα σημεία είναι ενεργά καθώς και την αντίστοιχη συνάρτηση πρόσβασης getNumPoints:
import gr.aueb.dds.BIO;

class Point {
        private int x, y;
        // Count number of points used
        private static int numPoints;

        // Point constructor
        Point(int ix, int iy) {
                x = ix;
                y = iy;
                numPoints++;            // Adjust points counter
        }
        // Point constructor
        Point(int xy) {
                x = y = xy;
                numPoints++;            // Adjust points counter
        }

        // Point destructor
        public void finalize() {
                BIO.println("Another point bites the dust");
                BIO.print("The point was at ");
                display();
                numPoints--;            // Adjust points counter
        }

        // Return number of points currently used
        public static int getNumPoints() {
                return numPoints;
        }

        public void display() {
                BIO.print("(x=" + x);
                BIO.println(", y=" + y + ")");
        }

        static public void main(String args[]) {
                Point a = new Point(12);
                Point b = new Point(58);
                Point c = new Point(7);
                c.display();
                a = b;
                BIO.println(getNumPoints() + " points are alive now");
                BIO.println("Garbage collecting");
                // Force the garbage collector to run
                System.gc();
                BIO.println(Point.getNumPoints() + " points are alive now");
        }
}

Φροντιστηριακή άσκηση

Να υλοποιηθεί σε Java μια κλάση που να παριστάνει αντικείμενα σε κίνηση με ιδιότητες την αρχική τους θέση και την ταχύτητά τους στους άξονες x και y και τις παρακάτω μεθόδους:
void setInitialPosition(double x, double y)
Θέτει την αρχική θέση του αντικειμένου.
void setVelocity(double x, double y)
Θέτει την ταχύτητα x, y του αντικειμένου.
double GetXPosition(int t)
Επιστρέφει τη θέση x του αντικειμένου κατά τη χρονική στιγμή t.
double GetYPosition(int t)
Επιστρέφει τη θέση y του αντικειμένου κατά τη χρονική στιγμή t.
Με βάση το παραπάνω να υλοποιηθεί πρόγραμμα που
  1. Ορίζει δύο αντικείμενα.
  2. Για κάθε ένα από τα αντικείμενα ζητάει από το χρήστη την αρχική του θέση, την ταχύτητά του και ένα χρόνο t και εμφανίζει στην οθόνη τη θέση του κατά το χρόνο t.
Σημείωση: η θέση κάθε αντικειμένου υπολογίζεται μόνο με βάση την αρχική του θέση και την ταχύτητά του.

Παράδειγμα:

A1x=6
A1y=12
A1 vx=1
A1 vy=1
t=2

A1x=8 A1y=14

A2x=6
A2y=67
A2 vx=10
A2 vy=10
t=1

A2x=16 A2y=77

Ασκήσεις

  1. Να υλοποιηθούν σε Java οι κλάσεις andgate, orgate, notgate. Οι κλάσεις αυτές θα προσομοιάζουν τις αντίστοιχες λογικές πύλες. Κάθε κλάση να έχει μεθόδους που να θέτουν τις εισόδους (π.χ. setA, setB) και μέθοδο που να επιστρέφει την τιμή της εξόδου (π.χ. getOutput).
  2. Με τη χρήση των παραπάνω κλάσεων (και μόνο) να υλοποιήσετε μια κλάση που να προσομοιάζει έναν ημιαθροιστή. Η κλάση αυτή να έχει μεθόδους που να θέτουν τις δύο εισόδους και μεθόδους που να επιστρέφουν το άθροισμα και το κρατούμενο.
  3. Να γράψετε ένα πρόγραμμα σε Java που να τυπώνει τους πίνακες αλήθειας για τις παραπάνω κλάσεις.
  4. (Προαιρετικά) Με τη χρήση των παραπάνω κλάσεων να υλοποιήσετε μια κλάση που να προσομοιάζει έναν πλήρη αθροιστή. Η κλάση αυτή πρέπει να έχει μεθόδους που να θέτουν τις δύο εισόδους και το κρατούμενο εισόδου καθώς και μεθόδους που να επιστρέφουν το άθροισμα και το κρατούμενο εξόδου.

Βιβλιογραφία