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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΑΧΕΙΡΙΣΗ ΠΛΗΡΟΦΟΡΙΩΝ"

Transcript

1 ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΑΧΕΙΡΙΣΗ ΠΛΗΡΟΦΟΡΙΩΝ «ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ SCALA ΜΕ ΕΜΦΑΣΗ ΣΕ FUNCTIONAL PROGRAMMING» ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εισηγητής : < Εμμανουηλίδου Βασιλική, 817 > Επιβλέπων : < Παπαδημητρίου Στέργιος > < 2011> 1

2 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΕΙΣΑΓΩΓΗ 1.1 ΓΙΑΤΙ Η SCALA? σελ ΤΙ ΕΙΝΑΙ Η SCALA? σελ ΛΕΙΤΟΥΡΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ σελ ΞΕΚΙΝΩΝΤΑΣ ΜΕ ΤΗ SCALA σελ ΚΑΤΑΦΟΡΤΩΝΟΝΤΑΣ ΤΗ SCALA σελ ΕΓΚΑΘΙΣΤΩΝΤΑΣ ΤΗ SCALA σελ ΕΓΚΑΘΙΣΤΩΝΤΑΣ ΤΗ SCALA ΣΤΑ WINDOWS ΕΓΚΑΘΙΣΤΩΝΤΑΣ ΤΗ SCALA ΣΕ UNIX-LIKE ΣΥΣΤΗΜΑΤΑ 2.3 ΚΑΝΟΝΤΑΣ ΜΙΑ ΒΟΛΤΑ ΜΕ ΤΗ SCALA σελ Η SCALA ΣΤΗ ΦΡΑΜΜΗ ΕΝΤΟΛΩΝ σελ ΕΚΤΕΛΩΝΤΑΣ ΤΟΝ ΚΩΔΙΚΑ SCALA ΣΑΝ ΧΕΙΡΟΓΡΑΦΟ σελ Η SCALA ΑΠΟ ΕΝΑΝ IDE σελ ΑΠΟΚΩΔΙΚΟΠΟΙΩΝΤΑΣ ΤΗ SCALA σελ ΕΠΙΤΑΧΥΝΟΝΤΑΣ ΣΤΗ SCALA σελ Η SCALA ΣΑΝ ΣΥΝΟΠΤΙΚΗ JAVA σελ ΤΑΞΕΙΣ ΤΗΣ SCALA ΓΙΑ JAVA PRIMITIVES σελ TUPLES ΚΑΙ ΠΟΛΛΑΠΛΕΣ ΑΝΑΘΕΣΕΙΣ σελ STRINGS ΚΑΙ ΠΟΛΛΑΠΛΕΣ ΓΡΑΜΜΕΣ ΑΚΑΤΕΡΓΑΣΤΩΝ STRINGσελ ΛΟΓΙΚΕΣ ΠΡΟΕΠΙΛΟΓΕΣ σελ ΥΠΕΡΦΟΡΤΩΣΗ ΧΕΙΡΙΣΤΩΝ σελ Η SCALA ΕΚΠΛΗΣΣΕΙ ΤΗ JAVA σελ ΤΑΞΕΙΣ ΣΤΗ SCALA σελ ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΤΑΞΕΙΣ σελ ΚΑΘΟΡΙΣΜΟΣ ΠΕΔΙΩΝ, ΜΕΘΟΔΩΝ ΚΑΙ ΔΟΜΗΤΩΝ σελ. 52 2

3 4.3 ΕΠΕΚΤΑΣΗ ΜΙΑΣ ΤΑΞΗΣ σελ ΜΟΝΑΔΙΚΟ ΑΝΤΙΚΕΙΜΕΝΟ σελ ΑΥΤΟΝΟΜΑ ΚΑΙ ΣΥΝΟΔΕΥΤΙΚΑ ΑΝΤΙΚΕΙΜΕΝΑ σελ ΣΤΑΘΕΡΕΣ ΣΤΗ SCALA σελ ΛΟΓΙΚΗ ΔΑΚΤΥΛΟΓΡΑΦΗΣΗ σελ ΣΥΜΠΕΡΑΣΜΑ ΣΥΛΛΟΓΩΝ ΚΑΙ ΤΥΠΩΝ σελ Ο ΤΥΠΟΣ ANY σελ ΠΕΡΙΣΣΟΤΕΡΑ ΓΙΑ ΤΟΝ ΤΥΠΟ NOTHING σελ Ο ΤΥΠΟΣ OPTION σελ ΣΥΜΠΕΡΑΣΜΑΤΑ ΕΠΙΣΤΡΟΦΗΣ ΤΥΠΩΝ ΜΕΘΟΔΟΥ σελ ΔΙΑΒΑΣΗ ΜΕΤΑΒΛΗΤΩΝ ΕΠΙΧΕΙΡΗΜΑΤΩΝ (VARARGS) σελ ΔΙΑΦΟΡΑ ΠΑΡΑΜΕΤΡΙΚΟΥ ΤΥΠΟΥ σελ ΛΕΙΤΟΥΡΓΙΚΕΣ ΤΙΜΕΣ ΚΑΙ ΠΕΡΑΤΩΣΕΙΣ σελ ΜΕΤΑΒΑΣΗ ΑΠΟ ΑΠΛΕΣ ΣΕ ΥΨΗΛΩΝ ΑΠΑΙΤΗΣΕΩΝ ΛΕΙΤΟΥΡΓΙΕΣ σελ ΛΕΙΤΟΥΡΓΙΚΕΣ ΤΙΜΕΣ σελ ΛΕΙΤΟΥΡΓΙΚΕΣ ΤΙΜΕΣ ΜΕ ΠΟΛΛΑΠΛΕΣ ΠΑΡΑΜΕΤΡΟΥΣ σελ CURRYING σελ ΕΠΑΝΑΧΡΗΣΙΜΟΠΟΙΗΣΗ ΛΕΙΤΟΥΡΓΙΚΩΝ ΤΙΜΩΝ σελ ΘΕΣΙΑΚΗ ΣΗΜΕΙΩΣΗ ΓΙΑ ΠΑΡΑΜΕΤΡΟΥΣ σελ ΕΚΤΕΛΕΣΗ ΓΥΡΩ ΑΠΟ ΤΗΝ ΠΡΟΤΥΠΗ ΜΕΘΟΔΟ σελ ΜΕΡΙΚΩΣ ΕΦΑΡΜΟΣΜΕΝΕΣ ΛΕΙΤΟΥΡΓΙΕΣ σελ ΠΕΡΑΤΩΣΕΙΣ σελ ΓΝΩΡΙΣΜΑΤΑ ΚΑΙ ΜΕΤΑΤΡΟΠΕΣ ΤΥΠΩΝ σελ ΓΝΩΡΙΣΜΑΤΑ σελ ΕΠΙΛΕΚΤΙΚΑ MIXINS σελ ΔΙΑΚΟΣΜΗΣΗ ΜΕ ΓΝΩΡΙΣΜΑΤΑ σελ ΜΕΘΟΔΟΣ ΚΑΘΥΣΤΕΡΗΜΕΝΗΣ ΣΥΝΔΕΣΗΣ ΣΤΑ ΓΝΩΡΙΣΜΑΤΑ σελ

4 7.5 ΥΠΟΝΟΟΥΜΕΝΕΣ ΜΕΤΑΤΡΟΠΕΣ ΤΥΠΩΝ σελ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΣΥΛΛΟΓΕΣ 8.1 ΚΟΙΝΕΣ ΣΥΛΛΟΓΕΣ SCALA 8.2 ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΜΙΑΝ ΟΜΑΔΑ 8.3 ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΕΝΑΝ ΧΑΡΤΗ 8.4 ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΛΙΣΤΑ 8.5 Ο ΤΥΠΟΣ FOR σελ. 109 σελ. 109 σελ. 110 σελ. 113 σελ. 116 σελ ΑΝΤΙΣΤΟΙΧΙΑ ΠΑΡΑΓΟΝΤΩΝ ΚΑΙ ΚΑΝΟΝΙΚΟΙ ΤΥΠΟΙ 9.1 ΑΝΤΙΣΤΟΙΧΙΑ ΣΤΑΘΕΡΩΝ 9.2 ΑΝΤΙΣΤΟΙΧΙΑ ΜΠΑΛΑΝΤΕΡ 9.3 ΑΝΤΙΣΤΟΙΧΙΑ ΣΤΑΘΕΡΩΝ ΚΑΙ ΛΙΣΤΑΣ 9.4 ΑΝΤΙΣΤΟΙΧΙΑ ΤΥΠΩΝ ΚΑΙ ΦΡΟΥΡΩΝ 9.5 ΜΕΤΑΒΛΗΤΕΣ ΚΑΙ ΣΤΑΘΕΡΕΣ ΣΧΕΔΙΩΝ ΣΕ ΤΥΠΟΥΣ CASE 9.6 ΣΤΟΙΧΕΙΑ ΑΝΤΙΣΤΟΙΧΙΣΗΣ ΠΡΟΤΥΠΩΝ 9.7 ΑΝΤΙΣΤΟΙΧΙΑ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΙΣ ΚΑΤΗΓΟΡΙΕΣ CASE 9.8 ΑΝΤΙΣΤΟΙΧΙΑ ΑΠΟΣΥΜΠΙΕΣΤΩΝ ΧΡΗΣΗΣ 9.9 ΚΑΝΟΝΙΚΟΙ ΤΥΠΟΙ 9.10 ΚΑΝΟΝΙΚΟΙ ΤΥΠΟΙ ΩΣ ΑΠΟΣΥΜΠΙΕΣΤΕΣ σελ. 126 σελ. 126 σελ.127 σελ.128 σελ.1 30 σελ.131 σελ.132 σελ.132 σελ.136 σελ.140 σελ.142 4

5 ΕΙΣΑΓΩΓΗ Υπάρχουν πολλές γλώσσες για να προγραμματίσεις στην J V M ^ αυτό το βιβλίο ελπίζω να σας πείσω πως αξίζει να αφιερώσετε χρόνο για να μάθετε τη γλώσσα προγραμματισμού SCALA. Η γλώσσα SCALA έχει σχεδιαστεί για να προσφέρει δυνατότητα επέκτασης του συστήματος καθώς και ενδυνάμωσής του αλλά και ελευθερία έκφρασης στο απεριόριστο. Η γλώσσα σε συνδυασμό με τις βιβλιοθήκες της επιτρέπει στο χρήστη να συγκεντρωθεί στον τομέα του ενδιαφέροντός του χωρίς να τον αποσπούν διάφορα προβλήματα εξαιτίας του χαμηλού επιπέδου δομής. Ζούμε σε μια εποχή όπου το hardware γίνεται ολοένα και πιο φθηνό αλλά ταυτόχρονα και πιο δυνατό. Οι χρήστες έχουν πλέον συσκευές με πολλαπλούς επεξεργαστές, ο καθένας από αυτούς με πολλαπλούς πυρήνες. Παρόλο που η JAVA μας εξυπηρέτησε τόσο καλά ως τώρα, δεν σχεδιάστηκε για να μπορεί να εκμεταλλευτεί την δύναμη που έχουμε σήμερα. Η SCALA επιτρέπει να χρησιμοποιήσεις όλη αυτή τη δύναμη και να δημιουργήσεις υψηλού επιπέδου εφαρμογές εύκολες στην κατανόηση και με δυνατότητα εκτέλεσης τους ακόμη και σε ένα υπερφορτωμένο δίκτυο. Θα ακολουθήσει μια περιήγηση στα οφέλη του λειτουργικού προγραμματισμού και η ίδια η Scala θα μας δείξει γιατί προσελκύει τόσο ενδιαφέρον. 1.1 ΓΙΑΤΙ SCALA; Η Scala είναι μια υβριδικά λειτουργική γλώσσα η οποία βασίζεται σε αντικείμενα που τοποθετούνται με βάση ιεραρχίας. Δημιουργώντας μια σύνθετη εφαρμογή στη Scala, τείνουμε σε ένα λειτουργικό τρόπο προγραμματισμού όπου γράφουμε ανοικτό κώδικα με κατάσταση "immutable, που σημαίνει ότι δεν μπορεί να αλλαχθεί. Παράλληλα η Scala μας παρέχει ένα actor-model το οποίο επιτρέπει στον χρήστη να σχεδιάσει πολύπλοκο κώδικα χωρίς την ανησυχία της περιπλοκής των δεδομένων καθώς επίσης και τον εφιάλτη εξέτασης των κλειδωμάτων και των εκδόσεων. 5

6 Τα οφέλη της Scala ωστόσο δεν περιορίζονται στις πολύπλοκες εφαρμογές. Μπορείτε επίσης να κατασκευάσετε δυναμικές και περιεκτικές εφαρμογές οι οποίες να είναι μέρος μιας πιο σύνθετης πολυεφαρμογής. Μπορείτε πολύ γρήγορα να βάλετε σε χρήση τις ισχυρές δυνατότητες της Scala,συμπεριλαμβανομένης της στατικής πληκτρολόγησης, των αμετάβλητων συλλογών αλλά και του κομψού συνδυασμού μοτίβων. Η υποστήριξη της Scala για λειτουργικό προγραμματισμό βοηθά τον χρήστη να γράψει περιεκτικό και εκφραστικό κώδικα. Χάρη στο υψηλό επίπεδο αφαιρετικής διαδικασίας, μπορούμε να έχουμε περισσότερα αποτελέσματα με λιγότερες γραμμές κώδικα. Το λειτουργικό αυτό στυλ βοηθά τόσο σε απλές εφαρμογές όσο και σε πιο σύνθετες. Υπάρχει ένας μεγάλος αριθμός από γλώσσες προγραμματισμού. Μία από αυτές είναι η Erlang της οποίας το μοντέλο συγχρονισμού είναι παρόμοιο της Scala.Παρόλα αυτά η τελευταία έχει δύο σημαντικά πλεονεκτήματα. Πρώτον είναι δυναμικά σχεδιασμένη και δεύτερον τρέχει στην JVM και λειτουργεί πολύ καλά σε συνδυασμό με την Java. Αυτά τα δύο χαρακτηριστικά της την κάνουν τον πρώτο υποψήφιο για τα διαφορετικά επίπεδα εφαρμογών σε μια επιχείρηση. Επίσης μπορείτε να την χρησιμοποιήσετε σε συνδυασμό με άλλες γλώσσες προγραμματισμού. Η Scala είναι κατά πολύ η μόνη διακεκριμένη δυναμικά σχεδιασμένη γλώσσα που παρέχει στο χρήστη λειτουργικό στυλ και μια πολύ καλή υποστήριξη συγχρονισμού. Η Jruby και η Groovy είναι επίσης δυναμικές γλώσσες αλλά δεν είναι λειτουργικές. Αν είστε έμπειρος προγραμματιστής Java και μάχεστε με αυτήν για πολύπλοκες εφαρμογές τότε η Scala θα σας φανεί πολύ χρήσιμη. Μπορείτε εύκολα να δώσετε τον κώδικά σας από την Java στον Scala actor και αυτός θα κρατήσει το νήμα σε απομόνωση. Για να επικοινωνείτε μεταξύ των νημάτων μπορείτε να χρησιμοποιήσετε το ελαφρύ ΑΡΙ της Scala στέλνοντας εύκολα μηνύματα. Αντί να προωθείτε τα νήματα και να περιορίζετε το συναγωνισμό από το συγχρονισμό, μπορείτε να χρησιμοποιήσετε το ξεκλείδωτο μήνυμα που περνά για να απολαύσετε τον αληθινό συναγωνισμό. Εάν έχετε εκτιμήσει 6

7 τη στατική δακτυλογράφηση και θέλετε να επωφεληθείτε από τις προσφορές υποστήριξης του μεταγλωττιστή, θα διαπιστώσετε ότι η στατική δακτυλογράφηση επιτρέπει στη Scala να εργαστεί χωρίς να μπαίνει εμπόδιο στο δρόμο σας. Θα απολαύσετε την δακτυλογράφηση χωρίς να πρέπει να δακτυλογραφήσετε τόσο μεγάλο κώδικα. Εάν ψάχνετε έναν υψηλότερου επιπέδου αφαιρετικό και εκφραστικό κώδικα, τότε θα σας προσελκύσει η περιεκτικότητα της Scala. Μπορείτε να κάνετε περισσότερα πράγματα με τη Scala χρησιμοποιώντας λιγότερο κώδικα. Θα βρείτε επίσης χρήσιμη την ευελιξία της Scala σε ότι έχει να κάνει με τους χειριστές και τις σημειώσεις για να δημιουργήσετε γλώσσες εξαρτώμενες από το πεδίο. Ωστόσο υπάρχει μια προειδοποίηση. Η εν συντομία περιεκτικότητα της Scala κλίνει κατά περιόδους προς την απόλυτη σαφήνεια, κάτι που κάνει τον κώδικα δύσκολα κατανοητό. Οι χειριστές και τα κατασκευάσματα της Scala μπορεί να είναι κάποιες φορές εκφοβιστικοί για έναν αρχάριο. Όσο εξοικειώνεστε όμως με τη Scala θα αρχίσετε να εκτιμάτε την περιεκτικότητα και να αποφεύγετε την απόλυτη σαφήνεια με αποτέλεσμα ο κώδικας να είναι κατανοητός και εύκολος στη διατήρησή του συγχρόνως. Η Scala δεν είναι μια οριστική πρόταση. Δεν χρειάζεται να πάει χαμένος ο χρόνος, τα χρήματα και η προσπάθεια που έχετε επενδύσει γράφοντας τον κώδικα σε Java γλώσσα. Μπορείτε να χτίσετε πλήρεις εφαρμογές εξ ολοκλήρου σε Scala ή να τις ανακατέψετε στην έκταση που επιθυμείτε με την Java και άλλες γλώσσες στη JVM. Έτσι ο κώδικας Scala μπορεί να είναι τόσο μικρός όσο ένα χειρόγραφο ή τόσο μεγάλος όσο μια ολοκληρωμένη επιχειρηματική εφαρμογή. Η Scala έχει χρησιμοποιηθεί για να χτίσει εφαρμογές σε διάφορες περιοχές συμπεριλαμβανομένων των τηλεπικοινωνιών, της κοινωνικής δικτύωσης, του σημασιολογικού ιστού, και της ψηφιακής διαχείρισης ενεργητικού. Η Apache Camel χρησιμοποιεί τη Scala για το DSL για να δημιουργήσει τους κανόνες δρομολόγησης. Ο Lift WebFramework είναι ένα ισχυρό πλαίσιο ανάπτυξης Ιστού που χτίζεται χρησιμοποιώντας τη Scala. Εκμεταλλεύεται πλήρως τα χαρακτηριστικά γνωρίσματα της Scala όπως η εν 7

8 συντομία περιεκτικότητα, η εκφραστικότητα, το ταίριασμα σχεδίων και ο συναγωνισμός. 1.2 ΤΙ ΕΙΝΑΙ Η SCALA; Η Scala είναι μια υβριδική λειτουργική γλώσσα προγραμματισμού. Δημιουργήθηκε από τον Martin Odesky και απελευθερώθηκε αρχικά το Ακολουθούν μερικά κύρια χαρακτηριστικά της Scala : Έχει ένα γεγονός βασισμένο στο πρότυπο του συναγωνισμού. Υποστηρίζει επιτακτικό και λειτουργικό ύφος ταυτόχρονα. Είναι καθαρά αντικειμενοστρεφής. Αναμιγνύεται καλά με τη Java. Επιβάλλει τη λογική στατική δακτυλογράφηση. Είναι συνοπτική και εκφραστική. Στηρίζεται σε ένα μικρό πυρήνα. Είναι ιδιαίτερα εξελικτική και χρειάζεται λιγότερο κώδικα για να δημιουργήσει υψηλής εκτέλεσης εφαρμογές. Ακολουθεί ένα σύντομο παράδειγμα που επισημαίνει πολλά από τα χαρακτηριστικά αυτά: Import scala.actors._ Import Actor. val symbols=list ( AAPL, GOOG, IBM, JAVA, MSFT ) val receiver =self val year= 2008 Symbols.foreach { symbol => Actor { receiver! getyearendclosing (symbol, year ) val (topstock, highestprice) = gettopstock (symbols.length) printf ( Top Stock of %d is %s closing at price %f\n, year, topstock, highestprice) 8

9 Μην αποσπάστε από την σύνταξη. Επικεντρωθείτε στη συνολική εικόνα προς το παρόν. Η λέξη "symbols αναφέρεται σε έναν αμετάβλητο κατάλογο που διατηρεί τα σύμβολα τηλετύπων αποθεμάτων. Περιτυλιγόμαστε μέσα σε κάθε ένα από τα σύμβολα και επικαλούμαστε έναν δράστη (actor). Οι δράστες της Scala κάνουν την εκτέλεση σε χωριστά νήματα. Έτσι ο φραγμός του κώδικα σε συνδυασμό με τους δράστες εκτελούν το δικό τους νήμα. Επικαλείται το (όχι ακόμη εφαρμοσμένο) αποτέλεσμα λειτουργίας getyearendclosing(). Το αποτέλεσμα αυτής της κλήσης στέλνεται έπειτα στον δράστη που άρχισε αυτό το αίτημα. Αυτό γίνεται χρησιμοποιώντας το ειδικό σύμβολο χτυπήματος (!). Πίσω στο κύριο νήμα καλούμε την (όχι ακόμη εφαρμοσμένη ) λειτουργία gettopstock(). Έτσι, μόλις εφαρμοστεί πλήρως ο προηγούμενος κώδικας, μπορούμε να τον χρησιμοποιήσουμε για να κοιτάξουμε επάνω στις τιμές κλεισίματος αποθεμάτων ταυτόχρονα. Ας δούμε τώρα την λειτουργία getyearendclosing(): def getyearendclosing (symbol : String, year : Int ) = { val url=http://ivhart.finance.yahoo.com/table.csv?s= + Symbol + &a=11&b=01&c= + year + &d=11&e=31&f= + year + &g=m val data = to.source.fromurl(url).mkstring val price =data.split( \n )(1).split(, )(4).toDouble (symbol,price) Σε αυτή τη σύντομη και γλυκιά λειτουργία, στέλνουμε ένα αίτημα στο και λαμβάνουμε τα στοιχεία αποθεμάτων σε σχήμα CSV. Αναλύουμε έπειτα τα στοιχεία και εξάγουμε την τιμή κλεισίματος στο τέλος του έτους. Μην ανησυχείτε για το σχήμα των στοιχείων που λαμβάνουμε αυτή τη στιγμή. Τώρα μας έμεινε να ασχοληθούμε με την εφαρμογή της μεθόδου gettopstock(), χάρη στην οποία θα λάβουμε τις τιμές κλεισίματος και θα 9

10 καθορίσουμε το υψηλά διατιμημένο stock. Ας δούμε πώς μπορούμε να το κάνουμε αυτό με λειτουργικό ύφος: def gettopstock (count : Int) : (String, Double ) = { (1 to count).foldleft(,0.0) { (previoushigh, Index) => receivewithin (10000) { case (symbol : String, price : Double) => if (price > previoushigh._2) (symbol, price) else previoushigh Γράψαμε τη μέθοδο gettopstock() χωρίς μια ενιαία ρητή λειτουργία ανάθεσης σε κάποια μεταβλητή. Πήραμε τον αριθμό των συμβόλων ως παράμετρο σε αυτή τη μέθοδο. Στόχος μας είναι να βρούμε το σύμβολο με την υψηλότερη τιμή κλεισίματος. Έτσι, ξεκινάμε με το αρχικό σύμβολο και μια υψηλή τιμή (",0.0) ως παράμετρο στη μέθοδο foldleft(). Χρησιμοποιούμε την παραπάνω μέθοδο για να μπορέσουμε να συγκρίνουμε τις αξίες κάθε συμβόλου και να καθορίσουμε την υψηλότερη. Χρησιμοποιώντας τη μέθοδο receivewithinq, λαμβάνουμε τις αξίες συμβόλων και τιμών από τους δράστες με τους οποίους ξεκινήσαμε. Η μέθοδος receivewithinq θα διακοπεί αν στο εν λόγω διάστημα δεν ληφθεί κάποιο μήνυμα. Μόλις λάβουμε ένα μήνυμα, καθορίζουμε εάν η λαμβανόμενη τιμή είναι υψηλότερη από αυτήν που έχουμε την περίοδο αυτή. Εάν είναι, χρησιμοποιούμε το νέο σύμβολο και την τιμή του ως την υψηλότερη για να την συγκρίνουμε με την επόμενη που θα λάβουμε. Διαφορετικά, χρησιμοποιούμε το προηγουμένως καθορισμένο σύμβολο (previoushigh) και την υψηλότερη τιμή. Οτιδήποτε επιστρέφουμε από τον κώδικα που συνδέεται με τη μέθοδο foldleft() το χρησιμοποιούμε ως παράμετρο στα πλαίσια κλήσης του επόμενου στοιχείου. Τέλος, το σύμβολο και η υψηλότερη τιμή επιστρέφουν από τη foldleft(). Αυτές ήταν εικοσιπέντε γραμμές κώδικα με πρόσβαση στον Ιστό προκειμένου να μπορέσουμε να αναλύσουμε την τιμή κλεισίματος των επίλεκτων συμβόλων τηλετύπων. Αφιερώστε μερικά λεπτά πάνω στον κώδικα για σιγουρευτείτε πως καταλάβατε τον τρόπο με τον οποίο λειτουργεί. Δείτε πώς η μέθοδος υπολόγισε την υψηλότερη τιμή χωρίς να μεταβάλλει οποιοδήποτε αντικείμενο ή μεταβλητή. 10

11 Ο κώδικας εξετάζει μόνο το αμετάβλητο κράτος. Κατά συνέπεια, δεν πρέπει να ενδιαφερθείτε για τον συγχρονισμό και τον ισχυρισμό στοιχείων. Δεν χρειάζεται ρητή δήλωση και αναμονή στις ακολουθίες. Το μήνυμα στέλνεται και λαμβάνεται σιωπηρά. Αν συγκεντρώσουμε όλο τον προηγούμενο κώδικα και τον εκτελέσουμε (τρέξουμε) θα προκύψει η ακόλουθη παραγωγή : Top stock of 2008 is GOOG closing at price Υποθέστε ότι η καθυστέρηση δικτύου είναι ίση με d δευτερόλεπτα και εσείς ενδιαφέρεστε για την ανάλυση n συμβόλων. Εάν γράφατε τον κώδικα που τρέχει διαδοχικά τότε αυτό θα διαρκούσε n*d δευτερόλεπτα. Η μεγαλύτερη καθυστέρηση στον κώδικα είναι η πρόσβαση στο δίκτυο. Εκτελούμε και αυτό ταυτόχρονα χωρίς να γράψουμε μεγάλο κώδικα και να καταβάλλουμε πολλή προσπάθεια. Φανταστείτε πώς θα είχατε εφαρμόσει το προηγούμενο παράδειγμα στην Java. Ο προηγούμενος κώδικας είναι διακριτικός από το πώς θα τον εφαρμόζατε στην Java με τρεις σημαντικούς τρόπους : Κατ αρχάς ο κώδικας είναι συνοπτικός. Εκμεταλλευτήκαμε διάφορα ισχυρά χαρακτηριστικά γνωρίσματα της Scala :δράστες, περατώσεις, συλλογές, ταίριασμα σχεδίων, tuples. Φυσικά δεν έχουμε εισαγάγει κανέναν από αυτούς ακόμη αφού ακόμη είστε στην εισαγωγή. Επικοινωνήσαμε μεταξύ των νημάτων χρησιμοποιώντας τη διαβίβαση μηνυμάτων. Έτσι δεν υπήρξε καμία ανάγκη για τη χρήση των μεθόδων wait() και notify(). Αν χρησιμοποιούσατε το παραδοσιακό νήμα API στην Java, ο κώδικας θα ήταν αρκετά πιο σύνθετος. Ο νεώτερος συναγωνισμός API της Java μας ανακουφίζει από εκείνο το φορτίο χρησιμοποιώντας την υπηρεσία εκτελεστών. Έτσι, συγκριτικά, θα βρείτε το πρότυπο μηνυμάτων 11

12 της Scala βασιζόμενο στο μοντέλο των δραστών, πολύ ευκολότερο και καλύτερο στη χρήση. Δεδομένου ότι χειριστήκαμε μόνο το αμετάβλητο κράτος, δεν χρειάστηκε να ξοδέψουμε χρόνο και προσπάθεια για τον ισχυρισμό και συγχρονισμό των στοιχείων. Η Scala παρέχει τα οφέλη της και σε απλές εφαρμογές (μίας ίνας). Επίσης σας παρέχει με την ελευθερία να επιλέξετε και να αναμίξετε δύο μορφές προγραμματισμού : το επιτακτικό ύφος που προωθείται στην Java και το καθαρά λειτουργικό ύφος χωρίς πολλές αναθέσεις. Δίνοντάς σας την άδεια να αναμίξετε αυτές τις δύο μορφές, η Scala σας αφήνει να επιλέξετε αυτό με το οποίο είστε πιο άνετοι στα πλαίσια ενός ενιαίου νήματος. Έτσι μπορείτε να καλέσετε τον κώδικα και να τον αναμίξετε με τον ήδη υπάρχοντα κώδικα της Java. Στη Scala όλα είναι ένα αντικείμενο. Παραδείγματος χάρη, το 2.toString() θα παραγάγει συντακτικό λάθος στην Java. Εντούτοις αυτό ισχύει στη Scalaκαλούμε την μέθοδο tostring() σε μια περίπτωση με ακέραιο. Προκειμένου λοιπόν να έχουμε καλή εκτέλεση και διαλειτουργικότητα με την Java, η Scala χαρτογραφεί τις περιπτώσεις ακεραίων στην τριανταδυάμπιτη αντιπροσώπευση ακεραίων. Η Scala συντάσσει το bytecode. Μπορείτε να το τρέξετε με τον ίδιο τρόπο που τρέχετε τα γραπτά προγράμματα χρησιμοποιώντας τη γλώσσα της Java. Μπορείτε να επεκτείνετε τις τάξεις της Java από τις τάξεις της Scala και αντίστροφα. Μπορείτε επίσης να χρησιμοποιήσετε τις τάξεις της Java στις τάξεις της Scala και αντίστροφα. Μπορείτε να προγραμματίσετε τις εφαρμογές σας χρησιμοποιώντας τις πολλαπλές γλώσσες και να είστε αληθινά πολύγλωσσοι προγραμματιστές. Μπορείτε να εκμεταλλευτείτε τη Scala σε εφαρμογές της Java εκεί όπου απαιτείται συναγωνισμός ή σύνοψη ( όπως τη δημιουργία γλωσσών εξαρτώμενων από το πεδίο). Η Scala είναι μία στατική δακτυλογραφημένη γλώσσα, αλλά αντίθετα από την Java, έχει τη λογική στατική δακτυλογράφηση. Η Scala εφαρμόζει το 12

13 συμπέρασμα των τύπων στην ισχύ που μπορεί. Έτσι αντί να διευκρινίζεται τον τύπο επανειλημμένα και περιττά, μπορείτε να στηριχθείτε στη γλώσσα για να μάθετε τον τύπο και να τον επιβάλετε μέσα στον υπόλοιπο κώδικα. Δεν εργάζεστε για το μεταγλωττιστή, αντί αυτού αφήνετε το μεταγλωττιστή να λειτουργήσει για εσάς. Παραδείγματος χάριν, το var i=1, αμέσως η Scala θεωρεί ότι το μεταβλητό i είναι ακέραιου τύπου (int). Εάν τώρα προσπαθήσουμε να ορίσουμε στο i την τιμή i=( haha ) τότε θα πάρουμε ένα λάθος σύνταξης με το ακόλουθο μήνυμα : Error. type mismatch; Found : java.lang.string( haha ) Required : Int I= haha Η Scala προτιμά τις συνοπτικές διαδικασίες. Η τοποθέτηση ενός ερωτηματικού (;) στο τέλος κάθε δήλωσης έχει γίνει δεύτερη φύση στους προγραμματιστές της Java. Αντιθέτως, στη Scala τα ερωτηματικά (;) είναι προαιρετικά καθώς και η τελεία (.) που εξαρτάται από το περιεχόμενο. Το ίδιο ισχύει και για τις παρενθέσεις. Έτσι, αντί να γράψουμε s1.equals(s2);, μπορούμε να γράψουμε si equals s2. Αφήνοντας εκτός παρενθέσεις, τελείες και ερωτηματικά, ο κώδικας μας κερδίζει μία υψηλή αναλογία σήματος και θορύβου. Γίνεται ευκολότερο να γραφτούν γλώσσες εξαρτημένες από το πεδίο. Μία από τις πιο ενδιαφέρουσες πτυχές της Scala είναι η εξελιξιμότητα. Μπορείτε να απολαύσετε μια συμπαθητική αλληλεπίδραση των λειτουργικών κατασκευασμάτων προγραμματισμού μαζί με τις ισχυρές βιβλιοθήκες της Java. Επίσης μπορείτε να δημιουργήσετε τις ιδιαίτερα εξελικτικές και ταυτόχρονες εφαρμογές της Java για να εκμεταλλευτείτε πλήρως τα πολυνηματώδη στους πολυπύρηνους επεξεργαστές χρησιμοποιώντας τις εγκαταστάσεις που παρέχονται στη Scala. Η πραγματική ομορφιά στη Scala είναι σε αυτό που δεν έχει. Αντίθετα από την Java, C#, και τη C++, η γλώσσα Scala έχει ένα πολύ μικρό πυρήνα με κανόνες χτισμένους μέσα σε αυτόν. Τα υπόλοιπα, συμπεριλαμβανομένων των 13

14 χειριστών, είναι μέρος της βιβλιοθήκης της Scala. Αυτή η διάκριση έχει μια εκτεταμένη συνέπεια. Επειδή η γλώσσα δεν κάνει από μόνη της πολλά είστε εσείς σε θέση να κάνετε περισσότερα με αυτήν. Είναι αληθινά επιδεκτική επέκτασης, και η βιβλιοθήκη της χρησιμεύει για μελέτη περιπτώσεων πάνω σε αυτή. 1.3 ΛΕΙΤΟΥΡΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Αναφέραμε και προηγουμένως ότι η Scala μπορεί να χρησιμοποιηθεί ως λειτουργική γλώσσα προγραμματισμού. Θα αφιερώσουμε μερικές σελίδες ώστε να πάρετε μια γεύση του λειτουργικού προγραμματισμού. Αρχίζουμε αντιπαραθέτοντας το επιτακτικό ύφος προγραμματισμού της Java. Εάν θέλουμε να βρούμε τη μέγιστη θερμοκρασία για μια δεδομένη ημέρα, θα μπορούσαμε να γράψουμε τον παρακάτω κώδικα σε Java : //Java code public static int findmax (List<Integer> temperatures) { int hightemperature = Integer.MIN_VALUE; for ( int temperature : temperatures ) { hightemperature = Math.max (hightemperature, temperature) ; return hightemperature ; Δημιουργήσαμε την μεταβαλλόμενη μεταβλητή hightemperarure και την τροποποιούμε συνεχώς μέσα στο βρόγχο. Ο κώδικας της Scala είναι ιδιαίτερα συνοπτικός και μπορεί να γίνεται κάποιες φορές και έντονος. Πρέπει να υποβάλλετε αρκετή προσπάθεια για να μάθετε τη γλώσσα. Αλλά μόλις τη μάθετε, θα είστε σε θέση να εκμεταλλευτείτε την εκφραστικότητα και τη δύναμή της. Ας ρίξουμε μια ματιά σε ένα άλλο παράδειγμα του λειτουργικού της ύφους. Υποθέστε ότι έχουμε έναν κατάλογο του οποίου τα στοιχεία παίρνουν διπλές τιμές από ότι στον αρχικό κατάλογο. Αντί να κάνουμε loop σε κάθε ένα στοιχείο για να το καταλάβουμε αυτό, ζητάμε να διπλασιάζονται τα στοιχεία που 14

15 επιθυμούμε και αφήνουμε τη γλώσσα να κάνει τη loop (περιτύλιξη), όπως παρουσιάζεται παρακάτω: val values = List (1, 2, 3, 4,5) val doublevalues = values.map (_ *2 ) Διαβάστε τη λέξη-κλειδί val σαν κάτι αμετάβλητο. Λέμε ουσιαστικά στην Scala ότι οι μεταβλητές values και doublevalues δεν μπορούν να αλλάξουν από τη στιγμή που δημιουργήθηκαν. Αν και μπορεί να μην μοιάζει, το _*2 είναι μία λειτουργία. Λέγεται ανώνυμη και αυτό διότι έχει μόνο σώμα αλλά όχι όνομα. Η κάτω παύλα (_) αντιπροσωπεύει το επιχείρημα που περνά σε αυτή την λειτουργία. Η ίδια η λειτουργία περνά ως επιχείρημα στη λειτουργία map. Η λειτουργία map() κάνει ένα πέρασμα από τη συλλογή του, και για κάθε στοιχείο, επικαλείται την ανώνυμη λειτουργία που δίνεται ως παράμετρος. Το γενικό αποτέλεσμα είναι ένας νέος κατάλογος και αποτελείται από τα στοιχεία που είναι διπλά στον αρχικό κατάλογο. 15

16 ΚΕΦΑΛΑΙΟ 2. ΞΕΚΙΝΩΝΤΑΣ ΜΕ ΤΗ SCALA Ας ξεκινήσουμε γράφοντας κώδικα Scala. Σε αυτό το κεφάλαιο θα εγκαταστήσετε τη Scala και θα εξασφαλίσετε ότι όλα δουλεύουν καλά στο σύστημά σας. 2.1 DOWNLOADING ΤΗ SCALA Η εκκίνηση στη Scala είναι πραγματικά εύκολη. Κατ αρχάς, κατεβάστε την πιο πρόσφατη έκδοση της Scala με μια επίσκεψη στο και κάντε κλικ στην επιλογή «Download Scala. Κατεβάστε την κατάλληλη έκδοση βάση της πλατφόρμας στην οποία είστε. Θα βρείτε την τρέχουσα έκδοση στην κορυφή της σελίδας. Παραδείγματος χάριν, για MAC OS X κατεβάστε την scala final.tar.gz. Για Windows Vista κατεβάστε την scala-2.7afinal.zip. Αν ενδιαφέρεστε για το API της Scala ή για τον πηγαίο κώδικα τότε θα πρέπει να κατεβάσετε και τα πρόσθετα αρχεία. Τα παραδείγματα που θα ακολουθήσουν έχουν εξεταστεί όλα με την έκδοση της Scala. Εάν είστε τύπος των άκρων, μια σταθερή έκδοση δεν θα σας ικανοποιήσει. Θα χρειαστεί να κατεβάσετε την πιο εξελιγμένη έκδοση της γλωσσικής εφαρμογής. Κάνοντας scroll στη σελίδα θα βρεθείτε στο τμήμα "Release Candidate και εκεί κατεβάστε την κατάλληλη για την πλατφόρμα σας απελευθερωμένη έκδοση. Διαδοχικά, εάν χρειάζεστε την απόλυτα πιο πρόσφατη έκδοση και είστε πρόθυμοι να διακινδυνεύσετε ζητήματα, μπορείτε αντί αυτού να επιλέξετε την nightly κατασκευή. Ανεξάρτητα από την έκδοση που επιλέξατε, θα χρειαστείτε επίσης και την έκδοση JDK 1.4 ή κάποια νεότερη της. Συστήνουμε τουλάχιστον την Java 5 έτσι ώστε να μπορέσετε να απολαύσετε τα πιο πρόσφατα γλωσσικά χαρακτηριστικά γνωρίσματα της Java στη Scala. 16

17 2.2.1 ΕΓΚΑΘΙΣΤΩΝΤΑΣ ΤΗ SCALA ΣΤΑ WINDOWS Αποσυμπιέστε το αρχείο διανομής κάνοντας δεξί κλικ στο αρχείο scala- 2.7Afinal.zip στον Windows Explorer και επιλέξτε "Extract Here. Μεταφέρετε τον αποσυμπιεσμένο κατάλογο στην κατάλληλη τοποθεσία. Παραδείγματος χάριν, μεταφέρετε το αρχείο scala final στον κατάλογο C:\programs\scala. Υπάρχει ακόμη ένα βήμα. Θα χρειαστείτε να οργανώσετε το μονοπάτι για τον κατάλογο Scala bin. Για να συμβεί αυτό, θα πρέπει να πάτε στο Control Panel (επιτροπή ελέγχου) και να ανοίξετε την εφαρμογή "System ( συστήματα). Πλοηγηθείτε στο "Advanced system settings ( προηγμένες ρυθμίσεις συστήματος), επιλέξτε "Advanced (προηγμένο), και μετά επιλέξτε " Enviroment Variables (μεταβλητές περιβάλλοντος). Τροποποιήστε το μονοπάτι σας έτσι ώστε να συμπεριλάβετε μέσα σε αυτό τον κατάλογο Scala bin. Παραδείγματος χάριν, προσθέστε στο μονοπάτι σας το εξής: c:\programs\scala\scala final\bin. Να θυμάστε πως ξεχωρίζετε τους καταλόγους στο μονοπάτι σας χρησιμοποιώντας το ερωτηματικό (;). Σιγουρευτείτε ότι όλες οι ρυθμίσεις έχουν γίνει σωστά. Κλείστε οποιοδήποτε παράθυρο γραμμής εντολών έχετε ανοιχτό, διότι οι αλλαγές στις μεταβλητές του περιβάλλοντος δε θα εφαρμοστούν μέχρι να ανοίξετε πάλι το παράθυρο. Σε ένα νέο παράθυρο γραμμής εντολών πληκτρολογήστε scala- version, και σιγουρευτείτε ότι έχετε εγκαταστήσει τη σωστή έκδοση. Τώρα είστε έτοιμοι να ξεκινήσετε με τη Scala ΕΓΚΑΘΙΣΤΩΝΤΑΣ ΤΗ SCALA ΣΕ UNIX-LIKE ΣΥΣΤΗΜΑΤΑ Έχετε μερικές επιλογές εάν θέλετε να εγκαταστήσετε τη Scala στο Unix-like σύστημά σας. Στη Mac Os X, μπορείτε να εγκαταστήσετε το MacPorts δίνοντας την εντολή sudo port install scala. Διαδοχικά, αποσυμπιέστε το αρχείο διανομής gunzip scala final.tar.gz. Έπειτα αποσυμπιέστε το αρχείο που χρησιμοποιεί tar -x f scala final.tar. Μετακινήστε τον ξετυλιγμένο κατάλογο προς την πιο κατάλληλη τοποθεσία. Παραδείγματος χάριν, αντιγράψτε το αρχείο scala final στον κατάλογο \opt\scala. 17

18 Υπάρχει ακόμη ένα βήμα: ρυθμίστε το μονοπάτι για τον κατάλογο Scala bin. Ανάλογα με το κέλυφος που χρησιμοποιείται, χρειάζεται να εκδώσετε τα κατάλληλα αρχεία σχεδιαγράμματος. Σε περίπτωση που χρειάζεστε κάποια βοήθεια, αναφερθείτε στην κατάλληλη τεκμηρίωση του κελύφους σας ή ανατρέξτε σε κάποιον που γνωρίζει. Παραδείγματος χάριν, για κάποιον που χρησιμοποιεί bash, πρέπει να εκδώσει το αρχείο ~/.bash_profile. Σε εκείνο το αρχείο, πρέπει να προσθέσει το /opt/scala/scala final/bin στο μονοπάτι της μεταβλητής περιβάλλοντος. Σιγουρευτείτε πως η οργάνωση σας πήγε όπως αναμενόταν. Κλείστε οποιαδήποτε ανοικτά παράθυρα επειδή οι αλλαγές στις μεταβλητές του περιβάλλοντος δεν θα εφαρμοστούν έως ότου ανοίξετε ένα νέο παράθυρο. Στο νέο τερματικό παράθυρο πληκτρολογήστε scala-version και σιγουρευτείτε ότι η έκδοση που μόλις εγκαταστήσατε είναι η σωστή. Τώρα είστε έτοιμοι να χρησιμοποιήσετε τη Scala. 2.3 ΚΑΝΟΝΤΑΣ ΜΙΑ ΒΟΛΤΑ ΜΕ ΤΗ SCALA Ο γρηγορότερος τρόπος για να δοκιμάσετε τη Scala είναι να χρησιμοποιήσετε τη γραμμή εντολών της. Σας επιτρέπει να «παίξετε» με μικρά αποκόμματα κώδικα, δίνοντάς σας ένα χρήσιμο εργαλείο με το οποίο μπορείτε να δοκιμάσετε γρήγορα το νέο κώδικα, ενώ γράφετε τις εφαρμογές. Αν στη γραμμή εντολών πληκτρολογήσετε scala, τότε θα δείτε ένα εισαγωγικό μήνυμα που ακολουθείται από μια υπαγόρευση: >scala Welcome to Scala version final (Java HotSpot Client VM, Java 1.5.0_16). Type in expressions to have them evaluated. Type : help for more information Scala> Κατά την υπαγόρευση, πληκτρολογούμε val number=6, ζητώντας την επιστροφή της μεταβλητής. Τότε το κέλυφος της Scala αποκρίνεται σε αυτό 18

19 συμπεραίνοντας ότι η μεταβλητή number είναι τύπου Int (ακέραιος) βασιζόμενη στον ορισμό που δώσαμε στη μεταβλητή (6) : Scala> val number=6 Number : int =6 Scala> Τώρα θα προσπαθήσουμε να δώσουμε στη μεταβλητή μας την τιμή 7, και η Scala θα αποκριθεί ως εξής: Scala> number=7 <console>:5: error : reassignment to val number =7 Η Scala μας ενημερώνει ότι δεν μπορεί να αναθέσει ξανά τη σταθερά number. Στην κονσόλα, ωστόσο, μπορούμε να επαναπροσδιορίσουμε τις σταθερές και τις μεταβλητές. Έτσι, μπορούμε να πληκτρολογήσουμε val number= 7 και η Scala θα το αποδεχτεί σιωπηρά : Scala> val number = 7 Number : int = 7 Scala> Ο επαναπροσδιορισμός των σταθερών και των μεταβλητών στο ίδιο πλαίσιο είναι εφικτός μόνο στο διαδραστικό κέλυφος και όχι στον πραγματικό κώδικα της Scala ή στο χειρόγραφο. Αυτή η ευελιξία καθιστά ευκολότερο τον πειραματισμό μέσα στο κέλυφος. Προσπαθήστε να πληκτρολογήσετε val list=list(1,2,3) και προσέξτε πως η Scala συμπεραίνει τον τύπο του καταλόγου και τον εκθέτει ως : list:list[int]=list(1,2,3). Οποιαδήποτε στιγμή που δεν θα είστε βέβαιοι για το τι θα προκύψει από μια έκφραση, μπορείτε πολύ γρήγορα να το δοκιμάσετε μέσα στο κέλυφος. 19

20 Μπορείτε να χρησιμοποιήσετε το επάνω βελάκι για να επαναφέρετε τις εντολές που γράψατε προηγουμένως. Μπορείτε ακόμη να επαναφέρετε εντολές από κάποια προηγούμενη επίκληση στο κέλυφος. Καθώς πληκτρολογείτε μια σειρά από κώδικα μπορείτε πατώντας Ctrl+A να βρεθείτε στην αρχή του κώδικα ή πατώντας Ctrl+E να βρεθείτε στο τέλος του. Το κέλυφος προσπαθεί να εκτελέσει ότι του δακτυλογραφείτε από τη στιγμή που θα του ζητήσετε επιστροφή αποτελεσμάτων (hit return). Εάν πληκτρολογήσετε κάτι ελλιπές και ζητήσετε επιστροφή, για παράδειγμα αν βρίσκεστε στη μέση καθορισμού μιας μεθόδου, το κέλυφος θα σας επιτρέψει να ολοκληρώσετε τον καθορισμό εάν βάλετε έναν κάθετο φραγμό ( ). Παρακάτω καθορίζω μια μέθοδο ispalindrome () σε δύο γραμμές, κατόπιν καλώ την μέθοδο δύο φορές και λαμβάνω τα ακόλουθα αποτελέσματα : Scala> def ispalindrome(str: String) = str == str.reverse.tostring () ispalindrome : (String) Boolean scal> ispalindrome( mom ) res1: Boolean = true scala> ispalindrome( dude ) res2 : Boolean = false scala> Όταν ολοκληρώσετε με το κέλυφος, μπορείτε να πληκτρολογήσετε quit ή exit για να βγείτε από το κέλυφος. Εκτός από την χρησιμοποίηση του κελύφους, μπορούμε να στείλουμε σύντομες δηλώσεις ή εκφράσεις στη Scala κάνοντας χρήση της επιλογής -e( εκτελέστε το επιχείρημα) : Scala -e println(\ Hello\ +args(0)+\:, \:+args(1)) Buddy Welcome to Scala Η Scala θα ανταποκριθεί με το ακόλουθο μήνυμα : Hello Buddy, Welcome to Scala 20

21 Χρησιμοποιήσαμε ( ) αντί για [ ] για να συντάξουμε ευρετήριο για τη μεταβλητή args. Αυτός είναι ένας ιδιωματισμός της Scala με τον οποίο θα ασχοληθούμε αργότερα. Εάν έχετε κώδικα Scala γραμμένο σε κάποιο αρχείο, μπορείτε να τον φορτώσετε μέσα στο κέλυφος χρησιμοποιώντας την επιλογή :load. Παραδείγματος χάριν, για να φορτώσετε ένα αρχείο ονομάτων script.scala, πληκτρολογήστε μέσα στο κέλυφος :load script.scala. Αυτή η επιλογή είναι χρήσιμη γιατί σας επιτρέπει να φορτώσετε και πειραματιστείτε με ήδη γραμμένες λειτουργίες και τάξεις. 2.4 Η SCALA ΣΤΗ ΓΡΑΜΜΗ ΕΝΤΟΛΩΝ Μπορεί το κέλυφος και η επιλογή -e να είναι κατάλληλοι τρόποι για να πειραματιστεί κανείς σε μικρά κομμάτια κώδικα, σύντομα όμως θα θελήσετε να αναβαθμίσετε την εκτέλεση του κώδικα της Scala που βρίσκεται σε αποθηκευμένα αρχεία. Η εντολή scala μπορεί να το κάνει αυτό για εσάς. Λειτουργεί είτε με το διαδραστικό τρόπο εφόσον δεν της παρέχετε κανένα επιχείρημα, είτε κατά δεσμίδες εάν της παρέχετε το όνομα ενός αρχείου. Το αρχείο μπορεί να είναι είτε χειρόγραφο αρχείο είτε αρχείο αντικειμένου. Εξ' ορισμού, μπορείτε να αφήσετε το εργαλείο να μαντέψει ποιο τύπο ή αρχείο του παρέχετε. Διαδοχικά, μπορείτε να το κατευθύνεται στο χειρισμό ενός αρχείου σαν χειρόγραφο αρχείο ή σαν αρχείο αντικειμένου με την επιλογή -howtorun. Τέλος, για να στείλετε ιδιότητες της Java, μπορείτε να χρησιμοποιήσετε το σχήμα -Dproperty=value. Ας υποθέσουμε ότι έχουμε ένα αρχείο με όνομα HelloWorld.scala : Println( Hello World, Welcome to Scala ) Μπορούμε να εκτελέσουμε το χειρόγραφο με την εντολή βοθ/θ HelloWorld.scala με τον παρακάτω τρόπο : 21

22 >scala HelloWorld.scala Hello World, Welcome to Scala > Μπορούμε να ακολουθήσουμε το όνομα του αρχείου με οποιαδήποτε επιχειρήματα θέλουμε να στείλουμε στο πρόγραμμα. Η δυνατότητα που μας δίνεται ώστε να μπορούμε να γράψουμε κώδικα Scala σε ένα αρχείο και να το τρέξουμε σαν χειρόγραφο είναι αρκετά βολική. Μπορείτε να το χρησιμοποιήσετε αυτό για να γράψετε κώδικα σχετικό με τη συντήρηση συστημάτων ή τους διοικητικούς στόχους και να τον τρέξετε από την γραμμή εντολών ή από το αγαπημένο σας δίαυλο IDE χωρίς να κάνετε κάποια έξτρα κίνηση για τη σύνταξη του. Το εργαλείο της Scala συντάσσει το χειρόγραφο σας σε bytecode μέσα στη μνήμη και το εκτελεί. Τρέχει τον κώδικα στην παραδοσιακή μέθοδο main() που ανήκει σε μια main τάξη. Έτσι, όταν τρέχετε το χειρόγραφο, τρέχετε την μέθοδο main() της Main τάξης. Εάν θέλετε να δείτε το bytecode που παράγεται, χρησιμοποιήστε την επιλογή -savecompiled πριν από το όνομα του αρχείου και το εργαλείο τη σώζει σε ένα JAR αρχείο. 2.5 ΕΚΤΕΛΩΝΤΑΣ ΚΩΔΙΚΑ SCALA ΣΑΝ ΧΕΙΡΟΓΡΑΦΟ Από τη στιγμή που χρησιμοποιείτε τη Scala για να γράψετε χειρόγραφα, θα σας φαινόταν πολύ πιο εύκολο αν απλά τρέχατε το αρχείο Scala σαν ένα χειρόγραφο κελύφους. ΕΚΤΕΛΩΝΤΑΣ ΣΑΝ ΧΕΙΡΟΓΡΑΦΟ ΣΕ UNIX-LIKE ΣΥΣΤΗΜΑΤΑ Στα Unix-like συστήματα μπορείτε να κάνετε το ίδιο αν καθορίσετε ένα προοίμιο κελύφους. Ακολουθεί ένα παράδειγμα : #!/usr/bin/env scala!# println(:hello:+args( 0) ) Σιγουρευτείτε ότι το αρχείο Script.scala μπορεί να εκτελεστεί πληκτρολογώντας chmod+xscript.scala. Έπειτα μπορείτε πολύ απλά να το 22

23 τρέξετε πληκτρολογώντας./script.scala Buddy στην γραμμή εντολών όπου Buddy είναι το επιχείρημα που θα περάσεις το χειρόγραφο. Ακολουθεί το αποτέλεσμα του προηγούμενης κλήσης : Hello Buddy ΤΡΕΧΟΝΤΑΣ ΣΑΝ ΧΕΙΡΟΓΡΑΦΟ ΣΕ WINDOWS Μπορείτε να διαμορφώσετε τα Windows έτσι ώστε να έχετε τη δυνατότητα να επικαλείστε την Scala κάθε φορά που τρέχετε ένα αρχείο της. Για να συμβεί αυτό απλά κάνετε διπλό κλικ σε ένα χειρόγραφο της Scala με επέκταση scala. Το λογισμικό των Windows θα «παραπονεθεί» μην μπορώντας να ανοίξει το αρχείο και θα σας ζητήσουν να επιλέξετε ένα πρόγραμμα από των κατάλογο των ήδη εγκατεστημένων προγραμμάτων στον υπολογιστή σας. Βρείτε την τοποθεσία στην οποία βρίσκεται εγκατεστημένη η Scala και επιλέξτε το.scala.bat. Τώρα μπορείτε να τρέξετε το πρόγραμμα κάνοντας διπλό κλικ στον Windows Explorer ή από την γραμμή εντολών χωρίς να προτάξετε την εντολή.scala. Όταν κάνετε λοιπόν διπλό κλικ στο πρόγραμμα μέσα από τον εξερευνητή των Windows θα δείτε ένα παράθυρο να προβάλλετε μπροστά δείχνοντας το αποτέλεσμα της εκτέλεσης ενώ σε πολύ γρήγορα απενεργοποιείται. Αν επιθυμείτε να διατηρήσετε το παράθυρο ανοικτό μπορείτε να δείξετε το αρχείο σας σε ένα.bat αρχείο το οποίο θα τρέξει στη Scala και μετά θα διακοπεί. Για να συμβεί αυτό θα πρέπει να κάνετε δεξί κλικ στο πρόγραμμα της Scala, να επιλέξετε "Open with... (άνοιξε με...) και αφού βρείτε να επιλέξετε το αρχείο.bat. 2.6 Η SCALA ΑΠΟ ΕΝΑΝ IDE Όπως οι περισσότεροι Java προγραμματιστές, έτσι και εσείς είναι πολύ πιθανό να χρησιμοποιείτε έναν IDE για την ανάπτυξη των εφαρμογών σας. Αν χρησιμοποιείτε τους Eclipse, IntelliJ IDEA, ή NetBeans, μπορείτε να κάνετε χρήση των plug-ins της Scala. Αυτοί οι IDE σας επιτρέπουν να απολαύσετε με τη Scala τις ίδιες εγκαταστάσεις με αυτές που ξέρατε από την Java για έκδοση 23

24 και εργασία. Μπορείτε να χρησιμοποιήσετε τις συντακτικές λεπτομέρειες, την ολοκλήρωση του κώδικα, τη διόρθωση, την κατάλληλη εγκοπή και ούτω καθεξής. Επιπλέον μπορείτε να αναμείξετε και να αναφέρετε τη Scala και τη Java στο ίδιο πρόγραμμα. Για να εγκαταστήσετε τα plug-ins της Scala για τον Eclipse, ακολουθήστε τις οδηγίες που θα βρείτε στο 2.7 ΑΠΟΚΩΔΙΚΟΠΟΙΩΝΤΑΣ ΤΗ SCALA Δείτε πως μπορείτε να γράψετε μια τάξη και να την αποδελτιώσετε χρησιμοποιώντας τον συντάκτη scalac. Στο παρακάτω παράδειγμα, προσδιορίζουμε ένα αντικείμενο με όνομα Sample. Όπως θα μάθετε αργότερα, η Scala δεν υποστηρίζει στατικές μεθόδους. Έτσι για να μπορείτε να γράψετε μια στατικά την μέθοδο main() θα πρέπει να ορίσετε ένα αντικείμενο. Object Sample { Def main(args : Array[String]) = println( Hello Scala ) Μπορούμε να το αποδελτιώσουμε χρησιμοποιώντας την εντολή scalac Sample.scala. Μπορούμε να το τρέξουμε είτε κάνοντας χρήση του εργαλείου scala είτε της εντολής Java. Για να χρησιμοποιήσουμε το εργαλείο scala απλά πληκτρολογούμε scala Sample. Για να χρησιμοποιήσουμε το εργαλείο java θα πρέπει να καθορίσουμε το classpath για την scala-library jar. Ακολουθεί ένα παράδειγμα αποδελτίωσης με το εργαλείο scalac και στη συνέχεια τρέχουμε το πρόγραμμα πρώτα με το εργαλείο scala και έπειτα με το java : >scalac Sample.scala >scala Sample Hello Scala >java -classpath /opt/scala/ scala final/lib/scala-library.jar:. Sample Hello Scala > ΚΕΦΑΛΑΙΟ 3. ΕΠΙΤΑΧΥΝΟΝΤΑΣ ΣΤΗ SCALA 24

25 Η Scala σας επιτρέπει να στηριχτείτε στις δεξιότητες της Java. Σε αυτό το κεφάλαιο, θα ξεκινήσουμε σε γνωστό έδαφος με τον κώδικα της Java και θα κινηθούμε έπειτα προς τη Scala. Η Scala είναι παρόμοια με την Java σε κάποια σημεία αλλά και πολύ διαφορετική σε άλλα. Η Scala ευνοεί τον καθαρό προσανατολισμό του αντικειμένου αλλά χαρτογραφεί τύπους σχετικούς με τύπους της Java όπου είναι δυνατόν. Η Scala υποστηρίζει τη Java στο επιτακτικό ύφος κωδικοποίησης αλλά υποστηρίζει συγχρόνως και το λειτουργικό ύφος. Βάλτε μπρος τον αγαπημένο σας συντάκτη και είμαστε έτοιμοι να κάνουμε μια βόλτα μέσα στη Scala. 3.1 Η SCALA ΣΑΝ ΣΥΝΟΠΤΙΚΗ JAVA Η Scala έχει μια πολύ υψηλή πυκνότητα κώδικα με την οποία δακτυλογραφείτε λιγότερα για να πετύχετε περισσότερα. Ας ξεκινήσουμε με ένα παράδειγμα κώδικα Java : //Java code public class Greetings { public static void main (String[] args) { for (int i=1; i<4; i++) { system.out.print( I +, ); system.out.println( Scala Rocks!!! ); Ακολουθεί το αποτέλεσμα: 1,2,3, Scala Rocks!!! Η Scala καθιστά πολλά πράγματα στον προηγούμενο κώδικα προαιρετικά. Κατ αρχάς, δεν την ενδιαφέρει αν χρησιμοποιήσαμε ερωτηματικά (;). Δεύτερον, δεν υπάρχει κάποιο όφελος για τον κώδικα το να βρίσκετε μέσα στην τάξη Greetings σε ένα τόσο απλό παράδειγμα, οπότε ξεφορτωνόμαστε και αυτό. Τρίτον, δεν χρειάζεται να διευκρινιστεί ο τύπος της μεταβλητής i. Η Scala είναι 25

26 αρκετά έξυπνη ώστε να συμπεράνει πως το i είναι ακέραιος αριθμός. Τέλος, η Scala μας επιτρέπει να χρησιμοποιήσουμε την println χωρίς να πληκτρολογήσουμε System.out.println. Εδώ είναι ο προηγούμενος κώδικας απλοποιημένος σε Scala : for (I <- 1 to 3 ) { Print (I +, ) println( Scala Rocks!!! ) val vs var Μπορείτε να ορίσετε μια μεταβλητή χρησιμοποιώντας είτε το val είτε το var. Η μεταβλητή που ορίστηκε χρησιμοποιώντας το val είναι αμετάβλητη και συνεπώς δεν μπορεί να αλλαχθεί εφόσον οριστεί. Οι μεταβλητές που ορίστηκαν με var, ωστόσο, είναι μεταβλητές και άρα μπορούν να αλλαχθούν όσες φορές το επιθυμείτε. Η σταθερότητα ισχύει για τη μεταβλητή και όχι για τις περιπτώσεις στις οποίες αναφέρεται αυτή. Παραδείγματος χάριν, αν γράψουμε val buffer=new StringBuffer(), δεν μπορούμε να αλλάξουμε την περίπτωση στην οποία αναφέρεται το Buffer. Εντούτοις, μπορούμε να τροποποιήσουμε την περίπτωση στην οποία αναφέρεται το Buffer χρησιμοποιώντας μεθόδους όπως η append(). Από την άλλη, αν καθορίσουμε μια περίπτωση String χρησιμοποιώντας val str= Hello, δεν θα μπορέσουμε και πάλι να την τροποποιήσουμε διότι το String είναι αμετάβλητο. Μπορείτε να καταστήσετε την περίπτωση μιας τάξης αμετάβλητη, ορίζοντας όλα της τα πεδία με val και παρέχοντας όλες τις μεθόδους που σας επιτρέπουν να διαβάσετε και όχι να τροποποιήσετε την κατάσταση της περίπτωσης. 26

27 Στη Scala, καλό θα ήταν να προτιμάτε την χρήση του var όσο το δυνατόν περισσότερο γιατί με αυτόν τον τρόπο προωθείται η σταθερότητα και το λειτουργικό ύφος. Για να τρέξετε το προηγούμενο χειρόγραφο της Scala, πληκτρολογήστε scala Greetings.scala ή τρέξτε το μέσα από τον δίαυλο IDE. Πρέπει να δείτε το παρακάτω: 1,2,3, Scala Rocks!!! Η δομή των βρόγχων στη Scala είναι αρκετά ελαφριά. Απλά αναφέρετε ότι οι τιμές του δείκτη i θα πάρουν τιμές από 1 έως 3. Το αριστερό βέλος καθορίζει ένα val, όχι ένα var, και η δεξιά πλευρά της είναι η παράγωγη έκφραση. Σε κάθε επανάληψη, ένα νέο val δημιουργείτε και αρχικοποιείται από τα διαδοχικά στοιχεία των παραγόμενων τιμών. Η σειρά που παρήχθη στον προηγούμενο κώδικα περιλαμβάνει το χαμηλότερο δεσμό (1) και τον ανώτερο (3). Μπορείτε να αποκλείσετε τον ανώτερο δεσμό από τη σειρά μέσω της μεθόδου to() αντί της μεθόδου top(). for (I <- until 3) { print (I +, ) println( Scala Rocks!!! ) Και θα πάρετε το παρακάτω αποτέλεσμα: 1,,2, Scala Rocks!!! Οι μέθοδοι to() και until() είναι πραγματικές μέθοδοι στο RichInt, εκεί όπου το int σαν αποτέλεσμα του μεταβλητού i μετατρέπεται σιωπηρά. Επιστρέφει μια 27

28 περίπτωση Range. Έτσι, η κλήση 1 to 3 είναι ισοδύναμη με 1.to(3), αλλά η πρώτη επιλογή είναι πιο κομψή. Στο προηγούμενο παράδειγμα, φαίνεται ότι έχουμε επανεκχωρήσει το i κατά την επανάληψη μέσα στον βρόγχο. Ωστόσο, το i δεν είναι τύπου var, αλλά τύπου val. Κάθε φορά μέσα στον βρόγχο δημιουργούμε ένα διαφορετικό val που ονομάζεται i. Σημειώστε ότι δεν μπορούμε να αλλάξουμε ακούσια την αξία του i μέσα στον βρόγχο επειδή το i είναι αμετάβλητο. Έτσι κάναμε ήδη ένα βήμα προς το λειτουργικό ύφος. Μπορούμε επίσης να εκτελέσουμε το βρόγχο σε ένα πιο λειτουργικό ύφος χρησιμοποιώντας τη μέθοδο foreach() : (1 to 3).foreach(i=> print(i +, ) ) println ( Scala Rocks!!! ) Ακολουθεί το αποτέλεσμα: 1,2,3, Scala Rocks!!! Το προηγούμενο παράδειγμα είναι συνοπτικό και δεν υπάρχει καμία ανάθεση σε αυτό. Χρησιμοποιήσαμε τη μέθοδο foreach() της τάξης Range. Αυτή η μέθοδος δέχεται μια λειτουργική αξία σαν παράμετρο. Έτσι, μέσα στις παρενθέσεις, παρέχουμε το σώμα του κώδικα που δέχεται ένα επιχείρημα και το οποίο στο παράδειγμά μας είχε όνομα i. Το => διαχωρίζει τον κατάλογο παραμέτρων στα αριστερά και την εφαρμογή στα δεξιά. Οι τελείες και οι παρενθέσεις είναι προαιρετικές. 28

29 Η Scala σας επιτρέπει να παραλείψετε τις τελείες και τις παρενθέσεις εάν μια μέθοδος παίρνει μία ή καμία παράμετρο. Εάν η μέθοδος παίρνει περισσότερες από μια παραμέτρους πρέπει να χρησιμοποιήσετε τις παρενθέσεις αλλά οι τελείες παραμένουν προαιρετικές. Έχετε ήδη ανακαλύψει τα οφέλη του : a+b που στην πραγματικότητα είναι a+(b) καθώς και 1 to 3 που στην πραγματικότητα είναι 1.to(3). Μπορείτε να εκμεταλλευτείτε την ελαφριά σύνταξη για να δημιουργήσετε κώδικα που θα διαβάζει με φυσικό τρόπο. Παραδείγματος χάριν, υποθέστε ότι ορίζουμε την μέθοδο turn() στην τάξη Car: def turn(direction: String) //... Μπορούμε να καλέσουμε την προηγούμενη μέθοδο με μια πιο ελαφριά σύνταξη ως εξής : Car turn right Απολαύστε τις προαιρετικές τελείες και παρενθέσεις για να μειώσετε τον επιπλέον κώδικα. 3.2 ΤΑΞΕΙΣ ΤΗΣ SCALA ΓΙΑ JAVA PRIMITIVES primitive data types = είναι διάφοροι τύποι μεταβλητών που μπορούμε να έχουμε σε ένα πρόγραμμα Java και δεν προκύπτουν από κάποια γονική κλάση. Παρακάτω θα αναφερόμαστε σε primitives και όχι στο τι σημαίνουν αυτοί. 29

30 Literal = είναι μια σταθερά της οποίας ο αριθμός είναι κινητής υποδιαστολής. Παρακάτω θα αναφερόμαστε σε literal και όχι στην έννοια αυτού. Η Java παρουσιάζει μια διασπασμένη άποψη του κόσμου. Υπάρχουν αντικείμενα αλλά υπάρχουν και primitives όπως int, double, και ούτω καθεξής. Η Scala τα μεταχειρίζεται όλα σαν αντικείμενα. Η Java μεταχειρίζεται τα primitives διαφορετικά από τα αντικείμενα. Η έκδοση 5 της Java, επιτρέπει να στέλνετε primitives σε μεθόδους που περιμένουν να λάβουν αντικείμενα. Ωστόσο, η Java δεν σας επιτρέπει να καλέσετε μια μέθοδο με ένα primitive όπως για παράδειγμα : 2.toString(). Από την άλλη, η Scala τα μεταχειρίζεται όλα σαν αντικείμενα. Αυτό σημαίνει ότι μπορείτε να καλείτε μεθόδους με literals, όπως ακριβώς θα καλούσατε μεθόδους με αντικείμενα. Στον παρακάτω κώδικα, δημιουργούμε μια περίπτωση ακεραίου της Scala και το στέλνουμε στη μέθοδο ensurecapacity() της java.util.arraylist, η οποία περιμένει ένα ακέραιο primitive της Java. Class ScalaInt { def playwithint() { val capacity : Int=10 val list = new java.util.arraylist[string] list.ensurecapacity(capacity) Στον προηγούμενο κώδικα, η Scala μεταχειρίστηκε τη Scala.Int σαν ένα ακέραιο primitive της Java. Αυτό έχει σαν αποτέλεσμα να μην υπάρξει απώλεια απόδοσης στο χρόνο εκτέλεσης για τις μετατροπές των τύπων. Υπάρχει ένας ανάλογος μαγικός τρόπος που σας επιτρέπει να καλέσετε μεθόδους όπως η to() με ακέραιο. Όταν η Scala αναγνωρίσει ότι ο ακέραιος δεν μπορεί να χειριστεί το αίτημά σας, τότε η Scala ήσυχα εφαρμόζει τη μέθοδο intwrapper() για να μετατρέψει τον ακέραιο σε scala.runtime.richint και έπειτα επικαλείται την μέθοδο to() σε αυτήν. 30

31 Οι τάξεις όπως οι RichInt, RichDouble, RichBoolean και ούτω καθεξής ονομάζονται rich wrapper classes. Παρέχουν ευκολίες στις μεθόδους και μπορούν να χρησιμοποιηθούν για τις τάξεις της Scala που αντιπροσωπεύουν τους primitive τύπους κα String της Java. 3.3 TUPLES ΚΑΙ ΠΟΛΛΑΠΛΕΣ ΑΝΑΘΕΣΕΙΣ tuples = είναι ένα σύνολο πλειάδων όπου κάθε πλειάδα είναι μια ακολουθία γνωρισμάτων (attributes) και για την οποία ισχύει t=<v1,v2,...vn>. Παρακάτω θα αναφερθούμε σε tuples και όχι στην έννοια αυτών. Ας υποθέσουμε ότι έχουμε μια λειτουργία που επιστρέφει πολλαπλές τιμές. Παραδείγματος χάριν, ας επιστρέψουμε όνομα, επώνυμο και διεύθυνση ηλεκτρονικού ταχυδρομείου ενός προσώπου. Ένας τρόπος για να το γράψουμε στην Java είναι να επιστρέψουμε μια περίπτωση της τάξης PersonInfo που δεσμεύει τα κατάλληλα πεδία που περιέχουν τα δεδομένα που θέλουμε να επιστρέψουμε. Διαδοχικά, μπορούμε να επιστρέψουμε ένα String[] ή ένα ArrayList που θα περιέχει αυτές τις τιμές και κάνοντας μια επανάληψη στο αποτέλεσμα θα προσκομίσουμε αυτές τις τιμές. Βέβαια υπάρχει και απλούστερος τρόπος για να γίνει αυτό στη Scala. Η Scala υποστηρίζει τα tuples και τις πολλαπλές αναθέσεις. Tuple είναι μια αμετάβλητη ακολουθία αντικειμένων που δημιουργείται από τιμές μεταξύ τους διαχωρισμένες με κόμμα. Για παράδειγμα, τα παρακάτω αντιπροσωπεύουν Tuples με τρία αντικείμενα: ( VenKat, Subramaniam, Μπορούμε να ορίσουμε τα στοιχεία από τα tuple με τα πολλαπλά vars ή vals παράλληλα, όπως φαίνεται στο παρακάτω παράδειγμα: Def getpersoninfo(primarykey : Int) = { //Assume primarykey is used to fetcha person s info... //Here response is hard-coded ( VenKat, :Subramaniam, ) 31

32 val (firstname, lastname, address) = getpersoninfo(1) println( First Name is + firstname) println( Last Name is + lastname) println( Address is + address) Ακολουθεί το αποτέλεσμα της εκτέλεσης του παραπάνω κώδικα: First Name is Venkat Last Name is Subramaniam Address is Τι θα συμβεί αν προσπαθήσουμε να ορίσουμε το αποτέλεσμα της μεθόδου σε λιγότερες ή περισσότερες μεταβλητές? Η Scala θα έχει το «νου» της για εσάς και αν συμβεί αυτό θα εκθέσει λάθος. Η έκθεση λάθους θα γίνει στο χρόνο της σύνταξης υποθέτοντας ότι συντάσσετε τον κώδικα Scala και δεν τον τρέχετε σαν χειρόγραφο. Παραδείγματος χάριν, ορίζουμε το αποτέλεσμα της κλήσης μιας μεθόδου σε λιγότερες μεταβλητές από ότι στο tuple : Def getpersoninfo(primarykey : Int ) = { ( VenKat, :Subramaniam, ) val (firstname, lastname) = getpersoninfo(1) Η Scala θα αναφέρει αυτό το λάθος : (fragment of MultipleAssignment2.scala) : 5 : error : constructor cannot be instantiated to expected type; found : ( T1,T2) required : (java.lang.string, java.lang.string, java.lang.string) val (firstname, lastname) = getpersonlnfo(l) Αντί της ανάθεσης των τιμών, μπορείτε επίσης να έχετε πρόσβαση στα μεμονωμένα στοιχεία των tuple. Παραδείγματος χάριν, αν εκτελέσουμε το val info=getpersoninfo(1), τότε θα αποκτήσουμε πρόσβαση στο πρώτο στοιχείο 32

33 χρησιμοποιώντας τη σύνταξη info._1, το δεύτερο στοιχείο χρησιμοποιώντας το info._2, και ούτω καθεξής. Τα tuples είναι χρήσιμα όχι μόνο στις πολλαπλές αναθέσεις. Είναι χρήσιμα στο να περάσουν ένα κατάλογο με τις τιμές των στοιχείων ως μηνύματα μεταξύ των δραστών στον ταυτόχρονο προγραμματισμό. Η συνοπτική σύνταξη θα σας βοηθήσει να κρατήσετε τον κώδικα συνοπτικό στην πλευρά του αποστολέα μηνυμάτων. Στην πλευρά του λήπτη, μπορείτε να χρησιμοποιήσετε το ταίριασμα σχεδίων για να λάβετε και να επεξεργαστείτε τον κώδικα συνοπτικά. 3.4 STRINGS ΚΑΙ ΠΟΛΛΑΠΛΕΣ ΓΡΑΜΜΕΣ ΑΚΑΤΕΡΓΑΣΤΩΝ STRING Το String στη Scala δεν είναι τίποτα άλλο παρά το java.lang.string. Μπορείτε να χρησιμοποιήσετε το String όπως ακριβώς το κάνατε και στη Java. Ωστόσο, η Scala παρέχει μερικές πρόσθετες ευκολίες κάθε φορά που δουλεύετε με String. Η Scala μετατρέπει αυτόματα ένα String σε scala.runtime.richstring. Αυτό σας επιτρέπει να εφαρμόσετε εύκολα κάποιες μεθόδους όπως capitalize(), lines() και reverse. Στη Scala είναι πολύ απλό να δημιουργήσετε ένα string που να τρέχει τις πολλαπλές γραμμές. Απλά τοποθετήστε τις πολλαπλές γραμμές των σειρών μέσα σε τρία quotesf... ). Παρακάτω δημιουργούμε μια σειρά (String) που τρέχει τρεις γραμμές : Val str = In his famous inaugural speech, John F. Kennedy said And so, my fellow Americans : ask not what your country can do for you - ask what you can do for your country. He then proceeded to speak to the citizens of the World... Println(str) Ακολουθεί το αποτέλεσμα : In his famous inaugural speech, John F. Kennedy said And so, my fellow Americans : ask not what your country can do for you - ask what you can do for your country. He then proceeded to speak to the citizens of the World... 33

34 Η Scala σάς επιτρέπει να ενσωματώσετε τα διπλά quotes μέσα στις σειρές σας. Η Scala πήρε το περιεχόμενο από τα τριπλά διπλά quotes και αυτό ονομάζεται ακατέργαστο string στη Scala.Η Scala πήρε τη σειρά τελείως κυριολεκτικά. Δεν θα θέλαμε όμως να έχουμε μέσα στο String τις εγκοπές του κώδικα. Έτσι μπορούμε να χρησιμοποιήσουμε για ευκολία τη μέθοδο stripmargin() του RichString όπως παρακάτω : Val str = In his famous inaugural speech, John F. Kennedy said And so, my fellow Americans : ask not what your country can do for you - ask what you can do for your country. He then proceeded to speak to the citizens of the World....stripMargin Println(str) Η μέθοδος stripmargin() αφαιρεί όλα τα κενά ή τους χαρακτήρες ελέγχου πριν από την κύρια διασωλήνωση( ). Εάν το σύμβολο της διασωλήνωσης εμφανίζεται οπουδήποτε αλλού εκτός της κυρίαρχης θέσης σε κάθε γραμμή, τότε έχει διατηρηθεί. Εάν για εσάς το σύμβολο της διασωλήνωσης είναι ιερό, τότε μπορείτε να χρησιμοποιήσετε μια παραλλαγή της μεθόδου stripmargin() με έναν άλλο χαρακτήρα περιθωρίου της επιλογής σας. Ακολουθεί το παράγωγο του προηγούμενου κώδικα: In his famous inaugural speech, John F. Kennedy said And so, my fellow Americans : ask not what your country can do for you - ask what you can do for your country. He then proceeded to speak to the citizens of the World... Θα βρείτε τις ακατέργαστες σειρές πολύ χρήσιμες κατά τη δημιουργία των κανονικών εκφράσεων. Είναι ευκολότερο να δακτυλογραφηθεί και να διαβαστεί ως \d2:\d2 από ότι ως \\d2:\\d2. 34

35 3.5 ΛΟΓΙΚΕΣ ΠΡΟΕΠΙΛΟΓΕΣ Η Scala έχει μερικές προεπιλογές που καθιστούν τον κώδικα συνοπτικό και ευκολότερο στο να διαβαστεί και να γραφεί. Εδώ είναι μερικά από αυτά τα χαρακτηριστικά γνωρίσματα : Υποστηρίζει χειρόγραφα. Δεν χρειάζεται όλος ο κώδικας να βρίσκεται μέσα σε μια τάξη. Εάν ένα χειρόγραφο ικανοποιεί τις ανάγκες σας, τότε μπορείτε να βάλετε τον εκτελέσιμο κώδικα άμεσα σε ένα αρχείο χωρίς το σωρό μιας περιττής τάξης. Η επιστροφή είναι προαιρετική. Η τελευταία αξιολογημένη έκφραση επιστρέφεται αυτόματα από τις κλήσεις της μεθόδου, υποθέτοντας ότι ταιριάζει με τον τύπο της return που είχε δηλωθεί για τη μέθοδο. Χωρίς να χρειάζεται να βάλετε αυτή τη ρητή εντολή, αυτομάτως ο κώδικας σας γίνεται συνοπτικός ειδικά κατά τη διαβίβαση των περατώσεων ως παράμετροι της μεθόδου. Τα ερωτηματικά είναι προαιρετικά. Δεν είναι απαραίτητο να τελειώσετε μια δήλωση με ερωτηματικό και αυτό με τη σειρά του μειώνει το θόρυβο. Εάν θέλετε να τοποθετήσετε πολλαπλές δηλώσεις στην ίδια γραμμή, μπορείτε να τις διαχωρίσετε χρησιμοποιώντας το ερωτηματικό (;). Η Scala επίσης με επιδεξιότητα υπολογίζει εάν μια δήλωση είναι ημιτελής και σας επιτρέπει να την ολοκληρώσετε στην ακόλουθη γραμμή. Οι κατηγορίες και οι μέθοδοι είναι δημόσιοι εξ ορισμού και για αυτό δεν είναι απαραίτητο να χρησιμοποιείτε ρητά τη λέξη public. Η Scala παρέχει ελαφριά σύνταξη για να δημιουργήσει JavaBeans. Χρησιμοποιεί λιγότερο κώδικα για να δημιουργήσει τις μεταβλητές και τις τελικές ιδιότητες. Δεν είστε αναγκασμένοι να βρείτε τις εξαιρέσεις για τις οποίες δεν ενδιαφέρεστε, μειώνοντας έτσι το μέγεθος του κώδικα και αποφεύγοντας ανάρμοστο χειρισμό αυτών. 35

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

Δημιουργία μιας εφαρμογής Java με το NetBeans

Δημιουργία μιας εφαρμογής Java με το NetBeans Δημιουργία μιας εφαρμογής Java με το NetBeans Για να δημιουργήσετε μια εφαρμογή Java πρέπει να ακολουθήσετε τα εξής βήματα : Αρχικά πρέπει να δημιουργηθεί ένα project το οποίο θα περιέχει όλα τα αρχεία

Διαβάστε περισσότερα

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input

Διαβάστε περισσότερα

Ενημέρωση σε Windows 8.1 από τα Windows 8

Ενημέρωση σε Windows 8.1 από τα Windows 8 Ενημέρωση σε Windows 8.1 από τα Windows 8 Τα Windows 8.1 και τα Windows RT 8.1 είναι βασισμένα στα Windows 8 και στα Windows RT, για να σας προσφέρουν βελτιώσεις στην εξατομίκευση, την αναζήτηση, τις εφαρμογές,

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr 1 Δομημένος προγραμματισμός έναντι αντικειμενοστρεφούς

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

ΗΥ101: Εισαγωγή στην Πληροφορική

ΗΥ101: Εισαγωγή στην Πληροφορική Δρ. Χρήστος Ηλιούδης Τι είναι η ; Η διαδικασία του προγραμματισμού είναι μία πολύπλοκη διαδικασία που συχνά οδηγεί σε λάθη (πραγματοποιείται από ανθρώπους!!!). Τα προγραμματιστικά λάθη λέγονται bugs και

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse ΕΡΓΑΣΤΗΡΙΟ 16 Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse 1. Δημιουργήστε ένα νέο project και ενσωματώστε το πρόγραμμα Fibonacci.java. 2. Βεβαιωθείτε ότι μεταγλωττίζει σωστά. Σχήμα 1: Adding

Διαβάστε περισσότερα

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

Μεθοδολογία Προγραμματισμού Μεθοδολογία Προγραμματισμού Εισαγωγή στo συναρτησιακό προγραμματισμό με Java Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο Ν Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας)

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi ee.duth.

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth. Το πρόγραμμα HelloWorld.java Σχόλια στη Java HelloWorld Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Το πρόγραμμα HelloWorld 1 Java Το πρόγραμμα HelloWorld 2 Σχόλια στη Java ΗγλώσσαJava υποστηρίζει

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

Ελέγξτε την ταινία σας

Ελέγξτε την ταινία σας Ελέγξτε την ταινία σας Σε αυτές τις ασκήσεις, θα κάνετε εισαγωγή μιας ταινίας και θα χρησιμοποιήσετε τις επιλογές που παρουσιάστηκαν στο μάθημα. Άσκηση 1: Εισαγωγή αρχείου ταινίας 1. Κάντε κλικ στη μικρογραφία

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

Αναπαραγωγή με αρχεία ήχου

Αναπαραγωγή με αρχεία ήχου Αναπαραγωγή με αρχεία ήχου Ανοίγει η παρουσίαση και εμφανίζεται η διαφάνεια τίτλου, "Πειράματα με αρχεία ήχου". Άσκηση 1: Εισαγωγή ήχου για συνεχή αναπαραγωγή Βήμα 1: Εισαγωγή ήχου Στη διαφάνεια 1, με

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Ισότητα Strings class StringTest public static void main(string args[]) String x1 = "java"; String y1 = "java"; System.out.println("1.

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java Είσοδος Χρησιμοποιούμε την κλάση Scanner της Java import java.util.scanner; Αρχικοποιείται με το ρεύμα εισόδου: Scanner in = new Scanner(System.in);

Διαβάστε περισσότερα

Η Απάντηση. Φύλλο Εργασίας. Μηνύματα

Η Απάντηση. Φύλλο Εργασίας. Μηνύματα Η Απάντηση Φύλλο Εργασίας Στο βιβλίο The Hitchhiker s Guide to the Galaxy, περιγράφεται μια υπερευφυής φυλή η οποία αποφασίζει να φτιάξει έναν υπολογιστή που θα δώσει οριστικά την απάντηση για το νόημα

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Το if-else statement Το if-else statement δουλεύει καλά όταν στο condition θέλουμε να περιγράψουμε μια επιλογή με δύο πιθανά ενδεχόμενα.

Διαβάστε περισσότερα

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,

Διαβάστε περισσότερα

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1 Εισαγωγή

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

Κατανεμημένα Συστήματα

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ CLAROLINE Κατάλογος περιεχομένων Εγγραφή μαθητή στο Claroline...2 Εγγραφή σε μάθημα...3 Τα μαθήματά μου...4 Αλλαγή του προφίλ μου (Manage my account)...4

Διαβάστε περισσότερα

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

Διαβάστε περισσότερα

Αλλαγή προσανατολισμού εγγράφου σε κατακόρυφο ή οριζόντιο, αλλαγή μεγέθους σελίδας

Αλλαγή προσανατολισμού εγγράφου σε κατακόρυφο ή οριζόντιο, αλλαγή μεγέθους σελίδας 3.3.3.1 Αλλαγή προσανατολισμού εγγράφου σε κατακόρυφο ή οριζόντιο, αλλαγή μεγέθους σελίδας Συνήθως εκτυπώνουμε κατά τη μακρόστενη μεριά της σελίδας. Αυτού του είδους ο προσανατολισμός ονομάζεται κατακόρυφος.

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II Strings Η κλάση String είναι προκαθορισμένη κλάση της Java που μας επιτρέπει να χειριζόμαστε αλφαριθμητικά. Ο τελεστής + μας επιτρέπει

Διαβάστε περισσότερα

Περιεχόμενα Πώς να χρησιμοποιήσετε το βιβλίο... 7 Αντί προλόγου... 9 Κεφάλαιο 1: Κεφάλαιο 2: Κεφάλαιο 3: Κεφάλαιο 4: Κεφάλαιο 5: Πώς να δημιουργήσω το Προφίλ μου και να γίνω μέλος στο Facebook;... 15 Τι

Διαβάστε περισσότερα

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία Mεταγλωττιστές 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex Σκοπός: Το μάθημα αυτό αναφέρεται: στις κανονικές εκφράσεις στην δομή και το περιεχόμενο του αρχείου-εισόδου του flex Γενικά Θεωρία Κατά την

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Τρίτη Διάλεξη Εντολές Επιλογής και Επανάληψης Εντολές επιλογής Εντολή if Η πιο απλή μορφή της if συντάσσεται ως εξής: if ( συνθήκη ) Οι εντολές μέσα στα άγκιστρα αποτελούν

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

Διαβάστε περισσότερα

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

Διαβάστε περισσότερα

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή:

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή: Η Απάντηση Ενδεικτικές Απαντήσεις Φύλλου Εργασίας 1 22 Ιουλίου 2016 13:16 Μηνύματα 1. Πληκτρολογήστε την εντολή: print("καλημέρα.") Αυτό είναι το πρώτο σας πρόγραμμα. Εκτελέστε το για να δείτε τι θα συμβεί.

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εκφώνηση: Δημιουργείστε εφαρμογή σε Java Swing με χρήση του IDE NetBeans όπου θα παρουσιάζεται ποιο κουμπί πατήθηκε. Η εφαρμογή θα μοιάζει ως εξής: Πρώτο Βήμα: Αρχική

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

B. Ενσωμάτωση Ιθαγενών Μεθόδων

B. Ενσωμάτωση Ιθαγενών Μεθόδων B. Ενσωμάτωση Ιθαγενών Μεθόδων Στο τέλος αυτού του κεφαλαίου θα μπορείτε: Να δημιουργείτε κώδικα Java που θα φορτώνει βιβλιοθήκες και θα καλεί ιθαγενείς μεθόδους (native methods). Να χρησιμοποιείτε τη

Διαβάστε περισσότερα

Οδηγός Βήμα-Βήμα για να εγκαταστήσετε τα Windows 7 στον Η/Υ σας

Οδηγός Βήμα-Βήμα για να εγκαταστήσετε τα Windows 7 στον Η/Υ σας Οδηγός Βήμα-Βήμα για να εγκαταστήσετε τα Windows 7 στον Η/Υ σας ΒΗΜΑ 1 Εφεδρικό Αντίγραφο Ασφαλείας ΠΡΟΣΟΧΗ: Πριν εφαρμόσουμε τον οδηγό εγκατάστασης στον Η/Υ μας κρατούμε αντίγραφα ασφαλείας των σημαντικών

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου 49 Διδακτικές ενότητες 6.1 Γλώσσες και εργαλεία προγραμματισμού 6.2 Σύγχρονα προγραμματιστικά περιβάλλοντα Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν την ανάγκη ύπαρξης τόσο

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή

Διαβάστε περισσότερα

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε

Διαβάστε περισσότερα

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο FrontPage 2003 Πρακτικός Οδηγός Χρήσης Το FrontPage είναι ένα πρόγραμμα δημιουργίας ιστοσελίδων και δικτυακών τόπων που επιτρέπει το σχεδιασμό ιστοσελίδων μέσα από γραφικό περιβάλλον αλλά και την ταυτόχρονη

Διαβάστε περισσότερα

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;... Περιεχόμενα Αντί προλόγου... 7 Πώς να χρησιμοποιήσετε το βιβλίο... 13 Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...15 Κεφάλαιο 2: Τι βλέπω στην οθόνη μου όταν ολοκληρώσω τη δημιουργία του Προφίλ

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0 Δομές Δεδομένων 5ο εξάμηνο Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse v1.0 Τις σημειώσεις κράτησαν και διαμόρφωσαν σε word οι: Κονδύλη Γαλήνη, ΑΜ 5576 Μάλλιου Χριστίνα, ΑΜ 5413

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

Τώρα ήρθε η ώρα για να αποκτήσετε το βασικό εργαλείο ανάπτυξης web εφαρμογών το GGTS.

Τώρα ήρθε η ώρα για να αποκτήσετε το βασικό εργαλείο ανάπτυξης web εφαρμογών το GGTS. Groovy and Grails Tool Suite Τώρα ήρθε η ώρα για να αποκτήσετε το βασικό εργαλείο ανάπτυξης web εφαρμογών το GGTS. Πηγαίνετε στο παρακάτω link, GGTS: http://spring.io/tools/ggts Επιλέξτε να δείτε όλες

Διαβάστε περισσότερα

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ Python & NLTK: Εισαγωγή Εισαγωγή Γιατί Python? Παρουσίαση NLTK Πηγές και χρήσιμα εργαλεία Φροντιστήριο σε Python Στο φροντιστήριο: Εισαγωγή στην Python Ζητήματα προγραμματισμού για

Διαβάστε περισσότερα

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4» 1. Τι φαντάζεστε ότι θα κάνει η παρακάτω εντολή: print("καλημέρα.") εκτελέστε την στο περιβάλλον Python Shell 2. γράψτε μια παρόμοια π.χ. print("το όνομα μου είναι Μποντ.") 3. Γράψτε μία εντολή που να

Διαβάστε περισσότερα

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες Σκοπός της 3ης άσκησης είναι να μάθουμε να φτιάχνουμε και να προσπελαύνουμε λίστες, να δούμε τι διαφορά έχουν από τα tuples και επίσης πώς μπορούμε

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις (Functions) Οι βασικές λειτουργικές ενότητες ενός προγράμματος C Καλούνται με ορίσματα που αντιστοιχούνται σε

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ Σχολή Θετικών Επιστημών και Τεχνολογίας Τμήμα Επιστήμης και Τεχνολογίας Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ & ΨΗΦΙΑΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ Αρχές Τηλ/ων Συστημάτων Εργαστήριο 2 ο : Φάσμα σημάτων - AWGN Βοηθητικές

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών Πρόγραμμα σε γλώσσα μηχανής του ΕΚΥ Θέση μνήμης Περιεχόμενα μνήμης Εντολή (assembly) 0 0001 000000000011 lda 3 1 0011 000000000100 ada

Διαβάστε περισσότερα

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Τετάρτη, 30 Οκτωβρίου 2013 Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Λύστε στο Visual Basic Express 2010 τις παρακάτω ασκήσεις: 1. Να δημιουργήσετε ένα νέο Project του είδους Console

Διαβάστε περισσότερα

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε

Διαβάστε περισσότερα

Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς

Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς 3.3.1.1 Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς Γραμματοσειρές Η λέξη γραμματοσειρά αναφέρεται στο στυλ που εμφανίζονται τα γράμματα. Παρακάτω ακολουθούν κάποια παραδείγματα,

Διαβάστε περισσότερα

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

Δοκιμή και Αποσφαλμάτωση Testing and Debugging Δοκιμή και Αποσφαλμάτωση Testing and Debugging XVI-1 Ο μεταγλωττιστής εντοπίζει τα συντακτικά λάθη ενός προγράμματος. Δεν είναι όμως σε θέση να εντοπίσει λάθη στη λογική του προγράμματος. δεδομένα πρόγραμμα

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II HelloWorld.java class HelloWorld public static void main(string args[]) // print message System.out.println( Hello world! ); javac HelloWorld.java

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Μαθήματα από τα εργαστήρια ΕΡΓΑΣΤΗΡΙΟ 1 Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Έλεγχος ισότητας για Strings: Διαβάζουμε το String option και θέλουμε ένα loop να συνεχίσει

Διαβάστε περισσότερα

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1 HelloWorld Παύλος Εφραιμίδης Java Το πρόγραμμα HelloWorld 1 Το πρόγραμμα HelloWorld.java Σχόλια στη Java /** * The HelloWorld class */ class HelloWorld { public static void main(string[] args) { System.out.println("Hello

Διαβάστε περισσότερα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να καταλάβουν την διαφορά ανάμεσα σε τοπικές και καθολικές μεταβλητές. Nα κάνουν αποσφαλμάτωση

Διαβάστε περισσότερα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

Διαβάστε περισσότερα

Hase οδηγίες χρήσης.

Hase οδηγίες χρήσης. Hase οδηγίες χρήσης. Το Hase είναι ένα πρόγραμμα προσομοίωσης που έχει αναπτυχθεί στο πανεπιστήμιο του Εδιμβούργου (http://www.icsa.inf.ed.ac.uk/research/groups/hase/) και μπορεί να χρησιμοποιηθεί για

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα

Διαβάστε περισσότερα