Έκδοση 0.1
Δείτε παρακάτω μια εισαγωγική αντιστοίχιση λειτουργιών και εντολών μεταξύ Pascal και Java http://www.geocities.com/SiliconValley/Park/3230/pas/pas2java.html Λόγω της έλλειψης αρκετών βασικών εντολών εισόδου-εξόδου σε κονσόλα, θα χρειαστούμε επίσης μια class Console που θα μας τις παρέχει. Θα χρησιμοποιήσουμε λοιπόν μια τροποποιημένη έκδοση του αρχείου Console.java που βρέθηκε σε δικτυακό φάκελο ενός πανεπιστημίου στην Washightonμετά από αναζήτηση στο Internet, . http://faculty.washington.edu/edhong/previousquarters/305wi03/statpac/
Ξεκινώντας θα πρέπει να δημιουργήσουμε ένα νέο project σε ένα περιβάλλον ανάπτυξης για μια γλώσσα προγραμματισμού. Εδώ θα δούμε τα περιβάλλοντα Lazarus 0.9 για Pascal και Netbeans 5.5 για Java
Εκκινούμε το περιβάλλον ανάπτυξης Pascal Lazarus
Εκκινούμε το περιβάλλον ανάπτυξης Java Netbeans
Στο πρώτο πρόγραμμά μας παραδοσιακά θα ξεκινήσουμε εμφανίζωντας το μύνημα 'Hello World!' στην προκαθορισμένη έξοδο (stdout: standard output) που είναι η οθόνη.
Το πρόγραμμά μας ξεκινάει από το begin και τελειώνει στο end. Για να εμφανίσουμε το μύνημα γράφουμε ανάμεσα, την εντολή
writeln('Hello World');
Για να σταματήσουμε το πρόγραμμά μας, ώστε να δούμε τα αποτελέσματα στην οθόνη, ακριβώς πριν το end. γράφουμε
readln;
Το κάνουμε έτσι να περιμένει από την προκαθορισμένη είσοδο (stdin: standard input) που είναι η οθόνη, να πληκτρολογήσουμε κάτι και να πατήσουμε ENTER.
Αν δουλεύουμε σε linux θα πρέπει να ορίσουμε να εμφανίζει κάπου τα αποτελέσματα ως εξής:
Για να το εκτελέσουμε,( να το τρέξουμε)
Το πρόγραμμά μας ξεκινάει από το
public static void main(String[] args) { και τελειώνει στο αμέσως επόμενο }.
Για να εμφανίσουμε το μύνημα γράφουμε ανάμεσα, την εντολή
System.out.print("Hello World!");
(Χρησιμοποιούμε την αυτόματη συμπλήρωση. Γράφουμε System.o, πατάμε enter, γράφουμε p, παταμε enter κτλ)
Για να το εκτελέσουμε,( να το τρέξουμε)
Τα πολύπλοκα προβλήματα χρειάζονται σωστή σχεδίαση και διάσπασή τους σε μικρότερα κομμάτια, ώστε να απλοποιηθούν και να λυθούν βήμα βήμα. Θέλουμε να φτιάξουμε ένα παιχνίδι, κάτι αρκετά πολύπλοκο. Η έννοια των αντικειμένων που έχουμε γύρω μας είναι οικεία και υπάρχει και στον προγραμματισμό.
Θέλουμε να εμφανίζεται ένα αρχικό μενού επιλογών στο χρήστη1). Για παράδειγμα:
1.Enarksi 2.Epiloges 3.HighSkor 4.Boitheia 5.Exodos
Θα ορίσουμε στον Κόσμο του Παιχνιδιού μας, μια Κατηγορία αντικειμένου Menou, όπως υπάρχει στον πραγματικό μας κόσμο η Κατηγορία ζώου Σκύλος. Θα δημιουργήσουμε στην συνέχεια ένα νεό στιγμιότυπο κατηγορίας αντικειμένου Menou και θα το ονομάσουμε BasikoMenou. Όπως γεννιέται ένα νέος Σκύλος και τον ονομάζουμε Λάσι.
Πραγματικός Κόσμος | Κόσμος Παιχνιδιού | |
Κατηγορία | Σκύλος | Menou |
---|---|---|
Στιγμιότυπο | Λάσι | BasikoMenou |
Σκύλος | χρώμα | ηλικία |
---|---|---|
Λάσι | καφέ | 0 |
Menou | arithmosEpilogon | keimenoEpilogis[] | epilogiExodou | epilogi |
---|---|---|---|---|
BasikoMenou | 5 | '1.Enarksi', '2.Epiloges' .. | 5 | -1 |
Ο σκύλος γεννιέται, έτσι και η κατηγορία Menou θα έχει μια διαδικασία δημιουργίας που συνήθως έχει όνομα ίδιο με την κατηγορία δηλαδή Menou(). O σκύλος τρώει, τρέχει, γαυγίζει. Έτσι και η κατηγορία Menou έχει μια διαδικασία εμφανισης: Emfanisi() αλλά και απαντάει αν την ρωτήσουμε ποια είναι η τρέχουσα επιλογή του χρήστη, την συνάρτηση GetEpilogi().
Πριν προχωρήσουμε στην σχεδίαση θα πρέπει να δούμε τι εργαλεία μας δίνουν οι γλώσσες προγραμματισμού για :
Τα χαρακτηριστικά των αντικειμένων και οτιδήποτε άλλο θέλουμε να αποθηκεύσουμε κάπου πριν το χειριστούμε, αποθηκεύονται σε μεταβλητές, ανάλογα με την τιμή τους, (κείμενο, ακέραιος ή δεκαδικός αριθμός κτλ)
Τύπος2) | Μέγεθος bytes 3) | Pascal | Java | Τιμές4) |
---|---|---|---|---|
μικρός ακέραιος | 1 | shortint | short | -128..127 |
ακέραιος | 2 | integer | int | -32768..32767 |
μεγάλος ακέραιος | 4 | longint | long | -2δις έως 2δις5) |
πραγματικός | 6 | real | float | όλοι6) |
χαρακτήρας | 1 | char | char | |
κείμενο | 255 | string | String | έως 255 χαρακτήρες7) |
λογικός | 1 8) | boolean | boolean | true ή false |
μικρός ακέραιος+ | 1 | byte | byte | 0 .. 2559) |
ακέραιος+ | 2 | word | 0 .. 65535 |
Για να μην μπλεχτούμε στις διαφορές μεταξύ γλωσσών προγραμματισμού, στους ακεραίους δεν ασχολούμαστε με τους θετικούς και ξεχνάμε ότι η java μας επιτρέπει μεγαλύτερες τιμές
Πάμε λοιπόν να σχεδιάσουμε σε UML την κατηγορία Menou.
Εκκινούμε το περιβάλλον ανάπτυξης Java Netbeans
Class (ή κλάση) είναι η κατηγορία του αντικειμένου:
Ωραία ως εδώ έχουμε ορίσει μια γενική κατηγορία Menou. Όμως κάποιος πρέπει να την χρησιμοποιήσει. Να δημιουργήσει κάποιο στιγμιότυπό της. Φανταστείτε ότι έχετε γράψει οδηγίες για το τι υλικά και τι ενέργειες χρειάζονται για να φτιάξετε ένα γλυκό. Κάποιος δεν πρέπει να ξεκινήσει και να το φτιάξει;
Στον κόσμο του Παιχνιδιού μας αυτός ο κάποιος, είναι μια άλλη κατηγορία, ας την πούμε FidakiGame. Αυτή η κατηγορία αντιπροσωπεύει ολόκληρο το παιχνίδι. Έχει ως χαρακτηριστικό της (attribute) όχι μεταβλητές τύπου int,String κτλ το BasikoMenou που είναι στιγμιότυπο της κατηγορίας Menou. Σαν να λέγαμε ότι ο Κώστας έχει στα χαρακτηριστικά του, την ηλικία του (απλή μεταβλητή), τον σκύλο του την Λάσι που είναι ένας Σκύλος και ένα γλυκό κανταϊφι που είναι στιγμιότυπο ενός Γλυκού.
θα πρέπει όμως να κάνει τον κόπο να το φτιάξει, με μια διαδικασία DimiourgiaGlikou(). Έτσι και εμείς θα πρέπει να φτιάξουμε το basikoMenou. Θα το κάνουμε με την διαδικασία dimiourgiaBasikoMenou().
Ας φτιάξουμε λοιπόν την κατηγορία αυτή, τα χαρακτηριστικά και τις διαδικασίες τις
Έχουμε σχεδιάσει σε αρχικό στάδιο την εφαρμογή μας. Στο κυρίως πρόγραμμα λοιπόν :
Στην κλάση Main στην διαδικασία public static void main(String[] args) εισάγουμε τον παρακάτω κώδικα
FidakiGame newGame= new FidakiGame();
Δοκιμάζουμε να εκτελέσουμε το πρόγραμμα. Θα μας εμφανιστεί μύνημα λάθους, ότι δεν μπορεί να βρει την κατηγορία FidakiGame. Για να το επιλύσουμε προσθέτουμε στις κατηγορίες FidakiGame και Menou την δήλωση ότι ανήκουν στο πακέτο fidakiprj, όπως ήδη ανήκει η main
package fidakiprj;
Στην κατηγορία FidakiGame στην διαδικασία public void dimiourgiaBasikoMenou() εισάγουμε τον παρακάτω κώδικα.
short arithmosEpilogon=5; basikoMenou = new Menou(); basikoMenou.setArithmosEpilogon(arithmosEpilogon); ArrayList<String> keimeno = new ArrayList(arithmosEpilogon); keimeno.add("1.Enarksi"); keimeno.add("2.Epiloges"); keimeno.add("3.HighSkor"); keimeno.add("4.Boitheia"); keimeno.add("5.Exodos"); basikoMenou.setKeimenoEpilogis(keimeno);
Δοκιμάζουμε να το τρέξουμε. Θα μας εμφανίσει μύνημα ότι δεν μπορεί να βρεί την κατηγορία ArrayList. Για να του δόσουμε οδηγίες που θα την εντοπίσει εισάγουμε στην 2η γραμμή της κατηγορίας FidakiGame κάτω από το package fidakiprj;
package fidakiprj; import java.util.ArrayList;
Κατά την δημιουργία της κατηγορίας FidakiGame (στην διαδικασία FidakiGame()) όλα τα χαρακτηριστικά της πρέπει να πάρουν αρχική τιμή. Για το λόγο αυτό θα καλέσουμε την διαδικασία dimiourgiaBasikoMenou() που αρχικοποιεί/δημιουργεί τo basikoMenou.
public FidakiGame() { this.dimiourgiaBasikoMenou(); }
Δημιουργούμε μια νέα διαδικασία στην κατηγορία FidakiGame με όνομα emfanisi() και στον κώδικά της ορίζουμε να καλεί την διαδικασία emfanisi() του Menou, basikoMenou. Την τοποθετούμε πριν από το τελευταίο } που είναι το τέλος της κατηγορίας.
public void emfanisi() { basikoMenou.emfanisi(); }
Εισάγουμε τον κώδικα εμφάνισης στην διαδικασία emfanisi() της κατηγορίας Menou
public void emfanisi() { int i; String keimeno; keimeno= new String(); i=0; for(i=0; i<=4; i++){ keimeno=this.keimenoEpilogis.get(i); System.out.println(keimeno); } }
Τέλος στο κυρίως πρόγραμμα στην Main κλάση, καλούμε την διαδικασία εμφάνισης του στιγμιοτύπου newGame
FidakiGame newGame= new FidakiGame(); newGame.emfanisi();
Τρέχουμε την εφαρμογή μας. Επειδή έχουμε κάνει αλλαγές στις κατηγορίες μας προσθέτοντας μια καινούργια διαδικασία emfanisi στην κατηγορία FidakiGame, θα ενημερώσουμε το UML διάγραμμα ως εξής: