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

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

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

Δομημένος Προγραμματισμός

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

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

14η ιάλεξη. Προχωρημένα θέματα σχεδίασης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

Ειδικά Θέματα Προγραμματισμού

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

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Γενικοί Τύποι. 13 Ιανουαρίου 2011 Αντικειμενοστρεφής Προγραμματισμός στη Java 32

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Δομές Δεδομένων Ενότητα 3

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

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

{ int a = 5; { int b = 7; a = b + 3;

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

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

Δομές Δεδομένων Ενότητα 4

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ ΥΛΟΠΟΙΗΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΑΛΥΣΗΣ UML ΜΕ JAVA. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

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

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Θεωρία Πιθανοτήτων & Στατιστική

Αυτοματοποιημένη χαρτογραφία

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Γενικευμένες κλάσεις Συλλογές

Η κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:

Θεωρία Πιθανοτήτων & Στατιστική

Generics και ArrayLists

Συλλογές, Στοίβες και Ουρές

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Δομές Δεδομένων & Αλγόριθμοι

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Πληροφορική ΙΙ Θεματική Ενότητα 5

Ιστορία της μετάφρασης

ΑΣΦΑΛΕΙΑ & ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΩΝ(Θ)

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

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 14: Γενικός Κώδικας (Generics) Γρηγόρης Τσουμάκας, Επικ. Καθηγητής

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Γενικός Κώδικας (Generics)

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Τα παραδείγματα κώδικα που χρησιμοποιούνται σε κάποιες από τις ακόλουθες διαφάνειες μπορούν να βρεθούν στον παρακάτω σύνδεσμο: http://users.auth.gr/greg/oop.zip

Εισαγωγή (1/2) Γενικός κώδικας. Επιτρέπει σε τύπους αναφοράς (κλάσεις και διεπαφές) να είναι παράμετροι κατά τον ορισμό κλάσεων, διεπαφών και μεθόδων. Παραδείγματα γενικών κλάσεων. ArrayList<Student>, HashMap<Integer, Student>. Παραδείγματα γενικών διεπαφών. List<Student>, Map<Integer, Student>. Comparable<Student>.

Εισαγωγή (2/2) Ορισμός γενικών τύπων. Μεταβλητές που αντιστοιχούν στους τύπους που θα δοθούν ως παράμετροι δηλώνονται εντός γωνιακών αγκύλων μετά το όνομα του τύπου. Π.χ. public class ArrayList<E>. Π.χ. public class HashMap<K, V>. Συμβάσεις στα ονόματα. (T)ype, S,U,V κτλ = 2 ος, 3 ος, 4 ος τύπος. (E)lement, (K)ey, (V)alue, (N)umber.

Πλεονεκτήματα Υλοποίηση γενικών δομών δεδομένων και αλγορίθμων. Δεν θα μπορούσαμε να χρησιμοποιήσουμε απλά την Object και κληρονομικότητα; Καλύτερος έλεγχος τύπου. Αποφυγή μετατροπής τύπων.

Δοχείο Ενός Αντικειμένου (1/4) public interface Container1 { boolean put(object object); Object get(); public interface Container2<T> { boolean put(t object); T get();

Δοχείο Ενός Αντικειμένου (2/4) public class Box1 implements Container1 { private Object object; public boolean put(object anobject) { if (anobject!= null && object == null) { object = anobject; return true; else return false; public Object get() { Object temp = object; object = null; return temp;

Δοχείο Ενός Αντικειμένου (3/4) public class Box2<T> implements Container2<T> { private Object T object; public boolean put(object T anobject) { if (anobject!= null && object == null) { object = anobject; return true; else return false; public Object T get() { Object T temp = object; object = null; return temp;

Δοχείο Ενός Αντικειμένου (4/4) public static void main(string[] args) { Box1 box1 = new Box1(); box1.put("laptop"); String content = (String) box1.get(); box1.put(19); content = (String) box1.get(); Box2<String> box2 = new Box2<>(); box2.put("laptop"); //box2.put(19); content = box2.get();

Γενική Κλάση με 2 Παραμέτρους public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; public static void main(string[] args) { Pair<Integer, String> p; p = new Pair<>(123, "Γιώργος Παππάς");

Γενικές Μέθοδοι Τύποι ως παράμετροι στον ορισμό μεθόδων. Δεν είναι ανάγκη να ανήκουν σε γενικό τύπο. Μπορεί να είναι και στατικές μέθοδοι. Ορισμός. Οι τύποι δίνονται πριν τον τύπο επιστροφής της μεθόδου.

Παράδειγμα public class Util1 { public static <T> void conc(list<t> a, List<T> b) { for (T e : b) a.add(e); public static void main(string[] args) { List<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); List<Integer> list2 = new ArrayList<>(); list2.add(4); list2.add(5); list2.add(6); conc(list1, list2); for (Integer i : list1) System.out.println(i);

Διαγραφή (Erasure) Τι γίνεται κατά τη μεταγλώττιση και εκτέλεση; Ένα και μοναδικό ή πολλά και διαφορετικά αρχεία bytecode (.class) ανάλογα με τους τύπους που δίνονται ως παράμετροι; Ένα αρχείο bytecode. Οι τύποι «διαγράφονται» και αντικαθίστανται από τον java.lang.object Οι τύποι που προκύπτουν καλούνται ακατέργαστοι (raw) και είναι διαθέσιμοι.

Παράδειγμα public static void main(string[] args) { Box2<String> box = new Box2<>(); if (box instanceof Box2<String>) System.out.println("true"); if (box instanceof Box2) System.out.println("true"); Σφάλμα μεταγλώττισης // ακατέργαστος τύπος Box2 anotherbox = new Box2(); anotherbox.put("laptop"); String content = (String) anotherbox.get(); System.out.println(content); Erasure.java

Περιορισμός του Τύπου Περιορισμός του τύπου. Μετά τον τύπο ακολουθεί η λέξη κλειδί extends και ακολουθεί κλάση ή διεπαφή. Μπορεί να γίνει χρήση μεθόδων του τύπου που καθορίζεται ως περιορισμός.

Παράδειγμα 1 public class NumberList<T extends Number> extends ArrayList<T> { public static void main(string[] args) { //NumberList<String> liststr = new NumberList<>(); NumberList<Integer> list = new NumberList<>(); list.add(5); list.add(6);

Παράδειγμα 2 public class NumBox<T extends Number> extends Box2<T> { public boolean isnegative() { return object.doublevalue() < 0; public static void main(string[] args) { NumberBox<Integer> boxinteger = new NumBox<>(); boxinteger.put(11); System.out.println(boxInteger.isNegative()); NumberBox<Double> boxdouble = new NumberBox<>(); boxdouble.put(-4.0); System.out.println(boxDouble.isNegative()); //NumberBox<String> boxstr = new NumberBox<>();

Παράδειγμα 3 public class Util2 { public static <T extends Comparable<T>> int countgreaterthan(list<t> l, T elem) { int counter = 0; for (T e : l) if (e.compareto(elem) > 0) counter++; return counter; public static void main(string[] args) { List<String> list = new ArrayList<>(); list.add("greg"); list.add("nick"); int x = countgreaterthan(list, "jim"); System.out.println(x);

Σχέσεις Μεταξύ Τύπων (1/4) Container2<T> Container2<Integer> Box2<T> Box2<String>

Σχέσεις Μεταξύ Τύπων (2/4) Container2<T> Container2<String> Box2<T> Box2<String>

Σχέσεις Μεταξύ Τύπων (3/4) Object Box2<Object> String Box2<String>

Σχέσεις Μεταξύ Τύπων (4/4) Box2<String> και Container2<Integer> Δεν υπάρχει σχέση. Box2<String> και Container2<String> Σχέση υποτύπου και υπερτύπου. Box2<String> και Box2<Object> Δεν υπάρχει σχέση. Relationships.java

Μπαλαντέρ (1/2) <?> Δηλώνει οποιονδήποτε τύπο. Αποτελεί το αντίστοιχο του Object για παραμέτρους και λύνει το πρόβλημα με τον πολυμορφισμό στους τύπους-παραμέτρους.

Παράδειγμα public class Wildcards { public static void main(string[] args) { //Box2<Object> b1 = new Box2<String>(); Box2<?> b2 = new Box2<String>();

Μπαλαντέρ (2/2) <? extends Τύπος>, <? super Τύπος> Περιορισμός του τύπου από πάνω, κάτω.

Παράδειγμα public class Util3 { public static double sum(list<? extends Number> l) { double s = 0; for (Number n : list) s += n.doublevalue(); return s; public static void main(string[] args) { List<Integer> list = new ArrayList<>(); list.add(5); list.add(6); list.add(7); double x = sumoflist(list); System.out.printf("%.0f%n", x);

Παράδειγμα: Collections.sort public static <T extends Comparable<? super T>> void sort(list<t> list) { Object[] a = list.toarray(); Arrays.sort(a); ListIterator<T> i = list.listiterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((t)a[j]); Γιατί χρησιμοποιείται περιορισμός από κάτω (super) εντός του γενικού τύπου της Comparable;

Ασκήσεις Διαχείριση προσωπικού πανεπιστημίου. Kλάσεις Person, Student, Professor. Kλάση Personnel με δυνατότητα προσθήκης μιας λίστας φοιτητών ή μιας λίστας καθηγητών ή γενικότερα μιας λίστας ατόμων. Δομές δεδομένων. Στοίβα με μεθόδους push, pop. Ουρά με μεθόδους push, pop και pushmany. Δέντρο με μεθόδους searchbreadth, searchdepth.

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Τέλος Ενότητας Επεξεργασία: Εμμανουήλ Ρήγας Θεσσαλονίκη, Εαρινό Εξάμηνο 2013-2014