Οι δομές στη γλώσσα προγραμματισμού C-Sharp: ορισμός και αναγκαιότητα
Οι δομές στη γλώσσα προγραμματισμού C-Sharp αποτελoύν σύνθετους τύπους δεδομένων, οι οποίοι δημιουργούνται λαμβάνοντας υπ’ όψιν τις ανάγκες του εκάστοτε προγράμματος. Πρόκειται για έναν ορισμό νέου τύπου δεδομένων, ο οποίος μπορεί να περιλαμβάνει δεδομένα των βασικών τύπων bool, int, char , καθώς και δεδομένα τύπου δομής.
Ξεκινώντας από ένα παράδειγμα προγράμματος όπου καλούμαστε να αποθηκεύσουμε/ χρησιμοποιήσουμε δεδομένα ακεραίου τύπου, όπως το πλήθος των μαθητών ενός τμήματος, ο τύπος δεδομένων που αξιοποιούμε για τη συγκεκριμένη μεταβλητή είναι ο τύπος int. Έτσι για τη δήλωση και αρχικοποίηση της μεταβλητής, η σύνταξη θα ήταν η ακόλουθη:
int classStudents = 12;
Στο ίδιο παράδειγμα έστω ότι θέλουμε να κρατήσουμε περισσότερα στοιχεία για το ίδιο τμήμα, όπως τον τύπο του τμήματος (έστω ‘A’, ‘B’ για έως 5μελές ή έως 10μελές αντίστοιχα), το έτος φοίτησης των μαθητών του, το σύνολο καθηγητών που διδάσκουν σε αυτό, καθώς και το πλήθος των μαθητών. Για τη δήλωση και αρχικοποίηση των μεταβλητών, η σύνταξη θα ήταν η ακόλουθη:
char classType = 'A' ; int classYear = 4 ; int classTeachers = 3 ; int classStudents = 12 ;
Αμέσως βλέπουμε ότι χρειαζόμαστε τέσσερις μεταβλητές για να αποθηκεύσουμε τέσσερα διαφορετικά στοιχεία για το ίδιο τμήμα.
Τι θα γινόταν όμως εάν καλούμασταν να αποθηκεύσουμε και να χρησιμοποιήσουμε στοιχεία για δέκα (ή όσα φανταζόμαστε) τμήματα; Θα χρειαζόμασταν τέσσερις μεταβλητές για κάθε τμήμα, η καθεμία με δικό της όνομα για να μην υπάρχουν conflicts στον κώδικα , δηλαδη 4*10= 40 διαφορετικές μεταβλητές! Ας αναλογιστούμε το πόσο δύσκολο θα ήταν να τις θυμόμαστε και να τις ξεχωρίζουμε προκειμένου να τις επεξεργαστούμε, λόγου χάριν να αθροίσουμε το σύνολο των μαθητών όλων των τμημάτων ή να προσθέσουμε ακόμα ένα μαθητή σε συγκεκριμένο τμήμα…
Παρατηρούμε ότι οι βασικοί τύποι που παρέχονται από μία γλώσσα προγραμματισμού δεν επαρκούν για την περιγραφή και καταγραφή στοιχείων μίας οντότητας. Γεννάται επομένως η ανάγκη για αποθήκευση δεδομένων, τα οποία χρειάζεται να συμπεριληφθούν σε ένα κομμάτι μνήμης και να αξιοποιηθούν ως χαρακτηριστικά μίας ενιαίας οντότητας. Ένα διαφορετικό, εξίσου σημαντικό, παράδειγμα τέτοιας αναγκαιότητας είναι η αποθήκευση και χρήση των διαστάσεων ενός γεωμετρικού σχήματος (ορθογώνιο, τρίγωνο, κυκλος κ.ά.).
Οι δομές στη γλώσσα προγραμματισμού C-Sharp: λειτουργία και ευχρηστία
Η δομή αποθηκεύει τα δεδομένα μέσα στο τύπο της. Τα δεδομένα δεν διατίθενται ως χωριστά τμήματα στη διαχείριση μνήμης του συστήματος, αλλά θεωρούνται και αξιοποιούνται ως ένα. Κάθε πρόγραμμα χρησιμοποιεί απλές δομές. Όλες οι μεταβλητές (τύπου int, bool, char) είναι ουσιαστικά δομές που περιέχουν τον τύπο της μεταβλητής και την τιμή της.
Οι δομές στη γλώσσα προγραμματισμού C-Sharp ενδείκνυνται για την καταγραφή στοιχείων (records) για εγγραφές μελών, πελατών, αρχείων σχολείων, βιβλιοθήκης, καταστήματος και άλλων, όπου σε κάθε στοιχείο αναλογεί πλειάδα χαρακτηριστικών διαφόρων τύπων.
Σύνταξη κώδικα: δήλωση, αρχικοποίηση και χρήση
Για τη δημιουργία δομής απαιτείται η χρήση της δεσμευμένης λέξης “struct”. Για τη δήλωση μίας οντότητας τύπου Classroom (τμήμα), η οποία θα περιέχει τα στοιχεία που προαναφέρθηκαν, προκύπτει ο κώδικας που ακολουθεί:
struct Classroom { public char classType; public int classYear; public int classTeachers; public int classStudents; };
Οι δομές στη γλώσσα προγραμματισμού C-Sharp: Ένα παράδειγμα
Το ακόλουθο παράδειγμα επιδεικνύει με σαφήνεια της χρήση της δομής που μόλις συντάξαμε:
struct Classroom { public char classType; public int classYear; public int classTeachers; public int classStudents; }; public class testStructure { public static void Main(string[] args) { Classroom class1; /* Δήλωση της οντότητας class1 ως τύπου Classroom */ Classroom class2; /* Δήλωση της οντότητας class2 ως τύπου Classroom */ /* class1 αρχικοποίηση */ class1.classType = 'B'; class1.classYear = 2; class1.classTeachers = 3; class1.classStudents = 9; /* class2 αρχικοποίηση */ class2.classType = 'A'; class2.classYear = 4; class2.classTeachers = 2; class2.classStudents = 5; /* εμφάνιση χαρακτηριστικών για class1 */ Console.WriteLine("Class 1: classType = {0}", class1.classType); Console.WriteLine("Class 1: classYear = {0}", class1.classYear); Console.WriteLine("Class 1: classTeachers = {0}", class1.classTeachers); Console.WriteLine("Class 1: classStudents = {0}", class1.classStudents); Console.WriteLine(); /* εμφάνιση χαρακτηριστικών για class2 */ Console.WriteLine("Class 2: classType = {0}", class2.classType); Console.WriteLine("Class 2: classYear = {0}", class2.classYear); Console.WriteLine("Class 1: classTeachers = {0}", class2.classTeachers); Console.WriteLine("Class 2: classStudents = {0}", class2.classStudents); Console.ReadKey(); } }
Παρατηρούμε ότι για να αναφερθούμε σε ένα συγκεκριμένο χαρακτηριστικό μίας οντότητας τύπου Classroom που δημιουργήσαμε, χρειάζεται να συντάξουμε το όνομα της οντότητας μαζί με τον τελεστή “.”, τον οποίο ακολουθεί το επιθυμητό χαρακτηριστικό. Για παράδειγμα η εντολή
class2.classYear = 4;
εκχωρεί στο χαρακτηριστικό classYear της οντότητας class2 την τιμή 4.
[ms_alert icon=”fa-star” box_shadow=”no” dismissable=”no” class=”” id=””]
Για να είναι αυτό δυνατό, θα πρέπει κατά τη δήλωση της δομής – και πριν τη σύνταξη του χαρακτηριστικού- να έχει προηγηθεί δεσμευμένη λέξη εμβέλειας που επιτρέπει την κλήση του από το κυρίως πρόγραμμα. Στον κώδικά μας έχει χρησιμοποιηθεί αντίστοιχα η λέξη public.[/ms_alert]
Το αποτέλεσμα που θα έχουμε στην οθόνη από τον παραπάνω κώδικα είναι το εξής:
Class 1: classType = B
Class 1: classYear = 2
Class 1: classTeachers = 3
Class 1: classStudents = 9
Class 2: classType = A
Class 2: classYear = 4
Class 2: classTeachers = 2
Class 2: classStudents = 5