ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις...

58
ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα Σχολή Θετικών Επιστημών & Τεχνολογίας Ελληνικό Ανοικτό Πανεπιστήμιο 2013-2014 2η ΟΣΣ – Σύγχρονες μέθοδοι προγραμματισμού - Java

Upload: joel-dawson

Post on 01-Jan-2016

39 views

Category:

Documents


0 download

DESCRIPTION

2η ΟΣΣ – Σύγχρονες μέθοδοι προγραμματισμού - Java. ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα. Σχολή Θετικών Επιστημών & Τεχνολογίας Ελληνικό Ανοικτό Πανεπιστήμιο 201 3 -201 4. Πλάνο Παρουσίασης. 1 ο Μέρος – Βασικές Έννοιες - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού

ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Σχολή Θετικών Επιστημών & ΤεχνολογίαςΕλληνικό Ανοικτό Πανεπιστήμιο

2013-2014

2η ΟΣΣ – Σύγχρονες μέθοδοι προγραμματισμού - Java

Page 2: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πλάνο Παρουσίασης

• 1ο Μέρος – Βασικές Έννοιες• 2ο Μέρος – Τελεστές & Πίνακες• 3ο Μέρος – Αντικειμενοστραφείς Έννοιες,

Κλάσεις

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 2

Page 3: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Επισκόπηση 1ου μέρους

• Εισαγωγή στις έννοιες της Java και του αντικειμένου• Τύποι Δεδομένων, Μεταβλητές, Τελεστές• Οι δομές for, while, if, switch• Πίνακες• Εισαγωγή στο IDE: BlueJ

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 330/11/2013

Page 4: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Χρήσιμα Links

• Περιβάλλον BlueJ: http://www.bluej.org/download/download.html

• Java Standard Edition 7 Download: http://www.oracle.com/technetwork/java/javase/downloads/index.html

• Java SE 7 API Specification: http://docs.oracle.com/javase/7/docs/api/

• Java Platform SE 7 Documentation: http://docs.oracle.com/javase/7/docs/

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 430/11/2013

Page 5: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Κεντρική Έννοια: Αντικείμενα

• Ένα αντικείμενο είναι μια σύλληψη/έννοια, αφαίρεση ή απτή οντότητα με συγκεκριμένα όρια και έννοια για μια εφαρμογή.

• Διαθέτει:• Κατάσταση – State• Συμπεριφορά – Behaviour• Ταυτότητα - Identity

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 530/11/2013

Α. Καθηγητής

name Α. ΚαθηγητήςpersonID Κ00108dateHired 22/08/2013department InfSystems

Α. ΚαθηγητήςΓραφείο Εκπαίδευσης

Αναθέτουμε σε τμήμα InfSystems του κ. Α. Καθηγητή

Returns: Aνάληψη θέσης-Έναρξη διδασκαλίας

Α. Καθηγητής Α. Καθηγητής

Είναι άλλο από

Page 6: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πώς λειτουργεί η Java

• Βήματα προγραμματισμού με Java

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 630/11/2013

Πηγαίος Κώδικας(εντολές Java,

σε σύνταξη ΟΟP - Java !)person.java

Java Compiler

Έξοδος(κώδικας)(bytecode)person.class

Smartphone Android

Smart TV

Με κειμενογράφο συντάσσουμε τον πηγαίο κώδικα σε Java

O compiler ελέγχει το πρόγραμμα και ενημερώνει για λάθη εφόσον δεν ικανοποιούνται οι απαιτήσεις της γλώσσα Ο compiler δημιουργεί νέο

αρχείο κωδικοποιημένο σύμφωνα με τη Java ώστε να μπορεί να το μεταγλωττίσει και τελικά να το εκτελέσει.O bytecode είναι ανεξάρτητος πλατφόρμας

1

Χωρίς να απαιτείται φυσική μηχανή java αλλά με ένα εικονικό περιβάλλον εκτέλεσης Java είναι δυνατό να γίνεται εκτέλεση σε πολύ διαφορετικά συστήματα. Διαβάζει και εκτελεί τον bytecode.

2

34

Άλλες γλώσσες/περιβάλλοντα το υποστηρίζουν αυτό;

Είναι σημαντικό και πόσο;

Page 7: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πώς λειτουργούμε την Java

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 730/11/2013

Με κειμενογράφο συντάσσουμε τον πηγαίο κώδικα σε Java και τον αποθηκεύουμε π.χ.:

hello.java

Κάνουμε compile το hello.java με τη χρήση του javac (java compiler) και εφόσον δεν υπάρχουν λάθη παράγεται το αρχείο hello.class

ΈξοδοςTo bytecode hello.class

Σημαντικό: Το παραπάνω είναι απλώς μια κειμενική εκδοχή του (ενώ το κανονικό αρχείο έχει bytecode και όχι text)

1

Εκτέλεση του προγράμματος με εκκίνηση της Java Virtual Machine με το αρχείο hello.class.H JVM μετατρέπει τον bytecode σε κάτι που η πλατφόρμα μπορεί να εκτελέσει στη συνέχεια.

2

34

public class hello{ public static void

main(String[] args)

{ System.out.println("Hello World!");}

}

Ίδιο όνομα με την κλάση

Compiled from "hello.java"public class hello { public hello(); Code: 0: aload_0 1: invokespecial #8 4: return

public static void main(java.lang.String[]); Code: 0: getstatic #16 3: ldc #22 5: invokevirtual #24 8: return }

Page 8: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

public class Hello // The Hello class{ public static void main(String[] args) //The main method { System.out.println("Hello World!"); //Print "Hello World!" }}

Πρώτο Πρόγραμμα σε java

main – κάθε εφαρμογή πρέπει να περιέχει μία μέθοδοmain Είναι η μέθοδος που θα εκτελεστεί κατά τον χρόνο

εκτέλεσης και μπορεί να καλεί τυχόν άλλες μεθόδους public – φανερώνει ότι η μέθοδος μπορεί να κληθεί από

οποιοδήποτε αντικείμενο static – δηλώνει ότι πρόκειται για μέθοδο κλάσης void – η μέθοδος δεν επιστρέφει κάποια τιμή args – είναι ένας πίνακας τύπου String ο οποίος αποθηκεύει τα

command line :ορίσματα Πρέπει να δηλωθεί ακόμα και αν ο χρήστης δεν επιδιώκει να

δώσει κάποια command line ορίσματα Η ιδιότητα args.length αντιπροσωπεύει τον αριθμό των

ορισμάτων που δόθηκανΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 830/11/2013

Page 9: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

class Student{ //field, constructor, and method declarations}

Δήλωση Κλάσεων και Αντικειμένων

Δήλωση υποκλάσης που επιπλέον υλοποιεί μία:διεπαφή

public class Student extends Person Implements Activities{ //field, constructor, and method declarations}

:Απλή δήλωση κλάσης

class ObjectExample { Student s1 = new Student(); // Object of type StudentPerson s2 = new Person(); // Object of type Person

}

/ Δήλωση αντικειμένων στιγμιοτύπων μιας:κλάσης

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 930/11/2013

Πλήρης αρχικοποίηση: new

Page 10: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

public class Student{ //Fields static int id = 1; String firstName; String lastName; String email; String address; boolean status; String[] courseList;

//Constructor public Student(){

id++; // For each Student object increment id }

// method declarations follows public static void main(String[] args) { System.out.println("Student's name: " + firstName + "

" + lastName); }}

Δήλωση Κλάσης - Παράδειγμα

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1030/11/2013

Σχόλια Για πολλαπλές σειρές χρήση του /* .. */

Το τέλος μιας πρότασης (statement) δηλώνεται με το ελληνικό ερωτηματικό (“;”)

Τα ονόματα στη java είναι case sensitive:

main(), Main(), MAIN() είναι διαφορετικές μεταξύ τους μέθοδοι!

Page 11: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 1Έστω το παρακάτω πρόγραμμα. Ποια είναι η έξοδος που

παράγεται; (τι εκτυπώνεται ;)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1130/11/2013

Page 12: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 2Έστω το παρακάτω κομμάτι ενός προγράμματος. Ποια

είναι η έξοδος που παράγεται; (τι εκτυπώνεται ;)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1230/11/2013

int number;number = (1/4) * 4;System.out.println("(1/4) * 4 gives us " +number);

Tip: Προσέξτε τα εισαγωγικά

Page 13: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Τύποι Δεδομένων• Πρωτογενούς τύπου (primitive data types)

– Σε μια μεταβλητή πρωτογενούς τύπου εκχωρείται τιμή συμβατή με αυτό που αντιπροσωπεύει ο εν λόγω τύπος

• π.χ. σε μια μεταβλητή τύπου intανατίθεται ακέραιος αριθμός

• Τύπου αναφοράς/αντικειμένου (reference/object data types)– Σε μια μεταβλητή τύπου αναφοράς μπορεί να

εκχωρηθεί:• Η αναφορά null• Αναφορά σε κάποιο αντικείμενο το οποίο ανήκει σε κλάση

συμβατή με τον τύπο της μεταβλητήςΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1330/11/2013

Τύπος Μέγεθος Εύρος

byte 8-bit -128 … 127

short 16-bit -32.768 … 32.767

Page 14: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 3Έστω το παρακάτω κομμάτι ενός προγράμματος για την

μετατροπή θερμοκρασίας Fahreneit σε Celcius. Γιατί δεν λειτουργεί σωστά;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1430/11/2013

double f = 120 ;double c;c = (5/9) * (f - 32.0);

double f = 120 ;double c;c = (5.0/9.0) * (f - 32.0);

Aρχικά η ακέραια διαίρεση έδινε πηλίκο 0. Ζητώντας double διαίρεση λαμβάνουμε

double αποτέλεσμα (χρήση 5.0)

Page 15: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• («Περικλείουν wrap») αντικείμενα τα οποία αντιμετωπίζονται ως πρωτογενείς τύποι δεδομένων

class Rectangle{ int length, breadth;

void show(int x, int y){ length = x; breadth = y; }

int calculate(){ return(length * breadth); }}

public class EnterValuesFromKeyboard{

public static void main(String[] args) { Rectangle rectangle = new Rectangle(); int a = Integer.parseInt(args[0]); // args[0] is converted to int int b = Integer.parseInt(args[1]); // args[1] is converted to int rectangle.show(a, b); System.out.println(" you have entered these values : " + a + "

and " + b); int area = rectangle.calculate(); System.out.println(" area of a rectangle is : " + area); }}

Primitive Wrapper Classesintint

IntegerInteger

doubledouble

DoubleDouble

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1530/11/2013

Page 16: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Μεταβλητές μέλους (member variables) ή πεδία(fields)1. Μεταβλητές στιγμιοτύπου (instance variables)

Μοναδική τιμή για καθένα στιγμιότυπο της κλάσης

2. Μεταβλητέςκλάσης (class/static variables) Μία τιμή για όλα τα στιγμιότυπα της κλάσης

Τοπικές (μεταβλητές local variables) Δηλώνονται μέσα στο σώμα μιας μεθόδου Είναι ορατές μόνο εντός της μεθόδου

Παράμετροι (parameters) Είναι ορίσματα σε μεθόδους

Κατηγορίες Μεταβλητών

// “args” is a parameter of the main methodpublic static void main(String[] args)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1630/11/2013

ΤΙP: Πρέπει να δηλωθούν προτού χρησιμοποιηθούν για πρώτη φορά

Τα ονόματα είναι case sensitiveΟ πρώτος χαρακτήρας του

ονόματος μπορεί να είναι : γράμμα (προτείνεται), ή τα σύμβολα “$”, “_”

Page 17: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Τύποι Μεταβλητών - Παράδειγμαpublic class Student{ public String name; // Instance variable

public static int id = 3333; // Class variable public static String status = "undergraduate"; // Class variable public void info(int age, int durationOfStudies){ // Parameters int graduationAge = age + durationOfStudies; // Local variable

id = 1234;

System.out.println("Age: " + age); System.out.println("Graduation age: " + graduationAge); System.out.println("ID number: " + id); } public static void main(String args[]){ Student maria = new Student(); maria.info(18,5); /* Age: 18

Graduation age: 23 ID number: 1234 */

System.out.println("Status: " + Student.status); // Status: undergraduate System.out.println("ID number: " + Student.id); // ID number: 1234 }}

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 1730/11/2013

Page 18: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Εισαγωγή στο BlueJ• To BlueJ είναι ένα ακαδημαϊκό ολοκληρωμένο

περιβάλλον ανάπτυξης λογισμικού. Ανήκει δηλαδή στην ευρύτερη κατηγορία των IDE (Integrated Development Environment) και περιλαμβάνει: – Kειμενογράφο (editor), για να γράφετε προγράμματα (σε

Java)– Εκσφαλματωτή (debugger), για τον εντοπισμό λαθών– Χώρο προβολής (viewer), για να βλέπετε τα text

αποτελέσματα των προγραμμάτων σας – Έναν εύκολο τρόπο για εκτέλεση προγραμμάτων Java– Έναν εύκολο τρόπο για να βλέπετε την τεκμηρίωση

(documentation)

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 18

Page 19: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: Νew Project

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 19

Page 20: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: Create Class

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 20

Το όνομα της κλάσης ξεκινά με κεφαλαία

Page 21: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: Επεξεργασία με διπλό κλικ στην κλάση

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 21

Οι γραμμές δείχνουν ότι η κλάση δεν έχει

μεταφραστεί (compile) και άραδεν είναι εκτελέσιμη ακόμη

Page 22: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: Εκτέλεση με διπλό κλικ στην κλάση

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 22

Ανοίγει ο επεξεργαστής κειμένου με διπλό κλικ και μπορείτε να κάνετε τις μετατροπές που επιθυμείτε στο πρόγραμμά σας.

Compile πριν την εκτέλεση

Page 23: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: Δεξί κλικ στην κλάση για εκτέλεση και ΟΚ

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 23

Εδώ μπορείτε να δώσετε τιμή

στο args[]

Page 24: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

BlueJ: tips!

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 24

• Όταν κάνετε compile το BlueJ αποθηκεύει αυτόματα το πρόγραμμά σας!

• Όταν κλείνετε το BlueJ και το ανοίγετε ξανά μπορείτε να χρησιμοποιήσετε το Open Project για να συνεχίσετε το πρόγραμμά σας

• Μπορείτε να βρείτε όλες τις λεπτομέρειες για το περιβάλλον BlueJ στο: http://www.bluej.org/doc/documentation.html

• Σε περίπτωση που έχετε ήδη το BlueJ εγκατεστημένο παρακαλείστε να κάνετε αναβάθμιση στην πιο πρόσφατη έκδοση

Page 25: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πλάνο Παρουσίασης

• 1ο Μέρος – Βασικές Έννοιες• 2ο Μέρος – Τελεστές & Πίνακες• 3ο Μέρος – Αντικειμενοστραφείς Έννοιες,

Κλάσεις

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 25

Page 26: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Επισκόπηση 2ου μέρους

• Τελεστές, Αλφαριθμητικά• Δομές επανάληψης και ελέγχου• Πίνακες

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 2630/11/2013

Page 27: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Τελεστές Παράδειγμα Τελεστής Ανάθεσης

= Ανάθεση τιμής int x = 15, y=3, z=0;boolean bvar = true;

Μοναδιαίοι Τελεστές

++ 1Αύξηση τιμής κατά x++ ή ++x

-- 1Μείωση τιμής κατά x-- ή --x

! Αντιστροφή της τιμής

ενός boolean!bvar

Τελεστής Ελέγχου Τύπου

instanceOf Έλεγχος του τύπου

ενός αντικειμένουobj1 instanceOf Class(true or false)

Τελεστές

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 2730/11/2013

Page 28: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• O τύπος του αλφαριθμητικού αναπαρίσταται με την κλάση String• Η λέξη κλειδί null

– Ειδική τιμή που φανερώνει ότι η μεταβλητή δεν αναφέρεται σε κανένα αντικείμενο

– Δεν μπορεί να θεωρηθεί 0 ούτε και να χρησιμοποιηθεί σε εκφράσεις με τους πρωτογενείς τύπους της javaπ.χ.

int i = null; // Μη αποδεκτή δήλωσηString s = null; // Αποδεκτή δήλωση

Αλφαριθμητικά

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 2830/11/2013

Page 29: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Συμβολισμός

Χαρακτήρας πουαναπαρίσταται

\n Newline (0x0a)

\r Carriage return (0x0d)

\f Formfeed (0x0c)

\b Backspace (0x08)

\s Space (0x20)

\t tab

\" Double quote

\' Single quote

\\ backslash

\ddd Octal character (ddd)

\uxxxx Hexadecimal UNICODE character (xxxx)

Ειδικοί Χαρακτήρες (Escape Sequences)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 2930/11/2013

Page 30: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

for (init-stmt; condition; next-stmt) { body }

public class ForLoop {public static void main(String[] args) { System.out.println("Let's count to 10:"); for (int i = 1; i <= 10; i++) { System.out.println(i); }

} }

Ο Βρόχος “for”

public class EnhancedForLoop { public static void main(String[] args) { int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int counter : numbers) { System.out.println(counter); } } }

Ειδική μορφή του for (enhanced for):

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3030/11/2013

Page 31: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ο Βρόχος “while”

init-stmt; while (condition) { body next-stmt; }

public class WhileLoop { public static void main(String[] args) { System.out.println("Let's count to 10 using while:"); int i = 1; while (i <= 10) { System.out.println(i); i++; } } }

• :Διαδικασία εκτέλεσης1. Εξετάζεται η συνθήκη στο “while”

2. , Αν η συνθήκη είναι αληθής εκτελείται το σώμα του βρόχου3. 1.Επιστροφή στο βήμα

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3130/11/2013

Page 32: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 4Ποια είναι η έξοδος στο παρακάτω;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3230/11/2013

int x = 1; while( x < 10 ) { System.out.println( x ); x += 2; // x = x + 2; }

Page 33: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 5Ποια είναι η διαφορά στα παρακάτω προγράμματα;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3330/11/2013

(1) int count = 0; while( count++ < 5 ) System.out.print( count + ", " );

(2) int count = 0; while ( ++count <5 ) System.out.print ( count + ", " );

Page 34: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

public class IfStatement { public static void main(String[] args){

String signColour = "blue";if (signColour == "red") System.out.println("Program suitable only for adults");else if (signColour == "purple") System.out.println("Program suitable for children above 15");else { //nested "if-else" statement System.out.print("Program suitable for all:");

if (signColour == "green") System.out.println("No parental guidance is required"); else if (signColour == "blue") System.out.println("Parental guidance suggested"); else if (signColour =="orange") System.out.println("Parental guidance required"); else System.out.println("Without any special rating");}

}}

Εμφωλευμένο“if”

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3430/11/2013

Page 35: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 6Ποια είναι η λειτουργία στο παρακάτω πρόγραμμα για

n>0;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3530/11/2013

int MyMethod(int n){if (n == 1) return 1;

return n * MyMethod(n-1);}

Μια απλή αναδρομική μέθοδος που υπολογίζει το n παραγοντικό: n! = n × (n-1) × (n-2) × ... × 2 × 1

Tip: Δοκιμάστε το για το n=1

Page 36: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

class SwitchStatement { public static void main(String[] args) { int month = 3; switch (month) { // Accepts byte, char, short, or int // It can also work with Strings (1.7), EnumTypes // and the wrapper classes Byte, Char, Short and Int case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Invalid month.");break; } }}

Η Πρόταση“switch” – Παράδειγμα

: Αποτέλεσμα εκτέλεσης MarchΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3630/11/2013

Πώς θα ήταν η εναλλακτική

υλοποίηση με nested if ;

Page 37: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

class SwitchStatement { public static void main(String[] args) {

int month = 3;if(month == 1)

System.out.println("January");else if (month == 2)

System.out.println("February"); else if (month == 3)

System.out.println("March");else if (month == 4)

System.out.println("April");else if (month == 5) System.out.println("May");else if (month == 6)

System.out.println("June");else if (month == 7)

System.out.println("July");else if (month == 8)

System.out.println("August");else if (month == 9)

System.out.println("September");else if (month == 10)

System.out.println("October");else if (month == 11)

System.out.println("November");else if (month == 12)

System.out.println("December");else

System.out.println("Invalid month!"); } }

Εναλλακτική Υλοποίηση με “if”

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3730/11/2013

Page 38: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πίνακες (Arrays)

byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;

Δήλωση καιαρχικοποίηση ενός πίνακα :ακεραίων

int[] anArray = new int[5]; anArray[0] = 10;anArray[1] = 20;anArray[2] = 30;anArray[3] = 40;anArray[4] = 50;

int[] anArray = {10,20,30,40,50};

ή:

:Άλλοι τύποι πινάκων

int[] anArray = new int[]{10,20,30,40,50};

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3830/11/2013

Page 39: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• Πίνακεςαντικειμένων:

Book[] arrayOfBooks = {new Book(5011,"Title1"), new Book(7490,"Title2") };

:Προσπέλαση στοιχείων πίνακα

int[] num = new int[3];for (int i = 0; i < 3; i++) {

System.out.println(num[i]);}

int[] num = new int[3];for (int i = 0; i < num.length; i++){

System.out.println(num[i]);}

… ή χρησιμοποιώντας την ιδιότητα length :

int[] num = new int[3];for (int elements: num) {

System.out.println(elements);}

… ή χρησιμοποιώντας τη βελτιωμένη μορφή του for:

Πίνακες (Arrays)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 3930/11/2013

Page 40: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• :Δήλωση πολυδιάστατου πίνακα

dataype arrayName = new datatype[size1][size2] ... [sizeN];

. :π χ

int[][] nums = new int[3][6];nums

012

012345

Είναι δυνατόν να αρχικοποιηθεί μόνο η μία

:διάστασηint[][] nums = new int[3][];

null

null

null

nums

012

Πολυδιάστατοι Πίνακες

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4030/11/2013

Page 41: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Πλάνο Παρουσίασης

• 1ο Μέρος – Βασικές Έννοιες• 2ο Μέρος – Τελεστές & Πίνακες• 3ο Μέρος – Αντικειμενοστραφείς Έννοιες,

Κλάσεις

30/11/2013 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 41

Page 42: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Επισκόπηση

• Βασικές έννοιες του αντικειμενοστραφούς προγραμματισμού

• Κλάσεις, στιγμιότυπα, μέθοδοι• Δημιουργοί (constructors)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4230/11/2013

Page 43: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Βασικές Έννοιες Αντικειμενοστρέφειας

1. Κληρονομικότητα (Inheritance)Η ιδιότητα μιας κλάσης (που καλείται υποκλάση) να μπορεί να

χρησιμοποιεί τις ιδιότητες και τις μεθόδους μιας άλλης κλάσης (της υπερκλάσης)Η υποκλάση μπορεί να υλοποιεί επιπλέον λειτουργικότηταπ.χ. Η κλάση Student είναι υποκλάση της κλάσης Person

2. Αφαίρεση (Abstraction)Η τεχνική να αναπαρίσταται η κοινή λειτουργικότητα μεταξύ

ενός συνόλου κλάσεωνπ.χ. Όλες οι υποκλάσεις της κλάσης Student (Post GraduateStudent και UnderGraduateStudent) έχουν την κοινή ιδιότητα ότι παρακολουθούν κάποιο πρόγραμμα σπουδών (attendCourse) χωρίς να είναι αναγκαίες οι λεπτομέρειες (θεωρούμε ότι η Student δηλώνεται ως abstract)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4330/11/2013

Page 44: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Βασικές Έννοιες Αντικειμενοστρέφειας

3. Πολυμορφισμός (Polymorphism) Κρύβουμε διαφορετικές υλοποιήσεις πίσω από την ίδια

διεπαφή. Η ίδια μέθοδος προκαλεί την εκτέλεση διαφορετικού κώδικα ανάλογα με τον τύπο του αντικειμένου που την καλεί.

π.χ. η μέθοδος calculateArea (της υπερ-κλάσης Shape) υπολογίζει το εμβαδό με διαφορετικό τρόπο για ένα αντικείμενο Triangle και διαφορετικά για ένα αντικείμενο Rectangle (Triangle και Rectangle είναι υποκλάσεις της Shape)

4. Ενθυλάκωση (Encapsulation) Η δυνατότητα να αποκρύπτονται δεδομένα (data hiding) της κλάσης (τα οποία

δηλώνονται ως private) και να επιτρέπεται η προσπέλασή τους μέσω public μεθόδων (setters and getters)

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4430/11/2013

Τηλεόραση Α Τηλεόραση Β Τηλεόραση Γ Remote Control (ίδια διεπαφή –

διαφορετικές υλοποιήσεις για κάθε τηλεόραση)

Page 45: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Κλάσεις

• Οι κλάσεις είναι το πιο σημαντικό χαρακτηριστικό μιας γλώσσας που υποστηρίζει τον Αντικειμενοστραφή Προγραμματισμό

• Ο προγραμματισμός στη Java συνίσταται στον ορισμό ενός αριθμού κλάσεων– Κάθε πρόγραμμα είναι μια κλάση– Όλο το βοηθητικό λογισμικό αποτελείται από κλάσεις– Όλοι οι τύποι που ορίζονται από τον προγραμματιστή

είναι κλάσεις

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4530/11/2013

Page 46: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

class Student { //field, constructor, and method declarations}

class ObjectExample { Student maria = new Student(); // Object of type Student

Person nikos = new Person(); // Object of type Person}

Δήλωση Κλάσεων – Αντικειμένων

:Δήλωση στιγμιοτύπων μιας κλάσης

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4630/11/2013

Page 47: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Μια κλάση είναι ένας τύπος …

• Μια κλάση είναι ένας ειδικός τύπος δεδομένων ορισμένος από τον προγραμματιστή, και παρέχεται η δυνατότητα να ορίζουμε μεταβλητές αυτού του τύπου

• Μια κλάση προσδιορίζει τους τύπους των δεδομένων που μπορεί να περιέχει ένα αντικείμενο, καθώς και τις ενέργειες που μπορεί να εκτελέσει

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4730/11/2013

Page 48: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Οι δημιουργοί (constructors) κατασκευάζουν στιγμιότυπα της κλάσης στην οποία ανήκουν

, :Μοιάζουν πολύ με μεθόδους αλλά Δεν έχουν τύπο επιστροφής στον ορισμό τους ( άρα δεν

επιστρέφουν κάποια τιμή ή αναφορά) χωρίς void! Το όνομά τους είναι ίδιο με το όνομα της κλάσης Σε μια κλάση μπορεί να υπάρχουν περισσότεροι του ενός

– / δημιουργοί ο καθένας με διαφορετικό αριθμό ή και τύποορισμάτων

O default constructor μπορεί να είναι implicit , Αν δεν υπάρχει κανένας τότε εισάγει ο compiler

Δημιουργός (constructor)

public class Student{ String name; int age;

// default constructor without arguments public Student() { }

// constructor with two arguments public Student(String name, int age) { this.name = name;

this.age = age; }

}ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4830/11/2013

•Η λέξη-κλειδί this μπορεί να χρησιμοποιηθεί μέσα στους δημιουργούς και στις μεθόδους

–Επιστρέφει την αναφορά στο τρέχον αντικείμενο–Μπορεί να χρησιμοποιηθεί από ένα δημιουργό προκειμένου να καλέσει έναν άλλο δημιουργό της ίδιας κλάσης

Πρακτικά: Τρόπος να διαχωρίζουμε την τοπική μεταβλητή name & age από τις μεταβλητές μέλη

Page 49: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• ΠαράδειγμαStudent.java (Student class)StudentExample.java (main class)

ΔημιουργοίΠαράδειγμα

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 4930/11/2013

Page 50: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Μέθοδοι (methods)• Οι ορισμοί των μεθόδων διαιρούνται σε δυο τμήματα:

την επικεφαλίδα (heading) και το σώμα της μεθόδου (method body):

• Οι μέθοδοι ενεργοποιούνται χρησιμοποιώντας το όνομα του καλούντος αντικειμένου και το όνομα της μεθόδου ως εξής:classVar.myMethod();

• Η ενεργοποίηση μιας μεθόδου είναι ισοδύναμη με την εκτέλεση του σώματος της μεθόδου

// Instance Method public String getFullName() { String fullName = firstName + " " + lastName;

// access instance variables return fullName; }

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5030/11/2013

Επιστρεφόμενος τύπος αντικειμένου ή

void (καμία επιστροφή)

Page 51: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 8Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει

σφάλμα;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5130/11/2013

• public Student(){• id++; • }

• public class Student {• static int id = 1;• String firstName;• String lastName;• String email;• String address;• boolean status;• String[] courseList; • • public void fullName()• {• System.out.println("name: " + firstName);• }• }

Δεν υπάρχουν μέθοδοι εκτός κλάσεων στη Java !

Page 52: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Κατηγορίες Μεθόδων

Μέθοδοι κλάσης (Class methods)Δηλώνονται με τη λέξη-κλειδί staticΜπορούν να κληθούν απευθείας με το όνομα της

κλάσης, χωρίς να απαιτείται η δημιουργία στιγμιοτύπου:

Συνήθως χρησιμοποιούνται για να προσπελαστούν οι μεταβλητές κλάσης (static)

Student.staticMethodName(agrs) // encouraged maria.staticMethodName(args) // discouraged

(Μέθοδοι στιγμιοτύπου Instance methods)Συσχετίζονται με ένα αντικείμενο και

χρησιμοποιούν τις μεταβλητές στιγμιοτύπου

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5230/11/2013

Page 53: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Κατηγορίες Μεθόδων - Ορατότητα

• Μέθοδοι Στιγμιοτύπου:– Μπορούν να προσπελάσουν απευθείας:

• Μεταβλητές στιγμιοτύπου και μεθόδους στιγμιοτύπου• Μεταβλητές κλάσης και μεθόδους κλάσης

• Μέθοδοι Κλάσης:– Μπορούν να προσπελάσουν απευθείας

μεταβλητές κλάσης και μεθόδους κλάσης– Δεν μπορούν να προσπελάσουν απευθείας

μεταβλητές στιγμιοτύπου ή μεθόδους στιγμιοτύπου

• Πρέπει να χρησιμοποιηθεί αναφορά σε αντικείμενο– Δεν μπορούν να χρησιμοποιήσουν το this

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5330/11/2013

Page 54: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• ΠαράδειγμαStudent.java (Student

class)MethodVisibilityExample.java (main

class)

Ορατότητα ΜεθόδωνΠαράδειγμα

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5430/11/2013

Page 55: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• Όταν χρησιμοποιείται με μεταβλητές τύπου κλάσης, ο τελεστής ανάθεσης (=) παράγει δυο μεταβλητές που αναφέρονται (ονοματίζουν) το ίδιο αντικείμενο– Αυτή η συμπεριφορά είναι πολύ διαφορετική από τη συμπεριφορά

που επιδεικνύει με μεταβλητές primitive τύπου– Επίσης, ο έλεγχος για ισότητα (==) συμπεριφέρεται διαφορετικά για

μεταβλητές τύπου κλάσης– Ο τελεστής == ελέγχει μόνο ότι δυο μεταβλητές τύπου κλάσης

έχουν την ίδια διεύθυνση μνήμης• Διαφορετικά από τη μέθοδο equals, δεν ελέγχει ότι οι instance

variables έχουν τις ίδιες τιμές• Δυο αντικείμενα σε δυο διαφορετικές τοποθεσίες (μνήμης) των

οποίων οι instance variables έχουν ακριβώς τις ίδιες τιμές, θα συγκρίνονταν ως "not equal"

Χρήση του = και == με ΜεταβλητέςΤύπου Κλάσης

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5530/11/2013

Page 56: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

• Με τις δηλώσεις import δηλώνουμε ότι θα χρησιμοποιήσουμε κάποια πακέτα - packages στη Java, όπως την κλάση π.χ.Scanner από το package java.utilimport java.util.Scanner;

• Είναι δυνατό να κάνουμε διαθέσιμες όλες τις κλάσεις που βρίσκονται σε ένα package, αντί για μία μόνο:import java.util.*;Σημειώστε ότι δεν υπάρχει επιπλέον επιβάρυνση για να κάνουμε import ολόκληρο το package

Packages και Δηλώσεις Import

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5630/11/2013

Page 57: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 9Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει

σφάλμα;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5730/11/2013

• public class Student• {• public String firstName;• public String lastName;• public String address;• }

• public class StudentExample• {

• public static void main(String[] args)• {• Student s1 = new Student();• Student s2;• System.out.println("1st Student: " + s1.lastName);• System.out.println("2nd Student: " + s2.lastName);• }• }

Δεν έχει αρχικοποιηθεί και δεν έχει γίνει δέσμευση μνήμης για

το αντικείμενο s2

Page 58: ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

Ερώτημα 10Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει

σφάλμα;

ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού 5830/11/2013

• public class Student• {• public int age;• • public static void main(String[] args)• {• System.out.println (" age : " + age);• }• }

Δε μπορεί να προσπελαστεί από static μέθοδο μία non static

μεταβλητή (age)