Προγραμματισμός ΙΙ (Java) 3. Διαχείριση πολλαπλών αντικειμένων

Σχετικά έγγραφα
Προγραμματισμός ΙΙ (Java) 7. Συλλογές δεδομένων

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Week. 6: Java Collections

Week 7: Java Collection Classes

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

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

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

4 Συλλογές Αντικειμένων

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #2

Κατανεμημένα Συστήματα. Javascript LCR example

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

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

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

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

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

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Σι θα δούμε σε αυτό το μάθημα;

ΕΠΛ 012. JavaScripts

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

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

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

Στοιχειώδεις Δομές Δεδομένων

DOM. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

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

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

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

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Προγραμματισμός Δομές Δεδομένων

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

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

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

public class ArrayStack implements Stack {

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

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Από τη UML στον Κώδικα. Μέρος Α

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

Εφαρμοσμένη Πληροφορική ΙΙ (Ε) To Ολοκληρωμένο Περιβάλλον Ανάπτυξης (Integrated Development Environment-IDE) Netbeans 8

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

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

public class ArrayQueue implements Queue {

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Πέμπτη 11 / 12 / 2014 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

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

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

5. Επερώτηση XML Εγγράφων: Εισαγωγή στη Γλώσσα XQuery

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

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

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

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

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

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

Transcript:

Προγραμματισμός ΙΙ (Java) 3. Διαχείριση πολλαπλών αντικειμένων

Πίνακες Προκαθορισμένο μέγεθος Συνεχείς θέσεις Πίνακες τιμών Αρχικοποιούνται σε 0 ή false int[] a=new int[10]; boolean[] b=new boolean[10]; Πίνακες αντικειμένων Αρχικοποιούνται σε null String[] c= new String[10] 2

Περιορισμοί των πινάκων Οι εισαγωγές και οι διαγραφές σε κάποια θέση «κοστίζουν» Πρέπει να μετακινηθούν όλα τα υπόλοιπα στοιχεία για να καλύψουν το κενό ή να δημιουργήσουν χώρο. Αν γεμίσουν οι θέσεις θα πρέπει να αντιγράψουμε όλα τα στοιχεία σε νέο, μεγαλύτερο πίνακα. Η λογική διαδοχή των θέσεων του πίνακα ταυτίζεται με την πραγματική (ο πίνακας αποθηκεύεται σε συνεχόμενες θέσεις μνήμης) Θέλουμε να αποσυνδέσουμε τη λογική από την πραγματική διαδοχή θέσεων. Έτσι θα έχουμε διαγραφές και εισαγωγές χωρίς μετακίνηση 3

Δυναμικές δομές δεδομένων Περιέχουν αντικείμενα (οποιουδήποτε τύπου) Επιτρέπουν την εισαγωγή αντικειμένων με περισσότερες ελευθερίες από τους πίνακες Λίστες Κάθε στοιχείο (κόμβος) αποτελείται από το αντικείμενο και από ένα σύνδεσμο στο «επόμενο» στοιχείο Το τελευταίο στοιχείο δείχνει σε null 4

Υλοποιήσεις Η κλάση Vector Επιτρέπει να φτιάξουμε δομές όπως οι πίνακες που το μέγεθός τους αυξομειώνεται δυναμικά. Η κλάση ArrayList Υλοποιεί τη δομή της λίστας στη Java Χρησιμοποιεί πίνακες τους οποίους διπλασιάζει σε μέγεθος δυναμικά, όποτε απαιτείται 5

Η κλάση ArrayList Προτείνεται από τους δημιουργούς της Java ArrayList list = new ArrayList(); ή ArrayList<type> list = new ArrayList<>(); add(object searchkey), get(int position) Iterator it = list.iterator(); StringBuffer buf = new StringBuffer(); while (it.hasnext()) buf.append( it.next()).append( " " ); System.out.println(buf.toString()); 6

Άλλες μέθοδοι της ArrayList void clear(); //αδειάζει τη λίστα Object clone(); //δημιουργεί αντίγραφο boolean addall(collection c);//προσθέτει όλα τα //αντικείμενα της c στη λίστα boolean contains(object elem); // αναζητά το elem int indexof(object elem); //βρίσκει την θέση 1 ης //εμφάνισης Object remove(int index); //διαγράφει στοιχείο Object[] toarray();// επιστρέφει τα στοιχεία της //λίστας σε πίνακα αντικειμένων 7

Μειονέκτημα των containers (Vector, ArrayList κλπ). Αν δε χρησιμοποιηθεί ο περιορισμός τύπου: Όλα τα στοιχεία αποθηκεύονται ως Object Πρέπει να μετατραπούν (cast) για να χρησιμοποιηθούν οι μέθοδοί τους. Τα containers μπορεί να περιέχουν αντικείμενα διαφόρων κλάσεων list.add(new Employee()); list.add(new Address()); list.add(new Manager()); ((Employee)list.get(0)).getName(); ((Address)list.get(1)).getCity(); ((Address)list.get(2)).getCity(); //ΛΑΘΟΣ casting Όπως πάντα το μειονέκτημα έγινε τελικά πλεονέκτημα 8

Χρήσιμες μέθοδοι

Εισαγωγή με έλεγχο διπλοτύπων Η εισαγωγή με έλεγχο διπλοτύπων θα γίνει σε δύο φάσεις: Αναζήτηση για το αν υπάρχει ή όχι το αντικείμενο στον πίνακα ή τη λίστα Εισαγωγή στο τέλος ή σε κενή θέση - σε περίπτωση που δεν υπάρχει Υπάρχουν πιο γρήγορες λύσεις; Η ArrayList διαθέτει μεθόδους: int indexof(object elem): επιστρέφει τη θέση πρώτης εμφάνισης του elem στη λίστα int lastindexof(object elem) boolean contains(object elem) : επιστρέφει true αν η λίστα περιέχει το elem Object remove(int index) : διαγράφει το στοιχείο στη θέση index της λίστας και μας το επιστρέφει 10

Σύγκριση: Η μέθοδος equals Για να δουλέψουν οι προηγούμενοι μέθοδοι για λίστες με αντικείμενα δικών μας κλάσεων πρέπει στις κλάσεις μας να έχουμε μια μέθοδο equals π.χ. public boolean equals(object o){ Department d=(department)o; // πιθανό να παράγει //ClassCastException if (this.id==d.getid() && this.name.equals(d.getname()) && this.numstudents==d.getnumstudents()) return true; else return false; } 11

Ταξινόμηση Με ποιο τρόπο μπορώ να ταξινομήσω τα στοιχεία ενός πίνακα ή μιας λίστας; BubbleSort: public void bubblesort(int[] unsortedarray, int length) { int temp, counter, index; for(counter=0; counter<length-1; counter++) { for(index=0; index<length-1-counter; index++) { if(unsortedarray[index] > unsortedarray[index+1]) { temp = unsortedarray[index]; unsortedarray[index] = unsortedarray[index+1]; unsortedarray[index+1] = temp; } } } } 12

Διάταξη Η διάταξη στους ακεραίους είναι δεδομένη Τι γίνεται όμως με τις δικές μας κλάσεις; Πώς μπορούμε να ορίσουμε διάταξη στα αντικείμενά τους; public interface Comparable { int compareto(object o); } Comparable Department 13

public class Department implements Comparator{ public int compareto(object o){ Department d=(department)o; // πιθανό να παράγει //ClassCastException if (this.numstudents>d.getnumstudents()) return 1; else if (this.numstudents<d.getnumstudents()) return -1; else return 0; } } 14

Ταξινόμηση Collections.sort(allDeps); Ταξινομεί τα τμήματα με βάση τον αριθμό σπουδαστών που έχουν Χρησιμοποιεί την QuickSort 15

Χρήση κώδικα τρίτων

http://jsoup.org/ Έτοιμη βιβλιοθήκη για το χειρισμό του περιεχομένου ιστοσελίδων 17

Προσθήκη package στο Netbeans Κατεβάζουμε ένα μεταγλωττισμένο package για σύνδεση με την Oracle Βάζουμε το αρχείο σε ένα φάκελο lib εντός του project Ανοίγουμε τα properties του project και πηγαίνουμε στην επιλογή Libraries 18

Προσθήκη package στο Netbeans Επιλέγουμε Add JAR/Folder και εντοπίζουμε το αρχείο που κατεβάσαμε 19

Βασικά στοιχεία HTML 20

Παράδειγμα HTML <html> <head> <title>my Title</title> </head> <body> <h1>my header</h1> <a href="http://www.hua.gr">my link</a> </body> </html>

HTML DOM Ο κώδικας της σελίδας έχει μια δομή δέντρου

DOM Nodes Τα πάντα στη σελίδα είναι κόμβοι DOM Το ίδιο το έγγραφο (document node) Οι ετικέτες (tags) της σελίδας (element node) Το περιεχόμενο των ετικετών (text nodes) Οι παράμετροι και οι τιμές τους (attribute node) Τα σχόλια (comment node)

Σημαντικοί κόμβοι (elements) Root (Document) Γείτονες ενός Node Parents Children Siblings Leaf nodes Κόμβοι χωρίς παιδιά Div, Span: ομαδοποιούν περιοχές με κοινό περιεχόμενο

Σημαντικά attributes id Μοναδικό σε όλο το έγγραφο class Επαναλαμβάνεται σε κείμενα που έχουν κοινή μορφοποίση

Εργασία 26

Χρήσιμοι σύνδεσμοι https://transport.opendata.ch/ http://jsonviewer.stack.hu/ https://code.google.com/archive/p/json-simple/ http://www.tutorialspoint.com/json/json_java_example.ht m http://www.mkyong.com/java/json-simple-example-readand-write-json/ http://www.mkyong.com/java/how-to-send-http-requestgetpost-in-java/ 27

JSON example JSON stands for JavaScript Object Notation Despite the name, JSON is a (mostly) language-independent way of specifying objects as name-value pairs Example (http://secretgeek.net/json_3mins.asp): {"skillz": { "web":[ { "name": "html", "years": 5 }, { "name": "css", "years": 3 }] "database":[ { "name": "sql", "years": 7 }] }}

JSON syntax, I An object is an unordered set of name/value pairs The pairs are enclosed within braces, { } There is a colon between the name and the value Pairs are separated by commas Example: { "name": "html", "years": 5 } An array is an ordered collection of values The values are enclosed within brackets, [ ] Values are separated by commas Example: [ "html", xml", "css" ]

JSON syntax, II A value can be: A string, a number, true, false, null, an object, or an array Values can be nested Strings are enclosed in double quotes, and can contain the usual assortment of escaped characters Numbers have the usual C/C++/Java syntax, including exponential (E) notation All numbers are decimal--no octal or hexadecimal Whitespace can be used between any pair of tokens

Java project alternatives Δύο εναλλακτικές για τα project σας σε Netbeans (και αλλού): Ant: Εσείς κατεβάζετε τα third party libraries και τα αντιγράφετε στο project Maven: Αναζητάτε τα third party libraries (dependencies) σε maven repositories. 31

Βήματα Δημιουργούμε ένα νέο Maven Project Δημιουργούμε το package basics με τις βασικές κλάσεις Προσθέτουμε τα dependencies για jsoup και json-simple Κάνουμε το request με java ή και με jsoup Επεξεργαζόμαστε την απάντηση με json-simple. 32