04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal...

66
04 Αντικειμενοστραφής ανάλυση και σχεδιασμός Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017‐18 Δρ. Κώστας Σαΐδης ﴾[email protected]﴿

Transcript of 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal...

Page 1: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

04 Αντικειμενοστραφής ανάλυση καισχεδιασμός

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

Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών YπολογιστώνΕθνικό Μετσόβιο Πολυτεχνείο

Χειμερινό εξάμηνο 2017‐18

Δρ. Κώστας Σαΐδης ﴾[email protected]﴿

Page 2: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Περιεχόμενα1. Αντικειμενοστράφεια ﴾με παραδείγματα σε Java, Javascript﴿2. Εισαγωγή στη UML*3. Εισαγωγή στα πρότυπα σχεδίασης*

* Θα επανέλθουμε αναλυτικότερα σε επόμενες διαλέξεις

2

Page 3: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

1. Αντικειμενοστράφεια

3

Page 4: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΑντικείμεναΕνθυλακώνουν ﴾encapsulate﴿

Kατάσταση ﴾state﴿δεδομένα που τηρούνται σε πεδία

Συμπεριφορά ﴾behavior﴿λειτουργίες που τηρούνται σε μεθόδους ﴾behavior﴿

Στιγμιοτύπιση ﴾instantiation﴿Μέσω κατασκευαστών ﴾constructors﴿

Αυτο‐αναφορά ﴾this, self﴿Ανταλλαγή μηνυμάτων ﴾message passing﴿

4

Page 5: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Βασικές έννοιεςΕνθυλάκωση ﴾encapsulation﴿Στυγμιοτύπιση ﴾instantiation﴿Κληρονομικότητα ﴾inheritance﴿

Με βάση κλάσεις / διεπαφές ﴾classes / interfaces﴿Με βάση πρωτότυπα ﴾prototypes﴿

Δυναμική αποστολή μηνυμάτων ﴾dynamic method dispatch﴿Αργή δέσμευση ﴾late binding﴿ΣύνθεσηΠολυμορφισμός

5

Page 6: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Βασικές αρχές αφαίρεσης ﴾abstractionprinciples﴿Το σήμειο που το αντικειμενοστραφές μοντέλοσυνδέεται με την εννοιολογική μοντελοποίηση ﴾conceptualmodeling﴿ και την αναπαράσταση γνώσης ﴾knowledgerepresenation﴿

6

Page 7: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Λίστα αναγνωσμάτωνAntero Taivalsaari, "On the notion of inheritance", ACM ComputingSurveys, Vol. 28, No 3, September 1996.

7

Page 8: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

I. Classification ‐ Instantiation

A. Taivalsaari

8

Page 9: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Classification ‐ InstantiationΣχέση του αντικειμένου με την κλάση του και αντίστροφα.Όλα τα αντικείμενα / στιγμιότυπα μιας κλάσης μοιράζονταικοινά και ομοιόμορφα χαρακτηριστικά.Η κλάση είναι το intensional abstraction όλων των δυνατώντης αντικειμένων.

9

Page 10: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Java﴿class Point {  private int x;  private int y;    public Point(int x, int y) {    this.x = x;    this.y = y;  }  public int getX() { return x; }    public int getY() { return y; }    public void setX(int x) { this.x = x; }    public void setY(int y) { this.y = y; }    public void addToX(int num) { this.x += num; }    public void addΤoY(int num) { this.y += num; }}

10

Page 11: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΧρήσηPoint p1 = new Point(0, 0); //στιγμιοτύπισηp1.addToX(10); //αποστολή μηνύματος (επίκληση μεθόδου)Point p2 = new Point(10, 0);assert(p1.getX() == p2.getX());assert(p1 instanceof Point);assert(p2 instanceof Point);

11

Page 12: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Javascript < ES6﴿var Point = function(x, y) { //constuctor  this.x = x;  this.y = y;  this.getX = function() { return this.x; }  this.getY = function() { return this.y; }  this.setX = function(x) { this.x = x; }  this.setY = function(y) { this.y = y; }  this.addToX = function(num) { this.x += num; }      this.addToY = function(num) { this.y += num; }  }

12

Page 13: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Καλύτερο Παράδειγμα ﴾Javascript < ES6﴿var Point = function(x, y) { //constuctor  this.x = x;  this.y = y;}

Point.prototype.getX = function() { return this.x; }

Point.prototype.getY = function() { return this.y; }

Point.prototype.setX = function(x) { this.x = x; }

Point.prototype.setY = function(y) { this.y = y; }

Point.prototype.addToX = function(num) { this.x += num; }    

Point.prototype.addToY = function(num) { this.y += num; }  

13

Page 14: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Javascript >= ES6﴿class Point {

  constructor(x, y) {    this.x = x;    this.y = y;  }    get x() { return this.x; }    get y() { return this.y; }    set x(x) { this.x = x; }    set y(y) { this.y = y; }    addToX(num) { this.x += num; }    addΤoY(num) { this.y += num; }}

14

Page 15: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Χρήσηvar p1 = new Point(0, 0); p1.addToX(10); var p2 = new Point(10, 0);assert p1.getX() == p2.getX();assert (p1 instanceof Point);assert (p2 instanceof Point);

15

Page 16: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

2. Aggregation ‐ Decomposition

A. Taivalsaari

16

Page 17: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Aggregation ‐ DecompositionΣυνάθροιση ﴾ή σύνθεση﴿ επιμέρους εννοιών για τη σύστασημιας νέας ξεχωριστής έννοιας.

Σχέσεις μέρους‐όλου ﴾part‐of﴿.

17

Page 18: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Java﴿Ένα αντικείμενο περιέχει ﴾συντίθεται﴿ από άλλο αντικείμενα

class Line {  private Point first;  private Point second;    public Line(Point first, Point second) {    this.first = first;    this.second = second;  }    Point getFirstPoint() { return first; }    Point getSecondPoint() { return second; }}

18

Page 19: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾ES6﴿Ένα αντικείμενο περιέχει ﴾συντίθεται﴿ από άλλο αντικείμενα

class Line {

  constructor(first, second) { //Points    this.first = first;    this.second = second;  }      getFirstPoint() { return this.first; }    getSecondPoint() { return this.second; }}

19

Page 20: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

3. Generalization ‐ Specialization

A. Taivalsaari

20

Page 21: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Generalization ‐ SpecializationΣχέση μεταξύ κλάσεων.Η γενική κλάση συγκεντρώνει τα κοινά στοιχεία όλων τωνεξειδικεύσεών της.Η κληρονομικότητα είναι ο κατεξοχήν μηχανισμόςυλοποίησης της εξειδίκευσης.

21

Page 22: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΚληρονομικότηταΈνα αντικείμενο κληρονομεί τα πεδία ή/και τις μεθόδους των"προγόνων" τουΣτην πράξη έχουμε:

Κληρονομικότητα για εξειδίκευση ﴾specialization﴿Κληρονομικότητα για επαναχρησιμοποίηση ﴾reuse﴿

22

Page 23: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Java﴿class Arrow extends Line {

  enum Direction{FIRST_TO_SECOND, SECOND_TO_FIRST};     private Direction d;    public Arrow(Point p1, Point p2, Direction d) {    super(p1, p2);    this.d = d;  }      public void toggleDirection() {    if (d == Direction.FIRST_ΤΟ_SECOND)      d = Direction.SECOND_TO_FIRST;    else        d = Direction.FIRST_ΤΟ_SECOND;  }}

23

Page 24: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΧρήσηPoint p1 = new Point(0, 0);Point p2 = new Point(10, 10);Arrow a = new Arrow(p1, p2, Arrow.Direction.FIRST_TO_SECOND);assert(a instanceof Arrow); //Προφανώςassert(a instanceof Line);  //Επίσης ‐‐ πολυμορφισμόςassert(a.getFirstPoint().getX() == 0); //Κληρονομικότητα

24

Page 25: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Javascript < ES6﴿var Line = function() { //Line constructor  ...}

var Direction = {  FIRST_TO_SECOND: 1,  SECOND_TO_FIRST: 2} 

var Arrow = function(p1, p2, d) {  Line.call(this, p1, p2); //call the Line constructor  this.d = d;}

Arrow.prototype = new Line(); //"Inherit" from LineArrow.prototype.constructor = Arrow; //Just to make sureArrow.prototype.toggleDirection = function() {  if (this.d == Direction.FIRST_ΤΟ_SECOND)    this.d = Direction.SECOND_TO_FIRST;  else      this.d = Direction.FIRST_ΤΟ_SECOND;  } 25

Page 26: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα ﴾Javascript >= ES6﴿class Line {  ...}

var Direction = {   FIRST_TO_SECOND: 1,  SECOND_TO_FIRST: 2} 

class Arrow extends Line {

  constructor(p1, p2, d) {    super(p1, p2);    this.d = d;  }    toggleDirection() {    if (this.d == Direction.FIRST_ΤΟ_SECOND)      this.d = Direction.SECOND_TO_FIRST;    else        this.d = Direction.FIRST_ΤΟ_SECOND;    }

26

Page 27: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Χρήσηvar p1 = new Point(0, 0);var p2 = new Point(10, 10);var a = new Arrow(p1, p2, Direction.FIRST_TO_SECOND);assert(a instanceof Arrow);assert(a instanceof Line);assert(a.getFirstPoint().getX() == 0);

27

Page 28: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Private state/behaviorΣτο ﴾απλό﴿ παράδειγμά μας:

Η κλάση Point ενθυλακώνει δύο ακεραίουςΗ κλάση Line ενθυλακώνει δύο Point αντικείμεναΗ κλάση Arrow ενθυλακώνει δύο Point αντικείμενα καιμια διεύθυνση

Μηχανισμός απόκρυψης πληροφορίας ﴾information hiding﴿

28

Page 29: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Private state σε Javascriptvar Line = function(x, y) {  var state = {    x:x,    y:y  };    this.getX = function() {    return state.x  }    ...};

29

Page 30: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

4. Grouping ‐ Individualization

A. Taivalsaari

30

Page 31: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Ομαδοποίηση ‐ ΔιαχωρισμόςΟμαδοποίηση αντικειμένων με βάση κάποιο extensional καιόχι intensional χαρακτηριστικό.Παραδείγματα:

Αγαπημένα του χρήστη ﴾user favorites﴿Πιο πρόσφατα / πιο δημοφιλήΑποτελέσματα μιας αναζήτησης

31

Page 32: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΠολυμορφισμόςΠαροχή μιας κοινής διεπαφής για αντικείμενα διαφορετικώντύπων

ή

Ένα αντικείμενο μπορεί να έχει πολλούς τύπους ﴾πολλέςσυμπεριφορές﴿

32

Page 33: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Είδη πολυμορφισμούUniversal polymorphism

ParametricInclusion

Ad‐hoc

Overloading

Coercion

33

Page 34: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Λίστα αναγνωσμάτωνLuca Cardelli, Peter Wegner, "On Understanding Types, DataAbstraction, and Polymorphism", ACM Computing Surveys, Vol 17n. 4, pp 471‐522, December 1985.

34

Page 35: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Ad‐hoc πολυμορφισμός ﴾Overloading﴿Operator overloading

int x = 3 + 5;String s = name + " " + surname;

Method overloading

class Foo {  void doSomething(A a) { ... }  void doSomething(A a, B b) { ... }}

class Bar extends Foo {  void doSomething(C c, D d) { ... }}

35

Page 36: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Ad‐hoc πολυμορφισμός ﴾Coercion﴿Type coercion

double x = 1; //The int constant is converted to double automatically

double avg, sum;int count;...avg = sum / count;//The int count is coverted to double automatically//before applying the division

36

Page 37: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παραμετρικός πολυμορφισμόςGenerics

class Cache<K, V> {  private final Map<K, V> cache = new HashMap<>();  public synchronized void put(K key, V value) {     cache.put(key, value);  }    public synchronized V get(K key) {    return cache.get(key);  }}

37

Page 38: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Cache<String, Line> lineLabels = new Cache<>();cache.put("First line", someLine);cache.put("Second line", someOtherLine);

38

Page 39: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Πολυμορφισμός υπο‐τύπων ﴾inclusionpolymorphism﴿interface Shape {  double getArea();}

class Rectangle implements Shape {  private double width;  private double height;  public double getArea() {    return width * height;  }}

class Circle implements Shape {  private double radius;  public double getArea() {    return Math.PI * radius * radius;  }}

39

Page 40: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

class AreaPrinter {  public static void print(Shape s) {    System.out.println(s.getArea());  }}

Rectangle r = new Rectangle(2.0, 3.0);Circle c = new Circle(1.0);

AreaPrinter.print(r); // 6.0AreaPrinter.print(c); // 3.14

40

Page 41: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Δυναμική αποστολή μηνυμάτων καιαργή δέσμευσηinterface Computation {  String getName();    void compute();}

abstract class ComputationBase implements Computation {  public String getName() {     return getClass().getName();  }}

41

Page 42: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

class SimpleComputation extends ComputationBase {  public void compute() {     System.out.println("Done computing");  }}

class SimpleComputation2 extends SimpleComputation {  public String getName() {     return "Simple2"  }}

42

Page 43: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

class ListOfComputations extends ComputationBase {  private final List<Computation> computations;       public ListOfComputations(Computation... computations) {    this.computations = Arrays.asList(computations);  }    public void compute() {    for(Computation c: computations) {      System.out.println("Computing: " + c.getName());      c.compute();    }  }}

43

Page 44: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Computation c1 = new SimpleComputation();Computation c2 = new SimpleComputation2();Computation list = new ListOfComputations(c1, c2); System.out.println(list.getName());list.compute();

//OutputListOfComputationsComputing: SimpleComputationDone computingComputing: Simple2Done computing

44

Page 45: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

2. Εισαγωγή στη γλώσσα UML

45

Page 46: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Unified Modeling Language ﴾UML﴿Γλώσσα μοντελοποίησης γενικής χρήσης που στοχεύει στηνπαροχή ενός καθιερωμένου τρόπου οπτικοποίησης καιεπικοινωνίας του σχεδιασμού ενός συστήματος.ISO standard 19501:2005

Ενοποιημένη μοντελοποίηση τόσο των απαιτήσεων όσο καιτου σχεδιασμούΤελευτία έκδοση 2.5 ﴾2015﴿

46

Page 47: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Μοντελοποίηση συμπεριφοράςΔιαγράμματα περιπτώσεων χρήσης ﴾Use‐case diagrams﴿

Διαγράμματα δραστηριότητας ﴾Activity diagrams﴿Διαγράμματα μηχανών κατάστασης ﴾State machine diagrams﴿Διαγράμματα ακολουθίας ﴾Sequence diagrams﴿Διαγράμματα επικοινωνίας ﴾Communication diagrams﴿

Διαγράμματα χρονισμού ﴾Timing diagrams﴿

47

Page 48: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Μοντελοποίηση δομήςΔιαγράμματα κλάσεων ﴾Class diagrams﴿Διαγράμματα συστατικών ﴾Component diagrams﴿Διαγράμματα πακέτων ﴾Package diagrams﴿

Διαγράμματα "παράταξης / εγκατάστασης" ﴾Deploymentdiagrams﴿Διαγράμματα σύνθετης δομής ﴾Composite structure diagrams﴿

48

Page 49: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Διάγραμμα περίπτωσης χρήσης

By Kishorekumar 62, CC BY‐SA 3.0,https://commons.wikimedia.org/w/index.php?curid=7880320

49

Page 50: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Διάγραμμα κλάσεων

50

Page 51: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Διάγραμμα συστατικών

smartdraw.com51

Page 52: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Διάγραμμα δραστηριότητας1ο Παράδειγμα 2ο Παράδειγμα

52

Page 53: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Διάγραμμα ακολουθίας

53

Page 54: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Θα επανέλθουμε σε επόμενη διάλεξη...

54

Page 55: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

3. Εισαγωγή στα πρότυπα σχεδίασης

55

Page 56: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Πρότυπο σχεδίασης ﴾Design pattern﴿Μια καλή πρακτική για την αντιμετώπιση ενός σχεδιαστικούπροβλήματος στο λογισμικό.

56

Page 57: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

ΠροσοχήΈνας τρόπος δόμησης/διάρθωσης του κώδικα για τηνεπίλυση ενός συγκεκριμένου προβλήματος ﴾όχι ο κώδικαςκαθ' αυτός﴿.

Η υπερβολική χρήση των προτύπων επιφέρει περισσότεραπροβλήματα απ' όσα λύνει ﴾αύξηση πολυπλοκότητας﴿.

57

Page 58: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Λίστα αναγνωσμάτωνErich Gamma, Richard Helm, Ralph Johnson, John Vlissides, "DesignPatterns: Elements of Reusable Object‐Oriented Software", AddisonWesley, 1994, 0‐201‐63361‐2.

58

Page 59: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Κύρια είδη προτύπωνΑρχιτεκτονικά ﴾architectural﴿

MVC, MVVM, κ.άΚατασκευαστικά ﴾creational﴿

Factory, Builder, Object Pool, Singleton, κ.ά

Δομικά ﴾structural﴿Adapter/Wrapper, Bridge, Decorator, Facade, Proxy, κ.ά

Συμπεριφοράς ﴾behavioral﴿Chain of responsibility, Command, Iterator, Mediator,Observer, Strategy, Template method, Visitor, κ.ά

59

Page 60: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμα

60

Page 61: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

VisitorΔιαχωρισμός του αλγορίθμου από τη δομή δεδομένων.

Η "λογική" της επίσκεψης στα στοιχεία της δομής ﴾traversal﴿διαχωρίζεται από τη δομή αυτή καθ' αυτή.

61

Page 62: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Παράδειγμαinterface TreeVisitor {  void visit(TreeNode node);}

interface TreeNode {  TreeNode getLeft();  TreeNode getRight();  int getValue();  void accept(TreeVisitor visitor);}

class SimpleTreeNode implements TreeNode {  ...  public void accept(TreeVisitor vistor) {    visitor.visit(this);  }}

62

Page 63: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Υλοποίσηclass PreOrderTreeVisitor implements TreeVisitor {

  public void visit(TreeNode node) {           int value = node.getValue();    //do something with the node's value    ...           //then traverse from left to right (pre‐order)       TreeNode left = node.getLeft();    if (left != null) left.accept(this);

    TreeNode right = node.getRight();    if (right != null) right.accept(this);  }}

63

Page 64: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Πραγματικό Παράδειγμα ﴾Java 7+FileVisitor﴿java.nio.Files

static Path walkFileTree(  Path start,   FileVisitor<? super Path> visitor) throws IOException

64

Page 65: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

java.nio.file.FileVisitorinterface FileVisitor<T> {

  FileVisitResult postVisitDirectory(T dir, ...)    FileVisitResult preVisitDirectory(T dir, ...)

  FileVisitResult visitFile(T file, ...)

  FileVisitResult visitFileFailed(T file, ...)  }

65

Page 66: 04 Αντικειμενοστραφής ανάλυση και σχεδιασμός · Universal polymorphism Parametric Inclusion Ad‐hoc Overloading Coercion 33. Λίστα αναγνωσμάτων

Θα επανέλθουμε σε επόμενη διάλεξη...

66