Μηχανική Λογισμικού ΙΙ

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
Δαμιανός Χατζηαντωνίου Οικονομικό Πανεπιστήμιο Αθηνών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Μεθοδολογίες Προγραμματισμού ΙΙ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μηχανική Λογισμικού ΙΙ Έλεγχος Λογισμικού JUNIT – TDD TFD + Refactoring Παναγιώτης Σφέτσος, PhD
ΟΠΑ - Τεχνολογία Λογισμικού - Εμμ. Γιακουμάκης
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD
Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού - ECLIPSE JUNIT – TDD TFD + Refactoring Παναγιώτης Σφέτσος, PhD
Αρχή της ενσωμάτωσης Η εσωτερική κατάσταση ενός αντικειμένου πρέπει να είναι τροποποιήσιμη μόνο μέσω της δημόσιας διασύνδεσής του.
Μεθοδολογίες Προγραμματισμού ΙΙ JUNIT - Test First Design
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεθοδολογίες Προγραμματισμού ΙΙ Αναδόμηση Λογισμικού Software Refactoring Παναγιώτης Σφέτσος, PhD
Μεθοδολογίες Προγραμματισμού ΙΙ
ΣΥΝΑΡΤΗΣΕΙΣ.
Πρότυπα Σχεδίασης Design Patterns Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμ. Εφ. Πληροφορικής.
Μεθοδολογίες Προγραμματισμού ΙΙ Αναδόμηση Λογισμικού - 2 Software Refactoring - Εφαρμογές Παναγιώτης Σφέτσος, PhD
HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
Ποιότητα Λογισμικού Ενότητα 4: Παράδειγμα Ελέγχου. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
Ποιότητα Λογισμικού Ενότητα 3: Σουίτες Ελέγχων. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής Εκπαίδευσης.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Περίπτωση χρήσης: Process sale Από την ΠΧ στον κώδικα.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
ΟΡΙΣΜΟΣ ΣΥΜΠΕΡΙΦΟΡΑΣ ΔΙΑΓΡΑΜΜΑTA ΑΛΛΗΛΕΠΙΔΡΑΣΗΣ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο 1: Εισαγωγή.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Site: ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ.
ΟΣΣ2 - 4 Δεκεμβρίου 2005 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Οντοκεντρικός Προγραμματισμός
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
Κατανεμημένα Συστήματα
Software Engineering for Web Applications
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
Βάσεις Δεδομένων & Έμπειρα Συστήματα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΣΥΣΤΗΜΑ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ (QUALITY SYSTEM)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εφαρμογή Μεθοδολογίας ICONIX
ΕΙΣΑΓΩΓΗ ΣΤΗ UML ΕΙΣΑΓΩΓΗ ΣΤΗ UML.
Προγραμματισμός κινητών συσκευών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Μηχανική Λογισμικού ΙΙ Αντίστροφη Μηχανική Reverse Engineering Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ

Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γ ε ν ι κ ά - 1 Αντίστροφη Μηχανική: Είναι η διαδικασία εύρεσης των τεχνολογικών αρχών που διέπουν μία συσκευή, ένα αντικείμενο ή ένα σύστημα λογισμικού, μέσα από: την ανάλυση της δομής και της λειτουργίας του συστήματος τον διαχωρισμό των τμημάτων του συστήματος την ανακατασκευή του συστήματος, χωρίς αντιγραφή Κίνητρα – Αιτίες – Συμπτώματα Ταυτόχρονη ανάπτυξη του από πολλούς προγραμματιστές και ύπαρξη πολλαπλών εκδόσεων (multi-persons, multi- versions). Ασυνέπεια μεταξύ τεκμηρίωσης ενός έργου λογισμικού και του κώδικα. Αιτία η ικανοποίηση νέων απαιτήσεων (γρήγορος κώδικας) χωρίς την ενημέρωση των υπολοίπων εγγράφων ή διαγραμμάτων που αντιστοιχούν στις διάφορες φάσεις ανάπτυξης. Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γ ε ν ι κ ά - 1 Χαμένη τεκμηρίωση Ανάλυση προϊόντος, πως δουλεύει; Παρακολούθηση ασφάλειας συστημάτων Διαλειτουργικότητα (Interoperability). Όταν ο χρήστης έχει μικρή ή καθόλου γνώση των ιδιαίτερων χαρακτηριστικών του συστήματος που εργάζεται. Ψηφιακή ενημέρωση / διόρθωση συστήματος Διαγραφή απαγόρευσης αντιγραφής (cracking) Εύρεση σχεδιαστικής δομής συστήματος Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ Γ ε ν ι κ ά - 2 Εκμάθηση ή Ακαδημαϊκοί λόγοι Βιομηχανική / κρατική κατασκοπεία Αποφυγή λαθών που έκαναν κατασκευαστές συστημάτων Περιέργεια : : Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Αντίστροφη Μηχανική Λογισμικού Μπορεί να χρησιμοποιηθεί επίσης για την: Τροποποίηση του Λογισμικού Αλλαγή περιβάλλοντος – πλατφόρμας χρήσης (Y2K, , €, ηλεκτρονικό εμπόριο, κλπ.) Σχεδίαση και υλοποίηση στην παραδοσιακή (κανονική) Μηχανική Λογισμικού (π.χ. Debugging) Κατανόηση του Λογισμικού Οπτική αναπαράσταση του Λογισμικού Επαναχρησιμοποίηση (re-use) του κώδικα Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Αντίστροφη Μηχανική Δεδομένων Εστιάζει στα δεδομένα και τις σχέσεις μεταξύ των δεδομένων Έλεγχος των δομών των δεδομένων μέσα στα προγράμματα και στις Βάσεις των Δεδομένων. Για παράδειγμα τις Σχεσιακές Βάσεις Δεδομένων (RDB’s). Ιεραρχικά αρχεία δεδομένων RDB’s RDB’s Μοντέλο-ΟΟ Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Αντίστροφη Μηχανική Λογισμικού Διαφορετικές όψεις: Chikofsky και Cross: “είναι η διαδικασία ανάλυσης ενός συστήματος για την δημιουργία μιας αναπαράστασης / αναπαραγωγής του σε υψηλότερο επίπεδο αφαίρεσης” Επιστροφή στην αρχή του κύκλου ανάπτυξης ενός συστήματος Requirements Analysis Forward engineering Reverse engineering Design Implementation Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Αντίστροφη Μηχανική Λογισμικού Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Απεικονίσεις UML και σύμβολα V i s i b i l i t y UML Notation A t r i b u t e s M e t h o d s Java visibility UML Notation public + private - Protected # package ~ Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Είδη ορατότητας - Είδη σχέσεων Είδη ορατότητας Είδη σχέσεων μεταξύ κλάσεων Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

περισσότεροι συμβολισμοί.. Η τιμή μεταβλητών ή επιστρεφόμενη τιμή από μεθόδους, γράφεται μετά από (:), π.χ. carPrice : double = 0.0 employeeID : int getDepartment() : String 2) Σε static μεταβλητές ή λειτουργίες οι τιμές υπογραμμίζονται, π.χ. department : String = “Grammateia” 3) Abstract classes και interfaces, γράφονται με italics Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Συσχέτιση – Association (1/4) Απεικονίζει την στατική (μη δυναμική) σχέση μεταξύ δύο κλάσεων και με πολλαπλότητα. Η πολλαπλότητα ορίζει πόσες περιπτώσεις συσχετίζονται σε μια δεδομένη στιγμή: 0..1 Καμία ή μία μόνο περίπτωση Μια θέση αυτοκινήτου μπορεί να έχει ένα ή κανένα επιβάτη 1 Ακριβώς μία περίπτωση Μια παραγγελία έχει ένα πελάτη 0..* or * Μηδέν ή περισσότερες περιπτώσεις.. Μια τάξη μπορεί να έχει μηδέν ή πολλούς φοιτητές 1..* Μια ή περισσότερες περιπτώσεις (τουλάχιστον μια) Μια πτήση μπορεί να έχει ένα ή περισσότερους επιβάτες Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Συσχέτιση – Association (2/4) class Company { Employee emp[]= new Employee[4]; public void setEmployee(Employee e,int a) {emp[a]=e;} public void printAll() { for (int i=0;i<4;i++) { System.out.println("Name = "+ emp[i].getName()); System.out.println("Type Of Employment = "+ emp[i].getEmpType()); System.out.println("Type Of Payment = "+ emp[i].getPayType()); System.out.println(); emp[i].calcSalary(); } } } abstract class Employee { String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;} public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } Πολλαπλότητα Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Συσχέτιση – Association (3/4) Συσχέτιση μονής κατεύθυνσης (unidirectional association) public class Customer { private String name; private String address; private String contactNumber; } public class Car { private String modelNumber; private Customer owner; Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Συσχέτιση – Association (4/4) Συσχέτιση διπλής κατεύθυνσης (bidirectional association) public class Customer { private String name; private String address; private String contactNumber; private Car car; } public class Car { private String modelNumber; private Customer owner; Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Γενίκευση – Κληρονομικότητα (1/3) Γενίκευση – Κληρονομικότητα (1/3) Απεικονίζει την κληρονομικότητα (στη java την λέξη κλειδί extends) Ακολουθεί την αρχή της Υποκατάστασης της Liskov (Liskov Substitution Principle) , όπου η κλάση παιδί (υποκλάση) μπορεί να αντικαταστήσει την κλάση μαμά (υπερκλάση). Έτσι βοηθά στο να ακολουθείται και η αρχή της Ανοικτής-Κλειστής Σχεδίασης (Open-Closed Principle) , δηλ ανοικτή για επεκτάσεις – κλειστή για τροποποιήσεις. abstract class Employee { protected String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;} Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Γενίκευση – Κληρονομικότητα (2/3) Γενίκευση – Κληρονομικότητα (2/3) public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } class Administrator extends Employee { Administrator(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Administrator";} public void calcSalary() { int s=0; if (payType==0) s=1200+b; else s=(h*12); System.out.println(" Sarary = " + s); }} Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Γενίκευση – Κληρονομικότητα (3/3) Γενίκευση – Κληρονομικότητα (3/3) class Technical extends Employee { public Technical(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Technical";} public void calcSalary() { int s=0; if (payType==0) s=800+b; else s=(h*10); System.out.println(" Sarary = " + s); } Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Εξάρτηση (Dependency) Απεικονίζει την εξάρτηση δύο κλάσεων, δηλαδή την εξάρτηση που έχει μια κλάση προς μια άλλη, για την ύπαρξη ή υλοποίηση της. Στη java θεωρούμε εξάρτηση την περίπτωση που η εξαρτώμενη κλάση κάνει αναφορά (με αντικείμενο) στην κλάση από την οποία εξαρτάται ή έχει μεθόδους στις οποίες περνούν σαν παράμετροι αντικείμενα της κλάσης από την οποία εξαρτάται. public class PaymentSystem { : : } public class Order { public void processPayment(PaymentSystem ps){ Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Συνάθροιση (Aggregation) Απεικονίζει την “έχει ένα” – σχέση, δηλαδή τονίζει ότι το “όλον” aαποτελείται από μέρη που θα υπάρχουν ακόμη και αν το “όλον” καταστραφεί. Είναι ένα είδος συσχέτισης. Απεικονίζεται με τον διάφανο ρόμβο και στη java ακολουθούμε τους συμβολισμούς και πολλαπλότητες της συσχέτισης. public class Student { : : } public class School { private Student student; Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Σύνθεση (Composition) Απεικονίζει την σχέση του “όλον” με τα “μέρη” του μόνο που αν το όλον καταστραφεί , τότε τα μέρη του δεν μπορούν να υπάρχουν ανεξάρτητα. Ένα κομμάτι ή μέρος του όλου μπορεί να έχει ένα ιδιοκτήτη, π.χ. ένας δημόσιος υπάλληλος μπορεί να είναι έχει μια θέση σε δημόσιο οργανισμό ή εταιρία. Απεικονίζεται με τον γεμάτο (μαύρο) ρόμβο και στη java ακολουθούμε τους συμβολισμούς και πολλαπλότητες της συνάθροισης με την βοήθεια και τοπικών μεταβλητών . public class Professor { : : } public class University { private Professor[] professors; Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Παραδείγματα Απεικονίσεων (1/2) Από το βιβλίο: UML Class Diagrams for Java Programmers Απεικόνιση κλάσης: Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Παραδείγματα Απεικονίσεων (2/2) Απεικόνιση Κληρονομικότητας: Υλοποίηση Διεπαφής: Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Εργαλεία Eclipse και VP Εργαλεία εξαγωγής πληροφορίας από πηγαίο κώδικα (ή και μορφή bytecode) και η κατασκευή ή ενημέρωση ενός μοντέλου UML. Η παραγωγή κώδικα από διαγράμματα αντιστρέφεται, και δημιουργούνται διαγράμματα (συνήθως κλάσεων και ακολουθίας) από υπάρχοντα κώδικα (reverse engineering). Έτσι διατηρείται η συνέπεια μεταξύ μοντέλου και κώδικα, καθώς κάθε αλλαγή στον κώδικα ενημερώνει αυτόματα το μοντέλο – τα διαγράμματα UML (συγχρονισμός μοντέλου - κώδικα). Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (1/7) Έστω ο κώδικας: abstract class Employee { String name; protected int payType; protected int b; protected int h; Employee(String s, int b_, int h_, int p) {name=s; payType=p; b=b_; h=h_;} public String getName() {return name;} public String getPayType() { String pType; if (payType==0) pType="Salary"; else pType="ByHour"; return pType; } abstract String getEmpType(); abstract void calcSalary(); } Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (2/7) class Administrator extends Employee { Administrator(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Administrator";} public void calcSalary() { int s=0; if (payType==0) s=1000+b; else s=(h*12); System.out.println(" Sarary = " + s); }} class Technical extends Employee { public Technical(String s, int b, int h, int p) {super(s,b,h,p);} public String getEmpType() {return "Technical";} if (payType==0) s=800+b; else s=(h*10); System.out.println(" Sarary = " + s); } } Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (3/7) class Company { Employee emp[]= new Employee[4]; public void setEmployee(Employee e,int a) {emp[a]=e;} public void printAll() { for (int i=0;i<4;i++) { System.out.println("Name = "+ emp[i].getName()); System.out.println("Type Of Employment = "+ emp[i].getEmpType()); System.out.println("Type Of Payment = "+ emp[i].getPayType()); System.out.println(); emp[i].calcSalary(); } } } class Ask1 { public static void main(String[] args) { int a; Employee e1= new Technical("Nikas",10,10,0); Employee e2=new Administrator("Vasileiou",10,10,1); Employee e3= new Technical("Paylidis",10,10,1); Employee e4=new Administrator("Apostolatos",10,10,0); Company c = new Company(); c.setEmployee(e1,0); c.setEmployee(e2,1); c.setEmployee(e3,2); c.setEmployee(e4,3); c.printAll(); } } Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (4/7) Το αποτέλεσμα του προγράμματος: Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (5/7) Αυτόματα με την επιλογή Instant Reverse, αφού έχουμε εισάγει τις java κλάσεις: Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (6/7) Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Visual Paradigm - Παράδειγμα (7/7) Προσοχή στα: Είδη σχέσεων μεταξύ κλάσεων Είδη ορατότητας Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (1/6) Στο Eclipse θα εγκαταστήσουμε το plugin : ObjectAid Εγκατάσταση: 1) Ανοίγουμε το Eclipse, πάμε Help > Install New Software 2) Πατάμε add και εισάγουμε το όνομα ObjectAid UML Explorer 3) Εισάγουμε την διεύθυνση του plugin: http://www.objectaid.net/update Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (2/6) Στις επιλογές που εμφανίζει επιλέγουμε μόνο το ObjectAid Class Diagram – plugin, γιατί τα άλλα (π.χ. Sequence diagrams) είναι επί πληρωμή, ενώ αυτό free και πατάμε Next. Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (3/6) Πατάμε Finish για να τελειώσει η εγκατάσταση. Πατάμε Οk στο μήνυμα προειδοποίησης για το security του plugin και κάνουμε Restart το Eclipse. Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (4/6) Για να δημιουργήσουμε ένα UML διάγραμμα με τον ObjectAid wizard από τον java κώδικα μας, πατάμε: File > New > Other… Επιλέγουμε στο textbox Class Diagram και πατάμε Next Εισάγουμε τον κατάλογο όπου θα αποθηκεύσουμε το διάγραμμα και το όνομα του διαγράμματος. Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (5/6) Στον visual UML editor δημιουργείται μια κενή κλάση (με κατάληξη .ucls) όπου με drag and drop μπορούμε να “ρίξουμε” οποιαδήποτε κλάση ή ολόκληρο πρόγραμμα με κλάσεις και να γίνει η εμφάνιση του UML – class diagram. Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ

Eclipse – Παράδειγμα (6/6) Ο κώδικας είναι ο ίδιος με το παράδειγμα VP, αλλά εδώ η κλάση της main() Ονομάζεται EmployeeTest και όχι Ask1. Το παραγόμενο διάγραμμα: Προσοχή στις διαφορές ορατότητας Παναγιώτης Σφέτσος, Μηχανική Λογισμικού ΙΙ