Χρησιμοποιώντας Τύπους Δεδομένων. Διαφάνειες από τους Robert Sedgewick και Kevin Wayne Ι-1

Σχετικά έγγραφα
2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

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

Mεταβλητές (variables) και Σταθερές (constants)

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

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

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

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

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

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

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

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

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

Δεδομένα, τελεστές, είσοδος/έξοδος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

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

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

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

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

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

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

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

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

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

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

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

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

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

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

Κλάσεις και Αντικείµενα

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

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

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

ΕΠΛ Φροντιστήριο 3

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

API: Applications Programming Interface

ΕΠΛ131 Αρχές Προγραμματισμού

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

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

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 2: Βασικές εντολές

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

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

ΕΠΛ 131 Φροντιστήριο 2

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Τύποι δεδομένων, τελεστές, μεταβλητές

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Βασικά της γλώσσας JAVA

ΕΠΛ131 Αρχές Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

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

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΔΙΑΡΘΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ

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

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

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

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

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

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Εικόνα. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 05-1

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

Transcript:

Χρησιμοποιώντας Τύπους Δεδομένων Ι-1

Θεμελιώδη για Προγραμματισμό Οποιοδήποτε πρόγραμμα το οποίο θα θέλεις να γράψεις αντικείμενα Για δημιουργία των δικών σας τύπων δεδομένων Συναρτήσεις και ενότητες γραφικά, ήχος, και εικόνα Ε/Ε πίνακες Συνθήκες and επαναλήψεις Μαθηματικά Κείμενο Ε/E Αρχέγονοι τύποι δεδομένων Προτάσεις ανάθεσης Ενότητα ΙΙΙ 2

Τύποι Δεδομένων Τύπος Δεδομένων. Ένα σύνολο από τιμές και λειτουργίες σε αυτές τις τιμές. Βασικοί τύποι. Λειτουργίες που μεταφράζονται άμεσα σε εντολές μηχανής Τύπος Δεδομένων boolean Σύνολο τιμών true, false Λειτουργίες not, and, or, xor int double -2 31 to 2 31-1 any of 2 64 possible reals add, subtract, multiply add, subtract, multiply Εμείς θέλουμε να γράψουμε προγράμματα τα οποία επεξεργάζονται άλλους τύπους δεδομένων. Χρώματα, εικόνες, συμβολοσειρές, ροές εισόδου, Πολύπλοκους αριθμούς, διανύσματα, πίνακες, πολυώνυμα, Σημεία, πολύγωνα, φορτισμένα σωματίδια, ουράνια σώματα, 3

Αντικείμενα Αντικείμενο. Κρατά μία τιμή τύπου δεδομένων. Το όνομα της μεταβλητής αναφέρεται στο αντικείμενο. Επιρροή. Δίνει τη δυνατότητα σε εμάς να δημιουργούμε τους δικούς μας τύπους δεδομένων, να ορίζουμε λειτουργίες σε αυτούς, και να τους ενσωματώσουμε στα προγράμματά μας. Τύπος Δεδομένων Color Σύνολο Τιμών 24 bits Λειτουργίες get red component, brighten Picture 2D πίνακας χρωμάτων get/set color of pixel (i, j) String Ακολουθία χαρακτήρων length, substring, compare ΑΝΑΠΑΡΙΣΤΟΥΝ ΤΟΝ ΠΡΑΓΜΑΤΙΚΟ ΚΟΣΜΟ 4

Κατασκευαστές και Μέθοδοι Για να κατασκευάσετε ένα νέο αντικείμενο: Χρησιμοποιήστε τη λέξη κλειδί new και το όνομα του τύπου δεδομένων. Για να εφαρμόσετε μία λειτουργία: Χρησιμοποιήστε το όνομα του αντικειμένου, τον «dot» τελεστή, και το όνομα της μεθόδου. 5

Βασικοί τύποι vs. Αναφορές Βασικοί τύποι. Λειτουργίες που μεταφράζονται άμεσα σε εντολές μηχανής int, long, double, boolean, char, short, byte, float Οι πραγματικές τιμές αποθηκεύονται στη μεταβλητή Αναφορές. Οι τύποι των αναφορών είναι πίνακες και αντικείμενα String, int[], 6

7 Πως η java αποθηκεύει τους βασικούς τύπους Οι μεταβλητές μπορούν να παρομοιαστούν με σταθερού μεγέθους φλιτζάνια. Οι βασικοί τύποι είναι αρκετά μικροί και χωρούν στο φλιτζάνι.

Πως η java αποθηκεύει τα αντικείμενα Τα αντικείμενα είναι πολύ μεγάλα για να ταιριάξουν σε μία μεταβλητή. Αποθηκεύονται κάπου αλλού. Η μεταβλητή αποθηκεύει έναν αριθμό που εντοπίζει το αντικείμενο. 8

Πως η java αποθηκεύει τα αντικείμενα Τα αντικείμενα είναι πολύ μεγάλα για να ταιριάξουν σε μία μεταβλητή. Αποθηκεύονται κάπου αλλού. Η μεταβλητή αποθηκεύει έναν αριθμό που εντοπίζει το αντικείμενο. 9

Αναφορές Η θέση του αντικειμένου ονομάζεται αναφορά Ο τελεστής == συγκρίνει τις αναφορές Ισχύει ότι shiloh1 == shiloh2 ; OXI 10

Αναφορές 11

Αναφορές 12

Αναφορές 13

Αναφορές Χρησιμοποιώντας τον τελεστή = ενημερώνονται οι αναφορές 14

Αναφορές Χρησιμοποιώντας τον τελεστή = ενημερώνονται οι αναφορές 15

Αναφορές Ακολουθώντας τις κατευθύνσεις για να οδηγηθείς στο σπίτι Μετακινώντας ένα έπιπλο Οι παραπάνω ενέργειες είναι ανάλογες με: Ακολουθώντας την αναφορά σε ένα αντικείμενο Αλλάζοντας τα πεδία σε ένα αντικείμενο 16

Διάκριση ανάμεσα σε βασικούς τύπους και αντικείμενα Οι τιμές των βασικών τύπων δεδομένων είναι αδιάσπαστες και έχουμε απευθείας πρόσβαση στις τιμές μεταβλητών τέτοιων τύπων Στις κλήσεις συναρτήσεων, οι τιμές μεταβλητών βασικών τύπων δεδομένων αντιγράφονται τοπικά, χωρίς να επηρεάζονται οι ίδιες οι μεταβλητές Πέρασμα δια τιμής (call by value) Το ίδιο συμβαίνει και σε εντολές ανάθεσης, όπου οι τιμές αντιγράφονται Μεταβλητές βασικών τύπων δεδομένων, δημιουργούνται και καταργούνται αυτόματα Στατική διαχείριση μνήμης κανόνες εμβέλειας ονομασιών 17

Διάκριση ανάμεσα σε βασικούς τύπους και αντικείμενα Τα αντικείμενα αποτελούν νέους τύπους δεδομένων, και μπορούν να έχουν σύνθετη εσωτερική δομή, η οποία αναπαριστά τα διάφορα χαρακτηριστικά/ιδιότητες τους, κτλ. Υπάρχουν σημαντικοί λόγοι γιατί δεν πρέπει να γνωρίζουμε, δηλαδή να έχουμε απευθείας πρόσβαση στην εσωτερική δομή των αντικειμένων Ενδεικνυόμενη απόκρυψη πληροφοριών (information hiding) Συνεπώς τα αντικείμενα συνιστούν Αφηρημένους Τύπους Δεδομένων (ΑΤΔ) Abstract Data Types (ADT) Στιγμιότυπα (τύπων) αντικειμένων, δηλαδή συγκεκριμένες περιπτώσεις δεδομένου τύπου αντικειμένου, κατασκευάζονται με δυναμικό τρόπο ύστερα από συγκεκριμένο αίτημα μέσω του τελεστή new. Δυναμική διαχείριση μνήμης Παρασκηνιακά, ο σκουπιδιάρης (garbage collector) ανακτά τη μνήμη όταν συγκεκριμένο αντικείμενο πάψει να χρησιμοποιείται, δηλαδή κανένα μέρος του προγράμματος δεν αναφέρεται στο εν λόγω αντικείμενο 18

Διάκριση ανάμεσα σε βασικούς τύπους και αντικείμενα Τα αντικείμενα ονομάζονται τύποι αναφοράς (reference types) διότι το τι παρέχεται είναι η διεύθυνση του χώρου της μνήμης που κατανέμεται για την κατασκευή τους δεν αντιγράφονται οι (σύνθετες) τιμές τους σε κλήσεις συναρτήσεων, εντολές ανάθεσης, κτλ. το τι αντιγράφεται/ανατίθεται είναι οι διευθύνσεις τους, οι οποίες συνιστούν τις αναφορές προς τα αντικείμενα Πέρασμα διά διευθύνσεως (call by reference) Οι πίνακες αποτελούν ενσωματωμένα αντικείμενα και χειρίζονται με τον ίδιο τρόπο call by reference Εάν πολλαπλά σημεία του προγράμματος αναφέρονται στο ίδιο συγκεκριμένο αντικείμενο (αποτελούν δείκτες προς το αντικείμενο multiple aliases) τυχόν τροποποιήσεις στο εν λόγω αντικείμενο, επηρεάζουν όλα τα σημεία αναφοράς. 19

Παράδειγμα: Συνάρτηση για την εναλλαγή των περιεχομένων δύο μεταβλητών τύπου double. public static void swap (double x, double y) {double temp = x; x = y; y = temp; } double num1 = 1.5, num2 = 3.8; swap(num1, num2); Ποιές είναι οι τιμές των μεταβλητών num1 και num2 μετά την εκτέλεση της πιο πάνω κλήσης της συνάρτησης swap; 20

num1 num2 1.5 3.8 swap x y temp 21

num1 num2 1.5 3.8 swap x y 1.5 3.8 temp 22

num1 num2 1.5 3.8 swap x 1.5 y 3.8 temp 1.5 23

num1 num2 1.5 3.8 swap x 3.8 y 3.8 temp 1.5 24

num1 num2 1.5 3.8 swap x 3.8 y 1.5 temp 1.5 25

num1 num2 1.5 3.8 Παρατηρήσεις 1. Οι τιμές των μεταβλητών num1 και num2 δεν έχουν εναλλαγεί 2. Η εναλλαγή έγινε στις τιμές των τοπικών μεταβλητών, x και y, της swap με τη χρήση της τοπικής βοηθητικής μεταβλητής temp 3. Οι τοπικές μεταβλητές παύουν να υφίστανται με την ολοκλήρωση της εκτέλεσης της κλήσης της swap 26

Αναδιατύπωση της swap Ποια είναι η λειτουργία της; public static void swap (double[] x) {for (int i = 0; i < x.length-1; i=i+2){ double temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; } double[] table = {1.5, 3.8}; swap(table); Ποιές είναι οι τιμές των εισόδων της table μετά την εκτέλεση της πιο πάνω κλήσης της συνάρτησης swap; 27

table 1.5 3.8 swap x temp i 0 28

table 1.5 3.8 swap x temp 1.5 i 0 29

table 3.8 3.8 swap x temp 1.5 i 0 30

table 3.8 1.5 swap x temp 1.5 i 0 31

table 3.8 1.5 swap x temp 1.5 i 2 32

table 3.8 1.5 Παρατηρήσεις 1. Η εναλλαγή στις τιμές των table[0] και table[1] έχει επιτευχθεί, διότι η swap είχε πρόσβαση στην μεταβλητή table 2. Όταν εμπλέκονται τύποι αναφοράς, π.χ. η table, αφού όλοι οι πίνακες είναι τύποι αναφοράς, το όρισμα (table) ταυτίζεται με την παράμετρο (x). Αυτή είναι η σημασιολογία του περάσματος διά διευθύνσεως/αναφοράς. 33

table 3.8 1.5 y 0.5 pair double y = 0.5; double[] pair = table; pair[0] = y; double[] tab = new double[2]; tab[0] = table[0]; tab[1] = table[1]; 34

table 0.5 1.5 y 0.5 pair tab double y = 0.5; double[] pair = table; pair[0] = y; double[] tab = new double[2]; tab[0] = table[0]; tab[1] = table[1]; 35

table 0.5 1.5 y 0.5 pair table == pair? NAI tab tab == table? OXI 0.5 1.5 y == tab[0]? NAI double y = 0.5; double[] pair = table; pair[0] = y; double[] tab = new double[2]; tab[0] = table[0]; tab[1] = table[1]; 36

Μέθοδοι Αναφοράς Δύο Κατασκευαστές (Reference Methods) save width Picture height Η εσωτερική αναπαράσταση των pictures και colors δεν μας αφορά!! show getred get Ένας Κατασκευαστής set brighter getgreen Color getblue darker tostring equals 37

Έστω ότι η εσωτερική δομή των pictures είναι 2D πίνακες με στοιχεία colors, δηλαδή αναφορές σε colors 38

Downscaling: 4 pixels στο source αντιστοιχούν σε 1 στο target Στο κάτω παράδειγμα τα 4 εμπλεκόμενα κοινά colors ανάμεσα στο source και το target αναφέρονται και από τα δύο pictures, και τυχόν τροποποίησή των αντικειμένων αυτών μέσω του ενός picture επηρεάζει και το άλλο picture source target 39

Up scaling: 1 pixel στο source αντιστοιχεί σε 4 στο target Στο κάτω παράδειγμα τα 4 colors του source καταλήγουν να έχουν 5 αναφορές το καθένα, μια από το source και τέσσερις από το target - και πάλι τυχόν τροποποίηση των αντικειμένων αυτών μέσω του ενός picture επηρεάζει και το άλλο picture target source 40

Επεξεργασία Εικόνας

Color Τύπος Δεδομένων Χρώμα. Η αίσθηση του ματιού από την ηλεκτρομαγνητική ακτινοβολία. Σύνολο τιμών. [RGB αναπαράσταση] 256 3 δυνατές τιμές, οι οποίες ποσοτικοποιούν το μέγεθος του κόκκινου, πράσινου και μπλε, το καθένα σε κλίμακα από το 0 στο 255. R G B Χρώμα 255 0 0 0 255 0 0 0 255 255 255 255 0 0 0 255 0 255 105 105 105 42

Τύπος Δεδομένων Color Χρώμα. Η αίσθηση του ματιού από την ηλεκτρομαγνητική ακτινοβολία. Σύνολο τιμών. [RGB αναπαράσταση] 256 3 δυνατές τιμές, οι οποίες ποσοτικοποιούν το μέγεθος του κόκκινου, πράσινου και μπλε, το καθένα σε κλίμακα από το 0 στο 255. API. Application Programming Interface. http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color.html 43

Τα τετράγωνα του Albers Josef Albers. Επαναστάτησε τον τρόπο με τον οποίο οι άνθρωποι σκέπτονται για τα χρώματα. Φόρος τιμής στα τετράγωνα του Josef Albers (1949-1975) 44

Τα τετράγωνα του Albers Josef Albers. Επαναστάτησε τον τρόπο με τον οποίο οι άνθρωποι σκέπτονται για τα χρώματα. blue gray % java AlbersSquares 9 90 166 100 100 100 45

Χρησιμοποιώντας χρώματα στη Java import java.awt.color; Για να έχουμε πρόσβαση στη βιβλιοθήκη Color public class AlbersSquares { public static void main(string[] args) { int r1 = Integer.parseInt(args[0]); int g1 = Integer.parseInt(args[1]); int b1 = Integer.parseInt(args[2]); Color c1 = new Color(r1, g1, b1); int r2 = Integer.parseInt(args[3]); int g2 = Integer.parseInt(args[4]); int b2 = Integer.parseInt(args[5]); Color c2 = new Color(r2, g2, b2); StdDraw.setPenColor(c1); StdDraw.filledSquare(.25,.5,.2); StdDraw.setPenColor(c2); StdDraw.filledSquare(.25,.5,.1); Πρώτο χρώμα Δεύτερο χρώμα Πρώτο τετράγωνο } } StdDraw.setPenColor(c2); StdDraw.filledSquare(.75,.5,.2); StdDraw.setPenColor(c1); StdDraw.filledSquare(.75,.5,.1); Δεύτερο τετράγωνο 46

Μονόχρωμη Φωτεινότητα Μονόχρωμη φωτεινότητα. Αποτελεσματική φωτεινότητα του χρώματος. NTSC φόρμουλα: Y = 0.299r + 0.587g + 0.114b. import java.awt.color; public class Luminance { } public static double lum(color c) { int r = c.getred(); int g = c.getgreen(); int b = c.getblue(); return.299*r +.587*g +.114*b; } 47

Συμβατότητα χρώματος Ερώτηση: Ποια χρώματα γραμματοσειράς θα είναι πιο ευανάγνωστα με ποια χρώματα φόντου σε οθόνες ηλεκτρονικών υπολογιστών και οθόνες κινητών τηλεφώνων; Απάντηση: Βασικός κανόνας: η διαφορά στη φωτεινότητα θα πρέπει να είναι 128. 256 208 105 47 28 14 public static boolean compatible(color a, Color b) { return Math.abs(lum(a) - lum(b)) >= 128.0; } 48

Αποχρώσεις του Γκρι Απόχρωση του γκρι. Όταν και οι τρεις τιμές, R, G, και B, είναι οι ίδιες, το αποτέλεσμα του χρώματος είναι στην απόχρωση του γκρι από 0 (μαύρο) σε 255 (άσπρο). Μετατροπή σε απόχρωση του γκρι. Χρησιμοποιήστε φωτεινότητα για τον προσδιορισμό της τιμής. public static Color togray(color c) { int y = (int) Math.round(lum(c)); Color gray = new Color(y, y, y); return gray; } round double to nearest int Μέθοδοι στην ίδια Βιβλιοθήκη - Luminance Τελικό συμπέρασμα: Γράφουμε προγράμματα τα οποία χειραγωγούν το χρώμα. 49

OOP Πλαίσιο για Χρώμα Δυνατή αναπαράσταση της μνήμης. D0 D1 D2 D3 D4 D5 D6 D7 D8 255 0 255 0 0 0 105 105 105 magenta A0 D0 B0 D6 gray Διεύθυνση μνήμης («δείκτης") Η αναφορά αντικειμένου είναι ανάλογη με το όνομα μεταβλητής. Μπορούμε να χειραγωγήσουμε την τιμή που έχει. Μπορούμε να την περάσουμε σε (ή να την επιστρέψουμε από) μία μέθοδο. 50

Τύπος Δεδομένων Picture Raster γραφικά. Η βάση για την επεξεργασία εικόνας. (0, 0) j Σύνολο τιμών. 2D πίνακας από Color αντικείμενα (εικονοστοιχεία - pixels). i API. 51

Επεξεργασία Εικόνας: Grayscale Φίλτρο Στόχος. Να μετατραπεί το χρώμα της εικόνας σε απόχρωση του γκρι σύμφωνα με τον τύπο φωτεινότητας. import java.awt.color; public class Grayscale { public static void main(string[] args) { Picture pic = new Picture(args[0]); for (int i = 0; i < pic.width(); i++) { for (int j = 0; j < pic.height(); j++) { Color color = pic.get(i, j); Color gray = Luminance.toGray(color); pic.set(i, j, gray); } } pic.show(); } } 52

Επεξεργασία Εικόνας: Grayscale Φίλτρο Στόχος. Να μετατραπεί το χρώμα της εικόνας σε απόχρωση του γκρι σύμφωνα με τον φόρμουλα φωτεινότητας. mandrill.jpg % java Grayscale mandrill.jpg 53

Επεξεργασία Εικόνας: Φίλτρο κλιμάκωσης Στόχος: Συρρίκνωση ή μεγέθυνση μίας εικόνας στο επιθυμητό μέγεθος. Κλιμάκωση προς τα κάτω (downscaling): Να συρρικνώσετε, διαγράφοντας τις μισές γραμμές και στήλες. Κλιμάκωση προς τα πάνω (upscaling): Να μεγαλώσετε, αντικαθιστώντας κάθε εικονοστοιχείο με 4 αντίγραφα. 54

Επεξεργασία Εικόνας: Φίλτρο κλιμάκωσης Στόχος. Συρρίκνωση ή μεγέθυνση μίας εικόνας στο επιθυμητό μέγεθος. Ομοιόμορφη στρατηγική. Να μετατρέψετε από w s -επί-h s σε w t -επί- h t : Κλιμάκωση του δείκτη γραμμής σε w s / w t. Κλιμάκωση του δείκτη στήλης σε h s / h t. Θέστε το χρώμα του εικονοστοιχείου (i, j) στην εικόνα στόχο στο χρώμα του εικονοστοιχείου (i w s / w t, j h s / h t ) στην πηγαία εικόνα. j h s / h t j i w s / w t? i πηγαία εικόνα (w s χh s ) εικόνα στόχος (w t χh t ) 55

Επεξεργασία Εικόνας: Φίλτρο κλιμάκωσης import java.awt.color; public class Scale { public static void main(string args[]) { String filename = args[0]; int w = Integer.parseInt(args[1]); int h = Integer.parseInt(args[2]); Picture source = new Picture(filename); Picture target = new Picture(w, h); for (int ti = 0; ti < w; ti++) { for (int tj = 0; tj < h; tj++) { int si = ti * source.width() / w; int sj = tj * source.height() / h; Color color = source.get(si, sj); target.set(ti, tj, color); } } source.show(); target.show(); } } 56

Επεξεργασία Εικόνας: Φίλτρο κλιμάκωσης Φίλτρο κλιμάκωσης. Δημιουργεί δύο Picture αντικείμενα και δύο παράθυρα. mandrill.jpg % java Scale 400 200 mandrill.jpg 57

Περισσότερες επιπτώσεις στην επεξεργασία εικόνας RGB διαχωρισμός χρώματος swirl φίλτρο wave φίλτρο glass φίλτρο Sobel εντοπισμός ακμής 58

Επεξεργασία κειμένου

Τύπος δεδομένων String (συμβολοσειρές) Τύπος δεδομένων String: Αποτελεί τη βάση για επεξεργασία κειμένου. Σύνολο τιμών: Ακολουθία από Unicode χαρακτήρες. API. http://java.sun.com/j2se/1.5.0/docs/api/java/lang/string.html

Τυπικός κώδικας για επεξεργασία συμβολοσειρών 61

Εύρεση Γονιδίου Προ-γονιδιακή περίοδος. Ακολουθία ενός ανθρώπινου γονιδιώματος. Μετά-γονιδιακή περίοδος. Ανάλυση των δεδομένων και κατανόηση της δομής. Γονιδιωματική. Τα γονιδιώματα αντιπροσωπεύονται ως συμβολοσειρές σε σχέση με το αλφάβητο {A, C, T, G} Γονίδιο. Μία υποσυμβολοσειρά του γονιδιώματος το οποίο αντιπροσωπεύει μία λειτουργική μονάδα. Προηγείται από ATG. [κωδικόνιο έναρξης] Πολλαπλάσια των 3 νουκλεοτίδια. [κωδικόνιο εκτός έναρξης και τερματισμού] Ακολουθείται από TAG, TAA, ή TGA. [κωδικόνιο τερματισμού] Στόχος: Να βρούμε όλα τα γονίδια 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 A T A G A T G C A T A G C G C A T A G C T A G A T G T G C T A G C έναρξη γονίδιο λήξη γονίδιο

Εύρεση γονιδίου: Αλγόριθμος Αλγόριθμος: Σαρώστε από αριστερά προς τα δεξιά εντός του γονιδιώματος. Εάν εντοπισθεί το κωδικόνιο έναρξης, τότε θέστε beg στο δείκτη i. Εάν εντοπισθεί το κωδικόνιο τερματισμού και η υποσυμβολοσειρά είναι πολλαπλάσια του 3 Γονίδιο εξόδου Επαναφορά του beg στο -1 start multiple of 3 stop

Εύρεση γονιδίου: Υλοποίηση public class GeneFind { public static void main(string[] args) { String start = args[0]; String stop = args[1]; String genome = StdIn.readAll(); } } int beg = -1; for (int i = 0; i < genome.length() - 2; i++) { String codon = genome.substring(i, i+3); if (codon.equals(start)) beg = i; if (codon.equals(stop) && beg!= -1) { String gene = genome.substring(beg+3, i); if (gene.length() % 3 == 0) { StdOut.println(gene); beg = -1; } } % more genometiny.txt } ATAGATGCATAGCGCATAGCTAGATGTGCTAGC % java GeneFind ATG TAG < genometiny.txt CATAGCGCA TGC 64

OOP Πλαίσιο για συμβολοσειρές Δυνατή αναπαράσταση της μνήμης για μία συμβολοσειρά. genome = "aacaagtttacaagc"; genome D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE A0 A1 a a c a a g t t t a c a a g c D0 15 Διεύθυνση μνήμης μήκος 65

OOP Πλαίσιο για συμβολοσειρές Πιθανή αναπαράσταση της μνήμης για μία συμβολοσειρά. genome = "aacaagtttacaagc"; genome D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE A0 A1 a a c a a g t t t a c a a g c D0 15 s t Διεύθυνση μνήμης μήκος s = genome.substring(1, 5); B0 B1 B2 B3 t = genome.substring(9, 13); D1 4 D9 4 s και t είναι διαφορετικές συμβολοσειρές οι οποίες διαμοιράζονται την ίδια τιμή "acaa" (s == t) is false, but (s.equals(t)) is true. Συγκρίνει δείκτες Συγκρίνει ακολουθίες χαρακτήρων 66

OOP Σύνοψη Αντικείμενο. Κρατά μία τιμή τύπου δεδομένων. Το όνομα της μεταβλητής αναφέρεται στο αντικείμενο. Στη Java, τα προγράμματα χειρίζονται τις αναφορές στα αντικείμενα. Εξαίρεση: αρχέγονοι τύποι, π.χ., boolean, int, double. Τύποι αναφορών: String, Picture, Color, πίνακες, οτιδήποτε άλλο. Καθαρός OOP : η γλώσσα δεν θα πρέπει να έχει ξεχωριστούς αρχέγονους τύπους. Γενικό συμπέρασμα: Γράψαμε προγράμματα τα οποία επεξεργάζονται χρώματα, εικόνες και συμβολοσειρές. Την επόμενη φορά. Θα γράψουμε προγράμματα τα οποία θα επεξεργάζονται τα δικά μας abstractions. 67

Επιπλέον Διαφάνειες

Color Separation import java.awt.color; public class ColorSeparation { public static void main(string args[]) { Picture pic = new Picture(args[0]); int width = pic.width(); int height = pic.height(); Picture R = new Picture(width, height); Picture G = new Picture(width, height); Picture B = new Picture(width, height); } } for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { Color c = pic.get(i, j); int r = c.getred(); int g = c.getgreen(); int b = c.getblue(); R.set(i, j, new Color(r, 0, 0)); G.set(i, j, new Color(0, g, 0)); B.set(i, j, new Color(0, 0, b)); } } R.show(); G.show(); B.show(); 69

Color Separation ColorSeparation.java. Δημιουργεί 3 Picture αντικείμενα και παράθυρα. 70

Επεξεργασία εικόνας: Swirl Filter Swirl.java. Δημιουργεί 2 Picture αντικείμενα και παράθυρα. 71

Επεξεργασία εικόνας : Swirl Filter Στόχος. Να δημιουργηθεί ένα στρόβιλος ειδικό εφέ θέτοντας το χρώμα του εικονοστοιχείου εξόδου (i, j) σε χρώμα κάποιου άλλου εικονοστοιχείου εισόδου (ii, jj). double i0 = 0.5 * width; double j0 = 0.5 * height; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { double di = i - i0; double dj = j - j0; double r = Math.sqrt(di*di +dj*dj); double a = Math.PI / 256 * r; int ii = (int)(-di*math.cos(a) + dj*math.sin(a) + i0); int jj = (int)( di*math.sin(a) + dj*math.cos(a) + j0); if (ii >= 0 && ii < width && jj >= 0 && jj < height) pic2.set(i, j, pic1.get(ii, jj)); } } 72