Το πρόγραμμα «Προγραμματισμός με Java: Από το Α στο Ω» έχει σχεδιαστεί για ανθρώπους που δεν έχουν καμία γνώση προγραμματισμού. Ξεκινάει από το Α του προγραμματισμού, τον Δομημένο Προγραμματισμό, και φτάνει στο Ω, τον Αντικειμενοστραφή Προγραμματισμό. Ακολουθούμε, έτσι, τη φιλοσοφία του αείμνηστου Καθηγητή Πληροφορικής του Οικονομικού Πανεπιστημίου Αθηνών, Ιωάννη Κάβουρα: «Ας μάθουμε πρώτα να προγραμματίζουμε με δομημένο τρόπο και μετά ας μάθουμε να το κάνουμε με αντικειμενοστραφή προγραμματισμό». Οι εκπαιδευόμενοι θα μάθουν να αναπτύσσουν προγράμματα Java με τη χρήση του ολοκληρωμένου περιβάλλοντος ανάπτυξης εφαρμογών IntelliJ IDEA μέσα από πρακτικά παραδείγματα βασισμένα σε βιντεοδιαλέξεις, παρουσιάσεις, ασκήσεις αυτοαξιολόγησης, και εργασίες. Περιλαμβάνονται επίσης και 12 live τηλεσυνεδρίες μέσω του Microsoft Teams -μία live τηλεσυνεδρία κάθε εβδομάδα διάρκειας 2 ωρών- όπου με αλληλεπιδραστικό τρόπο θα δίνονται παραδείγματα προγραμματισμού καθώς και απαντήσεις σε ερωτήσεις. Στο Πρόγραμμα περιλαμβάνεται και η παρουσίαση των GitHub και Git, με σκοπό οι εκπαιδευόμενοι να δημιουργήσουν ένα portfolio για την προσωπική ή επαγγελματική τους εξέλιξη στην αγορά εργασίας. Το πρόγραμμα περιλαμβάνει παρά πολλά παραδείγματα προγραμματισμού και εφαρμογές καθώς και μία μεγάλη εφαρμογή ανάπτυξης ενός ‘έξυπνου’ συστήματος που θα προτείνει τυχερές εξάδες για το παιχνίδι Λόττο και που θα ενοποιεί τις γνώσεις που έχουν αποκτηθεί στο παρόν πρόγραμμα. Το σύστημα Λόττο θα υπολογίζει όλες τις δυνατές εξάδες που παράγονται από περισσότερους από έξι αριθμούς που θα εισάγουν οι παίκτες και στη συνέχεια θα τις φιλτράρει με βάση συγκεκριμένα κριτήρια μειώνοντας έτσι το κόστος αλλά διατηρώντας τις ίδιες πιθανότητες επιτυχίας. Αυτή η εφαρμογή όπως και υπόλοιπες θα αποτελούν μέρος του portfolio στο GitHub.
Ενότητες
Ενότητα 1 – Εισαγωγή και Πρωταρχικοί Τύποι Δεδομένων
Εισαγωγή στην Java
Ιστορική εξέλιξη
JRE/JDK – OpenJDK
Εκδόσεις της γλώσσας Java (Java versions)
Περιβάλλοντα Ανάπτυξης Εφαρμογών (IDEs)
IntelliJ IDEA
Το πρώτο πρόγραμμα – Hello World
Σχόλια και εσωτερική τεκμηρίωση
Git & GitHub
Τύποι Δεδομένων – Ο Τύπος Ακέραιος (int)
Δεδομένα, Τύποι Δεδομένων και μεταβλητές
Πρωταρχικοί Τύποι Δεδομένων
Δηλώσεις μεταβλητών και αναγνωριστικά
Ο τύπος int, Αριθμητικοί τελεστές και παραστάσεις ακεραίων
Typecast και μετατροπή τύπων
Έξοδος ακεραίων, Είσοδος με Scanner
Σφάλματα προγραμματισμού
Η δομή δεδομένων boolean και οι δομές ελέγχου while και if
Συνθήκες Αλήθειας, Μεταβλητές τύπου boolean
Σχεσιακοί τελεστές – Λογικοί Τελεστές
Παραστάσεις και εκχωρήσεις
Είσοδος / Έξοδος τιμών boolean
Δομές Ελέγχου while – do/while
Δομή Ελέγχου if – if/else – nested if
Τριαδικός τελεστής
Ο τύπος δεδομένων Χαρακτήρας και οι δομές ελέγχου for και switch/case
Αναπαράσταση χαρακτήρων – ASCII / Unicode
Ο τύπος δεδομένων char, Συγκρίσεις
Είσοδος / Έξοδος τιμών τύπου char
Η δομή ελέγχου for, Η εντολή switch
Εκτέλεση και έλεγχος προγράμματος
Οι τύποι δεδομένων float / double
Αριθμοί κινητής υποδιαστολής
Αναπαράσταση πραγματικών αριθμών
Οι τύποι δεδομένων float / double
Τελεστές, Typecast, Είσοδος Έξοδος
Σφάλματα Αναπαράστασης και υπολογισμού
Παραδείγματα / Εφαρμογές
Ενότητα 2 – Σύνθετοι Τύποι Δεδομένων – Array και String
Πίνακες (Arrays)
Δήλωση πίνακα - Αρχικοποίηση πίνακα
Πρόσβαση σε θέσεις πίνακα
Πρωταρχικοί και σύνθετοι τύποι δεδομένων (Primitive vs reference)
Μονοδιάστατοι πίνακες
Ο τελεστής new - Δείκτες και αναφορές
Πολυδιάστατοι πίνακες
Η κλάση Arrays
Η δομή δεδομένων String
Συμβολοσειρές και η κλάση String
Immutability και String Constant Pool
Συλλογή σκουπιδιών (Garbage Collection)
Πίνακες χαρακτήρων και Strings
Ανάγνωση, αναζήτηση και ανάλυση Strings (Read, Search and Parse Strings)
StringBuilder
Ενότητα 3 – Δομημένος Προγραμματισμός, Μέθοδοι, Εξαιρέσεις, Είσοδος /
Έξοδος σε Αρχεία και Εφαρμογές
Μέθοδοι
Συναρτήσεις / Διαδικασίες / Μέθοδοι
Μέθοδοι σε βάθος
Τυπικές παράμετροι, πραγματικές παράμετροι
Τοπικές μεταβλητές, καθολικές μεταβλητές
Μέθοδος περάσματος κατά τιμή
Swap, τιμές εξόδου, Κλήση μεθόδων
Εφαρμογές και παραδείγματα στον Δομημένο Προγραμματισμό
Δομημένος Προγραμματισμός
Εφαρμογές / Παραδείγματα
Έλεγχος, Δοκιμαστικά δεδομένα, Αναμενόμενα αποτελέσματα
Χειρισμός Λαθών – Εξαιρέσεις – Java I/O
Κατηγορίες Εξαιρέσεων
Σύνταξη και παραδείγματα
Αυτόματη διαχείριση πόρων
Είσοδος/Έξοδος δεδομένων από/σε αρχεία
Input/Output Ροές, Τύποι Ροών
Αρχεία χαρακτήρων
Αρχεία χαρακτήρων με Scanner και PrintWriter
Ροές bytes
Ενότητα 4 – Αντικειμενοστραφής Προγραμματισμός
Κλάσεις, Αντικείμενα, Δημιουργοί και Αντικειμενοστραφής Προγραμματισμός
Αντικειμενοστραφής προγραμματισμός
Απόκρυψη πληροφοριών και ενθυλάκωση
Χαρακτηρισμοί πρόσβασης, Δημόσιες vs ιδιωτικές μέθοδοι
Packages, Κλάσεις και αντικείμενα
Δημιουργοί, setters / getters (mutators / accessors)
Μοντέλο πελάτη – εξυπηρετητή
Σχεδιασμός κλάσεων με UML
Υπερφόρτωση και υπερφόρτωση δημιουργών
Δημόσια Διεπαφή – API
Static και final μέλη, Static Factory μέθοδοι
Wrapper Κλάσεις, Κλάσεις Integer, BigInteger, BigDecimal
Auto-boxing – Auto-unboxing
Η κλάση StringBuilder
Κληρονομικότητα και Υπερκάλυψη μεθόδων – Πολυμορφισμός
Ιεραρχία Κληρονομικότητας
Κληρονομικότητα, Superclass – Subclass
Δημιουργοί
Protected μέλη
Υπερκάλυψη (override)
Πολυμορφισμός
Προηγμένα θέματα αντικειμενοστραφούς προγραμματισμού
Abstract Κλάσεις / Anonymous κλάσεις / Generics
Interfaces / Functional interfaces
Callback functions και Lambdas
Δομές Δεδομένων και Java Collections (List, Set, Queue, Stack, Map, HashMap)
Streams API
Η «αξία» του προγράμματος
Η αξία του Προγράμματος έγκειται στο ότι επικεντρώνεται με συστηματικό τρόπο σε εκπαιδευόμενους που δεν έχουν καμία πρότερη γνώση προγραμματισμού και τους οδηγεί βήμα-βήμα στο να μπορούν να μετατρέπουν τις ιδέες τους σε προγράμματα και να αναπτύσσουν υπηρεσίες και προϊόντα λογισμικού. Οι δεξιότητες που θα αποκτηθούν θα επιτρέψουν στους εκπαιδευόμενους να γίνουν όχι μόνο επιτυχημένοι προγραμματιστές στη Java αλλά και επαγγελματίες στο χώρο της ανάπτυξης λογισμικού, ενώ θα μπορούν να παρουσιάζουν τις γνώσεις τους σε μελλοντικούς εργοδότες μέσα από τα project τους στο GitHub. Θα μπορούν επίσης μετά την επιτυχή παρακολούθηση του Προγράμματος να συνεχίσουν την προσωπική και επαγγελματική τους εξέλιξη σε στρωματοποιημένες (Full Stack) αρχιτεκτονικές ανάπτυξης εφαρμογών.