Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο Τελική Εξέταση 9:30-11:30 μ.μ. (120 λεπτά) Τετάρτη, 7 Δεκεμβρίου, 2016 Όνομα: Επίθετο: Αριθμός Ταυτότητας: E-mail: Τηλ. Επικοινωνίας Πρόβλημα Μονάδες Βαθμός 1 8 2 14 3 14 4 10 5 20 6 34 Christmas Bonus! 10 Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!! Τελικός Βαθμός: Σύνολο: 100 + 10 ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 1/17
Άσκηση 1: [8 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση Ποια είναι η κύρια διαφορά ανάμεσα στη μεταγλώττιση και εκτέλεση προγραμμάτων γραμμένα σε C και αντίστοιχα στη Java, περιγράφοντας επίσης και ποια είναι τα σχετικά πλεονεκτήματα και μειονεκτήματα που προκύπτουν χρησιμοποιώντας τη μία γλώσσα (Java) έναντι της άλλης; Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 2/17
Άσκηση 2: [14 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση Δίνοντας συγκεκριμένα παραδείγματα εξηγήστε συνοπτικά αλλά με σαφήνεια, ποια είναι τα δύο κύρια είδη προγραμμάτων σε Java, ποια είναι τα κύρια χαρακτηριστικά και στοιχεία τους για να μπορούν να εκτελεστούν και πως μεταγλωττίζονται και εκτελούνται «χειρωνακτικά» (δηλαδή, χωρίς τη χρήση ενός IDE, όπως το NetBeans). ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 3/17
Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 4/17
Άσκηση 3: [14 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση Εξηγήστε τι είναι αναδρομική μέθοδος (recursive method). Παρουσιάστε μίαν αναδρομική μέθοδο που να υπολογίζει το παραγοντικό ενός αριθμού, θεωρώντας ότι ο αριθμός που θα σας δοθεί θα είναι θετικός ακέραιος. ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 5/17
Άσκηση 4: [10 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση (α) Εξηγήστε τι είναι η υπερφόρτωση μεθόδων (method overloading), δίνοντας και κάποιο απλό παράδειγμα. [4 μον.] Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 6/17
(β) Εξηγήστε τι είναι πολυμορφισμός (polymorphism) στον αντικειμενοστραφή προγραμματισμό, δίνοντας και κάποιο απλό παράδειγμα. [6 μον.] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 7/17
Άσκηση 5: [20 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση Περιγράψτε 4 διαφορετικούς δυνατούς τρόπους διαχείρισης ενός actionevent κατά τη χρήση γραφικών συστατικών, δίνοντας συνοπτικά και απλά παραδείγματα για τον κάθε εναλλακτικό τρόπο. Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 8/17
ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 9/17
Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 10/17
ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 11/17
Άσκηση 6: [34 μονάδες] ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Τελική Εξέταση Ζητείται να συμπληρώσετε τους ορισμούς των πιο κάτω τάξεων StructuralElement και Rod, παρέχοντας τον κώδικα που λείπει σύμφωνα με το πιο κάτω UML διάγραμμα. StructuralElement - id: int - elasticitymodulus: double + <<Constructor>> StructuralElement (id : int, elasticitymodulus : double) + getelasticitymodulus() : double + tostring() : String Rod - startnode : Point - endnode : Point - area double + <<Constructor>> Rod (id : int, elasticitymodulus : double, startnode : Point, endnode : Point, area : double) + computestiffness() : double + tostring() : String Αφού συμπληρωθεί ορθά ο ορισμός των τάξεων StructuralElement και Rod, το πιο κάτω πρόγραμμα Final_6 θα πρέπει να μπορεί να κάνει χρήση της τάξης Rod (ράβδος δικτυώματος), η οποία είναι υποτάξη της τάξης StructuralElement (δομικό στοιχείο), όπως φαίνεται στο πιο πάνω UML διάγραμμα, ώστε να ορίζει ράβδους δικτυωμάτων και να εκτυπώνει τα στοιχεία μιας ράβδου υπολογίζοντας και την αντίστοιχη δυστένειά («δυσκαμψία») τους (Κ=Α*Ε/L) με κατάλληλη κλήση της μεθόδου computestiffness(). public class Final_6 { public static void main(string[] args) { Point p1 = new Point(3.25, 2.5); Point p2 = new Point(); Point p3 = new Point(5.65, -4.75); StructuralElement se1 = new Rod(17,30e9, p1, p2, 0.015); StructuralElement se2 = new Rod(12,30e9, p3, p2, 0.025); System.out.println("se1: " + se1); System.out.println("\nse2: " + se2); Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 12/17
Το αποτέλεσμα από την εκτέλεση του προαναφερθέντος προγράμματος είναι η εκτύπωση των δεδομένων αλλά και της δυσκαμψίας της κάθε ράβδου, όπως πιο κάτω: se1: Structural Element: id = 17 Modulus of Elasticity = 3.0E10 Start Node: x = 3.25 y = 2.5 End Node: x = 0.0 y = 0.0 Stiffness: 1.0974793695294462E8 se2: Structural Element: id = 12 Modulus of Elasticity = 3.0E10 Start Node: x = 5.65 y = -4.75 End Node: x = 0.0 y = 0.0 Stiffness: 1.0160680277156389E8 Συγκεκριμένα, η κάθε ράβδος (Rod) έχει αριθμό μέλους (id) και μέτρο ελαστικότητας (elasticitymodulus), τα οποία κληρονομεί από την υπερτάξη της (StructuralElement), καθώς και κόμβο αρχής (startnode) και τέλους (endnode), και επιφάνεια διατομής (area). Οι κόμβοι ορίζονται ως αντικείμενα της τάξης Point, όπως ορίζεται πιο κάτω. class Point { private double x; private double y; Point() { this(0,0); Point(double x, double y) { this.x = x; this.y = y; double getx() { return x; double gety() { return y; public String tostring() { return "x = " + x + " y = " + y; ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 13/17
class StructuralElement { // Ορίστε εδώ τα μέλη της τάξης StructuralElement με private πρόσβαση StructuralElement(int id, double elasticitymodulus) { // Συμπληρώστε κατάλληλα τη μέθοδο κατασκευής double getεlasticitymodulus() { // Συμπληρώστε κατάλληλα τη μέθοδο getεlasticitymodulus() // Επαναορίστε εδώ τη μέθοδο tostring () ώστε να επιστρέφει το id και το μέτρο // ελαστικότητας του μέλους Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 14/17
//Ορίστε εδώ την τάξη Rod που επεκτείνει την τάξη StructuralElement { // Ορίστε εδώ τα μέλη της τάξης Rod με private πρόσβαση Rod(int id, double elasticitymodulus, Point startnode, Point endnode, double area) { // Συμπληρώστε κατάλληλα τη μέθοδο κατασκευής double computestiffness() { // Συμπληρώστε κατάλληλα τη μέθοδο computestiffness () ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 15/17
// Επαναορίστε εδώ τη μέθοδο tostring (), ώστε να επιστρέφει το id, το μέτρο // ελαστικότητας, τους κόμβους αρχής και τέλους και τη δυστένεια της ράβδου Πέτρος Κωμοδρόμος, 2016, Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος: 16/17
Επιπλέον,.Χριστουγεννιάτικες μονάδες: [+10 μονάδες] Τι είναι το catch block, που, πως και πότε χρησιμοποιείται στη Java; ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016, 17/17