Ταυτοχρονισμός (concurrency)
|
|
- Βαρθολομαίος Κορωναίος
- 8 χρόνια πριν
- Προβολές:
Transcript
1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με java threads Γκόγκος Χρήστος Οι ακόλουθες σημειώσεις έχουν προέλθει από το Concurrency Java Tutorial της Oracle ( ) Ταυτοχρονισμός (concurrency) Διεργασίες και νήματα (processes and threads) Διεργασίες Μια διεργασία διαθέτει ένα αυτοδύναμο περιβάλλον εκτέλεσης. Κάθε διεργασία έχει το δικό της ιδιωτικό σύνολο από πόρους που χρησιμοποιεί κατά την εκτέλεσή της όπως ένα τμήμα της μνήμης που μπορεί να χρησιμοποιήσει μόνο η ίδια. Η επικοινωνία με τις άλλες διεργασίες γίνεται μέσω μηχανισμών IPC (Inter Process Communication) όπως είναι τα pipes και τα sockets. Μια εφαρμογή σε Java μπορεί να δημιουργήσει επιπλέον διεργασίες με το αντικείμενο ProcessBuilder. Νήματα Τα νήματα υφίστανται εντός μιας διεργασίας και μοιράζονται τους πόρους που διαθέτει η διεργασία όπως είναι η μνήμη και αρχεία της διεργασίας τα οποία είναι ανοικτά. Κάθε πρόγραμμα Java ξεκινά με ένα νήμα που ονομάζεται main thread και έχει τη δυνατότητα να δημιουργήσει νέα νήματα. Αντικείμενα Νημάτων Κάθε νήμα σχετίζεται με ένα στιγμιότυπο της κλάσης Thread. Για να δημιουργηθεί μια εφαρμογή που να υποστηρίζει ταυτοχρονισμό μπορεί είτε να δημιουργούνται απευθείας τα νήματα που εκτελούν ασύγχρονα τις επιμέρους εργασίες είτε να χρησιμοποιηθεί ένας executor για τη διαχείριση των επιμέρους εργασιών. Ορισμός και εκκίνηση ενός νήματος Ένα νήμα μπορεί να δημιουργηθεί είτε παρέχοντας ένα αντικείμενο που υλοποιεί το Runnable interface είτε δημιουργώντας μια υποκλάση της Thread. public class HelloRunnable implements Runnable { System.out.println("Hello from a thread!"); public static void main(string args[]) { (new Thread(new HelloRunnable())).start(); HelloRunnable.java javac HelloRunnable.java java HelloRunnable Hello from a thread! public class HelloThread extends Thread { System.out.println("Hello from a thread!"); [1]
2 public static void main(string args[]) { (new HelloThread()).start(); HelloThread.java javac HelloThread.java java HelloThread Hello from a thread! Παύση εκτέλεσης με sleep Η Thread.sleep αναστέλλει την εκτέλεση του τρέχοντος νήματος για μια συγκεκριμένη χρονική περίοδο. public class SleepMessages { public static void main(string args[]) throws InterruptedException { String importantinfo[] = {"Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too"; for (int i = 0; i < importantinfo.length; i++) { // Pause for 4 seconds Thread.sleep(4000); // Print a message System.out.println(importantInfo[i]); SleepMessages.java javac SleepMessages.java java SleepMessages Mares eat oats Does eat oats Little lambs eat ivy A kid will eat ivy too Interrupts Ένα interrupt είναι ένα σήμα προς ένα νήμα ότι θα πρέπει να διακόψει ότι έκανε και να κάνει κάτι άλλο. Ο προγραμματιστής καθορίζει τι θα κάνει το νήμα όταν δεχθεί το interrupt αλλά συχνά αυτό που συμβαίνει είναι ότι το νήμα τερματίζεται. Ένα νήμα στέλνει διακοπή καλώντας τη μέθοδο interrupt στο αντικείμενο thread που πρόκειται να διακοπεί. Για να λειτουργήσει σωστά η διακοπή θα πρέπει το νήμα να υποστηρίζει τη διακοπή του. Joins Η μέθοδος join επιτρέπει σε ένα νήμα να περιμένει την ολοκλήρωση της εκτέλεσης ενός άλλου νήματος. Το παράδειγμα SimpleThreads Ένα νήμα της κλάσης MessageLoop εμφανίζει κάθε 4 δευτερόλεπτα ένα μήνυμα μέχρι να εμφανιστούν τα 4 διαθέσιμα μηνύματα. Ανάλογα με το όρισμα γραμμής εντολών κατά την εκτέλεση το main thread θα περιμένει public class SimpleThreads { [2]
3 // Display a message, preceded by // the name of the current thread static void threadmessage(string message) { String threadname = Thread.currentThread().getName(); System.out.format("%s: %s%n", threadname, message); private static class MessageLoop implements Runnable { String importantinfo[] = {"Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too"; for (int i = 0; i < importantinfo.length; i++) { // Pause for 4 seconds Thread.sleep(4000); // Print a message threadmessage(importantinfo[i]); catch (InterruptedException e) { threadmessage("i wasn't done!"); public static void main(string args[]) throws InterruptedException { // Delay, in milliseconds before // we interrupt MessageLoop // thread (default one hour). long patience = 1000 * 60 * 60; // If command line argument // present, gives patience // in seconds. if (args.length > 0) { patience = Long.parseLong(args[0]) * 1000; catch (NumberFormatException e) { System.err.println("Argument must be an integer."); System.exit(1); threadmessage("starting MessageLoop thread"); long starttime = System.currentTimeMillis(); Thread t = new Thread(new MessageLoop()); t.start(); threadmessage("waiting for MessageLoop thread to finish"); // loop until MessageLoop [3]
4 // thread exits while (t.isalive()) { threadmessage("still waiting..."); // Wait maximum of 1 second // for MessageLoop thread // to finish. t.join(1000); if (((System.currentTimeMillis() - starttime) > patience) && t.isalive()) { threadmessage("tired of waiting!"); t.interrupt(); // Shouldn't be long now // -- wait indefinitely t.join(); threadmessage("finally!"); SimpleThreads.java javac SimpleThreads.java java SimpleThreads main: Starting MessageLoop thread main: Waiting for MessageLoop thread to finish Thread-0: Mares eat oats Thread-0: Does eat oats Thread-0: Little lambs eat ivy Thread-0: A kid will eat ivy too main: Finally! java SimpleThreads 10 main: Starting MessageLoop main: Waiting for MessageLo [4]
5 Thread-0: Mares eat oats Thread-0: Does eat oats main: Tired of waiting! Thread-0: I wasn't done! main: Finally! Συγχρονισμός Τα νήματα επικοινωνούν μέσω διαμοιρασμού πεδίων. Αν και αυτός ο τρόπος επικοινωνίας είναι αποδοτικός μπορεί να παρουσιαστούν προβλήματα παρεμβολής νημάτων και λαθών συνέπειας μνήμης. Τα προβλήματα αυτά αντιμετωπίζονται με συγχρονισμό. Παρεμβολή νημάτων (thread interference) class Counter { private int c = 0; public void increment() { c++; public void decrement() { c--; public int value() { return c; Counter.java Η εντολή c++ αναλύεται σε 3 επιμέρους βήματα. 1. Ανάκληση της τρέχουσας τιμής του c 2. Αύξηση της ανακληθείσας τιμής κατά 1 3. Αποθήκευση της αυξημένης τιμής πίσω στο c To ίδιο ισχύει και για την εντολή c--. Τα βήματα εκτέλεσης της εντολής c++ ενός νήματος μπορεί να παρεμβληθούν στα βήματα εκτέλεσης ενός άλλου νήματος που εκτελεί την ίδια περίπου χρονική στιγμή την εντολή c-- και να λάβουμε διαφορετικό αποτέλεσμα από το αναμενόμενο όπως στο ακόλουθο παράδειγμα στο οποίο το threada εκτελεί τη μέθοδο increment ενώ το threadβ εκτελεί τη μέθοδο decrement: Thread A: Ανάκληση του c. Thread B: Ανάκληση του c. Thread A: Αύξηση της ανακληθείσας τιμής, το αποτέλεσμα είναι 1. Thread B: Μείωση της ανακληθείσας τιμής; Το αποτέλεσμα είναι -1. Thread A: Αποθήκευση αποτελέσματος στο c; το c είναι τώρα 1. Thread B: Αποθήκευση αποτελέσματος στο c; το c είναι τώρα -1. class CounterExample { static Counter c = new Counter(); [5]
6 private static class IncrementCounter implements Runnable { { if (i % 2 == 0) c.increment(); else c.decrement(); public static void main(string[] args) throws InterruptedException { Thread[] threads = new Thread[100]; threads[i] = new Thread(new IncrementCounter()); System.out.println(c.value()); threads[i].start(); threads[i].join(); System.out.println(c.value()); CounterExample.java javac CounterExample.java java CounterExample 0-3 Λάθη συνέπειας μνήμης Συγχρονισμένες μέθοδοι Μια μέθοδος γίνεται συγχρονισμένη αν προστεθεί η λέξη synchronized στον ορισμό της. Δεν επιτρέπεται δύο κλήσεις μιας synchronized μεθόδου να παρεμβληθούν μεταξύ τους. Όταν ολοκληρώσει την εκτέλεσή της μια συγχρονισμένη μέθοδος τότε είναι εγγυημένο ότι όλες οι αλλαγές που έχει κάνει στην κατάσταση του αντικειμένου είναι ορατές από τα άλλα νήματα. class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; public synchronized void decrement() { c--; public synchronized int value() { return c; [6]
7 SynchronizedCounter.java class SynchronizedCounterExample { static SynchronizedCounter c = new SynchronizedCounter(); private static class IncrementCounter implements Runnable { { if (i % 2 == 0) c.increment(); else c.decrement(); public static void main(string[] args) throws InterruptedException { Thread[] threads = new Thread[100]; threads[i] = new Thread(new IncrementCounter()); System.out.println(c.value()); threads[i].start(); threads[i].join(); System.out.println(c.value()); SynchronizedCounterExample.java javac SynchronizedCounterExample.java java SynchronizedCounterExample 0 0 Εγγενές κλείδωμα (intrinsic lock) και συγχρονισμός Κάθε αντικείμενο έχει ένα intrinsic lock συνδεδεμένο με αυτό. Αν ένα νήμα έχει το intrinsic lock ενός αντικειμένου κανένα άλλο νήμα δεν μπορεί να αποκτήσει το ίδιο lock. Όταν ένα νήμα καλεί μια synchronized μέθοδο τότε αυτόματα δεσμεύει το intrinsic lock του αντικειμένου της μεθόδου και το αποδεσμεύει όταν η μέθοδος επιστρέφει. class SynchronizedCounter2 { private int c = 0; public void increment() { synchronized (this) { c++; [7]
8 public void decrement() { synchronized (this) { c--; public int value() { synchronized (this) { return c; SynchronizedCounter2.java class SynchronizedCounter2Example { static SynchronizedCounter2 c = new SynchronizedCounter2(); private static class IncrementCounter implements Runnable { { if (i % 2 == 0) c.increment(); else c.decrement(); public static void main(string[] args) throws InterruptedException { Thread[] threads = new Thread[100]; threads[i] = new Thread(new IncrementCounter()); System.out.println(c.value()); threads[i].start(); threads[i].join(); System.out.println(c.value()); SynchronizedCounter2Example.java javac SynchronizedCounter2Example.java java SynchronizedCounter2Example 0 0 public class MsLunch { private long c1 = 0; [8]
9 private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; // c2++; public void inc2() { synchronized(lock2) { c2++; // c1++; public void print(){ System.out.printf("c1=%d c2=%d\n", c1, c2); MsLunch.java public class MsLunchExample { static MsLunch c = new MsLunch(); private static class IncrementCounter1 implements Runnable { c.inc1(); private static class IncrementCounter2 implements Runnable { c.inc2(); public static void main(string[] args) throws InterruptedException { Thread threads1[] = new Thread[100]; threads1[i] = new Thread(new IncrementCounter1()); Thread threads2[] = new Thread[100]; threads2[i] = new Thread(new IncrementCounter2()); { threads1[i].start(); [9]
10 threads2[i].start(); { threads1[i].join(); threads2[i].join(); c.print(); MsLunchExample.java javac MsLunchExample.java java MsLunchExample c1=10000 c2=10000 Liveness Η ικανότητα μιας εφαρμογής να μην μπλοκάρεται κατά την εκτέλεσή της ονομάζεται liveness. Αδιέξοδο (deadlock) Το αδιέξοδο περιγράφει μια κατάσταση στην οποία δύο ή περισσότερα νήματα μπλοκάρονται επ αόριστο περιμένοντας το ένα το άλλο. Έστω το εξής παράδειγμα: Ο Alphonse και o Gaston είναι δύο ευγενείς που ακολουθούν τον κανόνα ότι όταν υποκλίνονται σε κάποιον θα πρέπει να παραμένουν στη θέση υπόκλισης μέχρι η υπόκλιση να ανταποδοθεί. public class Deadlock { static class Friend { private final String name; public Friend(String name) { this.name = name; public String getname() { return this.name; public synchronized void bow(friend bower) { System.out.format("%s: %s" + " has bowed to me!%n", this.name, bower.getname()); bower.bowback(this); public synchronized void bowback(friend bower) { System.out.format("%s: %s" + " has bowed back to me!%n", this.name, bower.getname()); public static void main(string[] args) { final Friend alphonse = new Friend("Alphonse"); final Friend gaston = new Friend("Gaston"); new Thread(new Runnable() { alphonse.bow(gaston); ).start(); new Thread(new Runnable() { [10]
11 gaston.bow(alphonse); ).start(); Deadlock.java javac Deadlock.java java Deadlock Alphonse: Gaston has bowed to me! Gaston: Alphonse has bowed to me! Πέφτει σε deadlock Λιμοκτονία (starvation) Η λιμοκτονία αφορά μια κατάσταση στην οποία ένα νήμα δεν μπορεί να προχωρήσει στην εκτέλεση της εργασίας του καθώς απαιτούμενοι πόροι για αυτή δεν είναι διαθέσιμοι λόγω του ότι άλλα νήματα τους παρακρατούν για μεγάλες περιόδους. Livelock Ένα νήμα συχνά ενεργεί ως απόκριση στις ενέργειες ενός άλλου νήματος. Αν το άλλο νήμα επίσης ενεργεί ως απόκριση στις ενέργειες ενός άλλου νήματος τότε μπορεί να συμβεί livelock. Όπως και στην περίπτωση του deadlock τα νήματα δεν μπορούν να σημειώσουν πρόοδο αλλά αντί να είναι μπλοκαρισμένα το ένα ανταποκρίνεται σε ενέργειες του άλλου χωρίς ουσιαστικά να παρατηρείται πρόοδος. Guarded Blocks Συχνά τα νήματα πρέπει να συντονίζουν τις ενέργειές τους. Ένας κοινός μηχανισμός συντονισμού είναι τα guarded blocks στα οποία ελέγχεται μια συνθήκη η οποία θα πρέπει να είναι αληθής για να προχωρήσει η εκτέλεση του block. public class Drop { // Message sent from producer // to consumer. private String message; // True if consumer should wait // for producer to send message, // false if producer should wait for // consumer to retrieve message. private boolean empty = true; public synchronized String take() { // Wait until message is // available. while (empty) { wait(); catch (InterruptedException e) { // Toggle status. empty = true; // Notify producer that [11]
12 // status has changed. notifyall(); return message; public synchronized void put(string message) { // Wait until message has // been retrieved. while (!empty) { wait(); catch (InterruptedException e) { // Toggle status. empty = false; // Store message. this.message = message; // Notify consumer that status // has changed. notifyall(); Drop.java import java.util.random; public class Producer implements Runnable { private Drop drop; public Producer(Drop drop) { this.drop = drop; String importantinfo[] = {"Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too"; Random random = new Random(); for (int i = 0; i < importantinfo.length; i++) { drop.put(importantinfo[i]); Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { drop.put("done"); Producer.java import java.util.random; [12]
13 public class Consumer implements Runnable { private Drop drop; public Consumer(Drop drop) { this.drop = drop; Random random = new Random(); for (String message = drop.take();! message.equals("done"); message = drop.take()) { System.out.format("MESSAGE RECEIVED: %s%n", message); Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { Consumer.java public class ProducerConsumerExample { public static void main(string[] args) { Drop drop = new Drop(); (new Thread(new Producer(drop))).start(); (new Thread(new Consumer(drop))).start(); ProducerConsumerExample.java javac ProducerConsumerExample.java java ProducerConsumerExample MESSAGE RECEIVED: Mares eat oats MESSAGE RECEIVED: Does eat oats MESSAGE RECEIVED: Little lambs eat ivy MESSAGE RECEIVED: A kid will eat ivy too Ο ενδεδειγμένος τρόπος δημιουργίας ενός σεναρίου παραγωγού καταναλωτή είναι χρησιμοποιώντας ένα BlockingQueue. import java.util.random; import java.util.concurrent.blockingqueue; public class Producer2 implements Runnable { private BlockingQueue<String> drop; public Producer2(BlockingQueue<String> drop) { this.drop = drop; [13]
14 String importantinfo[] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" ; Random random = new Random(); for (int i = 0; i < importantinfo.length; i++) { drop.put(importantinfo[i]); Thread.sleep(random.nextInt(5000)); drop.put("done"); catch (InterruptedException e) { Producer2.java import java.util.random; import java.util.concurrent.blockingqueue; public class Consumer2 implements Runnable { private BlockingQueue<String> drop; public Consumer2(BlockingQueue<String> drop) { this.drop = drop; Random random = new Random(); for (String message = drop.take();! message.equals("done"); message = drop.take()) { System.out.format("MESSAGE RECEIVED: %s%n", message); Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { Consumer2.java import java.util.concurrent.blockingqueue; import java.util.concurrent.synchronousqueue; [14]
15 public class ProducerConsumerBlockingQueueExample { public static void main(string[] args) { BlockingQueue<String> drop = new SynchronousQueue<String> (); (new Thread(new Producer2(drop))).start(); (new Thread(new Consumer2(drop))).start(); ProducerConsumerBlockingQueueExample.java javac ProducerConsumerBlockingQueueExample.java java ProducerConsumerBlockingQueueExample MESSAGE RECEIVED: Mares eat oats MESSAGE RECEIVED: Does eat oats MESSAGE RECEIVED: Little lambs eat ivy MESSAGE RECEIVED: A kid will eat ivy too Immutable objects Ένα αντικείμενο θεωρείται immutable όταν η κατάστασή του δεν μπορεί να αλλάξει μετά τη δημιουργία του. Η χρήση immutable αντικειμένων θεωρείται ως καλή στρατηγική για τη δημιουργία απλού και αξιόπιστου κώδικα. Ένα παράδειγμα Synchronized Class public class SynchronizedRGB { // Values must be between 0 and 255. private int red; private int green; private int blue; private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public SynchronizedRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; public void set(int red, int green, int blue, String name) { check(red, green, blue); synchronized (this) { this.red = red; this.green = green; [15]
16 this.blue = blue; this.name = name; public synchronized int getrgb() { return ((red << 16) (green << 8) blue); public synchronized String getname() { return name; public synchronized void invert() { red = red; green = green; blue = blue; name = "Inverse of " + name; SynchronizedRGB.java Μια στρατηγική για ορισμό immutable αντικειμένων 1. Όχι "setter" μέθοδοι. 2. Όλα τα πεδία να είναι final και private. 3. Να μην επιτρέπεται σε υποκλάσεις να κάνουν override μεθόδους (π.χ. ορίζοντας την κλάση ως final). 4. Αν τα πεδία του στιγμιότυπου έχουν αναφορές σε mutable αντικείμενα, να μην επιτρέπεται σε αυτά τα αντικείμενα να αλλάξουν: a. Να μην παρέχονται μέθοδοι που τροποποιούν τα mutable αντικείμενα. b. Να μην διαμοιράζονται αναφορές σε mutable αντικείμενα. Never store references to external, mutable objects passed to the constructor; if necessary, create copies, and store references to the copies. Similarly, create copies of your internal mutable objects when necessary to avoid returning the originals in your methods. final public class ImmutableRGB { // Values must be between 0 and 255. final private int red; final private int green; final private int blue; final private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public ImmutableRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; [16]
17 public int getrgb() { return ((red << 16) (green << 8) blue); public String getname() { return name; public ImmutableRGB invert() { return new ImmutableRGB(255 - red, green, blue, "Inverse of " + name); ImmutableRGB.java Αντικείμενα concurrency υψηλού επιπέδου Lock objects Μόνο ένα νήμα μπορεί να έχει στην ιδιοκτησία του ένα Lock αντικείμενο σε κάθε χρονική στιγμή. Τα Lock αντικείμενα υποστηρίζουν το μηχανισμό wait/notify μέσω σχετιζόμενων Condition αντικειμένων. Το κύριο πλεονέκτημα των Lock αντικειμένων σε σχέση με τα εγγενή locks είναι η δυνατότητα υποχώρησης. Η μέθοδος trylock υποχωρεί αν το lock δεν είναι άμεσα διαθέσιμο ή αν δεν είναι διαθέσιμο πριν από κάποιο χρονικό διάστημα. import java.util.concurrent.locks.lock; import java.util.concurrent.locks.reentrantlock; import java.util.random; public class Safelock { static class Friend { private final String name; private final Lock lock = new ReentrantLock(); public Friend(String name) { this.name = name; public String getname() { return this.name; public boolean impendingbow(friend bower) { Boolean mylock = false; Boolean yourlock = false; mylock = lock.trylock(); yourlock = bower.lock.trylock(); finally { if (!(mylock && yourlock)) { if (mylock) { lock.unlock(); if (yourlock) { bower.lock.unlock(); [17]
18 return mylock && yourlock; public void bow(friend bower) { if (impendingbow(bower)) { System.out.format("%s: %s has" + " bowed to me!%n", this.name, bower.getname()); bower.bowback(this); finally { lock.unlock(); bower.lock.unlock(); else { System.out.format("%s: %s started" + " to bow to me, but saw that" + " I was already bowing to" + " him.%n", this.name, bower.getname()); public void bowback(friend bower) { System.out.format("%s: %s has" + " bowed back to me!%n", this.name, bower.getname()); static class BowLoop implements Runnable { private Friend bower; private Friend bowee; public BowLoop(Friend bower, Friend bowee) { this.bower = bower; this.bowee = bowee; Random random = new Random(); for (;;) { Thread.sleep(random.nextInt(10)); catch (InterruptedException e) { bowee.bow(bower); public static void main(string[] args) { [18]
19 final Friend alphonse = new Friend("Alphonse"); final Friend gaston = new Friend("Gaston"); new Thread(new BowLoop(alphonse, gaston)).start(); new Thread(new BowLoop(gaston, alphonse)).start(); Safelock.java javac Safelock.java java Safelock Alphonse: Gaston has bowed to me! Gaston: Alphonse started to bow to me, but saw that I was already bowing to him. Gaston: Alphonse has bowed back to me! Alphonse: Gaston has bowed to me! Gaston: Alphonse has bowed back to me! Gaston: Alphonse has bowed to me! Alphonse: Gaston has bowed back to me! Alphonse: Gaston has bowed to me! Gaston: Alphonse has bowed back to me! Alphonse: Gaston has bowed to me! Gaston: Alphonse has bowed back to me! Gaston: Alphonse has bowed to me! Alphonse: Gaston has bowed back to me! Alphonse: Gaston has bowed to me! Gaston: Alphonse has bowed back to me! Executors Executor Interfaces To package java.util.concurrent ορίζει 3 executor interfaces: 1. Executor: απλό interface που υποστηρίζει την εκκίνηση νέων εργασιών. 2. ExecutorService: subinterface του Executor, που προσθέτει δυνατότητες διαχείρισης του κύκλου ζωής τόσο των επιμέρους εργασιών όσο και του ίδιου του executor. 3. ScheduledExecutorService: subinterface του ExecutorService, που υποστηρίζει μελλοντική και περιοδική εκτέλεση εργασιών. Executor interface Αν r είναι ένα Runnable αντικείμενο και e είναι ένα αντικείμενο Executor η εκκίνηση του νήματος γίνεται με την εντολή: e.execute(r); ExecutorService interface Προσθήκη της μεθόδου submit η οποία δέχεται Runnable αλλά και Callable αντικείμενα και επιστρέφει ένα Future αντικείμενο ScheduledExecutorService Προσθήκη της μεθόδου schedule η οποία εκτελεί Runnable ή Callable εργασίες μετά από μια συγκεκριμένη καθυστέρηση. [19]
20 Thread Pools Τα thread pools αποτελούνται από worker threads τα οποία ελαχιστοποιούν την επιβάρυνση της δημιουργίας νέων νημάτων. Ένας κοινός τύπος thread pool είναι το fixed thread pool το οποίο έχει πάντα έναν αριθμό από threads σε εκτέλεση. Αν ένα νήμα τερματιστεί τότε αυτόματα αντικαθίσταται από ένα νέο thread. Οι εργασίες υποβάλλονται στο thread pool μέσω μιας εσωτερικής ουράς η οποία διατηρεί όσες εργασίες δεν μπορούν να εξυπηρετηθούν λόγω του ότι οι είναι περισσότερες από τα διαθέσιμα νήματα. Ένας τρόπος να δημιουργηθεί ένας executor ο οποίος χρησιμοποιεί ένα fixed thread pool είναι να κληθεί η new FixedThreadPool στο java.util.concurrent.executors. Fork/Join (JDK 7) Το fork/join framework αποτελεί μια υλοποίηση του interface ExecutorService που εκμεταλλεύεται τους πολλαπλούς πυρήνες με τους οποίους μπορεί να είναι εφοδιασμένο ένα υπολογιστικό σύστημα. Είναι σχεδιασμένο για εργασίες οι οποίες μπορούν να διασπαστούν σε μικρότερα τμήματα αναδρομικά και ο στόχος είναι η χρήση όλης της επεξεργαστικής ισχύος έτσι ώστε να ενισχυθεί η απόδοση της εφαρμογής. Concurrent collections Το πακέτο java.util.concurrent προσθέτει ορισμένα collection interfaces στο Java Collections Framework όπως είναι το BlockingQueue και το ConcurrentMap. Το BlockingQueue ορίζει μια δομή first-in-first-out η οποία μπλοκάρει όταν γίνεται απόπειρα να προστεθεί ένα στοιχείο σε μια ήδη γεμάτη ουρά ή όταν γίνεται προσπάθεια ανάκλησης ενός στοιχείου από μια άδεια ουρά. Το ConcurrentMap είναι ένα subinterface του java.util.map που ορίζει ατομικές λειτουργίες. Υλοποίηση ενός ConcurrentMap είναι το ConcurrentHashMap. Atomic variables Το πακέτο java.util.concurrent.atomic ορίζει κλάσεις που υποστηρίζουν ατομικές λειτουργίες σε απλές μεταβλητές. Οι κλάσεις αυτές διαθέτουν get και set μεθόδους που λειτουργούν ως reads και writes σε volatile μεταβλητές καθώς και ατομικές μεθόδους όπως η compareandset και οι αριθμητικές πράξεις import java.util.concurrent.atomic.atomicinteger; class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementandget(); public void decrement() { c.decrementandget(); public int value() { return c.get(); AtomicCounter.java class AtomicCounterExample { [20]
21 static AtomicCounter c = new AtomicCounter(); private static class IncrementCounter implements Runnable { { if (i % 2 == 0) c.increment(); else c.decrement(); public static void main(string[] args) throws InterruptedException { Thread[] threads = new Thread[100]; threads[i] = new Thread(new IncrementCounter()); System.out.println(c.value()); threads[i].start(); threads[i].join(); System.out.println(c.value()); AtomicCounterExample.java javac AtomicCounterExample.java java AtomicCounterExample 0 0 ThreadLocalRandom Το πακέτο java.util.concurrent περιέχει την κλάση ThreadLocalRandom για τη λήψη τυχαίων τιμών από πολλαπλά threads. Η χρήση της ThreadLocalrandom αντί για τη math.random() οδηγεί σε καλύτερη απόδοση. Χρήσιμοι σύνδεσμοι Java concurrent animated ( [21]
Αντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 13: Ταυτόχρονος Προγραμματισμός Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 22: Συγχρονισμός (Concurrency) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διεργασίες (processes) και Νήματα (threads) - Συγχρονισμός Νημάτων, Προβλήματα, Λύσεις - Οι τροποποιητές
Διάλεξη Εισαγωγή στη Java, Μέρος Γ
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού για Δίκτυα και Τηλεπικοινωνίες Χειμερινό Εξάμηνο 2017-2018 Διάλεξη Εισαγωγή στη Java, Μέρος Γ Νήματα (Threads) στην Java Συγχρονισμός Producer-Consumer
Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads)
Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου
Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα
ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων
Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές
Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Multithreading Μulti-processing Πολλές διεργασίες ταυτόχρονα Κάθε διεργασία έχει το δικό της χώρο μνήμης ή ενδέχεται όλες να μοιράζονται και κάποιο
Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων
Εργαστήριο Java Lab09 Αντικείμενο: Πολυνηματικές εφαρμογές Η χρήση περισσότερων από μιας ροής εντολών μέσα σε ένα πρόγραμμα είναι γνωστή ως multithreading. H κάθε μια ροή εντολών μέσα στο πρόγραμμα ονομάζεται
Το παρακάτω πρόγραμμα ορίζει δυο κλάσεις την SimpleThread και την TwoThreadsTest:
Εισαγωγή στη γλώσσα προγραμματισμού Java 41 6. Threads Πολλές γλώσσες προγαμματισμού όπως και η Java διαθέτουν εργαλεία για την υλοποίηση threads στα προγράμματά τους. Αυτές οι γλώσσες καλούνται multithreading
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 3: JAVA: ΕΞΑΙΡΕΣΕΙΣ, ΕΙΣΟΔΟΣ-ΕΞΟΔΟΣ, ΝΗΜΑΤΑ Νήματα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΝΗΜΑΤΑ
Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA
Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA 1. Εισαγωγή Τι είναι Νήµα; Κάθε νήµα εκτέλεσης είναι ουσιαστικά
Αντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Τεκμηρίωση κώδικα
Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Τεκμηρίωση κώδικα Multithreading Μulti-processing Πολλές διεργασίες ταυτόχρονα Κάθε διεργασία έχει το δικό της χώρο μνήμης ή ενδέχεται όλες να μοιράζονται
Ειδικά Θέματα Προγραμματισμού
Ειδικά Θέματα Προγραμματισμού Ενότητα 6: Threads Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Το πρόγραμμα 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 υποστηρίζει
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1
Νήµαταστην Java Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων Κατανεµηµένα Συστήµατα 11-1 Νήµαταστην Java γεννηθείσα notify notifyall έτοιµη start εκπνοή
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος
Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 8: Ταυτοχρονισμός και νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής
Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός Ενότητα # 8: Ταυτοχρονισμός και νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα
Κεφάλαιο 1. Νήματα (Threads). Time Sharing
Κεφάλαιο 1. Νήματα (Threads). Time Sharing Η επεξεργαστική ισχύς είναι ένας πόρος περιορισμένος (ιδιαίτερα στις προηγούμενες δεκαετίες) ο οποίος θέλουμε να εξυπηρετεί ταυτόχρονα πολλές εργασίες. Στους
Βασικά Στοιχεία της Java
Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά
Κλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση
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
Κινητά και Διάχυτα Συστήματα. Ενότητα # 3: Νήματα και ταυτοχρονισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής
Κινητά και Διάχυτα Συστήματα Ενότητα # 3: Νήματα και ταυτοχρονισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1
Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2
Βασικά Στοιχεία της Java
Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της
Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack
Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2
13. Νήματα. 13.1 Νήματα και χρήση νημάτων στη Java. 13.1.1. Τι είναι τα νήματα; 13.1.2. Τρία μέρη ενός νήματος
13. Νήματα Ολοκληρώνοντας αυτό το κεφάλαιο θα μπορείτε Να κατανοείτε την έννοια του νήματος (thread) Να δημιουργείτε διακριτά νήματα στη Java, που θα ελέγχουν τον κώδικα και τα δεδομένα που χρησιμοποιούνται
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες ANTIKEIMENA MEΣΑ ΣΕ ΑΝΤΙΚΕΙΜΕΝΑ Αντικείμενα μέσα σε αντικείμενα Εκτός
Εισαγωγή στην Java. Module 9: Threads. Prepared by Chris Panayiotou for EPL /03/2004
Εισαγωγή στην Java Module 9: Threads 15/03/2004 Prepared by Chris Panayiotou for EPL 602 1 Εισαγωγή στα Threads Συχνά χρειάζεται, να υπάρχουν ανεξάρτητες διεργασίες σε ένα πρόγραµµα separate, independently-running
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο
16. Multithreading (Java Applications)
16. Multithreading (Java Applications) Χειμερινό Εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Εισαγωγή: Τι είναι ένα thread; Δημιουργία και εκτέλεση Threads
Πολυνηµατικές εφαρµογές σε Java
Πολυνηµατικές εφαρµογές σε Java Σταύρος Πολυβίου Τί είναι ένα νήµα (thread); Ας ορίσουµε πρώτα το τί είναι µία διεργασία (process): Ένα αυτοδύναµο περιβάλλον εκτέλεσης (selfcontained execution environment).
08 Πολυνηματικός προγραμματισμός στο JVM
08 Πολυνηματικός προγραμματισμός στο JVM Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Πολυνηματικός multi threaded προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ EXCEPTIONS & EXCEPTION HANDLING Εξαιρέσεις (Exceptions) Γνωμικό της Μηχανικής Λογισμικού: το 80% της δουλειάς των μηχανικών
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα ΑΝΤΙΚΕΙΜΕΝΑ ΜΕ ΠΙΝΑΚΕΣ Θα υλοποιήσετε την κλάση DynamicArray. Η κλάση θα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Ισότητα Strings class StringTest public static void main(string args[]) String x1 = "java"; String y1 = "java"; System.out.println("1.
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 30/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Συλλογή απορριμμάτων Συλλογή απορριμμάτων (Garbage
Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13
Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις
Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Σωρός Μεγίστου ως ΑΤΔ Ένας σωρός μεγίστου (max heap) είναι ένας ΑΤΔ που
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
2.1 Αντικειµενοστρεφής προγραµµατισµός
2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07
Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi
Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει
Wrapper Classes, Abstract Classes and Interfaces
Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους
Δομές ελέγχου ροής προγράμματος
Δομές ελέγχου ροής προγράμματος Υπάρχουν δύο είδη δομών ελέγχου ροής (control flow): Οι δομές επιλογής και Οι δομές επανάληψης Δομές ελέγχου ροής προγράμματος Είδος δομής Δομές επιλογής Δομή ελέγχου ροής
11α Κατασκευαστικά πρότυπα σχεδίασης
11α Κατασκευαστικά πρότυπα σχεδίασης Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Κατασκευαστικά
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Σύγκριση JAVA-C ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΣΥΓΚΡΙΣΗ JAVA - C ΤΥΠΟΙ
ιαδικτυακές Εφαρµογές
ιαδικτυακές Εφαρµογές µε Java2 Στοιχεία ικτυακής Επικοινωνίας Όροι IP address 32bit αριθµός που χρησιµοποιείται από το Internet Protocol για την παράδοση δεδοµένων στο σωστό υπολογιστή στο δίκτυο. Port
Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1
Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός
Κατανεμημένα Συστήματα
Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,
Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.
Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων
Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java
6. Εξαιρέσεις στη γλώσσα Java
6. Εξαιρέσεις στη γλώσσα Java Με το τέλος αυτού του κεφαλαίου θα μπορείτε: Να ορίζετε εξαιρέσεις Να εξηγείτε γιατί είναι σημαντικός ο χειρισμός των εξαιρέσεων Να γράφετε κώδικα για να συλλαμβάνετε εξαιρέσεις
I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).
Κατασκευαστές Μέθοδοι Κατασκευής (Constructors). Οι κατασκευαστές (constructors) είναι μέθοδοι που εκτελούνται όταν κατασκευάζεται ένα αντικείμενο. Μια τάξη μπορεί να έχει αρκετούς κατασκευαστές, οι οποίοι
Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ
Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4
Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών
Εισαγωγή στη γλώσσα προγραμματισμού JAVA Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Το πρώτο φλιτζάνι Java Λίστα με τα απαραίτητα Το πρώτο μου πρόγραμμα(hello World) Συνεχίζοντας
Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:
Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 8 Πακέτα (Packages) Access
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εξαιρέσεις Εξαιρέσεις Στα προγράμματα μας θα πρέπει να μπορούμε να χειριστούμε περιπτώσεις που το πρόγραμμα δεν εξελίσσεται όπως το είχαμε προβλέψει Π.χ., κάνουμε
Λειτουργικά Συστήματα
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Λειτουργικά Συστήματα Ενότητα 4α: Σημαφόροι, Πρόβλημα Συνδαιτυμόνων Φιλοσόφων, Αδιέξοδα Αθηνά Βακάλη Άδειες Χρήσης Το παρόν εκπαιδευτικό
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΑ Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων
Δομές Δεδομένων & Αλγόριθμοι
Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές
Εισαγωγή στη γλώσσα προγραμματισμού Java 69
Εισαγωγή στη γλώσσα προγραμματισμού Java 69 9. Animation σε Java 9.1 Γενικά περί Animation Ένας από τους καλύτερους τρόπους για να γίνει ένα πρόγραμμα σε Java ή μια σελίδα που τρέχει Java applet πιο ελκυστική,
Βασικά της γλώσσας JAVA
17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Δομές Δεδομένων - Εργαστήριο 2. Λίστες
Λίστες Λίστες (Lists) : Συλλογή δεδομένων σε δυναμικά δεσμευμένους κόμβους. Κάθε κόμβος περιέχει συνδέσεις προς άλλους κόμβους. Προσπέλαση -στού κόμβου διατρέχοντας όλους τους προηγούμενους. Πολλές παραλλαγές
Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java
Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,
I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )
Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική
Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:
Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects
Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012
Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012 Θέμα 1 Θέμα 2 Θέμα 3 Θέμα 4 Θέμα
Αντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 11: Χειρισμός Σφαλμάτων Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
14 Πρότυπα Σχεδίασης συνέχεια
14 Πρότυπα Σχεδίασης συνέχεια Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Καλές πρακτικές δόμησης του κώδικα 2 Πρότυπο σχεδίασης
(Διαφάνειες Νίκου Βιδάκη)
(Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java Είσοδος Χρησιμοποιούμε την κλάση Scanner της Java import java.util.scanner; Αρχικοποιείται με το ρεύμα εισόδου: Scanner in = new Scanner(System.in);
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2
Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι Ορισμός κλάσης και αντικειμένων Μία κλάση Κ ορίζεται από
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται πάνω σε μία ευθεία πάντα