Ευφυείς Τεχνολογίες ----Πράκτορες Ενότητα 6: Προγραμματισμός Βασισμένος στους πράκτορες Το Περιβάλλον Ανάπτυξης Πολλαπλών Πρακτόρων JADE Δημοσθένης Σταμάτης demos@it.teithe.gr www.it.teithe.gr/~demos Μαθησιακοί Στόχοι της ενότητας 6 Η κατανόηση της εξέλιξης των μεθοδολογιών προγραμματισμού και η συσχέτισή τους με τον προγραμματισμό που βασίζεται στους πράκτορες Η κατανόηση των ομοιοτήτων και διαφορών ανάμεσα στον αντικειμενοστρεφή προγραμματισμό και στον προγραμματισμό που βασίζεται στους πράκτορες Η γνωριμία με το περιβάλλον JADE που χρησιμοποιείται για την ανάπτυξη προγραμματιστικών συστημάτων πολλαπλών πρακτόρων 2 1
Η ύλη της ενότητας 6 Η έννοια της αφαίρεσης: Από τη γλώσσα Assembly στον αντικειμενοστρεφή προγραμματισμό. Η γλώσσα αντικειμενοστρεφούς Προγραμματισμού Java: γρήγορη επανάληψη Οι διαφορές των αντικειμένων από τους πράκτορες Το περιβάλλον JADE: Βασικά Χαρακτηριστικά και Αρχιτεκτονική Εισαγωγή στον προγραμματισμό πολλαπλών πρακτόρων με JADE 3 Από τη Γλώσσα Μηχανής στον Προγραμματισμό που βασίζεται σε πράκτορες Γλώσσα Μηχανής Γλώσσα Assembly Γλώσσες Προγραμματισμού ανεξάρτητες μηχανής Υποπρογράμματα sub-routines procedures functions Αφηρημένοι Τύποι Δεδομένων Αντικείμενα Πράκτορες 4 2
Η Έννοια της Αφαίρεσης Η εξέλιξη των προγραμματιστικών εργαλείων χαρακτηρίστηκε και χαρακτηρίζεται από την έννοια της αφαίρεσης. ΑΦΑΙΡΕΣΗ (Abstraction): Μία απλοποιημένη περιγραφή ενός συστήματος, στην οποία δίνεται έμφαση στις βασικές του ιδιότητες, ενώ αγνοούνται οι λεπτομέρειες. Συντακτική Αφαίρεση (Syntax Abstraction) Αφαίρεση Ελέγχου (Control Abstraction) Διαδικαστική Αφαίρεση (Procedural Abstraction) Αφαίρεση Τύπων Δεδομένων (Data type Abstraction) ->... Αντικείμενα... Πράκτορες 5 Αντικειμενοστρεφής Προγραμματισμός Αφηρημένος Τύπος Δεδομένων (Abstract Data Type) Αντικείμενο (Object) Κλάση ή Τάξη (Class) Μέθοδοι (Methods) Μηνύματα (Messages) Ενκαψούλωση ή ενθυλάκωση (Encapsulation) Απόκρυψη Πληροφορίας (Information Hiding) Επαναχρησιμοποίηση (Reusability) Κληρονομικότητα (Inheritance) Πολυμορφισμός (Polymorphism) Ταυτοχρονισμός (Concurrency) 6 3
Βασικά χαρακτηριστικά της Java Αντικειμενοστρεφής Γλώσσα Εκτενής χρήση κλάσεων αντικειμένων Εκτός από βασικές λειτουργίες και βασικούς τύπους Ανεξάρτητη Πλατφόρμας/Μηχανής Το πρόγραμμα της Java μεταγλωττίζεται σε ειδικό κώδικα, ο οποίος διερμηνεύεται ανεξάρτητα από το Λειτουργικό Σύστημα Απλή (?) Πλούσια χαρακτηριστικά, χωρίς πολύπλοκες συντακτικές δομές Χρήση API (Applications Programming Interface) 7 Βασικά χαρακτηριστικά της Java Ασφαλής (?) Ο κώδικας Java τρέχει σε περιβάλλον που τον αποτρέπει να μεταβάλει ή να διαγράψει αρχεία και να επέμβει στη μνήμη που χρησιμοποιείται σε επίπεδο Λειτουργικού Συστήματος Με υψηλή απόδοση (?) Οι Just-in-Time μεταγλωττιστές παράγουν κώδικα αντίστοιχης ταχύτητας με αυτόν της C++ Υποστηρίζει πολυεπεξεργασία Οι λειτουργίες ενός προγράμματος μπορούν να εκτελούνται ταυτόχρονα 8 4
Η Τεχνολογία Java 9 Η Java Ανεξάρτητη Πλατφόρμας Ο κώδικας της Java εξαρτάται μόνον από την Εικονική Μηχανή (Java Virtual Machine - JVM) η οποία εγκαθίσταται σε κάθε μηχανή. Η μεταγλώττιση παράγει δυαδικό κώδικα (bytecode), ο οποίος διερμηνεύεται από τον JVM Interpreter O κώδικας της καθίσταται μεταφέρσιμος (Write Once - Run Anywhere) 10 5
Μεταγλώττιση προγράμματος Java 11 Μεταγλώττιση Java Applet 12 6
Java Βασικές Έννοιες Βασικοί τύποι (δεν είναι αντικείμενα): boolean, char, byte, short, int, long, float, double Δηλώσεις μεταβλητών: float Var1; int J = 2; double var2 = 1.2, var3; boolean ok, Done = false; Η εντολή καταχώρισης/αντικατάστασης λειτουργεί από δεξιά προς αριστερά (right associative) int a, b, c; a = 1; b = 2; c = 5; a = b = c; 13 Java Βασικές Έννοιες Δομές ελέγχου ροής προγράμματος Παράθεσης: Επιλογής: Επανάληψης: Escapes: {εντολή1; εντολή2;...; εντολήn;} if, if else, switch for, while, do while break, continue, return Υποπρογράμματα Οι μέθοδοι (methods) που ορίζονται στο πλαίσιο μιας κλάσης 14 7
Java Επιπλέον Έννοιες Χρήση Βιβλιοθηκών Ορισμός Κλάσεων Δημιουργία αντικειμένων Πακέτα Packages Κληρονομικότητα επέκταση κλάσεων Απόκρυψη Πληροφορίας 15 Java: Κλάσεις - Πακέτα (Packages) O Κώδικας της Java έχει ιεραρχική δομή Κάθε κλάση γράφεται σε ένα αρχείο που έχει το ίδιο όνομα με αυτή Ένα σύνολο κλάσεων (=αρχείων) μπορεί να αποθηκευτεί σε ένα πακέτο (=directory) π.χ. java.io, java.math Η μεταβλητή CLASSPATH πρέπει να περιλαμβάνει τα ονόματα των αρχικών πακέτων (root directories). Το πλήρες όνομα ενός αντικείμενου περιλαμβάνει το πλήρες όνομα του πακέτου που το περιέχει 16 8
Java: Κλάσεις - Πακέτα (Packages) 17 Java: Κλάσεις Ή απλούστερη! Κλάση Hello.java Η μέθοδος main (κατ ελάχιστον!) class Hello { public static void main(string[] args) { System.out.println( Hello World!!! ); } } C:\javac Hello.java /*Η μεταγλώττιση δημιουργεί το αρχείο Hello.class*/ C:\java Hello /*Εκτέλεση από τον JVM Interpreter */ 18 9
Java: Κλάσεις - Αντικείμενα import java.awt.*; import java.util.*; public class DoSomething { // Δεδομένα /ιδιότητες (data members) της κλάσης private int X; protected int Y;... // Μέθοδοι της κλάσης private void method1(...) {... }; Κλάσεις πακέτων βιβλιοθήκης Απόκρυψη δεδομένων (τοπικά) Απόκρυψη μεθόδου public String method2(...) {... }; } Δημόσια μέθοδος (προσβάσιμη από άλλες κλάσεις) 19 Java: Κλάσεις Επεκτάσεις Κλάσεων class Person { String name; int height; // σε εκατοστά int weight; public void printinfo(){ System.out.println(name+" with height="+height+", weight="+weight); } class Student extends Person { String name; String aei; /* μέθοδοι που επεκτείνουν την κλάση Person */ } 20 10
Java: Δημιουργία αντικειμένων H κλάση παίζει το ρόλο της γεννήτριας αντικειμένων Κάθε αντικείμενο που γεννιέται αποκτά όλες τις ιδιότητες (data members) της κλάσης Person john; john = new Person ( ); john.name = "John Smith"; john.age = 37; john.printinfo(); Person mary = new Person ( ); mary.name = "Mary Brown"; mary.age = 33; mary.printinfo(); 21 Java: Παράδειγμα: Κλάση Υπάλληλος 22 11
Java: Παράδειγμα: Κλάση Υπάλληλος 23 Java: Παράδειγμα: 2 Υπάλληλοι 24 12
Java: Διασυνδέσεις - Interfaces public interface Queue { public int size( ); // επιστρέφει το μέγεθος (αριθμός στοιχείων) της ουράς public boolean isempty( ); // αληθεύει εάν η ουρά είναι κενή public Object front( ) throws QueueEmptyException; // επιστρέφει το στοιχείο που βρίσκεται στην αρχή της ουράς public void enqueue(object item); // εισάγει ένα νέο στοιχείο στο πίσω μέρος της ουράς public Object dequeue( ) throws QueueEmptyException; // εξάγει και επιστρέφει το στοιχείο που βρίσκεται // στo εμπρός μέρος της ουράς } 25 Java: Εξαιρέσεις - Exceptions public class QueueEmptyException extends RuntimeException { public QueuekEmptyException(String err) { super(err); } } public class QueueFullException extends RuntimeException { public QueueFullException(String err) { super(err); } } 26 13
Java: Κλάση που υλοποίει ένα interface public class ArrayQueue implements Queue { private int capacity; private Object[ ] Q; private int first = 0; private int last = 0; public ArrayQueue() { this(100); } public ArrayQueue(int cap) { capacity = cap; Q = new Object[capacity] } public int size( ) { return (last-first); } } public Object dequeue( ) throws QueueEmptyException { Object item; if (isempty( )) throw new QueueEmptyException("Queue is empty"); Object item = Q[first]; Q[first++] = null; //!!! για τον garbage collector return item; } 27 Διαφορές Πρακτόρων και Αντικειμένων: Οι πράκτορες ενσωματώνουν ισχυρότερα την έννοια της αυτονομίας από ότι τα αντικείμενα Οι πράκτορες είναι περισσότερο ικανοί να επιδείξουν ευέλικτη συμπεριφορά - αντανακλαστική, ενεργητική, κοινωνική (reactive, pro-active, social behaviour ) Ένα σύστημα πολλαπλών πρακτόρων είναι εγγενώς κατανεμημένο 28 14
Διαφορές Πρακτόρων και Αντικειμένων: Αυτονομία: ποιος αποφασίζει για την εκτέλεση κάποιας ενέργειας? Στον αντικειμενοστρεφή προγραμματισμό οποιοδήποτε αντικείμενο Α μπορεί να καλέσει οποιαδήποτε δημόσια μέθοδο ενός άλλου αντικειμένου Β. Το Β την εκτελεί χωρίς να μπορεί να αποφασίσει αν και πότε θα την εκτελέσει. Στην περίπτωση του προγραμματισμού που βασίζεται σε πράκτορες ένας πράκτορας Α μπορεί να ζητήσει την εκτέλεση μιας ενέργειας από έναν πράκτορα Β. Ο έλεγχος της εκτέλεσης είναι στην απόλυτη δικαιοδοσία του πράκτορα Β. 29 JADE: Περιβάλλον ανάπτυξης πολλαπλών πρακτόρων JADE: Java Agent Development Framework Ελεύθερο Λογισμικό (Open Source) Web site: http://jade.tilab.com (Η) JADE είναι πλήρως υλοποιημένη σε Java. Η δημιουργία, ο προγραμματισμός και η επικοινωνία των πρακτόρων συνίστανται στην επέκταση κλάσεων των πακέτων που παρέχονται. 30 15
JADE: Περιβάλλον ανάπτυξης πολλαπλών πρακτόρων Είναι πλήρως συμβατή με τις προδιαγραφές (σταθερότυπα) της FIPA (Foundation for Intelligent Physical Agents) Παρέχει ένα ολοκληρωμένο γραφικό περιβάλλον για τη διαχείριση, την αποσφαλμάτωση και την παρακολούθηση των πρακτόρων Επιτρέπει την κινητικότητα (mobility) του κώδικα και της κατάστασης των πρακτόρων Υποστηρίζει σύνθετες ακολουθίες επικοινωνίας πρακτόρων 31 Γενική εικόνα ενός ΠΠΣ στη JADE : Agent Management System Directory Facilitator Agents Agent 32 16
JADE 33 Αρχιτεκτονική JADE H JADE βασίζεται στο μοντέλο υβριδικής αρχιτεκτονικής P2P Αρχιτεκτονική Client/Server Αρχιτεκτονική Peer to Peer (P2P) Υβριδική Αρχιτεκτονική Pear to Peer (P2P) 34 17
H JADE είναι συμβατή με τις προδιαγραφές FIPA 35 JADE αποτελεί λογισμικό τύπου middleware Ε φ α ρ μ ο γ έ ς Ε φ α ρ μ ο γ έ ς Operating System Operating System Hardware Hardware 36 18
Το περιβάλλον της JADE container AMS (Agent Management System) DF (Directory Facilitator) 37 Main Container Περιέχει 2 ειδικούς πράκτορες: Τον Agent Management System (AMS) πράκτορα ο οποίος παρέχει υπηρεσίες ονοματοδότησης των πρακτόρων (White Pages) με διασφάλιση μοναδικότητας και μπορεί να δημιουργεί και να τερματίζει πράκτορες Τον Directory Facilitator (DF) πράκτορα, ο οποίος παρέχει υπηρεσία «κίτρινων σελίδων» (Yellow Pages) μέσω των οποίων ένας πράκτορας μπορεί να βρει τις υπηρεσίες που κάνουν διαθέσιμες άλλοι πράκτορες για να τις χρησιμοποιήσει όταν απαιτείται για να πετύχει τους στόχους του. 38 19
O κύκλος ζωής ενός πράκτορα στη JADE 39 Μόλις βρείτε χρόνο: Διαβάστε με προσοχή το Java Tutorial : http://www.it.teithe.gr/~demos/downloads/java_tutorial.pdf Περιηγηθείτε στη βιβλιοθήκη των κλάσεων της Java: http://docs.oracle.com/javase/8/docs/api/ Κατεβάστε και εγκαταστήστε τη JADE: http://jade.tilab.com/ 40 20