Διαφάνεια 1

Download Report

Transcript Διαφάνεια 1

Μηχανική Οδηγούμενη από
Μοντέλα
και Γλώσσες Ειδικού Σκοπού
Δρ Νικόλαος Σπανουδάκης
[email protected]
ΕΕΔΙΠ ΙΙ
Γενικό Τμήμα Πολυτεχνείου Κρήτης
Χανιά, 6 Φλεβάρη 2012
17/7/2015
Ν. Σπανουδάκης
1
Περιεχόμενα παρουσίασης


Εισαγωγή
Οδηγούμενη από Μοντέλα Μηχανική Λογισμικού
Model Driven Engineering (MDE)



Γλώσσες Ειδικού Σκοπού
Domain Specific Languages (DSLs)


Οδηγούμενη από Μοντέλα Αρχιτεκτονική Λογισμικού
Model Driven Architecture (MDA)
Ένα παράδειγμα για τη γλώσσα UML
Πρακτοροστραφής Μηχανική Λογισμικού
Agent-Oriented Software Engineering
Συμπεράσματα
2
17/7/2015
Ν. Σπανουδάκης
Ο ευρύτερος επιστημονικός χώρος


Η Μηχανική Λογισμικού ή Τεχνολογία Λογισμικού
(Software Engineering, IEEE, 1990) εφαρμόζει μια
συστηματική, μεθοδική προσέγγιση στην ανάπτυξη,
λειτουργία και συντήρηση του λογισμικού
Μια διαδικασία ανάπτυξης λογισμικού (software
process) απαντά στα ερωτήματα (Boehn, 1988):



Τι θα κάνουμε μετά;
Για πόσο χρόνο θα συνεχίσουμε να το κάνουμε;
Μια μεθοδολογία ανάπτυξης λογισμικού (software
methodology) είναι ένα προδιαγεγραμμένο και
οργανωμένο σύνολο τεχνικών και κανόνων οι οποίοι
ορίζουν από ποιον και με ποια σειρά θα
χρησιμοποιηθούν οι τεχνικές (Tolvanen, 1998)
17/7/2015
Ν. Σπανουδάκης
3
Μηχανική Οδηγούμενη από Μοντέλα
Model Driven Engineering (MDE)



MDE (Beydeda et al., 2005) είναι η συστηματική χρήση
μοντέλων ως πρωταρχικά εργαλεία καθόλο τον κύκλο
ζωής του έργου λογισμικού στοχεύοντας στην
φορητότητα, διαλειτουργικότητα και επαναχρησιμότητα
του λογισμικού
Βασίζεται σε μετασχηματισμούς μοντέλων και σε
μεταμοντέλα (Jouault and Bézivin, 2006)
Είναι η δεύτερη επανάσταση της προηγούμενης
δεκαετίας μετά την Προσανατολισμένη στις υπηρεσίες
μηχανική λογισμικού (Service-oriented Software
Engineering – SOSE)
17/7/2015
Ν. Σπανουδάκης
4
Αρχιτεκτονική Οδηγούμενη από Μοντέλα
(Model-Driven Architecture, MDA)

Η MDA είναι μια αρχιτεκτονική συστημάτων που
βασίζεται στην φιλοσοφία του MDE και ορίζει τρία
επίπεδα μοντελοποίησης ενός συστήματος λογισμικού:
1.
2.
3.

Υπολογιστικά Ανεξάρτητο Μοντέλο
Computation Independent Model (CIM)
Μοντέλο Ανεξάρτητο Πλατφόρμας
Platform Independent Model (PIM)
Μοντέλο Συγκεκριμένης Πλατφόρμας
Platform Specific Model (PSM)
Ορίστηκε από την Object Management Group (OMG) το
2003
17/7/2015
Ν. Σπανουδάκης
5
Αφού δημιούργησα του διάγραμμα περίπτωσης χρήσης της UML
γιατί να ξεκινήσω πάλι τα άλλα διαγράμματα από την αρχή;
- Με ποια σειρά να πάρω τα διαγράμματα; Πρώτα τα διαγράμματα
τάξεων; Μετά αυτά των δραστηριοτήτων;
- Γιατί πρέπει και όλα αυτά να τα ξεκινήσω από την αρχή; Και αν
ξεχάσω κάτι;
- Πως μπορεί να με βοηθήσει αυτή η «Μοντελο-στραφής»
μηχανική;
-
Για να δούμε πως γίνεται αυτό…
Μετασχηματισμοί Μοντέλων
Στη UML
17/7/2015
Ν. Σπανουδάκης
6
Ορισμός Περίπτωσης Χρήσης

Use Case: Vehicle Reservation


17/7/2015
Precondition:
A customer wants to make a reservation for a vehicle.
Description:
The customer selects pickup and return locations, as well as the pickup and
return dates and times.
The customer selects the vehicle type.
The system presents all matching vehicles. If the customer requests detail
information on a particular vehicle, the system presents detail information to
the customer.
If the customer selects a vehicle, the system gets the customer information
(full name, telephone number, email address).
The system presents information on protection products (such as damage
waiver, personal accident insurance).
If the customer either accepts the reservation or rejects it and the use case
finishes.
Ν. Σπανουδάκης
7
Μετασχηματισμός Κειμένου σε Μοντέλο
(Text to Model Trans. – T2M)



Είσοδος: Περιγραφή Περίπτωσης Χρήσης
Έξοδος: Διάγραμμα Τάξεων
Κανόνες Μετασχηματισμού:



Ουσιαστικά (Λέξεις με Έντονα Γράμματα) -> Τάξεις
Ουσιαστικά προσδιοριστικά άλλων (Λέξεις με Έντονα
Πλάγια Γράμματα) -> Ιδιότητες Τάξεων
Ρήματα (Λέξεις με Πλάγια Γράμματα) ->


17/7/2015
Συσχετίσεις τάξεων εφόσον ενώνουν τέτοιες
Μέθοδοι τάξεων εφόσον αναφέρονται μόνο σε μία
Ν. Σπανουδάκης
8
Συντακτική Ανάλυση του Ορισμού
Περίπτωσης Χρήσης
A customer wants to make a reservation for a vehicle.
The customer selects pickup and return locations, as well as the
pickup and return dates and times.
The customer selects the vehicle type.
The system presents all matching vehicles. If the customer requests
detail information on a particular vehicle, the system presents detail
information to the customer.
If the customer selects a vehicle, the system gets the customer
information (full name, telephone number, email address).
The system presents information on protection products (such as
damage waiver, personal accident insurance)
The customer either accepts the reservation or rejects it and the use
case finishes.
17/7/2015
Ν. Σπανουδάκης
9
Αυτόματη Δημιουργία Διαγράμματος
Τάξεων
Δεν το είχα
σκεφτεί!!! Μπορώ
να κρατώ ιστορικό
με τις επιλογές
του χρήστη
17/7/2015
Ν. Σπανουδάκης
10
Επεξεργασία Διαγράμματος Τάξεων
17/7/2015
Ν. Σπανουδάκης
11
Μετασχηματισμός Μοντέλου σε Μοντέλο
(Model to Model Trans. – M2M)




Για την αποθήκευση αντικειμένων σε σχεσιακή βάση
δεδομένων πρέπει να μετατρέψω το διάγραμμα τάξεων
σε Διάγραμμα Οντοτήτων Σχέσεων (Entity Relationship
– ER Diagram, Wimmer et al., 2007)
Είσοδος: Διάγραμμα Τάξεων
Έξοδος: Διάγραμμα Οντοτήτων Συσχετίσεων
Κανόνες Μετασχηματισμού




17/7/2015
Τάξη (Class) -> Οντότητα (Entity)
Ιδιότητα (Property) -> Χαρακτηριστικό (Attribute)
Συσχέτιση (Association) -> Σχέση (Relationship)
Ιδιότητα Συσχέτισης (Association property) -> Ρόλος (Role)
Ν. Σπανουδάκης
12
Δίάγραμμα Τάξεων σε Διάγραμμα
Οντοτήτων Σχέσεων
Μετασχηματισμός
Επεξεργασία
17/7/2015
Ν. Σπανουδάκης
13
Μετασχηματισμός Μοντέλου σε Κείμενο
(Model to Text Trans. – M2T)




Για την υλοποίηση του συστήματος σε Java
Είσοδος: Διάγραμμα Τάξεων
Έξοδος: Κώδικας Java
Κανόνες Μετασχηματισμού



Κλάση (Class) -> Java class
Ιδιότητα (Property) -> Java class property
Ιδιότητα Συσχέτισης (Association property) -> Java class property



Εάν είναι με πολλαπλότητα > 1 τότε χρησιμοποίησε την κλάση java.util.Vector
Μέθοδος (Method) -> Java method που ρίχνει (throws) ένα
UnsupportedOperationException
Παρομοίως και για C++
17/7/2015
Ν. Σπανουδάκης
14
Υλοποίηση Java
 Αρχείο Customer.java
import java.util.Vector;
import java.util.Vector;
public class Customer {
private Object _fullName;
private Object _telephoneNumber;
private Object _emailAddress;
public Vector<Reservation> _myReservations =
new Vector<Reservation>();
public VehicleType _select;
public class Customer {
private String _fullName;
private int _telephoneNumber;
private String _emailAddress;
public Vector<Reservation> _myReservations =
new Vector<Reservation>();
public VehicleType _select;
public void getCustomerInformation() {
throw new
UnsupportedOperationException();
}
Επεξεργασία
 Αρχείο Customer.java
public String getCustomerInformation() {
return new String("Name: "+_fullName+
"\nTel.: "+_telephoneNumber+
"\nEmail: "+_emailAddress);
}
}
.....
}
17/7/2015
Ν. Σπανουδάκης
15
Υλοποίηση C++
 Αρχείο Customer.h
 Αρχείο Customer.cpp
#include <exception>
#include <vector>
using namespace std;
#ifndef __Customer_h__
#define __Customer_h__
#include "Reservation.h“
class Reservation;
class VehicleType;
class Customer;
class Customer
{
private: string _fullName;
private: string _telephoneNumber;
private: string _emailAddress;
public: std::vector<Reservation*> _myReservations;
public: VehicleType* _select;
public: void getCustomerInformation();
};
#endif
#include <exception>
#include <vector>
using namespace std;
17/7/2015
#include "Customer.h"
#include "Reservation.h"
#include "VehicleType.h"
void Customer::getCustomerInformation() {
throw "Not yet implemented";
}
Ν. Σπανουδάκης
16
Ένα Εργαλείο CASE (Computer Aided Software Engineering)
17/7/2015
Ν. Σπανουδάκης
17
Επίπεδα MDA στο παράδειγμά μας

CIM


PIM



Διάγραμμα Περίπτωσης Χρήσης
Διάγραμμα Τάξεων
Διάγραμμα Οντοτήτων-Σχέσεων
PSM


17/7/2015
Java
C++
Ν. Σπανουδάκης
18
Μετασχηματισμός Κείμενου σε Κείμενο
(Text to Text Trans. – T2T)



Μπορείτε να σκεφτείτε έναν τέτοιο;
Γίνεται όποτε προγραμματίζετε…
Όταν κάνετε compile…


17/7/2015
C source file (*.c) to executable program (machine
language)
Java source file (*.java) to Java interpreted file
(*.class)
Ν. Σπανουδάκης
19
Ποια είναι η διαδικασία που ακολουθήσαμε;


Ορίζεται σύμφωνα με το Μεταμοντέλο
Περιγραφής Διαδικασιών Ανάπτυξης
Λογισμικού SPEM (Software Process
Engineering Metamodel) της OMG
Συμβολισμοί:
17/7/2015
Ν. Σπανουδάκης
20
Μια Διαδικασία Ανάπτυξης Λογισμικού
17/7/2015
Ν. Σπανουδάκης
21
Ωραία όλα αυτά αλλά εγώ θέλω να δημιουργήσω λογισμικό με
παράλληλη εκτέλεση αλγορίθμων. Δεν με βοηθάει και πολύ η
UML…
- Εμένα που με ενδιαφέρουν οι λογικές και οι βάσεις γνώσης να
δεις…
- Εγώ ήθελα να ξεκινήσω ορίζοντας στόχους για το λογισμικό μου
και όχι λειτουργίες…
-
Για να δούμε και τις:
Γλώσσες Ειδικού Σκοπού
(Πεδίου)
17/7/2015
Ν. Σπανουδάκης
22
Γλώσσες Ειδικού Σκοπού (ή πεδίου)
Domain Specific Languages – DSLs


Οι Γλώσσες Ειδικού Πεδίου αποτελούν μια
κατηγορία γλωσσών προγραμματισμού, οι
οποίες έχουν ως στόχο την αντιμετώπιση
εξειδικευμένων προβλημάτων στην διαδικασία
ανάπτυξης λογισμικού αλλά και να
υποστηρίξουν την εξέλιξη των γλωσσών
μοντελοποίησης
Π.χ.


17/7/2015
γλώσσα για παράλληλο προγραμματισμό (Ada)
γλώσσα ερωταπαντήσεων βάσεων δεδομένων SQL
Ν. Σπανουδάκης
23
Η Γραμμή μηδέν και η εικονική γραμμή
μηδέν (Kleppe, 2009)
Run a nuclear power plant
Autonomous Negotiation
Business Process
Business
Concepts
Warehouse
Abstraction
Agent
Design pattern
Aspect
Component
Entity bean
Association
Virtual
zero line
Object/Class
Method
Subroutine
Loop
Hardware
zero line
17/7/2015
XML
Memory location
If statement
Accumulator
Ν. Σπανουδάκης
Database table
ASCII
Instruction
24
Μοντέλα, Μεταμοντέλα
και Μεταμεταμοντέλα

Για να δούμε τη σχέση τους:
17/7/2015
Ν. Σπανουδάκης
25
Μετασχηματισμοί Μοντέλων
Model Transformation

Μετασχηματισμός:



MMM
Είσοδος: το μοντέλο πηγής
Ma που είναι σύμφωνο με το
μεταμοντέλο MMa
Έξοδος: το μοντέλο στόχος
Mb που είναι σύμφωνο με το
μεταμοντέλο MMb
Τέσσερις τύποι:
 Μοντέλο σε μοντέλο
(M2M)
 Μοντέλο σε κείμενο
(M2T)
 Κείμενο σε μοντέλο
(T2M)
 Κείμενο σε κείμενο (T2T)
17/7/2015
MMa
MMt
MMb
Tab
Ma
M2M
Mb
Legend
conformsTo
Ν. Σπανουδάκης
executes
transformation
26
Το μεταμεταμοντέλο ecore

Του Eclipse Modeling
Framework (EMF)
17/7/2015
Ν. Σπανουδάκης
27
Νάτα πάλι τα «κινέζικα»: μεταμοντέλα, μοντέλα, γλώσσες, καλά
πως χρησιμοποιούνται αυτά; Μήπως είναι πολύ θεωρητικά για
μένα;
− Εσείς γνωρίζετε καμία γλώσσα μοντελοποίησης;
− Α ναι, η UML
−
Για να δούμε μια γλώσσα μοντελοποίησης για ένα νέο πεδίο…
Πρακτοροστραφής Μηχανική
Λογισμικού
17/7/2015
Ν. Σπανουδάκης
28
Πρακτοροστραφής Μηχανική Λογισμικού
Agent Oriented Software Eng. (AOSE)

Από τον χώρο της κατανεμημένης τεχνητής
νοημοσύνης και των συστημάτων πολλαπλών
πρακτόρων (ΣΠΠ) – Multi-Agent Systems (MAS)
δημιουργήθηκε η ανάγκη για την ανάπτυξη λογισμικού το
οποίο θα είναι (Wooldridge and Jennings, 1995; Weiss,
2003):






17/7/2015
Αυτόνομο (autonomous)
Κοινωνικό (social)
Αντιδραστικό (reactive)
Ικανό να παίρνει πρωτοβουλίες (pro-active)
Προσαρμοστικό (adaptive)
Διαρκές (persistent)
Ν. Σπανουδάκης
29
AOSE Μεθοδολογίες με μεταμοντέλα







The Gaia Methodology (Wooldridge et al., 2000)
Multi-agent Systems Engineering (Deloach et al., 2001)
PASSI (Burrafato and Cossentino, 2002)
Prometheus (Padgham and Winikoff, 2003)
Ingenias (Pavón and Gómez-Sanz, 2003)
Tropos (Bresciani et al., 2004)
Agent Systems Engineering Methodology – ASEME
(Spanoudakis, 2009)

9/10/2009
Agent Modeling Language – AMOLA
N. Spanoudakis Thesis
30
Γλώσσα AMOLA: Ανάλυση
Απαιτήσεων

Το Μοντέλο ΔραστώνΣτόχων (SAG)
Meetings
Manager
Learn
user
habits

Το μεταμοντέλο του
ορίζεται σύμφωνα με το
μεταμεταμοντέλο Ecore
(EMF)
Faculty
Personnel
Personal
Assistant
Request
new
meeting
17/7/2015
Manage
meetings
Ν. Σπανουδάκης
31
AMOLA: Ανάλυση Συστήματος

To Διάγραμμα Περίπτωσης
Χρήσης (SUC) βασισμένο
στα UML use cases

Και το
μεταμοντέλο του
System
Learn user
habits
Request new
meeting
Personal
Assistant
Meetings
Manager
17/7/2015
Faculty
Personnel
Manage
meetings
Ν. Σπανουδάκης
32
AMOLA: Ανάλυση Συστήματος
(συνέχ.)

Το Μοντέλο Ρόλων
(SRM)

Role: Personal Assistant
Capabilities and Protocols:
learn user habits, request new meeting:
personal assistant, …
Activities:
learn user preference, update user
preferences, …
Liveness:
personal assistant = request new meeting ||
learn user habits
learn user habits = learn user preference.
update user preferences
…
17/7/2015
Ν. Σπανουδάκης
Και το μεταμοντέλο του
33
Όπου η γραμματική για τις
φόρμουλες ορίζεται με EBNF:
→ { formula }
→ leftHandSide = expression
→ string
→ term
| parallelExpression
| orExpression
| sequentialExpression
parallelExpression
→ term || term || … || term
orExpression
→ term | term | … | term
sequentialExpression → term . term . … . term
term
→ basicTerm
| (expression)
| [expression]
| term*
| term+
ω
| term
ω number
| |term |
basicTerm
→ string
number
→ digit | digit number
digit
→1|2|3|…
string
→ letter | letter string
letter
→a|b|c|…
liveness
formula
leftHandSide
expression
17/7/2015
Ν. Σπανουδάκης

Η σημασία των
συμβολισμών
Operator
x.y
x|y
x*
x+
xω
[x]
x || y
|x ω|n
Interpretation
x followed by y
x or y occurs
x occurs 0 or more times
x occurs 1 or more times
x occurs infinitely often
x is optional
x and y interleaved
x occurs infinitely often n
times in parallel
34
AMOLA: Φάση Σχεδίασης
inter και intra-agent control

Τα μοντέλα δια (EAC) και ενδοπρακτορικού ελέγχου (IAC)
βασίζονται στο διάγραμμα
καταστάσεων
17/7/2015
Ν. Σπανουδάκης

Μεταμοντέλο:
35
Οι Μετασχηματισμοί στην ASEME



Οι μετασχηματισμοί είναι πλήρως
αυτοματοποιημένοι
Το μοντέλο μιας προηγούμενης φάσης
μετασχηματίζεται σε ένα αρχικό μοντέλο της
επόμενης φάσης (initial model)
Ο μηχανικός επεξεργάζεται και ραφινάρει το
αρχικό μοντέλο δημιουργώντας την τελική
έκδοση (refined model)
17/7/2015
Ν. Σπανουδάκης
36
Δημιουργία και Επεξεργασία του Μοντέλου
Δραστών-Στόχων (SAG)
Meetings
Manager
17/7/2015
Request
new
meeting
Ν. Σπανουδάκης
Learn
user
habits
Personal
Assistant
37
Το πλάνο του μετασχηματισμού
Ecore.ecore
SAG.ecore
ATL
SUC.ecore
SAG2SUC.atl
SAGModel.xmi
M2M
SUCModelInitial.xmi
XMI: XML Metadata Interchange
17/7/2015
Ν. Σπανουδάκης
38
Μετασχηματισμός M2M
17/7/2015
Ν. Σπανουδάκης
39
Ο μετασχηματισμός SAG 2 SUC
Meetings
Meetings
Manager
Manager
17/7/2015
Request
new
Request
meeting
new
meeting
Ν. Σπανουδάκης
Learn
Learn user
user habits
habits
Personal
Personal
Assistant
Assistant
40
Επεξεργασία του μοντέλου SUC
Learn user
habits
Meetings
Manager
<<include>>
Receive new
request
<<include>>
Send new
request
<<include>>
Send new
results
17/7/2015
Request new
meeting
<<include>>
Receive new
results
Ν. Σπανουδάκης
Personal
Assistant
<<include>>
Learn user
preference
<<include>>
Update user
preferences
41
Ο μετασχηματισμός SUC 2 SRM
Learn user
habits
Meetings
Manager
<<include>>
Receive new
request
<<include>>
Send new
request
<<include>>
Send new
results
17/7/2015
Request new
meeting
<<include>>
Receive new
results
Ν. Σπανουδάκης
Personal
Assistant
<<include>>
Learn user
preference
<<include>>
Update user
preferences
42
Ο μετασχηματισμός SUC 2 SRM
Role:
Capabilities and Protocols:
Learn
userhabits
Learn user
habits
Activities:
Personal<<include>>
Assistant
Request
newmeeting Personal
Request new
Assistant
meeting
Learn user
<<include>>
Learnpreference
user preference
Send new
<<include>>
Send request
new request
<<include>>
Receive new
Receive
new results
results
17/7/2015
Ν. Σπανουδάκης
Update user
Update
user preferences
preferences
43
Εκλέπτυνση SRM
Role: Personal Assistant
Capabilities and Protocols:
manage meetings, learn user habits,
negotiate meeting date, request change meeting, request new meeting
Activities:
get user request, read schedule, show results,
learn user preference, update user preferences,
send change request, receive change results, send new request, receive new results,
receive proposed date, decide response, send results, receive outcome, update schedule
Liveness:
personal assistant = (manage meetings. learn user habits)ω || (negotiate meeting date)ω
manage meetings = get user request. (read schedule | request change meeting | request new
meeting). show results
learn user habits = learn user preference. update user preferences
request new meeting = send new request. receive new results
request change meeting = send change request. receive change results
negotiate meeting date = receive proposed date. (decide response. send results. receive outcome)+.
update schedule
17/7/2015
Ν. Σπανουδάκης
44
Μετασχηματισμός SRM 2 IAC
Liveness:
personal assistant = (manage meetings. learn user habits)ω || (negotiate meeting date)ω
learn user habits = learn user preference. update user preferences
negotiate meeting date
x
manage meetings
x || y
y
xω
x.y
learn user habits
learn user
preference
17/7/2015
update user
preferences
Ν. Σπανουδάκης
Sx
Sx
Sx
Sx
Sy
Sy
45
Μετασχηματισμός M2T - JADE
17/7/2015
Ν. Σπανουδάκης
46
Χρησιμοποιώντας το GMF

Με το SAG.ecore αρχείο μπορώ να ορίσω ένα μετασχηματισμό
Μ2Μ σε γραφική αναπαράσταση χρησιμοποιώντας το Graphical
Modeling Framework (GMF) του Eclipse
17/7/2015
Ν. Σπανουδάκης
47
Σύνοψη - Συμπεράσματα

Σήμερα είδαμε τα







MDE: Model-Driven Engineering
MDA: Model-Driven Architecture, CIM, PIM, PSM
M2M, M2T, T2M, T2T transformations
EMF, Ecore
DSL: Domain Specific Language
AOSE: Agent Oriented Software Engineering
Που βοηθούν στην σταδιακή εκλέπτυνση του
μοντέλου του συστήματος χρησιμοποιώντας σε
κάθε (υπο)φάση το πιο κατάλληλο μοντέλο
17/7/2015
Ν. Σπανουδάκης
48
Είδαμε τις τεχνολογίες

Object Management Group


IBM method: Getting form Use Cases to code


http://www.eclipse.org
ASEME, a DSL for AOSE


http://www.ibm.com/developerworks/rational/library/5383.html
Eclipse Modeling Tools IDE


http://www.omg.com
http://www.amcl.tuc.gr/aseme
Visual Paradigm tool

17/7/2015
http://www.visual-paradigm.com
Ν. Σπανουδάκης
49
Ευχαριστώ για την προσοχή σας
Είμαι διαθέσιμος για περισσότερες πληροφορίες και ερωτήσεις
Δρ Νικόλαος Σπανουδάκης
ΕΕΔΙΠ ΙΙ
Εργαστήριο Εφαρμοσμένων Μαθηματικών και Ηλεκτρονικών Υπολογιστών
Γενικό Τμήμα
Πολυτεχνείο Κρήτης
Δ.νση: Πολυτεχνειούπολη, Κουνουπιδιανά, 73100, Χανιά
Τηλ.: +30 28210 37744
Φαξ: +30 28210 37842
Ηλ. ταχ/μείο: [email protected]
Ιστόσελίδα: http://users.isc.tuc.gr/~nispanoudakis
17/7/2015
Ν. Σπανουδάκης
50