ata1983 Δημοσ. 20 Νοεμβρίου 2006 Δημοσ. 20 Νοεμβρίου 2006 Μπορεί κάποιος με απλά λόγια να μου εξηγήσει τι είναι οι κλάσεις και τα objects της java!(edit:+στιγμιότυπα+μέθοδοι ) Απευθύνεστε σε rookie τελείως! Επίσης κανένα απλοικό ebook. Έχω κατεβάσει αρκετά αλλά ψάχνω κάποιο σύντομο με βασικά πράγματα για τα πιο κύρια σημεία
deker Δημοσ. 20 Νοεμβρίου 2006 Δημοσ. 20 Νοεμβρίου 2006 Είσαι στην ενότητα του προγραμματισμού και ρωτάς τι είναι οι κλάσεις κτλ στην Java. Προφανώς είμαι ο μόνος που βλέπω ένα τεράστιο υπόμνημα Java FAQ πρώτο πρώτο; Συγγνώμη για το ύφος μου αλλά για να αρχίσεις να ασχολείσαι πρέπει να ψάξεις κιόλας λιγάκι, δεν γίνεται να στα δίνουμε όλα έτοιμα και αυτά που ρωτάς είναι πάρα πολύ απλά θεωρητικά πράγματα που θα τα μάθεις καλύτερα από ένα βιβλίο που δεν χρειάζεται να είναι και για έμπειρους. Άρχισε να διαβάζεις το FAQ της Java αρχικά και μπες και στο http://www.java.sun.com και άρχισε να ψάχνεις. Υπάρχει και το http://www.planetsourcecode.com για διάφορα άλλα παραδείγματα και ολόκληρες εφαρμογές. Κατέβασε και το NetBeans 5.5 (δωρεάν) ή όποιο σε βολεύει τέσπα και άρχισε να δουλεύεις πάνω του. Πάρε και κανένα βιβλίο και πειραματίσου. Είναι ο μόνος τρόπος για να αρχίσεις να μαθαίνεις. Από εκεί και πέρα υπάρχουμε εμείς για να σε βοηθήσουμε σε κάποια τεχνική δυσκολία. Και φυσικά υπάρχει και το ελληνικό site για την Java το http://www.jhug.gr . Αν χρειάζεσαι μια άμμεση απάντηση θέσε εκεί το ερώτημά σου. Φιλικότατα deker!!!
ata1983 Δημοσ. 20 Νοεμβρίου 2006 Μέλος Δημοσ. 20 Νοεμβρίου 2006 Thanks, το πρόβλημα είναι ότι το έχω δεί το FAQ, έχω κατεβάσει δυο-τρία ebooks που βρήκα και μπορώ να πω ότι οι ορισμοί που έχω βρει μέχρι τώρα για αυτά που ρωτάω είναι τελείως θεωρητικοί και αν και αντιληπτοί δεν με βοηθούν σε κάτι. Εδώ ήθελα να μάθω πρακτικά τι διαφορες έχουν. Anyway απ'ότι κατάλαβα πρώτα μαθαίνεις τελείως java και μετά ξεκαθαρίζεις μόνος σου αυτές τις έννοιες
Bspus Δημοσ. 20 Νοεμβρίου 2006 Δημοσ. 20 Νοεμβρίου 2006 Δυστυχως το προβλημα ειναι οτι αμα δεν εχεις ιδεα απο προγραμματισμο η java ειναι δυσκολη για αρχη γιατι πρεπει να μαθεις ταυτοχρονα και να τις αρχεις του προγραμματισμου και αλγοριθμων, και τη συνταξη της γλωσσας που δεν ειναι και η ευκολοτερη και τα σχετικα με αντικειμενοστρεφεια και η αληθεια ειναι οτι πεφτουν πολλα. Παντως και οι ερωτησεις σου θα πρεπει να ειναι πιο συγκεκριμενες. Αν εχεις κοιταξει οπως λες καποια πραγματα εστω και θεωρητικα θα πρεπει να εχεις καταλαβει τουλαχιστον τη σχεση μεταξυ object και class. Αυτο ειναι πιο γενικο απο τη java. Μεθοδοι ειναι οι συναρτησεις και διαδικασιες (δηλαδη κομματια κωδικα που εκτελουν μια συγκεκριμενη λειτουργια) που βρισκεις σε ολες τις γλωσσες. Απλως στη java οι μεθοδοι, αλλα και οι μεταβλητες (fields ή attributes στη java) ανηκουν σε παντα συγκεκριμενες κλασεις και υπαρχουν περιορισμοι στο πως και απο που μπορεις να τις καλεσεις.
ata1983 Δημοσ. 24 Νοεμβρίου 2006 Μέλος Δημοσ. 24 Νοεμβρίου 2006 Να επανέλθω λίγο με κάτι πολύ συγκεκριμένο. Ο κώδικας ενός προγράμματος που έφτιαξα: 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 ο κώδικας το ξέρω ότι είναι λίγο ..κάπως αλλά σε αυτή τη φάση αρκεί να καταλάβω και ας υπάρχει και πιο σύντομος τρόπος
Dikemou Δημοσ. 25 Νοεμβρίου 2006 Δημοσ. 25 Νοεμβρίου 2006 Κατα τη δημιουργία του instance της κλάσης Method τα α και β γίνονται initialise σε 3 και 4 αντίστοιχα. Όταν καλείς τη meth() η τιμή του α ανανεώνεται (αυξάνεται κατά β).
ata1983 Δημοσ. 25 Νοεμβρίου 2006 Μέλος Δημοσ. 25 Νοεμβρίου 2006 Ωραίος, ευχαριστώ. Καί ένα ακόμα: Έστω μια κλάση Simple τότε αν κατά τον ορισμό μεθόδου έχουμε αυτή τη διατύπωση: public Simple example(){}, τι εννοούμε? Δεν εννοώ το public κτλ αλλά ποιο ρόλο παίζει το όνομα της κλάσσης κατά τη δήλωση μιας μεθόδου στην θέση της τιμής που θα πρέπει να επιστρέφει.
Bspus Δημοσ. 26 Νοεμβρίου 2006 Δημοσ. 26 Νοεμβρίου 2006 Αν κατάλαβα καλα την ερώτηση μάλλον εχεις μπερδευτεί οσον αφορα το τι ειναι μεθοδος. Λοιπόν: Καταρχήν η 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 μεθοδοι επιστρέφουν ακέραιο. Ελπίζω να ξεκαθάρισε λιγο το τοπίο
ata1983 Δημοσ. 26 Νοεμβρίου 2006 Μέλος Δημοσ. 26 Νοεμβρίου 2006 Όχι δεν εννούσα αυτό αλλά από τη λεπτομερή διατύπωση σου κατάλαβα και αυτό που ήθελα. Σε πέδαιψα λίγο παραπάνω καθώς μερικά από αυτά τα είχα καταλάβει! Αυτό που δεν καταλάβαινα είναι όταν κατά τον ορισμό μεθόδου υπάρχει το όνομα κλάσσης αντί για παράδειγμα το int στην τιμή που επιστρέφει. Αυτό γίνεται όπως κατάλαβα από τα λεγόμενά σου όταν επιστρέφει object στα πρότυπα της κλάσσης που υπάρχει το όνομα. Επίσης ΔΕΝ μπορούσα να καταλάβω με τπτ πως θα κάνω κλήση μη static μεθόδου μέσα από objects αλλά μετά από 25 ebooks βρήκα αυτό με τα κατάλληλα παραδείγματα. Ευχαριστώ πάρα πολύ για τη βοήθεια, τα constuctor τα έχω καταλάβει αρκετά καλά. Πλέον για να περάσω το μάθημα πρέπει να αρχίσω να φτιάχνω ένα παιχνίδι Την πάτησα ε?!!!
Bspus Δημοσ. 26 Νοεμβρίου 2006 Δημοσ. 26 Νοεμβρίου 2006 Τι παιχνιδι? με γραφικα? Εχετε συζητησει τετοια πραγματα στην ταξη? Μαλλον δεν θα μπορουσες να παρακολουθησεις καν αμα ειχες τοσα κενα στα βασικα. Αμα εχεις χρονο βεβαια βγαινει. Υπαρχουν και ευκολα παιχνιδια. Το JDK ερχεται με ετοιμο παραδειγμα την τριλιζα. Τα κλασικα που ζητανε σε τετοια μαθηματα ειναι τυπου σκορ4, space invaders, tetris, pacman και arkanoid/pong. Αρχισε να ψαχνεις ετοιμο κωδικα. Αλλα πιο πριν πρεπει να κατανοησεις τα βασικα διαφορετικα δεν σε σωζουν τα ετοιμα.
ata1983 Δημοσ. 27 Νοεμβρίου 2006 Μέλος Δημοσ. 27 Νοεμβρίου 2006 Εντάξει ψιλοχάζευα λίγο στο μάθημα αλλά αυτά τα αναπλήρωσα σε 2-3 μέρες ενταντικού διαβάσματος. Πλέον έχω καταλάβει την όλη δομή με classes,objects (επιτέλους!) και ξεκίνησα και γράφω απλά προγράμματα σε προβλήματα, με ανακυκλώσεις κτλ. Έχω και το ελαφρυντικό ότι μόνο λίγο assembly ξέρω και λίγη C οπότε νομίζω είμαι σε καλό δρόμο. Το παιχνίδι λογικά θα έχω καμια εικοσαριά μέρες να το παραδόσω αλλά πρέπει να το βγάλω μόνος μου γιατί αλλιώς δεν περνάς κυρα Μαρία!!! Απλό θα'ναι τι στο καλό, κάτι για κηνυγούς λένε και θυράματα
ata1983 Δημοσ. 30 Νοεμβρίου 2006 Μέλος Δημοσ. 30 Νοεμβρίου 2006 Προσπαθώ να φτιάξω ένα 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 και να τυπώνει όλα τα πεδία του. Ευχαριστώ πολύ για τη βοήθειά σας σε κάθε περίπτωση
ata1983 Δημοσ. 30 Νοεμβρίου 2006 Μέλος Δημοσ. 30 Νοεμβρίου 2006 Βασικά μάλλον κατάλαβα πως πρέπει να το δώσω οπότε δείτε μόνο αυτό εδώ τον κώδικα να μου πείτε γιατί δεν λειτουργεί 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); } } } } }
Dikemou Δημοσ. 1 Δεκεμβρίου 2006 Δημοσ. 1 Δεκεμβρίου 2006 Μέσα στο if της main() θέλεις κάτι σαν: > objects[i] = new Organizer(args[1], args[2], args[3]);
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.