Software Engineering for Web Applications Reverse Engineering examples ι Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 1/10 Classes Class (package, αν είναι abstract, …) Τμήμα attributes Τμήμα Μεθόδων Γράφεις: Class if abstract Method if constructor, abstract, … Method signature Attribute type Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 2/10 Classes package simpleBookstoreDemo; public class Item { public Item(){title="";price=-1.0;} public Item(String aTitle, double aPrice){title = aTitle; price=aPrice;} public void showDetails() { System.out.println(title + "\t\t Price:" + price);} public double getPrice() {return price;} public double getFinalPrice() {return price;} protected String title; protected double price; } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 4/10 Απεικονίσεις Σχέσεων Dependency : class A uses class B Aggregation : class A has a class B Composition : class A owns a class B Inheritance : class B is a Class A (or class A is extended by class B) Realization : class B realizes Class A (or class A is realized by class B) Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 3/10 Εξάρτηση (dependency) - Η σχέση εξάρτησης απεικονίζει ότι ο εξαρτημένος χρησιμοποιεί κώδικα του εξαρτώμενου - Αν αλλάξει ο κώδικας της εξαρτώμενης κλάσης, ίσως πρέπει να αλλάξει και ο κώδικας της εξαρτημένης κλάσης Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 5/10 Συσχέτιση (Association) class Asset { ... } class Player { Asset asset; public Player(Assest purchasedAsset) { ... } /*Set the asset via Constructor or a setter*/ } - Απεικονίζει το ότι κατά τη διάρκεια εκτέλεσης κάποια εργασίας τα αντικείμενα των δύο κλάσεων συνυπάρχουν και συνεργάζονται - Tο multiplicity δηλώνει το εύρος των επιτρεπόμενων τιμών σχετικών με το πόσα αντικείμενα συνεργάζονται 5, 10, 0..1, 1..10, 1..*, 0..*, κλπ. Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 6/10 Συσχέτιση (Association) Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 7/10 Συσχέτιση (Association) public class ItemManager { private ArrayList<Item> allItems; … } - κάθε αντικείμενο της κλάσης ItemManager συσχετίζεται με μια συλλογή από αντικείμενα της Item Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 8/10 Συσχέτηση (Association) package simpleBookstoreDemo; public class Item { ... } public class Book extends Item { public class CD extends Item { public class ItemManager { private ArrayList<Item> allItems; Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 9/10 Συνάθροιση (Aggregation) σαν την Συσχέτιση (Association) - Απεικονίζει, όπως και στη Συσχέτιση – μιας μορφής, το ότι κατά τη διάρκεια εκτέλεσης κάποια εργασίας τα αντικείμενα των δύο κλάσεων συνυπάρχουν και συνεργάζονται class Asset { ... } class Player { List assets; public void AddAsset(Asset newlyPurchasedAsset) { assets.Add(newlyPurchasedAssest); ... } ... } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παραδείγματα – 10/10 Σύνθεση (Composition) - Ένα αντικείμενο της κλάσης B_Class αποτελεί σύνθεση αντικειμένων της kκλάσης C_Class. public class Piece { ... } public class Player { Piece piece = new Piece(); /*Player owns the responsibility of creating the Piece*/ ... } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 1/6 Εγκατάσταση του ObjectAid UML Explorer στο Eclipse, Help -> Install New Software… Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 2/6 2. Βάζουμε την διεύθυνση URL : http://www.objectaid.net/update στο πεδίο Work with Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 3/6 3. Πατάμε Add και βάζουμε το ObjectAid στο πεδία Name και μετά --> OK Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 4/6 4. Επιλέγουμε τα plugins που θέλουμε και πατάμε Next Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 5/6 5. Δεχόμαστε το Licence Agreement και πατάμε Finish Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Plugin Eclipse – 6/6 6. Το plugin εγκαθίσταται………. 7. Εμφανίζει ένα μήνυμα (warning), απαντάμε Ok και το αγνοούμε… 8. Επανεκκίνηση του eclipse Δημιουργία Class Diagram Στον Project Explorer, δεξί Click στο Project’s name -> New -> Other. Στο μενού πατάμε Class Diagram και το πλήκτρο Next. Δίνουμε την διαδρομή του κώδικα και όνομα στο διάγραμμα που θα παραχθεί. Ανοίγει ο editor και τραβάμε (Drag and Drop) όλες τις κλάσεις. Το διάγραμμα παράγεται. Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παράδειγμα -1/5 (javacodegeeks) package com.javacodegeeks.eclipse; public interface Vehicle { public void drive(); public void streer(int direction); public void stop(); } package com.javacodegeeks.eclipse; public class Car implements Vehicle{ int weels; int doors; @Override public void drive() { } public void streer(int direction) { } public void stop() {} } package com.javacodegeeks.eclipse; public class Truck implements Vehicle{ @Override public void drive() { } public void streer(int direction) { } public void stop() {} } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παράδειγμα -2/5 package com.javacodegeeks.eclipse; public class AstonMartin extends Car { String label; public void bar() {}; } package com.javacodegeeks.eclipse; public class Ferrari extends Car { String badge; public void foo (){ } } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παράδειγμα -3/5 package com.javacodegeeks.eclipse; public class Man extends Truck { @Override public void drive() { // TODO Auto-generated method stub } public void streer(int direction) { public void stop() { } } Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παράδειγμα -4/5 package com.javacodegeeks.eclipse; public class Scania extends Truck{ @Override public void drive() { // TODO Auto-generated method stub } public void streer(int direction) { public void stop() { Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ
Παναγιώτης Σφέτσος, Software Engineering - II Παράδειγμα -5/5 Παναγιώτης Σφέτσος, Software Engineering - II Παναγιώτης Σφέτσος Μεθοδολογίες Προγραμματισμού ΙΙ