Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΖώσιμος Καλαμογδάρτης Τροποποιήθηκε πριν 8 χρόνια
1
Οντοκεντρικό Προγραμματισμός Νίκος Παπαδάκης
2
Λειτουργία της JAVA Η Java είναι σχεδιασμένη για το Internet και γενικά για δικτυακές εφαρμογές Στην java το compiling(μεταγλώττιση) χωρίζεται σε δύο μέρη. - Στο πρώτο μέρος a) γίνεται έλεγχος συντακτικών λαθών και b)παράγεται ένας Byte code ο οποίος είναι κοινός ανεξαρτήτως σε ποίο μηχάνημα ή λειτουργικό έγινε το compiling. -Στο δεύτερο μέρος γίνεται η μετάφραση του πιο πάνω Byte code σε εκτελέσιμο κώδικα μηχανής. Αυτό εξαρτάται από το είδος της μηχανής και του λειτουργικού που υπάρχει. Για τον λόγο αυτό όταν γίνεται εγκατάσταση της java σε ένα υπολογιστή εγκαθίσταται μαζί με τον Compiler και μια java virtual machine(JVM). Αυτή παίρνει τον Byte code βλέπει τι είδους μηχανή υπάρχει από κάτω και παράγει τον αντίστοιχο εκτελέσιμο κώδικα.
3
Λειτουργία της JVM Άρα μπορούμε να κάνουμε μεταγλώττιση σε ένα μηχάνημα π.χ. Solaris και να τρέχουμε τον byte code σε ένα μηχάνημα windows. Για τον λόγο αυτό είναι κατάλληλη για windows
7
Πρώτο πρόγραμμα σε java Για να δημιουργήσομε ένα πρόγραμμα java πρέπει να έχει κατάληξη.java Κάθε πρόγραμμα java έχει μια κλάση με το ίδιο όνομα με το αρχείο. Πχ.το HelloWorld.java
8
Πρώτο πρόγραμμα σε java Όπως και στην C χρειαζόμαστε μια συνάρτηση main η οποία θα αποτελεί το κυρίως πρόγραμμα. Η System.out.println είναι η εντολή για εκτύπωση και δημιουργία νέα γραμμής
10
Μεταβλητές στην JAVA Όπως και στην c το όνομα μια μεταβλητής μπορεί να είναι οτιδήποτε είναι συμβατό με το unicode, δεν είναι δεσμευμένη λέξη και δεν έχει ξαναδηλωθεί μέσα στην ίδια εμβέλεια. Τα ονόματα των μεταβλητών ξεκινάνε με μικρά και είναι κεφαλαίο το πρώτο γράμμα όπου αλλάζει η λέξη Π.χ int numerOfStudent;
11
Βασικοί τύποι μεταβλητών
12
Βασικοί τύποι στην Java Σταθερές Για να δηλώσουμε “σταθερές” χρησιμοποιούμε την λέξη κλειδί Final Final maxNumberStudent=600; Σημαίνει ότι δεν μπορούμε να αλλάξουμε την τιμή της μεταβλητής.
13
JAVA Τελεστές(operators) Μοναδιαίοι τελεστές π.χ. count++ Δυαδικοί τελεστές π.χ. num1+num2 Η Java έχει μόνο ένα τριαδικό τελεστή τον ? Π.χ. int a,b; …. b= a>100?60:4 Ισοδύναμο με if(a>100) b=60 else b=4;
14
JAVA Τελεστές(operators)
15
Τελεστές σύγκρισης
16
Λογικοί τελεστές
17
Τελεστές σε επίπεδο bit
18
Λοιποί τελεστές Τελεστής καταχώρησης = Π.χ a=p; x+=10; //x=x+10;
19
Εντολή επιλογής If
20
Εντολή Επιλογής switch - case
21
Η εντολή switch case πρώτα υπολογίζει (αποτιμά) την έκφραση που βρίσκεται μετά το switch και στην συνέχεια διατρέχει όλες τις περιπτώσεις case και αν κάποια βρεθεί αληθής τότε εκτελούνται όλες οι εντολές που βρίσκονται μετά την :, αν δεν βρεθεί καμία τότε εκτελείται η default αν υπάρχει. Να σημειωθεί ότι αν βρεθεί μια case αληθής αλλά από τις εντολές που βρίσκονται μετά το : λείπει η break τότε η εκτέλεση συνεχίζεται μέχρι να βρεθεί μια break, χωρίς να γίνεται έλεγχος των αντιστοίχων case.
22
Εντολή Επιλογής switch - case
23
Εντολή επανάληψης for for(αρχικές τιμές συνθήκη τερματισμού;βήμα) for(i=1;i<=1000;i++) System.out.println(i); Οι εντολές break και continue έχουν την ίδια σημασία όπως και στην C
24
Εντολή επανάληψης while αρχικές τιμές while(συνθήκη τερματισμού) {…… Βήμα } i=0; while(i<=1000) { System.out.println(i); i++; } found=0; i=0; while(!found && i<100) { if (number[i]==x) found=1; else i++; }
25
Εντολή επανάληψης do-while do { εντολές }while(συνθήκη) Σε αυτήν οι εντολές εκτελούνται τουλάχιστον μια φορά Η επανάληψη τερματίζεται όταν η συνθήκη γίνει ψευδής
26
Δημιουργία πινάκων int [] arrayOfStudents; arrayOfStudents=new int[1000]; Σημαίνει ότι δηλώνουμε ένα πίνακα από ακεραίους 1000 θέσεων.
27
Δημιουργία/Προσπέλαση πινάκων int [] arrayOfStudents=new int[1000]; int i;............ for(i=0; i<arrayOfStudents.length;i++) { System.out.println(arrayOfStudents[i]); } //η ιδιότητα length επιστρέφει το μέγεθος του πίνακα. Στην java οι «μεταβλητές» έχουν κάποιες ιδιότητες.
28
Δημιουργία πινάκων (2) int b[][]=new int[300][200]; int c[][][]=new int[50][40][20]; Σημαίνει ότι δηλώνουμε ένα πίνακα 2 διαστάσεων 300χ200 και ένα πίνακα τριών διαστάσεων 50χ40χ20
29
Δημιουργία πινάκων (2) int a[][]=new int[300][200]; int i;............ for(i=0;i<a.length;i++) { for(j=0; j<a[i].length;j++) { System.out.println(a[i][j]); } Η πρώτη διάσταση θεωρείται ένα μονοδιάστατος πίνακας τα στοιχεία του οποίου είναι μονοδιάστατοι πίνακες ακεραίων. Έτσι το a.legnth επιστρέφει το μέγεθος της πρώτης διάστασης και το a[i].length το μέγεθος της γραμμής i.
30
String στην Java public class myMain{ public static void main(String[] args) { String Fname,Lname,AM; Fname=new String(“Maria”); Lname=new String(“Papadopoulou”); System.out.println(Fname+” “+Lname); AM=“HY654”; }} Στην Java υπάρχει η κλάση String To + κάνει συνένωση το string. Το τελικό αποτέλεσμα στο πιο πάνω παράδειγμα θα είναι “Maria Papadopoulou”. Για να δώσουμε τιμή σε ένα string μπορούμε να το κάνουμε καλώντας το new String(“ “) ή χρησιμοποιώντας τον τελεστής =
31
String στην Java Προσοχή ο τελεστής == δεν ισχύει για τα strings public class myMain{ public static void main(String[] args) { String str1,str2,str3; str1=“Xania”; str2=“Iraklio”; str3=“Xania”; if str1.equals(str3) // σωστή σύγκριση System.out.println(str1+”=“+str3); if (str1==str3) //λάθος σύγκριση System.out.println(str1+”=“+str3); }} Λεπτομέρειες θα δούμε στην συνέχεια.
32
Αντικειμενοστρεφής προγραμματισμός H java είναι μια γλώσσα αντικειμενοστραφούς προγραμματισμούς. Στον αντικειμενοστραφή προγραμματισμό υπάρχουν οι εξής βασικές έννοιες 1.Κλάσεις 2.Αντικείμενα 3.Συγκέντρωση και υπερφόρτωση 4.Κληρονομικότητα 5.Πολυμορφισμός
33
Κλάσεις Μια κλάση μοντελοποιεί σε αφαιρετικό επίπεδο αντικείμενα τα οποία έχουν κοινά χαρακτηριστικά. Π.χ. Η κλάση φοιτητής Ο κάθε φοιτητής έχει AM,Fname, Lname, Address, telephone ktl. Mια κλάση έχει και μεθόδους(συναρτήσεις) για την διαχείριση των κοινών χαρακτηριστικών Π.χ public void setAM(String A) {AM=A;}
34
Κλάσεις public class Student { private String AM,Fname,Lname,telephone; private int age; public void setAM(String S){ //θέτει τιμή στο AM AM=S;} public void setAge(int a){ //θέτει τιμή στο age if (a>=17) { age=a; } else {System.out.println(“error”); }....... }
35
Κλάσεις - constructor public class Student {private String AM,Fname,Lname,telephone,Address; private int age;........... public Student (String A, String Fn, String Ln, String Ad, String tel, int ag) { AM=A; Fname=Fn; Lname=Ln; Address=Ad; Telephone=tel; If (ag>=17) {age=ag;} } public Student (String A) { // δεύτερος κατασκευαστής ΑΜ = Α;} Οι μέθοδοι με το ίδιο όνομα με την κλάση χρησιμοποιούνται για να δημιουργήσουν νέα αντικείμενα αντιπρόσωπων της κλάσης
36
Αντικείμενα Τα αντικείμενα είναι αντιπρόσωποι μια κλάσης Κάθε αντικείμενο έχει όλα τα χαρακτηριστικά και τις μεθόδους της κλάσης της οποίας είναι αντιπρόσωπος. public class myMain{ public static void main(String[] args) { Student s1,s2; s1=new Student(‘HY123’,’Nikos’,’Papadopoulos’,’2821087652’,17); s2=new Student(‘HY223’); s2.setAge(20); … }} η κάθε κλάση έχει μια ή περισσότερες μεθόδους με το ίδιο όνομα με αυτήν και οι οποίοι καλούνται για να δεσμεύσουν μνήμη και να δημιουργήσουν ένα νέο αντικείμενο. κάθε αντικείμενο μπορεί να αναφερθεί στα χαρακτηριστικά του ή στις μεθόδους τους με την χρήση της τελείας (.)
37
Αντικείμενα public class myMain{ public static void main(String[] args) { Student s1,s2; s1=new Student(‘HY123’,’Nikos’,’Papadopoulos’,’2821087652’,17); s2=new Student(‘HY223’); s2.setAge(20); … }} Τα αντικείμενα s1 και s2 έχουν διαφορετικό χώρο στην μνήμη. Για να δημιουργηθεί ένα νέο αντικείμενο πρέπει να κληθεί ο constructor της κλάσης της οποίας είναι αντιπρόσωπος Στο πιο πάνω παράδειγμα το αντικείμενο s1 έχει τιμή σε όλα τα χαρακτηριστικά του ενώ το s2 μόνο στο AM.
38
Πίνακες Αντικειμένων public class myproject { public static void main(String[] args) { Student[] s; s=new Student[100]; //ορίζουμε ότι θα έχουμε 100 φοιτητές s[0]=new Student("Hy2543", "Kostas","papa","ikarou","ikhjhg",20); s[1]=new Student("Hy7653", "nikos","papa","ikarou","jghf",23); System.out.print(s[0].AM+s[1].AM+s.length); //το length είναι 100 }
39
Πίνακες Αντικειμένων Μπορούμε να ορίσουμε ένα πίνακα από αντικείμενα μια κλάσης. Για να δημιουργηθεί ο πίνακας χρησιμοποιούμε new ONOMA_CLASS[num] Μπορεί μια κλάση να έχει ως χαρακτηριστικό ένα πίνακα από αντικείμενα άλλη κλάσης π.χ. Η κλάση department
40
Παράδειγμα Να ορίσετε την κλάση department η οποία θα έχει 500 φοιτητές και θα πρέπει να υποστηρίζει εισαγωγή διαγραφή φοιτητών και εκτύπωση Επίσης η κλάση department θα έχει όνομα, ένα πίνακα από 20 τηλέφωνα (πρέπει να υποστηρίζει εισαγωγή διαγραφή και εκτύπωση)
41
Παράδειγμα public class department{ private Student st[]; private int numOfStudent; private String Name; private String [] arrayOfTelephone; public department(String n){ //ο Constructor Name=n; st=new Student[500]; arrayOfTelephone=new String[20]; numOfStudent=0; }
42
Παράδειγμα (συν.) //εισαγωγή νέου φοιτητή public void insertStudent(String AM,String Fname,String Lname, String Address, String Telephone,int age) { if (numOfStudent>=500) System.out.print("the numeber of students is 500"); else { st[numOfStudent]=new Student(AM,Fname,Lname,Address,Telephone,age); numOfStudent++; }
43
Παράδειγμα(συν) //διαγραφή φοιτητή public void deleteStudent(String AM) { int i; i=0; while ((i<numOfStudent) && (!AM.equals(st[i].AM))) i++; if (i==numOfStudent) {} else { int k=i; for(k=i;k<numOfStudent;k++){ st[k]=st[k+1]; } numOfStudent--; }
44
Παράδειγμα (συν.) //εκτύπωση public void printStudent(){ System.out.println(numOfStudent); int i=0; while (i<numOfStudent) { System.out.println(st[i].AM); i++; }
45
public class myproject { public static void main(String[] args) { department d; d=new department("HMMY"); d.insertStudent("HY254", "Kostas","papa","ikarou","234345",20); d.insertStudent("HY7653", "nikos","papa","ikarou","345545",23); d.insertStudent("HY544", "manos","papa","kalokairinou","3242424",23); d.insertStudent("HY354", "manos","papa","kalokairinou","43242",23); d.insertStudent("HY123", "manos","papa","kalokairinou","32342",23); d.printStudent(); d.deleteStudent("HY254"); d.printStudent(); // } // TODO, add your application code //System.out.println("Hello World!"); } Τι θα εκτυπώσει το πιο πάνω πρόγραμμα.
46
Πλεονεκτήματα Αντικειμενοστρεφούς προγραμματισμού Μπορούμε να αποκρύπτομε πληροφορία την οποία δεν θέλουμε να βλέπει ο χρήστης. Μπορούμε να ελέγχουμε τι τιμές βάνει ο χρήστης σε κάθε χαρακτηριστικό. Αυτό επιτυγχάνεται με το να «αναγκάσουμε» τον χρήστη να χρησιμοποιήσει τις μεθόδους για να προσπελάσει ένα αντικείμενο.
47
Υπερφορτισμός Μια κλάση μπορεί να έχει πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικούς παραμέτρους (σε τύπο, σε αριθμό, ή ακόμα και στην σειρά). Όταν ένα αντικείμενο καλεί μια μέθοδο η οποία έχει οριστεί πολλές φορές με το ίδιο όνομα τότε το ποία από όλες θα καλεστεί εξαρτάται από τα ορίσματα. Ο ορισμός πολλών μεθόδων με το ίδιο όνομα ονομάζεται υπερφορτισμός.
48
Οι λέξεις public – private - protect Ότι είναι public μπορούμε να το προσπελάσουμε από οπουδήποτε Ότι είναι private μπορούμε να το προσπεράσουμε μόνο με χρήση των μεθόδων της κλάσης. Ότι είναι protect μπορούμε να το προσπεράσουμε μόνο με χρήση των μεθόδων της κλάσης. Η διαφορά private – protect θα φανεί παρακάτω όταν εξηγήσομε την κληρονομικότητα
49
public-private-protect public class Student {private String AM,Fname; public Lname,telephone; protect int age;........... public Student (String A, String Fn, String Ln,String Ad, String tel, int ag) { AM=A; Fname=Fn; Lname=Ln; Address=Ad; Telephone=tel; If (ag>=17) {age=ag;} } public Student (String A) { ΑΜ = Α;} public class myMain{ public static void main(String[] args) { Student s1,s2; s1=new Student(……); s2=new Student(‘HY223’); s2.setAge(20); s1.Lname=“Papas”; //σωστό s1.age=23; //λάθος s1.setAge(20); //σωστό s1.AM=“HY5644”; //λάθος s1.setAM(“HY5644”); //σωστό … }
50
Πλεονεκτήματα από τον ορισμό κλάσεων
51
Η έννοια του this public class Student {private String AM,Fname,Lname,telephone,Address; private int age;........... public Student (String AM, String Fname, String Lname, String Address, String telphone, int age) { this.AM=AM; this.Fname=Fname; this.Lname=Lname; this.Address=Address; this.telephone=telphone; if (ag>=17) {this.age=age;} } To this μας βοηθάει να ξεχωρίσομε σε ποία μεταβλητή αναφερόμαστε (στα χαρακτηριστικά του αντικειμένου ή στην παράμετρο της μεθόδου To this αναφέρεται στο αντικείμενο το οποίο καλεί την μέθοδο.Άρα το this. είναι χαρακτηριστικό.
52
Η έννοια του this Μπορούμε να χρησιμοποιήσομε την λέξη κλειδί this για να αναφερθούμε σε συγκεκριμένο αντικείμενο κατά το run- time. Αυτό σημαίνει ότι το this είναι ο δείκτης που δείχνει στο αντικείμενο το οποίο καλεί την συγκεκριμένη μέθοδο.
53
Compiling Όταν ορίσουμε μια κλάση για να δούμε την λειτουργίας της πρέπει να ορίσουμε μια main όπως είδαμε προηγουμένως και μέσα στην main να ορίσουμε αντικείμενα αυτής της κλάσης. Πρέπει τα δύο αρχεία να βρίσκονται στον ίδιο κατάλογο και να γίνουν compiling με την εξής σειρά: πρώτα το αρχείο που περιέχει την κλάση και μετά το αρχείο της main. Κατά την διάρκεια του compiling της main γίνεται ενσωμάτωση του.class(byte code) της κλάσης.
54
Διάβασμα από το consol Στην java δεν υπάρχει εντολή για διάβασμα από την είσοδο όπως στην C το scanf. Για να διαβάσουμε στην java θα πρέπει να διαβάσουμε την είσοδο μέχρι τον \n και στην συνέχεια να επεξεργαστούμε την είσοδο.
55
Εντολές για consol reader import java.io.*; // needed for, InputStream, InputStreamReader, BufferedReader etc. /** A Java program that demonstrates console based input and output. */ public class MyConsoleIO { // Create a single shared BufferedReader for keyboard input private static BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) ); // Program execution starts here public static void main ( String [] args ) throws IOException { // Prompt the user System.out.print( "Type some data for the program: " ); // Read a line of text from the user. String input = stdin.readLine(); // Display the input back to the user. System.out.println( "input = " + input ); } // end main method } // end MyConsoleIO class
56
Κλάσεις που χρειάζονται για το consol reader java.io.InputStream - stores information about the connection between an input device and the computer or program.java.io.InputStream java.io.InputStreamReader - used to translate data bytes received from InputStream objects into a stream of characters.java.io.InputStreamReader java.io.BufferedReader - used to buffer (store) the input received from a InputStreamReader object. This is done to improve the efficiency. Input devices are much slower than the computer's processor and buffering the data reduces the number of times the CPU has to interact with the device itself.java.io.BufferedReader
57
Διάβασμα από το consol ακεραίου String input = stdin.readLine(); int number = Integer.parseInt( input ); Πρώτα διαβάζουμε ως string και στην συνέχεια τον μετατρέπουμε σε ακέραιο. Υπάρχει πρόβλημα όταν του δώσουμε λάθος στην είσοδο π.χ. Α876 τότε η java θα επιστρέψει ένα exception. Τα Exceptions δημιουργούνται όταν υπάρχουν απροσδιόριστη λειτουργία. Είδη Exceptions NullPointerException και ArithmeticException. Παρακάτω θα μλήσουμε αναλυτικά
58
Κληρονομικότητα Μπορούμε να ορίσουμε μια κλάση η οποία να κληρονομεί από μια άλλη κλάση όλα τα χαρακτηριστικά και τις μεθόδους. Όμως μπορεί να αναφερθεί απευθείας μόνο σε αυτά τα οποία είναι public ή protect. Στα private μπορεί να αναφερθεί μόνο μέσω τον μεθόδων που κληρονομεί. Μπορούμε να ορίσουμε επιπλέον και άλλα χαρακτηριστικά Η κληρονομικότητα μας επιτρέπει να «επεκτείνουμε» τον κώδικα που έχουμε γράψει.
59
Κληρονομικότητα public class underGraduate extends Student { } Η κλάση underGraduate κληρονομεί από την κλάση student όλα τα χαρακτηριστικά και τις μεθόδους. Όμως μπορεί να αναφερθεί απευθείας μόνο σε αυτά τα οποία είναι public ή protect. Στα private μπορεί να αναφερθεί μόνο μέσω τον μεθόδων που κληρονομεί. Μπορούμε να ορίσουμε επιπλέον και άλλα χαρακτηριστικά
60
Κληρονομικότητα public class Student {private String AM,Fname; public Lname,telephone; protect int age;........... public String getAM() { return AM; } public Student (String A) { ΑΜ = Α;} public class underGraduate extends Students{ private gredits; public underGraduate() { …..} public void printUnder() { // το παρακάτω είναι λάθος System.out.println(ΑΜ); //το παρακάτω είναι σωστό System.out.println(getAM()); //το παρακάτω είναι σωστό System.out.println(age);
61
Κληρονομικότητα public class underGraduate extends Students{ private gredits; public underGraduate() { …..} public void printUnder() { // το παρακάτω είναι λάθος System.out.println(ΑΜ); //το παρακάτω είναι σωστό System.out.println(getAM()); //το παρακάτω είναι σωστό System.out.println(age); Γιατί είναι private στην κλάση Student από την οποία κληρονομείται Γιατί η προσπέλαση γίνεται με χρήση μεθόδου που κληρονομείται Γιατί είναι protect
62
Κληρονομικότητα public class Student {private String AM,Fname; public Lname,telephone; protect int age;........... public String getAM() { return AM; } public Student (String A) { ΑΜ = Α;} public class underGraduate extends Students{ private gredits; public underGraduate() { …..} public void printUnder() { …..} }
63
Κληρονομικότητα public class myMain{ public static void main(String[] args) { underGraduate s1,s2; s1=new underGraduate(……………); System.out.println(Lname); s1.setAge(24); // την κληρονομεί από τον Student … }}
64
Κληρονομικότητα Στην κληρονομικότητα δεν χρειάζεται να «γίνει» include το ένα αρχείο στο άλλο. Αρκεί να υπάρχουν και τα δύο αρχεία στον ίδιο κατάλογο. Η σειρά του compiling πρέπει να γίνει με την εξής σειρά: πρώτα η υπερκλάση και μετά η υποκλάση. Κατά την διάρκεια του Compiling της υποκλάσης γίνεται include το.class(byte code) της υπερκλάσης.
65
Πως μπορούν να χρησιμοποιηθούν μέθοδοι από την super κλάση οι οποίες έχουν επανοριστεί public class Student {protected String AM,Fname,Lname,telephone,Address; protected int age; public Student (String AM, String Fname, String Lname,String Address, String telphone, int age) { this.AM=AM; this.Fname=Fname; this.Lname=Lname; this.Address=Address; this.telephone=telphone; if (age>=17) {this.age=age;} } public void print() {System.out.print(Fname+" "+Lname+" "+age);} } public class UnderGraduate extends Student { private int yearOfStudies; public UnderGraduate(String AM, String Fname, String Lname, String Address, String telphone, int age,int yearOfStudies) { super(AM,Fname,Lname,Address,telphone,age); this.yearOfStudies=yearOfStudies; } public void print() { System.out.println(""); super.print(); //καλείται η μέθοδο της student System.out.print(yearOfStudies);} }
66
Πως μπορούν να χρησιμοποιηθούν μέθοδοι από την super κλάση οι οποίες έχουν επανοριστεί Στην υπερκλάση μπορούμε να αναφερθούμε με χρήση της λέξης κλειδί super. Αν θέλουμε να αναφερθούμε σε Constructor μπορούμε να το καλέσουμε ως super(…..). Ανάλογα με τις παραμέτρους καλείται και ο αντίστοιχος constructor της υπερκλάσης Αν θέλουμε να καλέσουμε μια μέθοδος της υπερκλάσης τότε χρησιμοποιούμε το super.nameMethod()
67
Πολυμορφισμός Με τον όρο πολυμορφισμός εννοούμε ότι ένα αντικείμενο μπορεί να έχει πολλές μορφές. Ας δούμε ένα παράδειγμα. Student Graduate Undergraduate
68
Παράδειγμα public class Student { protected String Fname,Lname,Am,Address; Student( String f, String L, String Am..){..} …….. } public class underGraduate extends Student { private int yearofStudies; underGradute( String f, String L, String Am..){….}; …….. } public class graduate extends Student{ private String specialization; graduate( String f, String L, String Am..); …….. }
69
Παράδειγμα public class myMain{ public static void main(String[] args) { Student [ ] arrayOfStudent; int i,type; for(i=0;i<1000;i++) { System.out.print(“give the type of student:”); // εδώ διαβάζουμε τον τύπο από consol όπως είδαμε switch(type){ case 1: //diabazoume ta dedomena gia undergraduate arrayOfStuent[i]=new underGraduate(….); case 2: //diabazoume ta dedomena gia graduate arrayOfStuent[i]=new graduate(….); } }}
70
Παράδειγμα Παρατηρούμε ότι κάθε στοιχείο του πίνακα μπορεί να είναι ένα αντικείμενο τύπου underGraduate ή graduate. Αυτό ονομάζεται πολυμορφισμός.
71
Πολυμορφισμός Ένα αντικείμενο μπορεί να εμφανίζεται με πολλές μορφές. Ένα αντικείμενο μια υπερκλάσης μπορεί να είναι οποιοδήποτε τύπου υποκλάσης της. Αυτό είναι πολύ χρήσιμο όταν ξέρουμε ότι θα έχουμε πολλά αντικείμενα τα οποία κληρονομούν από μια κλάση αλλά δεν ξέρομε εξαρχής σε ποία υποκλάση ανήκουν.
72
Abstract κλάσεις Abstract κλάση είναι μια κλάση για την οποία δεν μπορούμε να ορίσουμε αντικείμενα αλλά χρησιμοποιείται όμως από άλλες κλάσεις οι οποίες κληρονομούν από αυτήν. Οι νέες κλάσεις μπορούν να έχουν αντικείμενα. Στις νέες κλάσεις μπορούμε να ορίσουμε επιπλέον ότι χρειαζόμαστε. Μια abstract κλάση μπορεί να περιέχει και abstract μεθόδους. Αυτές οι μέθοδοι κληρονομούνται από τις άλλες κλάσεις αλλά πρέπει οπωσδήποτε να επαναοριστούν στις νέες κλάσεις. Οι abstract κλάσης μας χρησιμεύουν για να καθορίσουμε την λειτουργία κάποιων κλάσεων. Για παράδειγμα αν θέλουμε να φτιάξουμε μια κλάση η οποία θα χειρίζεται κάποια Frame θα θέλαμε να καθορίσουμε τι γίνεται όταν γίνει αριστερό ή δεξί κλικ στο ποντίκι.
73
Abstract κλάσεις Παράδειγμα abstract class myAbstractClass { public int a; myAbstractClass(int l){ a=l; } //Οι abstract μεθόδοι δεν έχουν //υλοποίηση μόνο ορισμό public abstract void setA(int a); } public class newClass extends myAbstractClass { public newClass(int a) {super(a);} // Πρέπει να οριστεί οπωσδήποτε γιατί //είναι abstract στην υπερκλάση public void setA(int k){ a=k;} }
74
Abstract κλάσεις Στις κλάσεις μπορούμε να ορίσουμε κάποιες μεθόδους ως final. Αυτό σημαίνει ότι δεν μπορούν να επαναοριστούν στις κλάσεις οι οποίες κληρονομούν από αυτήν την κλάση Οι μέθοδοι που είναι final μας επιτρέπουν να αναγκάσουμε τον προγραμματιστή να τις χρησιμοποιήσει με συγκεκριμένο τρόπο. Π.χ μεθόδους set, get Αν μια κλάση οριστεί ως final δεν μπορούμε να ορίσουμε υποκλάσεις για αυτήν την κλάση.
75
Abstract κλάσεις Παράδειγμα abstract class myAbstractClass { public int a; myAbstractClass(int l){ a=l; } //Σημαίνει ότι δεν μπορεί να //επαναοριστεί final public void print() { Sytem.out.println(a); } public class newClass extends myAbstractClass { public newClass(int a) {super(a);} //Είναι λάθος. Ο complier θα τυπώσει //ανάλογο μήνυμα γιατί απαγορεύεται //ο επαναορισμός public void print(){ System.out.println(“the value=“+a); }
76
Ηλεκτρονκή τεκμηρίωση της διασύνδεσης προγραμματισμού εφαρμογών (API) Η java παρέχει μια μεγάλη ένα πολύ μεγάλο σύνολο από έτοιμες κλάσεις τις οποίες μπορούμε να χρησιμοποίησομε. Θα πρέπει να μάθετε να χρησιμοποίηται το API. Μπορείτε να το κατεβάσεται από το site της sun. Ανοίξετε το κατάλογο docs/index.html και πατήσεται την επιλογή API and Language
77
Ηλεκτρονκή τεκμηρίωση της διασύνδεσης προγραμματισμού εφαρμογών (API) Θα σας εμφανίσει μια σελίδα η οποία αποτελείται από 2 frames. Στο αριστερό περιγράφονται η κλάσης που είναι διαθέσιμες και στο αριστερό περιγράφονται όλα τα πακέτα. Οι κλάσεις είναι οργανωμένες σε πακέτα. Περισσότερα για την χρήση του API στο φροντηστήριο. Είναι ΑΠΑΡΑΙΤΗΤΟ να μάθετε να χρησιμοποιήται το API.
78
Εξαιρέσεις Εξαιρέσεις είναι ένα σήμα που παίρνουμε από την JVM σε χρόνο εκτέλεσης ότι κάτι μη «συμβατό» συμβαίνει. Πχ. Διαίρεσει με το 0, αναφορά σε null δείκτη. Στην java έχομε πολλές εξαιρέσεις. Η java μας προσφέρει ένα οργανωμένο τρόπο για την διαχείριση των εξαιρέσεων.
79
Πιθανές Περιπτώσεις Εξαιρέσεων Διαίρεση με το 0, εύρευση τετραγωνικής ρίζας ή λογαρίθμου αρνητικού αριθμού, οποιαδήποτε μαθηματική πράξη η οποία είναι αδύντη. Προσπάθεα πρόσβαση σε μη έγκυρη θέση πίνακα. Προσπάθεια να διαβάσομε ένα κενό αρχείο. Προσπάθεια να εκετελέσομε κάποια μέθοδο με λάθος είσοδο. Προσπάθεια να χρησιμποιήσουμε ένα Null δείκτη. Ανεπιτυχής προσπάθεια να εκτελέσομε μια sql εντολή. Κτλ.
80
Τι γίνεται όταν συμβεί μια εξαίρεση εξαίρεσης Δημιουργήται ένα αντικείμενο εξαίρεσης. Αυτό το αντικείμενο εξαίρεσης περιέχει πληροφορίες για την εξαίρεση. (Δηλαδή τι το δημιούργησε κτλ.) Όταν δημιουργηθεί μια εξαίρεση θα πρέπει το πρόγραμμα να είναι σε θέση να την χειριστεί.
81
Ιεραρχία Εξαιρέσεων Exception IOExceptionSQLExceptionRuntimeException ArithemeticExceptionNullPointerExecption Object Thrwable Error VirtualMachine
82
Χειρισμός Εξαιρέσεων RuntimeExeception Οι εξαιρέσης τύπου RuntimeExeception μπορεί να είναι -Διαίρεση με το 0, εύρευση τετραγωνικής ρίζας ή λογαρίθμου αρνητικού αριθμού, οποιαδήποτε μαθηματική πράξη η οποία είναι αδύντη. -Προσπάθεα πρόσβαση σε μη έγκυρη θέση πίνακα. - Προσπάθεια να διαβάσομε ένα κενό αρχείο. -Προσπάθεια να εκετελέσομε κάποια μέθοδο με λάθος είσοδο. Πρέπει να γράφουμε τα προγράμματα μας έτσι ώστε να μην συμβαίνουν αυτές οι εξαιρέσεις.
83
Χειρισμός Εξαιρέσεων ΙΟExeception - SQLException Αυτές είναι εξαιρέσεις που μπορούν να συμβούν - Προσπαθώντας να διαβάσομε ένα άδειο αρχείο - Προσπαθώντας να δώσουμε λάθος είσοδο - Προσπαθώντας να εκτελέσουμε μια εντολή sql με λάθος τρόπο. Πρέπει να ελέγχονται με χρήση της εντολής try{….} catch(..){….} ή πρέπει να προωθούνται εκτός μεθόδου με χρήση της throws, throw.
84
Χειρισμός Εξαιρέσεων Error Σε αυτήν την περίπτωση το λάθος οφείλεται σην Virtual Manchine. Δεν μπορούμε να κάνουμε τίποτα.
85
Χειρισμός exceptions try-catch Σύνταξη try{ ………… } catch(typeEcx1 e){.. } catch(typeExc2 e){…} …. finally{…..}
86
Χειρισμός exceptions try-catch Στο try { } γράφουμε τις εντολές που μπορεί να πετάξουν κάποιο exception το οποίο το περιγράφουμε στο catch. Στο catch λέμε στον compiler τι να κάνει και μετά που θα προκύψει ένα exception. Η λειτουργία του προγράμματος δεν σταματά αλλά συνεχίζει κανονικά. Υπάρχουν πολλών ειδών exception. Μπορούμε να χειριστούμε το κάθε είδος ξεχωριστά. Αυτό σημαίνει ότι μπορούμε να έχουμε πολλά μπλοκ catch μετά από κάθε μπλοκ try.
87
Χειρισμός exceptions try-catch Όταν συμβεί μια εξαίρεση σε κάποια εντολή στο μπλοκ try{..} τότε σταματάει η εκτέλεση, ο έλεγχος θα υπεπηδήσει όλες τις υπόλοιπες ετολές του try και θα φτάσει στο πρώτο μπλοκ catch το οποίο έχει παράμετρος η οποία ταιργιάζει με την εξαίρεση που δημιουργήθηκε. Αυτό σημαίνει ότι θα εκτελεστεί το μπλοκ του catch το οποίο έχει ως παράμετρο αντικείμενο της ίδιας κλάσης ή υπερκλάσης με το αντικείμενο της εξαίρεσης που δημιουργήθηκε. Μετά την εκτέλεση του αντιστοίχου μπλοκ του catch η εκτέλεση του προγράμματος συνεχίζει μετά το τέλος της εντολής try-catch
88
Χειρισμός exceptions try-catch Finally: αυτό το μπλοκ εκτελείται πάντα. Περιέχει εντολές όπως κλείσιμο αρχείων, αποσύνδεση από βάση δεδομένωνκτλ. Αυτό το μπλοκ δεν είναι απαραίτητο. Το μπλοκ αυτό εκτελείται ακόμα και αν εκτελεστεί ένα catch.
89
Χειρισμός exceptions try-catch Προσοχή όταν θέλουμε να χειριστούμε εξαιρέση άπό τις οποίες η μια ανήκει σε υποκλάση και η άλλη σε υπερκλάση τότε: - πρέπει το catch που αναφέρεται στην υποκλάσης πρέπει να είναι πρώτα από αυτό της υπερκλάσης π.χ try{….} catch(FileNotFoundException e){….} catch(IOException e){……….}
90
Χειρισμός exceptions try-catch void readInt(BufferedReader in,int [] numbers) { try{ String input = stdin.readLine(); int number = Integer.parseInt( input ); } catch ( IOException e ) { System.out.println(e); System.out.println("Unable to finish adding data."); }
91
Χειρισμός exceptions throws Σύνταξη throws κλάση1, κλάση2,... Όλες οι κλάσεις πρέπει να ανήκουν στην κλάση Throwable ή σε υποκλάσεις της. Όταν γίνει χρήση της Throws σε μια μέθοδο τότε όταν συμβεί μια εξαίρεση ο έλεγχος μεταφέρεται εκτός της μεθόδου στην πρώτη εντολή try catch που μπορεί να χειριστεί αυτή την εξαίρεση (μπορεί να την χειριστεί αν υπάρχει το αντιστοιχο μπλοκ catch το οποίο χειρίζεται την αντίστοιχη εξαίρεση). Αν δεν υπάρχει τέτοιο μπλοκ τότε ο έλεγχος μεταφερεται στο τέλος της main και τερματίζεται η εκτέλεση. Αν η μέθοδο είναι η main τότε
92
Χειρισμός exceptions throws μαζί με try-catch public static void main(String[] args) throws Exception{ String Filename=“num.txt” …… try{……} catch(FileNotFoundException e) {System.out.println(“…….”); } Εδώ όλες οι εξαιρέσεις εκτός από την FileNotFoundExceptions παράγονται απο την main.
93
Χειρισμός exceptions throws Αν σε μια μέθοδο υπάρχει χρήση της εντολής throws και η κλάση στην οποια ανήκει η μέθοδο κληρονομείται σε μια άλη κλάση στην οποία γίνεται επανορισμός της μέθοδου τότε: -Δεν έχει νόημα να γίνει η «νέα» μέθοδο να παράγει περισσότερες εξαιρέσης από την «αρχική» μέθοδο.
94
Χειρισμός exceptions throws The throws IOException σημαίνει ότι μπορεί να συμβεί κάποιο IOException και λεει στον compiler ότι αν συμβεί αυτό τότε αντί να τερματίσει την λειτουργία του προγράμματος θα πρέπει να τερματίσει την λειτουργία της μεθόδου που το καλεί. Αν αυτή είναι η main τότε η λειτουργία του προγράμματος θα τερματίσει. int i=0; void readInt(BufferedReader in,int [] numbers) throws ΙOException { String newData = in.readLine(); while ( newData != null ) { numbers[i] = Integer.parseInt( newData ); i++; newData = in.readLine(); } } Η εκτέλεση θα μεταφερθεί εκτός της μεθόδου readInt και θα προσπαθήση να βρει το πρώτο block που μπορεί να χειριστή αυτή την εξαίρεση.
95
Δημιουγία Δικών μας Αντικειμένων Εξαιρέσεων H java μας δίνει τν δυνατότητα να δημιουργούμε δικά μας αντικείμενα εξαιραίσεων. Π.χ Θέλομε να διαβάσομε ένα αριθμό μεταξύ 0 – 100 try{ int number=InputReader.inputInteger(“Enter an integer:”); if (number 100) throw new numberFormatException(); } catch(numberFormatException e){ System.out.println(“Invaid number.”); }
96
Δημιουγία Δικών μας Αντικειμένων Εξαιρέσεων Με την εντολή throw new numberFormatException(); Σταματάμε την εκτέλεση της μεθόδου και μεταφέρεται έλεγχος στο πρώτο catch που μπορεί να χειριστεί αυτήν την εξαίρεση.
97
Δημιουγία Δικών μας Αντικειμένων Εξαιρέσεων Public class numberFormatException extends Exception { Public numberFormatException (){ Super(“Invalid value”); } Public numberFormatException (String msg){ Super(msg); } Κάθε νέα δημιουργία κλάσης εξαιρέσεων είναι υποκλάση της exception.
98
Δημιουγία Δικών μας Αντικειμένων Εξαιρέσεων Μπορούμε να δημιουργήσομε και υποκλάσης της κλάσης που ορίσαμε για τα δικά μας exception. Public class numberNegative extends numberFormatException { Public numberNegative (){ Super(“negative value”); } Public numberNegative (String msg){ Super(msg); }
99
Δημιουργία Δικών μας Αντικειμένων Εξαιρέσεων try{ int number=InputReader.inputInteger(“Enter an integer:”); if (number<0) throw new numberNegative (); else if (number >100) …… } catch(numberFormatException e){ If (e instanceof numberNegative() System.out.println(“negative number.”); System.out.println(“Invalid number.”); } Προσέξεται το διμελή τελεστή instanof. Δέχεται ως πρώτο όρισμα ένα αντικείμενο Και ως δεύτερο΄μια κλάση. Επιστρέφει true α το αντικείμενο είναι στιγμιότυπο της κλάσης
100
Εισαγωγή στην Μοντελοποίηση Η μοντελοποίηση χρησιμοποιήται σε πολλές δραστηριότητες για την αναπαράσταση διαφόρων λειτουργιών. Οντότητα είναι το οτιδήποτε έχει φυσική ή αφηρημένη υπόσταση(π.χ. Κτίριο, μάθημα, φοιτητές, καθηγητές). Μοντέλο μιας Οντότητας είναι μια απλουστευμένη αναπαράσταση της. (Δηλαδή δίνει μια περιγραφή της Οντότητας) Η ίδια η οντότητα μπορεί να αναπαρασταθεί με πολλά διαφορετκά μοντέλα. - Διαφορετικί τύποι αναπαράστασης - Διαφορετικά επίπεδα λεπτομέρειας/αφαίρεσης -Έμφαση σε διαφορετικά χαρακτηριστικά της οντότητας.
101
Παράδειγμα Οντότητα: Ένα κτίριο Διαφορετικά μοντέλα: - Τρισδιάστατο μοντέλο σε λογισμικό σχεδίασης με χρήση Η/Υ (CAD) - Τρισδιάστατη μακέτα από πλαστικό. Μοντέλο CAD - Πριέχει ακριβείς λεπτομέριες για την αρχιτεκτονική του, τις διαστάσεις των εσωτεριών χώρων, τα υλικά κατασκευής - Χρησιμοποιείται από μηχανικούς/αρχιτέκτονες πριν και κατά την διάρκεια της κατασκευής του. Μακέτα - Παρέχει υψηλά επίπεδα ακρίβειας όσον αφορά την εωτερική εμφανιση του κτιρίου και την ενσωμάτωση του στον περιβάλλοντα χώρο. -Μπορεί να χρησιμοποιηθεί από τους κατασκευαστές σε εκδηλώσεις δημοσιότητας και για επίδειξη στους πελάτες.
102
Μοντελοποίηση συστημάτων Μοντέλο ενός συστήματος ονομάζουμε την αναπαράσταση του με χρήση συνήθως κάποιας αυστηρά καθορισμένης γλώσσας/σημειογραφίας. Χρήση μοντέλων είναι ιδιαίτερα σημαντική στην ανάπτυξη συστημάτων. -Στην κατανόηση και ανάλυση σύνθετων τεχνικών προβλημάτων -Στην περιεκτική παρουσίαση πολύπλοκων συστημάτων -Στην επικοινωνία μεγάλων και ενδεχομένως χωρικά διασπαρμένων ομάδων ανάπτυξης Διαφορετκά μοντέλα μπορούν να παρουσιάζουν το ίδιο σύστημα από διαφορετική οπτική γωνία.
103
Οντοκεντρική Μοντελοποίηση Ένα οντοκεντρικό σύστημα λογισμικού μοντελοποιείται ως αλληλεπίδραση ενός συνόλου οντοτήτων (αντικειμένων). Η επικρατέστερη γλώσσα οντοκεντρικής μοντελοποίησης είναι η Unified Modeling Language (UML) -Προδιαγαφές από το διεθή οργανισμό Object Management Group (OMG) -Περιλαμβάνει σημειογραφία σημειογραφία για γραφική αναπαάσταση μοντέλων.
104
Οντοκεντρική Μοντελοποίηση Ένα αντικείμενο είναι ένα μοντέλο μιας οντότητας που αναπαριστάται στο σύστημα μας. Κάθε αντικείμενο έχει: -Κατάσταση: Το σύνολο των ιδιοτήτων (attributes) του αντικειμένου και των τρεχουσών τιμών τους. Ιδιότητα (attribute) του αντικειμένου ονομάζεται κάθε επώνυμο χαρακτηριστικό του. -Συμπεριφορά: Το σύνολο των λειτουργιών (συναρτήσεων) που μπορεί να εκτελέσει το αντκείμενο. Η εκτέλεση μιας λειτουργίας είναι αποτέλεσμα λήψης ενός μηνύματος από το αντικείμενο και μπορεί να έχει ως αποτέλεσμα τη μεταβολή της κατάστασης του αντικειμένου. -Ταυτότητα: Κάθε αντικείμενο πρέπει να διακρίνεται από τα υπόλοιπα. Αυτό σε κάποιες περιπτώσεις μπορεί να γίνεται βάσει της τιμής μιας ή και περισσοτέρων ιδιοτήτων του που δεν αλλάζουν τιμή σε όλη τη διάρκεια ζωής του αντικειμένου.
105
Διαγράμματα της UML Use case diagram Static structure diagrams -Class diagram -Object diagram Dynamic diagrams -State-chart diagram -Interaction diagram -Sequence diagram -Collaboration diagram -Activity diagram Implementation diagrams -Component diagram -Deployment diagram
106
Uses Cases Use case είναι ουσιαστικά μια απαίτηση (requirement) του συστήματος. Κάθε use case παρουσιάζεται σε μια καρτέλα (όπως αυτή στην εικόνα παρακάτω). Στην καρτέλα εκτός από το όνομα της απαίτησης, περιγράφονται και άλλες λεπτομέρειες, όπως ποιος χρήστης (πρωταγωνιστής - actor) σχετίζεται με την συγκεκριμένη απαίτηση.
107
Καρτέλα Uses Cases
108
Use Case Diagrams Ένα use case diagram είναι ένας γράφος που έχει για κόμβους: πρωταγωνιστές (actors) και use cases, και ακμές ανάμεσα στους πρωταγωνιστές - use cases και use cases – use cases.
109
Use Case Diagrams Οι πρωταγωνιστές και τα use cases ενώνονται με απλό βέλος. Για να ενώσουμε use case με use case υπάρχουν τρεις τρόποι: extend, include και ISA. Τα extend, include συμβολίζονται με ένα βέλος και από πάνω να γράφει >, > αντίστοιχα. Το ISA συμβολίζεται με ένα άδειο τρίγωνο.
110
Use Case Diagrams
112
Class diagrams Τα διαγράμματα κλάσεων επιτρέπουν την περιγραφή των τύπων των αντικειμένων του συστήματος και τα διάφορα είδη των στατικών σχέσεων που υπάρχουν μεταξύ τους. - Υπάρχουν δυο ήδη στατικών σχέσεων: associations (ένας Άνθρωπος μπορεί να έχει ένα Αυτοκίνητο) και -subtypes (ο Μαθητής είναι ένα είδος ανθρώπου). Επίσης, τα διαγράμματα αυτά παρουσιάζουν τα χαρακτηριστικά και τις λειτουργίες των κλάσεων και τους περιορισμούς, κατά τους οποίους συνδέονται τα αντικείμενα.
113
Class diagrams Τα διαγράμματα κλάσεις χρησιμοποιούνται κυρίως για την μοντελοποίηση οντοκεντρικών συστημάτων. Το κύριο στοιχείο των οντοκεντρικών γλωσσών είναι οι κλάσεις. Η κάθε κλάση μοντελοποιείται ως εξής: δημιουργούμε ένα ορθογώνιο και το χωρίζουμε σε τρία μέρη. -Στο πρώτο μέρος γράφουμε το όνομα της κλάσης, -στο δεύτερο μέρος γράφουμε τα attributes της κλάσης -στο τρίτο μέρος γράφουμε τις μεθόδους.
114
Class diagrams
115
Οι κλάσεις ενώνονται με απλές γραμμές. Οι σχέσεις των αντικειμένων μπορούν να έχουν τους παρακάτω περιορισμούς: 1..*, σημαίνει 1ή περισσότερα
116
Class diagrams Με το +.... Μπορούμε να περιγάψουμε με λόγια την σχέση που υπάρχει μεταξύ των αντικειμένων.
117
Class diagrams Εκτός από την απλή σύνδεση των αντικειμένων, με μια γραμμή, υπάρχουν και άλλες συνδέσεις οι οποίες είναι οι: aggregation (συνάθροιση, συσσωμάτωση) και composition (συγκρότηση, σύνθεση).
118
Class diagrams Προβολή της κληρονομικότητας και της υλοποίησης ενός interface.
119
Interaction diagrams Τα interaction diagrams περιγράφουν πως μια ομάδα από αντικείμενα συνεργάζονται με κάποιο τρόπο. Τυπικά ένα τέτοιο διάγραμμα περιέχει την συμπεριφορά ενός απλού use case και παρουσιάζει έναν αριθμό από παραδειγματικά αντικείμενα και τα μηνύματα που περνούν μεταξύ τους, για την πραγματοποίηση του use case. Τα interaction diagrams που θα αναλυθούν είναι τα: Sequence και Collaboration.
120
Δημιουργία Sequence Diagram
121
Στην πρώτη οριζόντια παρουσιάζονται σε μορφή κουτιού τα αντικείμενα. Οι κάθετες γραμμές που βρίσκονται κάτω από τα κουτιά είναι οι γραμμές ζωής (lifelines) των αντικειμένων. Τα ορθογώνια που βρίσκονται πάνω στις γραμμές (activation boxes) παρουσιάζουν, πότε τα αντικείμενα είναι ενεργά (active). Ανάμεσα στις γραμμές ζωής αναγράφονται τα μηνύματα που μεταφέρονται μεταξύ των αντικειμένων.
122
Δημιουργία Sequence Diagram Τα είδη των μηνυμάτων φαίνονται στον παρακάτω πίνακα.
123
Sequence diagram επαναλήψεις, διακλαδώσεις και επιλογές
125
Communication (UML 2.0) ~ Collaboration (UML 1.3) Diagram Τα communication diagrams όπως ονομάζονται στην UML 2.0, ονομάζονταν Collaboration Diagram στην UML 1.3. Για να εξετάσουμε καλύτερα τα communication diagrams θα παρουσιάσουμε παράλληλα την κατασκευή των δυο ειδών διαγραμμάτων.
127
Communication Diagram Όπως φαίνεται στην παραπάνω εικόνα η μετατροπή ενός sequence diagram σε communication είναι πολύ απλή. -Οι κόμβοι του communication diagram είναι τα αντικείμενα -τα μηνύματα που μεταφέρονται μεταξύ των αντικειμένων αναγράφονται πάνω από τις γραμμές που ενώνουν τα αντικείμενα που σχετίζονται μεταξύ τους, -η σειρά των ενεργειών δηλώνεται με τον αριθμό που αναγράφεται πριν από το μήνυμα. -τα βέλη δηλώνουν την πορεία των μηνυμάτων.
128
Communication Diagram
129
Communication Diagram Τρόποι αρίθμησης Οι τρόποι αρίθμησης των μηνυμάτων που υπάρχουν είναι δυο: -Procedural (or nested) sequence (1, 2, 2.1, 2.3 …). Χρησιμοποιούνται δεκαδικοί αριθμοί. Στους δεκαδικούς βάζουμε τελεία όταν αλλάζουμε βάθος στο Stack της διεργασίας (κλήση συνάρτησης μέσα από συνάρτηση κλπ.). -Flat sequence (1, 2, 3 …). Χρησιμοποιούνται ακέραιοι.
130
State diagrams Τα διαγράμματα καταστάσεων περιγράφουν όλες τις δυνατές καταστάσεις, που ένα συγκεκριμένο αντικείμενο μπορεί να εισέλθει και το πώς η κατάσταση του αντικειμένου αλλάζει, ως αποτέλεσμα κάποιου γεγονότος (event). Μπορούν να χρησιμοποιηθούν σε διάφορες περιπτώσεις, όπως επιχειρησιακές διεργασίες (business processes), δημιουργία interface (design) και σχεδιασμός υλοποίησης (implementation).
131
Βαικά στοιχεία State Diagram ο μαύρος κύκλος που δηλώνει την αρχή ο μαύρος κύκλος με διπλό περίγραμμα που είναι το τέλος το παραλληλόγραμμο που είναι η κατάσταση και αναγράφεται το όνομά της το βέλος που δείχνει τον τρόπο ένωσης των καταστάσεων και τις μεταβάσεις και τέλος το κείμενο πάνω από τα βέλη που παρουσιάζουν το γεγονός που πρέπει να γίνει για να μεταβούμε στην επόμενη κατάσταση.
133
Περιγραφή των γεγονότων
134
Το κείμενο αποτελείται από τρία μέρη: γεγονός (event), συνθήκη (condition) και ενέργεια (action). Τα τρία αυτά μέρη είναι προαιρετικά. Το πρώτο μέρος αποτελεί το γεγονός το οποίο δείχνει ότι ένα συμβεί αυτό που αναγράφεται συνέχισε στην επόμενη κατάσταση. Εάν δεν υπάρχει γεγονός τότε απλά συνεχίζουμε στην επόμενη κατάσταση. Το δεύτερο μέρος είναι η συνθήκη (βρίσκεται ανάμεσα σε “[”, “]”), η οποία μπορεί να έχει σαν αποτέλεσμα “true” ή “false”. Εάν ισχύει η συνθήκη τότε μπορούμε να συνεχίσουμε στην επόμενη κατάσταση. Το τρίτο μέρος είναι η ενέργεια (action). Εάν ισχύουν τα δύο πρώτα μέρη τότε μπορεί να εκτελεστή μια συγκεκριμένη διεργασία που αναγράφεται μετά την κάθετο. Αυτή η ενέργεια αφορά την κατάσταση.
135
Περιγραφή των γεγονότων Υπάρχει και ένας άλλος τρόπος να δηλώσουμε κάποια ενέργεια, αλλά αυτή θα αφορά την κατάσταση. Μέσα στο παραλληλόγραμμο της κατάστασης σχεδιάζουμε μια γραμμή κάτω από το όνομα της κατάστασης και γράφουμε “do/” + ενέργεια (activity).
136
Περιγραφή των γεγονότων
137
Activity diagrams Τα activity diagrams μπορούν να χρησιμοποιηθούν για την μοντελοποίηση οποιασδήποτε διαδικασίας, από μια υψηλού επιπέδου επιχειρησιακή διεργασία έως την ροή ελέγχου μιας μεθόδου. Μοιάζουν πολύ με τα διαγράμματα ροής ελέγχου αλλά με περισσότερες ιδιότητες όπως parallelism, concurrency και complex decisions. Επίσης συνδυάζουν διαφορετικές τεχνικές για παράδειγμα: event diagrams, SDL state modelling, workflow modelling, Petri Nets. Τέλος τα activity diagrams παρουσιάζουν την αλληλουχία των διαδικασιών, ενώ υποστηρίζουν τις κατά συνθήκη και παράλληλες διαδικασίες.
138
Δημιουργία Activity Diagrams
139
Βασικά στοιχεία activity diagram Για να δείξουμε από πού ξεκινάει η ροή του διαγράμματος, χρησιμοποιούμε τον μαύρο κύκλο και συνηθίζουμε να τον βάζουμε στο πάνω μέρος του διαγράμματος. Η ροή τελειώνει με τον μαύρο κύκλο με το διπλό πλαίσιο και συνηθίζεται να βρίσκεται στο κάτω μέρος του διαγράμματος. Βασικό στοιχείο του διαγράμματος είναι το ορθογώνιο, που δηλώνει την εκτέλεση της διαδικασίας που αναγράφεται μέσα σε αυτό. Στην συνέχεια έχουμε το πιρούνι (fork) και την ένωση (join). Αυτά τα στοιχεία χρησιμοποιούνται για να διασπάσουν την ροή της διαδικασίας σε πολλές παράλληλες διαδικασίες και να της ενώσουν αυτές σε μία αντίστοιχα. Ένα ακόμα στοιχείο είναι και ο ρόμβος, ο οποίος είναι κόμβος διακλάδωσης υπό συνθήκη (branch) ή ένωσης (merge). Η συνθήκη αναγράφεται μέσα σε ‘[’, ‘]’ και πάνω από τα βέλη που οδηγούν σε διαφορετικό προορισμό. Όλες οι διακλαδώσεις που δημιουργούνται από ένα branch, θα πρέπει τελικά να ενώνονται σε ένα merge. Τέλος όλα τα στοιχεία ενώνονται μεταξύ τους μέσα από βέλη που δηλώνουν την κατεύθυνση της ροής.
140
Επιπλέον στοιχεία Swimlanes, Loops, Signals Διαφορετικά Edges.
141
Swimlanes
142
Το Swimlane είναι μια τεχνική κατά της οποία μπορούμε να χωρίσουμε ένα activity diagram σε τμήματα. Τα τμήματα περιέχουν τις διαφορετικές διαδικασίες που εκτελεί ο κάθε τομέας. Για παράδειγμα, μπορούμε να χωρίσουμε τις διαδικασίες που γίνονται σε μια επιχείρηση, ανάλογα με το τμήμα (λογιστήριο, γραμματεία…) που τις εκτελεί.
143
Loops
144
Μια ακόμα διαδικασία που υποστηρίζουν τα διαγράμματα είναι οι επαναλήψεις. Η είσοδος και η έξοδος στην επανάληψη γίνεται μέσω των ορθογωνίων, ενώ το πεδίο της επανάληψης παρουσιάζεται μέσα σε ένα διακεκομμένο ορθογώνιο πλαίσιο. Ο τύπος των στοιχείων εισόδου και εξόδου, είναι μια συλλογή και αναγράφεται με ‘:’ και ‘όνομα τύπου’.
145
Signals Το ορθογώνιο χωρίζεται
146
Signals Μέσω των signals δείχνουμε είτε κάποιο χρονικό σήμα είτε κάποιο σήμα που παράγεται μετά από κάποια ενέργεια (πχ interrupts). Στην εικόνα παρουσιάζονται τρία νέα σχήματα: η κλεψύδρα και ένα «σπασμένο» ορθογώνιο σε δύο κομμάτια. -Η κλεψύδρα δηλώνει ότι, την χρονική περίοδο που αναγράφεται από πάνω της, θα εκτελεστεί η επόμενη διαδικασία που δείχνει το βέλος. -Τα δύο τμήματα του ορθογωνίου δείχνουν: (α) το αριστερά το σήμα που πρέπει να παραχθεί, ενώ το (β) δεξιά η ενέργεια που θα γίνει.
147
Διαφορετικά Edges
148
Package diagrams Τα πακέτα είναι μια ομαδοποιημένη δομή που μας επιτρέπει να πάρουμε οποιαδήποτε δομή της UML και να ομαδοποιήσουμε τα στοιχεία της σε υψηλότερου επιπέδου «κομμάτια». Σαν πιο κοινή χρήση είναι η ομαδοποίηση κλάσεων. Τα πακέτα μπορεί να σχετίζονται μεταξύ τους. Για αυτό και δημιουργούμε τα διαγράμματα πακέτων.
149
Δημιουργία Package Diagrams
150
Τα διαγράμματα πακέτων αποτελούνται από: τους «φακέλους» που δηλώνουν τα πακέτα (και τα ονόματα) και φαίνονται στην παραπάνω εικόνα και τις διακεκομμένες γραμμές που δηλώνουν τις σχέσεις. Το βελάκι ξεκινάει από ένα πακέτο το οποίο εξαρτάται από το πακέτο στο οποίο καταλήγει το βέλος (από την παραπάνω εικόνα, το πακέτο Order Capture Application εξαρτάται από το Orders).
151
Διαφορετικοί τρόποι παρουσίασης των πακέτων (Packages)
152
Τα περιεχόμενα μπορούν να έχουν και διαφορετική ορατότητα (visibility), δηλαδή public, private και protected
153
Διαφορετικοί τρόποι παρουσίασης των πακέτων (Packages) Επίσης ένα πακέτο μπορεί να εισάγει ένα άλλο πακέτο. Αυτό παριστάνεται με το «import» πάνω από την σχέση των πακέτων. Στις παρακάτω εικόνες παρουσιάζονται οι πληροφορίες που αναφέραμε προηγουμένως.
154
Πακέτα σε πακέτο και Interfaces
155
Component diagrams Τα component diagrams παρουσιάζουν τα διάφορα components και τις εξαρτήσεις τους. Component είναι ένα φυσικό κομμάτι (module) από κώδικα, όπως τα πακέτα, οι κλάσεις ή ακόμα και τα αρχεία. Οι εξαρτήσεις μπορεί να είναι διαφορετικών ειδών, όπως οι επικοινωνιακές εξαρτήσεις (communication dependences) ή οι εξαρτήσεις μεταγλώττισης (compilation dependences).
156
Δημιουργία Component Diagrams
157
Βασικά στοιχεία Component diagram το ορθογώνιο, που παρουσιάζεται στην παραπάνω εικόνα (UML 1 και UML 2) και δηλώνει ένα Component Ο βέλος με διακεκομμένη γραμμή που αντιπροσωπεύει τις συσχετίσεις. Εκτός όμως από τα παραπάνω στοιχεία έχουμε και άλλα όπως: οι πληθυκότητες και οι πύλες (ports).
158
Επιπλέον στοιχεία Component diagram - Πληθικότητες
159
Όπως παρουσιάζεται στην παραπάνω εικόνα οι πληθυκότητες αναγράφονται πάνω από τους συνδέσμου. Επιπροσθέτως, στην παραπάνω εικόνα παρουσιάζεται ένα άλλος τρόπος ένωσης των Components. Η γραμμή με τον κύκλο στην άκρη δηλώνει ότι το component παρέχει κάποιο interface (provide interface) ενώ η γραμμή με την υποδοχή στον κύκλο δηλώνει ότι το component απαιτεί κάποιο interface (required interface).
160
Επιπλέον στοιχεία Component diagram - Πύλες
161
Δίνουν την δυνατότητα σχεδίασης πολλαπλών interface εξαρτήσεων από ένα component. Οι πύλες έχουν όνομα και σχεδιάζονται με ένα τετράγωνο όπως φαίνεται στην παραπάνω εικόνα.
162
Deployment diagrams Τα Deployment diagrams παρουσιάζουν την φυσική συσχέτιση των software και hardware component στα κατανεμημένα συστήματα. Τα διαγράμματα αυτά αποτελούνται από κόμβους οι οποίοι παρουσιάζουν τις υπολογιστικές μονάδες (hardware), όπως PC, sensors, mainframes, mobile device και τις συνδέσεις μεταξύ των κόμβων που αντιπροσωπεύουν τα συνδετικά μονοπάτια (communication paths) ανάλογα με τον τρόπο που αντιδρά το σύστημα.
163
Δημιουργία Deployment Diagrams
164
Βασικά στοιχεία ενός Deployment diagram Οι κόμβοι (Nodes). Υπάρχουν δύο τρόποι προβολής των κόμβων –είτε σαν μια εικονική αναπαράσταση του hardware, –είτε σαν ένα απλό κύβο Οι συνδέσεις (Connections).Η σύνδεση αναπαριστάνεται σαν μια απλή γραμμή που ενώνει τους δύο κόμβους.
165
Παράδειγμα διπλής απεικόνισης
166
Τρόπος σχεδίασης κόμβων
167
Παρουσίαση των συνδέσμων
168
Οι σύνδεσμοι σε ένα Deployment Diagram μπορούν να έχουν κάποιο όνομα το οποίο και αναγράφεται δίπλα στην γραμμή σύνδεσης. Το όνομα αυτό μπορεί να είναι κάποιο πρωτόκολλο επικοινωνίας ή κάποιο φυσικό είδος επικοινωνίας (πχ. Οπτική ίνα).
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.