Καλώς ήρθατε
Προγραμματισμός II
Αυτοαξιολόγηση
Πόσο άνετα προγραμματίζετε στη Java;
- Δυσκολεύομαι
- Τα καταφέρνω, αλλά όχι άνετα
- Πετάω· δεν έχω κανένα πρόβλημα
Στόχοι του μαθήματος
Στόχος του μαθήματος είναι όσοι το παρακολουθήσουν να είναι σε θέση να:
- γνωρίζουν τις βασικές μεθόδους και τεχνικές προγραμματισμού
που χρησιμοποιούνται στην υλοποίηση λογισμικού
- σχεδιάζουν και να δομούν εφαρμογές με σύνθετα χαρακτηριστικά
- εκμεταλλεύονται έτοιμες βιβλιοθήκες, δομές δεδομένων και ΠΤΝ
- χρησιμοποιούν σχεδιαστικά πρότυπα
- επεξεργάζονται σύνθετες δομές και πηγές δεδομένων
- αξιολογούν εναλλακτικές τεχνολογίες και εναλλακτικούς τρόπους υλοποίησης
Τρόπος διδασκαλίας
- Συμμετοχή
- Ερωτήσεις
- Ασκήσεις, θέματα για σκέψη
- Φροντιστήριο
- Εργαστήριο
- Ανεξάρτητη μελέτη πριν το μάθημα (ειδικά των πρακτικών)
Οι σημειώσεις
- Είναι οι παρουσιάσεις του μαθήματος
- Ανοικτά προσβάσιμες στον ιστό ( http://www.spinellis.gr/isdi) και στο Moodle
- Καλύπτουν περιληπτικά όσα λέγονται στις παραδόσεις
- Είναι οδηγός για άλλες πηγές (π.χ. βιβλίο)
- Ενημερώνονται όταν απαιτείται
- Στο τέλος του πίνακα περιεχομένων υπάρχουν σε μορφή κατάλληλη για εκτύπωση
Βαθμολογία
Ο τελικός βαθμός κάθε φοιτήτριας ή φοιτητή θα βασίζεται σε 3 κριτήρια:
- Στην απόδοση του στις υποχρεωτικές ασκήσεις: 30%
- Στην απόδοση στην ομαδική άσκηση: 50%
- Στις τελικές γραπτές εξετάσεις: 20%
- Στη συμμετοχή στο μάθημα και στο φροντιστήριο (bonus 10%)
Προσοχή:
-
Απαραίτητη προϋπόθεση για να περάσει ο φοιτητής το μάθημα είναι η
απόδοσή στις ατομικές ασκήσεις και τις εξετάσεις
να καλύπτει τουλάχιστον τη βάση.
-
Οι βαθμοί όλων των ασκήσεων ισχύουν μόνο για την ακαδημαϊκή
χρονιά στην οποία παραδίδονται:
εξετάσεις Ιανουαρίου, πτυχιακές και Σεπτεμβρίου.
Βαθμολογία χωρίς ομαδική εργασία
Σε περίπτωση μη συμμετοχής στην ομαδική εργασία
ο βαθμός υπολογίζεται κατά 40% από τις εξετάσεις και 30% από τις
ατομικές ασκήσεις, ώστε να να είναι δίκαιο για τα άτομα που
κάνουν την ομαδική εργασία.
Επιπλέον, στην περίπτωση αυτή ο μέγιστος δυνατός βαθμός είναι το 5.
Ενδεικτικά, ο τύπος υπολογισμού είναι κάτι σαν:
MIN(ROUND(
IF(@Exam>=5,
IF(ISNA(@group),
MAX(@exam*0.3 + IFNA(@Exercise, 0)*0.3, 5),
@Exam*0.2+IFNA(@Participation, 0)*0.1+IFNA(@Bonus, 0)+IFNA(@Exercise, 0)*0.3+IFNA(@Group, 0)*0.5),MAX(INT(@Exam),0))
*2,0)/2,10)
Αξιολόγηση συμμετοχής
Στατιστικά στοιχεία
Επιδόσεις στις εξετάσεις στο τέλος του εξαμήνου.
Έτος | Εξετάσεις | Ασκήσεις | Βαθμός | Επιτυχία |
2014 | 6.5 | 9 | 7.3 | 81% |
2015 | 7.6 | 9.1 | 8.1 | 94% |
2016 | 7.2 | 9 | 8 | 86% |
2017 | 8.0 | 8.8 | 8.3 | 90% |
2018 | 7.7 | 9.1 | 8.5 | 93% |
2021 | 7.7 | 9.1 | 7.5 | 80% |
2022 | 6.9 | 8.3 | 7.5 | 78% |
2023 | 6.9 | 8.8 | 7.6 | 82% |
Οι ασκήσεις
- Βασίζονται στο σύστημα jarpeb (Java Randomised and Personalised Exercise Builder)
- Το αρχείο Exercise.jar που τις υλοποιεί είναι διαθέσιμο στις σημειώσεις.
- Σε κάθε άσκηση πρέπει να υλοποιήσετε πρόγραμμα σε Java
και πιθανώς να απαντήσετε σε ερωτήσεις πολλαπλής επιλογής.
- Ο βαθμός της άσκησης εξαρτάται από την υλοποίηση του
προγράμματός σας και από τις απαντήσεις στις ερωτήσεις
- Η βαθμολογία υπολογίζεται αυτόματα από το jarpeb
- Η εκφώνηση για το πρόγραμμα είναι διαφορετική για κάθε φοιτητή ή φοιτήτρια
- Η εκφώνηση για τις ερωτήσεις είναι διαφορετική κάθε φορά που τρέχετε
την άσκηση για εκτύπωση της βαθμολογίας
Χρήση του συστήματος των ασκήσεων jarpeb
Για να χρησιμοποιήσετε το σύστημα πρέπει:
- ο υπολογιστής να έχει εγκατεστημένo το Java Development Kit.
- το αρχείο Exercise.jar να βρίσκεται στον υπολογιστή σας.
- η υλοποίηση της λύσης σας (αρχεία .java και .class) να
βρίσκεται στον ίδιο κατάλογο με το Exercise.jar.
- Για να εκτελέσετε το πρόγραμμα δίνετε μια εντολή της μορφής:
java -jar Exercise.jar
- Συμπληρώνετε ΑΜ, αριθμό άσκησης, φάκελο ασκήσεων
- Εκτελείτε τα βήματα: Εκφώνηση, Έλεγχος, Τελικός έλεγχος και βαθμολόγηση
Παράδοση της βαθμολογίας
- Ο βαθμός της κάθε άσκησης παραδίδεται αυτόματα μέσω του προγράμματος Jarpeb.
- Οι βαθμοί πρέπει να παραδίδονται μέσα στην ορισμένη προθεσμία (https://www2.dmst.aueb.gr/dds/isdi/exercise/dead.htm)
(συνήθως σε 6 μέρες από την παράδοση του μαθήματος στο οποίο ανήκει η αντίστοιχη άσκηση), μέχρι τις 23:59.
- Παράδειγμα: άσκηση μαθήματος που έγινε στις 7-10-2021 πρέπει να παραδοθεί
μέχρι τις 23:59 της 13-10-2021.
- Αν παραδοθούν πολλοί βαθμοί για την ίδια άσκηση, θα μετρήσει ο υψηλότερος.
Καθυστερημένη παράδοση
- Για κάθε μέρα (ή τμήμα μέρας) καθυστέρησης,
ανεξάρτητα από το λόγο,
αφαιρούνται 0.2 βαθμοί
από το βαθμό της άσκησης με μέγιστο τους πέντε βαθμούς.
- Προσοχή: αυτό σημαίνει ότι αν παραδώσετε όλες τις ασκήσεις το π.χ. καλοκαίρι
θα πρέπει να έχετε σε όλες 10 για να περάσετε το μάθημα.
- Είναι δική σας ευθύνη να ελέγχετε την παράδοση μέσω των σελίδων
της παράδοσης ( http://www.spinellis.gr/isdi/exercise/index.htm).
- Οι σελίδες ενημερώνονται κάθε βράδυ.
Χρήση ΠΤΝ
Για τη χρήση παραγωγικής τεχνητής νοημοσύνης
(π.χ. ChatGPT, Bard, GitHub Copilot) ισχύουν τα εξής.
- Η χρήση ΠΤΝ στις ατομικές ασκήσεις δεν επιτρέπεται και ελέγχεται τεχνικά με την παράδοση των αλληλεπιδράσεών σας με το πρόγραμμα Visual Studio Code.
- Η χρήση ΠΤΝ στην ομαδική άσκηση ενθαρρύνεται υπό τις εξής προϋποθέσεις.
- Διαφάνεια: παράδοση όλων των προτροπών και των απαντήσεων
- Ισότητα: Χρήση μόνο υπηρεσιών που είναι διαθέσιμες χωρίς πληρωμή
- Προσωπική ευθύνη: Οφείλετε να καταλαβαίνετε και να ελέγχετε τις απαντήσεις της ΠΤΝ
- Ενθαρρύνεται η λελογισμένη χρήση της ΠΤΝ για διευκόλυνση της μάθησης (π.χ. απάντηση αποριών)
Διαθέσιμα συγγράμματα
- Joyce Farrell. Java:
Εκμάθηση με πρακτικά παραδείγματα.
2η έκδοση. Εκδόσεις Κριτική, Αθήνα 2024.
-
Rogers Candenhead
(μετάφραση Μαίρη Γκλαβά).
Πλήρες Εγχειρίδιο της Java 12.
8η Έκδοση.
Εκδόσεις X. Γκιούρδα, 2023.
ISBN: 9789605127534
Πρόσθετα δωρεάν συγγράμματα
Επίσης διαθέσιμα στις φοιτήτριες και στους φοιτητές του ΟΠΑ μέσω του HEAL-Link:
Βιβλιογραφία για προγραμματισμό
- Kent Beck and Erich
Gamma.
Test infected: Programmers love writing tests.
Java Report, 3(7):37–50, July 1998.
- Alan M. Davis.
201 Principles of Software Development.
McGraw-Hill, 1995.
- Michael Feathers.
Working Effectively with Legacy Code.
Prentice-Hall, Englewood Cliffs, NJ, 2005.
- Martin Fowler.
Refactoring: Improving the Design of Existing Code.
Addison-Wesley, Boston, MA, 2000.
With contributions by Kent Beck, John Brant, William Opdyke, and Don Roberts.
- Erich Gamma, Richard
Helm, Ralph Johnson, and John Vlissides.
Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley, Reading, MA, 1995.
- Pete Goodlife.
Code Craft: The Practice of Writing Excellent Code.
No Starch Press, San Francisco, 2007.
- Andrew Hunt and David
Thomas.
The Pragmatic Programmer: From Journeyman to Master.
Addison-Wesley, Boston, MA, second edition, 2019.
- Brian W. Kernighan
and Rob Pike.
The UNIX Programming Environment.
Prentice Hall, Englewood Cliffs, NJ, 1984.
- Brian W. Kernighan
and Rob Pike.
The Practice of Programming.
Addison-Wesley, Reading, MA, 1999.
- Brian W. Kernighan
and P. J. Plauger.
The Elements of Programming Style.
McGraw-Hill, New York, second edition, 1978.
- Robert C. Martin.
Clean Code: A Handbook of Agile Software Craftsmanship.
Prentice Hall, aug 2008.
- Robert C. Martin.
The Clean Coder: A Code of Conduct for Professional Programmers.
Prentice Hall, may 2011.
- Pete McBreen.
Software Craftmanship: The New Imperative.
Addison-Wesley, 2002.
- Steve C McConnell.
Code Complete: A Practical Handbook of Software Construction.
Microsoft Press, Redmond, WA, second edition, 2004.
- Andy Oram and Greg
Wilson.
Beautiful Code: Leading Programmers Explain How They Think.
O'Reilly and Associates, Sebastopol, CA, 2007.
- Eric S. Raymond.
The Art Of Unix Programming.
Addison-Wesley, 2003.
- Diomidis Spinellis.
Effective Debugging: 66
Specific Ways to Debug Software and Systems.
Addison-Wesley Professional, Boston, MA, 2016.
- Joost Visser.
Building Maintainable Software.
O'Reilly Media, Sebastopol, CA, 2015.
Βιβλιογραφία για τη Java
- Ken
Arnold and James Gosling.
The Java Programming Language.
Addison-Wesley, Boston, MA, third edition, 2000.
- Joshua T. Bloch.
Effective Java.
Addison-Wesley, Boston, MA, third edition, 2018.
- Jim
Farley, William Crawford, and David Flanagan.
Java Enterprise in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, second edition, 2002.
- David Flanagan.
Java in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, 1997.
- James
Gosling, Bill Joy, Guy Steele, and
Gilad Bracha.
The Java Language Specification.
Addison-Wesley, third edition, 2005.
- K. N. King.
Java Programming: from the Beginning.
W. W. Norton & Company, New York, 2000.
- Tim
Lindhorn and Frank Yellin.
The Java Virtual Machine Specification.
The Java Series. Addison-Wesley, Reading, MA, 1997.
- Peter H. Salus,
editor.
Handbook of Programming Languages, volume I: Object-Oriented
Programming Languages.
Macmillan Technical Publishing, Indianapolis, IN, 1998.
- Sun Microsystems, Inc.
Java code conventions (http://java.sun.com/docs/codeconv/).
Available online http://java.sun.com/docs/codeconv/ (December 2001),
April 1999.
- Harold
Thimberly.
A critique of Java.
Software: Practice and Experience, 29(5):457–478, 1999.
- Jos Visser.
Why python is
terrible...
Available online.
Επισκόπηση θεωρίας
- Γλώσσες και περιβάλλοντα ανάπτυξης
- Τεχνολογίες μεταγλώττισης και εκτέλεσης
- Προγραμματισμός με αντικείμενα
- Δημιουργία κλάσεων
- Κληρονομικότητα
- Υλοποίηση εκτενών συστημάτων
- Γενικεύσεις και νήματα
- Δομές δεδομένων
- Περιγραφή δεδομένων με XML και κανονικές εκφράσεις
- Χειρισμός αρχείων
- Δημιουργία γραφικών εφαρμογών
- Επιχειρηματικές εφαρμογές: προγραμματισμός διαδικτυακών εφαρμογών και εφαρμογών βάσεων δεδομένων
Επισκόπηση των ασκήσεων
- εξοικείωση με τις ασκήσεις
- ορίσματα, εκφράσεις, βρόχοι και αποφάσεις
- δημιουργία αντικειμένων και πρόσβαση στις μεθόδους τους
- δημιουργία μιας κλάσης
- κληρονομικότητα
- παραγωγή και έλεγχος εξαιρέσεων
- προγραμματισμός με συμβολοσειρές
- μετασχηματισμός αρχείου κειμένου
- μια απλή γραφική εφαρμογή
- επεξεργασία XML
- επικοινωνία πελάτη-εξυπηρετητή
- χρήση νημάτων και παραμετρικών τύπων
- προγραμματισμός σε ζεύγη
- αναδρομικές συναρτήσεις
- μορφοποίηση
- διεπαφές
Επισκόπηση φροντιστηρίου
- Ιδεατή μηχανή Java
- Μεταγλωττιστές
- Git και Maven
- Αντικείμενα και αναφορές
- Κληρονομικότητα, υποτύποι
- Εξαιρέσεις, ισχυρισμοί, διεπαφές
- Γενικεύσεις, συμβολοσειρές συλλογές
- Κανονικές εκφράσεις, αρχεία
- Ταυτοχρονισμός
- Συναρτησιακός προγραμματισμός
Δουλειά για το επόμενο μάθημα
Περιεχόμενα