2.8. Παράδειγμα με Αντικείμενα
Έχουμε μια έκθεση μεταχειρισμένων αυτοκινήτων με είκοσι θέσεις. Θέλουμε ένα τρόπο να καταχωρήσουμε στοιχεία. Ειδικά εδώ μας ενδιαφέρει η αναπαράσταση των δεδομένων.
Έχω έναν πίνακα Έκθεση(20) όπου σε κάθε θέση θέλω να έχω επακριβώς όλες τις πληροφορίες για το τύπο του αμαξιού, τα ιδιαίτερα στοιχεία του, τις άδειες που έχουν εκδοθεί.
Δεν θέλω να αλλάζουν ορισμένα πράγματα όπως το μοντέλο,το χρώμα, αριθμός πλαισίου, έτος παργωγής. Για το μοντέλο θέλω κάποια στοιχεία μαζί με τον τύπο κινητήρα, ισχύ, κυβικά (στα ηλεκτρικά θα βάζω 0).
Στις άδειες θέλω όνομα, μήνα, έτος και αφμ.
Αφού περάσω δυο αμάξια θέλω να δω τα στοιχεία τους, Με ενδιαφέρει η πρώτη και η τελευταία άδεια.
Η Αυτοκίνητα() κρατάει τις άδειες, το μοντέλο, έχει βασικά στοιχεία. Ο πίνακας θα έχει τέτοια αντικείμενα.
Στον ιδιωτικό πίνακα μοντέλο θα καταχωρηθεί το αντικείμενο Αυτοκίνητο. Σε μια άλλη υλοποίηση τα στοιχεία θα έρχονται από αρχείο, εδώ όμως τα περνάμε σε ένα νέο αντικείμενο ΜΟΝΤΕΛΟ1
Αφού η έκθεση έχει αντικείμενα Αυτοκίνητα καλούμε όσες φορές χρειάζεται την μέθοδο εισαγωγή_αυτοκινήτου (είναι τμήμα της κλάσης) και σημειώνουμε αριθμό πλαισίου, χρώμα, επίπεδο εξοπλισμού και το μοντέλο. Η τέταρτη παράμετρος είναι αντικείμενο.
Έπειτα περνάω νέα άδεια με την μέθοδο Νέα_Άδεια με όνομα, έτος, μήνας, και ΑΦΜ.
Δείτε τι λείπει. Δεν έχω βάλει αριθμό κυκλοφορίας και δεν έχω βάλει αριθμό αδείας. Αυτά τα αφήνω για τον αναγνώστη!
Όπου χρειάζεται χρησιμοποιώ προσωρινά αντικείμενα. Π.χ. η Τελευταία παίρνει ένα αντίγραφο της τελευταίας άδειας μέσα σε μια ΓΙΑ αντικείμενο {} που σημαίνει ότι μετά το πέρας της ΓΙΑ θα διαγραφεί. Οι τελείες φθάνουν τις τρεις όταν διαβάζω τα στοιχεία της άδειας. Εκεί ότι έχει μια τελεία είναι ό,τι δημόσιο του στοιχείου του πίνακα Έκθεση, ενώ με τις δυο τελείες ό,τι δημόσιο από το προσωρινό αντικείμενο Μοντέλο. Χρησιμοποιώ προσωρινά αντικείμενα για ανάγνωση μόνο! Δεν μπορώ να αλλάξω το μοντέλο, ούτε τα στοιχεία άδειας.
Κλάση Αυτοκίνητα {
Ιδιωτικό:
αρ_πλαισίου$, χρώμα$, εξοπλισμός$, έτος
άδειες
Πίνακας Άδειες()
Πίνακας Μοντέλο(1)
Δημόσιο:
Συνάρτηση έτος {
=.έτος
}
Συνάρτηση αρ_πλαισίου$ {
=.αρ_πλαισίου$
}
Συνάρτηση χρώμα$ {
=.χρώμα$
}
Συνάρτηση εξοπλισμός$ {
=.εξοπλισμός$
}
Συνάρτηση Μοντέλο {
\\ ο πίνακας προτιμάται από το διερμηνευτή
=.Μοντέλο(0)
}
Συνάρτηση ΠρώτηΆδεια {
Αν .άδειες>0 τότε {
=.άδειες(0)
} Αλλιώς {
ομάδα Α { ονομα$ }
=Α
}
}
Συνάρτηση ΤελευταίαΆδεια {
Αν .άδειες>0 τότε {
=.άδειες(.άδειες-1)
} Αλλιώς {
ομάδα Α { ονομα$ }
=Α
}
}
Τμήμα Εισαγωγή_Αυτοκινήτου {
Αν .αρ_πλαισίου$="" τότε {
Διάβασε .αρ_πλαισίου$, .χρώμα$, .εξοπλισμός$, .έτος
Αν .αρ_πλαισίου$="" ή .χρώμα$="" ή .εξοπλισμός$="" τότε {
.αρ_πλαισίου$<=""
Λάθος "Λάθος στοιχεία"
}
Διάβασε .Μοντέλο(0)
}
}
Τμήμα Νέα_Άδεια {
Αν Ταύτιση("Ο") τότε {
.άδειες++
Πίνακας .Άδειες(.άδειες)
Διάβασε .Άδειες(.άδειες-1)
}
}
}
Κλάση Αυτοκίνητο {
Ιδιωτικό:
Μάρκα$, Επιβάτες, Κυβικά, Ισχύς, Ειδος_Μηχανής, Αυτοδυναμία
άλλοείδος$
Δημόσιο:
Τμήμα Αυτοκίνητο {
Αν .Μάρκα$="" τότε {
Αν Ταύτιση("ΓΑΑΑΓΑ") τότε Διάβασε .Μάρκα$, .Επιβάτες, .Κυβικά, .Ισχύς, Λεκτικό$, .Αυτοδυναμία
Επίλεξε με Κεφ$(Λεκτικό$)
Με "DIESEL", "ΠΕΤΡΕΛΑΙΟΥ"
.Ειδος_Μηχανής<=1
Με "GASOLINE","ΒΕΝΖΙΝΑΣ"
.Ειδος_Μηχανής<=2
Με "ELECTRICITY","ΗΛΕΚΤΡΙΚΟ"
.Ειδος_Μηχανής<=3
Αλλιώς
{
.Ειδος_Μηχανής<=99
.άλλοείδος$<=Κεφ$(Λεκτικό$)
}
Τέλος Επιλογής
}
}
Συνάρτηση Μάρκα$ {
=.Μάρκα$
}
Συνάρτηση Επιβάτες {
=.Επιβάτες
}
Συνάρτηση Κυβικά {
=.Κυβικά
}
Συνάρτηση Ισχύς {
=.Ισχύς
}
Συνάρτηση Αυτοδυναμία {
=.Αυτοδυναμία
}
Συνάρτηση ΤύποςΜηχανής$ {
Αν .Ειδος_Μηχανής<>0 τότε {
Επίλεξε Με .Ειδος_Μηχανής
Με 1
="ΠΕΤΡΕΛΑΙΟΥ"
Με 2
="ΒΕΝΖΙΝΑΣ"
Με 3
="ΗΛΕΚΤΡΙΚΟ"
Αλλιώς
=.άλλοείδος$
Τέλος Επιλογής
}
}
}
Κλάση Άδεια {
ονομα$, έτος, μηνας, αφμ$
Τμήμα Άδεια {
Διάβασε .ονομα$, .έτος, .μηνας, .αφμ$
}
}
ΜΟΝΤΕΛΟ1=Αυτοκίνητο("SCODA FELICIA", 5, 1289, 50,"ΒΕΝΖΙΝΑΣ", 400)
ΠΙΝΑΚΑΣ ΕΚΘΕΣΗ(20)=Αυτοκίνητα()
ΕΚΘΕΣΗ(0).Εισαγωγή_Αυτοκινήτου "B123XV54JKL01309","BLUE","LS", 1995, ΜΟΝΤΕΛΟ1
ΕΚΘΕΣΗ(1).Εισαγωγή_Αυτοκινήτου "B124XV14JKL01507","GREEN METALIC","XLS", 1995, ΜΟΝΤΕΛΟ1
ΕΚΘΕΣΗ(0).Νέα_Άδεια Αδεια("ΧΑΛΑΣΤΡΑΣ ΧΑΡΗΣ",1995,10,"045451234")
ΕΚΘΕΣΗ(0).Νέα_Άδεια Αδεια("ΧΑΛΑΣΤΡΑΣ ΠΑΝΑΓΙΩΤΗΣ",2004,3,"055477651")
ΕΚΘΕΣΗ(1).Νέα_Άδεια Αδεια("ΓΑΡΓΑΛΑΣ ΜΑΚΗΣ",1995,8,"049454556")
Αναφορά 2, "Έκθεση Αυτοκινήτων"
Τύπωσε $(4,20),
Για Ι=0 Έως 1 {
Πένα 13 {
Τύπωσε ΜΟΡΦΗ$("Α/Α {0}",Γραφή$(Ι+1,"00"))
}
Για ΕΚΘΕΣΗ(Ι) {
\\ παίρνουμε από ένα αντίγραφο
Μοντελο=.Μοντέλο()
Άδεια=.ΠρώτηΆδεια()
Τελευταία=.ΤελευταίαΆδεια()
Για Μοντέλο {
Τύπωσε "Μάρκα:",..Μάρκα$()
Τύπωσε "Επίπεδο Εξοπλισμου:",.Εξοπλισμός$()
Τύπωσε "Χρώμα:",.Χρώμα$()
Τύπωσε "Έτος Παραγωγής:",Γραφή$(.Έτος(), "#")
Για Άδεια {
Αν ...Όνομα$<>"" Τότε {
Τύπωσε "Πρώτη 'Αδεια:",Μορφη$("{0}/{1}", ...μήνας, ...έτος)
} Αλλιώς {
Τύπωσε "Πρώτη 'Αδεια:","-"
}
}
Για Τελευταία {
Αν ...Όνομα$<>"" Τότε {
Τύπωσε "Τελευταία 'Αδεια:",Μορφη$("{0}/{1}", ...μήνας, ...έτος)
} Αλλιώς {
Τύπωσε "Τελευταία 'Αδεια:","-"
}
}
Τύπωσε "Αρ. Πλαισίου:",.Αρ_Πλαισίου$()
Τύπωσε "Επιβάτες:", Γραφή$(..Επιβάτες(),{# "άτομα"})
Τύπωσε "Κυβικά:", Γραφή$(..Κυβικά(),{#" cc"})
Τύπωσε "Ισχύς:", Γραφή$(..Ισχύς(),{#" hp"})
Τύπωσε "Κινητήρας:", ..ΤύποςΜηχανής$()
Τύπωσε "Αυτοδυναμία:", Γραφή$(..Αυτοδυναμία(),{#" Km"})
}
}
}
Έχουμε μια έκθεση μεταχειρισμένων αυτοκινήτων με είκοσι θέσεις. Θέλουμε ένα τρόπο να καταχωρήσουμε στοιχεία. Ειδικά εδώ μας ενδιαφέρει η αναπαράσταση των δεδομένων.
Έχω έναν πίνακα Έκθεση(20) όπου σε κάθε θέση θέλω να έχω επακριβώς όλες τις πληροφορίες για το τύπο του αμαξιού, τα ιδιαίτερα στοιχεία του, τις άδειες που έχουν εκδοθεί.
Δεν θέλω να αλλάζουν ορισμένα πράγματα όπως το μοντέλο,το χρώμα, αριθμός πλαισίου, έτος παργωγής. Για το μοντέλο θέλω κάποια στοιχεία μαζί με τον τύπο κινητήρα, ισχύ, κυβικά (στα ηλεκτρικά θα βάζω 0).
Στις άδειες θέλω όνομα, μήνα, έτος και αφμ.
Αφού περάσω δυο αμάξια θέλω να δω τα στοιχεία τους, Με ενδιαφέρει η πρώτη και η τελευταία άδεια.
ΥΛΟΠΟΙΗΣΗ
Έχω τρεις κλάσεις.Η Αυτοκίνητα() κρατάει τις άδειες, το μοντέλο, έχει βασικά στοιχεία. Ο πίνακας θα έχει τέτοια αντικείμενα.
Στον ιδιωτικό πίνακα μοντέλο θα καταχωρηθεί το αντικείμενο Αυτοκίνητο. Σε μια άλλη υλοποίηση τα στοιχεία θα έρχονται από αρχείο, εδώ όμως τα περνάμε σε ένα νέο αντικείμενο ΜΟΝΤΕΛΟ1
Αφού η έκθεση έχει αντικείμενα Αυτοκίνητα καλούμε όσες φορές χρειάζεται την μέθοδο εισαγωγή_αυτοκινήτου (είναι τμήμα της κλάσης) και σημειώνουμε αριθμό πλαισίου, χρώμα, επίπεδο εξοπλισμού και το μοντέλο. Η τέταρτη παράμετρος είναι αντικείμενο.
Έπειτα περνάω νέα άδεια με την μέθοδο Νέα_Άδεια με όνομα, έτος, μήνας, και ΑΦΜ.
Δείτε τι λείπει. Δεν έχω βάλει αριθμό κυκλοφορίας και δεν έχω βάλει αριθμό αδείας. Αυτά τα αφήνω για τον αναγνώστη!
Όπου χρειάζεται χρησιμοποιώ προσωρινά αντικείμενα. Π.χ. η Τελευταία παίρνει ένα αντίγραφο της τελευταίας άδειας μέσα σε μια ΓΙΑ αντικείμενο {} που σημαίνει ότι μετά το πέρας της ΓΙΑ θα διαγραφεί. Οι τελείες φθάνουν τις τρεις όταν διαβάζω τα στοιχεία της άδειας. Εκεί ότι έχει μια τελεία είναι ό,τι δημόσιο του στοιχείου του πίνακα Έκθεση, ενώ με τις δυο τελείες ό,τι δημόσιο από το προσωρινό αντικείμενο Μοντέλο. Χρησιμοποιώ προσωρινά αντικείμενα για ανάγνωση μόνο! Δεν μπορώ να αλλάξω το μοντέλο, ούτε τα στοιχεία άδειας.
Κλάση Αυτοκίνητα {
Ιδιωτικό:
αρ_πλαισίου$, χρώμα$, εξοπλισμός$, έτος
άδειες
Πίνακας Άδειες()
Πίνακας Μοντέλο(1)
Δημόσιο:
Συνάρτηση έτος {
=.έτος
}
Συνάρτηση αρ_πλαισίου$ {
=.αρ_πλαισίου$
}
Συνάρτηση χρώμα$ {
=.χρώμα$
}
Συνάρτηση εξοπλισμός$ {
=.εξοπλισμός$
}
Συνάρτηση Μοντέλο {
\\ ο πίνακας προτιμάται από το διερμηνευτή
=.Μοντέλο(0)
}
Συνάρτηση ΠρώτηΆδεια {
Αν .άδειες>0 τότε {
=.άδειες(0)
} Αλλιώς {
ομάδα Α { ονομα$ }
=Α
}
}
Συνάρτηση ΤελευταίαΆδεια {
Αν .άδειες>0 τότε {
=.άδειες(.άδειες-1)
} Αλλιώς {
ομάδα Α { ονομα$ }
=Α
}
}
Τμήμα Εισαγωγή_Αυτοκινήτου {
Αν .αρ_πλαισίου$="" τότε {
Διάβασε .αρ_πλαισίου$, .χρώμα$, .εξοπλισμός$, .έτος
Αν .αρ_πλαισίου$="" ή .χρώμα$="" ή .εξοπλισμός$="" τότε {
.αρ_πλαισίου$<=""
Λάθος "Λάθος στοιχεία"
}
Διάβασε .Μοντέλο(0)
}
}
Τμήμα Νέα_Άδεια {
Αν Ταύτιση("Ο") τότε {
.άδειες++
Πίνακας .Άδειες(.άδειες)
Διάβασε .Άδειες(.άδειες-1)
}
}
}
Κλάση Αυτοκίνητο {
Ιδιωτικό:
Μάρκα$, Επιβάτες, Κυβικά, Ισχύς, Ειδος_Μηχανής, Αυτοδυναμία
άλλοείδος$
Δημόσιο:
Τμήμα Αυτοκίνητο {
Αν .Μάρκα$="" τότε {
Αν Ταύτιση("ΓΑΑΑΓΑ") τότε Διάβασε .Μάρκα$, .Επιβάτες, .Κυβικά, .Ισχύς, Λεκτικό$, .Αυτοδυναμία
Επίλεξε με Κεφ$(Λεκτικό$)
Με "DIESEL", "ΠΕΤΡΕΛΑΙΟΥ"
.Ειδος_Μηχανής<=1
Με "GASOLINE","ΒΕΝΖΙΝΑΣ"
.Ειδος_Μηχανής<=2
Με "ELECTRICITY","ΗΛΕΚΤΡΙΚΟ"
.Ειδος_Μηχανής<=3
Αλλιώς
{
.Ειδος_Μηχανής<=99
.άλλοείδος$<=Κεφ$(Λεκτικό$)
}
Τέλος Επιλογής
}
}
Συνάρτηση Μάρκα$ {
=.Μάρκα$
}
Συνάρτηση Επιβάτες {
=.Επιβάτες
}
Συνάρτηση Κυβικά {
=.Κυβικά
}
Συνάρτηση Ισχύς {
=.Ισχύς
}
Συνάρτηση Αυτοδυναμία {
=.Αυτοδυναμία
}
Συνάρτηση ΤύποςΜηχανής$ {
Αν .Ειδος_Μηχανής<>0 τότε {
Επίλεξε Με .Ειδος_Μηχανής
Με 1
="ΠΕΤΡΕΛΑΙΟΥ"
Με 2
="ΒΕΝΖΙΝΑΣ"
Με 3
="ΗΛΕΚΤΡΙΚΟ"
Αλλιώς
=.άλλοείδος$
Τέλος Επιλογής
}
}
}
Κλάση Άδεια {
ονομα$, έτος, μηνας, αφμ$
Τμήμα Άδεια {
Διάβασε .ονομα$, .έτος, .μηνας, .αφμ$
}
}
ΜΟΝΤΕΛΟ1=Αυτοκίνητο("SCODA FELICIA", 5, 1289, 50,"ΒΕΝΖΙΝΑΣ", 400)
ΠΙΝΑΚΑΣ ΕΚΘΕΣΗ(20)=Αυτοκίνητα()
ΕΚΘΕΣΗ(0).Εισαγωγή_Αυτοκινήτου "B123XV54JKL01309","BLUE","LS", 1995, ΜΟΝΤΕΛΟ1
ΕΚΘΕΣΗ(1).Εισαγωγή_Αυτοκινήτου "B124XV14JKL01507","GREEN METALIC","XLS", 1995, ΜΟΝΤΕΛΟ1
ΕΚΘΕΣΗ(0).Νέα_Άδεια Αδεια("ΧΑΛΑΣΤΡΑΣ ΧΑΡΗΣ",1995,10,"045451234")
ΕΚΘΕΣΗ(0).Νέα_Άδεια Αδεια("ΧΑΛΑΣΤΡΑΣ ΠΑΝΑΓΙΩΤΗΣ",2004,3,"055477651")
ΕΚΘΕΣΗ(1).Νέα_Άδεια Αδεια("ΓΑΡΓΑΛΑΣ ΜΑΚΗΣ",1995,8,"049454556")
Αναφορά 2, "Έκθεση Αυτοκινήτων"
Τύπωσε $(4,20),
Για Ι=0 Έως 1 {
Πένα 13 {
Τύπωσε ΜΟΡΦΗ$("Α/Α {0}",Γραφή$(Ι+1,"00"))
}
Για ΕΚΘΕΣΗ(Ι) {
\\ παίρνουμε από ένα αντίγραφο
Μοντελο=.Μοντέλο()
Άδεια=.ΠρώτηΆδεια()
Τελευταία=.ΤελευταίαΆδεια()
Για Μοντέλο {
Τύπωσε "Μάρκα:",..Μάρκα$()
Τύπωσε "Επίπεδο Εξοπλισμου:",.Εξοπλισμός$()
Τύπωσε "Χρώμα:",.Χρώμα$()
Τύπωσε "Έτος Παραγωγής:",Γραφή$(.Έτος(), "#")
Για Άδεια {
Αν ...Όνομα$<>"" Τότε {
Τύπωσε "Πρώτη 'Αδεια:",Μορφη$("{0}/{1}", ...μήνας, ...έτος)
} Αλλιώς {
Τύπωσε "Πρώτη 'Αδεια:","-"
}
}
Για Τελευταία {
Αν ...Όνομα$<>"" Τότε {
Τύπωσε "Τελευταία 'Αδεια:",Μορφη$("{0}/{1}", ...μήνας, ...έτος)
} Αλλιώς {
Τύπωσε "Τελευταία 'Αδεια:","-"
}
}
Τύπωσε "Αρ. Πλαισίου:",.Αρ_Πλαισίου$()
Τύπωσε "Επιβάτες:", Γραφή$(..Επιβάτες(),{# "άτομα"})
Τύπωσε "Κυβικά:", Γραφή$(..Κυβικά(),{#" cc"})
Τύπωσε "Ισχύς:", Γραφή$(..Ισχύς(),{#" hp"})
Τύπωσε "Κινητήρας:", ..ΤύποςΜηχανής$()
Τύπωσε "Αυτοδυναμία:", Γραφή$(..Αυτοδυναμία(),{#" Km"})
}
}
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.