Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Advertisements

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Νήματα στη Java Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Εβδομάδα 2: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism]
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Java A Crash Course in (Προσέγγιση μέσω UML)
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γενικευμένες κλάσεις Συλλογές.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
JAVA: Threads Θ. Βαρβαρίγου Καθηγ. ΕΜΠ Τηλ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Κεφάλαιο 4 Εξαιρέσεις. Όταν σε ένα πρόγραμμα συμβεί κάποιο λάθος, ο κώδικας εγείρει (throw) μία εξαίρεση. Στη Java oι εξαιρέσεις εκπροσωπούνται από αντικείμενα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Λειτουργία RMI και Ζητήματα Σχεδίασης
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 6: Πίνακες και Παράμετροι στην main. Διδάσκων: Νικόλαος Θ Λιόλιος,
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Αντικειμενοστραφής Προγραμματισμός Ι
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 10: Αφηρημένες τάξεις. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παράδειγμα Κληρονομικότητας Γενικευμένες κλάσεις.
Εισαγωγή στη C# Μαρίνος Θεμιστοκλέους Ανδρούτσου 150 Γραφείο 206 Τηλ Ώρες Γραφείου: Τετάρτη 5-6 μμ.
Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 – 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας.
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού - Κλάσεις ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014:
Δικτυακός Προγραμματισμός (Θ)
Εισαγωγή στον Προγ/μό Η/Υ
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Οντοκεντρικός Προγραμματισμός
Κατανεμημένα Συστήματα
Κλάσεις και αντικείμενα
Wrapper Classes, Abstract Classes and Interfaces
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ
Εισαγωγή στη Java (Μέρος Α’)
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Wrapper Classes, Abstract Classes and Interfaces
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (στη γλώσσα Java)
Εξαιρέσεις [Exceptions]
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++2 Περιγραφή Παρουσίασης Πληροφορίες για τη JavaΠληροφορίες για τη Java Δομή ΠρογραμμάτωνΔομή Προγραμμάτων Χαρακτηριστικά ΓλώσσαςΧαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη JavaΑντικειμενοστραφές Μοντέλο στη Java Διαχείριση ΜνήμηςΔιαχείριση Μνήμης Εξαιρέσεις (Exceptions)Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization)Συγχρονισμός (Synchronization)

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++3 Περιγραφή Παρουσίασης Πληροφορίες για τη JavaΠληροφορίες για τη Java Δομή ΠρογραμμάτωνΔομή Προγραμμάτων Χαρακτηριστικά ΓλώσσαςΧαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη JavaΑντικειμενοστραφές Μοντέλο στη Java –Πακέτα, κλάσεις, διεπαφές και αντικείμενα. –Ενθυλάκωση (encapsulation). –Κληρονομικότητα. –Πολυμορφισμός. Διαχείριση ΜνήμηςΔιαχείριση Μνήμης Εξαιρέσεις (Exceptions)Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization)Συγχρονισμός (Synchronization)

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++4 Πακέτα Οργάνωση κλάσεων σε πακέτα.Οργάνωση κλάσεων σε πακέτα. –Ονόματα όπως: java.io, javax.swing, org.apache, … Ορατότητα κλάσεων:Ορατότητα κλάσεων: –public –package Χρήση πακέτων με import.Χρήση πακέτων με import. Δήλωση πακέτων με package.Δήλωση πακέτων με package.

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++5 Κλάσεις (1) –Πεδία (fields). –Πεδία κλάσεων (class fields). –Μεθόδους (methods). –Μεθόδους κλάσεων (class methods). –Μεθόδους δημιουργίας (constructors). –Αναφορά this. public class Counter { private static int OBJECTS = 0; private static int OBJECTS = 0; int value = 0; int value = 0; public Counter() { public Counter() { this(0); this(0); } Counter(int value) { Counter(int value) { Counter.OBJECTS++; Counter.OBJECTS++; this.value = value; this.value = value; } public int increment() { public int increment() { return ++this.value; return ++this.value; }} public class Counter { private static int OBJECTS = 0; private static int OBJECTS = 0; int value = 0; int value = 0; public Counter() { public Counter() { this(0); this(0); } Counter(int value) { Counter(int value) { Counter.OBJECTS++; Counter.OBJECTS++; this.value = value; this.value = value; } public int increment() { public int increment() { return ++this.value; return ++this.value; }}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++6 Κλάσεις (2) –Μπλοκ στατικής αρχικοποίησης (static initializers). –Εσωτερικές κλάσεις (inner classes). –Ανώνυμες εσωτερικές κλάσεις (anonymous inner classes). –Προσοχή: ΚλάσηΚλάση ΑντικείμενοΑντικείμενο ΑναφοράΑναφορά public class Counter { private static private static ObjectCounter OBJECTS; ObjectCounter OBJECTS; int value = 0; int value = 0; static { static { Counter.OBJECTS = Counter.OBJECTS = new ObjectCounter(); new ObjectCounter(); } private class ObjectCounter { private class ObjectCounter { //… //… }} public class Counter { private static private static ObjectCounter OBJECTS; ObjectCounter OBJECTS; int value = 0; int value = 0; static { static { Counter.OBJECTS = Counter.OBJECTS = new ObjectCounter(); new ObjectCounter(); } private class ObjectCounter { private class ObjectCounter { //… //… }}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++7 Ενθυλάκωση (Encapsulation) Απόκρυψη εσωτερικής δομής με προσδιορισμό ορατότητας μελών.Απόκρυψη εσωτερικής δομής με προσδιορισμό ορατότητας μελών. Ορατότητες:Ορατότητες: –public –private –protected –package Διεπαφές (Interfaces) –Κλάσεις, χωρίς πεδία και με την δήλωση μεθόδων μόνο. –Προσδιορίζουν τρόπο χρήσης αντικειμένων. public interface Counter { public int increment(); public int increment(); public int decrement(); public int decrement(); public int getValue(); public int getValue(); public void setValue(int v); public void setValue(int v);} public interface Counter { public int increment(); public int increment(); public int decrement(); public int decrement(); public int getValue(); public int getValue(); public void setValue(int v); public void setValue(int v);}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++8 Κληρονομικότητα (1) Κλασσικό παράδειγμα:Κλασσικό παράδειγμα: –Γενική (abstract) κλάση. –Ιεραρχία κλάσεων. Διαμάντι ΚληρονομικότηταςΔιαμάντι Κληρονομικότητας –Μία κλάση αποτελεί ταυτόχρονα εξειδίκευση δύο κλάσεων με κοινό πρόγονο. RectangleTriangle PolygonCircle Shape Text CircledText

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++9 Κληρονομικότητα (2) Circle Shape public abstract class Shape { public Shape() {…} public Shape() {…} abstract void draw(…); abstract void draw(…);} public abstract class Shape { public Shape() {…} public Shape() {…} abstract void draw(…); abstract void draw(…);} public class Circle extends Shape { Point centre; Point centre; int radius; int radius; public Circle(int radious) { public Circle(int radious) { super(); super(); } void draw(…) {…} void draw(…) {…}} public class Circle extends Shape { Point centre; Point centre; int radius; int radius; public Circle(int radious) { public Circle(int radious) { super(); super(); } void draw(…) {…} void draw(…) {…}} Text public final class Text extends Shape { extends Shape { //… //…} public final class Text extends Shape { extends Shape { //… //…} …

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++10 Κληρονομικότητα (3) Χρήση Διεπαφών:Χρήση Διεπαφών: –Περιγράφουμε τρόπους χρήσης. –Ένα αντικείμενο μπορεί να χρησιμοποιηθεί με πάνω από ένα τρόπους. –Δεν έχουμε προβλήματα «διαμαντιού». Αλλαγές στο Σχεδιασμό!Αλλαγές στο Σχεδιασμό! RectangleTriangle PolygonCircleSimple Text CircledText ShapeText

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++11 Κληρονομικότητα (4) public interface Shape { abstract void draw(…); abstract void draw(…);} public interface Shape { abstract void draw(…); abstract void draw(…);} public class Circle implements Shape { Point centre; Point centre; int radius; int radius; void draw(…) { void draw(…) { // … // … }} public class Circle implements Shape { Point centre; Point centre; int radius; int radius; void draw(…) { void draw(…) { // … // … }} public interface Text { abstract String getText(); abstract String getText();} public interface Text { abstract String getText(); abstract String getText();} Circled Text Circle ShapeText public class CircledText implements Shape, Text { implements Shape, Text { public void draw(…) {…} public void draw(…) {…} public String getText() {…} public String getText() {…}} public class CircledText implements Shape, Text { implements Shape, Text { public void draw(…) {…} public void draw(…) {…} public String getText() {…} public String getText() {…}}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++12 Πολυμορφισμός Από το προηγούμενο παράδειγμα:Από το προηγούμενο παράδειγμα: –Καλούμε την draw σε μεταβλητή τύπου Shape. –Καλείται η draw του πραγματικού αντικειμένου. –Υποκλάση (extends) ή Υλοποίηση (implements). –Όλες οι μέθοδοι στη Java είναι όπως οι virtual της C++. Shape[] shapes = new Shapes[3]; shapes[0] = new CircledText(…); shapes[1] = new Triangle(…); shapes[2] = new Circle(…); for (int i=0; i<shapes.length; i++){ shapes[i].draw(); shapes[i].draw();} Shape[] shapes = new Shapes[3]; shapes[0] = new CircledText(…); shapes[1] = new Triangle(…); shapes[2] = new Circle(…); for (int i=0; i<shapes.length; i++){ shapes[i].draw(); shapes[i].draw();}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++13 Περιγραφή Παρουσίασης Πληροφορίες για τη JavaΠληροφορίες για τη Java Δομή ΠρογραμμάτωνΔομή Προγραμμάτων Χαρακτηριστικά ΓλώσσαςΧαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη JavaΑντικειμενοστραφές Μοντέλο στη Java Διαχείριση ΜνήμηςΔιαχείριση Μνήμης –Καταστροφή αντικειμένων. –«Σκουπιδιάρης» (garbage collector). Εξαιρέσεις (Exceptions)Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization)Συγχρονισμός (Synchronization)

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++14 Διαχείριση Μνήμης (1) Δημιουργία ΑντικειμένωνΔημιουργία Αντικειμένων –Μέθοδοι δημιουργίας (constructors). –Πολλοί τρόποι δημιουργίας. Αναφορά σε ΑντικείμεναΑναφορά σε Αντικείμενα –Ποτέ δεν έχουμε μεταβλητή στο πραγματικό αντικείμενο. –Όλες οι μεταβλητές είναι αναφορές. Καταστροφή;Καταστροφή; void drawWithBorder(Circle c) { int r = c.getRadius(); int r = c.getRadius(); Circle outer = new Circle(r+1); Circle outer = new Circle(r+1); c.draw(); c.draw(); outer.draw(); outer.draw();} void drawWithBorder(Circle c) { int r = c.getRadius(); int r = c.getRadius(); Circle outer = new Circle(r+1); Circle outer = new Circle(r+1); c.draw(); c.draw(); outer.draw(); outer.draw();} Circle[] list = …; for (int i=0; i<list.length; i++){ Circle c = list[i]; Circle c = list[i]; border(c); border(c);} Circle[] list = …; for (int i=0; i<list.length; i++){ Circle c = list[i]; Circle c = list[i]; border(c); border(c);}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++15 void border(Circle c) { int r = c.getRadius(); int r = c.getRadius(); Circle outer = new Circle(r+1); Circle outer = new Circle(r+1); c.draw(…); c.draw(…); outer.draw(); outer.draw();} void border(Circle c) { int r = c.getRadius(); int r = c.getRadius(); Circle outer = new Circle(r+1); Circle outer = new Circle(r+1); c.draw(…); c.draw(…); outer.draw(); outer.draw();} Διαχείριση Μνήμης (2) Καταστροφή ΑντικειμένωνΚαταστροφή Αντικειμένων –Έμμεσα, μόλις παύουν να χρησιμοποιούνται. –Μετρητές αναφορών. –«Σκουπιδιάρης» (garbage collector). outer c

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++16 Περιγραφή Παρουσίασης Πληροφορίες για τη JavaΠληροφορίες για τη Java Δομή ΠρογραμμάτωνΔομή Προγραμμάτων Χαρακτηριστικά ΓλώσσαςΧαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη JavaΑντικειμενοστραφές Μοντέλο στη Java Διαχείριση ΜνήμηςΔιαχείριση Μνήμης Εξαιρέσεις (Exceptions)Εξαιρέσεις (Exceptions) –Παράδειγμα χρήσης εξαιρέσεων. –Κατηγορίες εξαιρέσεων. Συγχρονισμός (Synchronization)Συγχρονισμός (Synchronization)

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++17 Εξαιρέσεις (1) Διαχείριση Εξαιρετικών ΠεριπτώσεωνΔιαχείριση Εξαιρετικών Περιπτώσεων –Μη κανονική λειτουργία μόνο. ΠαραδείγματαΠαραδείγματα –Δεν υπάρχει το αρχείο. –Χάθηκε η σύνδεση. –Διαίρεση με το μηδέν. –… Κατηγορίες –Κρίσιμα λάθη (error/failure) –Εξαιρέσεις κατά την εκτέλεση (runtime exception) –Εξαιρέσεις Εφαρμογής (exception) Κάθε φορά που υπάρχει εξαίρεση χρειάζεται ειδικός χειρισμός (exception handling).

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++18 Εξαιρέσεις (2) InputStream in = null; try { in = new FileInputStream( in = new FileInputStream( new File(“file.dat”)); new File(“file.dat”)); } catch(FileNotFoundException fnfe) { // … // … } catch(SecurityException se) { // … // … } finally { // … // …} InputStream in = null; try { in = new FileInputStream( in = new FileInputStream( new File(“file.dat”)); new File(“file.dat”)); } catch(FileNotFoundException fnfe) { // … // … } catch(SecurityException se) { // … // … } finally { // … // …} java.lang. Throwable java.lang. Error java.lang. Exception java.lang. Runtime Exception ex

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++19 Περιγραφή Παρουσίασης Πληροφορίες για τη JavaΠληροφορίες για τη Java Δομή ΠρογραμμάτωνΔομή Προγραμμάτων Χαρακτηριστικά ΓλώσσαςΧαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη JavaΑντικειμενοστραφές Μοντέλο στη Java Διαχείριση ΜνήμηςΔιαχείριση Μνήμης Εξαιρέσεις (Exceptions)Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization)Συγχρονισμός (Synchronization) –Νήματα (threads). –Κλειδώματα σε κοινούς πόρους.

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++20 Νήματα ΝήμαΝήμα –Ένα νήμα είναι μία ροή ελέγχου. –Η εκτέλεση της main γίνεται σε ένα νήμα. –Ο «σκουπιδιάρης» δουλεύει σε ένα νήμα. –«Αύξηση» απόδοσης προγραμμάτων. –Δυνατότητα για πολύπλοκες εφαρμογές. Νήμα στη Java –Κλάση java.lang.Thread και διεπαφή java.lang.Runnable. –Επεκτείνουμε την κλάση ή υλοποιούμε τη διεπαφή για να φτιάξουμε δικό μας νήμα. Ζητήματα: –Πληροφορία & Συγχρονισμός.

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++21 Επέκταση Thread public class ThreadTest { public static void main(String[] s) { public static void main(String[] s) { PrintThread t1 = PrintThread t1 = new PrintThread(“a”); new PrintThread(“a”); PrintThread t1 = PrintThread t1 = new PrintThread(“b”); new PrintThread(“b”); t1.start(); t1.start(); t2.start(); t2.start(); try { try { t1.join(); t1.join(); t2.join(); t2.join(); } catch(InterruptedException ie) {} } catch(InterruptedException ie) {} }} public class ThreadTest { public static void main(String[] s) { public static void main(String[] s) { PrintThread t1 = PrintThread t1 = new PrintThread(“a”); new PrintThread(“a”); PrintThread t1 = PrintThread t1 = new PrintThread(“b”); new PrintThread(“b”); t1.start(); t1.start(); t2.start(); t2.start(); try { try { t1.join(); t1.join(); t2.join(); t2.join(); } catch(InterruptedException ie) {} } catch(InterruptedException ie) {} }} public class PrintThread extends Thread { extends Thread { String msg; String msg; public PrintThread(String msg) { public PrintThread(String msg) { super(); super(); this.msg = msg; this.msg = msg; } public void run() { public void run() { for (int k=0; k<100; k++) { for (int k=0; k<100; k++) { System.out.println( System.out.println( “[” + k + “] ” + this.msg); “[” + k + “] ” + this.msg); } }} public class PrintThread extends Thread { extends Thread { String msg; String msg; public PrintThread(String msg) { public PrintThread(String msg) { super(); super(); this.msg = msg; this.msg = msg; } public void run() { public void run() { for (int k=0; k<100; k++) { for (int k=0; k<100; k++) { System.out.println( System.out.println( “[” + k + “] ” + this.msg); “[” + k + “] ” + this.msg); } }}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++22 Υλοποίηση Runnable public class ThreadTest { public static void main(String[] s) { public static void main(String[] s) { PrintThread t1 = new Thread( PrintThread t1 = new Thread( new PrintThread(“a”)); new PrintThread(“a”)); PrintThread t1 = new Thread( PrintThread t1 = new Thread( new PrintThread(“b”)); new PrintThread(“b”)); t1.start(); t1.start(); t2.start(); t2.start(); try { try { t1.join(); t1.join(); t2.join(); t2.join(); } catch(InterruptedException ie) {} } catch(InterruptedException ie) {} }} public class ThreadTest { public static void main(String[] s) { public static void main(String[] s) { PrintThread t1 = new Thread( PrintThread t1 = new Thread( new PrintThread(“a”)); new PrintThread(“a”)); PrintThread t1 = new Thread( PrintThread t1 = new Thread( new PrintThread(“b”)); new PrintThread(“b”)); t1.start(); t1.start(); t2.start(); t2.start(); try { try { t1.join(); t1.join(); t2.join(); t2.join(); } catch(InterruptedException ie) {} } catch(InterruptedException ie) {} }} public class PrintThread implements Runnable { implements Runnable { String msg; String msg; public PrintThread(String msg) { public PrintThread(String msg) { this.msg = msg; this.msg = msg; } public void run() { public void run() { for (int k=0; k<100; k++) { for (int k=0; k<100; k++) { System.out.println( System.out.println( “[” + k + “] ” + this.msg); “[” + k + “] ” + this.msg); } }} public class PrintThread implements Runnable { implements Runnable { String msg; String msg; public PrintThread(String msg) { public PrintThread(String msg) { this.msg = msg; this.msg = msg; } public void run() { public void run() { for (int k=0; k<100; k++) { for (int k=0; k<100; k++) { System.out.println( System.out.println( “[” + k + “] ” + this.msg); “[” + k + “] ” + this.msg); } }}

29/6/2015Εισαγωγή στη Java για όσους γνωρίζουν C++23 Κοινοί Πόροι –Κατά την δημιουργία των νημάτων δίνεται αναφορά στον κοινό πόρο. –Τα νήματα πρέπει να έχουν «συγχρονισμένα» πρόσβαση στον κοινό πόρο. –Χρησιμοποιούμε synchronized μπλοκ. public class Resources { public synchronized public synchronized Resource consume(); Resource consume(); public void synchronized public void synchronized produce(Resource r); produce(Resource r);} public class Resources { public synchronized public synchronized Resource consume(); Resource consume(); public void synchronized public void synchronized produce(Resource r); produce(Resource r);}