Προς το περιεχόμενο

java και κλάσεις


ata1983

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορεί κάποιος με απλά λόγια να μου εξηγήσει τι είναι οι κλάσεις και τα objects της java!(edit:+στιγμιότυπα+μέθοδοι :) ) Απευθύνεστε σε rookie τελείως! Επίσης κανένα απλοικό ebook. Έχω κατεβάσει αρκετά αλλά ψάχνω κάποιο σύντομο με βασικά πράγματα για τα πιο κύρια σημεία

Δημοσ.

Είσαι στην ενότητα του προγραμματισμού και ρωτάς τι είναι οι κλάσεις κτλ στην Java. Προφανώς είμαι ο μόνος που βλέπω ένα τεράστιο υπόμνημα Java FAQ πρώτο πρώτο; Συγγνώμη για το ύφος μου αλλά για να αρχίσεις να ασχολείσαι πρέπει να ψάξεις κιόλας λιγάκι, δεν γίνεται να στα δίνουμε όλα έτοιμα και αυτά που ρωτάς είναι πάρα πολύ απλά θεωρητικά πράγματα που θα τα μάθεις καλύτερα από ένα βιβλίο που δεν χρειάζεται να είναι και για έμπειρους. Άρχισε να διαβάζεις το FAQ της Java αρχικά και μπες και στο http://www.java.sun.com και άρχισε να ψάχνεις. Υπάρχει και το http://www.planetsourcecode.com για διάφορα άλλα παραδείγματα και ολόκληρες εφαρμογές. Κατέβασε και το NetBeans 5.5 (δωρεάν) ή όποιο σε βολεύει τέσπα και άρχισε να δουλεύεις πάνω του. Πάρε και κανένα βιβλίο και πειραματίσου. Είναι ο μόνος τρόπος για να αρχίσεις να μαθαίνεις. Από εκεί και πέρα υπάρχουμε εμείς για να σε βοηθήσουμε σε κάποια τεχνική δυσκολία.

Και φυσικά υπάρχει και το ελληνικό site για την Java το http://www.jhug.gr . Αν χρειάζεσαι μια άμμεση απάντηση θέσε εκεί το ερώτημά σου.

 

Φιλικότατα deker!!!

Δημοσ.

Thanks, το πρόβλημα είναι ότι το έχω δεί το FAQ, έχω κατεβάσει δυο-τρία ebooks που βρήκα και μπορώ να πω ότι οι ορισμοί που έχω βρει μέχρι τώρα για αυτά που ρωτάω είναι τελείως θεωρητικοί και αν και αντιληπτοί δεν με βοηθούν σε κάτι. Εδώ ήθελα να μάθω πρακτικά τι διαφορες έχουν.

Anyway απ'ότι κατάλαβα πρώτα μαθαίνεις τελείως java και μετά ξεκαθαρίζεις μόνος σου αυτές τις έννοιες

Δημοσ.

Δυστυχως το προβλημα ειναι οτι αμα δεν εχεις ιδεα απο προγραμματισμο η java ειναι δυσκολη για αρχη γιατι πρεπει να μαθεις ταυτοχρονα και να τις αρχεις του προγραμματισμου και αλγοριθμων, και τη συνταξη της γλωσσας που δεν ειναι και η ευκολοτερη και τα σχετικα με αντικειμενοστρεφεια και η αληθεια ειναι οτι πεφτουν πολλα.

 

Παντως και οι ερωτησεις σου θα πρεπει να ειναι πιο συγκεκριμενες. Αν εχεις κοιταξει οπως λες καποια πραγματα εστω και θεωρητικα θα πρεπει να εχεις καταλαβει τουλαχιστον τη σχεση μεταξυ object και class. Αυτο ειναι πιο γενικο απο τη java.

Μεθοδοι ειναι οι συναρτησεις και διαδικασιες (δηλαδη κομματια κωδικα που εκτελουν μια συγκεκριμενη λειτουργια) που βρισκεις σε ολες τις γλωσσες. Απλως στη java οι μεθοδοι, αλλα και οι μεταβλητες (fields ή attributes στη java) ανηκουν σε παντα συγκεκριμενες κλασεις και υπαρχουν περιορισμοι στο πως και απο που μπορεις να τις καλεσεις.

Δημοσ.

Να επανέλθω λίγο με κάτι πολύ συγκεκριμένο. Ο κώδικας ενός προγράμματος που έφτιαξα:

public class Method {

int a=3;

int b=4;

public int meth(){

a=a+b;

return a;

}

public int meth2(){

return b;

}

public static void main(String[] args) {

Method method=new Method();

Method tree=new Method();

int c=method.meth();

int d=tree.meth2();

System.out.println©;

System.out.println(d);

}}

 

Επειδή το έφτιαξα με τη βοήθεια άλλων παραδειγμάτων θα ήθελα να καταλάβω ένα πράγμα

Οι τιμές a και b στα objects method και tree μπαίνουν κατά τον ορισμό τους δλδ σε αυτή τη γραμμή: Method method=new Method();

ή στην προσπέλασή τους: int c=method.meth();

 

Sorry ο κώδικας το ξέρω ότι είναι λίγο ..κάπως αλλά σε αυτή τη φάση αρκεί να καταλάβω και ας υπάρχει και πιο σύντομος τρόπος

Δημοσ.

Κατα τη δημιουργία του instance της κλάσης Method τα α και β γίνονται initialise σε 3 και 4 αντίστοιχα. Όταν καλείς τη meth() η τιμή του α ανανεώνεται (αυξάνεται κατά β).

Δημοσ.

Ωραίος, ευχαριστώ. Καί ένα ακόμα: Έστω μια κλάση Simple τότε αν κατά τον ορισμό μεθόδου έχουμε αυτή τη διατύπωση: public Simple example(){}, τι εννοούμε? Δεν εννοώ το public κτλ αλλά ποιο ρόλο παίζει το όνομα της κλάσσης κατά τη δήλωση μιας μεθόδου στην θέση της τιμής που θα πρέπει να επιστρέφει.

Δημοσ.

Αν κατάλαβα καλα την ερώτηση μάλλον εχεις μπερδευτεί οσον αφορα το τι ειναι μεθοδος. Λοιπόν:

Καταρχήν η public class Method δεν ειναι μεθοδος! Ειναι μια κανονικη κλαση. Οι κλασεις εχουν μεθόδους αλλα οι μεθοδοι δεν ειναι κλάσεις. Οι μέθοδοι όμως μπορούν οταν τις τρέξεις να επιστρέψουν ένα αντικείμενο (το οποιο φυσικα συμμορφωνεται στα προτυπα μιας συγκεκριμένης κλασης)

 

Μέσα στην κλαση Method εχεις αυτή τη στιγμη δηλωσει τα πεδία a & b τα οποια εχεις δηλωσει να παιρνουν αρχικη τιμή 3 και 4.

Επίσης η κλαση Method εχει 2 μεθόδους, τις meth() kai meth2() οι οποίες επιστρέφουν τιμη ακεραίου, μοιαζουν δηλαδη με functions. Αν ήταν void δεν θα επέστρεφαν τιποτα και θα μοιαζαν με procedures.

 

Στα προγράμματα που φτιάχνεις πρέπει σε μια κλαση που θα ειναι public να υπάρχει η μέθοδος public static void main(String[] args)

 

Επειδή ειναι static δεν χρειάζεται να την καλέσεις μεσα απο αντικείμενο αλλα ειναι διαθέσιμη ανα πάσα στιγμή. Πως θα μπορούσες αλλωστε να την καλέσεις απο αντικείμενο αφού πρέπει πρώτα να το φτιάξεις και πώς θα το φτιάξεις αν δεν τρέξεις καποιο αρχικό κωδικα?

 

Συνήθως στη main τρέχουμε constructor methods. Οι constructors ειναι μέθοδοι που ανήκουν σε μία κλάση (φυσικά) και έχουν το ιδιο όνομα με την κλάση. Για παράδειγμα,

 

public class Method {

int a=3;

int b=4;

 

 

// constructor

private Method() {

}

 

 

public int meth(){

a=a+b;

return a;

}

public int meth2(){

return b;

}

public static void main(String[] args) {

Method method=new Method();

Method tree=new Method();

int c=method.meth();

int d=tree.meth2();

System.out.println©;

System.out.println(d);

}}

 

Οταν ο constructor λειπει, θεωρειται οτι ειναι κενος, οπως αυτος που εγραψα. Καλό ειναι να το βαζεις παντα ομως εστω και κενο. Φυσικα μπορεί να κάνει και δουλεια μέσα, ακομα και να παίρνει παραμετρους.

 

Μεσα στη main, φτιάχνεις τα objects tree kai method. Υποψην method kai Method δεν ειναι το ιδιο γιατι η γλωσσα ειναι case sensitive.

Σαν objects της κλάσης Method (ελπίζω μετα απο αυτό να μήν ονομάσεις ποτέ ξανα μία κλαση Method ;)), έχουν τις μεθόδους meth kai meth2. To αποτέλεσμα απο την κλήση τους μπορεί να μπεί κατευθείαν σε μία καινούρια μεταβλητη (c, d στο παραδειγμα) αφού οι 2 μεθοδοι επιστρέφουν ακέραιο.

 

Ελπίζω να ξεκαθάρισε λιγο το τοπίο

Δημοσ.

Όχι δεν εννούσα αυτό αλλά από τη λεπτομερή διατύπωση σου κατάλαβα και αυτό που ήθελα. Σε πέδαιψα λίγο παραπάνω καθώς μερικά από αυτά τα είχα καταλάβει!

Αυτό που δεν καταλάβαινα είναι όταν κατά τον ορισμό μεθόδου υπάρχει το όνομα κλάσσης αντί για παράδειγμα το int στην τιμή που επιστρέφει. Αυτό γίνεται όπως κατάλαβα από τα λεγόμενά σου όταν επιστρέφει object στα πρότυπα της κλάσσης που υπάρχει το όνομα. Επίσης ΔΕΝ μπορούσα να καταλάβω με τπτ πως θα κάνω κλήση μη static μεθόδου μέσα από objects αλλά μετά από 25 ebooks βρήκα αυτό με τα κατάλληλα παραδείγματα.

Ευχαριστώ πάρα πολύ για τη βοήθεια, τα constuctor τα έχω καταλάβει αρκετά καλά. Πλέον για να περάσω το μάθημα πρέπει να αρχίσω να φτιάχνω ένα παιχνίδι :( Την πάτησα ε?!!!

Δημοσ.

Τι παιχνιδι? με γραφικα? Εχετε συζητησει τετοια πραγματα στην ταξη? Μαλλον δεν θα μπορουσες να παρακολουθησεις καν αμα ειχες τοσα κενα στα βασικα. Αμα εχεις χρονο βεβαια βγαινει. Υπαρχουν και ευκολα παιχνιδια. Το JDK ερχεται με ετοιμο παραδειγμα την τριλιζα.

Τα κλασικα που ζητανε σε τετοια μαθηματα ειναι τυπου σκορ4, space invaders, tetris, pacman και arkanoid/pong.

Αρχισε να ψαχνεις ετοιμο κωδικα. Αλλα πιο πριν πρεπει να κατανοησεις τα βασικα διαφορετικα δεν σε σωζουν τα ετοιμα.

Δημοσ.

Εντάξει ψιλοχάζευα λίγο στο μάθημα αλλά αυτά τα αναπλήρωσα σε 2-3 μέρες ενταντικού διαβάσματος. Πλέον έχω καταλάβει την όλη δομή με classes,objects (επιτέλους!) και ξεκίνησα και γράφω απλά προγράμματα σε προβλήματα, με ανακυκλώσεις κτλ. Έχω και το ελαφρυντικό ότι μόνο λίγο assembly ξέρω και λίγη C οπότε νομίζω είμαι σε καλό δρόμο. Το παιχνίδι λογικά θα έχω καμια εικοσαριά μέρες να το παραδόσω αλλά πρέπει να το βγάλω μόνος μου γιατί αλλιώς δεν περνάς κυρα Μαρία!!! Απλό θα'ναι τι στο καλό, κάτι για κηνυγούς λένε και θυράματα :)

Δημοσ.

Προσπαθώ να φτιάξω ένα organizer με τηλ.και ονόματα κτλ(κακορίζικο βέβαια) και έχω κολλήσει κάπου: Πως μπορώ να το κάνω να δημιουργούνται αυτόματα νέα objects κάθε φορά που δίνω προς αποθήκευση νέα επαφή? Πιο απλά υπάρχει τρόπος να φτιαχτεί object με κάποιας μορφής δείκτη? Το χρειάζομαι γιατί έχω μια ιδέα με constructors κτλ να δίνω μέσω κονσόλας οπότε κάθε νέα επαφή θα είναι ένα νέο object με όνομα μέσω constructor το args[0] κτλ κτλ.

Ελπίζω να καταλάβατε!!!

 

Επίσης στη συνέχεια αντιμετωπίζοντας αυτό το πρόβλημα προσπάθησα να το κάνω πιο μπακαλίστικα χωρίς objects αλλά δεν έχω αποτέλεσμα. Όποιος έχει χρόνο ας ρίξει μια ματιά:

 

 

public class Ajenda {

 

 

static int i=-1;

static String database[][]=new String[100][3];

 

 

public static void main(String args[]){

 

if(args[0]=="input"){

i++;

 

for(int j=0;j<3;j++) database[j]=args[j+1];

}

else{

for(int c=0;c<99;c++){

if(database[c][0]==args[0]){

System.out.println("name:"+database[c][0]+" telephone:"+database[c][1]+" email:"+database[c][2]);

break;

} } }} }

 

 

Σημείωση: Εδώ όταν η εντολή συντάσσεται με argument input προσπάθησα να βάζω τα υπόλοιπα arguments σε ένα πίνακα database. Όταν δε συντάσσεται με input απλώς να θεωρεί ότι δόθηκε όνομα προς αναζήτηση και να ψάχνει στην πρώτη στήλη του database και να τυπώνει όλα τα πεδία του.

 

Ευχαριστώ πολύ για τη βοήθειά σας σε κάθε περίπτωση

Δημοσ.

Βασικά μάλλον κατάλαβα πως πρέπει να το δώσω οπότε δείτε μόνο αυτό εδώ τον κώδικα να μου πείτε γιατί δεν λειτουργεί

 

 

public class Organizer {

 

String name,tele,mail;

 

 

 

 

Organizer(String n,String t,String m){

name=n;

tele=t;

mail=m;

}

 

public static void main(String args[]){

Organizer object[]=new Organizer[100];

int i=0;

 

if(args[0]=="input"){

object.name=args[1];

object.tele=args[2];

object.mail=args[3];

i++;

}

else{

for(int k=0;k<=i;k++){

if(args[0]==object[k].name){

System.out.println("Name:"+object[k].name+" Telephone:"+object[k].tele+" Email:"+object[k].mail);

}

}

}

 

}

 

}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...