Εισαγωγή στην Java

Συνοπτική παρουσίαση
Java
Bl@ckDuck
Ludum Dare 29 - Java Team
Τί είναι η Java;
●
●
●
●
●
●
Γλώσσα προγραμματισμού
Γενικού σκοπού
“Ανεξάρτητη” υλικού και OS
Τρέχει σε VM (JVM)
Αντικειμενοστραφής
Βασίζεται στις “κλάσεις”
Παράδειγμα κώδικα
public class Example
{
public static void main(String[] args)
{
int a = 0;
a = 2;
System.out.println(“Welcome “ + a + “ our team!”);
}
}
Arrays (πίνακες)
Για να δηλώσουμε πίνακα a:
● ακεραίων:
int[] a;
● χαρακτήρων:
char[] a;
● γραμματοσειρών:
String[] a;
● Γενικά: type[ ] a;
όπου type = το είδος μεταβλητής
Arrays (πίνακες)
Για να δηλώσουμε πίνακα a μήκους 10:
● ακεραίων:
int[] a = new int[10];
● χαρακτήρων:
char[] a = new char[10];
● γραμματοσειρών:
String[] a = new String[10];
● Γενικά: type a = new type[μέγεθος];
όπου type = το είδος μεταβλητής
Arrays (πίνακες)
Για να εκχωρήσουμε μια τιμή (π.χ. 1337) στον πίνακα
ακεραίων a:
●
στην πρώτη θέση του πίνακα
a[0] = 1337;
● στην δεύτερη θέση του πίνακα
a[1] = 1337;
● Γενικά: a[x] = τιμή;
όπου a = όνομα πίνακα και x ο δείκτης.
Arrays (πίνακες)
Μπορούμε να έχουμε και δισδιάστατους πίνακες:
π.χ. ένας δισδιάστατος πίνακας ακεραίων a,
διαστάσεων 5x10:
● int a[][] = new int[5][10];
Το πρώτο στοιχείο της τρίτης γραμμής:
● a[2][0];
Arrays (πίνακες)
Με την ίδια λογική μπορούμε να έχουμε πίνακες
περισσοτέρων διαστάσεων:
π.χ. τριών διαστάσεων:
● int[][][] a = new int[5][10][20];
Ένα στοιχείο π.χ. είναι a[1][0][19];
Αντικείμενα
● Tρόπος αναπαράστασης των αντικειμένων του κόσμου
μας στο πρόγραμμα, π.χ. Employee, Employer, Boss,
ZenMaster κτλ.
● Περιέχει διάφορα πεδία, π.χ. name, surname, salary
κτλ.
● Περιέχει επίσης διάφορες μεθόδους, π.χ. getName(),
setSalary(), fire() κτλ.
● Για να φτιάξουμε ένα αντικείμενο πρέπει πρώτα να
φτιάξουμε την κλάση του
Κλάσεις
public class Employee
{
String name;
String surname;
int salary;
void getName()
{//κώδικας μεθόδου
}
}
Κλάσεις
Γενική μορφή:
(public) class ΌνομαΚλάσης
{
ΤύποςΜεταβλητής1 όνομαΜεταβλητής1
ΤύποςΜεταβλητής2 όνομαΜεταβλητής2
...
Μέθοδος όνομαΜεθόδου
{//κώδικας μεθόδου
}
}
Κλάσεις
● Το “καλούπι” των αντικειμένων, γιατί:
● Μας λέει τί πεδία έχει το αντικείμενο
● Μας λέει τί μεθόδους έχει το αντικείμενο
Σχεδόν τα πάντα στην Java είναι μέσα σε κλάσεις
Αντικείμενα
● Δήλωση αντικειμένου: Κλάση όνομαΑντικειμένου
● π.χ. Employee brian;
● Όνομα κλάσης συνηθίζεται να ξεκινάει με κεφαλαίο
Για αρχικοποίηση αντικειμένου:
● π.χ. Employee brian = new Employee();
● Γενικά: Κλάση όνομαΑντικειμένου = new Κλάση()
Αντικείμενα
● Για να έχουμε πρόσβαση σε πεδία του αντικειμένου,
βάζουμε το όνομα του αντικειμένου (όχι της κλάσης!),
τελεία, και μετά το όνομα του πεδίου
● Π.χ. brian.name
Η εκχώρηση γίνεται προφανώς:
● brian.name = “Bryan”;
● System.out.println(brian.name); //θα εκτυπώσει bryan
Αντικείμενα
● Παρόμοια γίνεται και η κλήση μεθόδων του αντικειμένου
● π.χ. bryan.getName();
Mέθοδοι
● Οι μέθοδοι εκτελούν λειτουργίες στον κώδικά μας.
● Είναι προφανώς και αυτές μέσα σε κλάση (Java,
people!)
● Αν τα πεδία των κλάσεων μας λένε “πώς” είναι κάτι, τότε
οι μέθοδοι μας λένε “τί κάνει” κάτι
● Υπάρχουν δύο είδη μεθόδων, class methods και object
methods
● Υπάρχουν επίσης δύο ειδικές μέθοδοι, η main και οι
constructors (κατασκευαστές)
Μέθοδοι
π.χ.:
public class Foo
{
public void greet()
{
System.out.println(“Greetings, my Lord.”);
}
}
Μέθοδοι
Γενικά:
public τύποςΜεθόδου όνομαΜεθόδου(ορίσματα)
{
//εντολές
return όνομαΜεταβλητής; //αν δεν είναι void
}
Μέθοδοι
object methods:
● Οι πιο συχνές, είναι μέθοδοι που μπορούν να
χρησιμοποιήσουν τα αντικείμενα της κλάσης
● π.χ.:
public String getName()
{
String name = this.name;
return name;
}
Κλήση: bryan.getName();
Μέθοδοι
class methods:
● Λιγότερο συχνές, μπορούμε να τις χρησιμοποιήσουμε
χωρίς κάποιο αντικείμενο
● π.χ.:
public static String getName()
{
String name = “The One”;
return name;
}
Κλήση: Empoyee.getName();
Μέθοδοι
main method:
● Η μέθοδος από την οποία πάντα ξεκινάει το πρόγραμμά
μας
● Έχει σταθερή δομή:
public static void main(String[] args)
{
//κώδικας
}
Μέθοδοι
constructor methods:
● Η μέθοδος που καλείται κάθε φορά που δημιουργούμε
νέο αντικείμενο
● π.χ.:
public Employee(String name)
{
this.name = name;
}
//Δεν έχει όνομα!
Επισκόπηση
Είδαμε:
● Αντικείμενα, πώς δημιουργούνται και τί είναι
● Κλάσεις, γιατί τις χρειαζόμαστε
● Μεθόδους:
○ 2 είδη (class & object)
○ 2 ειδικές (main & constructor)
● Στη συνέχεια θα δούμε τα exceptions, την
κληρονομικότητα μεταξύ κλάσεων και τα
interfaces.
● Προτιμάτε διάλειμμα ή να το πάμε σερί;
● Απορίες;
Exceptions
● Χρήσιμα αν περιμένουμε να κρασάρει το πρόγραμμά
μας σε ένα σημείο
● Αποτελείται από δύο τμήματα, try & catch
○ To try “τεστάρει” μια περιοχή του κώδικα
■ Αν δε συμβεί τίποτα, συνεχίζει κανονικά
■ Αν υπάρξει σφάλμα, “πετάει” ένα exception
○ Το catch “πιάνει” το exception, αν υπάρχει, και
τρέχει εναλλακτικό κώδικα
Exceptions
Π.χ.:
try
{
someWeirdCode();
//θα μας πετάξει exception
}
catch (Exception e)
{
System.out.println(“Something bad happened.”);
}
Exceptions
Γενικά:
try
{
κώδικας που περιμένουμε να πετάξει Exception
}
catch
{
εναλλακτικός κώδικας
}
Exceptions
● Ένας πιο κομψός τρόπος απ’το να κρασάρει όλο το
πρόγραμμα
● Μπορούμε να ορίσουμε πολλά catch με διαφορετικά
Exceptions, ανάλογα το τί αναμένουμε να γίνει και πώς
θέλουμε να αντιδράσουμε στην κάθ περίπτωση
Κληρονομικότητα
● Δυνατότητα μια κλάση να είναι “εξειδίκευση” μιας άλλης
● Η γενική λέγεται superclass, η ειδική subclass
● Η subclass “κληρονομεί” όλα τα πεδία και τις μεθόδους
της superclass.
● Πρακτικά αυτό σημαίνει πώς ένα αντικείμενο είναι
“εξειδίκευση” ενός άλλου
● Κάθε κλάση μπορεί να έχει το πολύ μία superclass
(single inheritance), αλλά όσες subclasses θέλει
Κληρονομικότητα
Π.χ.:
public class Boss extends Employee
{
int bonusForBeingBoss;
boolean isLikeABoss;
public void setBossStatus(boolean likeABoss)
{
this.isLikeABoss = likeABoss;
}
}
Κληρονομικότητα
Γενικά:
(public) class ΌνομαKλάσης extends όνομαSuperclass
{
//κώδικας
}
Κληρονομικότητα
Πεδία αντικειμένου Employee:
Πεδία αντικειμένου Boss:
String name;
String name;
String surname;
String surname;
int salary;
int salary;
int bonusForBeingABoss;
boolean isLikeABoss;
Μέθοδοι αντικειμένου Employee:
Μέθοδοι αντικειμένου Boss:
String getName();
String getName();
void setBossStatus();
Interfaces
● Ένας τρόπος να “κληρονομεί” μια κλάση χαρακτηριστικά
από διάφορες (πάνω από μία) πηγές
● Περιέχει μόνο method signatures
○ Δεν έχει δηλαδή υλοποιήσεις
● Η κάθε κλάση που την υλοποιεί θα πρέπει να υλοποιεί
και όλες τις μεθόδους της
● Μία κλάση μπορεί να υλοποιεί όσα interface θέλει
Interfaces
π.χ.:
public interface PlaysGolf
{
public void arrangeToGoForGolf(Employee fellowGolfer);
}
Interfaces
π.χ. (συνέχεια):
public class Employer implements PlaysGolf
{
Employee bryan = new Employee();
public void ArrangeToGoForGolf(bryan)
{
System.out.println(bryan.name + “, want to go golfing?”);
}
}
Interfaces
Γενικά (για το ίδιο το Interface):
public interface ΌνομαInterface
{
methodToBeImplemented1(argType arguments);
methodToBeImplemented2(argType arguments);
}
Interfaces
Γενικά (για την κλάση που το υλοποιεί):
(public) class ΌνομαKλάσης implements ΌνομαInterface
{
methodToBeImplemented1(argType arguments)
{
//κώδικας
}
methodToBeImplemented2(argType arguments)
{
//κώδικας
}
}
Απορίες;
Ευχαριστώ για την προσοχή σας :)