οµή προγράµµατος <Εισαγωγή έτοιµων κλάσεων από βιβλιοθήκη> <Νέας κλάση> <Νέας κλάση>. π.χ. import java.io.*; αρχείο Εrg1.java Στο παράδειγμα οι δυο κλάσεις βρίσκονται σε ένα αρχείο (Εrg1.java) αλλά είναι καλύτερα κάθε κλάση να μπαίνει σε ξεχωριστό αρχείο : (UserInput.java, Εrg1.java) class UserInput { //Class gia eisagogi dedomenwn apo to pliktrologio public static String getstring() { //Methodos gia eisagogi String return "bye"; public static int getinteger() { //Methodos gia eisagogi Integer return 1; public class Εrg1 {// 1 st ergastirio public static void main (String args[]) { System.out.println("My first lab"); Κλάσεις με παρόμοια λειτουργικότητα, μέσα στο ίδιο directory,ομαδοποιούνται σε πακέτα π.χ. package erg01nbeans; Το πακέτο θα έχει το ίδιο όνομα με το directory που είναι οι κλάσεις του. Προσάρτηση άλλης κλάσης με: import <package>.<class> Σε κάθε πρόγραμμα θα πρέπει να υπάρχει το πολύ μια κλάση δηλωμένη σαν public (π.χ. Erg1) και η κλάση αυτή πρέπει να περιέχει την μέθοδο main όπου γράφεται το κύριο σώμα του προγράμματος public static int factorial (int num) { return 1; public static int fibonacci (int num) { return 1; static int create_num = 0; public static int mirror(int num) { return create_num; [1] ΕΑΡ 2015 Η κλάση που περιέχει την μέθοδο main είναι και η αφετηρία του προγράμματός μας, και το όνομα του προγράμματος θα είναι <το_όνομα_ της _κλάσης>.java δηλ. Εrg1.java Προσβασιμότητα public ορατή από παντού protected ορατή σε κλάση/υποκλάση private ορατή σε κλάση μόνο <τιποτα> ορατή στο τρέχον πακέτο Static context static μέθοδος δεν απαιτεί αντικείμενο της κλάσης static μεταβλητή: την μοιράζονται όλα τα αντικείμενα (δηλ. όλα έχουν την ίδια τιμή π.χ. το πλήθος αντικειμένων ).
Εκτέλεση προγράµµατος JAVA Μπορούµε να γράψουµε και να εκτελέσουµε το πρόγραµµα µε διάφορους τρόπους: Με ένα text editor και να το τρέξουµε σε παράθυρο DOS javac Εrg1.java //δηµιουργούνται οι κλάσεις UserInput.class, Εrg1.class java Εrg1 //εκτελείται το πρόγραµµα Mε το JCreator, compile και F5 Με το ΝetBeans, oπου δηµιουργείται project (Java Application) µε αρχικό αρχείο Main.java (περιέχει την κλάση Main µε public µέθοδο main άδεια). Εκτέλεση µε F6. ( ηµιουργούνται υποφάκελοι build, nbproject, test, src και κάτω από το src (source package) o υποφάκελος µε τα java αρχεία µας.) κ.α. Σε ένα αρχείο ορίζω ΜΙΑ ΝΕΑ ΚΛΑΣΗ (με τα πεδία/μεταβλητές της και τις μεθόδουςτης ) Κλάσεις/Αντικείµενα Mπορούµε να δηλώνουµε τις µεθόδους και τα πεδία µιας κλάσης µε όποια σειρά θέλουµε. Mπορούµε να τα χρησιµοποιήσουµε πριν τα δηλώσουµε. Συνιστάται όµως τα πεδία να τα βάζουµε στην αρχή της κλάσης για ευανάγνωστο κώδικα πχ. η κλάση βιβλίο: class Book { private String title ; public String gettitle() { return title; public void settitle(string title) { this.title=title; Σε γενικές γραµµές, Οι γνωστοί (access & mutator) μέθοδοι get και set οι µεταβλητές εντός µιας κλάσης πρέπει να δηλώνονται σαν private και οι µέθοδοι που θα καλούνται εκτός της κλάσης public. Ακόµα και εάν χρειάζεται να υπάρχει πρόσβαση στις µεταβλητές εκτός της κλάσης τους, καλό είναι αυτές να παραµένουν private και ο έλεγχος να γίνεται µέσω µιας µεθόδου που θα δηλώνεται public. [2] ΕΑΡ 2015
Oι κλάσεις 1 χρησιµοποιούνται σαν µήτρα για την κατασκευή πανοµοιότυπων αντιγράφων/ αντικειµένων που λέγονται και στιγµιότυπα (instances) της κλάσης αυτής. Τα αντικείµενα χρησιµοποιούν τα δεδοµένα/χαρακτηριστικά και τις µεθόδους για την επεξεργασία τους αλλά και την επικοινωνία τους µε άλλα αντικείµενα. Όταν θέλει κάποιος να ζητήσει κάτι από ένα αντικείµενο θα εκτελέσει την αντίστοιχη µέθοδο του αντικειµένου ως εξής. : <Αντικείµενο>.<Μέθοδος(λίστα_παραµέτρων)> π.χ. mycar.start(); οµή κλάσεων: class <όνοµα_κλάσης> { <data_type> <Μεταβλητές> < όνοµα_κλάσης> <Αντικείµενα> < όνοµα δοµητή (λίστα _παραµέτρων) > < Επιστρεφόµενος_τύπος> <Μέθοδος (λίστα _παραµέτρων) > < Επιστρεφόµενος_τύπος> <Μέθοδος (λίστα _παραµέτρων) > Δήλωση Μεταβλητών - μεταβλητές βασικών τύπων ή -μεταβλητές κάποιας κλάσης Δομητές Μέθοδοι Μεταβλητές : Μπορούν να περιέχουν τιµές των βασικών τύπων της Java, ή και αναφορές σε άλλα αντικείµενα. Οι µεταβλητές ανάλογα µε τον τρόπο δήλωσής τους χαρακτηρίζονται είτε σαν µεταβλητές αντικειµένου (instance variables), που δηλώνονται µόνο µε τον τύπο και το όνοµά τους (χωρίς τιµές), γιατί κάθε αντικείµενο της κλάσης έχει τις δικές του. είτε σαν µεταβλητές κλάσης 2 (class variables) που δηλώνονται µε τιµές και µε τον χαρακτηρισµό static, που σηµαίνει ότι όλα τα αντικείµενα της κλάσης θα έχουν ίδιες τιµές. Όταν η τιµή µιας µεταβλητής κλάσης αλλάξει, τότε η νέα τιµή θα ισχύει για όλα τα αντικείµενα. Constructors- οµητές: κάθε κλάση διαθέτει τουλάχιστον µια µέθοδο, που εκτελείται κατά την δηµιουργία ενός αντικειµένου της ώστε να γίνουν οι κατάλληλες αρχικοποιήσεις. Οι δοµητές ορίζονται όπως και οι απλές µέθοδοι αλλά έχουν ίδιο όνοµα µε την κλάση και δεν έχουν επιστρεφόµενο τύπο (ούτε void). class Book { private String title; // Book( ) { //default ή null constructor Book (String title, String auth, String isbn, String publish, short pno, short EE, float timi) { this.title=title; this.auth=auth //.. // 1 Περιεχόµενα: http://docs.oracle.com/javase/6/docs/api/index.html 2 Μεταβλητές: http://docs.oracle.com/javase/tutorial/java/javaoo/classvars.html [3] ΕΑΡ 2015
public String gettitle() { return title; Mπορούν να οριστούν πολλοί δοµητές που ξεχωρίζουν από τις παραµέτρους τους (αν δεν οριστεί, ή καλείται ο constructor της υπερκλάσης 3 ή δίνει µήνυµα λάθους). Η κατασκευή νέου αντικειµένου καλεί έναν από αυτούς π.χ. ως εξής: Book b; b= new Book("Titlos", "Author", "9605122839", "Publ", (short)151, (short)2012, 10.3f); ή κατευθείαν µε µια εντολή Book b = new Book(.); Υπερφόρτωση: όταν µια συνάρτηση χρησιµοποιείται πολλές φορές αλλά κάθε φορά µε διαφορετική λίστα παραµέτρων (παράδειγµα και οι δοµητές) : public static int seqsearch (Book[] f, String key) public static int seqsearch (Book[] f, int key) Mέθοδοι: ύο είναι οι τύποι των µεθόδων: Μέθοδοι κλάσης που δηλώνονται µε τη λέξη κλειδί static, πριν από τον τύπο και αυτό σηµαίνει ότι µπορούν να εκτελέσουν τις λειτουργίες τους χωρίς να έχει δηµιουργηθεί αντικείµενο της κλάσης. Μέθοδοι στιγµιότυπου όπου θα πρέπει πρώτα να δηµιουργηθεί ένα αντικείµενο της κλάσης για να την εκτελέσει. Μια µέθοδος µπορεί να επιστρέφει µια τιµή (που την υπολογίζει και είναι ίδιου τύπου, µε την της δήλωσης) χρησιµοποιώντας τη λέξη κλειδί return. Αν απλώς εκτελεί λειτουργίες και πράξεις χωρίς να επιστρέφει τιµή (αλλά τη ροή του προγράµµατος) τότε συντάσσεται µε τη λέξη κλειδί void πριν από τον τύπο. Tύποι δεδοµένων byte, short, int, long, float, double, char, boolean Τελεστές Αριθµητικοί: +, -, *, /, %, ^ Συσχετιστικοί: <=, <, >=, > Ισότητας:!=, == Λογικοί: &&,,! Aύξησης/Μείωσης ++, -- Αντικατάστασης +=, -=, *=, /=, %= 3 Όλες οι κλάσεις έχουν ένα default δοµητή, που δίνει µηδενικές τιµές στα πεδία µεταβλητές των αντικειµένων. [4] ΕΑΡ 2015
Συµβολοσειρές(String) Χαρακτήρες char c= A Οι συµβολοσειρές είναι ακολουθίες χαρακτήρων και είναι αντικείµενα της κλάσης String πχ String s = "Title" ; //ή String s =new String("Title") String s = "Title: "+" "+title; Η εµφάνιση των συµβολοσειρών γίνεται µε την µέθοδο println πχ System.out.println(s); Απλοί µέθοδοι στις συµβολοσειρές 4 s.length(); s2=s1.touppercase(); s2=s1.tolowercase(); s2.equals(s1); int a=s2.indexof(s1); s.charat(0) ; s.substring(1,3); Εντολές και οµές ελέγχου while (!correctisbn(isbn) ) { System.out.print("Lathos ISBN. Dwste neo ISBN: "); sbn=userinput.getstring(); do { displaysearchfieldmenu(); searchmethod = UserInput.getInteger(); while (searchmethod!=3); while ( ) { do { while ( ) if ( MyUtils.bookNo!= 0 ) if ( ) displaybook (b); { else { else System.out.println ("\MESSAGE") { System.out.println ("\nden yparxoyn kataxorimena stoixeia"); switch (searchmethod) { case 1: // case 2: // case 3: default: System.out.print("\n\tLathos epilogi methodou "); switch ( ) { case τιµη1 : <εντολές>.. case τιµην : <εντολές> default: <εντολές> 4 https://docs.oracle.com/javase/6/docs/api/java/lang/string.html for (..;..;..) { [5] ΕΑΡ 2015
for (int i=1; i<=10; i++) System.out.println(i); ΠΙΝΑΚΕΣ Παραδείγµατα δήλωσης Πίνακα int [ ] nums; Bοοk[] b; byte buff[ ]; float matrix[ ][ ]; // ισδιάστατος πίνακας A a [ ]; Στα παραπάνω παραδείγµατα βλέπουµε ότι ο πίνακας δεν δηµιουργείται κατά την δήλωσή του (αφού δεν προσδιορίσαµε τι µέγεθος θα έχει ). Παραδείγµατα δηµιουργίας Πίνακα int[ ] Κ; Κ = new int[200]; Bοοk[ ] b = new Book[10]; byte buff[ ] = new byte[1024]; float matrix[ ][ ] = new float[29][40]; A a[ ] = new A[4]; Αναφορά σε στοιχείο του πίνακα: a[2] = 5; matrix[0][8] = (float) (buff[19] + buff[25]); for (int i=0; i<myutils.bookno; i++){ System.out.println( b[i] ); Όταν ένας πίνακας είναι µεγέθους Ν τότε τα έγκυρα indexes θα είναι από 0 έως Ν-1. Κάθε άλλη τιµή θα προκαλέσει compile-time ή run-time error. Random Tιµές: Μath.random(); ίνει δεκαδικούς από το [0..1) returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Παραδείγµατα (int)μath.random(); ίνει µόνο τo 0 (int)(μath.random()*3); ίνει 0,1,2 50+(int)(Μath.random()*10); ίνει ακεραίους [50..59] 50+(Μath.random()*10); ίνει δεκαδικούς [50..60) 2 δεκαδικά ψηφία double x =57.278945; System.out.println ( String.format("%.2f", x) ); //φορµάρισµα ή µε double d = (double)math.round(x* 100) / 100 ; //στρογγυλοποίηση ή µε [6] ΕΑΡ 2015
import java.text.decimalformat; DecimalFormat df = new DecimalFormat("#0.##"); //µε pattern= "#0.##" String format = df.format(x); System.out.println("x:"+format); [7] ΕΑΡ 2015