Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2018-19, Χειμερινό Εξάμηνο 1 η Ενδιάμεση Πρόοδος 9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 12 Οκτωβρίου, 2016 Όνομα: Επίθετο: Αριθμός Ταυτότητας: E-mail: Τηλέφωνο: Πρόβλημα Μονάδες Βαθμός 1 17 2 12 3 12 4 13 5 46 Τελικός Βαθμός: ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 1/12
Άσκηση 1: [17 μονάδες] Υποθέστε ότι έχετε γράψει τον Java κώδικα σας για την επίλυση ενός προβλήματος στο αρχείο Arxeio1.java, το οποίο περιέχει τις τάξεις MyClass1 και MyClass2, και στο αρχείο Arxeio2.java, το οποίο περιέχει τις τάξεις MyClass3 και MyClass4. (α) Γράψτε τις εντολές που απαιτούνται για να μεταγλωττίσετε, τον πηγαίο κώδικα (source code) σε Java, που έχετε αναπτύξει. (β) Ποια αρχεία θα δημιουργηθούν μετά την μεταγλώττιση του κώδικά σας; Δώστε επακριβώς τα ονόματά τους. (γ) Το περιεχόμενο των αρχείων που θα δημιουργηθούν μετά την μεταγλώττιση του κώδικά σας σε ποια μορφή είναι; (δ) Γράψτε την/τις εντολή/εντολές που απαιτείται/απαιτούνται για να εκτελέσετε το πρόγραμμά σας, θεωρώντας ότι η κύρια μέθοδος του προγράμματός σας (δηλαδή η μέθοδος main()) παρέχεται στην τάξη MyClass3. Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 2/12
Άσκηση 2: [12 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 - Ενδιάμεση Εξέταση Μετά την εκτέλεση των πιο κάτω εντολών με τι ισούνται οι τιμές των πιο κάτω μεταβλητών; int a[] = 4, 3 ; int b = 5 ; int c = a[1]>b? 17 : 22 ; int d = ++b + a[1]++; int e= ++c; c += 100; a[0] *= 2; a[0] a[1] b c d e ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 3/12
Άσκηση 3: [12 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 - Ενδιάμεση Εξέταση Ποιο είναι το αποτέλεσμα (output) από την εκτέλεση της μεθόδου main() της πιο κάτω τάξης; class C int x=4; public static void main(string testabc[]) int x = 5; int y = 3; C c= new C(); System.out.println("1: " + x); System.out.println("2: " + y); System.out.println("3: " + c.x); changex(x); c.change(x); System.out.println("4. " + x); System.out.println("5. " + y); System.out.println("6. " + c.x); static void changex(int x) x += 100; void change(int x) x += x; 1: 2: 3: 4: 5: 6: Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 4/12
ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 5/12
Άσκηση 4: [13 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 - Ενδιάμεση Εξέταση Ποιο είναι το αποτέλεσμα (output) από την εκτέλεση της μεθόδου main() της πιο κάτω τάξης; public class Endiamesh1_4 public static void main(string[] args) int x = 5; int y[] = 11, 22 ; fun1(x, y[0]); fun1(x, y[1]); System.out.println("x = " + x); System.out.println("y[0] = " + y[0]); System.out.println("y[1] = " + y[1]); fun2(x, y); System.out.println("x = " + x); System.out.println("y[0] = " + y[0]); System.out.println("y[1] = " + y[1]); System.out.println(); static void fun1(int x, int y) y = x = 7; static void fun2(int y, int x[]) x[0] = y = x [1]= 3; Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 6/12
ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 7/12
Άσκηση 5: [46 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 - Ενδιάμεση Εξέταση Σύμφωνα με το πιο κάτω UML διάγραμμα, η τάξη Element έχει δύο μη στατικά μέλη, το inode και το jnode και ένα στατικό μέλος, το numelements, που αποθηκεύει τον αριθμό των αντικειμένων της τάξης Element που δημιουργούνται. Σας ζητείται να υλοποιήσετε την τάξη Element, παρέχοντας 3 μεθόδους κατασκευής (constructors), η μία χωρίς παραμέτρους, η άλλη με δύο int παραμέτρους με ονόματα inode και jnode που αντιπροσωπεύουν τις τιμές που θα πρέπει να δοθούν στα αντίστοιχα μέλη του αντικειμένου και μια άλλη μέθοδο που θα πρέπει να παίρνει μια παράμετρο που θα είναι αναφορά σε αντικείμενο της τάξης Element, της οποίας τις τιμές των inode και jnode θα πρέπει να χρησιμοποιήσει για να ορίσει τα αντίστοιχα inode και jnode του αντικειμένου υπό δημιουργία, καλώντας την προηγούμενη (δεύτερη) μέθοδο κατασκευής. Η μεταβλητή numelements θα πρέπει να προσαυξάνεται στη 2 η μέθοδο κατασκευής, αφού οι άλλες 2 θα πρέπει να την καλούν με τις κατάλληλες παραμέτρους. Συγκεκριμένα, η μέθοδος κατασκευής χωρίς παραμέτρους πρέπει να καλεί τη δεύτερη μέθοδο κατασκευής αποστέλλοντας της τις τιμές 1 και 1, ενώ η 3 η μέθοδος κατασκευής θα πρέπει να καλεί τη δεύτερη μέθοδο κατασκευής αποστέλλοντας της τις τιμές των αντίστοιχων μελών του αντικειμένου που λαμβάνει σαν παράμετρο. Επιπλέον, θα πρέπει να ορίσετε τις μη στατικές μεθόδους setinode() και setjnode(), οι οποίες θα πρέπει να ορίζουν τα αντίστοιχα μέλη του αντικειμένου, και τις μεθόδους getinode() και getjnode() που θα πρέπει να επιστρέφουν τις τιμές των αντίστοιχων μελών του αντικειμένου. Επίσης, θα πρέπει να ορίσετε τη στατική μέθοδο getnumelements() ώστε να επιστρέφει το συνολικό αριθμό των αντικειμένων που έχουν δημιουργηθεί. Τέλος, θα πρέπει να επαναορίσετε τη μέθοδο tostring(), η οποία θα πρέπει να επιστρέφει σαν String τους κόμβους αρχής και τέλους του αντικειμένου, π.χ., inode = 1 jnode = 7 Element - inode : Integer - jnode : Integer - numelements : Integer + Element() + Element(iNode:Integer, jnode:integer) + Element(element:Element) + setinode(i:integer) + setjnode(j:integer) + getinode():integer + getjnode():integer + getnumelements() : Integer + tostring() : String Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 8/12
Στη συνέχεια θα πρέπει να δημιουργήσετε στη μέθοδο main() της τάξης Exam1_5 ένα πίνακα με τρία (3) αντικείμενα της τάξης Element με το όνομα elements. Συγκεκριμένα, θα πρέπει να δημιουργήσετε ένα πίνακα με το όνομα elements με 3 στοιχεία που να είναι αναφορές σε αντικείμενα της τάξης Element, τα οποία θα πρέπει αντίστοιχα να δημιουργηθούν με κλήση της μεθόδου κατασκευής (constructor) χωρίς παραμέτρους το πρώτο, της μεθόδου κατασκευής με παραμέτρους 3 και 5 το δεύτερο, και της μεθόδου κατασκευής με το δεύτερο αντικείμενο ως παράμετρο κατά τη δημιουργία του τρίτου αντικειμένου του πίνακα. Ακολούθως, καλέστε με το δεύτερο αντικείμενο του πίνακα τη μέθοδο setinode() με παράμετρο 2 και με το πρώτο αντικείμενο τη μέθοδο setjnode () με παράμετρο 7. Τέλος, αφού τυπώσετε τη λέξη "Elements", μέσα από ένα βρόγχο τυπώστε για το κάθε αντικείμενο, το όνομα του (π.χ. elements[1]:) και το αντικείμενο, αξιοποιώντας τη μέθοδο tostring (π.χ. elements[1]: inode = 2 jnode = 5), ώστε η εκτύπωση που θα προκύψει από εκτέλεση του προγράμματος να έχει μορφή παρόμοια με την πιο κάτω: Elements elements[0]: inode = 1 jnode = 7 elements[1]: inode = 2 jnode = 5 elements[2]: inode = 3 jnode = 5 class Exam1_5 public static void main(string[] args) // Δημιουργήστε ένα πίνακα με το όνομα elements με 3 στοιχεία // που να είναι αναφορές σε αντικείμενα της τάξης Element // τα οποία θα πρέπει αντίστοιχα να δημιουργηθούν με κλήση // του constructor χωρίς παραμέτρους το πρώτο, // του constructor με παραμέτρους 3 και 5 το δεύτερο, // και του constructor με το δεύτερο αντικείμενο ως παράμετρο για το τρίτο ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 9/12
// Καλέστε με το δεύτερο αντικείμενο τη μέθοδο setinode() με παράμετρο 2 // Καλέστε με το πρώτο αντικείμενο τη μέθοδο setjnode () με παράμετρο 7 // Αφού τυπώσετε τη λέξη "Elements", // μέσα από ένα επαναληπτικό βρόγχο τυπώστε το όνομα του κάθε αντικειμένου (π.χ. elements[1]:) // του πίνακα και το αντικείμενο, καλώντας τη μέθοδο tostring (π.χ. elements[1]: inode = 2 jnode = 5) class Element // Ορίστε τα στατικά και μη στατικά μέλη της τάξης με κατάλληλη πρόσβαση Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 10/12
// Ορίστε τις τρεις μεθόδους κατασκευής (constructors) της τάξης, // μία χωρίς παραμέτρους που θα πρέπει να καλεί τη δεύτερη με τιμές 1 και 1 // μία που να παίρνει δύο int με ονόματα inode και jnode // και μία που να παίρνει σαν παράμετρο ένα Element αντικείμενο και η οποία θα πρέπει // να καλεί τη δεύτερη μέθοδο κατασκευής με παραμέτρους τα inode και jnode του // αντικειμένου που λαμβάνει σαν παράμετρο // Η προσαύξηση του numelements θα πρέπει να γίνεται στη δεύτερη μέθοδο κατασκευής // Ορίστε τις μεθόδους setinode και setjnode, // οι οποίες θα πρέπει να ορίζουν τα αντίστοιχα μέλη του αντικειμένου ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018, 11/12
// Ορίστε τις μεθόδους getinode και getjnode, // οι οποίες θα πρέπει να επιστρέφουν τις τιμές των αντίστοιχων μελών του αντικειμένου // Ορίστε τη στατική μέθοδο getnumelements που θα πρέπει να επιστρέφει // το συνολικό αριθμό των Element αντικειμένων που έχουν δημιουργηθεί. // Επαναορίστε τη μέθοδο tostring(), η οποία θα πρέπει να επιστρέφει το inode // και jnode του αντικειμένου, όπως π.χ. inode = 2 jnode = 5 Πέτρος Κωμοδρόμος, 2018, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 12/12