|
1 | | -# 2020-oop-project-2 |
| 1 | +## 2020 Oop Project 2 - Exercise 3 |
| 2 | + |
| 3 | +## ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ - 2020/2021 - Β' Ομάδα Ασκήσεων - Άσκηση 3 |
| 4 | + |
| 5 | + |
| 6 | +Εκφώνηση: http://cgi.di.uoa.gr/~izambo/OOPassgn2_2021.pdf |
| 7 | + |
| 8 | + |
| 9 | +### Προσωπικά Στοιχεία |
| 10 | + |
| 11 | +__Όνομα__: Ιωάννης Ζαπάντης |
| 12 | + |
| 13 | +__Α.Μ.__: sdi1900059 |
| 14 | + |
| 15 | + |
| 16 | +### Παρακάτω υπάρχει το documentation για την Άσκηση 3 |
| 17 | + |
| 18 | +### Documentation |
| 19 | + |
| 20 | +Σκοπός της άσκησης αυτής είναι η μοντελοποίηση της πρωινής άφιξης των μαθητών |
| 21 | +σε ένα σχολείο. Αυτό γίνεται από την δημιουργία των αντίστοιχων κλάσεων και την |
| 22 | +υλοποίηση κατάλληλων συναρτήσεων για την λειτουργικότητά τους. |
| 23 | + |
| 24 | +Έχω ορίσει μία υπερκλάση, την Person, η οποία αποθηκεύει όλα τα στοιχεία ενός ατόμου |
| 25 | +είτε είναι μαθητής είτε είναι καθηγητής (λεπτομέρειες για τα στοιχεία-μέλη της βρίσκοντα |
| 26 | +στα σχόλια του κώδικα). Υποκλάση αυτής είναι η Teacher που συμπληρώνει όσες συναρτήσεις |
| 27 | +χρειάζονται για την λειτουργικότητα του καθηγητή. Ακόμα, ορίζονται και όλες οι συναρτήσεις |
| 28 | +που έχουν ορισθεί ως virtual στην Person, καθώς επίσης η Person είναι Abstract class, αφού |
| 29 | +ο χρήστης δεν χρειάζεται να έχει πρόσβαση σε αυτή (αυτό επιτυγχάνεται με τον ορισμό pure |
| 30 | +virtual συνάρτησης). |
| 31 | + |
| 32 | +Επίσης, έχει υλοποιηθεί η υποκλάση (της Person) Student, η οποία την συμπληρώνει, ώστε να μπορούν |
| 33 | +να είναι λειτουργικοί οι μαθητές. Κι αυτή έχει συναρτήσεις ορισμένες σαν pure virtual, αφού ούτε |
| 34 | +σε αυτή χρειάζεται να έχει πρόσβαση ο χρήστης (και για αυτό θεωρείται Abstract class). Για τον |
| 35 | +χρήστη ορίζονται οι Junior και Senior που διαχωρίζουν τις 2 κατηγορίες των μαθητών και είναι τα |
| 36 | +αντικείμενα που μπορεί να "φτιάξει" ο χρήστης (λεπτομέρειες για την υλοποίηση των συναρτήσεων |
| 37 | +της καθεμίας κλάσης, καθώς και των μελών της, υπάρχουν στα σχόλια του κώδικα). |
| 38 | + |
| 39 | +Όσον αφορά το σχολικό κτήριο, ακολουθείται η παράκατω δομή. Αρχικά, δημιουργείται μια Abstract |
| 40 | +class Room, η οποία περιέχει μεταβλητές και (pure virtual) συναρτήσεις που θα χρησιμοποιηθούν |
| 41 | +στις υποκλάσεις: Yard, Stairs, Corridor οι οποίες έχουν κοινά χαρακτηριστικά. Σε αυτές τις 3 |
| 42 | +υποκλάσεις ορίζονται τα στοιχεία που χρειάζονται για να ολοκληρωθούν, καθώς επίσης και το σώμα |
| 43 | +των συναρτήσεων (των pure virtual). |
| 44 | + |
| 45 | +Ακόμα, υπάρχει μια κλάση School, η οποία περιέχει ένα Stairs, ένα Yard και 3 Floors, όπως επίσης |
| 46 | +και άλλες μεταβλητές και συναρτήσεις που προσδιορίζουν την λειτουργεία του κτηρίου (στο οποίο |
| 47 | +έχει πρόσβαση ο χρήστης. Λεπτομέρειες σχετικά με την υλοποίηση και τις συναρτήσεις βρίσκονται |
| 48 | +στα σχόλια του κώδικα). Η class Floor, αντίστοιχα περιέχει έναν Corridor και 6 class Classroom (αίθουσες). |
| 49 | +Επίσης, υπάρχουν μεταβλητές και συναρτήσεις που χρησιμεύουν στην λειτουργία του. Τέλος, υπάρχει |
| 50 | +και η κλάση Classroom (αίθουσα), η οποία και αυτή έχει ό,τι χρειάζεται για να είναι λειτουργική |
| 51 | +(λεπτομέρειες υπάρχουν εκτενέστερα στα σχόλια του κώδικα). |
| 52 | + |
| 53 | +Η main ακολουθεί τις οδηγίες της εκφώνησης και δημιουργεί ένα σχολικό κτήριο, μαθητές, καθηγητές |
| 54 | +και τους βάζει με τυχαία σειρά στο σχολείο. Έπειτα, το σχολείο λειτουργεί για Ν ώρες και ύστερα |
| 55 | +εκτυπώνεται (όπως αναφέρεται στην εκφώνηση). Μαζί υπάρχει και ένα Makefile, το οποίο είναι αρκετά |
| 56 | +απλό με εντολές make για μεταγλώττιση των αρχείων, run για εκτέλεση του προγράμματος, clean για |
| 57 | +διαγραφή των παραγόμενων αρχείων και valgrind για τρέξιμο του valgrind (έλεγχος για memory |
| 58 | +leaks). |
| 59 | + |
| 60 | +[Το πρόγραμμα τρέχει σωστά και χωρίς leaks σε linux (εκτός από ένα bug που υπάρχει στην έκδοση του valgrind |
| 61 | +και εμφανίζει 72,704 bytes still reachable) της σχολής] |
| 62 | + |
| 63 | +Η πλήρης εντολή μεταγλώττισης είναι: g++ -o main main.cpp School.cpp |
| 64 | +Για εκτέλεση του προγράμματος αρκεί να τρέξει: ./main Cclass Lj Ls Lt N |
| 65 | + |
| 66 | +,όπου τα ορίσματα είναι αυτά που περιγράφονται στην εκφώνηση. |
| 67 | +Τα ορίσματα διαβάζονται με τον τρόπο που περιγράφεται στην εκφώνηση (δεν γίνεται έλεγχος για |
| 68 | +λανθασμένα δεδομένα). |
0 commit comments