Τεχνολογία Λογισμικού Τύπος Α

Σχετικά έγγραφα
Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

. Μεθοδολογία Προγραμματισμού. Εισαγωγή. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Αντικειμενοστρεφής Προγραμματισμός

Από τη UML στον Κώδικα. Μέρος Β

Αντικειµενοστρεφής Προγραµµατισµός

Δομή και Στόχοι του Μαθήματος - Εισαγωγή

Η γλώσσα προγραμματισμού C

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Μεθοδολογία Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Θέματα εξετάσεων. Τύπος: B

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Πληροφορίες για το μάθημα

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

6. Εξαιρέσεις στη γλώσσα Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Agile Προσέγγιση στη Διαχείριση Έργων Λογισμικού

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

02 Αντικειμενοστρεφής Προγραμματισμός

Σύστημα Ηλεκτρονικού Πρωτοκόλλου. Σχεδιασμός Υποσυστημάτων

Γενικά (για τις γραπτές εξετάσεις)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Αλληλεπίδραση Ανθρώπου- Υπολογιστή & Ευχρηστία

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Week. 6: Java Collections

Παραδείγματα Χρήσης του DrJava

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

. Μεθοδολογία Προγραμματισμού. Μοτίβα σχεδίασης (Design Patterns) Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

11β Δομικά πρότυπα σχεδίασης

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

Διαγράμματα Κλάσεων στη Σχεδίαση

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

. Μεθοδολογία Προγραμματισμού. UML Διαγράμματα. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

public class ArrayStack implements Stack {

Βασικές Έννοιες Δοµών Δεδοµένων

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Remote Method Invocation (RMI)

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

Πειραιάς S 2 Ε Lab Ιούνιος Εισηγητής: Δ. Ν. Καλλέργης, MSc. Εργ. Συνεργάτης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Θέµατα εξετάσεων µε απαντήσεις

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Διάγραμμα Κλάσεων. Class Diagram

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

ANDROID Προγραμματισμός Εφαρμογών

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ονοματεπώνυμο: Ερώτημα: Σύνολο Μονάδες: Βαθμός:

Agile Προσέγγιση στη Διαχείριση Έργων Λογισμικού

Αρχές Τεχνολογίας Λογισμικού

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

4 Συλλογές Αντικειμένων

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Χαρίδημος Κονδυλάκης Εισαγωγή

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

Ανάλυση Περιπτώσεων Χρήσης

Από τη UML στον Κώδικα. Μέρος Α

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Ask seic Majhmatik c Logik c 2

Σεμινάριο Wordpress CMS (Δημιουργία Δυναμικών Ιστοσελίδων)

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Παρουσίαση: Ανθρωποκεντρικός σχεδιασμός πολυμέσων ΜΙΚΡΟΠΟΥΛΟΥ ΕΥΓΕΝΙΑ ΓΤΠ61

Θέματα Προγραμματισμού Η/Υ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Διδάσκων: Παναγιώτης Ανδρέου

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Διαγράμματα Συνεργασίας. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Transcript:

Ν. Πεταλίδης Τύπος Α Ιανουάριος 2016 Τεχνολογία Λογισμικού Τύπος Α Οδηγίες Αρνητική βαθμολογία δεν υπάρχει Τα θέματα επιστρέφονται Φροντίστε να είστε σύντομοι και περιεκτικοί στις απαντήσεις σας

Τεχνολογία Λογισμικού Τύπος Α Σελ. 2 / 8 1. (1 Μονάδες) Έχετε να γράψετε μια εφαρμογή για κινητό Android η οποία θα συνδέεται με έναν backend server και με κλήσεις REST. Η εφαρμογή θα στέλνει πληροφορίες για τη θέση του χρήστη, και θα παίρνει πίσω πληροφορίες ιστορικής σημασίας για την περιοχή που βρίσκεται ο χρήστης. Δε γνωρίζετε ακόμα αν θα υπάρχει ενδιαφέρον στην αγορά από την εφαρμογή και οι τέσσερες προγραμματιστές της ομάδας σας, αν και γνωρίζουν καλά HTML5, Javascript και βάσεις δεδομένων εντούτοις έχουν μικρή εμπειρία από τα υπόλοιπα frameworks που θα χρησιμοποιηθούν (δηλαδή Hibernate, Spring κτλ). Εσείς πρέπει να προτείνετε ένα σχέδιο εκδόσεων στο αφεντικό σας διάρκειας 4 μηνών, ακολουθώντας τις επιταγές των ευέλικτων μεθοδολογιών. Ποιο από τα παρακάτω σχέδια προσεγγίζει καλύτερα τη φιλοσοφία των ευέλικτων μεθοδολογιών; Αʹ. Έμφαση στη δημιουργία του μοντέλου της βάσης της εφαρμογής, έστω και αν όχι σε πλήρη ανάπτυξη αλλά σε πολύ μεγάλη Βʹ. Έμφαση στη δημιουργία του Android Client αρχικά με πλήρες σετ από test cases Γʹ. Έμφαση στη δημιουργία και έλεγχο της end-to-end αρχιτεκτονικής με ορισμό των interfaces των υποσυστημάτων χωρίς λεπτομέρεια στην υλοποίηση Δʹ. Έμφαση στη δημιουργία του backend, με υλοποίηση και έλεγχο των βασικών λειτουργιών πρώτα εκεί και στη συνέχεια υλοποίηση του client Εʹ. Έμφαση στη δημιουργία του front-end και των μενού της εφαρμογής αρχικά, ώστε να ξεκαθαριστούν πλήρως οι απαιτήσεις της εφαρμογής

Τεχνολογία Λογισμικού Τύπος Α Σελ. 3 / 8 2. (2 Μονάδες) Σας δίνετε μια κλάση όπως η ακόλουθη: public c l a s s Person implements Comparable<Person > { private S t r i n g name ; private S t r i n g surname ; public Person ( S t r i n g name, S t r i n g surname ) { t h i s. name = name ; t h i s. surname = surname ; public S t r i n g getname ( ) { return name ; public S t r i n g getsurname ( ) { return surname ; / / implement t h i s Σας λένε επίσης ότι πρέπει να υλοποιήσετε τη μέθοδο compareto() ώστε το ακόλουθο JUnit test να είναι πετυχημένο. @Test public void testcompare ( ) { Person person0 = new Person ( nikos, papas ) ; Person person1 = new Person ( nikos, papas ) ; Person person2 = new Person ( nikos, abel ) ; Person person3 = new Person ( nikos, tango ) ; Person person4 = new Person ( a l e x, papas ) ; Person person5 = new Person ( zenon, papas ) ; Person [ ] persons = new Person [ 6 ] ; persons [ 0 ] = person0 ; persons [ 1 ] = person1 ; persons [ 2 ] = person2 ; persons [ 3 ] = person3 ; persons [ 4 ] = person4 ; persons [ 5 ] = person5 ; Arrays. s o r t ( persons ) ; assertequals ( person2, persons [ 0 ] ) ; assertequals ( person4, persons [ 1 ] ) ; assertequals ( person0, persons [ 2 ] ) ; assertequals ( person1, persons [ 3 ] ) ; assertequals ( person5, persons [ 4 ] ) ; assertequals ( person3, persons [ 5 ] ) ;

Τεχνολογία Λογισμικού Τύπος Α Σελ. 4 / 8 Ποιες από τις παρακάτω υλοποιήσεις πιστεύετε ότι κάνει το test να περνάει Αʹ. i f ( t h i s. getsurname ( ). compareto ( o. getsurname ( ) ) >0 t h i s. getname ( ). compareto ( o. getname ( ) ) <0) { return 1 ; e l s e { return 0; Βʹ. i n t r e s u l t = t h i s. getname ( ). compareto ( o. getname ( ) ) ; return r e s u l t + t h i s. getsurname ( ). compareto ( o. getsurname ( ) ) ; Γʹ. Δʹ. i f ( t h i s. getname ( ). compareto ( o. getname ( ) ) == 0) { return t h i s. getsurname ( ). compareto ( o. getsurname ( ) ) ; e l s e { return t h i s. getname ( ). compareto ( o. getname ( ) ) ; i n t r e s u l t = t h i s. getsurname ( ). compareto ( o. getsurname ( ) ) ; i f ( r e s u l t!=0) { return r e s u l t ; return t h i s. getname ( ). compareto ( o. getname ( ) ) ; Εʹ. Καμία

Τεχνολογία Λογισμικού Τύπος Α Σελ. 5 / 8 3. (1 Μονάδες) Μια ομάδα φοιτητών ξεκινά project για το εργαστήριο της Μεθοδολογίας Προγραμματισμού To project αφορά την κατασκευή μιας εφαρμογής για την ανάπτυξη ενός προγράμματος Instant Messenger. Στο χρονοδιάγραμμα που ετοιμάζουν: 1. Τις δύο πρώτες εβδομάδες θα ασχοληθούν με την καταγραφή των απαιτήσεων και την εξοικείωση με το έργο. 2. Τις επόμενες δύο εβδομάδες θα ασχοληθούν με το σχεδιασμό του GUI 3. Τις επόμενες τρεις εβδομάδες θα ασχοληθούν με την υλοποίηση του GUI και των οθονών που επιτρέπουν την είσοδο στο σύστημα (login, προτιμήσεις κτλ) 4. Τις επόμενες 4 εβδομάδες θα ασχοληθούν με το σχεδιασμό και υλοποίηση της λειτουργίας αποστολής μηνυμάτων 5. Τις επόμενες 2 εβδομάδες με τον τελικό έλεγχο και παράδοση της εφαρμογής Εσείς πιστεύετε ότι: Αʹ. Η ομάδα ακολούθησε μια ευέλικτη μεθοδολογία αφού έκανε επαναλήψεις και προσάρμοζε τη διάρκειά τους στις ανάγκες της Βʹ. Η ομάδα ακολούθησε τη μεθοδολογία του καταρρακτη γιατί ακολούθησε τα τυπικά βήματα της καταγραφής απαιτήσεων, σχεδιασης, ελέγχου παράδοσης Γʹ. Η ομάδα δεν ακολούθησε τη μεθοδολογία του καταρράκτη γιατί παρόλο που έκανε τα τυπικα βήματα δεν αναφέρεται πουθενά αν υπήρχε ανασκοπηση (review) στο τέλος κάθε βήματος Δʹ. Η ομάδα ακολούθησε τη μεθοδολογία UP γιατί κάτε της βήμα αντιστοιχει και σε μια φάση της UP Εʹ.. H ομάδα ακολούθησε μια επαναληπτική μεθοδολογία, αν και όχι κατ ανάγκη ευέλικτη 4. (1 Μονάδες) Στο project σας ακολουθείτε το mainline model και τη μεθοδολογία UP.. Κάθε πότε πιστεύετε ότι πρέπει να δημιουργείτε release branch για να δώσετε το πρόγραμμά σας στους πελάτες σας; Αʹ. στο τέλος κάθε iteration Βʹ. στο τέλος κάθε ημέρας Γʹ. στο τέλος κάθε φάσης Δʹ. στο τέλος της κατασκευαστικής φάσης Εʹ. στο τέλος της φάσης μετάβασης 5. (1 Μονάδες) Η διαφορά ενός build script από έναν compiler είναι

Τεχνολογία Λογισμικού Τύπος Α Σελ. 6 / 8 Αʹ. Ένα build script τρέχει πρίν και μετά τη φάση του compiling. Πριν τη φάση του compiling κάνει checkout και μετά τη φάση του compiling κάνει testing. Βʹ. To build script αυτοματοποιεί διάφορες διαδικασίες που είναι απαραίτητες για τη δημιουργία του τελικού προϊόντος. Το compiling είναι απλώς μία από αυτές. Γʹ. Καμία. Το build script είναι ένας compiler που τρέχει απομακρυσμένα. Δʹ. To build script αυτοματοποιεί τις διαδικασίες ελέγχου. Ένας compiler ασχολείται με τη μεταγλώττιση. Εʹ. Τίποτα από τα παραπάνω

Τεχνολογία Λογισμικού Τύπος Α Σελ. 7 / 8 6. (2 Μονάδες) Σας δίνεται η ακόλουθη περιγραφη μιας μεθόδου της κλάσης String. Γράψτε JUnit tests που να ελέγχουν όσο το δυνατό μεγαλύτερο μέρος της συμπεριφοράς αυτής της μεθόδου public S t r i n g s u b s t r i n g ( i n t beginindex, i n t endindex ) / / Returns a new s t r i n g t h a t i s a s u b s t r i n g o f t h i s s t r i n g. The s u b s t r i n g b e g i n s a t t h e s p e c i f i e d b e g i n I n d e x and e x t e n d s t o t h e c h a r a c t e r a t i n d e x endindex 1. Thus t h e l e n g t h o f t h e s u b s t r i n g i s endindex b e g i n I n d e x. Examples : / / hamburger. s u b s t r i n g (4, 8) r e t u r n s urge / / s m i l e s. s u b s t r i n g (1, 5) r e t u r n s m i l e Parameters : / / b e g i n I n d e x t h e b e g i n n i n g index, i n c l u s i v e. / / endindex t h e e n d i n g index, e x c l u s i v e. Returns : / / t h e s p e c i f i e d s u b s t r i n g. Throws : / / IndexOutOfBoundsException i f t h e b e g i n I n d e x i s n e g a t i v e, o r endindex i s l a r g e r than t h e l e n g t h o f t h i s S t r i n g o b j e c t, o r b e g i n I n d e x i s l a r g e r than endindex. 7. (2 Μονάδες) Γράφετε μια εφαρμογή και είστε υπεύθυνος για να γράψετε τον StudentController που αποθηκεύει στοιχεία μέσω μιας κλάσης Repository σε μια σχεσιακή βάση. Οι συνεργάτες σας, σας λένε ότι μπορείτε να χρησιμοποιήσετε την κλάση Repository η οποία ορίζεται όπως πιο κάτω: public c l a s s Repository { Student savestudentdata ( S t r i n g name, S t r i n g aem, List <String > l e s s o n s ) throws RPersistenceException { / / s a v e t o r e l a t i o n a l d a t a b a s e / / i f you can t / / throw R P e r s i s t e n c e E x c e p t i o n

Τεχνολογία Λογισμικού Τύπος Α Σελ. 8 / 8 Αναθέτετε τη συγγραφή της κλάσης σε ένα από τα junior μέλη της ομάδας το οποίο έρχεται με αυτή τη λύση: public c l a s s S t u d e n t C o n t r o l l e r { / / public i n t c r e a t e S t u d e n t ( S t r i n g name, S t r i n g aem) throws RPersistenceException { Repository r e p o s i t o r y = RepositoryFactory. g e t I n s t a n c e ( ) ; try { / / g e t some s t u d e n t d a t a from e x t e r n a l d a t a b a s e / / e x t e r n a l D a t a b a s e i s d e f i n e d e l s e w h e r e. Don t be b o t h e r e d List < String > lessonsforstudent = externaldatabase. getlessonsforyear ( aem) ; Student student = r e p o s i t o r y. savestudentdata (name, aem, lessonsforstudent ) ; catch ( RPersistenceException e ) { / / l o g e r r o r throw e ; Προτείνετε μια σχεδίαση που θα σας επέτρεπε να δοκιμάσετε την κλάση σας. Σε ποιές κλάσεις θα κάνατε αλλαγές; Δείξτε το με διάγραμα UML. Δείξτε τουλάχιστον τρία junit tests για αυτή τη σχεδίαση.