ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ http://courses.softlab.ntua.gr/softeng/ ιδάσκοντες: (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@softlab.ntua.gr) Γλώσσες Προγραµµατισµού και Ανάπτυξη Συστηµάτων Λογισµικού ΤΛ και ΓΠ Γλώσσες προγραµµατισµού Επιθυµητά χαρακτηριστικά ΓΠ Επιλεγµένα ειδικά θέµατα ΓΠ 1
ΤΛ και ΓΠ Σχέση µεταξύ ανάπτυξης λογισµικού και σχεδίασης γλωσσών προγραµµατισµού ανάλυση µοντέλο σχεδίαση σχέδιο / λύση κωδικοποίηση πρόγραµµα Η σχεδίαση των ΓΠ επηρεάζει τη διαδικασία ανάπτυξης λογισµικού... και αντίστροφα 2
«Το τρίγωνο των εργαλείων» Εκτέλεση Γλώσσες Προγραµµατισµού (απόδοση) Αφηρηµένη σχεδίαση (εκφραστικότητα) Γλώσσες Μοντελοποίησης Ανάλυση (ορθότητα) Programming Languages and Software Engineering Τεχνολογία Gregory Λογισµικού T. Sullivan April 10, 2002 MIT AI Lab 3
Γλώσσες προγραµµατισµού (i) Σχολές προγραµµατισµού προστακτικός (imperative) προγραµµατισµός: το πρόγραµµα περιγράφεται ως µια ακολουθία εντολών (προσταγών) που πρέπει να εκτελεστούν συναρτησιακός (functional) προγραµµατισµός: το πρόγραµµα περιγράφεται ως ένα σύνολο µαθηµατικών συναρτήσεων λογικός (logic) προγραµµατισµός το πρόγραµµα περιγράφεται ως ένα σύνολο γεγονότων και συλλογιστικών κανόνων 4
Γλώσσες προγραµµατισµού (ii) Επιµέρους παραδείγµατα προγραµµατισµού δοµηµένος (structured) προγραµµατισµός υψηλού επιπέδου δοµές ελέγχου, αφαίρεση δεδοµένων αντικειµενοστρεφής (object-oriented) προγραµµατισµός αφαίρεση δεδοµένων συνδυάζοντας κατάσταση και συµπεριφορά, επαναχρησιµοποίηση 5
Γλώσσες προγραµµατισµού (iii) Επιµέρους παραδείγµατα προγραµµατισµού παράλληλος (parallel) και κατανεµηµένος (distributed) προγραµµατισµός συστήµατα λογισµικού που λειτουργούν σε ένα δίκτυο από συνεργαζόµενους υπολογιστές ψηφιδοστρεφής (component-oriented) προγραµµατισµός και scripting languages συστήµατα λογισµικού που αποτελούνται από πολλά συνεργαζόµενα τµήµατα 6
Γλώσσες προγραµµατισµού (iv) 7
Γλώσσες προγραµµατισµού (v) 8
Επιθυµητά χαρακτηριστικά ΓΠ Εκτέλεση προγραµµάτων αποδοτική (τεχνικές υλοποίησης) ασφαλής (type systems, run-time safety) Αφαίρεση ροής ελέγχου: δοµηµένος προγραµµατισµός structured programming δεδοµένων: απόκρυψη πληροφοριών data abstraction / information hiding Επαναχρησιµοποίηση συστατικών Προγραµµατισµός σε υψηλό επίπεδο 9
Αφαίρεση ροής ελέγχου οµές ελέγχου υψηλού επιπέδου επιλογής (if-then-else, case) βρόχων (for, while, repeat) υποπρογράµµατα εξαιρέσεις exceptions συνέχειες continuations... και όχι... άλµατα (goto) 10
Αφαίρεση δεδοµένων Συναρτήσεις και τύποι υψηλής τάξης ιαχωρισµός τύπου και υλοποίησης class-based object-oriented languages Modules signature implementation Παραµετρικά modules functors Components 11
Επαναχρησιµοποίηση συστατικών Κελυφοποίηση encapsulation αντικείµενα µε κατάσταση και συµπεριφορά Κληρονοµικότητα διαπροσωπείας συµπεριφοράς υλοποίησης Πολυµορφισµός inheritance παραµετρικός parametric polymorphism σχέση υποτύπου subtyping δυναµικό δέσιµο µεθόδων dynamic binding 12
Επιλεγµένα ειδικά θέµατα ΓΠ (i) Εξαιρέσεις βλ. C++ ή Java try { try { solveusingmethoda(problem); } catch (Failure...) { solveusingmethodb(problem); } } catch (Failure...) { print("both methods failed..."); } catch (Impossible...) { print("no solution exists..."); } 13
Επιλεγµένα ειδικά θέµατα ΓΠ Τύποι υψηλής τάξης fun sum : int list -> int (ii) βλ. ML fun sum [] = 0 sum (h:t) = h + sum(t); Τύποι υψηλής τάξης template <class T> class List {... }; List<int> l1; List<Person> l2; βλ. C++ τύποι που δέχονται ως παράµετρο τύπο 14
Επιλεγµένα ειδικά θέµατα ΓΠ (iii) Συναρτήσεις υψηλής τάξης βλ. C void qsort ( συναρτήσεις που unsigned n, void *array, δέχονται ως int (*cmp)(void *x, void *y) παράµετρο ); συνάρτηση Συναρτήσεις υψηλής τάξης fun qsort : string list * (string * string -> order) -> string list; π.χ. βλ. ML qsort(["dong","bell","ding"], strcmp) ["bell","ding","dong"] 15
Επιλεγµένα ειδικά θέµατα ΓΠ (iv) Συναρτήσεις υψηλής τάξης π.χ. βλ. ML fun cmpfirst : int -> (string * string -> comparison); συνάρτηση που επιστρέφει ως αποτέλεσµα συνάρτηση fun cmpfirst n (s1,s2) = let t1 = substring(s1,1,n); t2 = substring(s1,1,n); in strcmp(t1,t2) qsort(["dong","bell","ding"], cmpfirst(1)) ["bell","dong","ding"] 16
Επιλεγµένα ειδικά θέµατα ΓΠ (v) Παραµετρικός πολυµορφισµός fun id : 'a -> 'a fun id x = x; fun length : 'a list -> int; fun length [] = 0 length (h:t) = 1 + length(t); βλ. ML fun qsort : 'a list * ('a * 'a -> order) -> 'a list; Παραµετρικός πολυµορφισµός για κάθε τύπο 'a βλ. C++ template <class T> void qsort (unsigned n, T *array, int (*cmp)(const T &x, const T &y) ); 17
Επιλεγµένα ειδικά θέµατα ΓΠ Modules ιαπροσωπεία: πολυµορφικό λεξικό (vi) βλ. ML signature DICT = sig type 'a t exception unknown val empty : 'a t val lookup : 'a t * string -> 'a val insert : 'a t * string * 'a -> 'a t end; 18
Επιλεγµένα ειδικά θέµατα ΓΠ Modules (συνέχεια) Υλοποίηση 1: µε λίστα (vii) βλ. ML structure Dict1 : DICT = struct type 'a t = (string * 'a) list; exception unknown of string; val empty = []; fun lookup ([],k) = raise unknown(k) lookup ((s,x):d,k) = if k=s then x else lookup(d,k); fun insert (d,k,y) = (k,y):d; end; 19
Επιλεγµένα ειδικά θέµατα ΓΠ Modules (συνέχεια) Υλοποίηση 2: µε δυαδικό δέντρο (viii) βλ. ML structure Dict2 : STACK = struct datatype 'a t = leaf node of string * 'a * 'a t * 'a t; exception unknown of string; val empty = leaf; fun lookup (leaf,k) = raise unknown(k) lookup (node(s,x,l,r),k) = if k=s then x else if k<s then lookup(l,k) else lookup(r,k); 20
Επιλεγµένα ειδικά θέµατα ΓΠ (ix) Modules (συνέχεια) βλ. ML Υλοποίηση 2: µε δυαδικό δέντρο (συνέχεια) fun insert (leaf,k,y) = node(s,x,leaf,leaf) insert (node(s,x,l,r),k,y) = if k=s then node(k,y,l,r) else if k<s then node(s,x,insert(l,k,y),r) else node(s,x,l,insert(r,k,y)); end; 21
Επιλεγµένα ειδικά θέµατα ΓΠ (x) Functors: παραµετρικά modules βλ. ML functor UseDict (D:DICT) = struct fun many (d,[]) = d many (d,(k,y):t) = many(insert(d,k,y),t); fun learnfrench d = many(d,[("one", "un"), ("two", "deux"), ("three", "trois")]; end; let d = UseDict(Dict2). learnfrench(dict2.empty) in Dict2.lookup(d,"two") "deux" 22