Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθημ

Σχετικά έγγραφα
Συναρτησιακός Προγραμματισμός. Εισαγωγικές Έννοιες

Κεφάλαιο 9 Συναρτησιακός προγραμματισμός Υπολογισμός με συναρτήσεις

Outline. 4 Object-Oriented Programming

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Αρχές Προγραμματισμού Υπολογιστών

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Γλώσσες Προγραμματισμού Μεταγλωττιστές

ΔΕΟ 13 - Ποσοτικές Μέθοδοι: Επιχειρησιακά Μαθηματικά. Κεφάλαιο 1: Συναρτήσεις μιας μεταβλητής

Πληροφορική 2. Γλώσσες Προγραμματισμού

Λογισµικό (Software SW) Γλώσσες

ΚΕΦΑΛΑΙΟ 2: Δηλωτικός Προγραμματισμός

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

(Imperative Programming) Pascal, C, Ada, Pazcal. (Functional Programming) Prolog (Logic Programming) (object-oriented programming) Java, C#

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Χαρίδημος Κονδυλάκης Εισαγωγή

Θέματα Μεταγλωττιστών

Υπολογισμός - Εντολές Επανάληψης

Μεθοδολογία Προγραμματισμού

Οντοκεντρικός Προγραμματισμός

Από τον αλγόριθμο στην ανάπτυξη προγράμματος

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Κεφάλαιο 1: Εισαγωγή. Αρχές Γλωσσών και Προγραμματισμού και Μεταφραστών. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήμιο Πατρών

Παράμετροι 19/9/2007. Πέρασμα παραμέτρων. Περιεχόμενα. Θέσεις και ονόματα στο ταίριασμα παραμέτρων. Ταίριασμα παραμέτρων μέσω ονομάτων

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

int plus(int a, int b) { return a+b; } int x = plus(1, 2); Πως περνιούνται οι παράμετροι; Αλλά θα δούμε επτά διαφορετικές μεταξύ τους τεχνικές

Λογισμικό Υπολογιστών (Software) ΜΥΥ-106 Εισαγωγή Η/Υ και Πληροφορική

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Εισαγωγή στο Συναρτησιακό Προγραμματισμό

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Γλώσσα προγραμματισμού python

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Παράμετροι. Νίκος Παπασπύρου. Claude Monet, Poppies, 1873

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Προγραμματισμός Ι (ΗΥ120)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Μαλούτα Θεανώ Σελίδα 1

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

n true false if t then t else t u t t b t emptylist cons t t t t λx.t u ::= head tail isempty

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Προγραμματισμός I (Θ)

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Διαγράμματα Κλάσεων στη Σχεδίαση

Ονόματα και Εμβέλεια. Wassily Kandinsky, Black lines, 1913

Η ΑΕΠΠ IN A GLANCE! ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΟΛΥΜΕΝΗ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Διαδικασιακός Προγραμματισμός

Ευφυής Προγραμματισμός

Η γλώσσα Fortress. Γιώργος Κορφιάτης. Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού, Εργαστήριο Λογισμικού, ΕΜΠ ...

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

Εισαγωγή στον Προγ/μό Υπολογιστών

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

Εισαγωγή. Ανάπτυξη Συστημάτων Λογισμικού. Οργάνωση μαθήματος. #1. Εισαγωγή στον Προγραμματισμό

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΗΥ Λογική. Διδάσκων: Δημήτρης Πλεξουσάκης Καθηγητής

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Μέρος Α. Λογισµικό & Προγράµµατα συστήµατος και εφαρµογών ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ. Το σηµερινό µάθηµα. Λογισµικό συστηµάτων & εφαρµογών

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Παράλληλη Επεξεργασία

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Εισαγωγή στην επιστήμη των υπολογιστών

Π2 Το Σύστηµα Κανόνων CLIPS

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

Βασικές Αρχές Προγραμματισμού

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Fermat, 1638, Newton Euler, Lagrange, 1807

επιφάνεια πυριτίου Αναφορά στο Εκπαιδευτικό Υλικό : 5. Αναφορά στο Εργαστήριο :

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

Σχήματα McCarthy I. Το σχήμα McCarthy είναι ένα γενικότερο προγραμματιστικό σχήμα:

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks)

Computing. Νοέμβριος Έκδοση 1.0

Περιεχόμενα. Προλεγόμενα... ix Κεφάλαιο 1 Εισαγωγή Κεφάλαιο 2 Δεδομένα και εκφράσεις Κεφάλαιο 3 Λογικές συνθήκες και δομές ελέγχου...

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Προγραμματισμός ΙI (Θ)

8. Μέθοδοι (Methods)

Transcript:

Συναρτησιακός Προγραμματισμός με Αντικειμενοστραφή Χαρακτηριστικά: η Περίπτωση της Γλώσσας F# Σημειώσεις Σεμιναριακής Παρουσίασης Ιζαμπώ Καράλη

Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις

Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable)

Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30)

Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30) LISP: Πρώτη γλώσσα συναρτησιακού προγραμματισμού (σχεδιασμός: John McCarthy, υλοποίηση: Steve Russell, 1958)

Συναρτησιακός Προγραμματισμός: γενικά (Ι) Ο καθαρός Συναρτησιακός Προγραμματισμός (FP) έχει τα εξής χαρακτηριστικά: Το βασικό εργαλείο είναι οι (μαθηματικές) συναρτήσεις Οι συναρτήσεις εφαρμόζονται σε μαθηματικές μεταβλητές (ανατίθεται μια τιμή άπαξ) (immutable) Μαθηματικό υπολογιστικό μοντέλο: λ-λογισμός (Alonzo Church, δεκαετία του 30) LISP: Πρώτη γλώσσα συναρτησιακού προγραμματισμού (σχεδιασμός: John McCarthy, υλοποίηση: Steve Russell, 1958) Είδος δηλωτικού (declarative) προγραμματισμού (Simon Peyton Jones: being rather than doing )

Συναρτησιακός Προγραμματισμός: γενικά (ΙΙ) Πρόγραμμα συναρτησιακού προγραμματισμού: μια μαθηματική έκφραση και δέσμευση ονομάτων με τιμές Εκτέλεση προγράμματος συναρτησιακού προγραμματισμού: αποτίμηση της έκφρασης και εκτύπωση αποτελέσματος

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

Γλώσσες Συναρτησιακού Προγραμματισμού Καθαρός Συναρτησιακός Προγραμματισμός: Hope (Edinburgh University, δεκαετία του 70), Miranda (David Turner, 1985), Haskell (Teamwork in University of Glasgow, 1990, βασίζεται στον Glasgow Haskell Compiler (Simon Peyton Jones, Simon Marlow) ) κ.α. Συναρτησιακός Προγραματισμός με χαρακτηριστικά προστακτικού και αντικειμενοστραφούς προγραμματισμού: Python (Guido van Rossum, 1991), F# (Don Syme, Microsoft Research, Cambridge, 2005) κ.α.

Γλώσσες Συναρτησιακού Προγραμματισμού και η F# F#: επιρροές από OCaml (INRIA, 1996), C# Don Syme: Μια πιο απλή γλώσσα προγραμματισμού για το.net από την C# και Strongly typed Python for.net Don Syme: Nice integration between C# and F#: code presentation in C# and implement core algorithms or core data processing in F#

Γενικά Χαρακτηριστικά της F# immutable values (με δυνατότητα προσδιορισμού mutable καθώς και παροχή mutable δομών δεδομένων) type inference στις συναρτήσεις (αλλά μπορεί κάποιος να δώσει και type constraints) strict γλώσσα (αλλά μπορεί κάποιος να δηλώσει κάποια έκφραση να αποτιμηθεί σαν lazy) Υποστήριξη high order συναρτήσεων Σύνθεση συναρτήσεων αλλά και piping à la Unix Υποστήριξη γλωσσικών δομών για προστακτικό (imperative) προγραμματισμό Πληθώρα δομών δεδομένων λ-expressions χώροι ονομάτων και στοιχεία

Αντικειμενοστραφή Χαρακτηριστικά της F# Δυνατότητα ορισμού κλάσεων αρχικοποίηση διαβαθμίσεις ορατότητας κληρονομικότητα interfaces αφηρημένες κλάσεις Προτείνεται η χρήση structures για απλούς τύπους που δεν συμμετέχουν σε κληρονομικότητα (με pass by value semantics)

Γενικό σχόλιο: Γενικά, προτείνεται η χρήση discriminated unions και ο ορισμός συναρτήσεων που ορίζονται πάνω σε αυτές παρά η χρήση ιεραρχίας OOP, διότι ταιριάζει καλύτερα στον συναρτησιακό προγραμματισμό εκτός κι αν πρόκειται για επέκταση κάποιου C# προγράμματος

Αναφορές F# Reference (https://docs.microsoft.com/en-us/dotnet /articles/fsharp/language-reference/) Tour of F# (https://docs.microsoft.com/en-us/dotnet /articles/fsharp/tour) F# for fun and profit (https://fsharpforfunandprofit.com/) Don Syme Answering Questions on F#, C#, Haskell and Scala : InfoQ Interview with Don Syme by Sadek Drobi (2009) (https://www.infoq.com/interviews/f-sharp-don-syme) Σημειώσεις διαλέξεων Συναρτησιακού Προγραμματισμού από τον Simon Peyton Jones (UCL, 1988)