Διάγραμμα UML

Η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) είναι μια γενικής χρήσης, αναπτυξιακή γλώσσα μοντελοποίησης στον τομέα της μηχανικής λογισμικού, η οποία προορίζεται να παρέχει έναν τυποποιημένο τρόπο οπτικοποίησης του σχεδιασμού ενός συστήματος. [1]

Η UML είχε αρχικά ως κίνητρο την επιθυμία να τυποποιηθούν τα διαφορετικά συστήματα σημειώσεων και οι προσεγγίσεις για τη σχεδίαση λογισμικού που αναπτύχθηκαν από τους Grady Booch, Ivar Jacobson και James Rumbaugh στην Rational Software το 1994-95, με περαιτέρω ανάπτυξη υπό την καθοδήγησή τους μέχρι το 1996. [1]

Το 1997 η UML υιοθετήθηκε ως πρότυπο από την Ομάδα Διαχείρισης Αντικειμένων (OMG) και έκτοτε διαχειρίζεται από τον οργανισμό αυτό. Το 2005 η Ενοποιημένη Γλώσσα Μοντελοποίησης δημοσιεύθηκε επίσης από τον Διεθνή Οργανισμό Τυποποίησης (ISO) ως εγκεκριμένο πρότυπο ISO.[2] Έκτοτε αναθεωρείται περιοδικά ώστε να καλύπτει την τελευταία αναθεώρηση της UML. [3]

Αν και είναι γνωστή και χρησιμοποιείται ευρέως στην εκπαίδευση και σε ακαδημαϊκές εργασίες, από το 2013 η UML χρησιμοποιείται ελάχιστα στη βιομηχανία και η περισσότερη χρήση είναι άτυπη και ad hoc. [4]

Περιεχόμενα

 [О±ПЂПЊОєПЃП…П€О·] 

  • 1 Ιστορία
    • 1.1 Πριν από την UML 1.x
    • 1.2 UML 1.x
    • 1.3 UML 2.x
  • 2 Σχεδιασμός
    • 2.1 Μέθοδοι ανάπτυξης λογισμικού
    • 2.2 Μοντελοποίηση
  • 3 Διαγράμματα
    • 3.1 Διαγράμματα δομής
    • 3.2 Διαγράμματα συμπεριφοράς
      • 3.2.1 Διαγράμματα αλληλεπίδρασης
  • 4 Μεταμοντελοποίηση
  • 5 Υιοθέτηση
  • 6 Κριτικές
    • 6.1 Κριτική της UML 1.x

Ιστορία[Επεξεργασία πηγής | επεξεργασία]

Ιστορία των αντικειμενοστραφών μεθόδων και συμβολισμών

Η UML εξελίσσεται από το δεύτερο μισό της δεκαετίας του 1990 και έχει τις ρίζες της στις αντικειμενοστραφείς μεθόδους που αναπτύχθηκαν στα τέλη της δεκαετίας του 1980 και στις αρχές της δεκαετίας του 1990. Το χρονοδιάγραμμα (βλ. εικόνα) δείχνει τα κυριότερα σημεία της ιστορίας των αντικειμενοστραφών μεθόδων μοντελοποίησης και σημειογραφίας.

Αρχικά βασίζεται στους συμβολισμούς της μεθόδου Booch, της τεχνικής μοντελοποίησης αντικειμένων (OMT) και της αντικειμενοστραφούς μηχανικής λογισμικού (OOSE), τους οποίους έχει ενσωματώσει σε μια ενιαία γλώσσα. [5]

Πριν την UML 1.x[επεξεργασία πηγή | επεξεργασία]

Η Rational Software Corporation προσέλαβε τον James Rumbaugh από την General Electric το 1994 και μετά από αυτό η εταιρεία έγινε η πηγή για δύο από τις πιο δημοφιλείς προσεγγίσεις αντικειμενοστραφούς μοντελοποίησης της εποχής:[6] Η τεχνική μοντελοποίησης αντικειμένων (OMT) του Rumbaugh και η μέθοδος του Grady Booch. Σύντομα τους βοήθησε στις προσπάθειές τους ο Ivar Jacobson, ο δημιουργός της μεθόδου αντικειμενοστραφούς μηχανικής λογισμικού (OOSE), ο οποίος εντάχθηκε στην Rational το 1995. [1]

Υπό την τεχνική ηγεσία αυτών των τριών (Rumbaugh, Jacobson και Booch), οργανώθηκε το 1996 μια κοινοπραξία με την ονομασία UML Partners για να ολοκληρώσει την προδιαγραφή της Ενοποιημένης Γλώσσας Μοντελοποίησης (UML) και να την προτείνει στην Ομάδα Διαχείρισης Αντικειμένων (OMG) για τυποποίηση. Η σύμπραξη περιλάμβανε επίσης πρόσθετα ενδιαφερόμενα μέρη (για παράδειγμα HP, DEC, IBM και Microsoft). Το προσχέδιο UML 1.0 των UML Partners προτάθηκε από την κοινοπραξία στην OMG τον Ιανουάριο του 1997. Κατά τη διάρκεια του ίδιου μήνα οι UML Partners συγκρότησαν μια ομάδα, σχεδιασμένη να καθορίσει την ακριβή σημασία των γλωσσικών δομών, υπό την προεδρία του Cris Kobryn και τη διοίκηση του Ed Eykholt, για να οριστικοποιήσει την προδιαγραφή και να την ενσωματώσει σε άλλες προσπάθειες τυποποίησης. Το αποτέλεσμα αυτής της εργασίας, η UML 1.1, υποβλήθηκε στην OMG τον Αύγουστο του 1997 και εγκρίθηκε από την OMG τον Νοέμβριο του 1997. [1][7]

UML 1.x[επεξεργασία πηγή | επεξεργασία]

Μετά την πρώτη έκδοση δημιουργήθηκε[1] μια ομάδα εργασίας για τη βελτίωση της γλώσσας, η οποία κυκλοφόρησε διάφορες μικρές αναθεωρήσεις, 1.3, 1.4 και 1.5. [8]

Τα πρότυπα που παρήγαγε (καθώς και το αρχικό πρότυπο) έχουν επισημανθεί ως διφορούμενα και ασυνεπή. [9][10]

UML 2.x[επεξεργασία πηγή | επεξεργασία]

Η μεγάλη αναθεώρηση της UML 2.0 αντικατέστησε την έκδοση 1.5 το 2005, η οποία αναπτύχθηκε με μια διευρυμένη κοινοπραξία για την περαιτέρω βελτίωση της γλώσσας, ώστε να αντικατοπτρίζει τη νέα εμπειρία σχετικά με τη χρήση των χαρακτηριστικών της. [11]

Παρόλο που η UML 2.1 δεν κυκλοφόρησε ποτέ ως επίσημη προδιαγραφή, οι εκδόσεις 2.1.1 και 2.1.2 εμφανίστηκαν το 2007, ενώ τον Φεβρουάριο του 2009 ακολούθησε η UML 2.2. Η UML 2.3 κυκλοφόρησε επίσημα τον Μάιο του 2010.[12] Η UML 2.4.1 κυκλοφόρησε επίσημα τον Αύγουστο του 2011.[12] Η UML 2.5 κυκλοφόρησε τον Οκτώβριο του 2012 ως έκδοση "υπό επεξεργασία" και κυκλοφόρησε επίσημα τον Ιούνιο του 2015. [12]

Η προδιαγραφή UML 2.x αποτελείται από τέσσερα μέρη:

  1. Η υπερδομή που ορίζει τη σημειογραφία και τη σημασιολογία για τα διαγράμματα και τα στοιχεία του μοντέλου τους
  2. Η υποδομή που ορίζει το βασικό μεταμοντέλο στο οποίο βασίζεται η υπερδομή
  3. Η γλώσσα περιορισμών αντικειμένων (OCL) για τον ορισμό κανόνων για τα στοιχεία του μοντέλου
  4. Η ανταλλαγή διαγραμμάτων UML που ορίζει τον τρόπο ανταλλαγής των διατάξεων διαγραμμάτων UML 2

Ακολουθούν οι τρέχουσες εκδόσεις αυτών των προτύπων: UML Superstructure έκδοση 2.4.1, UML Infrastructure έκδοση 2.4.1, OCL έκδοση 2.3.1 και UML Diagram Interchange έκδοση 1.0.[13] Συνεχίζει να ενημερώνεται και να βελτιώνεται από την ομάδα εργασίας αναθεώρησης, η οποία επιλύει τυχόν προβλήματα της γλώσσας. [14]

Σχεδιασμός[Επεξεργασία πηγής | επεξεργασία]

Η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) προσφέρει έναν τρόπο απεικόνισης των αρχιτεκτονικών σχεδίων ενός συστήματος σε ένα διάγραμμα (βλ. εικόνα), που περιλαμβάνει στοιχεία όπως: [5]

  • Τυχόν δραστηριότητες (θέσεις εργασίας)
  • Μεμονωμένα στοιχεία του συστήματος
    • Και πώς μπορούν να αλληλεπιδρούν με άλλα στοιχεία λογισμικού.
  • Πώς θα λειτουργεί το σύστημα
  • Πώς οι οντότητες αλληλεπιδρούν με άλλες (συστατικά και διεπαφές)
  • Εξωτερική διεπαφή χρήστη

Αν και αρχικά προοριζόταν αποκλειστικά για την τεκμηρίωση αντικειμενοστραφούς σχεδιασμού, η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) έχει επεκταθεί ώστε να καλύπτει ένα ευρύτερο σύνολο τεκμηρίωσης σχεδιασμού (όπως αναφέρεται παραπάνω) [15]και έχει κριθεί χρήσιμη σε πολλά πλαίσια. [16]

Μέθοδοι ανάπτυξης λογισμικού[επεξεργασία πηγή | επεξεργασία]

Η UML δεν είναι από μόνη της μέθοδος ανάπτυξης-[17] ωστόσο, σχεδιάστηκε για να είναι συμβατή με τις κορυφαίες αντικειμενοστραφείς μεθόδους ανάπτυξης λογισμικού της εποχής της (για παράδειγμαOMT, μέθοδος Booch, Objectory) και ιδιαίτερα με την RUP, για την οποία προοριζόταν αρχικά να χρησιμοποιηθεί όταν ξεκίνησαν οι εργασίες στην Rational Software Inc.

Μοντελοποίηση[επεξεργασία πηγή | επεξεργασία]

Είναι σημαντικό να γίνει διάκριση μεταξύ του μοντέλου UML και του συνόλου των διαγραμμάτων ενός συστήματος. Ένα διάγραμμα είναι μια μερική γραφική αναπαράσταση του μοντέλου ενός συστήματος. Το σύνολο των διαγραμμάτων δεν χρειάζεται να καλύπτει πλήρως το μοντέλο και η διαγραφή ενός διαγράμματος δεν αλλάζει το μοντέλο. Το μοντέλο μπορεί επίσης να περιέχει τεκμηρίωση που οδηγεί τα στοιχεία του μοντέλου και τα διαγράμματα (όπως γραπτές περιπτώσεις χρήσης).

Τα διαγράμματα UML αντιπροσωπεύουν δύο διαφορετικές απόψεις ενός μοντέλου[18] συστήματος:

  • Στατική (ή δομική) άποψη: δίνει έμφαση στη στατική δομή του συστήματος χρησιμοποιώντας αντικείμενα, χαρακτηριστικά, λειτουργίες και σχέσεις. Η δομική άποψη περιλαμβάνει διαγράμματα κλάσεωνκαι διαγράμματα σύνθετης δομής.
  • Δυναμική (ή συμπεριφορική) προβολή: δίνει έμφαση στη δυναμική συμπεριφορά του συστήματος, δείχνοντας τις συνεργασίες μεταξύ των αντικειμένων και τις αλλαγές στις εσωτερικές καταστάσεις των αντικειμένων. Η άποψη αυτή περιλαμβάνει διαγράμματα ακολουθίας, διαγράμματα δραστηριοτήτων και διαγράμματα μηχανών καταστάσεων.

Τα μοντέλα UML μπορούν να ανταλλάσσονται μεταξύ εργαλείων UML με τη χρήση του μορφότυπου ανταλλαγής μεταδεδομένων XML (XMI).

Διαγράμματα[επεξεργασία πηγή | επεξεργασία]

Διαγράμματα UML

Δομικά διαγράμματα UML

  • Διάγραμμα κλάσεων
  • Διάγραμμα στοιχείων
  • Διάγραμμα σύνθετης δομής
  • Διάγραμμα ανάπτυξης
  • Διάγραμμα αντικειμένων
  • Διάγραμμα συσκευασίας
  • Διάγραμμα προφίλ

Διαγράμματα συμπεριφοράς UML

  • Διάγραμμα δραστηριοτήτων
  • Διάγραμμα επικοινωνίας
  • Διάγραμμα επισκόπησης αλληλεπίδρασης
  • Διάγραμμα ακολουθίας
  • Διάγραμμα κατάστασης
  • Διάγραμμα χρονισμού
  • Διάγραμμα περιπτώσεων χρήσης

Η UML 2 διαθέτει πολλούς τύπους διαγραμμάτων που χωρίζονται σε δύο κατηγορίες.[5] Ορισμένοι τύποι αναπαριστούν δομικές πληροφορίες και οι υπόλοιποι αναπαριστούν γενικούς τύπους συμπεριφοράς, συμπεριλαμβανομένων μερικών που αναπαριστούν διάφορες πτυχές των αλληλεπιδράσεων. Αυτά τα διαγράμματα μπορούν να κατηγοριοποιηθούν ιεραρχικά, όπως φαίνεται στο ακόλουθο διάγραμμα[5] κλάσεων:

Όλα αυτά τα διαγράμματα μπορεί να περιέχουν σχόλια ή σημειώσεις που εξηγούν τη χρήση, τους περιορισμούς ή την πρόθεση.

Διαγράμματα δομής[επεξεργασία πηγή | επεξεργασία]

Τα διαγράμματα δομής δίνουν έμφαση στα πράγματα που πρέπει να υπάρχουν στο σύστημα που μοντελοποιείται. Δεδομένου ότι τα διαγράμματα δομής αναπαριστούν τη δομή, χρησιμοποιούνται εκτενώς στην τεκμηρίωση της αρχιτεκτονικής λογισμικού των συστημάτων λογισμικού. Για παράδειγμα, το διάγραμμα συνιστωσών το οποίο περιγράφει τον τρόπο με τον οποίο ένα σύστημα λογισμικού χωρίζεται σε συνιστώσες και δείχνει τις εξαρτήσεις μεταξύ αυτών των συνιστωσών.

  • Διάγραμμα στοιχείων
  • Διάγραμμα κλάσεων

Διαγράμματα συμπεριφοράς[επεξεργασία πηγή | επεξεργασία]

Τα διαγράμματα συμπεριφοράς δίνουν έμφαση στο τι πρέπει να συμβαίνει στο σύστημα που μοντελοποιείται. Δεδομένου ότι τα διαγράμματα συμπεριφοράς απεικονίζουν τη συμπεριφορά ενός συστήματος, χρησιμοποιούνται εκτενώς για την περιγραφή της λειτουργικότητας των συστημάτων λογισμικού. Για παράδειγμα, το διάγραμμα δραστηριοτήτων περιγράφει τις επιχειρηματικές και λειτουργικές βήμα προς βήμα δραστηριότητες των στοιχείων ενός συστήματος.

  • Διάγραμμα δραστηριοτήτων
  • Διάγραμμα περιπτώσεων χρήσης

Διαγράμματα αλληλεπίδρασης[επεξεργασία πηγή | επεξεργασία]

Τα διαγράμματα αλληλεπίδρασης, ένα υποσύνολο των διαγραμμάτων συμπεριφοράς, δίνουν έμφαση στη ροή του ελέγχου και των δεδομένων μεταξύ των αντικειμένων του συστήματος που μοντελοποιείται. Για παράδειγμα, το διάγραμμα ακολουθίαςτο οποίο δείχνει πώς τα αντικείμενα επικοινωνούν μεταξύ τους με όρους ακολουθίας μηνυμάτων.

  • Διάγραμμα ακολουθίας
  • Διάγραμμα επικοινωνίας

Μεταμοντελοποίηση[επεξεργασία πηγή | επεξεργασία]

Κύριο άρθρο: Meta-Object Facility

Απεικόνιση της διευκόλυνσης Meta-Object

Η Ομάδα Διαχείρισης Αντικειμένων (OMG) έχει αναπτύξει μια αρχιτεκτονική μεταμοντελοποίησης για τον ορισμό της Ενοποιημένης Γλώσσας Μοντελοποίησης (UML), η οποία ονομάζεται Μετα-Αντικειμενική Διευκόλυνση (MOF).[19] Το Meta-Object Facility έχει σχεδιαστεί ως αρχιτεκτονική τεσσάρων επιπέδων, όπως φαίνεται στην εικόνα δεξιά. Παρέχει ένα μετα-μετα-μοντέλο στο ανώτερο επίπεδο, το οποίο ονομάζεται επίπεδο M3. Αυτό το M3-μοντέλο είναι η γλώσσα που χρησιμοποιείται από το Meta-Object Facility για τη δημιουργία μεταμοντέλων, που ονομάζονται M2-μοντέλα.

Το πιο χαρακτηριστικό παράδειγμα ενός μοντέλου μετα-αντικειμενικής διευκόλυνσης επιπέδου 2 είναι το μεταμοντέλο της UML, το μοντέλο που περιγράφει την ίδια την UML. Αυτά τα μοντέλα Μ2 περιγράφουν στοιχεία του επιπέδου Μ1, και συνεπώς μοντέλα Μ1. Αυτά θα ήταν, για παράδειγμα, μοντέλα γραμμένα σε UML. Το τελευταίο στρώμα είναι το στρώμα Μ0 ή στρώμα δεδομένων. Χρησιμοποιείται για την περιγραφή των περιπτώσεων εκτέλεσης του συστήματος. [20]

Το μετα-μοντέλο μπορεί να επεκταθεί με τη χρήση ενός μηχανισμού που ονομάζεται στερεοτυποποίηση. Αυτό έχει επικριθεί ως ανεπαρκές/αδύνατο από τους Brian Henderson-Sellers και Cesar Gonzalez-Perez στο "Uses and Abuses of the Stereotype Mechanism in UML 1.x and 2.0". [21]

Υιοθεσία[Επεξεργασία πηγής | επεξεργασία]

Η UML έχει κριθεί χρήσιμη σε πολλά πλαίσια σχεδιασμού,[16] σε τέτοιο βαθμό που έχει γίνει σχεδόν πανταχού παρούσα στην κοινότητα της πληροφορικής. [22]

Έχει αντιμετωπιστεί, κατά καιρούς, ως μια σχεδιαστική ασημένια σφαίρα, γεγονός που έχει οδηγήσει σε προβλήματα στη χρήση του. Η κακή χρήση του περιλαμβάνει την υπερβολική χρήση του (σχεδιασμός κάθε μικρού μέρους του κώδικα του συστήματος με αυτό, κάτι που είναι περιττό) και την παραδοχή ότι ο καθένας μπορεί να σχεδιάσει οτιδήποτε με αυτό (ακόμη και αυτοί που δεν έχουν προγραμματίσει). [23]

Θεωρείται ότι είναι μια μεγάλη γλώσσα, με πολλές δομές. Ορισμένοι (συμπεριλαμβανομένου του Jacobson) θεωρούν ότι είναι πάρα πολλές και ότι αυτό εμποδίζει την εκμάθηση (και συνεπώς τη χρήση) της[24].

Κριτικές[Επεξεργασία πηγής | επεξεργασία]

Η ενότητα "Κριτική ή αντιπαράθεση" αυτού του άρθρου μπορεί να θέσει σε κίνδυνο την ουδέτερη άποψη του άρθρου για το θέμα. Παρακαλούμε να ενσωματώσετε το περιεχόμενο της ενότητας στο άρθρο ως σύνολο ή να ξαναγράψετε το υλικό. (Δεκέμβριος 2010)

Οι συνήθεις επικρίσεις της UML από τη βιομηχανία περιλαμβάνουν[4]:

  • δεν είναι χρήσιμο: "[δεν] τους προσφέρει πλεονεκτήματα σε σχέση με τις τρέχουσες, εξελιγμένες πρακτικές και αναπαραστάσεις τους"
  • πολύ περίπλοκη, ιδίως για την επικοινωνία με τους πελάτες: "Ο καλύτερος λόγος για να μην χρησιμοποιείται η UML είναι ότι δεν είναι "αναγνώσιμη" για όλους τους ενδιαφερόμενους. Πόσο αξίζει η UML αν ένας επιχειρηματικός χρήστης (ο πελάτης) δεν μπορεί να καταλάβει το αποτέλεσμα της προσπάθειας μοντελοποίησης που καταβάλλετε;"
  • ανάγκη συγχρονισμού της UML και του κώδικα, όπως και με την τεκμηρίωση γενικά

Κριτική της UML 1.x[επεξεργασία πηγή | επεξεργασία]

Συμβολισμός καρδινότητας

Όπως και με τα διαγράμματα Chen, Bachman και ISO ER των βάσεων δεδομένων, τα μοντέλα κλάσεων ορίζονται να χρησιμοποιούν "look-across" καρδαιότητες, παρόλο που αρκετοί συγγραφείς (Merise, [25]Elmasri & Navathe[26] μεταξύ άλλων[27]) προτιμούν την ίδια πλευρά ή "look-here" για τους ρόλους και τόσο τις ελάχιστες όσο και τις μέγιστες καρδαιότητες. Πρόσφατοι ερευνητές (Feinerer, [28]Dullea κ.ά. μεταξύ[29] άλλων) έχουν δείξει ότι η τεχνική "look-across" που χρησιμοποιείται από τα διαγράμματα UML και ER είναι λιγότερο αποτελεσματική και λιγότερο συνεκτική όταν εφαρμόζεται σε n-αριαίες σχέσεις τάξης >2.

Ο Feinerer λέει: "Προβλήματα προκύπτουν αν λειτουργούμε με τη σημασιολογία look-across, όπως χρησιμοποιείται για τις συσχετίσεις της UML. Ο Hartmann[30] διερευνά αυτή την κατάσταση και δείχνει πώς και γιατί αποτυγχάνουν διάφοροι μετασχηματισμοί". (Αν και η "αναγωγή" που αναφέρεται είναι ψευδής, καθώς τα δύο διαγράμματα 3.4 και 3.5 είναι στην πραγματικότητα τα ίδια) και επίσης "Όπως θα δούμε στις επόμενες σελίδες, η ερμηνεία look-across εισάγει αρκετές δυσκολίες που εμποδίζουν την επέκταση απλών μηχανισμών από δυαδικές σε n-αριαίες συσχετίσεις".

Ερωτήσεις και απαντήσεις

Ερ: Τι είναι η ενοποιημένη γλώσσα μοντελοποίησης (UML);


A: Η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) είναι μια γλώσσα μοντελοποίησης που χρησιμοποιείται στη μηχανική λογισμικού για να παρέχει έναν τυποποιημένο τρόπο για να δείξει πώς μοιάζει ο σχεδιασμός ενός συστήματος.

Ε: Ποιος ήταν ο αρχικός σκοπός της UML;


Α: Ο αρχικός σκοπός της UML ήταν η τυποποίηση των διαφορετικών συστημάτων συμβολισμού και προσεγγίσεων στη σχεδίαση λογισμικού.

Ε: Ποιος ανέπτυξε την UML;


Α: Η UML αναπτύχθηκε από τους Grady Booch, Ivar Jacobson και James Rumbaugh στην Rational Software το 1994-1995, με περαιτέρω ανάπτυξη υπό την καθοδήγησή τους μέχρι το 1996.

Ε: Πότε υιοθετήθηκε η UML ως πρότυπο;


Α: Η UML υιοθετήθηκε ως πρότυπο από την Ομάδα Διαχείρισης Αντικειμένων (OMG) το 1997.

Ε: Ποιος διαχειρίζεται την UML;


Α: Η διαχείριση της UML γίνεται από την Ομάδα Διαχείρισης Αντικειμένων (Object Management Group) από την υιοθέτησή της ως πρότυπο το 1997.

Ε: Αναγνωρίστηκε η UML ως διεθνές πρότυπο;


Α: Ναι, η UML αναγνωρίστηκε ως διεθνές πρότυπο από τον Διεθνή Οργανισμό Τυποποίησης (ISO) το 2005.

Ε: Ποιος είναι ο σκοπός της UML στη μηχανική λογισμικού;


Α: Ο σκοπός της UML στη μηχανική λογισμικού είναι να παράσχει έναν τυποποιημένο τρόπο για να δείξει πώς μοιάζει ο σχεδιασμός ενός συστήματος, ώστε να μπορεί να γίνει εύκολα κατανοητός και να επικοινωνείται μεταξύ των προγραμματιστών και των ενδιαφερομένων μερών.

AlegsaOnline.com - 2020 / 2023 - License CC3