Το μάθημα «Αντικειμενοστραφής Προγραμματισμός» έχει ενταχθεί στο δεύτερο επίπεδο μαθημάτων. 

Στόχοι μαθήματος: Το μάθημα παρέχει μια εισαγωγή στον αντικειμενοστραφή προγραμματισμό (object oriented programming OOP) χρησιμοποιώντας τη γλώσσα προγραμματισμού Java. Ο σκοπός του είναι να διδάξει τις βασικές έννοιες και τεχνικές που συνιστούν υπόδειγμα για την σωστή ανάπτυξη προγραμμάτων που βασίζονται στο αντικειμενοστραφές μοντέλο. Παράλληλα να περιγράψει τα βασικά στοιχεία μιας γλώσσας αντικειμενοστραφούς προγραμματισμού όπως η Java.

Διδακτικές ενότητες: Οι διδακτικές ενότητες του μαθήματος φαίνονται στον ακόλουθο πίνακα: 

     Ενότητα 1

      Βασικές έννοιες 

  • Εισαγωγή στις βασικές έννοιες (τάξης, αντικείμενο), και τα χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού: ενθυλάκωση, απόκρυψη δεδομένων, υπερφόρτωση, κληρονομικότητα, πολυμορφισμός. Πλεονεκτήματα αντικειμενοστρεφούς προσέγγισης.

     Ενότητα 2

      Εισαγωγή στη Java 

  • Μεταβλητές, Τύποι μεταβλητών

  • Εμβέλεια μεταβλητών

  • Τελεστές

  • Δομές ελέγχου ροής προγράμματος

    • if … else

    • switch … case

    • for …

    • while …

    • do … while

    • break, continue

     Ενότητα 3

      Αντικειμενοστραφής προγραμματισμός στη Java

  • Αφηρημένοι τύποι δεδομένων στην Java: τάξη, μέθοδοι και αντικείμενα, δημιουργία τάξης και αντικειμένων, η μεταβλητή this, στατικές μεταβλητές/μέθοδοι (τάξης) και μεταβλητές/μέθοδοι αντικειμένων, σύντομη αναφορά στην συλλογή δυναμικής μνήμης (αντικειμένων)

     Ενότητα 4
  • Οι βασικές τάξεις Boolean, Byte, Character, Short, Integer, Long, Float, Double.

  • Χαρακτήρες και συμβολοσειρές: η τάξη Character, String, StringBuffer και μετατροπές ανάμεσα σε αλφαριθμητικά και αριθμούς.

  • Πίνακες: δήλωση και δημιουργία, πίνακες από αντικείμενα, πολυδιάστατοι πίνακες, αντιγραφή πινάκων, πρόσβαση στις παραμέτρους ενός προγράμματος String[] args.

     Ενότητα 5
  • Σταδιακή ανάπτυξη και κληρονομικότητα: συμβατικός τρόπος επέκτασης μιας τάξης (εμφώλευση), επέκταση τάξης με κληρονομικότητα, τάξεις και υποτάξεις, η μεταβλητή super, shadowed variables, υπέρβαση μεθόδων, κατασκευαστές, τελικές τάξεις, απόκρυψη δεδομένων, προσδιοριστές ορατότητας σε επίπεδο τάξης και πακέτου, η υπερτάξη όλων των αντικειμένων Object.

     Ενότητα 6
  • Ανάθεση αντικειμένων σε μεταβλητές σύμφωνα με την κατεύθυνση συμβατότητας, πολυμορφισμός και πολυμορφικές δομές, δυναμική κλήση μεθόδων, ανάθεση αντικειμένων σε μεταβλητές αντίθετα προς την κατεύθυνση συμβατότητας και δυναμικός έλεγχος τύπου.

  • Το πακέτο java.util.* και τάξεις δομών δεδομένων: Vector, Hashtable, Enumeration, Stack, List, Tree.

     Ενότητα 7
  • Σχεδίαση διεπαφών προγραμματισμού: αφηρημένες τάξεις, αφηρημένες μέθοδοι, επέκταση αφηρημένων τάξεων, διεπαφές, επέκταση διεπαφών, υλοποίηση διεπαφών, πολλαπλή κληρονομικότητα με διεπαφές, marker interfaces.

     Ενότητα 8

      Εσωτερικές τάξεις

  • Εμφωλευμένες τάξεις

  • Εσωτερικές τάξεις-μέλη

  • Περιορισμοί και χρήσεις

  • Ανώνυμες τάξεις

     Ενότητα 9
  • Εξαιρέσεις: ποιά ανάγκη εξυπηρετούν οι εξαιρέσεις, οι τάξεις των εξαιρέσεων, πρόκληση εξαιρέσεων, δήλωση, δημιουργία και χειρισμός εξαιρέσεων με catch και finally.

     Ενότητα 10

      Είσοδος – Έξοδος

  • Ροή δεδομένων

  • Ρεύματα εισόδου-εξόδου

  • Το πακέτο java.io

  • Αρχεία

Προαπαιτούμενες γνώσεις: διαδικαστικός προγραμματισμός (procedural programming).

 

Επιθυμητές γνώσεις: διαδικαστικός προγραμματισμός (procedural programming).

 

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

  1. Core Java™ 2, Volume I — Fundamentals (7th edition), Cay Horstmann, Gary Cornell, Prentice Hall 2005.

  2. The Java Tutorial, http://java.sun.com/docs/books/tutorial/

  3. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995.

  4. Grady Booch, Object-Oriented Analysis and Design with Applications (2nd Edition),  Addison-Wesley 1993.