slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Βασικά διαγράμματα σε UML PowerPoint Presentation
Download Presentation
Βασικά διαγράμματα σε UML

Loading in 2 Seconds...

play fullscreen
1 / 89

Βασικά διαγράμματα σε UML - PowerPoint PPT Presentation


  • 166 Views
  • Uploaded on

Βασικά διαγράμματα σε UML. Ανάπτυξη Λογισμικού ( Software Development ) www.cs.uoi.gr/~pvassil/courses/sw_dev/ ΠΛΥ 308. Δομή. Περί διαγραμμάτων και σχεδίασης λογισμικού Στατικά Διαγράμματα Κλάσεων Δυναμικά Διαγράμματα Ακολουθιών

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Βασικά διαγράμματα σε UML' - lalasa


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Βασικά διαγράμματα σε UML

Ανάπτυξη Λογισμικού (Software Development)

www.cs.uoi.gr/~pvassil/courses/sw_dev/

ΠΛΥ 308

slide2
Δομή
  • Περί διαγραμμάτων και σχεδίασης λογισμικού
  • Στατικά Διαγράμματα Κλάσεων
  • Δυναμικά Διαγράμματα Ακολουθιών

Πολλές ευχαριστίες στον Α. Ζάρρα για μια πρώτη μορφή των διαφανειών αυτών

slide3
Διαγράμματα
  • Όπως σε όλες τις επιστήμες των μηχανικών, έτσι και στη μηχανική της σχεδίασης του λογισμικού, κατασκευάζουμε ένα σχέδιο του προς εκτέλεση συστήματος
  • Όπως σε όλες τις επιστήμες των μηχανικών, έτσι και στη μηχανική της σχεδίασης του λογισμικού, το εν λόγω σχέδιο γίνεται σε μεγάλο βαθμό διαγραμματικά
slide4
Διαγράμματα
  • Η Unified Modeling Language (UML) είναι η γλώσσα που μας προσφέρει τα building blocks με τα οποία κατασκευάζουμε τα διαγράμματα αυτά
  • Η UML είναι ευρύτατα διαδεδομένη και είναι η γλώσσα προτυποποίησης της σχεδίασης που χρησιμοποιείται παντού
    • Όταν δεν ακολουθούνται εναλλακτικές μορφές διεκπεραίωσης της ανάπτυξης (τις οποίες θα συναντήσετε στο μάθημα της Τεχν. Λογισμικού)
slide5
Γιατί διαγράμματα?
  • Για μας!
    • Για να αποτυπώσουμε γρήγορα και κατανοητά το σχέδιο του τι θα υλοποιήσουμε
    • Για να μπορούμε να κατανοήσουμε τη δομή ενός λογισμικού που πρέπει να συντηρήσουμε
    • Για να κρύψουμε γενικά την πολυπλοκότητα του κώδικα σε μια φιλική, διαγραμματική και γρήγορα αντιληπτή αποτύπωση που λειτουργεί ως blueprint / σκελετός / σχέδιο της υλοποίησης!
slide6
Γιατί διαγράμματα
  • Για τους άλλους!
    • Για να μπορούμε, σε ένα συνεργατικό περιβάλλον, να συνεργαστούμε με άλλους, να κατανοούμε όλοι γρήγορα, εύκολα και με ακρίβεια τι έχει / πρόκειτα να υλοποιηθεί από τους άλλους
slide7
Μην ξεχνάτε
  • Τα διαγράμματα τα ζωγραφίζουμε με άπλα στο χώρο, χωρίς οπτικό θόρυβο, και με ακρίβεια (που συνεπάγεται ενημέρωση όταν γίνονται αλλαγές)
  • ΜΗΝ ΞΕΧΝΑΤΕ: ο σκοπός των διαγραμμάτων είναι να υποβοηθήσουν την κατανόηση του κώδικα και τη συνεργασία των developers (αλλιώς είναι απλώς επιπλέον φόρτος)
classes
Classes
  • Class (package, if abstract, …)
  • Private compartments
  • Public compartment
  • Annotate:
    • Class if abstract
    • Method if constructor, abstract, …
    • Method signature
    • Attribute type
classes1
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;

}

comment
Comment

Notes are used (with restraint) to comment on key points of the SW structure

With dashed lines, if they pertain to a specific construct, e.g., a class

dependency
Σχέση εξάρτησης (dependency)

Dependent typically depends upon DependedUpon for class def., method invocation and stability

Η σχέση εξάρτησης καταγράφει ότι ο εξαρτώμενος χρησιμοποιεί κώδικα της εξαρτώντος

Αν αλλάξει ο εξαρτών, ίσως πρέπει να αλλάξει και ο εξαρτημένος

dependency1
Σχέση εξάρτησης (dependency)
  • Class DC (DependentClass) depends upon class DUC (DependedUponClass) if even one of the following holds:
    • There exists a method DC.f that takes as parameter an object of DCU

DC.f(DUC x): …

    • There exists a method DC.f that returns an object of DUC

DC.f(…): DUC

    • There exists a method DC.f that uses an object of DUC as an internally declared variable
slide16
Παράδειγμα

public class SimpleBookstoreEngine {

public static void main(String args[]){

ItemManageramazon = new ItemManager();

BookbookRef;

bookRef = new Book("Discours de la methode",

"Rene Descartes", 1637, 50.00, 0);

amazon.addItem(bookRef);

bookRef = new Book("The Meditations", "Marcus Aurelius", 180, 30.00, 1);

amazon.addItem(bookRef);

amazon.reportAllItems();

}

}

uml class diagrams
UML Class Diagrams – Συσχέτιση
  • Μια απλή σχέση συσχέτισης(Association) σημαίνει ότι κατά τη διάρκεια εκτέλεσης κάποια αντικείμενα των δύο κλάσεων συνυπάρχουν και συνεργάζονται
  • Hκατεύθυνση (αν υπάρχει) υποδηλώνει ότι αντικείμενα της A_Classγνωρίζουν την ύπαρξη και έχουν τη δυνατότητα πρόσβασηςστα αντικείμενα της Another_Class
  • Tο multiplicity(αν υπάρχει) δηλώνει ένα εύρος επιτρεπόμενων τιμών σχετικών με το πόσα αντικείμενα συνεργάζονται
    • 5, 10, 0..1, 1..10, 1..*, 0..*, κλπ.
  • Yπάρχει επίσης δυνατότητα να ονοματίσουμε το ρόλο που παίζουν τα αντικείμενα κάθε κλάσης στη συνεργασία
slide19
Παράδειγμα

public class ItemManager {

private ArrayList<Item> allItems;

}

  • Εδώ, κάθε αντικείμενο της κλάσης ItemManagerσυσχετίζεται με μια συλλογή από αντικείμενα της Item
slide20
Συσχέτιση vsΕξάρτηση
  • Η εξάρτηση είναι υποχρεωτικά κατευθυνόμενη
    • Στη συσχέτιση μπορεί να μην υπάρχει κατεύθυνση, στην περίπτωση αυτή θεωρείται ακαθόριστη
  • Η εξάρτηση υποδηλώνει ότι μια κλάση εξαρτάται από μια άλλη, χωρίς απαραίτητα η εξάρτηση αυτή να συνεπάγεται την συνύπαρξη και συνεργασία αντικειμένων των δύο κλάσεων.
    • π.χ. μπορεί μια βοηθητική κλάση Α να προσφέρει μια στατική μέθοδο η οποία καλείται από αντικείμενα μιας άλλης κλάσης Β, απευθείας πάνω στην κλάση Α και όχι πάνω σε ένα αντικείμενο της Α.
slide21
Συσχέτιση vsΕξάρτηση

class X {

public static void doSomething(){

System.out.println("Did something");

}

}

class Y {

public static void doSomethingElse(){

X.doSomething();

System.out.println("Did something else");

}

}

public class Main {

public static void main(String[] args) {

Y.doSomethingElse();

}

}

slide24
Κληρονομικότητα
  • Για καλύτερη οργάνωση και συντήρηση του κώδικα (για να μην επαναλαμβάνεται ο ίδιος κώδικας πολλές φορές)
    • φτιάχνουμε μια γενική/βασική κλάση που να περιλαμβάνει τα κοινά χαρακτηριστικά/πεδία και μεθόδους δύο ή περισσοτέρων κλάσεων και
    • εν συνεχεία επεκτείνουμετη βασική φτιάχνοντας κλάσεις που κληρονομούναπό αυτή.
  • Στις παραγόμενες κλάσεις δηλώνουμε επιπλέον χαρακτηριστικά και λειτουργίες.
    • Τα αντικείμενα έχουν όλα τα χαρακτηριστικά και λειτουργίες που δηλώνονται στην βασική κλάση,
    • καθώς και τα επιπλέον χαρακτηριστικά και λειτουργίες που δηλώνονται στην παραγόμενη κλάση
slide25
Κληρονομικότητα & UML
  • Τα αντικείμενα των παραγόμενων κλάσεων είναι και αντικείμενα της βασικής κλάσης , οπότε η επέκταση ονομάζεται και σχέση IS_A («είναι»).
  • Η κληρονομικότητα συμβολίζεται με τρίγωνοπου τοποθετείται με την κορυφή να δείχνει προς την αρχική κλάση και τη βάση προς τις παραγόμενες
  • Εκτός εξαιρετικού απροόπτου, η μητρική κλάση ζωγραφίζεται ψηλά και οι παραγόμενες από κάτω
slide26

package simpleBookstoreDemo;

  • public class Item {

...

}

  • public class Book extends Item {

...

}

  • public class CD extends Item {

...

}

  • public class ItemManager {
  • private ArrayList<Item> allItems;
  • ...
  • }
slide27

Στατική Άποψη – Αφηρημένες κλάσεις / Πολυμορφισμός

slide28
Γιατί πολυμορφισμός?
  • Γενικά είναι επιθυμητό είναι να έχουμε τη δυνατότητα να προσθέτουμε νέες δυνατότητες σε ένα πρόγραμμα χωρίς να χρειαστεί να αλλάξουμε δραστικάτονυπάρχοντα κώδικα …
  • Πώς γίνεται αυτό ??
    • συνδυάζουμε κληρονομικότητα & πολυμορφισμό (και για την ακρίβεια: επαναορισμό μεθόδων)
  • method overriding (επαναορισμός μεθόδων)
    • η μέθοδος μιας βασική κλάσης ορίζεται ξανά στην παραγόμενη κλάση με νέα υλοποίηση και το ίδιο πρωτότυπο
    • με αυτή τη τεχνική μπορούμε να πετύχουμε τον επεκτασιμότητα του κώδικα!!
slide29
Κληρονομικότητα & Πολυμορφισμός

Πώς μπορούμε να ελαχιστοποιήσουμε τη συντήρηση του κώδικα μέσω του πολυμορφισμού?

  • για κάθε αρμοδιότητα του προγράμματος για την οποία υπάρχει δυνατότητα διαφορετικών εναλλακτικών υλοποιήσεων (πχ διαφορετικές μορφές αποθήκευσης των δεδομένων σε ένα αρχείο) και κατά συνέπεια η δυνατότητα μελλοντικών επεκτάσεων στο πρόγραμμά μας με μια νέα επιπλέον υλοποίηση,ορίζουμε μια βασική κλάση
  • εν συνεχεία για κάθε διαφορετική εναλλακτική κατασκευάζουμε μια παραγόμενη κλάση η οποία ξανα-ορίζει (overrides) τις public μεθόδους της βασικής κλάσης
  • υλοποιούμε / παραμετροποιούμε τον υπόλοιπο κώδικα χρησιμοποιώντας αναφορές στη βασική κλάση
    • οι αναφορές αυτές μπορούν να δείχνουν σε αντικείμενα οποιασδήποτε κλάσης προκύπτει από τη βασική
    • επομένως τα μόνα σημεία τα οποία πρέπει να αλλαχθούν σε μια μελλοντική επέκταση είναι τα σημεία στο οποία αρχικοποιούνται οι αναφορές αυτές
    • ο υπόλοιπος κώδικας στον οποίο καλούνται μέθοδοι σε αντικείμενα στα οποία δείχνουν οι αναφορές αυτές δεν χρειάζεται αλλαγές
slide30
Αφηρημένες κλάσεις
  • Δηλώνοντας μια κλάση ως αφηρημένη (abstract)
    • μια κλάση ονομάζεται αφηρημένη αν περιέχει τουλάχιστον μια αφηρημένη μέθοδο που δεν περιλαμβάνει υλοποίηση
      • Η κλάση δηλώνεται public abstract class MyAbstractClass
      • με τη μέθοδο public abstractreturnTypemethodName();
    • η αφηρημένη κλάση λειτουργεί σαν καλούπι για την κατασκευή παραγόμενων που προσφέρουν εναλλακτικές υλοποιήσεις στις αφηρημένες μεθόδους….
    • η δημιουργία αντικειμένων αφηρημένης κλάσης δεν επιτρέπεται από τον compiler
    • η μη υλοποίηση αφηρημένων μεθόδων δεν επιτρέπεται από τον compiler
abstract class
Abstract class

package elaborateBookstore;

public abstractclass 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 abstract double getFinalPrice();

protected String title;

protected double price;

}

one implementation
One implementation

package elaborateBookstore;

public class Book extends Item {

private String author;

@Override

public double getFinalPrice() {

return price;

}

}

another implementation
Another implementation

public class CD extends Item {

private String artist;

@Override //implem. abstract

public double getFinalPrice() {

return (price - discount);

}

public void showDetails() { //override mama class’ method

super.showDetails();

System.out.println("by " + artist);

System.out.println(“Price f.: “+ getFinalPrice()+ "\n");

}

}

abstract coupling
Abstract coupling

public class ItemManager {

private ArrayList<Item> allItems;

}

The “client” class ItemManager uses ONLY the abstract class and is completely agnostic to any subclasses the abstract class has.

=> Zero maintenance cost when new subclasses appear

uml class diagrams1
UML Class Diagrams - Συνάθροιση
  • Ένα αντικείμενο της κλάσης B_Class (πχ το προφίλ ενός ανθρώπου) είναι συνάθροιση αντικειμένων της C_Classαν χαρακτηρίζεται/αποτελείται από αντικείμενα της κλάσης C_Class (πχ μια διεύθυνση)
    • Σε μια σχέση συνάθροισης ένα αντικείμενο της κλάσης C_Class (πχ η ίδια διεύθυνση) μπορεί να χαρακτηρίζει πολλαπλά αντικείμενατης κλάσης B_Class (πχ περισσότερα από ένα προφίλ ανθρώπων που μένουν στο ίδιο σπίτι) - Ή αντικείμενα (πχ κτίρια) μιας άλλης κλάσης Ζ_Class…
    • Σύμφωνα με τα παραπάνω η ύπαρξη των αντικειμένων της C_Classδεν εξαρτάται άμεσα από την ύπαρξη των αντικειμένων της B_Class
      • (πχ το πρόγραμμα διαχειρίζεται μια λίστα από διευθύνσεις ακόμα και αν δεν υπάρχουν άνθρωποι που μένουν σε αυτές)
slide38
Παράδειγμα

public class ItemManager {

private ArrayList<Item> allItems;

}

  • Προσοχή στον άσπρο ρόμβο:
    • Στη μεριά του σύνθετου αντικειμένου
    • Προσοχή στο χρώμα: άσπρος
slide39
Η συνάθροιση είναι μια ειδική περίπτωση συσχέτισης
uml class diagrams2
UML Class Diagrams - Σύνθεση
  • Ένα αντικείμενο της κλάσης B_Class (πχ μια οικογένεια) αποτελεί σύνθεση αντικειμένων της C_Classαν χαρακτηρίζεται/αποτελείται από αντικείμενα της κλάσης C_Class (πχ μέλη οικογένειας)
    • Σε μια σχέση σύνθεσης ένα αντικείμενο C_Classανήκει το πολύ σε ένα αντικείμενο της B_Class
    • Σύμφωνα με τα παραπάνω ένα αντικείμενο της κλάσης C_Class δεν έχει λόγο ύπαρξης αν δεν υπάρχει το αντικείμενο της B_Class το οποίο χαρακτηρίζει
uml class diagrams3
UML Class Diagrams - Σύνθεση
  • Σε ότι αφορά τη σημειογραφία προσέξτε ότι εδώ το διαμαντάκι είναι μαυρισμένο (σε αντιδιαστολή με το διαμαντάκι της συνάθροισης που είναι άσπρο)
slide43
Παράδειγμα

class Member{

private String fname;

private int age;

private int gender;

public Member(String fn, int a, int g){

fname = fn;

age = a;

gender = g;

}

public int getAge(){

return age;

}

};

slide44
Παράδειγμα

classFamily{

privateStringlname;

privateintnextChild;

private Member father;private Member mother;

privateMemberchildren[];

privateMembercreateMember(String n, intage, intgd){

if((age >= 0) && (gd >= 1) && (gd <= 2))

returnnewMember(n, age, gd);

else {

System.out.println("ErrorinMembercreation !");

returnnull;

}

}

publicFamily(Stringln, intmaxChildren) {

lname = ln;

if(maxChildren > 0)

children = newMember [maxChildren];

}

publicvoidsetFather (String n, intage, intgd){

father = createMember(n, age, gd);

}

……………………………

};

slide45
Παράδειγμα

class Family{

……………………………………………

public void setMother(String n, int age, int gd){

mother = createMember(n, age, gd);

}

public void addChild(String n, int age, int gd){

children[nextChild++] = createMember(n, age, gd);

}

public float avgAge(){

float avg = 0;

int memberNo = 0;

if (father != null){

memberNo++;avg += father.getAge();

}

if(mother != null){

memberNo++;avg += mother.getAge();

}

for (int i = 0; i < nextChild; i++){

memberNo++;

avg += children[i].getAge();

}

return (memberNo > 0) ? avg/memberNo : 0 ;

}

};

slide46
Παράδειγμα

public class FamilyTest{

public static void main(String arg[]){

intmaxChildren = Integer.parseInt(args[0]);

Family family = new Family(args[1], maxChildren);

if(args[2].equals(“noFather”) == false)

family.setFather(args[2],

Integer.parseInt(args[3]),

Integer.parseInt(args[4]));

if(args[5].equals(“noMother”) == false)

family.setMother(args[5],

Integer.parseInt(args[6]),

Integer.parseInt(args[7]));

for(inti=0; i < maxChildren; i++)

family.addChild(args[8+i],

Integer.parseInt(args[9+i]),

Integer.parseInt(args[10+i]));

System.out.println("Average Family Age : " + family.avgAge());

Member orphan = new Member(“Jim”, 20, 1)

}

slide47
Παράδειγμα

Γιατί έχω σχέση σύνθεσης ?

slide48
Quiz

class A{

private int x;

private float y;

public A(int ax, float ay) {

x=ax; y=ay;

}

public void ma(B b){

b.mb();

}

}

class B{

private int z;

private int w;

public B(int az, int aw) {

z=az; w=aw;

}

public void mb(){

z--; w++;

}

}

Πώς σχετίζονται ??

slide49
Quiz

class A{

private int x;

private float y;

public A(int ax, float ay) {

x=ax; y=ay;

}

public void ma(){

B b = new B(10, 20)

b.mb();

}

}

class B{

private int z;

private int w;

public B(intaz, int aw) {

z=az; w=aw;

}

public void mb(){

z--; w++;

}

}

Πώς σχετίζονται ??

slide50
Quiz

class A{

private int x;

private B b;

public A(int ax, B ab) {

x=ax; b=ab;

}

public void ma(){

b.mb();

}

}

class B{

private int z;

private int w;

public B(int az, int aw) {

z=az; w=aw;

}

public void mb(){

z--; w++;

}

}

Πώς σχετίζονται ??

slide51
Quiz

class A{

private int x;

private B b;

public A(int ax) {

x=ax; b = new B(10, 20);

}

public void ma(){

b.mb();

}

}

class B{

private int z;

private int w;

public B(intaz, int aw) {

z=az; w=aw;

}

public void mb(){

z--; w++;

}

}

Πώς σχετίζονται ??

slide52
Quiz

class A{

private int x;

private B b;

public A(int ax) {

x=ax; b = new B(10, 20);

}

public void ma(){

b.mb();

}

public B setB(B ab){b = ab;}

}

class B{

private int z;

private int w;

public B(int az, int aw) {

z=az; w=aw;

}

public void mb(){

z--; w++;

}

}

Πώς σχετίζονται ??

slide54
Άποψη Αλληλεπίδρασης
  • Στη στατική άποψη απεικονίζεται η δομή ενός λογισμικού (κλάσεις, σχέσεις).
  • Δεν υπάρχει επαρκής πληροφορία για τον τρόπο με τον οποίο υλοποιούνται οι διάφορες λειτουργίες που προσφέρονται στο χρήστη μέσω της αλληλεπίδρασης των αντικειμένων των κλάσεων του λογισμικού
        • Με τον όρο αλληλεπίδραση εννοούμε την κλήση μεθόδων των αντικειμένων / ή με άλλα λόγια την ανταλλαγή μηνυμάτων μεταξύ των αντικειμένων των κλάσεων του λογισμικού.
slide55
Άποψη Αλληλεπίδρασης
  • Διαγράμματα ακολουθίας (sequence diagrams)
  • Διαγράμματα επικοινωνίας (collaboration diagrams (UML 1.x) / communication diagrams (UML 2))
sequence diagrams
Sequence Diagrams
  • Απεικόνιση της αλληλεπίδρασης των αντικειμένων του λογισμικού σε 2 άξονες
    • Ο οριζόντιος άξονας απεικονίζει ένα σύνολο αντικειμένων κατά τη διάρκεια εκτέλεσης του λογισμικού.
    • Ο κατακόρυφος άξονας απεικονίζει τη διάρκεια ζωής των αντικειμένων.
      • Δηλαδή ?
sequence diagrams1
Sequence Diagrams

public class AClass {

public int aa1;

public float aa2;

public AClass(int a1, float a2){

aa1 = a1;

aa2 = a2;

}

public void ma1(BClass bo, int flag){

bo.mb1(flag);

}

public void ma2(){

System.out.println(aa1+aa2);

}

}

sequence diagrams2
Sequence Diagrams

public class BClass {

public String ab1;

public String ab2;

public BClass(String a1, String a2){

ab1 = a1;

ab2 = a2;

}

public void mb1(int flag){

System.out.println(ab1 + flag);

}

public void mb2(AClass ao){

System.out.println(ab2);

ao.ma2();

}

}

sequence diagrams3
Sequence Diagrams

public class Main {

public static void main(String[] args) {

InputStreamReader in = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(in);

String inData1, inData2;

try {

inData1 = br.readLine();

inData2= br.readLine();

AClass ao = new AClass(Integer.parseInt(inData1),

Integer.parseInt(inData2));

inData1 = br.readLine();

inData2= br.readLine();

BClass bo = new BClass(inData1, inData2);

inData1 = br.readLine();

ao.ma1(bo, Integer.parseInt(inData1));

bo.mb2(ao);

} catch (IOException ex) {

System.out.println(ex.getMessage());

}

}

}

sequence diagrams4
Sequence Diagrams
  • Απεικόνιση αντικειμένων.
    • διάρκεια ζωής αντικειμένων
    • … η διάρκεια κατά την οποία είναι δεσμευμένη μνήμη για αυτά…
  • Γενικά μπορούμε να απεικονίσουμε και ένα actor
    • αν θέλουμε να δείξουμε ότι λόγω της αλληλεπίδρασης με αυτόν ξεκινά μια διαδικασία
sequence diagrams5
Sequence Diagrams
  • Αλληλεπίδραση αντικειμένων.
    • αναπαράσταση χρήστη
    • δημιουργία αντικειμένων
    • καταστροφή αντικειμένων
    • κλήση μεθόδου
      • επιστροφή
    • διάρκεια εκτέλεσης μεθόδου (πλαίσιο ενεργοποίησης)
    • κλήση μιας μεθόδου στο πλαίσιο της εκτέλεσης μιας άλλης μεθόδου

 Είναι σωστό βάσει του κώδικα ??

 Τι σημαίνει αυτό το διάγραμμα σε

σχέση με τη στατική άποψη του

συστήματος ???

sequence diagrams6
Sequence Diagrams
  • Αλληλεπίδραση αντικειμένων.
    • για να είναι σωστό ένα διάγραμμα αλληλεπίδρασης το οποίο απεικονίζει αντικείμενα που καλούν μεθόδους σε άλλα αντικείμενα πρέπει
      • να υπάρχει αντίστοιχο διάγραμμα κλάσεων στο οποίο να υπάρχουν κατάλληλες συσχετίσεις/συναθροίσεις/συνθέσεις μεταξύ των κλάσεων των αντικειμένων
sequence diagrams7
Sequence Diagrams

public class AClass {

public int aa1;

public float aa2;

public AClass(int a1, float a2){

aa1 = a1;

aa2 = a2;

}

public void ma1(BClass bo, int flag){

if(flag >= 0)

bo.mb1(flag);

else

bo.mb2(this);

}

public void ma2(){

System.out.println(aa1+aa2);

}

}

εναλλακτικές αλληλεπιδράσεις

εναλλακτικές αλληλεπιδράσεις

sequence diagrams8
Sequence Diagrams

public class BClass {

public String ab1;

public String ab2;

public BClass(String a1, String a2){

ab1 = a1;

ab2 = a2;

}

public void mb1(int flag){

System.out.println(ab1 + flag);

}

public void mb2(AClass ao){

System.out.println(ab2);

ao.ma2();

}

}

sequence diagrams9
Sequence Diagrams

public class Main {

public static void main(String[] args) {

InputStreamReader in = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(in);

String inData1, inData2;

try {

inData1 = br.readLine();

inData2= br.readLine();

AClass ao = new AClass(Integer.parseInt(inData1),

Integer.parseInt(inData2));

inData1 = br.readLine();

inData2= br.readLine();

BClass bo = new BClass(inData1, inData2);

inData1 = br.readLine();

ao.ma1(bo, Integer.parseInt(inData1));

} catch (IOException ex) {

System.out.println(ex.getMessage());

}

}

}

sequence diagrams10
Sequence Diagrams
  • Αλληλεπίδραση αντικειμένων.
    • πλαίσια λογικής ελέγχου
      • εναλλακτικές αλληλεπιδράσεις
      • εκτελείται μόνο αυτή για την οποία ισχύει η συνθήκη
sequence diagrams11
Sequence Diagrams

public class AClass {

public int aa1;

public float aa2;

public AClass(int a1, float a2){

aa1 = a1;

aa2 = a2;

}

public void ma1(BClass bo, int flag){

while(flag >= 0){

bo.mb1(flag);

flag--;

}

}

public void ma2(){

System.out.println(aa1+aa2);

}

}

επαναλαμβανόμενες αλληλεπιδράσεις

sequence diagrams12
Sequence Diagrams

public class BClass {

public String ab1;

public String ab2;

public BClass(String a1, String a2){

ab1 = a1;

ab2 = a2;

}

public void mb1(int flag){

System.out.println(ab1 + flag);

}

public void mb2(AClass ao){

System.out.println(ab2);

ao.ma2();

}

}

sequence diagrams13
Sequence Diagrams

public class Main {

public static void main(String[] args) {

InputStreamReader in = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(in);

String inData1, inData2;

try {

inData1 = br.readLine();

inData2= br.readLine();

AClass ao = new AClass(Integer.parseInt(inData1),

Integer.parseInt(inData2));

inData1 = br.readLine();

inData2= br.readLine();

BClass bo = new BClass(inData1, inData2);

inData1 = br.readLine();

ao.ma1(bo, Integer.parseInt(inData1));

} catch (IOException ex) {

System.out.println(ex.getMessage());

}

}

}

sequence diagrams14
Sequence Diagrams
  • Αλληλεπίδραση αντικειμένων.
    • πλαίσια λογικής ελέγχου
      • επαναλαμβανόμενες αλληλεπιδράσεις
    • αλλά πλαίσια
      • neg Μη έγκυρη αλληλεπίδραση
      • opt  Αλληλεπίδραση που εκτελείται προαιρετικά αν ισχύει μια συνθήκη
      • par  παράλληλη εκτέλεση αλληλεπιδράσεων
sequence diagrams15
Sequence Diagrams
  • Αλληλεπίδραση αντικειμένων.
    • ανώνυμα αντικείμενα
    • αυτοκλήση
communication diagrams
Communication Diagrams
  • Ο στόχος είναι ο ίδιος με τα sequence diagrams – απεικόνιση της αλληλεπίδρασης μεταξύ αντικειμένων για την υλοποίηση των περιπτώσεων χρήσης του λογισμικού
  • Ο τρόπος απεικόνισης είναι διαφορετικός.
    • Αντικείμενα.
    • Στιγμιότυπα συσχετίσεων μεταξύ των αντικειμένων.
    • Κλήσεις μεθόδων - μηνύματα.
      • Η χρονική σειρά των κλήσεων καθορίζεται με ένα αύξοντα αριθμό που χαρακτηρίζει την κάθε κλήση – μήνυμα.
        • Ένθετη αρίθμησηγια να δείξουμε ότι μια κλήση γίνεται κατά την εκτέλεση μιας άλλης κλήσης
          • 1, 1.1, 1.2, 2, 2.1, …..
collaboration diagrams
Collaboration Diagrams

Αλληλεπίδραση αντικειμένων.

1.1:

2.1:

2:

uml class diagrams4
UML Class Diagrams
  • Περιγραφή / αναπαράσταση interface
    • Μια άλλη περίπτωση στοιχείου αφαίρεσης είναι το interface
      • ορίζει ένα σύνολο public αφηρημένων μεθόδων
    • Όπως θα δούμε στη συνέχεια, η χρήση interfaces στην υλοποίηση ενός συστήματος βοηθά ιδιαίτερα στη συντήρηση του συστήματος .
        • αρχή διαχωρισμού interfaces
    • Από άποψη υλοποίησης η Java έχει αντίστοιχη προγραμματιστική δομή (interface) για τον ορισμό τέτοιων στοιχείων αφαίρεσης.
uml class diagrams5
UML Class Diagrams

περιγραφή / αναπαράσταση μιας διεπαφής / interface

uml class diagrams6

A_Class

<<Interface>>

An Interface

UML Class Diagrams – Σχέση κλάσης και διεπαφής

περιγραφή / αναπαράσταση σχέσης υλοποίησης (Realization)μεταξύ ενός interface και μιας κλάσης που το υλοποιεί

slide79
Παράδειγμα

στοιχείο αφαίρεσης

interface Shape {

double getArea();

}

class Circle implements Shape {

private double radius;

public Circle(double r){

radious = r;

}

public double getArea(){

System.out.println(3.14*radius*radius);

return 3.14*radius*radius;

}

}

slide80
Παράδειγμα

class Rectangle implements Shape {

private double width;

private double height;

public Rectangle (double w, double h){

width = w; height = h;

}

public double getArea(){

System.out.println(width*height);

return width*height;

}

}

slide81

επαναχρησιμοποιήσιμος κώδικας

υλοποιημένος με βάση το στοιχείο

αφαίρεσης

Παράδειγμα

public class tstInterface{

static void max(Shape x, Shape y){

if (x.getArea() > y.getArea())

System.out.println("Maximum area : First shape");

else

System.out.println("Maximum area : Second shape");

}

public static void main(String args[]){

Shape c1 = new Circle(2);

Shape c2 = new Circle(5);

Shape r1 = new Rectangle(2, 3);

Shape r2 = new Rectangle(5, 3);

max(c1, c2);

max(r1, r2);

}

}

x, y αναφορές σε αντικείμενα κλάσεων που υλοποιούν το Shape interface !!!

java interfaces
Java Interfaces
  • Στη Java,
    • εν αντιθέσει με την κληρονομικότητα όπου μια κλάση μπορεί να κληρονομεί από μια μόνο βασική κλάση
      • μια κλάση μπορεί να υλοποιεί περισσότερα από ένα interfaces
    • επίσης ένα interface μπορεί να κληρονομεί από άλλα interfaces.
slide85

Στατική Άποψη– Ιεραρχία ή Συνάθροιση?

(ένα από τα κλασικά προβλήματα σχεδίασης)

slide86
Οι ιεραρχίες κληρονομικότητας ΔΕΝ είναι φίλοι μας
  • Στο μάθημα έχουμε ήδη μιλήσει πολλές φορές για το πόσο ισχυρό εργαλείο είναι το abstract coupling και η εκμετάλλευση του πολυμορφισμού για να κατασκευάζουμε client κώδικα που είναι subclass agnostic (και κατά συνέπεια απαιτεί μηδενική συντήρηση όταν αλλάζει η ιεραρχία).
  • Έχουμε πει επίσης τα πλεονεκτήματα του write & testonce, use by many για την περίπτωση του κώδικα που κληροδοτείται από τις μητρικές κλάσεις στις κλάσεις – παιδιά.
  • Όμως …
slide87
Οι ιεραρχίες κληρονομικότητας ΔΕΝ είναι φίλοι μας
  • Η κληρονομικότητα είναι η ισχυρότερη μορφή εξάρτησης μεταξύ δύο κλάσεων
  • Οι αλλαγές στη μητρική κλάση «κατεβαίνουν» προς τις κληρονομούσες κλάσεις => αν η μητρική κλάση αλλάξει, όλες οι κλάσεις που την κληρονομούν καθώς και οι clients τους θέλουν συντήρηση
slide88
Πριν ορίσετε ιεραρχία κληρονομικότητας, σκεφτείτε τη συνάθροιση!
  • Η συνάθροιση (συσχέτιση μεταξύ δύο κλάσεων που είναι ανεξάρτητες κατά τα λοιπά) πολύ συχνά μπορεί να κάνει πολύ καλύτερα τη δουλειά από μια ιεραρχία.
  • Αν τα αντικείμενα των κλάσεων σχετίζονται με προσωρινή σχέση (π.χ., ένας υπάλληλος τράπεζαςεργάζεται ως ταμίας μόνο για ένα διάστημα), τότε η λύση είναι η συσχέτιση των κλάσεων με συνάθροιση και όχι με ιεραρχίες!
  • Θυμηθείτε το κριτήριο ISA – εν αντιθέσει, η συσχέτιση μπορεί να ονομαστεί HAS-A (object has a role)
slide89
Εξειδίκευση

Person

Employee

Customer

Officer

p1

p7

p10

p13

p4

Secretary

p2

p8

p11

p14

p5

p3

p9

p12

p15

p6

Teller

Other People