Εισαγωγή στη C# και το.net 4.0

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Εισαγωγή στη C# και το.net 4.0"

Transcript

1 Εισαγωγή στη C# και το.net 4.0 Σημειώσεις Σεμιναρίου Επιμέλεια: Βασίλης Κόλιας Ενότητα 1 Θεωρητικό Υπόβαθρο Το.NET Framework και η C# To Visual Studio 1.0.0

2 Πίνακας Περιεχομένων Πίνακας Περιεχομένων Εισαγωγή Γλώσσες και γλώσσες προγραμματισμού Κύκλος ανάπτυξης λογισμικού Πρότυπα Προγραμματισμού Προστακτικός Προγραμματισμός Συναρτησιακός Προγραμματισμός Λογικός Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Το.NET framework και η C# Λίγη Ιστορία Χαρακτηριστικά του.net Framework Αρχιτεκτονική του.net Framework Εκδόσεις του.νετ Framework Η γλώσσα προγραμματισμού C# Χαρακτηριστικά της γλώσσας C# Ιστορικό εκδόσεων της C# Το πρώτο πρόγραμμα σε C# Μεταγλώττιση και εκτέλεση ενός προγράμματος Microsoft Visual Studio Εκδόσεις του Visual Studio Visual Studio Express Visual Studio LightSwitch Visual Studio Professional Visual Studio Premium Visual Studio Ultimate Εγκατάσταση Το περιβάλλον του Visual C# 2010 Express Ο Solution Explorer Τα παράθυρα εργαλείων Ο επεξεργαστής κειμένου

3 1. Εισαγωγή Η C# είναι μια σχετικά καινούργια γλώσσα, ενώ έχει γίνει μια από τις πιο διαδεδομένες αντικειμενοστρεφείς γλώσσες προγραμματισμού. Πριν ξεκινήσουμε ωστόσο την περιγραφή του.net Framework και την ανάπτυξη εφαρμογών με τη γλώσσα προγραμματισμού C#, θα αναφερθούμε σύντομα στο θεωρητικό υπόβαθρο που είναι χρήσιμο κανείς να γνωρίζει πριν προχωρήσει. Το κεφάλαιο αυτό αποτελεί μια συντετμημένη παρουσίαση των θεωρητικών (παράγραφοι 1.1, 1.3) αλλά και πρακτικών (παράγραφος 1.2) εννοιών που είναι πολύ πιθανό να συναντήσει ένας προγραμματιστής τόσο κατά την παρακολούθηση του σεμιναρίου αλλά κυρίως στην μετέπειτα πορεία του στο χώρο Γλώσσες και γλώσσες προγραμματισμού Η C# είναι μια γλώσσα προγραμματισμού. Ξεκινάμε αναλύοντας αυτούς τους δύο όρους. Όταν αναφερόμαστε στη γλώσσα (language) σαν γενική έννοια μπορεί να εννοούμε α) τη νοητική ικανότητα των ανθρώπων να εκθέτουν γλωσσολογική συμπεριφορά β) ένα αυστηρό σύστημα συμβόλων που υπακούουν σε γραμματικούς και συντακτικούς κανόνες για την επικοινωνία εννοιών και γ) ένα σύστημα επικοινωνίας για την παραγωγή συνεργατικού έργου. Τα κυριότερα μέρη μιας γλώσσας είναι α) το λεξιλόγιο συμβόλων (λέξεων) που σχετίζονται με μια έννοια και β) η γραμματική που είναι το σύνολο των κανόνων μορφοποίησης και τοποθέτησης (συντακτικό) των λέξεων μέσα σε προτάσεις. Οι γλώσσες διακρίνονται σε φυσικές γλώσσες, όπου ανήκουν οι ανθρώπινες γλώσσες και σε τεχνητές γλώσσες των οποίων το λεξικό και η γραμματική έχουν συνειδητά δημιουργηθεί από ένα άτομο ή σύνολο ατόμων για διευκόλυνση της επικοινωνίας ιδεών ή τη δημιουργία τέχνης. Στη δεύτερη κατηγορία ανήκουν οι τυπικές γλώσσες (formal languages), των οποίων το λεξικό και η γραμματική είναι καθορισμένα από αυστηρούς κανόνες. Η μελέτη των δομικών προτύπων τέτοιων γλωσσών γίνεται στην επιστήμη των υπολογιστών, ενώ χρησιμοποιούνται και στα Μαθηματικά και τη Λογική. Οι γλώσσες προγραμματισμού είναι τυπικές γλώσσες εμπλουτισμένες με σημασιολογία (semantics) που χρησιμοποιούνται για τον έλεγχο της συμπεριφοράς των ηλεκτρονικών υπολογιστών για την πραγματοποίηση συγκεκριμένων εργασιών. Όλες οι γλώσσες προγραμματισμού έχουν κάποια θεμελιώδη δομικά στοιχεία για την περιγραφή των δεδομένων και των διεργασιών ή των μετασχηματισμών που εφαρμόζονται σε αυτά και ορίζονται χρησιμοποιώντας συντακτικούς και σημασιολογικούς κανόνες για τον προσδιορισμό της δομής και της σημασίας τους αντίστοιχα. Οι κανόνες αυτοί περιγράφονται σε μια προδιαγραφή, γνωστή ως προδιαγραφή γλώσσας προγραμματισμού (programming language specification) και συνήθως είναι διαθέσιμη στο κοινό. Η προδιαγραφή της C# είναι διαθέσιμη από το Microsoft Developers Network (MSDN). Τα κυριότερα δομικά στοιχεία των γλωσσών προγραμματισμού είναι το συντακτικό (syntax), η σημασιολογία (semantics) και η κύρια βιβλιοθήκη τους (core library). Το συντακτικό μιας γλώσσας περιγράφει τους πιθανούς συνδυασμούς των συμβόλων της γλώσσας που στοιχειοθετούν ορθές φράσεις σε ένα πρόγραμμα. Το νόημα ενός συγκεκριμένου συντακτικώς ορθού συνδυασμού λέξεων καθορίζεται στη σημασιολογία. Για παράδειγμα τα σύμβολα «Hello + World» να σημαίνουν τη συνένωση των λέξεων Hello World και όχι την πρόσθεση δυο μεταβλητών. Η κύρια βιβλιοθήκη μιας γλώσσας, που συνήθως αποτελεί και μέρος της προδιαγραφής της, είναι ένα σύνολο κώδικα για την τέλεση βασικών λειτουργιών όπως το διάβασμα και το γράψιμο δεδομένων, ή παρέχει την υλοποίηση βασικών αλγορίθμων και δομών δεδομένων. Οι περισσότερες γλώσσες προγραμματισμού είναι καθαρά κειμενικές (textual): χρησιμοποιούν σειρές κειμένου που περιλαμβάνουν λέξεις, αριθμούς και σημεία στίξης. Υπάρχουν ωστόσο μερικές γλώσσες που είναι από στη φύση τους πιο οπτικές (visual programming languages), αφού χρησιμοποιούν εικονικές σχέσεις μεταξύ συμβόλων για να καθορί 3

4 σουν ένα πρόγραμμα. Παράδειγμα γραφικής γλώσσας είναι η γλώσσα G, που χρησιμοποιείται στην πλατφόρμα LabVIEW. Οι γλώσσες προγραμματισμού δεν είναι εύκολο να κατηγοριοποιηθούν πρωταρχικά, καθώς συνδυάζουν τα στοιχεία τους με νέες ιδέες, ορισμένες εκ των οποίων μπορεί να μην είναι ευδιάκριτες στις φαινομενικά όμοιές τους. Διακρίσεις των γλωσσών προγραμματισμού ωστόσο μπορούν να γίνουν ανάλογα με το προγραμματιστικό πρότυπο (παράγραφος 1.3) που ακολουθούν και ενδεχομένως το πεδίο χρήσης για το οποίο προορίζονται. Επίσης οι γλώσσες προγραμματισμού χωρίζονται σε επίπεδα. Στο χαμηλότερο βρίσκεται η μοναδική γλώσσα την οποία «κατανοεί» ένας επεξεργαστής: ένα σύστημα εντολών που εκτελούνται κατευθείαν από αυτόν. Αυτό είναι το χαμηλότερο επίπεδο γλώσσας στο οποίο μπορεί να γραφτεί ένα πρόγραμμα και είναι γνωστό ως γλώσσα μηχανής. Το επίπεδο των υπόλοιπων γλωσσών εξαρτάται από το πόσο μοιάζουν με τον κώδικα μηχανής. Τα προγράμματα σε γλώσσες χαμηλού επιπέδου έχουν το πλεονέκτημα ότι μπορούν να εκμεταλλευτούν όλα τα χαρακτηριστικά που μπορεί να έχει η αρχιτεκτονική του συγκεκριμένου επεξεργαστή όπου τρέχουν. Κατά συνέπεια, μπορεί να είναι πολύ αποδοτικά, α φού χρησιμοποιούν τον επεξεργαστή με το βέλτιστο τρόπο. Η δημιουργία τέτοιων προγραμμάτων απαιτεί αρκετό χρόνο τόσο για την εκμάθηση του (σχετικά δύσκολου) συντακτικού τους όσο και για την ανάπτυξή τους, αλλά και πλήρη κατανόηση της λειτουργίας του ε πεξεργαστή. Για το λόγο αυτό ο προγραμματισμός σε χαμηλό επίπεδο γίνεται για πολύ μικρά προγράμματα ή για τμήματα κώδικα που επιτελούν πολύ σημαντικές εργασίες και είναι απαραίτητο να τρέχουν όσο αποδοτικότερα γίνεται. Οι γλώσσες υψηλού επιπέδου αναπαριστούν αφηρημένα τις λεπτομέρειες του υπολογιστή, χρησιμοποιούν εκτενώς φυσική γλώσσα, είναι ευκολότερες στη χρήση και συνεπώς επιτρέπουν τη γρήγορη δημιουργία μεγάλων προγραμμάτων. Το τελικό πρόγραμμα μπορεί να μην είναι όσο αποδοτικό όσο το αντίστοιχο σε γλώσσα χαμηλού επιπέδου, ωστόσο το κέρδος στο χρόνο ανάπτυξης υπερκεράζει την απόδοση των τελικών προγραμμάτων. Υπάρχουν δύο κύρια μοντέλα εκτέλεσης των υψηλών γλωσσών προγραμματισμού: α) οι διερμηνευμένες γλώσσες (interpreted languages) οι οποίες διαβάζονται από ένα ειδικό πρόγραμμα που καλείται διερμηνευτής (interpreter), μετατρέπονται σε γλώσσα μηχανής από αυτό και εκτελούνται άμεσα χωρίς φάση μεταγλώττισης (π.χ. η PHP και η Python) και β) οι μεταγλωττισμένες γλώσσες (compiled languages) που πριν την εκτέλεσή τους μετατρέπονται σε μια εκτελέσιμη μορφή: είτε κώδικα μηχανής (π.χ. η C και η C++) είτε ενδιάμεσης μορφής που χρειάζεται να διερμηνευτεί για να εκτελεστεί (π.χ. η Java και η C#). Υπάρχουν επίσης και συνδυασμοί των παραπάνω μοντέλων όπως της Java, που συνδυάζουν τη μεταγλώττιση με τη διερμηνεία, χρησιμοποιώντας ταυτόχρονα και τη μέθοδο just in time compilation για τη βελτίωση της ταχύτητας της διερμηνείας. Σημαντικές γλώσσες στον προγραμματισμό είναι τέλος είναι και οι γλώσσες σήμανσης (markup languages). Μια γλώσσα σήμανσης είναι ένα μοντέρνο σύστημα προσθήκης σημάνσεων (markup) σε κείμενο με τέτοιον τρόπο ώστε να είναι συντακτικά ευδιάκριτες από το κείμενο στο οποίο προστίθενται. Οι γλώσσες σήμανσης δεν είναι γλώσσες προγραμματισμού ωστόσο χρησιμοποιούνται ευρέως σε μια μεγάλη γκάμα εφαρμογών εξαιτίας της περιγραφικής δύναμής τους. Οι σημάνσεις που μπορούν να προστεθούν σε ένα κείμενο, μπορούν να είναι α) παρουσιαστικές (presentational markup) δηλαδή να χρησιμοποιούνται για να προσδιορίσουν το παρουσιαστικό του κειμένου στο οποίο αναφέρονται (π.χ. η HTML), β) διαδικαστικές (procedural markup) για να παρέχουν οδηγίες σε άλλα προγράμματα για το πώς να επεξεργάζονται το κείμενο που περιέχουν (π.χ. η ΤΕΧ) και γ) περιγραφικές (descriptive markup) που απλώς παρέχουν μια ετικέτα στο κείμενο στο οποίο αναφέρονται (π.χ. η XML) Κύκλος ανάπτυξης λογισμικού Ένας απλός ορισμός που αποδίδει ικανοποιητικά την έννοια του προγραμματισμού υπολογιστών (computer programming) είναι η ικανότητα της επικοινωνίας του προγραμματιστή με τον υπολογιστή σε μια αμοιβαίως αντιληπτή γλώσσα προγραμματισμού για την πραγματοποίηση χρήσιμων εργασιών. Ο προγραμματισμός ωστόσο αποτελεί μόνο ένα κομμάτι της ανάπτυξης λογισμικού. Κατά συνέπεια ένας προγραμματιστής είναι πιθανό να ε μπλακεί σε δραστηριότητες πέραν της γραφής κώδικα, ειδικά αν συμμετέχει σε ολιγομελείς 4

5 ομάδες ανάπτυξης. Πέραν τούτου, είναι γενικά χρήσιμο να γνωρίζει τα στάδια που ακολουθούνται στην ανάπτυξη έργων λογισμικού. Η διαδικασία της ανάπτυξης λογισμικού λοιπόν, περιλαμβάνει τις διαδικασίες της ανάλυσης απαιτήσεων, του σχεδιασμού, της γραφής, της δοκιμής, της αποσφαλμάτωσης και της διατήρησης του πηγαίου κώδικα των προγραμμάτων γραμμένων σε μια γλώσσα (ή και περισσότερες). Ένας προγραμματιστής είναι καλό να κατανοεί τις μεθόδους και τις πρακτικές που εφαρμόζονται σε κάθε μια από τις παραπάνω διαδικασίες, δίνοντας έμφαση κατ εξοχήν στη γραφή κώδικα. Ωστόσο ο προγραμματισμός δεν περιορίζεται μόνο στις παραπάνω διαδικασίες: συχνά απαιτείται και η εξειδίκευση σε πολλαπλές διαφορετικές πρακτικές ή θεωρητικές έννοιες, όπως οι αλγόριθμοι και η λογική ή ακόμα και από άλλα επιστημονικά πεδία όπως η φυσική. Ανάλυση απαιτήσεων Η επιτυχία οποιουδήποτε έργου λογισμικού εξαρτάται σε μεγάλο βαθμό από τον αρχικό εντοπισμό των απαιτήσεων του υπό ανάπτυξη συστήματος τόσο μέσα από τη λήψη των ζητουμένων των πελατών, όσο και από την ανάδειξη των διαφόρων υπο προβλημάτων που μπορεί να προκύψουν. Το πρώτο βήμα στην ανάπτυξη ενός έργου λογισμικού είναι η ανάλυση απαιτήσεων (requirement analysis). Το αποτέλεσμα του πρώτου αυτού βήματος είναι προδιαγραφές τεχνολογικές, επιχειρηματικές, λειτουργικές, κόστους και χρονικής διάρκειας. Σχεδιασμός λογισμικού Η διαδικασία του σχεδιασμού λογισμικού (software design) είναι το επόμενο βήμα κατά την ανάπτυξη λογισμικού οποιασδήποτε κλίμακας και περιλαμβάνει τη χάραξη του γενικού σχεδίου επίλυσης του προβλήματος το οποίο το λογισμικό καλείται να επιλύσει. Η διαδικασία του σχεδιασμού λαμβάνει σαν είσοδο α) τα αποτελέσματα της ανάλυσης λογισμικού που γενικά είναι τα «ευκολότερα» υπο προβλήματα στα οποία μπορεί να διαιρεθεί το αρχικό πρόβλημα προς επίλυση και β) τις δυνατότητες του περιβάλλοντος που θα φιλοξενήσει το λογισμικό (π.χ. το λειτουργικό σύστημα ή η πλατφόρμα εκτέλεσης). Το αποτέλεσμα του σχεδιασμού μπορεί να είναι απλώς ένα διάγραμμα ροής (flow chart), ένα κείμενο που περιγράφει μια ακολουθία γεγονότων ή ένα μοντέλο σε κάποια γλώσσα μοντελοποίησης (modeling language) όπως η UML (Unified Modeling Language) ή η BPMN (Business Process Modeling Notation) μαζί φυσικά με την απαραίτητη τεκμηρίωση (documentation). Γραφή κώδικα Η διαδικασία της γραφής κώδικα (coding) ή κωδικογράφησης, είναι η μετατροπή του σχεδιασμού και γενικότερα της λογικής του λογισμικού σε κώδικα μιας γλώσσας προγραμματισμού. Η γραφή κώδικα απαιτεί πλήρη γνώση της χρησιμοποιούμενης γλώσσας προγραμματισμού (συντακτικό, σημασιολογία, κύριες βιβλιοθήκες) καθώς ελλιπής γνώση μπορεί να οδηγήσει σε άσκοπο γράψιμο κώδικα που υπάρχει ήδη ή την επιλογή λανθασμένων μονοπατιών υλοποίησης. Σε μεγάλα έργα προγραμματισμού υιοθετούνται συχνά ένα σύνολο προτύπων, κατευθύνσεων ή συμβάσεων γραφής με σκοπό τη βελτίωση της ποιότητας, της αναγνωσιμότητας και της ευκολίας της συντήρησης του κώδικα. Τα πρότυπα αυτά περιλαμβάνουν κανόνες ονομασίας και οργάνωσης των αρχείων ή των λέξεων στον κώδικα, τη δόμηση του κώδικα σε μπλοκ με εσοχές για να τονίζουν το επίπεδο ένθεσης του ή τη μορφοποίηση των διαφόρων εντολών. Τα πρότυπα μπορεί να διαφέρουν από γλώσσα σε γλώσσα και τα πιο διαδεδομένα είναι τα πρότυπα κωδικογράφησης GNU, το στυλ του πυρήνα BSD και οι συμβάσεις κώδικα στη Java. Αποσφαλμάτωση Η γραφή κώδικα είναι μια ανθρώπινη διαδικασία και κατά συνέπεια είναι υποκείμενη σε σφάλματα που μπορεί να οφείλονται σε παραλήψεις ή απρόβλεπτους παράγοντες. Η αποσφαλμάτωση (debugging) είναι η μεθοδική διαδικασία της εύρεσης και του περιορισμού των σφαλμάτων (bugs) και των ελαττωμάτων στον κώδικα ενός προγράμματος. Γενικά αποτελείται από τα βήματα της αναπαραγωγής του προβλήματος, της απομόνωσης του σημείου που εμφανίζεται το σφάλμα, της αναγνώρισης της αιτίας που το προκαλεί, της διόρθωσης του σφάλματος και της επιβεβαίωσης της απαλοιφής του προβλήματος. Η αποσφαλμάτωση 5

6 είναι μια αρκετά επίπονη διαδικασία και για το λόγο αυτό αναπτύχθηκαν ειδικά προγράμματα για το σκοπό αυτό: οι debuggers (αποσφαλματωτές). Έλεγχος λογισμικού Στη διαδικασία του ελέγχου λογισμικού (software testing) βεβαιώνεται ότι το αποτέλεσμα της συγγραφής πληροί τις προδιαγραφές όπως αυτές ορίστηκαν στην ανάλυση και το σχεδιασμό, ότι δουλεύει όπως αναμενόταν και ότι μπορεί να εγκατασταθεί για εφαρμογή με τα ίδια χαρακτηριστικά. Υπάρχουν διάφορες μέθοδοι ελέγχου που μπορούν να γίνουν σε διαφορετικά επίπεδα, ανάλογα με την πρόσβαση στο κάθε τμήμα κώδικα. Ο έλεγχος μπορεί να φτάσει στα θεμελιώδη τμήματα του κώδικα ή να αντιμετωπίσει την εφαρμογή στην ολότητά της. Ο έλεγχος μπορεί να πραγματοποιείται και για μεμονωμένα τμήματα κώδικα κατά την ανάπτυξη του αλλά παραδοσιακά γίνεται μετά την ολοκλήρωση της ανάπτυξης του. Συντήρηση κώδικα Ακόμα και μετά την αποσφαλμάτωση και τον έλεγχο του λογισμικού μπορούν να ε ντοπιστούν προβλήματα στο σχεδιασμό ή την υλοποίηση ή ακόμα και να προστεθούν νέες απαιτήσεις. Επειδή η αλλαγή είναι έμφυτη στην ανάπτυξη λογισμικού, η ανάγκη του ελέγχου της οργάνωσης και της εξέλιξης της ανάπτυξης του κώδικα είναι επιτακτική, ιδιαίτερα για τα έργα μεγάλης κλίμακας. Η διαδικασία της συντήρησης κώδικα (code maintenance) είναι ουσιαστικά ο έλεγχος εκδόσεων (revision control) του πηγαίου κώδικα και περιλαμβάνει τον έλεγχο της εξέλιξης του μέσα στο χρόνο, κρατώντας ένα χρονικό για το σκεπτικό πίσω από τις υφιστάμενες αλλαγές. Υπάρχει μια πληθώρα συστημάτων ελέγχου εκδόσεων (revision control systems) όπως τα CVS και Subversion (SVN) που χρησιμοποιούνται κατά κόρον σε έργα ανοιχτού κώδικα και τον Team Foundation Server για έργα στην πλατφόρμα.net. Οι αρχές του προγραμματισμού είναι ανεξάρτητες της γλώσσας που χρησιμοποιείται. Κάθε γλώσσα έχει τα δυνατά και αδύναμα σημεία της, καθιστώντας έτσι την ανάπτυξη κάποιων προγραμμάτων ευκολότερη ή δυσκολότερη σε αυτές. Ένας πεπειραμένος προγραμματιστής θα βρει σχετικά εύκολη τη μετάβαση από μια γλώσσα σε μια άλλη καθώς το ουσιαστικότερο πράγμα που πρέπει να κάνει είναι να εντοπίσει πως υλοποιούνται οι προγραμματιστικές αρχές στη νέα γλώσσα. Τα περισσότερα μαθήματα προγραμματισμού επικεντρώνονται στο γράψιμο των προγραμμάτων από το μηδέν. Ωστόσο αρκετά μεγάλο ποσοστό της ανάπτυξης λογισμικού καταναλώνεται αφού έχει γραφεί ο κώδικας και πιο συγκεκριμένα στην ανάγνωση, την κατανόηση και την τροποποίηση του αρχικού κώδικα. Η εκμάθηση της ανάγνωσης κώδικα είναι επίσης μια απαραίτητη ικανότητα για έναν προγραμματιστή ιδιαίτερα σήμερα, στην εποχή της επαναχρησιμοποίησης κώδικα και της συνεργατικής ανάπτυξης σε απαιτητικά εταιρικά περιβάλλοντα. Το λογισμικό ανοιχτού κώδικα (open source software) παρέχει πρόσβαση σε εκατομμύρια γραμμές κώδικα για ανάγνωση, κριτική, τη δυνατότητα βελτίωσης από τον πεπειραμένο χρήστη και εκμάθησης για τον αρχάριο. Για το λόγο αυτό είναι καλή πρακτική η ανάγνωση ποιοτικού κώδικα που έχει γραφτεί για λογισμικό ανοικτού κώδικα, καθώς έχει συζητηθεί, συγκεκριμενοποιηθεί, γενικευτεί και τεκμηριωθεί από αρκετούς και κυρίως έμπειρους προγραμματιστές. Η ανάγνωση κώδικα επομένως είναι πιθανό να ανεβάσει το αισθητικό κριτήριο του προγραμματιστή για τον κώδικα που παράγει, όπως ακριβώς η ανάγνωση ποιοτικού πεζού λόγου εμπλουτίζει το λεξιλόγιο, ενεργοποιεί τη φαντασία και διευρύνει το νου του αναγνώστη. Δεν είναι τυχαίος λοιπόν ο χαρακτηρισμός του προγραμματισμού σαν μια μορφή τέχνης Πρότυπα Προγραμματισμού Για να ξεκινήσει κανείς τη μελέτη της C# και του αντικειμενοστρεφούς προγραμματισμού τον οποίο αυτή ακολουθεί, πρέπει να κατανοήσει τη γενικότερη φιλοσοφία και τα χαρακτηριστικά του. Ταυτόχρονα θα ήταν σκόπιμο να τον συγκρίνει με τα κυριότερα προγραμματιστικά πρότυπα (programming paradigms) που υπάρχουν. Σε αυτήν την παράγραφο, α φού αναφερθούμε στην έννοια του προγραμματιστικού προτύπου, θα αναφέρουμε εν συντομία τα θεμελιώδη χαρακτηριστικά μερικών σημαντικών προτύπων και θα καταλήξουμε με την αναλυτική παρουσίαση του αντικειμενοστρεφούς προγραμματισμού. Ξεκινώντας από τον αντίστοιχο αγγλικό όρο, η λέξη paradigm σημαίνει κάτι που χρησιμεύει σαν πρότυπο ή μοντέλο, σημαίνει δηλαδή ακριβώς ό,τι και η ελληνική λέξη παρά 6

7 δειγμα. Ωστόσο στη λέξη προσδόθηκε και μια ελαφρώς πιο πολύπλοκη έννοια, αυτή του θεωρητικού πλαισίου επιστημονικών αρχών όπου ενυπάρχει η θεωρία με την πράξη (δηλαδή την απόδειξη ότι ισχύει η θεωρία) που την υποστηρίζει. Συχνά συνοδεύεται από τη λέξη scientific που της προσδίδει τη δεύτερη αυτήν έννοια. Η έννοια του προγραμματιστικού προτύπου στηρίζεται στη δεύτερη από τις παραπάνω ετυμολογίες. Ένα προγραμματιστικό πρότυπο λοιπόν είναι μια προσέγγιση για τον προγραμματισμό υπολογιστών που βασίζεται σε κάποια μαθηματική θεωρία ή ένα αυστηρό σύνολο κανόνων. Κάθε πρότυπο περιέχει ένα σύνολο εννοιών που το καθιστούν ιδανικό για την επίλυση συγκεκριμένου είδους προβλημάτων. Για παράδειγμα, ο αντικειμενοστρεφής προγραμματισμός είναι ιδανικός για προβλήματα με ένα μεγάλο πλήθος αφαιρέσεων δεδομένων (data abstractions), οργανωμένων σε μια ιεραρχία ενώ ο λογικός προγραμματισμός (logic programming) είναι ιδανικός για το μετασχηματισμό πολύπλοκων συμβολικών δομών σύμφωνα με κανόνες λογικής. Υπάρχουν περίπου 27 διαφορετικά προγραμματιστικά πρότυπα, αρκετά από τα οποία ωστόσο έχουν κοινά στοιχεία μεταξύ τους. Τα προγραμματιστικά πρότυπα δεν πρέπει να συγχέονται με τις τεχνικές προγραμματισμού (programming techniques) οι οποίες σχετίζονται με τις αλγοριθμικές ιδέες για την επίλυση προβλημάτων κάποιας συγκεκριμένης τάξης (π.χ. διαίρει και βασίλευε), ούτε και με το στυλ προγραμματισμού, δηλαδή την αποτύπωση της προσωπικής έκφρασης του προγραμματιστή μέσα στον τον κώδικα. Η επίλυση ενός προγραμματιστικού προβλήματος απαιτεί σωστές προσεγγίσεις. Α κόμα και τα πιο απλά προβλήματα ενδέχεται να χρειάζονται διαφορετική προσέγγιση σε διάφορα μέρη τους (υπο προβλήματα). Για το λόγο αυτό, είναι ιδανικό μια γλώσσα προγραμματισμού να υποστηρίζει περισσότερα από ένα προγραμματιστικά πρότυπα. Κατά πολλούς είναι ατυχές το γεγονός ότι δημοφιλείς γλώσσες όπως η Java ή η C++ υποστηρίζουν ένα ή δυο πρότυπα μόνο. Η υποστήριξη πολλαπλών προτύπων σε μια γλώσσα επιτρέπει στους προγραμματιστές να επιλέξουν τις σωστές έννοιες όταν τις χρειάζονται άμεσα. Οι γλώσσες που υποστηρίζουν πολλαπλά πρότυπα συχνά καλούνται «πολυπρότυπες» (multiparadigm). Είναι δυνατόν ωστόσο να υλοποιηθεί, εν μέρει ή και πλήρως, ένα πρότυπο σε μια γλώσσα που δεν το υποστηρίζει, αφού αυτό έχει κατανοηθεί πλήρως. Για παράδειγμα ο συναρτησιακός προγραμματισμός είναι δυνατόν να υποστηριχθεί στην C#. Για να κατανοηθούν καλύτερα τα διαφορετικά προγραμματιστικά πρότυπα θα ήταν χρήσιμο να αναφερθούμε εν συντομία στην έννοια της κατάστασης ενός προγράμματος (program state) δηλαδή του μοντέλου αποθήκευσης δεδομένων στη μνήμη που ακολουθείται από μια γλώσσα. Όσο τρέχει ένα πρόγραμμα, πρέπει να αποθηκεύονται και να ανακτώνται δεδομένα στη μνήμη. Το μέγεθος της μνήμης που απαιτείται, η τοποθεσία και ο τρόπος αποθήκευσής τους, εξαρτάται από τον τύπο τους. Ένα πρόγραμμα σε εκτέλεση χρησιμοποιεί δύο περιοχές όπου αποθηκεύονται το πρόγραμμα και τα δεδομένα: τη στοίβα (stack) και το σωρό (heap). Η στοίβα αποτελείται από θέσεις μνήμης όπου αποθηκεύονται δεδομένα με τη δομή last in, first out (LIFO). Όταν ένα πρόγραμμα εκτελείται, χρησιμοποιεί έναν ειδικό καταχωρητή (register), τον δείκτη στοίβας (stack pointer), ο οποίος δείχνει την εγγραφή ενεργοποίησης (activation record) στην κορυφή της στοίβας. Η στοίβα περιέχει μια εγγραφή ενεργοποίησης για κάθε κλήση μεθόδου ή συνάρτησης της οποίας η εκτέλεση δεν έχει ολοκληρωθεί ακόμα στο πρόγραμμα. Όταν καλείται μια συνάρτηση, μια εγγραφή ενεργοποίησης εισάγεται (pushed) στη στοίβα, ενώ όταν τελειώνει η εκτέλεσή της, η εγγραφή ενεργοποίησης εξάγεται και ο δείκτης της στοίβας δείχνει στην αμέσως προηγούμενη εγγραφή. Μια εγγραφή ενεργοποίησης περιέχει πληροφορίες για τη συνάρτηση που εκτελείται μια δεδομένη χρονική στιγμή, όπως τις τοπικές μεταβλητές της συνάρτησης, την τιμή του μετρητή προγράμματος (program counter) πριν την κλήση της συνάρτησης ή οι παράμετροι που περνιούνται στη συνάρτηση. Τα δεδομένα που είναι διαθέσιμα από παντού στον κώδικα (καλούνται στατικά ή καθολικά) αποθηκεύονται ή όχι ανάλογα με τη γλώσσα προγραμματισμού που χρησιμοποιείται και η τοποθεσία τους στη μνήμη εξαρτάται από την υλοποίηση του μεταγλωττιστή ή διερμηνευτή. Στα δεδομένα αυτά περιλαμβάνονται οι σταθερές και οι καθολικές μεταβλητές οι οποίες είναι διαθέσιμες σε όλες τις μεθόδους/συναρτήσεις. Ένας προγραμματιστής, δεν χρειάζεται να επέμβει στη διαδικασία διαχείρισης της στοίβας, αφού την αναλαμβάνει το εκάστοτε σύστημα. Ωστόσο η κατανόηση της λειτουργι 7

8 κότητάς της δίνει μια καλύτερη αντίληψη του τι κάνει ένα πρόγραμμα όταν τρέχει και διευκολύνει την κατανόηση της τεκμηρίωσης μιας γλώσσας και της βιβλιογραφίας. Ο σωρός είναι μια περιοχή στη μνήμη για δυναμική δέσμευση/αποδέσμευση, δηλαδή για χρήση της μνήμης κατά την εκτέλεση του προγράμματος. Κάθε δεδομένο που δημιουργείται κατά την εκτέλεση, αποθηκεύεται στο σωρό. Οι τιμές που βρίσκονται σε θέσεις μνήμης στο σωρό δεν συνδέονται με ονόματα αλλά με μεταβλητές που έχουν όνομα: τους δείκτες ή τις αναφορές. Επίσης η τοποθέτησή και η αφαίρεσή τους στο σωρό γίνεται με ο ποιαδήποτε σειρά. Σε αρκετές γλώσσες προγραμματισμού, όπως η C#, η αφαίρεση (διαγραφή) δεδομένων από το σωρό δεν γίνεται από τον προγραμματιστή αλλά αυτόματα με έναν μηχανισμό γνωστό ως garbage collection Προστακτικός Προγραμματισμός Στον προστακτικό προγραμματισμό (imperative programming) ένα πρόβλημα επιλύεται υπολογιστικά μέσω προτάσεων (statements) που αλλάζουν την κατάσταση του προγράμματος. Όπως στις φυσικές γλώσσες το προστακτικό ύφος εκφράζει εντολές που πρέπει να φερθούν εις πέρας από έναν άνθρωπο, τα προστακτικά προγράμματα ορίζουν μια ακολουθία εντολών προς εκτέλεση από τον υπολογιστή. Εδώ ο προγραμματιστής γράφει κώδικα που περιγράφει τα ακριβή βήματα που πρέπει να ακολουθήσει ένα πρόγραμμα για να πετύχει το στόχο του. Επομένως, ο κυριότερος στόχος του προστακτικού προγραμματισμού είναι να δεχθεί δεδομένα σαν είσοδο, να τα αλλάξει μέσω ενημερώσεων στη μνήμη και να παράγει έξοδο βασισμένη σε αυτά τα συνεχώς αλλασσόμενα δεδομένα. Κάθε πρόγραμμα έχει μια αρχική κατάσταση, μια λίστα υπολογιστικών βημάτων που πρέπει να ολοκληρώσει σε μια σειρά που ελέγχεται από τις δομές ελέγχου και ένα σημείο εξόδου. Οι συνηθέστερες εντολές που προσφέρονται από τις προστακτικές γλώσσες προγραμματισμού αφορούν την ανάθεση τιμών και την είσοδο/έξοδο. Οι γνωστότερες γλώσσες που ακολουθούν αυτό το παράδειγμα είναι η C, η Basic, η Pascal και η Fortran Συναρτησιακός Προγραμματισμός Στο συναρτησιακό προγραμματισμό (functional programming) ο στόχος του προγράμματος είναι ελαφρώς διαφορετικός και αυτό έχει επίπτωση στον τρόπο προγραμματισμού: δίνεται έμφαση στη μορφή της πληροφορίας που είναι επιθυμητή και στους μετασχηματισμούς που χρειάζονται για να φτάσει το πρόγραμμα σε αυτή. Το επίκεντρο εδώ είναι οι κλήσεις συναρτήσεων (function calls). Ο κυριότερος τρόπος αλλαγής των δεδομένων είναι οι συναρτήσεις και το πέρασμα των παραμέτρων. Τα δεδομένα δεν αλλάζουν στο συναρτησιακό προγραμματισμό και οι νέες τιμές δημιουργούνται εκ νέου από παλιότερες. Κατά συνέπεια δεν υπάρχει η κλασική κατάσταση προγράμματος. Επίσης η διαφορά μεταξύ του προγράμματος και των δεδομένων εξαφανίζεται. Μια συνάρτηση είναι δεδομένα όπως κάθε άλλο στοιχείο δεδομένων. Για παράδειγμα οι ακέραιοι αριθμοί και οι συναρτήσεις είναι το ίδιο. Τα στατικά δεδομένα μπορεί να υπάρχουν αλλά παίζουν μικρό ρόλο στο συναρτησιακό προγραμματισμό. Εδώ η στοίβα αποκτά μεγαλύτερη σημασία καθώς η περισσότερη δουλειά πραγματοποιείται με την κλήση συναρτήσεων. Στις συναρτησιακές γλώσσες λαμβάνεται μεγαλύτερη μέριμνα στην απόκρυψη του σωρού από τον προγραμματιστή έτσι ώστε να μην είναι διαθέσιμος για επεμβάσεις. Τα δεδομένα είναι δυναμικά αλλά μόλις δημιουργούνται στο σωρό, αν ακολουθείται συναρτησιακό μοντέλο αυστηρά δεν μπορούν να αλλάξουν. Ωστόσο αρκετές γλώσσες παρακάμπτουν αυτόν τον κανόνα για να αντιμετωπίσουν θέματα απόδοσης. Μερικές γλώσσες που ακολουθούν αυτό το παράδειγμα είναι η Clojure, η Erlang, η Haskell και η F# Λογικός Προγραμματισμός Ο λογικός προγραμματισμός (logic programming) είναι αρκετά διαφορετικός από τα προηγούμενα πρότυπα. Εδώ ο προγραμματιστής δεν γράφει ένα πρόγραμμα με την παραδοσιακή του έννοια αλλά ένα σύνολο από λογικούς κανόνες που πρέπει να ισχύουν. Από αυτό το σύνολο το πρόγραμμα προσπαθεί να απαντήσει ερωτήσεις με ένα ναι ή όχι. Κατά 8

9 συνέπεια, η σειρά δήλωσης των κανόνων επηρεάζει την έξοδο του προγράμματος. Στο λογικό προγραμματισμό υπάρχει η έννοια του σωρού καθώς οι κανόνες αποτιμώνται κατά την εκτέλεση του προγράμματος και αυτή προϋποθέτει την δυναμική προσθήκη ή αφαίρεση κανόνων κατά την εκτέλεση. Ο λογικός προγραμματισμός είναι ιδιαίτερα χρήσιμος στο πεδίο της Τεχνητής Νοημοσύνης (Artificial Intelligence) όπου μπορεί να χρησιμοποιηθεί για την αναπαράσταση γνώσης με τη μορφή ενός λογικού προγράμματος. Η γνωστότερη γλώσσα στο λογικό προγραμματισμό είναι η Prolog Αντικειμενοστρεφής Προγραμματισμός Ο αντικειμενοστρεφής προγραμματισμός καθιερώθηκε τη δεκαετία του 1990 (η γλώσσα που συνεισέφερε αρκετά σε αυτό ήταν η Java) αντικαθιστώντας σε μεγάλο βαθμό το παραδοσιακό πρότυπο του προστακτικού προγραμματισμού. Εδώ το βασικό στοιχείο του προγράμματος είναι το αντικείμενο (object) που συνδυάζει ιδιότητες και διαδικασίες που επενεργούν σε αυτές αλλάζοντας τα δεδομένα τους. Κάθε αντικείμενο αποθηκεύει δεδομένα σε μεταβλητές και απαντά σε μηνύματα εκτελώντας τις διαδικασίες που καλούνται και μέθοδοι (methods). Το αντικείμενο αποτελεί δεσμευμένο κομμάτι της μνήμης (και συγκεκριμένα του σωρού) και καλείται και στιγμιότυπο (instance), ενός σύνθετου τύπου δεδομένων (data type) που καλείται κλάση (class). Η κλάση είναι μία αυτοτελής και αφαιρετική α ναπαράσταση κάποιας κατηγορίας αντικειμένων, είτε φυσικών αντικειμένων του πραγματικού κόσμου είτε νοητών, εννοιολογικών αντικειμένων και στην ουσία αποτελεί την προδιαγραφή των δεδομένων και των διαδικασιών που επιδρούν πάνω σε αυτά. Αν κανείς παρατηρήσει πως υλοποιούνται οι διάφορες εργασίες στον πραγματικό κόσμο, θα παρατηρήσει ότι αλληλεπιδρά σε έναν κόσμο που στρέφεται γύρω από αντικείμενα. Αν θέλει κάποιος να πάει σε ένα μέρος για παράδειγμα μπορεί να χρησιμοποιήσει το αυτοκίνητό του. Το αντικείμενο αυτοκίνητο αποτελείται από άλλα αντικείμενα, όπως η μηχανή που με τη σειρά της αποτελείται από άλλα αντικείμενα κ.ο.κ. καθένα από τα οποία αλληλεπιδρά με το άλλο για να πραγματοποιήσουν μια συγκεκριμένη εργασία, το σύνολο το οποίων όμως έχει σαν απώτερο στόχο να μετακινήσει το αυτοκίνητο από ένα σημείο σε ένα άλλο. Το αυτοκίνητο «ενεργοποιείται» με το στρίψιμο του κλειδιού στη μίζα. Αυτή στέλνει ένα μήνυμα (μέσω ενός ηλεκτρικού σήματος) στη μηχανή για να ξεκινήσει. Ο οδηγός, απομονώνεται από τις διαδικασίες αυτές και το πώς αλληλεπιδρούν για να ξεκινήσει το αυτοκίνητο. Το μόνο που περιμένει είναι μια απόκριση, ότι το αυτοκίνητο ξεκίνησε ή όχι. Παρόμοια, αποκρύπτεται από τους τελικούς χρήστες ενός λογισμικού η λογική που χρειάζεται για να υλοποιηθεί μια διεργασία. Για παράδειγμα, όταν εκτυπώνει ένας χρήστης μια σελίδα από ένα πρόγραμμα επεξεργασίας κειμένου, ξεκινάει τη διαδικασία πατώντας το κουμπί εκτύπωσης και χωρίς να ξέρει τι γίνεται εσωτερικά στο πρόγραμμα, περιμένει να δει μια εκτυπωμένη σελίδα ή ένα μήνυμα αποτυχίας. Πίσω στο παράδειγμα με το αυτοκίνητο, μπορούμε να ορίσουμε μία προδιαγραφή της μορφής και της συμπεριφοράς μιας κλάσης αντικειμένων (π.χ. μία κλάση "αυτοκίνητο"), ορίζοντας τόσο τις ιδιότητες της (π.χ. μία μεταβλητή "τρέχουσα ταχύτητα") όσο και τις πράξεις ή χειρισμούς επί αυτών των ιδιοτήτων (π.χ. μία διαδικασία "πάτημα του γκαζιού"). Στο παράδειγμα αυτό κάθε πραγματικό αυτοκίνητο αναπαρίσταται ως ξεχωριστό, "φυσικό" στιγμιότυπο αυτής της πρότυπης, ιδεατής κλάσης. Συνεπώς, αν υλοποιούσαμε αυτήν την προδιαγραφή στον υπολογιστή, τα αντικείμενα θα είναι αυτά που καταλαμβάνουν χώρο στη μνήμη του υπολογιστή ενώ οι κλάσεις αποτελούν απλώς τα "καλούπια" για τη δημιουργία τους. Οι έννοιες των κλάσεων και των αντικειμένων που δημιουργούνται από αυτές, φαίνονται στην Εικόνα 1.1. Η κλάση Mercedes SLK 2004, αποτελεί το σχέδιο σύμφωνα με το οποίο παράγονται αντικείμενα αυτοκίνητα καθένα από τα οποία έχει τα χαρακτηριστικά που προσδιορίζει το σχέδιο, ωστόσο είναι μοναδικό αφού έχει διαφορετικές τιμές στα χαρακτηριστικά του. Οι αιτίες που ώθησαν στην ανάπτυξη του αντικειμενοστρεφούς προγραμματισμού είναι η ευκολία συντήρησης, οργάνωσης, χειρισμού και επαναχρησιμοποίησης κώδικα μεγάλων και πολύπλοκων εφαρμογών και επικράτησε επειδή μπορούσε να αντεπεξέλθει σε προγράμματα πολύ μεγαλύτερου όγκου και πολυπλοκότητας. Σε αυτό συνετέλεσαν τα ακόλουθα χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού: 9

10 Ενθυλάκωση (encapsulation) Η ιδιότητα της ενθυλάκωσης αναφέρεται στην απόκρυψη των δεδομένων και της υ λοποίησης ενός αντικειμένου και είναι γνωστή και ως απόκρυψη δεδομένων (data hiding). Τα δεδομένα και ο κώδικας όταν ενθυλακώνονται, αποκρύπτονται από την εξωτερική πρόσβαση. Όταν ένας εξωτερικός παρατηρητής βλέπει ένα αντικείμενο, μπορεί να το χρησιμοποιήσει μόνο μέσω της εξωτερικής διασύνδεσής του (interface), δηλαδή ό, τι είναι διαθέσιμο προς χρήση, ενώ οι εσωτερικές λεπτομέρειες είναι κρυμμένες και δεν μπορούν να χρησιμοποιηθούν. Έτσι τα ενθυλακωμένα δεδομένα δεν μπορούν να αλλάξουν και πιο συγκεκριμένα να ενημερωθούν άμεσα από εξωτερικά αντικείμενα. Για παράδειγμα η επιτάχυνση ε νός αυτοκινήτου είναι διαθέσιμη για αλλαγή από το γκάζι (διασύνδεση) αλλά το πώς δουλεύει εσωτερικά η μηχανή για την πετύχει, είναι κρυφό από τον οδηγό. Τα αντικείμενα στον αντικειμενοστρεφή προγραμματισμό περιέχουν μια ενθυλακωμένη τοπική για το αντικείμενο κατάσταση μαζί με δεδομένα που καθορίζουν την υπόστασή τους. Το πώς είναι υλοποιημένο ένα αντικείμενο πρέπει στην ιδανική περίπτωση να είναι κρυμμένο. Κλάση: Αυτοκίνητο Ρόδες: 4 Πόρτες: 3 ή 5 Κλάση: Mercedes SLK 2004 Ρόδες: 4 Πόρτες: 3 Μηχανή: 3.2L V6 Χρώμα: Καθίσματα: Αντικείμενο: SLK s Ρόδες: 4 Πόρτες: 3 Μηχανή: 3.2L V6 Χρώμα: Ασημί Καθίσματα: Δερμάτινα Αντικείμενο: SLK b Ρόδες: 4 Πόρτες: 3 Μηχανή: 3.2L V6 Χρώμα: Μπλε Καθίσματα: Δερμάτινα Αντικείμενο: SLK r Ρόδες: 4 Πόρτες: 3 Μηχανή: 3.2L V6 Χρώμα: Κόκκινο Καθίσματα: Δερματίνη Εικόνα 1.1 Ένα παράδειγμα κλάσης και αντικειμένων Αφαίρεση δεδομένων (Abstraction) Η αφαίρεση δεδομένων είναι η αρχή που απαιτεί τα προγράμματα να μην λαμβάνουν υπόψη συγκεκριμένες υλοποιήσεις ή εσωτερικές αναπαραστάσεις αλλά να έχουν μια γενική αφηρημένη ιδέα των αντικειμένων που χρησιμοποιούν. Στον αντικειμενοστρεφή προγραμματισμό κάθε αντικείμενο μπορεί να ζητηθεί να παρέχει δεδομένα ή υπηρεσίες λαμβάνοντας μηνύματα/αιτήσεις. Τον αιτούντα δεν τον απασχολεί πως το αντικείμενο θα παράξει την δεδομένα αλλά τα δεδομένα καθαυτά. Το πώς δηλαδή η υλοποίηση ή αλλιώς η δημιουργία της πληροφορίας είναι μια εσωτερική για το αντικείμενο υπόθεση. Επομένως δίνεται έμφαση στο τι αντί για το πώς κατά την αλληλεπίδραση μεταξύ δυο αντικειμένων. Η αφαίρεση δεδομένων προσπαθεί να μειώσει τις λεπτομέρειες και να τις ομαδοποιήσει σε 10

11 επίπεδα μιας υλοποίησης έτσι ώστε ο προγραμματιστής να επικεντρωθεί στις έννοιες που τον ενδιαφέρουν για την επίλυση ενός προβλήματος. Ταυτόχρονα ο προγραμματιστής δεν απασχολείται με την εκμάθηση συγκεκριμένων υλοποιήσεων, αλλά επικεντρώνεται στην ε πίλυση του δεδομένου προβλήματος, γνωρίζοντας μόνο ό, τι χρειάζεται. Ένα σύστημα μπορεί να έχει πολλαπλά επίπεδα αφαίρεσης, σε καθένα από τα οποία φανερώνονται διαφορετικές λεπτομέρειες. Για παράδειγμα, τα επίπεδα χαμηλού επιπέδου φανερώνουν λεπτομέρειες του υλικού όπου τρέχει ένα πρόγραμμα, ενώ τα επίπεδα υψηλού επιπέδου ασχολούνται με τη λογική του προγράμματος. Κληρονομικότητα (inheritance) Τα αντικείμενα τείνουν να δομούνται βασισμένα σε άλλα αντικείμενα. Όταν δημιουργείται ένα νέο αντικείμενο (μέσα από μια κλάση), ουσιαστικά ορίζονται οι ιδιότητες που το κάνουν ξεχωριστό από τα υπόλοιπα αντικείμενα. Εξαιτίας της ομοιότητας πολλών αντικειμένων υπάρχει ένας μηχανισμός για τη μεταφορά των ιδιοτήτων κάποιων αντικειμένων σε άλλα αντικείμενα έτσι ώστε να αποφεύγεται ο άσκοπος ορισμός των χαρακτηριστικών σε κάθε αντικείμενο ξεχωριστά, αλλά και για να υπάρχει μια νοητή συγγένεια μεταξύ των αντικειμένων. Αυτός ο μηχανισμός καλείται κληρονομικότητα. Η κληρονομικότητα επιτρέπει στους προγραμματιστές την επαναχρησιμοποίηση των ορισμών δομών που έχουν οριστεί στο παρελθόν, μειώνοντας έτσι την εργασία κατά την ανάπτυξη προγραμμάτων. Πίσω στην Εικόνα 1, η κληρονομικότητα είναι αυτή που μεταφέρει τις ιδιότητες της γενικής κλάσης «Αυτοκίνητο» στην πιο ειδική κλάση Mercedes SLK Πολυμορφισμός (polymorphism) Ο όρος πολυμορφισμός στην κυριολεξία αναφέρεται στην ιδιότητα του να έχει κάτι πολλαπλές μορφές. Στις γλώσσες προγραμματισμού τις περισσότερες φορές αναφέρεται στην ιδιότητα των μεθόδων να μπορούν να δέχονται και/ή να επιστρέφουν τιμές διαφορετικού τύπου. Για παράδειγμα μια μέθοδος που δέχεται ένα μόνο όρισμα είναι πολυμορφική αν μπορεί να δεχτεί παραμέτρους διαφορετικού τύπου. Ο πολυμορφισμός είναι διάχυτος στις αντικειμενοστρεφείς γλώσσες προγραμματισμού και συνδέεται αρκετά με την κληρονομικότητα καθώς ιδιότητες που κληρονομούνται μπορούν να έχουν διαφορετικές μορφές από το αντικείμενο πρόγονο στο αντικείμενο απόγονο. Στον Πίνακα 1 συνοψίζονται τα κυριότερα χαρακτηριστικά των προαναφερθέντων προγραμματιστικών προτύπων και στον Πίνακα 2 δίνεται το κλασικό πρόγραμμα hello world σε χαρακτηριστικές γλώσσες των αντίστοιχων προγραμματιστικών προτύπων. Πίνακας 1 Χαρακτηριστικά των βασικότερων προτύπων προγραμματισμού Πρότυπο Βασικό στοιχείο Πρόγραμμα Εκτέλεση Αποτέλεσμα Προστακτικό Εντολή Ακολουθία Εκτέλεση εντολώσταση Τελική κατά Εντολών μνήμης Συναρτησιακό Συνάρτηση Συλλογή συναρτήσεων Αποτίμηση Τιμή της κύρισης συναρτήσεων ας συνάρτη Λογικό Πρόταση Αξιώματα και Απόδειξη θεωρήματος Επιτυχία ή θεώρημα αποτυχία της απόδειξης 11

12 Πίνακας 2 Το "Hello World" σε γλώσσες από τα βασικότερα πρότυπα προγραμματισμού Προστακτικό (C) Συναρτησιακό (F#) Λογικό (Prolog) Αντικειμενοστρεφές (C#) #include <stdio.h> #include <stdlib.h> int main(void) { printf("hello, imperative world\n"); return EXIT_SUCCESS; } let helloworld ruready = if ruready = 'y' then "hello functional world" else "stickin with c#";; hello_world :- write('hello Logic World!'). class Hello { static void Main() { System.Console.WriteLine("Hello Object World!"); } } 12

13 2. Το.NET framework και η C# Το.ΝΕΤ Framework είναι ένα πλαίσιο λογισμικού (software framework) 1 που προορίζεται για την πλατφόρμα των Windows. Αποτελείται από μια μεγάλη βιβλιοθήκη κλάσεων και υποστηρίζει μια πλειάδα γλωσσών προγραμματισμού με τη δυνατότητα η μια να μπορεί να χρησιμοποιηθεί από την άλλη. Τα προγράμματα που γράφονται για το.νετ Framework εκτελούνται σε ένα περιβάλλον εκτέλεσης γνωστό ως Common Language Runtime (CLR), ε νός ειδικού λογισμικού, σχεδιασμένου να υποστηρίζει την εκτέλεση προγραμμάτων και την απρόσκοπτη συνεργασία με το λειτουργικό σύστημα. Το CLR περιέχει μια εικονική μηχανή (virtual machine) που διαχειρίζεται την εκτέλεση ενός προγράμματος και παρέχει μια σειρά σημαντικών υπηρεσιών όπως ασφάλεια, διαχείριση μνήμης και διαχείριση εξαιρέσεων. Τα προγράμματα που γράφονται για το.νετ χρησιμοποιούν τη βιβλιοθήκη κλάσεων (class library) του.νετ, η οποία δίνει πρόσβαση στο περιβάλλον εκτέλεσής του (runtime environment). Βασικές λειτουργίες όπως οι γραφικές διεπαφές χρηστών (Graphical User Interfaces GUIs), η επικοινωνία με βάσεις δεδομένων, η κρυπτογραφία, η ανάπτυξη web εφαρμογών και οι δικτυακές επικοινωνίες παρέχονται μέσω του Application Programming Interface (API) του.net και μπορούν να συνδυαστούν με κώδικα από τους προγραμματιστές για τη δημιουργία ολοκληρωμένων εφαρμογών. Όσο ένα πρόγραμμα περιορίζεται στη χρήση της βιβλιοθήκης κλάσεων του.net, μπορεί να τρέχει οπουδήποτε υπάρχει εγκατεστημένο το περιβάλλον εκτέλεσης του.net. Η γλώσσα C# είναι μια από τις γλώσσες που υποστηρίζει το.net. Ο μεταγλωττιστής της C# στοχεύει ειδικά στο.net κάτι που σημαίνει ότι τα προγράμματα γραμμένα σε C# θα τρέχουν πάντα στο.νετ Framework. Αυτό έχει δυο σημαντικές συνέπειες για τη γλώσσα: Η αρχιτεκτονική της και οι μεθοδολογίες της αντικατοπτρίζουν τη δομή του.net. Σε πολλές περιπτώσεις, ειδικά χαρακτηριστικά της γλώσσας εξαρτώνται στην πραγματικότητα από τα χαρακτηριστικά του.net ή τις βασικές κλάσεις του.net. Εξαιτίας αυτής της εξάρτησης, είναι σημαντικό να κανείς να κατανοήσει την αρχιτεκτονική και τη μεθοδολογία του.νετ πριν προχωρήσει στον προγραμματισμό με τη C# Λίγη Ιστορία Για να εκτιμήσει κανείς τη σημασία του.net framework, είναι χρήσιμο να ταξιδέψει στο χρόνο, περίπου 18 χρόνια πριν και να θυμηθεί τη φύση των τεχνολογιών που υποστήριζαν τα Windows. Παρόλο που μπορεί να φαίνεται το ίδιο, όλα τα λειτουργικά συστήματα από τα Windows 3.1 (εκδόθηκαν το 1992) μέχρι τα Windows 7 και Windows Server 2008 R2 έχουν το ίδιο Windows API στον πυρήνα τους. Με την εμφάνιση όμως των νέων εκδόσεων των Windows, έχει προστεθεί νέα λειτουργικότητα στο API, σαν φυσική απόρροια της εξέλιξης του API και όχι της αντικατάστασής του από ένα νέο. Το ίδιο μπορεί κανείς να πει για τις περισσότερες από τις τεχνολογίες και frameworks που χρησιμοποιούνται για την ανάπτυξη εφαρμογών σε Windows. Για παράδειγμα το πρότυπο COM (Component Object Model) ξεκίνησε σαν OLE (Object Linking and Embedding) και αρχικά αποτελούσε το μέσο με το οποίο διαφορετικοί τύποι εγγράφων του Office μπορούσαν να συνδεθούν, ώστε για παράδειγμα να είναι εφικτό να προστεθεί ένας μικρός πίνακας Excel σε ένα έγγραφο Word. Από τότε το COM εξελίχθηκε στο DCOM (Distributed COM) και τέλος στο πρότυπο COM+, μια πολύπλοκη τεχνολογία που σχημάτισε τη βάση της επικοινω 1 Ένα software framework είναι ένα επαναχρησιμοποιήσιμο σύστημα λογισμικού, αποτελούμενο συνήθως από βιβλιοθήκες και υποπρογράμματα για την υποστήριξη της εκτέλεσης άλλων προγραμμάτων. Τα frameworks μπορούν να βελτιώσουν την παραγωγικότητα κατά την ανάπτυξη του λογισμικού καθώς αφήνουν τον προγραμματιστή να επικεντρωθεί στην εφαρμογή προς ανάπτυξη και όχι στην υποδομή της. Η κύρια διαφορά με τις απλές βιβλιοθήκες λογισμικού είναι η «αντιστροφή ελέγχου», κατά την οποία ο έλεγχος αρχικοποίησης και κλήσης αντικειμένων μεταφέρεται στο framework, αντίθετα με τις βιβλιοθήκες που ήταν αποκλειστική δουλειά του προγραμματιστή. 13

14 νίας σχεδόν όλων των components, όπως επίσης και την υλοποίηση των δοσοληψιών, των υπηρεσιών μηνυμάτων και του pooling αντικειμένων. Η Microsoft επέλεξε αυτή την εξελικτική προσέγγιση στο λογισμικό για τον προφανή λόγο της διατήρησης της συμβατότητας με τις προηγούμενες εκδόσεις (backward compatibility). Μέσα στα χρόνια, η μεγάλη βάση του λογισμικού από άλλους παρόχους που γράφτηκε για Windows, σίγουρα δεν θα γνώριζε την ίδια επιτυχία αν κάθε φορά που η Microsoft εισήγαγε μια νέα τεχνολογία, έσπαγε την υπάρχουσα υποδομή προγραμματισμού! Ήταν ξεκάθαρο ότι κάτι έπρεπε να αλλάξει. Η Microsoft δεν μπορούσε να επεκτείνει για πάντα τα ίδια εργαλεία λογισμικού και τις ίδιες γλώσσες, κάνοντάς τα πιο πολύπλοκα για να υποστηρίζουν το νέο υλικό (hardware) και ταυτόχρονα να είναι συμβατά με τις προηγούμενες εκδόσεις. Κάποτε έρχεται ένα σημείο που πρέπει να γίνει επανεκκίνηση στη θεώρηση της ανάπτυξης λογισμικού αν είναι επιθυμητά ένα απλό αλλά ταυτόχρονα μοντέρνο σύνολο γλωσσών προγραμματισμού, περιβαλλόντων και εργαλείων ανάπτυξης λογισμικού που διευκολύνει τους προγραμματιστές στην ανάπτυξη λογισμικού. Σε αυτό το σημείο έγινε ο ερχομός της C# και του.net στην πρώτη τους ενσάρκωση. Με λίγες λέξεις το.net είναι ένα σύστημα λογισμικού για την υποστήριξη του προγραμματισμού στην πλατφόρμα των Windows. Μαζί με το.net Framework, η C# είναι μια γλώσσα που σχεδιάστηκε από την αρχή για να το υποστηρίξει και να εκμεταλλευτεί όλη την πρόοδο πάνω στα περιβάλλοντα προγραμματισμού και την θεώρηση του αντικειμενοστρεφούς προγραμματισμού που είχε συντελεστεί τα τελευταία 25 χρόνια. Πριν συνεχίσουμε πρέπει να ξεκαθαρίσουμε ότι η συμβατότητα με τα παλιότερα συστήματα δεν χάθηκε κατά τη διαδικασία αυτή. Τα υπάρχοντα προγράμματα θα συνεχίσουν να δουλεύουν και το.net σχεδιάστηκε με τη δυνατότητα να δουλεύει με το υπάρχον λογισμικό. Τώρα, η επικοινωνία μεταξύ διαφόρων components σε Windows γίνεται σχεδόν εξ ολοκλήρου σε COM. Λαμβάνοντας αυτό υπόψη, το.net Framework έχει τη δυνατότητα να παρέχει wrappers για τα υπάρχοντα COM components έτσι ώστε τα.net components να μπορούν να επικοινωνούν με αυτά. Ωστόσο, δεν είναι απαραίτητο να γνωρίζει κανείς C# για να προγραμματίσει στο.net. Η Microsoft επέκτεινε τη C++ και άλλαξε σημαντικά τη Visual Basic για να την μετατρέψει σε μια πιο ισχυρή γλώσσα, έτσι ώστε να καταστήσει δυνατή τη χρήση τους για το.net. Αυτές οι γλώσσες όμως, φέρουν το βάρος της εξέλιξης μέσα στα τελευταία χρόνια αντί να έχουν γραφτεί από την αρχή σύμφωνα με τις σύγχρονες απαιτήσεις Χαρακτηριστικά του.net Framework Πριν επεκταθούμε σε μια πιο αναλυτική παρουσίαση της δομής της πλατφόρμας.νετ και των τεχνολογιών που την περιβάλλουν είναι σκόπιμο να παρουσιάσουμε τα σημαντικότερα χαρακτηριστικά και πλεονεκτήματά της: Υποστήριξη πολλαπλών γλωσσών Παρόλο που το COM υποστήριζε πολλαπλές γλώσσες (κυρίως τη C++ και τη Visual Basic), οι δυνατότητες επικοινωνίας μεταξύ των διαφόρων γλωσσών περιορίζονταν στην υ λοποίηση διασυνδέσεων (interfaces). Στο.ΝΕΤ, η διαλειτουργικότητα μεταξύ των γλωσσών επιτυγχάνεται μέσω της δια γλωσσικής κληρονομικότητας. Μαζί με ένα ενοποιημένο σύστημα τύπων, η συνένωση κώδικα γραμμένου σε διαφορετικές γλώσσες είναι πλέον εύκολη υπόθεση. Αυτό διευκολύνει και άλλα προγραμματιστικά πρότυπα όπως το συναρτησιακό της F#. Ανάπτυξη βασισμένη σε components Η τέχνη της δημιουργίας ανεξάρτητων κομματιών λογισμικού που περιέχουν βιβλιοθήκες κλάσεων και διαμοιράσιμα τμήματα λειτουργικότητας μιας εφαρμογής έχει γίνει πολύ πιο εύκολη από παλιότερα. Για παράδειγμα, δεν χρειάζεται υλοποίηση διεπαφών COM, ό πως το IUnknown. Η διαμοιράσιμη μονάδα κώδικα στο.net βασίζεται στην έννοια του assembly, το οποίο μεταφέρει πληροφορίες που απαιτούνται για τη χρήση της όπως η έκδοση της. 14

15 Μεταφερσιμότητα Η μεταφερσιμότητα (portability) επιτυγχάνεται μέσω της εικονικής μηχανής στο CLR. H εικονική μηχανή αυτή είναι η προδιαγραφή μιας αφηρημένης εικονικής μηχανής για την οποία κώδικας γραμμένος σε οποιαδήποτε από τις.νετ γλώσσες μεταγλωττίζεται σε μια ενδιάμεση γλώσσα γνωστή ως Common Intermediate Language (CIL) και περιέχεται σε ένα assembly. Ένα assembly είναι είτε ένα εκτελέσιμο αρχείο (exe) είτε ένα dll. Η μεταγλώττιση σε αυτήν την ενδιάμεση γλώσσα είναι που εξασφαλίζει και την ανεξαρτησία από την πλατφόρμα, η οποία ωστόσο μένει μόνο στη θεωρία, αφού η μοναδική πλήρης υλοποίηση του.net είναι διαθέσιμη μόνο για την πλατφόρμα των Windows. Όμως είναι διαθέσιμη μια μερική υλοποίηση ανοιχτού κώδικα με το όνομα Mono. Απλή εγκατάσταση εφαρμογών Αντίθετα με τα components που βασίζονται στο COM, δεν χρειάζεται καμία καταχώρηση στο registry του συστήματος για την εγκατάσταση των assemblies καθώς μια απλή α ντιγραφή αρκεί για τη χρήση τους. Επιπρόσθετα τα πιθανά προβλήματα της χρήσης των Dynamic Link Libraries (DLLs) γνωστά και ως DLL Hell απαλείφθηκαν με την υποστήριξη της ύπαρξης πολλαπλών εκδόσεων του ίδιου component δίπλα δίπλα. Το ίδιο το.net Framework είναι ένα καλό παράδειγμα αυτής της δυνατότητας, αφού είναι δυνατόν να υπάρχουν πολλαπλές εκδόσεις του framework εγκατεστημένες στο ίδιο μηχάνημα. Επικοινωνία με υπάρχων κώδικα Παρόλο που η πλατφόρμα.νετ προορίζεται να είναι ένα υποκατάστατο των παλαιότερων τεχνολογιών, υποστηρίζει τη χρήση κομματιών λογισμικού που έχουν αναπτυχθεί σε παλιότερες τεχνολογίες όπως της COM και παρέχει πρόσβαση σε λειτουργίες χαμηλού επιπέδου του λειτουργικού συστήματος μέσω του μηχανισμού P/Invoke. Αξιοπιστία To.NET είναι σχεδιασμένο για τη δημιουργία λογισμικού υψηλής αξιοπιστίας (robustness). Πραγματοποιεί εκτεταμένους ελέγχους κατά τη μεταγλώττιση αλλά και κατά την εκτέλεση των προγραμμάτων. Τα χαρακτηριστικά του.νετ από μόνα τους ωθούν τους προγραμματιστές στην απόκτηση αξιόπιστων προγραμματιστικών συνηθειών. Το μοντέλο διαχείρισης της μνήμης είναι απλό: η δέσμευση μνήμης γίνεται με μια λέξη (new), δεν υπάρχουν δείκτες προς θέσεις μνήμης σαν τύποι δεδομένων, ούτε αριθμητική δεικτών ενώ η α ποδέσμευση μνήμης γίνεται αυτόματα μέσω του μηχανισμού garbage collection. Αυτό το απλό μοντέλο διαχείρισης μνήμης απαλείφει ολόκληρες κατηγορίες λαθών που απασχολούν τους προγραμματιστές σε C και C++. Η ανάπτυξη προγραμμάτων γίνεται με την πεποίθηση ότι αρκετά λάθη θα εντοπιστούν από το σύστημα πολύ πριν την ολοκλήρωσή της. Αυτόματη διαχείριση μνήμης Άλλο ένα σημαντικό χαρακτηριστικό του.net Framework είναι η δυνατότητα αυτόματης διαχείρισης της μνήμης μέσω του Garbage Collector. Ιστορικά η διαχείριση της μνήμης ήταν από τις δυσκολότερες εργασίες που είχε να κάνει ένας προγραμματιστής. Οι παλαιότερες προσεγγίσεις στη διαχείριση μνήμης ήταν είτε χαμηλού επιπέδου (όπως η malloc/free στη C και η new/delete στη C++), προκαλώντας διάφορα bugs, είτε αρκετά πολύπλοκη (όπως στην περίπτωση του COM). Ένας από τους στόχους του.νετ και του CLR πιο συγκεκριμένα ήταν να απαλείψει από τους προγραμματιστές την ανάγκη διαχείρισης της μνήμης. Το CLR με το μηχανισμό Garbage Collector διαχειρίζεται τη μνήμη ερευνώντας πότε μπορεί να ελευθερωθεί με ασφάλεια μνήμη που δεν χρειάζεται άλλο σε ένα πρόγραμμα. Η μνήμη δεσμεύεται με την αρχικοποίηση των διαφόρων τύπων (αντικειμένων) από ένα διαθέσιμο τμήμα της μνήμης που διαχειρίζεται το CLR γνωστό ως heap (σωρός). Όσο υπάρχει κάποια άμεση ή έμμεση (μέσω του γράφου των αντικειμένων) αναφορά προς ένα αντικείμενο, τότε αυτό θεωρείται πως χρησιμοποιείται. Στην αντίθετη περίπτωση, όταν δεν μπορεί να αναφερθεί από κάποιο άλλο τμήμα του κώδικα τότε είναι διαθέσιμο για καταστροφή. Ο garbage collector τρέχει ανά τακτά χρονικά διαστήματα σε ένα ξεχωριστό thread, εντοπίζει 15

16 ποια αντικείμενα είναι έτοιμα προς καταστροφή και αποδεσμεύει τη μνήμη που αυτά χρησιμοποιούσαν. Ασφάλεια Το.ΝΕΤ είναι σχεδιασμένο να λειτουργεί σε κατανεμημένα περιβάλλοντα, η ασφάλεια (security) των οποίων είναι υψίστης σημασίας. Με μέτρα που είναι ενσωματωμένα στις γλώσσες αλλά και κατά την εκτέλεση των προγραμμάτων, το.νετ επιτρέπει τη δημιουργία προγραμμάτων που δεν μπορούν να προσβληθούν από έξω. Σε δικτυακά περιβάλλοντα οι εφαρμογές.νετ είναι ασφαλείς από εισβολές μη εξουσιοδοτημένου κώδικα που επιχειρεί να δράσει στο παρασκήνιο και να εγκαταστήσει κακόβουλο λογισμικό ή να εισβάλει σε συστήματα αρχείων. Το περιβάλλον εκτέλεσης του.νετ έχει ενσωματωμένο έναν μηχανισμό ασφάλειας με το όνομα Code Access Security (CAS) που απομονώνει τον κώδικα ανάλογα με την προέλευσή του, τον δημιουργό του ή άλλες πολιτικές. Το μοντέλο ασφάλειας συμβαδίζει με τους μηχανισμούς ασφάλειας που παρέχει το λειτουργικό σύστημα όπως οι Access Control Lists και τα Windows security tokens. Απόδοση Η ενδιάμεση γλώσσα στην οποία μεταγλωττίζονται τα προγράμματα στο.νετ, μεταγλωττίζεται πάντα με τη μέθοδο Just in Time (JIT). Ο μεταγλωττιστής JIT μεταγλωττίζει κάθε τμήμα του κώδικα στην ενδιάμεση γλώσσα όταν αυτό καλείται (just in time). Όταν έχει ήδη μεταγλωττιστεί κάποιο τμήμα κώδικα, το αποτέλεσμα αποθηκεύεται μέχρι η εφαρμογή να τερματίσει έτσι ώστε να μην χρειάζεται να ξαναμεταγλωττιστεί όταν ζητηθεί το συγκεκριμένο τμήμα. Η διαδικασία αυτή είναι αποδοτικότερη σε σύγκριση με την απευθείας μεταγλώττιση ολόκληρου του κώδικα, γιατί υπάρχει περίπτωση μεγάλα τμήματα κώδικα να μην εκτελεστούν ποτέ στην πραγματικότητα. Με τον μεταγλωττιστή JIT τέτοιος κώδικας δεν θα μεταγλωττίζονταν ποτέ. Υποστήριξη με επαγγελματικά εργαλεία Το.ΝΕΤ Framework συνοδεύεται από ένα σύνολο εργαλείων για την υποστήριξη της ανάπτυξης λογισμικού σε αυτό, όπως το σύστημα σχεδιασμού, τα frameworks για unit testing, την πλατφόρμα για build MSBuild και το σύστημα debugging, μέσα από το Visual Studio Το Visual Studio είναι ένα από τα καλύτερα Integrated Development Environments (IDEs). Χρησιμοποιείται για την ανάπτυξη όλων των ειδών εφαρμογών που μπορούν να α ναπτυχθούν στο.νετ: από console εφαρμογές και εφαρμογές με γραφικές διεπαφές (GUIs) μέχρι web εφαρμογές και web services σε managed αλλά και εγγενή κώδικα. Οι Premium και Ultimate εκδόσεις του Visual Studio στοχεύουν στην ομαδική ανάπτυξη μαζί με τον Team Foundation Server (TFS) που χρησιμοποιείται για την παρακολούθηση ενός έργου.net, τη διαχείριση του κώδικα, τη διαχείριση των αναφορών αλλά και το διαμοιρασμό κώδικα, τεκμηριώσεων ή άλλων εγγράφων Αρχιτεκτονική του.net Framework Ένας προγραμματιστής στην πλατφόρμα Windows έχει πρωταρχικά δυο μονοπάτια που μπορεί να ακολουθήσει κατά την ανάπτυξη εφαρμογών. Το πρώτο είναι η ανάπτυξη εφαρμογών μη διαχειρισμένου κώδικα (unmanaged code) και περιλαμβάνει τον προγραμματισμό κατευθείαν στο λειτουργικό σύστημα, χρησιμοποιώντας το Windows Application Programming Interface (Windows API) συνήθως με τη γλώσσα C++. Στόχος του Windows API είναι να δώσει τη δυνατότητα στους προγραμματιστές να αναπτύξουν προγράμματα με το λειτουργικό σύστημα για να αποφύγουν το γράψιμο κώδικα για τη δημιουργία components των Windows όπως φόρμες, κουμπιά μενού και άλλα. Με το Windows API ένας προγραμματιστής καλεί τις συναρτήσεις και αφήνει το λειτουργικό σύστημα να δημιουργήσει αυτά τα components. Ο κύριος λόγος χρήσης του Windows API είναι η απουσία υποστήριξης διαφόρων λειτουργιών από τη βασική έκδοση της χρησιμοποιούμενης γλώσσας προγραμματισμού. Η χρήση μιας λειτουργίας του Windows API από μια γλώσσα γίνεται με την κλήση της κατάλληλης συνάρτησης. Ωστόσο, οι κλήσεις τέτοιων συναρτήσεων είναι συνήθως μια πολύπλοκη διαδικασία που μπορεί να προκαλέσει απρόβλεπτες συνέπειες αν δεν γίνει σωστά. Η πολυ 16

17 πλοκότητα αυτή είναι ε ένας απόό τους λόγους που οδήγησε στη δημιουργία του δεύτερου μο κώδικα. Διαχειρισμένος κώδικαςς (managed code) είναι ουσιαστικά κώδικας που τρέχει στην νοπατιού στην ανάπτυξη εφαρμογών, δηλαδή την ανάπτυξη εφαρμογών διαχειρισμένου πλατφόρμα.νετ. Το.NET Framework αποτελείται από ένα έ περιβάλλον εκτέλεσηςς το οποίο διαχειρίζεται την εκτέλεση κώδικα μέσω κανόνων ασφάλειας, αυτόματης διαχείρισης της μνήμης και αυστηρότητας τύπων, μειώνοντας έτσι σε μεγάλο μ βαθμόό την πιθανότητα πρό ένα συ κλησης λαθών από αυτούς τους παράγοντες. Η πλατφόρμα αποτελείται από διάφορα μέρη καθένα από τα οποία παρέχει γκεκριμένο κομμάτι των δυνατοτήτων της. Αυτά μπορείί να είναι αυτόνομα προγράμματα, βιβλιοθήκες ή βοηθητικά αρχεία. Ακολουθεί μια απεικόνιση της σχέσης των μερώνν του.νετ με τις εφαρμογέςς μέσα από ταα δύο μονοπάτια ανάπτυξης που αναφέραμε, στην Εικόνα 2 αλλά και μια αναλυτική περιγραφή των κυριότερων μερών του.νετ: Εικόνα 2.11 Μια επισκόπηση του.νετ Framework Common Language Runtime Το Common Language Runtime (CLR) είναι μια υλοποίηση υ του προτύπου Common Language Infrastructure (CLI) από τη Microsoft. Tο CLI προσδιορίζει την υποδομή εκτέλεσης ε που απαιτείται για τη χρήση managed κώδικα, έτσι ώστε ώ διαφορετικές βιβλιοθήκες και γλώσσες να συνεργάζονται απρόσκοπτα. Υπάρχουν και άλλες ά υλοποιήσεις του CLI από τρί με το ό τους παρόχους όπως το Mono Και το DotGNU Portable.NET αλλά και της Microsoft νομα Shared Source CLI (SSCLI) γνωστό και ως Rotor, το οποίο τρέχει σε πλατφόρμες όπως το FreeBSD. Αυτό θεωρητικά σημαίνει ότι κώδικας που στοχεύει στο.nett όχι μόνο επιτρέπει τη διαλειτουργικότητα μεταξύ διαφορετικών γλωσσών προγραμματισμού αλλά και την εκτέλε : ση σε διαφορετικές πλατφόρμες. Η προδιαγραφή CLI και κατά συνέπεια το CLR αποτελείται από τρία κύρια στοιχεία το Virtual Execution System (VES) το Common Type System (CTS) το Common Language Specification (CLS). Η VES είναι η καρδιά του CLR και είναι αυτή πουυ εξασφαλίζει τη μεταφερσιμότητα των προγραμμάτων σε.νετ. Η VES αντιλαμβάνεται τοο format της ς ενδιάμεσης γλώσσας Common Intermediate Language (CIL) και τα μεταδεδομένα που περιγράφουν τον κώδικα κ σε αυτήν την ενδιάμεση μορφή. Ο κώδικας σε CIL μορφή είναι ίδιος ανεξάρτητα από το τ υλικό ή την πλατφόρμα όπου εκτελείται. Η VES είναι ουσιαστικά μια εικονική μηχανή διεργασίας (process virtual machine). Τέτοιες μηχανές τρέχουν σαν κανονική εφαρμογή μέσα στο λει Η λει τουργικό σύστημα στο οποίο φιλοξενούνται και υποστηρίζονται απόό μια διεργασία. τουργία τους ξεκινά με την έναρξη της διεργασίας και παύει με τον τερματισμό της. Ο σκο 17

18 πός των εικονικών μηχανών είναι να παρέχουν ένα περιβάλλον εκτέλεσης προγραμμάτων, ανεξάρτητο συνήθως από την πλατφόρμα που τρέχουν, η οποία κρύβει τις λεπτομέρειες του υποκείμενου υλικού ή λειτουργικού συστήματος, επιτρέποντας έτσι στα προγράμματα να τρέχουν με τον ίδιο τρόπο σε κάθε πλατφόρμα. Δεν πρέπει να συγχέονται με τις εικονικές μηχανές συστήματος (system virtual machines) που παρέχουν μια πλήρη πλατφόρμα για την εκτέλεση ενός ολόκληρου λειτουργικού συστήματος όπως η VirtualBox, VMWare ή η Hyper V. Για να εκτελεστεί ο κώδικας μιας γλώσσας στο CLR, πρέπει πρώτα να μεταγλωττιστεί σε μια μορφή η οποία μπορεί να αναγνωριστεί κατά την εκτέλεση. Αυτή η μορφή είναι η Common Intermediate Language (CIL συχνά και σκέτο IL). Ο κώδικας που εκτελείται στο CLR είναι γνωστός ως managed κώδικας, σε αντίθεση με τον εγγενή κώδικα (native code) που ε κτελείται κατευθείαν στον επεξεργαστή της μηχανής χωρίς επιπρόσθετη υποδομή εκτέλεσης. Εκτός από τις εντολές σε IL για την εκτέλεση μιας εφαρμογής το CLR χρειάζεται μεταδεδομένα (metadata) που περιγράφουν τη δομή και την οργάνωση των τύπων δεδομένων. Η χρήση των μεταδεδομένων απαλείφει την ανάγκη ύπαρξης header files και βοηθά διάφορα εργαλεία να επιθεωρήσουν τους τύπους. Ένα τέτοιο παράδειγμα είναι το Intellisense του Visual Studio. Η ενδιάμεση γλώσσα CIL περιέχεται μέσα στα assemblies τα οποία, εκτός από το ρόλο τους στην εκτέλεση ενός προγράμματος, αποτελούν και της βασικές μονάδες εγκατάστασης στο.net. Εξαιτίας της αυτοπεριγραφικής φύσης τους που παρέχεται από τα μεταδεδομένα, τα assemblies δεν χρειάζονται την βοήθεια πολύπλοκων οδηγών εγκατάστασης (installers) για την εγγραφή τους στο registry, αφού μια απλή αντιγραφή τους αρκεί, ενώ είναι δυνατή η ύπαρξη πολλαπλών εκδόσεων των assemblies αφού ενσωματώνουν τον αριθμό έκδοσής τους. Ένα από τα σημαντικότερα κομμάτια του CLR είναι το CTS γιατί εξασφαλίζει τη διαλειτουργικότητα μεταξύ των γλωσσών. Το CTS ορίζει τους προκαθορισμένους τύπους δεδομένων που είναι διαθέσιμες στην ενδιάμεση γλώσσα έτσι ώστε όλες οι γλώσσες του.νετ να παράγουν μεταγλωττισμένο κώδικα που βασίζεται σε αυτούς τους τύπους. Για παράδειγμα ο τύπος δεδομένων Integer της Visual Basic 2010 είναι στην πραγματικότητα ένας 32 bit προσημασμένος ακέραιος, ο οποίος αντιστοιχεί στην ενδιάμεση γλώσσα στον τύπο Int32. Επειδή ο μεταγλωττιστής της C# κατανοεί τον τύπο αυτόν δεν υπάρχει κάποιο πρόβλημα στη χρήση από τη C# ενδιάμεσου κώδικα παραγμένο από VΒ. Το τελευταίο σημαντικότερο κομμάτι του CLR είναι το Common Language Specification (CLS). Το CLS είναι ένα σύνολο κανόνων στο οποίο βασίζονται όλες οι γλώσσες του.νετ για να εξασφαλίσουν ότι δεν τίθενται προς χρήση τύποι δεδομένων τους οποίους δεν μπορούν να χειριστούν μερικές γλώσσες. Αν τηρούνται όλοι οι κανόνες ένας τύπος ορίζεται ως συμβατός με το CLS (CLS compliant) και κατά συνέπεια μπορεί να χρησιμοποιηθεί από όλες τις γλώσσες. Ένα παράδειγμα ενός κανόνα είναι ένας τύπος δεν μπορεί να έχει public μέλη που διακρίνονται μόνο από το αν οι χαρακτήρες τους είναι πεζοί ή κεφαλαίοι (π.χ. Bar και bar). Μερικές γλώσσες, όπως η Visual Basic, δεν κάνουν διάκριση σε πεζούς και κεφαλαίους χαρακτήρες και δεν θα μπορούσαν να αντιληφθούν τη διαφορά. Βιβλιοθήκες κλάσεων Τα περισσότερα σύγχρονα λειτουργικά συστήματα παρέχουν ένα σύνολο επαναχρησιμοποιήσιμου κώδικα για τη διευκόλυνση της ανάπτυξης προγραμμάτων σε αυτά. Ο κώδικας αυτός παρέχεται συνήθως σαν ένα σύνολο βιβλιοθηκών που μπορούν να καλούν οι ε φαρμογές κατά την εκτέλεσή τους, όπως οι Dynamic Link Libraries (dll) στα Windows και τα Dynamic Shared Objects (dso) στα συστήματα Unix. Τα DLLs αυτά, που βρίσκονται στο φάκελο Windows\System32, περιέχουν συναρτήσεις που χρησιμοποιούνται για την απρόσκοπτη λειτουργία του λειτουργικού συστήματος και τη διατήρηση ενός συνεπούς παραθυρικού περιβάλλοντος. Αυτά τα αρχεία αποτελούν το Windows API. Προφανώς, το περιβάλλον εκτέλεσης συνετέλεσε αρκετά στην επιτυχία του.νετ αλλά πολύ σημαντικότερη για τους προγραμματιστές είναι η πλούσια βιβλιοθήκη κλάσεων (Class Library) η οποία δίνει πρόσβαση σε έναν πλούτο λειτουργικότητας που μπορεί να χρησιμοποιηθεί από τις εφαρμογές. Οι βιβλιοθήκες κλάσεων του.νετ υπηρετούν κυρίως δύο σκοπούς: α) όπως άλλες βιβλιοθήκες παρέχουν ένα καλά ορισμένο σύνολο κώδικα για την πραγματοποίηση τετριμμένων εργασιών, όπως η διατήρηση λιστών αντικειμένων ή η 18

19 επεξεργασία συμβολοσειρών και β) παρέχουν μια αφηρημένη υλοποίηση για εργασίες που κανονικά θα απαιτούσαν πρόσβαση στο υλικό και το λειτουργικό σύστημα, όπως η χρήση του συστήματος αρχείων ή η πρόσβαση στο δίκτυο. Η βιβλιοθήκη κλάσεων του.net έχει μεγαλώσει αρκετά από την πρώτη έκδοσή του περίπου το Σήμερα, είναι σχεδόν αδύνατο να δοθεί πλήρης κάλυψη του framework ακόμα και σε ένα βιβλίο. Αντίθετα είναι πολύ πιο σημαντικό να κατανοηθεί η βασική δομή του έτσι ώστε η εξερεύνησή του να γίνεται εύκολα. Σπάνια κανείς θα έχει την πλήρη λύση ενός προβλήματος όταν ξεκινάει την ανάπτυξη μιας εφαρμογής, αλλά έχοντας κατανοήσει τη δομή του, οτιδήποτε στη βιβλιοθήκη μπορεί να μαθευτεί και να χρησιμοποιηθεί. Δεδομένων των τεραστίων διαστάσεων της βιβλιοθήκης, είναι απαραίτητη η οργάνωσή της για να διευκολυνθεί ο εντοπισμός των διαφόρων λειτουργιών της. Η προσέγγιση που ακολουθείται στο.νετ είναι η ιεραρχική οργάνωση των παρεχόμενων τύπων με τη χρήση των namespaces, σε αντίθεση με το Win32 API όπου η οργάνωση είναι επίπεδη. Ακολουθούν ορισμένα γνωστά namespaces και η λειτουργικότητα που παρέχουν: Το System περιέχει τους primitive τύπους δεδομένων, όπως τους Int32, Double, String, Booleans. Το System.Collections παρέχει πρόσβαση σε χρήσιμους τύπους συλλογών δεδομένων όπως λίστες, σύνολα και λεξικά. Το System.Data που παρέχει λειτουργικότητα για την πρόσβαση σε online ή offline δεδομένα με κύριο στόχο τις βάσεις δεδομένων. Το System.IO που παρέχει τις απαραίτητες δομές για τη διαχείριση της Εισόδου/Εξόδου (input/output) με streams, αρχεία, pipes κ.α. Το System.Net που περιέχει κλάσεις για τη μετάδοση δεδομένων μέσω δικτύου που υποστηρίζουν γνωστά πρωτόκολλα όπως το TCP, UDP και το HTTP. To System.Security που ενσωματώνει όλη τη λειτουργικότητα σχετική με την ασφάλεια μιας εφαρμογής, όπως permissions και κρυπτογραφία. Το System.Text που χρησιμεύει για τη διαχείριση κειμένου, υποστηρίζοντας διάφορες κωδικοποιήσεις αλλά και τη χρήση regular expressions. Το System.Windows που φιλοξενεί διάφορες τεχνολογίες για γραφικά περιβάλλοντα όπως τις Windows Forms και WPF. Το System.XML που υποστηρίζει την επεξεργασία εγγράφων XML. Γλώσσες προγραμματισμού Οι γλώσσες προγραμματισμού είναι θεωρητικά εκτός της έννοιας μιας πλατφόρμας λογισμικού, ωστόσο η σημασία τους στο.net Framework είναι αρκετά μεγάλη. Το.NET υ ποστηρίζει τη χρήση πολλαπλών γλωσσών για τη δημιουργία εφαρμογών και βιβλιοθηκών κλάσεων. Από την πρώτη έκδοση του.νετ, τόσο η Microsoft όσο και τρίτοι πάροχοι προσέφεραν ένα πλούσιο σύνολο γλωσσών συμβατών με το περιβάλλον εκτέλεσης, το σύστημα τύπων και το CLS. Πάνω από 50 γλώσσες έχουν γραφτεί πάνω στο περιβάλλον εκτέλεσης. Οι κύριες γλώσσες που παρέχονται από τη Microsoft σαν κομμάτι του.net Framework SDK ω στόσο είναι τέσσερις: Η Visual Basic.NET: Μια γλώσσα με την οποία εξοικειώνονται αμέσως όσοι έχουν γράψει κλασικά προγράμματα Visual Basic στο παρελθόν και που τώρα στοχεύει στο.net Framework με πλήρη υποστήριξη αντικειμενοστρέφιας. Η C#: Η γλώσσα που αναπτύχθηκε παράλληλα με τη δημιουργία του περιβάλλοντος εκτέλεσης του.νετ και την πρώτη έκδοση των βιβλιοθηκών κλάσεων. Βασίζεται στις αρχές του αντικειμενοστρεφούς προγραμματισμού και η φύση της είναι πολύ πρακτική. Η C++/CLI: αρχικά γνωστή ως Managed Extensions for C++, επιτρέπει την ε κτέλεση C++ κώδικα πάνω στο περιβάλλον εκτέλεσης του.net, παρέχοντας ένα πολύ καλό εργαλείο για την αντιμετώπιση διαλειτουργικών προβλημάων. 19

20 Η F#: η τελευταία προσθήκη στον πυρήνα γλωσσών του.νετ που στοχεύει στην επιστημονική υπολογιστική και συνδυάζει τις αρχές του συναρτησιακού προγραμματισμού με τον πλούτο της βιβλιοθήκης κλάσεων του.νετ. Εκτός των επίσημων γλωσσών της Microsoft, διάφορες άλλες γλώσσες έχουν εισαχθεί στο.νετ Framework. Παραδείγματα αποτελούν η COBOL, η Smalltalk, η Delphi, η APL, η Pascal και άλλες. Το τοπίο των γλωσσών προγραμματισμού είναι πάντα ρευστό και η ενοποιημένη υ ποδομή του.νετ παρέχει έναν ασφαλή τρόπο για την εξυπηρέτηση των αναγκών των διαφορετικών αυτών γλωσσών, δίνοντάς τους τη δυνατότητα να χρησιμοποιήσουν βιβλιοθήκες μεταξύ τους και να χρησιμοποιήσουν τα έτοιμα εργαλεία. Όλα αυτά επιτρέπουν στους προγραμματιστές με διαφορετικές προτιμήσεις σε γλώσσες προγραμματισμού να δουλέψουν μαζί και να επιλέξουν τα σωστά εργαλεία για κάθε έργο. Για παράδειγμα, ενώ η C# είναι μια πολύ καλή γλώσσα γενικού σκοπού για τη δημιουργία εταιρικών εφαρμογών, η F# είναι πιο ελκυστική για την ανάπτυξη επιστημονικών εφαρμογών. Εργαλεία του.νετ Framework Το.ΝΕΤ περιλαμβάνει ένα σύνολο εργαλείων για τη διευκόλυνση της δημιουργίας, εγκατάστασης και διαχείρισης εφαρμογών και components σε αυτό. Τα περισσότερα εργαλεία εγκαθίστανται με την εγκατάσταση του Visual Studio. Όλα τα εργαλεία είναι δυνατόν να εκτελεστούν από τη γραμμή εντολών των Windows εκτός από το εργαλείο Assembly Cache Viewer που πρέπει να χρησιμοποιηθεί από τον Windows Explorer. Ο καλύτερος τρόπος ε κτέλεσης των command line εργαλείων είναι μέσα από το Visual Studio Command Prompt (γνωστό και ως CMD Shell) που παρέχεται σε κάθε Visual Studio από την έκδοση 2005 και μετά. Ακολουθεί μια αναφορά σε επιλεγμένα εργαλεία του.νετ και μια κατηγοριοποίησή τους: Εργαλεία μεταγλώττισης: o Csc.exe (C Sharp Compiler): ο μεταγλωττιστής της C# λαμβάνει αρχεία που περιέχουν κώδικα C# και παράγει εκτελέσιμα αρχεία (exe), dynamic link libraries (dll) ή modules κώδικα (netmodule) Εργαλεία Build, Deployment και Configuration o Ildasm.exe (MSIL Assembler): λαμβάνει ένα protable executable (PE) αρχείο που περιέχει κώδικα στην ενδιάμεση γλώσσα MSIL και παράγει ένα text αρχείο που μπορεί να προωθηθεί στο εργαλείο MSIL Assembler (Ilasm.exe) o Mage.exe (Manifest Generation and Editing): Επιτρέπει τη δημιουργία, επεξεργασία και υπογραφή των manifests μιας εφαρμογής. Εργαλεία αποσφαλμάτωσης (Debugging) o MDbg.exe (.NET Framework Command Line Debugger): Βοηθάει τους προγραμματιστές να εντοπίζουν και να διορθώνουν bugs στα προγράμματα που τρέχουν στο CLR. Αυτό το εργαλείο χρησιμοποιεί το runtime debuggint API. Εργαλεία ασφάλειας o Peverify.exe (PEVerify Tool): βοηθάει στην επιβεβαίωση ότι ο ενδιάμεσος κώδικας MSIL και τα αντίστοιχα μεταδεδομένα καλύπτουν τις απαιτήσεις ασφάλειας. o SignTool.exe (Sign Tool): υπογράφει αρχεία ψηφιακά, επιβεβαιώνει υπογραφές σε αρχεία και τους προσδίδει time stamps. Εργαλεία διαλειτουργικότητας (Interop) o Regasm.exe (Assembly Registration Tool): διαβάσει τα μεταδεδομένα σε ένα assembly και προσθέτει τις απαράιτητες εγγραφές στο registry. Αυτό επιτρέπει στους COM clients να εμφανίζονται σαν κλάσεις του.νετ. Διάφορα άλλα εργαλεία: o SqlMetal.exe (Code Generation Tool): παράγει κώδικα και αντιστοιχήσεις για το LINQ to SQL component του.νετ. 20

21 o Wincv.exe (Windows Forms Class Viewer): εμφανίζει πληροφορίες για μια κλάση ή σύνολο κλάσεων χρησιμοποιώντας το reflection API του CLR Εκδόσεις του.νετ Framework Η Microsoft ξεκίνησε την ανάπτυξη του.νετ Framework στα τέλη της δεκαετίας του 1990 αρχικά με το όνομα Next Generation Windows Services. Στα τέλη του 2000 εκδόθηκε η πρώτη beta έκδοση του.net 1.0. Από τότε έχουν εκδοθεί άλλες τρεις κύριες εκδόσεις και αρκετές δευτερεύουσες ενδιάμεσά τους. Κάθε έκδοση του.νετ περιέχει το CLR σαν κύριο component και περιλαμβάνει επιπρόσθετα components όπως τη βιβλιοθήκη κλάσεων και άλλες managed βιβλιοθήκες. Κάθε νέα έκδοση του.νετ Framework διατηρεί τα στοιχεία των προηγούμενων εκδόσεων και προσθέτει νέα χαρακτηριστικά. Παρόλο που το CLR είναι το κύριο component του.νετ Framework, εκτός από τον αριθμό έκδοσης του.νετ έχει και το δικό του αριθμό έκδοσης. Μερικές εκδόσεις του.νετ περιλαμβάνουν μια νέα έκδοση του CLR, ενώ άλλες χρησιμοποιούν μια παλιότερη. Για παράδειγμα το.νετ 4.0 περιλαμβάνει την τέταρτη έκδοση του CLR ενώ το.νετ 3.5 περιλαμβάνει την δεύτερη έκδοση του CLR. Για κάποιο περίεργο λόγο δεν υπήρχε τρίτη έκδοση του CLR. Η έκδοση του CLR στο οποίο τρέχει μια εφαρμογή μπορεί να προσδιοριστεί λαμβάνοντας την τιμή της property Environment.Version. Οι εκδόσεις του.νετ Framework συνοψίζονται στον παρακάτω πίνακα: Έκδοση.ΝΕΤ Έκδοση CLR Έκδοση Visual Studio Έτος Έκδοσης Περιγραφή VS.NET 2000 Περιείχε την πρώτη έκδοση του CLR και την πρώτη έκδοση των base class libraries VS.NET Περιείχε ενημερώσεις στην ASP.NET και το ADO.NET. Η έκδοση αυτή ενημερώθηκε δυο φορές με το Service Pack 1 και το Service Pack 2. Αυτή η έκδοση επέτρεπε στις εφαρμογές να τρέξουν σε διαφορετικές εκδόσεις του CLR VS VS VS VS Εισήγαγε μια νέα έκδοση του CLR με προσθήκες στις βασικές κλάσεις, όπως τα generics, generic collections και σημαντικές προσθήκες στην ASP.NET. Αυτή η έκδοση ενημερώθηκε με δυο service packs 2007 Η έκδοση αυτή είναι ουσιαστικά η έκδοση 2.0 με την προσθήκη του Windows Presentation Foundation (WPF), Windows Communication Foundation, Windows Workflow Foundation (WF) και του cardspace. Ενημερώθηκε με το SP1 και το SP Προστέθηκαν νέα χαρακτηριστικά όπως τα AJAX enabled websites και η LINQ. Το SP1 πρόσθεσε το.νετ Client Profile, Dynamic Data και άλλες μικρές ενημερώσεις 2010 Περιλαμβάνει μια νέα έκδοση του CLR, επέκταση στις βιβλιοθήκες κλάσεων και νέα χαρακτηριστικά όπως το Managed Extensibility Framework και το dynamic language runtime Δεν χρειάζεται να εγκατασταθούν προηγούμενες εκδόσεις του.net ή του CLR πριν την εγκατάσταση της τελευταίας έκδοσης, αφού κάθε νέα έκδοση είναι θεωρητικά συμβατή με τις παλαιότερες, δηλαδή παρέχει όλα τα απαραίτητα components που χρειάζεται μια εφαρμογή φτιαγμένη σε παλιότερες εκδόσεις. Η συμβατότητα με προηγούμενες εκδόσεις 21

22 (backward compatibility) γενικά, σημαίνει ότι μια εφαρμογή που έχει αναπτυχθεί για μια συγκεκριμένη έκδοση μιας πλατφόρμας θα τρέξει σε επόμενες εκδόσεις της πλατφόρμας. Το.ΝΕΤ Framework προσπαθεί να μεγιστοποιήσει αυτή τη συμβατότητα έτσι ώστε κώδικας γραμμένος σε μια έκδοσή του να μεταγλωττίζεται σε επόμενες εκδόσεις του και binaries που τρέχουν σε μια έκδοση να τρέχουν με την ίδια συμπεριφορά και στις επόμενες εκδόσεις. Ωστόσο, για τη συμβατότητα με προηγούμενες εκδόσεις πρέπει να λαμβάνονται τα παρακάτω υπόψη: Μια εφαρμογή.νετ, προεπιλεγμένα τρέχει στην έκδοση του.νετ για την οποία αναπτύχθηκε. Αν αυτή η έκδοση δεν είναι εγκατεστημένη στον υπολογιστή και το configuration file δεν ορίζει τις υποστηριζόμενες εκδόσεις, μπορεί να προκύψει λάθος στην εκκίνησή της και κάθε προσπάθεια εκτέλεσης της εφαρμογής θα αποτυγχάνει. Είναι δυνατόν να οριστούν συγκεκριμένες εκδόσεις του.νετ στις οποίες θα τρέξει η εφαρμογή, προσθέτοντας ένα ή περισσότερα <supportedruntime> elements στο configuration file της εφαρμογής. Κάθε τέτοιο element προσδιορίζει την υποστηριζόμενη έκδοση με σειρά προτίμησης: το πρώτο προσδιορίζει την πιο επιθυμητή έκδοση και το τελευταίο την λιγότερο επιθυμητή. Ένα component, σε αντίθεση με μια εφαρμογή, δεν μπορεί να ελέγξει την έκδοση του.net Framework στην οποία θα τρέξει. Τα components και οι βιβλιοθήκες κλάσεων φορτώνονται στο πλαίσιο μιας εφαρμογής και κατά συνέπεια τρέχουν στην έκδοση του.νετ στην οποία τρέχει η εφαρμογή. Εξαιτίας του περιορισμού αυτού, είναι σημαντικό να παρέχονται εγγυήσεις συμβατότητας των components με μια έκδοση. Από το.νετ 4.0 και μετά είναι δυνατόν να προσδιορίζουμε το βαθμό στον οποίο ένα component αναμένεται να παραμείνει συμβατό με μια έκδοση εφαρμόζοντας σε αυτό το component, το attribute System.Runtime.Versioning.ComponentGuaranteesAttribute. Η τιμή αυτού του attribute μπορεί να ελεγχθεί από διάφορα εργαλεία για να προσδιορίσουν μια πιθανή παραβίαση της εγγύησης συμβατότητας σε μελλοντικές εκδόσεις του component. To.NET Framework 4.0 είναι συμβατό με εφαρμογές που φτιάχτηκαν με τις εκδόσεις 1.1, 2.0, 3.0 και 3.5. Με άλλα λόγια, εφαρμογές και components που φτιάχτηκαν με προηγούμενες εκδόσεις του.νετ, μπορούν να τρέξουν στο.νετ 4.0. Υπάρχουν, ωστόσο περιπτώσεις στις οποίες αυτή η συμβατότητα μπορεί να σπάσει από ασυνεπείς αλλαγές στο framework ή αλλαγές στις προγραμματιστικές τεχνικές. Για παράδειγμα, βελτιώσεις στο.νετ 4.0 μπορούν να προκαλέσουν συνθήκες συναγωνισμού (race conditions) που δεν προκαλούνταν στις προηγούμενες εκδόσεις. Επίσης κάθε έκδοση του.νετ περιλαμβάνει διορθώσεις bugs και αλλαγές στην ασφάλεια που επηρεάζουν τη συμβατότητα μερικών εφαρμογών ή components. Κατά συνέπεια οι εφαρμογές και τα components πρέπει πάντα να υποβάλλονται σε ελέγχους για να εξασφαλίζεται η συμβατότητά τους με άλλες εκδόσεις του.νετ 2.3. Η γλώσσα προγραμματισμού C# Η C# είναι κατά κύριο λόγο μια αντικειμενοστρεφής γλώσσα προγραμματισμού που ενσωματώνει ωστόσο μερικά χαρακτηριστικά διαφόρων προγραμματιστικών προτύπων. Αναπτύχθηκε στη Microsoft, από μια ομάδα κάτω από την ηγεσία του Anders Hejlberg, σαν μέρος του.νετ Framework Χαρακτηριστικά της γλώσσας C# Η C# είναι μια συνεχώς εξελισσόμενη γλώσσα και με κάθε νέα της έκδοση προστίθενται νέα χαρακτηριστικά και συντακτικό, με μόνιμο στόχο να κάνει τα απλά πράγματα εύκολα, τα δύσκολα πράγματα εφικτά και τα άσχημα πράγματα δύσκολα. Ακολουθεί μια σύντομη επεξήγηση των χαρακτηριστικών της C#. Απλότητα (Simplicity) Η C# είναι μια απλή γλώσσα που μπορεί να χρησιμοποιηθεί χωρίς εντατική εκμάθηση, ενώ ταυτόχρονα είναι εναρμονισμένη με σύγχρονες προγραμματιστικές πρακτικές. Οι θεμελιώδεις αρχές της γλώσσας μπορούν να κατανοηθούν γρήγορα κάτι που σημαίνει ότι οι προγραμματιστές θα είναι παραγωγικοί σε σύντομο χρονικό διάστημα. 22

23 Η C# έχει σχεδιαστεί έτσι ώστε να μειώνεται η πιθανότητα πρόκλησης λαθών από την πολυπλοκότητα του κώδικα, αφού τη μειώνει σε μεγάλο βαθμό με το απλουστευμένο συντακτικό της και την οργάνωση κώδικά της. Αντικειμενοστρέφεια (Object-Orientation) Η C# από τα θεμέλια της σχεδιάστηκε να είναι αντικειμενοστρεφής. Ο αντικειμενοστρεφής προγραμματισμός επικράτησε σαν προγραμματιστικό πρότυπο την προηγούμενη δεκαετία και παραμένει στις πρώτες προτιμήσεις των προγραμματιστών. Οι ανάγκες για κατανεμημένα συστήματα πελάτη εξυπηρέτη συμπίπτουν με την ενθυλάκωση και την ανταλλαγή μηνυμάτων που είναι βασικά χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού. Κατά πολλούς ειδικούς στις γλώσσες προγραμματισμού, η επιτυχής λειτουργία των προγραμματιστικών συστημάτων σε δικτυακά περιβάλλοντα αυξανόμενης πολυπλοκότητας βασίζεται στην αντικειμενοστρέφεια. Η C# παρέχει μια ξεκάθαρη και αποδοτική αντικειμενοστρεφή πλατφόρμα παρέχοντας στους προγραμματιστές μια συλλογή βιβλιοθηκών δοκιμασμένων αντικειμένων που παρέχουν λειτουργικότητα που ποικίλει από απλούς τύπους δεδομένων, σε διεπαφές εισόδου/εξόδου ή δικτυακές και εργαλεία για τη δημιουργία παραθυρικών εφαρμογών. Αυτές οι βιβλιοθήκες μπορούν να προσαρμοστούν στις ανάγκες του προγραμματιστή. Επιπρόσθετα η C# υποστηρίζει και τον προγραμματισμό βασισμένο σε components (component based programming) ο οποίος επιτρέπει τον προσδιορισμό αυτόνομων μονάδων λειτουργικότητας (components) που είναι απομονωμένα και τεκμηριωμένα, παρουσιάζοντας ένα μοντέλο με ιδιότητες, μεθόδους, events και μεταδεδομένα για το component. Η C# υποστηρίζει αυτά τα χαρακτηριστικά άμεσα κάνοντας έτσι τη διαδικασία δημιουργίας και χρήσης των components πολύ εύκολη. Οικειότητα (Familiarity) Στο ξεκίνημα της υλοποίησής της, οι δημιουργοί της τεχνολογίας C# απέρριψαν την ολοκληρωτική χρήση της C++ σαν γλώσσα υλοποίησης. Στη νέα γλώσσα ωστόσο, κράτησαν αρκετά χαρακτηριστικά της C++ αλλά και της Java και αφαίρεσαν την άχρηστη πολυπλοκότητα και των δύο. Έτσι έχοντας κρατήσει αρκετά από τα αντικειμενοστρεφή χαρακτηριστικά και τη γενική φιλοσοφία της C++ αλλά και τη γενική ευκολία της Java βελτιώνοντας ορισμένα σημεία της, είναι σχετικά εύκολη τη «μετακόμιση» στη C# δεδομένου ότι η C η C++ αλλά και η Java διδάσκονται σε μαθήματα εισαγωγής στον προγραμματισμό στις περισσότερες σχολές Πληροφορικής Ιστορικό εκδόσεων της C# Από την πρώτη της έκδοση το 2000, η γλώσσα C# έχει εξελιχθεί αρκετά. Αυτή η εξέλιξη οφείλεται εν μέρει στην προτίμηση που της δείχνουν η προγραμματιστές μεταξύ των γλωσσών στο.νετ. Τα περισσότερα χαρακτηριστικά που προστίθενται αντικατοπτρίζονται στο.net Framework αφού, όπως προαναφέρθηκε, η γλώσσα C# είναι αναπόσπαστο κομμάτι του. C# 2.0 Η ουσιαστικότερη προσθήκη στη C# 2.0 ήταν η υποστήριξη των generics. Το συντακτικό ήταν παρόμοιο με τις C++ templates, αλλά η κύρια διαφορά είναι ότι οι τύποι που δημιουργούνται από τα generics είναι δυναμικοί στη φύση τους, δηλαδή κατασκευάζονται κατά την εκτέλεση σε αντίθεση με άλλες γλώσσες προγραμματισμού, όπως τη C, που τους κατασκευάζουν κατά τη μεταγλώττιση. Στη C# 2.0 προστέθηκε και η υποστήριξη των anonymous μεθόδων. Μια anonymous μέθοδος, η οποία μερικές φορές καλείται και lambda function είναι αρκετά χρήσιμη στη διαχείριση των events. Στη C# 2.0 επίσης, προστέθηκε η υποστήριξη των iterator blocks. Τέτοιες δομές κώδικα χρησιμεύουν στην εύκολη προσπέλαση ενός αντικειμένου που συμπεριφέρεται σαν collection. Τέτοια αντικείμενα πρέπει να υλοποιούν το IEnumerable interface το οποίο περιλαμβάνει την μέθοδο GetEnumerator. 23

24 Τέλος στη C# 2.0 προστέθηκε η υποστήριξη των partial types. Στις προηγούμενες εκδόσεις κάθε κλάση ήταν υποχρεωτικό να ορίζεται στο δικό της αρχείο (το οποίο ονομαζόταν compilation unit). Η απαίτηση αυτή χαλάρωσε με την εισαγωγή των partial τύπων που διευκολύνουν την επέκταση χρήσιμων τύπων δεδομένων που παράγονται αυτόματα από οδηγούς όπως για παράδειγμα κατά τη δημιουργία Windows Forms. C# 3.0 Στην τρίτη έκδοση της C# εισήχθησαν μερικά πολύ χρήσιμα χαρακτηριστικά, τα περισσότερα από τα οποία χρησιμεύουν στην υποστήριξη της Language Integrated Query (LINQ). Όλα ωστόσο μπορούν να χρησιμοποιηθούν ανεξάρτητα. Μια πρώτη αλλαγή στη C# 3.0 είναι η υποστήριξη των τοπικών μεταβλητών με υπονοούμενους τύπους δεδομένων με τη χρήση της λέξης var. Είναι σημαντικό να σημειωθεί ότι αυτές οι μεταβλητές έχουν τύπο δεδομένων ο οποίος όμως προσδιορίζεται κατά την εκτέλεση και όχι κατά τη μεταγλώττιση όπως γίνεται με τις υπόλοιπες μεταβλητές. Άλλη μια χρήσιμη προσθήκη είναι η αυτόματη δημιουργία των properties μιας κλάσης, μειώνοντας έτσι την πιθανότητα πρόκλησης λαθών που οφείλονται σε λάθος υλοποίησή τους, αφού δεν χρειάζεται να προστίθενται χειροκίνητα. Επίσης εισήχθησαν νέα χαρακτηριστικά που βοηθούν στην αρχικοποίηση νέων αντικειμένων με μια σύνθετη πρόταση (compound statement). Στη C# 3.0 εισήχθησαν οι partial methods σαν επέκταση των partial κλάσεων της C# 2.0. Έτσι λοιπόν είναι δυνατόν να δηλωθεί η signature μιας μεθόδου και να αφήνεται στο χρήστη προγραμματιστή η επιλογή της υλοποίησής της. Οι extension methods είναι άλλη μια χρήσιμη προσθήκη στη C# 3.0. Οι extension methods επιτρέπουν την προσθήκη μεθόδων σε υπάρχοντες τύπους δεδομένων χωρίς τη δημιουργία νέων τύπων δεδομένων (μέσω της κληρονομικότητας) ή την ανάγκη μεταγλώττισης και κατά συνέπεια αλλαγής του αρχικού τύπου δεδομένων. Οι extension methods είναι μια ειδική περίπτωση μιας static μεθόδου, αλλά καλούνται σαν να ήταν μέθοδοι στιγμιοτύπου. Ακόμα πιο αξιοπρόσεκτη είναι η υποστήριξη των lambda expressions. Μια lambda expression είναι μια anonymous function που μπορεί να περιέχει expressions και statements που μπορούν να χρησιμοποιηθούν για τη δημιουργία delegates ή τύπους expression tree. Τέλος η σημαντικότερη προσθήκη στη C# 3.0, είναι η LINQ που βασίζεται πάνω στα προηγούμενα χαρακτηριστικά και κυριότερα στις extension methods, τις lambda expressions και τους anonymous τύπους. Εισάγει νέες δεσμευμένες λέξεις για το γράψιμο προτάσεωνερωτήσεων (queries), συνενώνοντας έτσι τον αντικειμενοστρεφή κόσμο με τον κόσμο των δεδομένων. Η LINQ χρησιμοποιείται για την υποβολή ερωτήσεων με τον ίδιο τρόπο σε πολλαπλές και συχνά ετερογενείς πηγές δεδομένων, όπως σε βάσεις δεδομένων, XML εγγράφων ή ακόμα και συλλογές αντικειμένων, ενώ προστίθενται συνεχώς και η δυνατότητα υποβολής ερωτημάτων σε νέες πηγές δεδομένων όπως το Document Object Model. C# 4.0 Οι προσθήκες στην τελευταία έκδοση της C# επικεντρώνονται στην διαλειτουργικότητα. Εισήχθη ο τύπος dynamic που επιτρέπει την παράκαμψη του ελέγχου τύπου κατά τη μεταγλώττιση, διευκολύνοντας έτσι την πρόσβαση σε COM APIs όπως τα APIs για το Office. Άλλο ένα νέο χαρακτηριστικό της C# 4.0 είναι τα named arguments, η δυνατότητα δηλαδή περάσματος παραμέτρων χωρίς να παίζει ρόλο η σειρά εμφάνισής τους. Συχνά οι παράμετροι μιας μεθόδου είναι προαιρετικές. Έτσι με τη χρήση των named παραμέτρων είναι δυνατόν να επιλεχθούν ποιες από τις παραμέτρους θα χρησιμοποιηθούν. Τέλος εισήχθησαν τα χαρακτηριστικά της covariance και contravariance τα οποία επιτρέπουν την έμμεση μετατροπή αναφορών για παραμέτρους τύπου πινάκων, delegates και generics. Με την covariance διατηρούμε την συμβατότητα ανάθεσης ενώ με την contravariance την αντιστρέφουμε. Οι δύο αυτές έννοιες γίνονται αντιληπτές στην πράξη στις επόμενες ενότητες. 24

25 Το πρώτο πρόγραμμα σε C# Η εκμάθηση μιας γλώσσας προγραμματισμού παραδοσιακά ξεκινάει με το πρόγραμμα Hello World!, ένα από τα απλούστερα προγράμματα που μπορούν να δημιουργηθούν. Ο κώδικας του φαίνεται στη λίστα 3.1. Λίστα 2.1 HelloWorld.cs 1. using System; 2. class Helloworld { 3. static void Main(String[] args) { 4. // Εμφάνιση χαιρετισμού στο παράθυρο της κονσόλας 5. Console.WriteLine( Hello World! ); 6. } 7. } Έξοδος Hello, World! Παρόλο που το πρόγραμμα είναι σύντομο, περιλαμβάνει μερικά σημαντικά στοιχεία που είναι κοινά σε όλα τα προγράμματα σε C#. Ας εξετάσουμε κάθε κομμάτι του προγράμματος ξεκινώντας με το όνομά του. Το όνομα ενός προγράμματος C# είναι αυθαίρετο. Αντίθετα με άλλες γλώσσες (όπως η Java) στις οποίες το όνομα του αρχείου είναι σημαντικό, στη C# δεν παίζει κάποιο ρόλο. Ωστόσο καλό είναι να είναι όσο το δυνατόν περιγραφικό για το περιεχόμενό του. Πολλοί προγραμματιστές ακολουθούν τη σύμβαση της Java και ονομάζουν το αρχείο σύμφωνα με την κύρια κλάση που περιέχει. Επίσης τα προγράμματα C# έχουν κατάληξη.cs. Στη γραμμή 1, ορίζεται ότι το πρόγραμμα χρησιμοποιεί το namespace System. Στη C# ένα namespace διατηρεί ένα σύνολο ονομάτων ξεχωριστά από ένα άλλο. Κατά συνέπεια τα ονόματα που ορίζονται στο ένα namespace δεν θα συγχέονται με τα ονόματα που ορίζονται σε ένα άλλο namespace, οπότε στην περίπτωση που είναι ίδια τα ξεχωρίζουμε με το namespace. Το namespace System είναι ένα δεσμευμένο namespace για αντικείμενα της βιβλιοθήκης κλάσεων του.νετ. Η δεσμευμένη λέξη using απλώς ορίζει ότι θα χρησιμοποιηθεί το namespace που ακολουθεί. Σε επόμενες ενότητες θα δούμε πως ορίζουμε τα δικά μας namespaces, μια διαδικασία που είναι απαραίτητη για τη σωστή οργάνωση των προγραμμάτων. Στη γραμμή 2 χρησιμοποιείται η δεσμευμένη λέξη class για να δηλωθεί ότι ορίζεται μια νέα κλάση. Μια κλάση είναι η βασική μονάδα ομαδοποίησης μεταβλητών και μεθόδων, δηλαδή των ιδιοτήτων και των συμπεριφορών μιας αφηρημένης έννοιας. Μετά τη λέξη class ακολουθεί το όνομα της κλάσης, στη συγκεκριμένη περίπτωση Helloworld. Τα περιεχόμενα της κλάσης εσωκλείονται σε αγκύλες ({}). Τα στοιχεία μεταξύ των αγκυλών καλούνται μέλη (members) μιας κλάσης. Προς το παρόν δεν χρειάζεται να ξέρουμε λεπτομέρειες για τις κλάσεις, εκτός από το γεγονός ότι η περισσότερη δραστηριότητα ενός προγράμματος C# συμβαίνει σε αυτές. Στη γραμμή 3 ξεκινά η Main μέθοδος. Μια μέθοδος είναι η βασική μονάδα ομαδοποίησης εντολών και αντιστοιχεί στη συμπεριφορά μιας αφηρημένης έννοιας. Η μέθοδος Main είναι μια ειδική μέθοδος η οποία προσδιορίζει το σημείο έναρξης ενός προγράμματος. Όλες οι εφαρμογές C# ξεκινάνε την εκτέλεσή τους καλώντας τη μέθοδο Main(). Το πλήρες νόημα κάθε τμήματος της γραμμής θα εξεταστεί σε επόμενες ενότητες ωστόσο αναφέρουμε επιγραμματικά τη σημασία τους. Η παράμετρος της μεθόδου String[] args περιέχει τα ορίσματα γραμμών εντολών (command line arguments). Η δεσμευμένη λέξη static προσδιορίζει ότι η μέθοδος Main μπορεί να κληθεί χωρίς την αρχικοποίηση της κλάσης. Όπως θα δούμε σε επόμενη ενότητα, οι περισσότερες μέθοδοι στη C# λειτουργούν μέσα σε αντικείμενα και οι static μέθοδοι δεν είναι συχνές σε μεγάλα προγράμματα. Ωστόσο η main πρέπει να είναι πάντα static γιατί τρέχει πριν το πρόγραμμα μπορέσει να δημιουργήσει αντικείμενα. Η πρώτη γραμμή μέσα στη main (γραμμή 4) είναι ένα σχόλιο. Το σχόλιο αυτό είναι προς όφελος του αναγνώστη του πηγαίου κώδικα για να εξηγήσει τι κάνει η επόμενη εντολή. Κείμενο που ξεκινάει από // αγνοείται από το μεταγλωττιστή. 25

26 Οι εντολές στο κυρίως μέρος (body) της μεθόδου Main (δηλαδή οι εντολές μεταξύ των αγκίστρων {}) εκτελούνται μία προς μία. Κάθε εντολή λήγει με ένα ελληνικό ερωτηματικό (;). Η μέθοδος έχει μόνο μια εντολή στη γραμμή 5. Η εντολή αυτή εκτυπώνει μια γραμμή κειμένου και συγκεκριμένα την Hello, World!. Ωστόσο υπάρχουν πολλά μέρη όπου θα μπορούσε το πρόγραμμα να στείλει αυτό το κείμενο: σε ένα παράθυρο, σε ένα αρχείο ή σε έναν δικτυωμένο υπολογιστή στην άλλη άκρη του κόσμου. Χρειάζεται επομένως να ορίσουμε ότι ο προορισμός είναι η κονσόλα (Console) δηλαδή το παράθυρο της γραμμής εντολών. Το παράθυρο κονσόλας αναπαρίσταται στη C# με την κλάση Console. Για να χρησιμοποιήσουμε μια κλάση όπως την Console, προσδιορίζουμε τι θέλουμε να κάνουμε με αυτήν. Στην περίπτωση της Λίστας 2.1 θέλουμε να εκτυπώσουμε μια γραμμή κειμένου. Η static μέθοδος WriteLine πραγματοποιεί αυτήν την ενέργεια. Δεν χρειάζεται να υλοποιήσουμε αυτήν τη μέθοδο καθώς είναι έτοιμη, απλώς πρέπει να την καλέσουμε. Όταν καλούμε μεθόδους στη C# πρέπει να προσδιορίσουμε τρία πράγματα: 1. Την κλάση ή το αντικείμενο που θα χρησιμοποιήσουμε (σε αυτήν την περίπτωση την κλάση Console) 2. Το όνομα της μεθόδου που θα χρησιμοποιήσουμε (σε αυτή την περίπτωση την WriteLine). 3. Ένα ζευγάρι παρενθέσεων, που περιέχουν κάθε άλλη πληροφορία που χρειάζεται η μέθοδος (σε αυτήν την περίπτωση το κείμενο Hello, World! ). Αυτή η πληροφορία καλείται παράμετρος της μεθόδου. Μια ακολουθία χαρακτήρων μέσα σε ανωφερή εισαγωγικά (quotation marks) γνωστά και ως διπλές αποστρόφους καλείται string. Πρέπει να εσωκλείουμε το περιεχόμενο του string σε εισαγωγικά για να μπορεί ο compiler να τα διακρίνει από τις υπόλοιπες λέξεις και κυρίως τις δεσμευμένες λέξεις της γλώσσας. Συνδυάζοντας το παράδειγμα με όσα αναφέραμε στην αρχή της παραγράφου 3.1 μπορούμε να καταλήξουμε στη συνηθέστερη γενική δομή ενός προγράμματος κονσόλας σε C#: //δήλωση namespace των οποίων τις κλάσεις θα χρησιμοποιήσουμε using anexamplenamespace; //δήλωση namespace στο οποίο θα ανήκουν οι παρακάτω κλάσεις namespace anothernamespace; //δήλωση της public κλάσης class RandomClass { static void main(string[] args) { // Κλήση εντολών } } Μεταγλώττιση και εκτέλεση ενός προγράμματος Ανεξάρτητα του περιβάλλοντος ανάπτυξης λογισμικού που μπορεί να χρησιμοποιεί ένας προγραμματιστής, ακολουθείται πάντα ο κύκλος ανάπτυξης edit compile run. Το κύριο περιβάλλον ανάπτυξης εφαρμογών στη C# είναι φυσικά το Visual Studio. Για την εκτέλεση των περισσότερων παραδειγμάτων σε αυτό το σεμινάριο αρκεί οποιαδήποτε έκδοσή του, ωστόσο όσες χρησιμοποιούν στοιχεία της C# 4.0, χρειάζονται μια από τις εκδόσεις του Visual Studio Χρησιμοποιώντας το Visual Studio υπάρχουν δύο προσεγγίσεις για τη δημιουργία, μεταγλώττιση και εκτέλεση ενός προγράμματος. Η πρώτη είναι με τη χρήση του Visual Studio IDE και η δεύτερη με τον μεταγλωττιστή γραμμής εντολών, csc.exe. Παρόλο που το Visual Studio IDE είναι αυτό που πιθανότερα θα χρησιμοποιήσει ένας προγραμματιστής στα διάφορα έργα είναι πιθανό κανείς να βρει απλούστερη τη χρήση του μεταγλωττιστή γραμμής εντολών, ειδικά για μικρά προγράμματα, όπως τα περισσότερα παραδείγματα εδώ, ε πειδή δεν χρειάζεται να φτιάχνονται ολόκληρα projects. Χρήση του Command-Line Compiler Βήμα 1 Γράψιμο κώδικα Αρχικά γράφουμε το πρόγραμμα χρησιμοποιώντας έναν text editor και το αποθηκεύουμε σε ένα αρχείο με την κατάληξη.cs. Αυτό το αρχείο που είναι ακόμα σε αναγνώσιμη 26

27 από τον άνθρωπο μορφή καλείται πηγαίο αρχείο (source file). Για τη γραφή μπορούμε να επιλέξουμε έναν απλό text editor όπως το notepad ή το notepad++. Βήμα 2 Μεταγλώττιση σε ενδιάμεση γλώσσα Το επόμενο βήμα είναι η μεταγλώττιση του πηγαίου αρχείου. Για τη μεταγλώττιση χρησιμοποιούμε τον μεταγλωττιστή csc.exe στη γραμμή εντολών των Windows (Command Prompt). Ο μεταγλωττιστής βρίσκεται συνήθως στο directory C:\Windows\Microsoft.NET\Framework\v<αριθμός έκδοσης>. Με την επιτυχή ολοκλήρωση της μεταγλώττισης, δημιουργείται η μεταγλωττισμένη έκδοση του πηγαίου κώδικα σε μη αναγνώσιμη από τον άνθρωπο μορφή, την ενδιάμεση γλώσσα IL. Το αρχείο που περιέχει την IL καλείται assembly και έχει την κατάληξη.exe (αν προοριζόταν για εκτελέσιμο) ή.dll (αν προοριζόταν για βιβλιοθήκη στην περίπτωση αυτή ο μεταγλωττιστής χρειάζεται επιπρόσθετες παραμέτρους) ενώ το πρόθεμα είναι το ίδιο με του πηγαίου αρχείου. Όταν προκύπτουν λάθη στο πρόγραμμα θα εμφανίζεται ένα μήνυμα λάθους, αντίθετα δεν θα εμφανίζεται τίποτα ή θα εμφανίζεται ένα μήνυμα επιτυχίας. Τα λάθη που εντοπίζονται από τον μεταγλωττιστή καλούνται λάθη κατά τη μεταγλώττιση (compilation errors). Τέτοια λάθη προφανώς είναι τα ευκολότερα στον εντοπισμό και συνήθως γίνονται εξαιτίας της παράβασης των συντακτικών κανόνων της γλώσσας. Βήμα 3 Εκτέλεση Το τελευταίο βήμα είναι η εκτέλεση του assembly. Εκτελούμε ένα εκτελέσιμο assembly πολύ απλά καλώντας το με το όνομά του ή με διπλό κλικ στο εικονίδιό του. Τότε το CLR αναλαμβάνει να διατρέξει το αρχείο και να εκτελέσει τις εντολές του. To CLR χρησιμοποιεί αποκλειστικά τον just in time compiler για τη μεταγλώττιση της ενδιάμεσης γλώσσας σε γλώσσα μηχανής, καθιστώντας έτσι την εκτέλεση γρηγορότερη. Λάθη που εντοπίζονται από τον διερμηνευτή καλούνται λάθη κατά την εκτέλεση (runtime errors) και συνήθως οφείλονται σε σφάλματα στη λογική του προγράμματος. Χρήση του Visual Studio Το Visual Studio είναι το Integrated Development Environment (IDE) της Microsoft. Δίνει τη δυνατότητα επεξεργασίας, μεταγλώττισης, εκτέλεσης και αποσφαλμάττωσης του κώδικα ενός προγράμματος (μεταξύ άλλων) μέσα από το περιβάλλον. Το Visual Studio διευκολύνει σημαντικά την ανάπτυξη εφαρμογών και είναι ιδιαίτερα αποτελεσματικό σε μεγάλα έργα. Τα βήματα που χρειάζονται για την επεξεργασία, μεταγλώττιση και εκτέλεση ενός προγράμματος C# με το Visual Studio 2010 περιγράφονται παρακάτω. Για τα βήματα αυτά έγινε χρήση του Visual Studio 2010, Visual C# 2010 Express. Βήμα 1 Δημιουργία ενός νέου project Δημιουργούμε ένα νέο κενό project επιλέγοντας File New Project. Στη συνέχεια επιλέγουμε Empty Project από το μενού Installed Templates Visual C# και πατάμε ΟΚ: 27

28 Εικόνα 2.2 Δημιουργία ενός κενού project από το Visual Studio Μόλις έχειι δημιουργηθεί το νέο project και το Visual Studio θα πρέπει να φαίνεται όπως στην παρακάτω εικόνα: Εικόνα 2.3 Η πρώτη εικόνα μετά τη δημιουργία ενός νέου project Αν για οποιονδήποτε λόγο δεν φαίνεται το παράθυρο Solution Explorer, μπορεί να ενεργοποιηθεί από το μενού View. Βήμα 2 Δημιουργία ενός πηγαίου αρχείου και προσθήκη π κώδικα Σε αυτό το σημείο το project είναι άδειο και χρειάζεται να του τοποθετήσουμε ένα πηγαίο αρχείο. Αυτό γίνεται πατώντας δεξί κλικ στο όνομα του project (το οποίο είναι Pro Θα φαί ject1 σε αυτό το παράδειγμα) στο παράθυρο Solution Explorer και επιλέγοντας Add. νεται κάτι σαν το παρακάτω: 28

29 Εικόνα 2.4 Προσθήκη ενός νέου item απόό το solution explorer Επιλέγοντας New Item, εμφανίζεται το παράθυρο διαλόγου Addd New Item. Από αυτό, επιλέγουμε Code File από το μενού Installed Templates Visual C# Items και πατάμε το κου μπί Add. Εικόνα 2.5 Το παράθυρο διαλόγου κατά την προσθήκη π ενός νέου Item Το Visual Studio θα πρέπει να φαίνεται ως εξής: 29

30 Εικόνα 2.6 Το Visual Studio μετά την προσθήκη ενός νέου κενούύ αρχείου κώδικα Το επόμενο βήμα είναι η προσθήκη του κώδικα. Αντιγράφουμε τον κώδικα της τ Λίστας 2.1 στο κύριο παράθυρο (χωρίς τους αριθμούς των γραμμών). Όταν τελειώσουμε το Visual Studio θα πρέπει να ν φαίνεται ως εξής: Εικόνα 2.7 Προσθήκη κώδικα στο νέο αρχείο Βήμα 3 Μεταγλώττιση η του προγράμματος Μεταγλωττίζουμε το πρόγραμμα επιλέγοντας Build Solution από το μενού Build. Βήμα 4 Εκτέλεση του προγράμματος Εκτελούμε το πρόγραμμα επιλέγοντας Start Without Debuggingg από το μενού Debug. Κατά την εκτέλεση του προγράμματος θα φανεί το παρακάτω παράθυρο: 30

31 Εικόνα 2..8 Το αποτέλεσμα της εκτέλεσης του προγράμματοπ ος Hello World Παρόλο που οι προηγούμενες οδηγίες είναι αρκετές για τη μεταγλώττιση και εκτέλετο Visual ση των παραδειγμάτων σε αυτό το σεμινάριο, αν θέλουμε να χρησιμοποιήσουμε Studio σαν το κύριο περιβάλλον προγραμματισμού, θα πρέπει π να εξοικειωθούμε με τις δυδιαχείριση μεγάλων έργων. Αξίζει το χρόνο και την προσπάθεια για να εντρυφήσει κανείς στη χρήση νατότητες και τα χαρακτηριστικχ κά του. Είναι ένα πολύ δυνατό IDE και βοηθάει στη του Visual Studio, αφού είναι το εργαλείο που χρησιμοποιείται στη συντριπτική πλειονότητα των περιπτώσεωνν ανάπτυξης έργων στο.νετ στους περισσότερους οργανισμούς. 31

32 3. Microsoft Visual Studio Έχοντας δει τη δημιουργία και εκτέλεση ενός απλού προγράμματος με τον command line compiler και έναν απλό κειμενογράφο σαν το Notepad μπορούμε να φανταστούμε τι γίνεται στο σενάριο που πρέπει να δουλέψουμε σε ένα project που περιλαμβάνει χιλιάδες γραμμές κώδικα. Είναι προφανές πως θα ήταν υπερβολικά δύσκολο να υλοποιήσουμε μια εφαρμογή ακολουθώντας αυτή τη διαδικασία. Ο απλός κειμενογράφος αγνοεί τη σύνταξη του κώδικα και δεν μπορεί να κάνει διαχωρισμό μεταξύ λέξεων που έχουν ειδική σημασία για τη γλώσσα. Ο προγραμματιστής θα έπρεπε να συντάξει τον κώδικα χωρίς κανένα ουσιαστικό βοήθημα από τον κειμενογράφο, στη συνέχεια να τον μεταγλωττίσει φεύγοντας από αυτόν και πηγαίνοντας σε κάποιο άλλο παράθυρο (του command line), ενώ στην περίπτωση που υπήρχαν λάθη, θα έπρεπε να τα εντοπίσει και να τα διορθώσει ελέγχοντας μια μια τις λέξεις του κώδικα που βρίσκονται κοντά στη γραμμή που του υπέδειξε ο compiler. Κάτι τέτοιο, όπως είναι λογικό, είναι εντελώς αντιπαραγωγικό. Για το λόγο αυτό αναπτύχθηκαν τα Ενιαία Περιβάλλοντα Υλοποίησης (Integrated Development Environments). Το Visual Studio είναι το Integrated Development Environment της Microsoft για την ανάπτυξη εφαρμογών που στοχεύουν στο.net Framework και άλλες πλατφόρμες της Microsoft: από εφαρμογές κονσόλας (console applications) μέχρι web services και εγγενή κώδικα (native code). Το Visual Studio περιλαμβάνει πλήθος εργαλείων για την υποστήριξη της ανάπτυξης εφαρμογών από τα πρώτα στάδια μέχρι και τα τελικά. Περιλαμβάνει έναν επεξεργαστή κώδικα (code editor) με αυτόματη συμπλήρωση (IntelliSence), που επιταχύνει το γράψιμο και ενσωματώνει έναν debugger (αποσφαλματωτή) για τον άμεσο εντοπισμό σφαλμάτων. Άλλα εργαλεία περιλαμβάνουν την σχεδίαση παραθυρικών εφαρμογών και τη σχεδίαση κλάσεων και βάσεων δεδομένων, ενώ μπορεί να επεκταθεί με τα διάφορα επιπρόσθετα εργαλεία που κυκλοφορούν από τη Microsoft ή τρίτους παρόχους Εκδόσεις του Visual Studio Υπάρχουν πολλαπλές εκδόσεις του Visual Studio. Τα παραδείγματα του σεμιναρίου αυτού όμως βασίζονται στο Visual C# 2010 Express Edition το οποίο διατίθεται δωρεάν. Ω στόσο ας δούμε τι προσφέρουν οι υπόλοιπες εκδόσεις Visual Studio Express Οι εκδόσεις Visual Studio Express είναι ένα σύνολο ελαφρών ανεξάρτητων IDEs που παρέχονται σαν απογυμνωμένες εκδόσεις του Visual Studio δωρεάν, ανά πλατφόρμα και ανά γλώσσα. Πιο συγκεκριμένα οι εκδόσεις περιλαμβάνουν τα εργαλεία ανάπτυξης για τις αντίστοιχες πλατφόρμες (web, windows, phone) ή για τις αντίστοιχες γλώσσες (VB, C#). Το Visual Studio Express περιλαμβάνει μόνο ένα υποσύνολο των εργαλείων που παρέχονται στις άλλες εκδόσεις. Επίσης δεν υποστηρίζει plug ins. Οι μεταγλωττιστές για 64 bit αρχιτεκτονικές δεν συμπεριλαμβάνονται στις εκδόσεις express, ωστόσο μπορούν να εγκατασταθούν ξεχωριστά. Οι εκδόσεις express στοχεύουν στην εκπαίδευση και στους χομπίστες. Τέλος οι express εκδόσεις δεν χρησιμοποιούν την πλήρη MSDN Library αλλά την MSDN Essentials Library Visual Studio LightSwitch Το Visual Studio LightSwitch είναι ένα απλοποιημένο IDE που επιτρέπει τη δημιουργία εταιρικών εφαρμογών γρήγορα και εύκολα για το desktop ή το cloud. Οι εφαρμογές που παράγονται είναι αρχιτεκτονικά 3 επιπέδων: η διεπαφή χρήστη τρέχει σε Microsoft Silverlight, η λογική και το επίπεδο πρόσβασης δεδομένων βασίζεται σε WCF RIA Services και το Entity Framework ενώ φιλοξενείται στην ASP.NET. Επίσης υποστηρίζει και τον SQL Server αλλά και το Microsoft SQL Azure για την αποθήκευση δεδομένων. Περιλαμβάνει περιβάλλο 32

33 ντα σχεδίασης για το σχεδιασμό οντοτήτωνν και συσχετίσεων αλλά και γραφικών διεπαφών. Η λογική της εφαρμογής μπορεί να γραφτεί σε Visual Basic ή C#. Η έκδοση αυτή μπορεί να εγκατασταθεί αυτόματα ή μέσαα στο Visual Studio Professional Visual Studio Professionall Το Visual Studio S Professional παρέχει ένα IDE για όλες τις υποστηριζόμενεςς γλώσσες στο.net. Απλουστεύει τη δημιουργία, την αποσφαλμάτωση και την εγκατάσταση εφαρμο Η υπο γών σε πολλαπλές πλατφόρμες, που συμπεριλαμβάνουνν το SharePoint και το Cloud. στήριξη στο MSDN διατίθεται στην έκδοση Essentials ή στην σ πλήρη έκδοση, ανάλογα με την άδεια που αγοράστηκε. Υποστηρίζει την επεξεργασία XML και XSLT και μπορεί να δημιουργήσει πακέτα εγκατάστασης που χρησιμοποιούν τις τεχνολογίες ClickOnce και MSI. Συμπερι λαμβάνει εργαλεία όπως τον Server Explorer για την ενοποίηση με τονν SQL Server Visual Studio Premium Η έκδοση Premium είναι ένα πλήρες σύνολο εργαλείων που απλουστεύει την ανά πτυξη εφαρμογώνν ατομικά αλλά και στα πλαίσια ομάδων ανάπτυξης. Ουσιαστικά περιλαμ του κώ βάνει όλα τα εργαλεία της έκδοσης Professional αλλά και εργαλεία γιαα την ανάλυση δικα, εργαλεία για profiling αλλά και για database unit testing Visual Studio Ultimate Η έκδοση Ultimate αποτελεί μετονομασία της έκδοσης Team Suite. Η έκδοση αυτή παρέχει ένα σύνολο εργαλείωνν για την υποστήριξη της συνεργατικήςσ ς ανάπτυξης έργων έ στο.νετ. Επιπρόσθετα των χαρακτηριστικών του Visual Studio Premium,, συμπεριλαμβάνονται και εργαλεία για την τ ανάπτυξη βάσεων δεδομένων, την ανάλυση α του κώδικα, την αρχιτεκτο νική μιας εφαρμογής, τη δοκιμή αλλά και εργαλεία reporting Εγκατάσταση Για να εγκαταστήσουμε το Visual C# 2010 Express στον υπολογιστή μας ακολουθούμε τα επόμενα βήματα: 1. Έχοντας πρόσβαση στο Web, από το website της Microsoft για το Visual C# 2010 Express κατεβάζουμεε τον οδηγό εγκατάστασης του Visual C# 2010 Express (vcs_web.exe). 2. Στην ερώτηση αν θέλουμε να εκτελέσουμε ή ναα αποθηκεύσουμε το vcs_web.exe, επιλέγουμε Run αν θέλουμε να εγκαταστήσουμε άμεσα την εφαρμογή ή Save αν θέλουμε να την εγκαταστήσουμεε αργότερα. Στη Σ δεύτε ρη περίπτωση πρέπει να θυμηθούμε να έχουμε πρόσβαση στο Internet. 33

34 3. Αφού φορτώσει τα αρχεία που χρειάζεται, ο οδηγός εγκατάστασης εμφανίστείλουμε πληροφορίες για την εγκατάσταση στη Microsoft. ζει ένα μήνυμαα καλωσορίσματος όπου επιλέγουμε αν θέλουμε να 4. Στη συνέχεια επιλέγουμε αν αποδεχόμαστε τους όρους της άδειας χρήσης της εφαρμογής. 5. Στη συνέχεια επιλέγουμε τα επιπρόσθεταα προϊόντα που θέλουμε να εγκατακαι κ β) Mi σταθούν. Οι διαθέσιμες επιλογές είναι α) Microsoftt Silverlight crosoft SQL Server 2008 Express Service Pack P 1. Στα πλαίσια του σεμιναρίου 34

35 δεν θα διδαχθεί η τεχνολογία Silverlight οπότε μπορούμε να μην την τ επιλέξουμε για εγκατάσταση. Αντίθετα θα χρειαστούμε τον SQL Server 2008 Ex press οπότε πρέπει να τον επιλέξουμε γιαα εγκατάσταση. 6. Έπειτα επιλέγουμε που θέλουμε να εγκαταστήσουε υμε το Visual Studio Express. Αν δενν έχουμε κάποιο συγκεκριμένο λόγο, επιλέγουμε την προεπι έχουμε λεγμένη θέση και πατάμε το κουμπί Install, αφού βεβαιωθούμε ότι διαθέσιμο τον απαραίτητο για την εφαρμογή χώρο στο σκληρό δίσκο. Στο παράθυρο αυτόό βλέπουμε και μια επισκόπηση του τι θα εγκατασταθεί στον υπολογιστή μας. 7. Στη συνέχεια ο οδηγός εγκατάστασης κατεβάζει κ καιι εγκαθιστά τα τ αρχεία που χρειάζονται. 35

36 3.3 Το περιβάλλονν του Visual C# 2010 Express 8. Κατά την ολοκλήρωσή της εγκατάστασης,, ο οδηγός εμφανίζει μήνυμα επιτυ χίας. Το Visual Studio Express είναι έτοιμοο για χρήση. Έχοντας εγκατεστημένοο το Visual Studio μπορούμε να το ξεκινήσουμε επιλέγοντας διαδοχικά Start All Programs Microsoft Visual Studio 2010 Express Microsoft Visual C# 2010 Express. Η αρχική σελίδα θα φαίνεται ως εξής: Εικόνα 3.1 Η αρχική σελίδα του Visual C# 2010 Express Προεπιλεγμένα, όταν ξεκινάμε το Visual Studio εμφανίζεται ε μια σελίδα γνωστή ως Startt Page. Σε αυτήν εμφανίζονται μηνύματα καλωσορίσματος, βίντεοο με οδηγούςς και πληγια γ τη λή ροφορίες όπως τα projects σταα οποία δουλεύαμε τελευταία αλλά και μια επιλογή ψη των τελευταίων νέων μέσαα από RSS Feeds. Στην έκδοση express, ωστόσο δεν μπορούμε να ρυθμίσουμε τη συμπεριφορά της. Ακολουθεί μια αναφορά σε ορισμένα από τα τ βασικά στοιχεία του Visual C# 2010 Express. Αρκετά στοιχεία ωστόσο έχουν αφεθεί σκόπιμα για να περιγραφτούν στις ενότητες που τους αντιστοιχούν Ο Solution Explorer Όταν δημιουργούμε μιαα νέα, ανοίγουμε μια υπάρχουσα εφαρμογή, ή ακόμα και ένα μόνο αρχείο, το Visual Studio 2010 χρησιμοποιεί την έννοια του solution (λύσης) για γ να ορ κα γανώσει τα πάντα. Συνήθως ένα solution αποτελείται από ένα ή περισσότερα projects, θένα από τα οποία περιλαμβάνει πολλαπλά άλλα αρχεία. Το παράθυρο εργαλείου του Soluτων pro tion Explorer (Ctrl+Alt+L) παρέχει μια βολική οπτική αναπαράσταση του solution, jects και των αρχείων, όπως αυτή της εικόνας παρακάτω. Σε αυτήν την εικόνα μπορούμε να 36

37 δούμε τρία projects σε μια δεντρική μορφή. Κάθε project συνοδεύεται από ένα εικονίδιο που συνήθως υποδεικνύει καιι το είδος του project αλλάά και τη γλώσσα προγραμματισμού στην οποία είναι γραμμένο. Υπάρχουν και εξαιρέσεις σεε αυτόν τον κανόνα όπωςς τα setup projects που δεν έχουν έ κάποια α γλώσσα. Εικόνα 3.2 Το παράθυρο του solution explorerr Ένας κόμβος ξεχωρίζει, γιατί το font του είναι bold. Αυτό υποδεικνύει ότι το τ project είναι το startup project, δηλαδή αυτό που θα τρέξει ότανν επιλέξουμε Debug Start Debug project ging ή πιέσουμε το τ F5. Για να αλλάξουμε το startup project, κάνουμεε δεξί κλικ στο που θέλουμε να θέσουμε σανν startup και επιλέγουμε Set S as StartUpp Project. Είναι επίσης δυνατό να θέσουμε πολλαπλάά projects σαν startup από το διάλογο Solution Properties που μπορούμε να βρούμε επιλέγοντας Properties πατώντας δεξί δ κλικ στον κόμβο Solution. Η γραμμή εργαλείων στην κορυφή του Solution Explorer E επιτρέπει την προσαρμογή της εμφάνισης των περιεχομένων του παραθύρου και δίνει συντομεύσεις στις διάφορες ό ψεις των περιεχομένων. Για παράδειγμα το κουμπί Showw All Files, επεκτείνει το solution εμ Ένα φανίζοντας επιπρόσθετα αρχεία και φακέλους που δενν εμφανίζονται προεπιλεγμένα. πράγμα που πρέπει να θυμόμαστε είναι ότι αν αλλάξει κάτι από το file system, οι αλλαγές δεν θα φαίνονται άμεσα στον Solution Explorer. Το κουμπί Refresh ανανεώνει τα αρχεία που φαίνονται έτσι ώστε να είμαστεε σίγουροι ότι βλέπουμε ταα σωστά αρχεία. Εκτός από έναν βολικό τρόπο εμφάνισης των projects και των διαφόρων items, ο So του item lution Explorer έχει ένα δυναμικό μενού που προσαρμόζεται ανάλογαα με το είδοςς που επιλέγεται για να μας δώσει την πρόσβαση στις πιο συχνές εργασίες, όπως το να κά manag νουμε build το solution ή ένα μεμονωμένο project, να χειριστούμε τονν configuration er του build και να ανοίγουμε αρχεία. Οι παραλλαγές του μενού αυτού φαίνονταιι στην πα ρακάτω εικόνα. Εικόνα 3.3 Οι παραλλαγές του μενού που εμφανίζεται με δεξί κλικκ για διάφορους κόμ βους του solution explorer 37

38 Οι πρώτες επιλογές στοο αριστερό και το κεντρικό μενού σχετίζονται με το building ολόκληρου του solution ή ενόςς μεμονωμένου project. Στις περισσότερες περιπτώσεις, το να επιλέγουμε το Build είναι η πιοο αποδοτική επιλογή, γιατί build γίνεται μόνο στα projects που έχουν αλλάξει. Υπάρχουν περιπτώσεις όμως που χρειάζεται να κάνουμε Rebuild, κάτι που σημαίνει ότι θα γίνει build σε όλα τα σχετικά projects ανεξαρτήτως τηςς κατάστασής τους. Προσθήκη νέων Projects και Items Μια από τις πιο συνηθισμένες ενέργειες που γίνονται με τον Solution Explorer είναι η προσθήκη, η αφαίρεση και η μετονομασία των projects και των items. Για την προσθήκη ε νός νέου project σε μια υπάρχουσα solution, επιλέγουμεε Add Neww Project από το μενού που εμφανίζεται με δεξί κλικ στον κόμβο Solution. Αυτό εμφανίζει τοο παρακάτω παράθυρο διαλόγου. Οι επιλογές μπορούν να ταξινομηθούν ως προς το όνομα. Ο χώρος στα δεξιά εμ του. φανίζει πληροφορίες για το επιλεγμένο project, όπως τον τύπο του και την περιγραφή Στο Visual C# 2010 Express ο χώρος Installed Templates περιλαμβάνει ένα υποσύνολο των templates των εμπορικών εκδόσεων του Visual Studio και κ φυσικά μόνο για τη γλώσσα C#. Με την επιλογή των τ Online Templates μπορούμε να ταξινομήσουμε και να αναζητήσουμε templates με τον ίδιο τρόπο που κάνουμε με τα Installed Templates,, αλλά με περισσότερα κριτήρια. Μετά την προσθήκη ενός ή περισσοτέρων projects, θα χρειαστεί η προσθήκη ενός ή περισσοτέρων items μέσα στο project αυτό.. Είναι σημαντικό να προσέξουμε τη διαφορά με αρχείο ταξύ ενός item και ενός αρχείου. Παρόλο που αρκετά templates περιέχουν μόνο ένα υπάρχουν και ορισμένα που περιέχουν πολλαπλά. Επιλέγοντας τον κόμβο ενός project, πα που τάμε δεξί κλικ για να εμφανιστεί το μενού και από εκεί επιλέγουμε ε Add. Στο υπο μενού εμφανίζεται επιλέγουμε New Item για να εμφανιστεί το παράθυρο π διαλόγου Add New Item. Το παράθυρο αυτό είναι όμοιοο με το παράθυρο διαλόγου για την προσθήκη ενός νέου pro το είδος ject. Στην αριστερή πλευρά υπάρχει η λίστα με τα Installed Templates που αφορούνν του project που έχουμε έ επιλέξει η οποία μας επιτρέπει να αναζητήσουμε το item που ψά από τρί χνουμε από τη λίστα, αλλά και να δούμε τις online templates που έχουν παραχθεί τους παρόχους. Εικόνα 3.4 Παράθυρο διαλόγου για τη δημιουργία ενός νέου project 38

39 Εικόνα 3.5 Παράθυρο διαλόγου για την προσθήκη ενός νέου Item Προσθήκη αναφορών Ένας από τους τ τρόπους με τους οποίους το Visual Studio υποστηρίζει την επαναχρη αναφορών (references). Μια αναφορά, ουσιαστικά επιτρέπει στον compiler να αναγνωρίσει τύπους δε σιμοποίηση των componentss είναι με τον μηχανισμό της προσθήκης δομένων, ιδιότητες, πεδία και μεθόδους έτσι ώστε να γίνει build. Αν χρειαστεί να χρησιμο θα ποιήσουμε μια κλάση ενός τρίτου παρόχου, ή ακόμα και κ ένα δικό μας.net assembly χρειαστεί να προσθέσουμε μιαα αναφορά προς αυτό. Αυτόό γίνεται απόό το μενού που εμφανί αυτή ζεται με δεξί κλικ σε κάποιο κόμβο project και την επιλογή Add Reference. Η επιλογή εμφανίζει το παρακάτω παράθυρο διαλόγου. Εικόνα 3.6 Παράθυρο διαλόγου για την προσθήκη μιας αναφοράς Κατά το άνοιγμα του παραθύρου αυτού, το Visual Studio αναζητά στον τοπικό υπολο με τις γιστή, την Global Assembly Cache και το ανοιχτό solutionn και κατασκευάζει μια λίστα γνωστές βιβλιοθήκες που μπορούν να προστεθούν. Αυτές περιλαμβάνουν και τις αναφορές του.net και του COM που εμφανίζονται σε διαφορετικάά tabs, αλλά και αυτές τωνν projects και των πρόσφαταα χρησιμοποιημένων αναφορών. Αν το component που θέλουμε να χρησιτο τ εντοπί μοποιήσουμε δενν βρίσκεται σε κάποια από αυτές τις λίστες τότε μπορούμε να σουμε μέσω του Browse tab κατευθείαν από το file system. Είναι δυνατό να προσθέσουμε αναφορά σε κανονικά projects μέσα στο τρέχον soluπροσθήκη έχει το πλεονέκτημα ότι μπορούμε να κάνουμε ευκολότερα debug και σιγουρευόμαστε ότι tion, αντί να αναφερθούμε σταα μεταγλωττισμένα binary components.. Μια τέτοια χρησιμοποιούμε την τ τελευταίαα έκδοση όλων των components. Προσθήκη αναφορών σε services Ένας άλλοςς τύπος αναφορών που μπορούμε να προσθέσουμε π σε ένα project από το Visual Studio είναι η αναφορέςς σε services. Πατώντας δεξί κλικ σε οποιονδήποτε κόμβο proδιαλόγου ject εμφανίζεται η επιλογή Add Service Reference. Αυτήή εμφανίζει τοο παράθυρο 39

40 Add Service Reference, το οποίο φαίνεται στην παρακάτω εικόνα. Πατώντας το κουμπί Dis Ser cover εμφανίζονται τα πιθανά services που υπάρχουν στο τρέχον Solution στην περιοχή vices. Στην περιοχή Operationss εμφανίζονται οι διαθέσιμες λειτουργίες που παρέχονται από μια υπηρεσία. Ακριβώς από κάτω εμφανίζεται μια περιοχή κειμένου όπου εμφανίζονται τα μηνύματα επιτυχίας ή αποτυχίας κατά τη σύνδεση με τηνν επιλεγμένη υπηρεσία. Στην κάτω αριστερά γωνία του παραθύρου διαλόγου υπάρχειι το κουμπί Advanced. Το παράθυρο διαλόγου Service Reference Settings που εμφανίζεται επιτρέπει τη ρύθμιση των τύπων που ορίζονται σαν κομμάτι της αναφοράς. Προεπιλεγμένα, υποτίθεται ότι οι τουπηρεσία. Αν δεν ισχύει κάτι τέτοιο, μπορούμε να προσδιορίσουμεε τις τιμές στην περιοχή του διαλό πικοί τύποι δεδομένων αντιστοιχίζονται σε αυτούς που δημοσιεύονται από την γου αυτού Data Type. Στο ίδιο παράθυρο διαλόγου, υπάρχει το κουμπί Add Web Reference το οποίο επιτρέπει την προσθήκη πιο παραδοσιακών σεε.net Web Services. Παρόλο που η υποστήριξη πλέονν ρίχνεται στοο Windows Communicationn Foundation η υποστήριξη στις παμας ή πρέ ραδοσιακές web services s είναι βολική αν υπάρχουν περιορισμοί στηνν εφαρμογή πει να υπάρχει διαλειτουργικότητα με παλιότερα συστήματα Τα παράθυρα εργαλείων Πριν ξεκινήσει κανείς τηη δημιουργία μιας εφαρμογής, είναι σημαντικό να εξοικειωθεί με τα αποτελούμενα μέρη του Visual Studio. Τα μενού και οι γραμμές εργαλείων είναι τοπο ή χώ θετημένες στο πάνω μέρος τουυ παραθύρου και ένα σύνολο από μικρότερα παράθυρα ρους εμφανίζεταιι στα αριστερά, δεξιά και κάτω από την κύρια περιοχή του παραθύρου. Στο κέντρο υπάρχει ο κύριος χώρος για τον επεξεργαστή κειμένου: όποτε ανοίγουμε ένα αρχείο πηγαίου κώδικα, ένα έγγραφο XML, μια φόρμα ή οποιοδήποτε άλλο αρχείο, θα εμφανίζεται σε αυτόν το χώρο για επεξεργασία. Με κάθε νέο αρχείο που ανοίγει, δημιουργείται ένα νέο tab για να μπορούμε να επιλέγουμε ποιο θα δούμε μεταξύ των ανοιχτών αρχείων. Σε κάθε πλευρά του χώρου για τον επεξεργαστή κειμένου κ υπάρχει ένα σύνολο παρα πληρο θύρων που αντιστοιχούν σε εργαλεία. Αυτά τα παράθυρα παρέχουνν επιπρόσθετες φορίες ανάλογα με τη λειτουργικότητα που τους έχει προσδοθεί. Η προεπιλεγμένη τοποθέ περι τησηη των παραθύρων περιλαμβάνει τον Solution Explorer στα δεξιά, ενώ στα αριστερά λαμβάνει το Toolbox και τα Data Sources. Τα εργαλεία στα σ αριστερά εμφανίζονταιι στην συντετμημένη (collapsed) μορφή τους γνωστή και ως unpinned (ξε καρφιτσωμένη). Αν επιλέαλλά συ ξουμε τον τίτλο ενός παραθύρου, εμφανίζεται σε εκτεταμένη (expanded) μορφή, ντέμνεται ξανά αν μετακινήσουμε τον κέρσορα κάπου αλλού. Ότανν ένα παράθυρο είναι στην εκτεταμένη μορφή του, εμφανίζονται τρία εικονίδια όπως φαίνονται στην παρακάτω εικόνα: Εικόνα 3.7 Οι γενικές επιλογές ενός παραθύρου εργαλείων Αν θέλουμε το παράθυρο να παραμείνει στην εκτεταμένη μορφή του γνωστή και ως pinned (καρφιτσωμένη), πατάμε το μεσαίο κουμπί που μοιάζει με καρφίτσα. Η καρφίτσα περιστρέφει κατά 90 μοίρες για να δείξει ότι το παράθυρο είναι καρφιτσωμένο. Το πάτημα του τρίτου κουμπιού, του Χ, κλείνει το παράθυρο. Αν αργότερα θελήσουμε να ξαναεμφανί σουμε το παράθυρο αυτό μπορούμε να το επιλέξουμε από το μενού View. 40

41 Εικόνα 3.9 Πιθανές επιλογές για την τοποθεσία ενός παραθύρου Εικόνα 3.8 Λίστα με τους διαφορετικούς τρόπους τοποθέτησης ενός παραθύρου εργαπου ανα λείων Αν επιλέξουμε το πρώτοο εικονίδιο (το κάτω βελάκι), εμφανίζεται μια λίστα παριστά έναν διαφορετικό τρόπο τοποθέτησης του παραθύρου. Η επιλογή Float επιτρέπει την τοποθέτηση του τ παραθύρου οπουδήποτε στην οθόνη ανεξαρτήτως του κυρίουυ παραθύ ρου. Κάτι τέτοιο είναι ε χρήσιμοο όταν έχουμε πολλαπλές οθόνες, ο γιατί μπορούμε να μεταφέ ρουμε τα εργαλεία στη δεύτερη οθόνη και να αφήσουμε την πρώτηη μόνο για τα το κύριο παράθυρο, μεγιστοποιώντας έτσι το διαθέσιμο χώρο. Η επιλογή Dockk as Tabbed Document τοποθετεί το παράθυρο σε έναα επιπρόσθετο tab στον κεντρικό χώρο. Τέλος η επιλογή Hide, όπως δηλώνει το όνομά της, αποκρύπτει το παράθυρο. Αλλάζοντας την τοποθεσίαα ενός παραθύρου Προεπιλεγμένα το Visual Studio τοποθετεί μερικά παράθυρα εργαλείων αριστερά και μερικά δεξιά στηνν οθόνη. Είναι δυνατό να αλλαχθεί αυτή η τοποθέτηση. Για να αλλαχθεί η τοποθέτηση πρέπει να επεκτείνουμε ένα παράθυρο, ναα επιλέξουμε την μπάρα τίτλου του παραθύρου και να σύρουμε τοο παράθυρο στη νέα θέση του. Για να μας βοηθήσει,, το Visual Studio εμφανίζει 5 κουτιά, έναα για κάθε πιθανή επιλογή για τη νέα τοποθεσία του παραθύ ρου. Για να τοποθετήσουμε ένα παράθυρο σε οποιαδήποτε πλευρά, απλώς σύρουμε το παράθυρο και το αφήνουμε στο αντίστοιχο κουτί. Κατά το τ σύρσιμο, παρατηρούμε ότι το με προς μετακίνηση.. Το μεγάλο αυτό κουτί χρησιμεύει για την τοποθέτηση δύο ή περισσοτέ ρων παραθύρων στην ίδια περιοχή στο Visual Studio: Επιλέγουμε ένα παράθυρο προς μετα σαίο μεγάλο σταυρωτό κουτί αλλάζει θέση ανάλογα με την τ τρέχουσαα θέση του παραθύρου κίνηση, το σύρουμε προς την περιοχή που θέλουμε να το τοποθετήσουμε και επιλέγουμε από το κεντρικό μεγάλο κουτί τη θέση του στη νέα αυτή περιοχή. Αν επιλέξουμε το κεντρικό κουμπί στο κουτί θα τοποθετηθεί σε tabbed μορφή. Επιλέγοντας οποιοδήποτε από τα υπό 41

42 λοιπα κουτιά, τοποθετούμε τοο παράθυρο αριστερά, δεξιά, πάνω ή παράθυρο σε εκείνη την περιοχή που επιλέξαμε. κάτω από το υπάρχον Εικόνα 3.10 Παράδειγμα τοποθέτησης ενός παραθύρου εργαλείωνν στο δεξιό μέρος του Visual Studio Ο επεξεργαστήςς κειμένου Όπως τα περισσότερα IDEs, το Visual Studio έχει στο επίκεντρό του ένα παράθυρο για την επεξεργασία κώδικα. Ο επεξεργαστής αυτός έχει εξελιχτεί μέσαα στα χρόνια και είναι πολλά περισσότερα από ένας απλός επεξεργαστής κειμένου. Παρόλο που υπάρχουν διάφο αλλαγή ροι designers για την πραγματοποίηση εργασιών όπως τη τ δημιουργίαα φορμών, την των ρυθμίσεων των projects και την επεξεργασία των διαφόρων πόρων των εφαρμογών, οι περισσότεροι προγραμματιστές ξοδεύουν τον περισσότερο χρόνο τουςς στη γραφή κώδικα κ με τον επεξεργαστή αυτό. Για το λόγο αυτό αξίζει να ρίξουμε μια ματιά στο πώς να ρυθμίζουμε την εμφάνισή του για να δουλεύουμε πιο αποδοτικά με αυτόν. α Όταν ανοίγουμε ένα αρχείο κώδικα για επεξεργασία, δουλεύουμε με το παράθυρο επεξεργασίας κώδικα (code editor window). Το παράθυροο αυτό φαίνεται ως εξής: Εικόνα 3.11 Το code editor window w 42

43 Πάνω από το χώρο του κώδικα υπάρχουν δύο λίστες drop down που βοηθούν στην περιήγηση σε μεγάλα αρχεία κώδικα. Η πρώτη drop down λίστα εμφανίζει τις κλάσεις στο τρέχον αρχείο κώδικα και η δεύτερη drop down λίστα εμφανίζει ε τα μέλη της επιλεγμένης κλάσης από την πρώτη λίστα. Εμφανίζονται σε αλφαβητική σειρά για να είναι πιο εύκολο ε να βρούμε μια μέθοδο ή μέλος μέσα στο αρχείο. Περιοχές Η αποτελεσματική σχεδίαση κλάσεων συνήθως έχει σαν αποτέλεσμα τη δημιουργία κλάσεων που υπηρετούν έναν μόνο σκοπό και δεν είναι ιδιαίτερα πολύπλοκες ή μακροσκε λείς. Υπάρχουν όμως περιπτώσεις που αναγκαστικά μιαα κλάση πρέπει να είναι μεγάλη και κατά συνέπεια δύσχρηστη. Σε τέτοιες περιπτώσεις είναι καλό να σπάμε τον κώδικα σε πολ την περιήγηση στον κώδικα. λαπλά αρχεία ή να ν χρησιμοποιούμε περιοχές κώδικα (regions), κάνοντας έτσι ευκολότερη Η εισαγωγή των μερικών κλάσεων (partial classes) ), όπου ο ορισμός μιας κλάσης μπομπορούμε να τοποθετήσουμε κώδικα σε διαφορετικά αρχεία αναπαριστώντας έτσι μια λογική κλάση. ρεί να διαιρεθεί σε πολλαπλά αρχεία, σημαίνει ότι κατά τη τ σχεδίαση μιας κλάσης Το πλεονέκτημα χρήσης χ διαφορετικών αρχείων είναι ότι μπορούμε να ομαδοποιήσουμε ό λες τις μεθόδους που έχουν κάποια σχέση μεταξύ τους, όπως για παράδειγμα όταν υλοποι όμως είναι ότι πρέπει να διαχειριζόμαστε πολλά αρχεία και να εναλλάσσουμε συνεχώς με ούμε μια διασύνδεση (interface). Το πρόβλημα που δημιουργείται με αυτήν την προσέγγιση ταξύ τους. Μια εναλλακτική προσέγγιση είναι η χρήση ονομασμένων περιοχών κώδικα για να συμπυκνώνουμε τμήματα τ κώδικα που δεν μας ενδιαφέρουν ή δεν χρησιμοποιούμε μια δε των di δομένη στιγμή. Ορίζουμε σαν περιοχή το τμήμα του κώδικα που εσωκλείεται μεταξύ rectives #region <όνομα> και #endregion και χρησιμοποιώντας τις ενδείξεις και + συμπυ κνώνουμε και επεκτείνουμε τιςς περιοχές αντίστοιχα. Εικόνα 3.12 Εμφάνιση και απόκρυψη περιοχών στον κώδικα Outlining Το Visual Studio έχει επίσης τη δυνατότητα αυτόματης σύμπτυξης και εμφάνισης των τμημάτων ενός αρχείου κώδικα, όπως μεθόδων, σχολίωνν και κλάσεων. Μπορούμεε να χειρι εντο στούμε το outlining μέσα από το μενού Edit Outlining, το οποίο παρέχει ένα σύνολο λών για την απόκρυψη/εμφάνιση των τμημάτων κώδικα. Έτσι για παράδειγμα, στην παρα τη δυ πάνω εικόνα παρατηρούμε ότιι το Visual Studio πέραν των περιοχών, δίνει αυτόματα νατότητα σύμπτυξης του constructor Class1( (). Μορφοποίηση κώδικα Το Visual Studio S βοηθάει προεπιλεγμένα τον προγραμματιστήή να δημιουργεί δομημένο κώδικα, προσθέτοντας αυτόματα εσοχές και κάνοντας αυτόματη στοίχιση. Όπως τα περισσότερα χαρακτηριστικά του Visual Studio, και η μορφοποίηση μ μπορεί να ρυθμιστεί. Από το μενού Tools Options επιλέγουμε Text Editor C# Formatting. Το χαρακτηριστικό της προσθήκης εσοχών στη C# # καλείται smart indenting. Μεταξύ άλλων προσθέτει αυτόματα εσοχές κατά την προσθήκη μπλοκ κώδικαα μέσα σε ένα αρχείο. Αν για οποιοδήποτε λόγο δεν μορφοποιήσει σωστά τον κώδικα, υπάρχει και η δυνατότητα επαναμορφοποίησης ολόκληρου του αρχείου κώδικα ή τμήματός του. 43

44 Επισήμανση Αναφορών Ένα νέο χαρακτηριστικόό στο Visual Studio 2010 είναι ε η επισήμανση των αναφορών. Όλες οι χρήσεις του τ τρέχοντοςς επιλεγμένου προσδιοριστή (όπως π.χ. μιας μεθόδου ή μιας property) μέσα σε μια εμβέλεια επισημαίνονται. Έτσι γίνεται γ πιο εύκολο να εντοπίσουμε που αλλού χρησιμοποιείται αυτός ο προσδιοριστής μέσα στον κώδικα. Εικόνα 3.13 Επισήμανση αναφορών στον κώδικα Code Zooming Χρησιμοποιώντας το συνδυασμό Ctrl + Mouse Wheel, μπορούμε να μεγαλώσουμε ή να μικρύνουμε το μέγεθος τουυ κώδικα. Αυτό μπορεί να φανεί φ χρήσιμοο όταν παρουσιάζουμε τον κώδικα σε τρίτους. Το zoom μπορεί να οριστεί και από τη λίσταα της γωνίας κάτω κ αριώστε ο κώ στερά στον επεξεργαστή. Word Wrap Με τον όρο word wrap εννοούμε την αυτόματη διαχείριση γραμμών έτσι δικας να χωράει στο προκαθορισμένο πλαίσιο του επεξεργαστή κειμένου. Πηγαίνοντας από το μενού Tools Options, επιλέγουμε Text Editor C# Formatting Wrapping και μπορούμε να αλλάξουμε τις επιλογές για το wrapping. Αρίθμηση Γραμμών Ένα πολύ χρήσιμο χ εργαλείο που δεν είναι ενεργοποιημένο απόό την αρχή, είναι η εμ γραμμές φάνιση του αριθμού των γραμμών σε κάθε αρχείων κώδικα. Για να εμφανιστούν οι αριθμημένες από το μενού Tools Options, επιλέγουμε αρχικά στοο παράθυρο επιλογών που εμφανίζεται Show S all settings κάτω αριστερά. Στη συνέχεια, κάτωω από την επιλογή Text Editor All Languages General επιλέγουμε Line numbers κάτω από την ομάδα Display. Τώρα τα αρχεία κώδικα θα εμφανίζονται αριθμημένα. Εικόνα 3.14 Αρίθμηση γραμμώνν στον editor Fonts και χρώματα Ένα από τα πρώτα πράγματα που ίσως χρειαστεί να αλλάξει κανείς στο Visual Studio είναι τα fonts και τα χρώματα του κύριου επεξεργαστή κειμένου. Η επιλογή του κατάλληλου font και των χρωμάτων που είναι ευκολοδιάβαστα για τον τ καθένα μπορεί να τον κάνει πιο παραγωγικό και να ν γράφει κώδικα για περισσότερο χρόνο χωρίς να κουράζεται. Μπορούμε να αλλάξουμε τα fonts και τα χρώματα από το μενού Tools Options και από την επιλογή Environment επιλέγουμε Fontss and Colors όπως φαίνεταιι στην παρακάτω εικόνα: 44

45 Εικόνα 3.15 Επιλογές για γραμματοσειρέςς και τα χρώματά τους Από το ίδιο παράθυρο μπορούμε να αλλάξουμε τις επιλογές για οποιοδήποτε άλλο παράθυρο κειμένου του Visual Studio επιλέγοντας το από τη λίστα Show settings for. Κατά την επιλογή ενός font πρέπει να θυμόμαστε ότι περισσότερο αποτελεσματικά είναι τα fonts σταθερού μήκουςς και για το λόγο αυτό εμφανίζονται με έμφαση στη λίστα των διαθέσιμων fonts. Full-Screeχώρο για τον επεξεργαστή κειμένου. Για το λόγο αυτό το τ Visual Studio έχει διαθέσιμη μια Mode Αν έχουμε ενεργά πολλαπλά παράθυρα εργαλείων, τότε μπορεί να ξεμείνουμε από full screen mode που μπορούμε να χρησιμοποιήσουμε από το μενούύ View Full Screen. Εναλλακτικά μπορούμε να επιλέξουμε Shift+Alt+Enter για να εισέλθουμε και να εξέλθουμε ε από αυτό το mode. Όπως παρατηρούμε, δεν εμφανίζονται οι γραμμές εργαλείωνν ή τα πα mode μπορεί να φανεί ιδιαίτερα χρήσιμο, αν χρησιμοποιούμε πολλαπλές ράθυρα των εργαλείων, ενώ το παράθυρο είναι πλήρως μεγιστοποιημένο. Το full screen οθόνες. Εικόνα 3.16 Full Screen mode m Παρακολούθηση Αλλαγώνν Το Visual Studio S έχει την επιλογή της παρακολούθησης των αλλαγών στον κώδικα ανά γραμμή για να υποδείχνει ποιες γραμμές κώδικα έχουν αλλάξει κατά τη γραφή ενός αργραμμές. χείου. Όταν ανοίγει ένα αρχείοο για επεξεργασία, δεν θα υπάρχουν χρωματισμένες Ωστόσο, όταν ξεκινάμε το γράψιμο θα παρατηρήσουμε ότι εμφανίζεται μια κίτρινη ένδειξη δίπλα από κάθε γραμμή γ που έχει αλλάξει. Όταν το αρχείο αποθηκεύεται, οι γραμμές αλλά 45

46 ζουν χρώμα: από κίτρινο γίνεται πράσινο δείχνοντας με αυτόν τον τρόπο ότι έχουνν γίνει αλλαγές από το άνοιγμα του αρχείου και ότι αυτές οι αλλαγές έχουν αποθηκευτεί. Η επιλογή της παρακολούθησης των αλλαγών μπορεί να αλλάξει από το μενού Tools Options Text Editor General και από την ομάδα Settings ενεργοποιούμε ή απενεργοποιούμε το check box Track Changes. Εικόνα 3.17 Πως εμφανίζονται οι αλλαγές με την παρακολούθηση αλλαγών ενεργοποιημένη Split View Μερικές φορές είναι χρήσιμο να βλέπουμε διαφορετικά κομμάτια του ίδιου αρχείου ταυτόχρονα. Αυτό μπορεί να γίνει με τη Split View, η οποία επιτρέπειι τη διαίρεση του ενερ από γού παραθύρου του τ επεξεργαστή κειμένου σε δυο οριζόντιους χώρους που χωρίζονται μια μπάρα. Αυτοί οι χώροι μπορούν να γίνουν scrolled ξεχωριστά και να εμφανίζουν διαφορετικά κομμάτια του τ ίδιου αρχείου ταυτόχρονα. Η διαίρεση του κύριου παραθύρου μπορεί να γίνει από το μενού Window Split. Η μπάρα διαχωρισμού μπορεί ναα ρυθμιστεί, σύροντας την πάνω π ή κάτω.. Εικόνα Split Vieww Άλλες λειτουργίες Για να είναι κανείς έναςς αληθινά παραγωγικός προγραμματιστής είναι χρήσιμο να ξέείναι ευ ρει κάποιες προχωρημένες λειτουργίες του επεξεργαστή κειμένου που είναι δεν διάκριτες αλλά μπορούν να εξοικονομήσουνν πολύ χρόνο κατά την ανάπτυξη. Σχολιασμός / από σχολιασμός ενός μπλοκ κώδικα: Συχνά χρειάζεται να το Για να ποθετήσουμε σε σχόλια, κώδικα που εκτείνεται σε πολλές γραμμές. αποφύγουμε την τοποθέτηση σχολίων γραμμής χειροκίνητα και την αποφυγραμμών, γ γή της πιθανότητας εισαγωγής πολλαπλών σχολίων πολλαπλών χρησιμοποιούμε τον αυτόματο σχολιασμό του Visual Studio. Από το μενού Edit επιλέγουμε Advanced Comment Selection για α το σχολιασμό και Ad vanced Uncomment για να αφαιρέσουμε τα σχόλια.. 46

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

Ανάπτυξη εφαρμογής για την χρήση του eclass μέσω smartphones

Ανάπτυξη εφαρμογής για την χρήση του eclass μέσω smartphones Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή εφαρμοσμένων επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Πτυχιακή Εργασία Ανάπτυξη εφαρμογής για την χρήση του eclass μέσω smartphones Του φοιτητή Δάβιου Βασίλη

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

Διαβάστε περισσότερα

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Γλώσσες Προγραμματισμού Μεταγλωττιστές Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου Μεταγλωττιστές

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Μάριος Αραποστάθης Καθηγητής πληροφορικής Βαρβάκειου Λύκειου http://users.sch.gr/mariosarapostathis 6.1 Η έννοια του

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

Αρχές Προγραμματισμού Υπολογιστών

Αρχές Προγραμματισμού Υπολογιστών Αρχές Προγραμματισμού Υπολογιστών Ανάπτυξη Προγράμματος Β ΕΠΑΛ Τομέας Πληροφορικής Βελώνης Γεώργιος Καθηγητής Πληροφορικής ΠΕ20 Κύκλος ανάπτυξης προγράμματος/λογισμικού Η διαδικασία ανάπτυξης λογισμικού,

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1 ΚΕΦΑΛΑΙΟ 7 ο ΠΡΟΓΡΑΜΜΑ : Το πρόγραμμα αποτελείται από μια σειρά οδηγιών, που ονομάζονται εντολές, για την εκτέλεση τέτοιου είδους πράξεων, καθώς επίσης και από ένα σύνολο πρόσθετων οδηγιών ελέγχου, που

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια. ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια. Τον ακριβή προσδιορισμό του προβλήματος. Την ανάπτυξη του αντίστοιχου αλγορίθμου.

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1 ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 03/01/09 Χαράλαμπος Τζόκας 1 Πρόγραμμα - Προγραμματισμός Πρόγραμμα: Σύνολο εντολών που πρέπει να δοθούν στον Υπολογιστή, ώστε να υλοποιηθεί ο αλγόριθμος της επίλυσης

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου 49 Διδακτικές ενότητες 6.1 Γλώσσες και εργαλεία προγραμματισμού 6.2 Σύγχρονα προγραμματιστικά περιβάλλοντα Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν την ανάγκη ύπαρξης τόσο

Διαβάστε περισσότερα

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού. Κεφάλαιο 6 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία σημαντικά στάδια : Σον ακριβή προσδιορισμό του προβλήματος Σην ανάπτυξη του αντίστοιχου αλγορίθμου

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

Εισαγωγή στον προγραμματισμό

Εισαγωγή στον προγραμματισμό Ενότητες: Εισαγωγή στον προγραμματισμό Η έννοια του προγράμματος Ιστορική αναδρομή Φυσικές και τεχνητές γλώσσες Τεχνικές σχεδίασης προγραμμάτων Ιεραρχική Σχεδίαση Τμηματικός Προγραμματισμός Δομημένος προγραμματισμός

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Προγραµµατισµός Η/Υ Ο προγραµµατισµός είναι η διατύπωση του αλγορίθµου σε µορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει («τρέξει» όπως λέµε στην ορολογία της

Διαβάστε περισσότερα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

Διαβάστε περισσότερα

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019 Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019 Γλώσσες με δομή Block Γλώσσες με δομή Block Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια

Διαβάστε περισσότερα

Κεφάλαιο 2: Μεταφραστές

Κεφάλαιο 2: Μεταφραστές Κεφάλαιο 2: Μεταφραστές Αρχές Γλωσσών και Προγραμματισμού Λειτουργία Μετάφρασης ΑΡΧΙΚΗ ΓΛΩΣΣΑ (Source) L A ΓΛΩΣΣΑ ΥΛΟΠΟΙΗΣΗΣ ΜΕΤΑΦΡΑΣΤΗ (Implementation) L Y ΤΕΛΙΚΗ ΓΛΩΣΣΑ (Target) L T Αρχικό Πρόγραμμα

Διαβάστε περισσότερα

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Κεφάλαιο 6 «Εισαγωγή στον Προγραμματισμό» Στέφανος Ουγιάρογλου Διαφάνειες από υλικό του Χ. Μουρατίδη Προγραμματισμός Η/Υ Ο προγραμματισμός είναι η διατύπωση

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΡΩΤΗΣΕΙΣ ΣΩΣΤΟ ΛΑΘΟΣ Σημειώστε αν είναι σωστή ή

Διαβάστε περισσότερα

Βασικές Αρχές Προγραμματισμού

Βασικές Αρχές Προγραμματισμού Βασικές Αρχές Προγραμματισμού Κεφάλαιο 1 Εισαγωγή Προβλήματα Πρόβλημα: Μία κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της οποίας δεν είναι γνωστή, ούτε προφανής Π.χ. Το πρόβλημα του

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Sites:

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό 6.1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, τρία σημαντικά στάδια: 1. Τον ακριβή προσδιορισμό του προβλήματος. 2. Την ανάπτυξη

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Δοκιμή Έλεγχος Αλγορίθμου Για να

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή περιορισμένοι υπολογιστικοί / αποθηκευτικοί πόροι δεν τίθεται θέμα

Διαβάστε περισσότερα

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1 6.3 Φυσικές και τεχνητές γλώσσες Μια γλώσσα γενικά προσδιορίζεται από: 1. Το αλφάβητο: το σύνολο των στοιχείων που χρησιμοποιεί

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

6. 1 Η έννοια του προγράμματος

6. 1 Η έννοια του προγράμματος 6. 1 Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, τρία στάδια. 1.Τον ακριβή προσδιορισμό του προβλήματος. 2.Την ανάπτυξη του αντίστοιχου αλγορίθμου. 3.Τη διατύπωση

Διαβάστε περισσότερα

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

Διαβάστε περισσότερα

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Εισαγωγή Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Μεταγλωττιστής Αρχικό πρόγραμμα (source program) Μεταγλωττιστής Τελικό πρόγραμμα (object program) Διαγνωστικά μηνύματα Μεταγλωττιστής Παίρνει σαν

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Αρχιτεκτονική Λογισμικού

Αρχιτεκτονική Λογισμικού Αρχιτεκτονική Λογισμικού περιεχόμενα παρουσίασης Τι είναι η αρχιτεκτονική λογισμικού Αρχιτεκτονική και απαιτήσεις Σενάρια ποιότητας Βήματα αρχιτεκτονικής σχεδίασης Αρχιτεκτονικά πρότυπα Διαστρωματωμένη

Διαβάστε περισσότερα

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

Διαβάστε περισσότερα

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Ποιες γλώσσες αναφέρονται ως φυσικές και ποιες ως τεχνητές; Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων,

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1 Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα Προγραμματισμός II 1 lalis@inf.uth.gr Χρήση λογισμικού που ήδη υπάρχει Τα πολύπλοκα συστήματα αναπτύσσονται σταδιακά, «χτίζοντας» πάνω σε υπάρχουσα λειτουργικότητα

Διαβάστε περισσότερα

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στην επιστήμη των υπολογιστών Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Γλώσσες Προγραμματισμού 1 Εξέλιξη Οι γλώσσες προγραμματισμού είναι σύνολα από προκαθορισμένες λέξεις οι οποίες συνδυάζονται σε προγράμματα σύμφωνα

Διαβάστε περισσότερα

Διαφορές single-processor αρχιτεκτονικών και SoCs

Διαφορές single-processor αρχιτεκτονικών και SoCs 13.1 Τα συστήματα και η επικοινωνία μεταξύ τους γίνονται όλο και περισσότερο πολύπλοκα. Δεν μπορούν να περιγραφούνε επαρκώς στο επίπεδο RTL καθώς αυτή η διαδικασία γίνεται πλέον αρκετά χρονοβόρα. Για αυτό

Διαβάστε περισσότερα

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος

Διαβάστε περισσότερα

Κεφάλαιο 4: Λογισμικό Συστήματος

Κεφάλαιο 4: Λογισμικό Συστήματος Κεφάλαιο 4: Λογισμικό Συστήματος Ερωτήσεις 1. Να αναφέρετε συνοπτικά τις κατηγορίες στις οποίες διακρίνεται το λογισμικό συστήματος. Σε ποια ευρύτερη κατηγορία εντάσσεται αυτό; Το λογισμικό συστήματος

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 8: Λειτουργικά Συστήματα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 2: Mεταφραστές Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Λειτουργία Μετάφρασης ΑΡΧΙΚΗ ΓΛΩΣΣΑ (Source) L A ΓΛΩΣΣΑ

Διαβάστε περισσότερα

Πληροφορική 2. Τεχνολογία Λογισμικού

Πληροφορική 2. Τεχνολογία Λογισμικού Πληροφορική 2 Τεχνολογία Λογισμικού 1 2 Κρίση Λογισμικού (1968) Στην δεκαετία του 1970 παρατηρήθηκαν μαζικά: Μεγάλες καθυστερήσεις στην ολοκλήρωση κατασκευής λογισμικών Μεγαλύτερα κόστη ανάπτυξης λογισμικού

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών

Προγραμματισμός Υπολογιστών Προγραμματισμός Υπολογιστών Βασικές γνώσεις Κ. Βασιλάκης, ΣΤΕΦ, ΤΕΙ Κρήτης Η Πληροφορική και τα εργαλεία της Παροχή έγκαιρης και έγκυρης πληροφόρησης. Καταχώριση στοιχείων Αποθήκευση Επεξεργασία ψηφιακών

Διαβάστε περισσότερα

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού Κεφάλαιο 6 ο Διαχείριση στοιχείων λογισμικού Διδακτικοί στόχοι Να περιγραφούν οι κύριοι τύποι λογισμικού Να εξεταστεί το λογισμικό συστήματος και τα λειτουργικά συστήματα Να αναλυθούν οι πιο σημαντικές

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

Διαβάστε περισσότερα

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα. ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων. Όταν ένα τμήμα προγράμματος επιτελεί ένα αυτόνομο

Διαβάστε περισσότερα

Εισαγωγή στη Σχεδίαση Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Μεταφραστές Εισαγωγή Διδάσκων: Επικ. Καθ. Γεώργιος Μανής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Βασίλειος Κοντογιάννης ΠΕ19

Βασίλειος Κοντογιάννης ΠΕ19 Ενότητα2 Προγραμματιστικά Περιβάλλοντα Δημιουργία Εφαρμογών 6.1 Γλώσσες και εργαλεία προγραμματισμού Τι είναι οι γλώσσες προγραμματισμού; Είναι οι τεχνητές γλώσσες στις οποίες γράφονται οι εντολές των

Διαβάστε περισσότερα

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

Διαβάστε περισσότερα

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Πολλαπλά Αρχεία Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Πολλαπλά Αρχεία Όταν γράφουμε μεγάλα προγράμματα θέλουμε να έχουμε ανεξάρτητα κομμάτια κώδικα

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Σχεδιασµός βασισµένος σε συνιστώσες

Σχεδιασµός βασισµένος σε συνιστώσες Σχεδιασµός βασισµένος σε συνιστώσες 1 Ενδεικτικά περιεχόµενα του κεφαλαίου Ποια είναι τα "άτοµα", από τα οποία κατασκευάζονται οι υπηρεσίες; Πώς οργανώνουµε τις συνιστώσες σε ένα αρµονικό σύνολο; Τι είναι

Διαβάστε περισσότερα

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

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

Διαβάστε περισσότερα

Visual Flowchart Γενικά

Visual Flowchart Γενικά Visual Flowchart 3.020 -Γενικά Το Visual Flowchart ή «Data-Flow Visual Programming Language 3.020» (http://www. emu8086.com/fp) είναι ένα περιβάλλον ανάπτυξης και εκτέλεσης αλγορίθμων απευθείας σε μορφή

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος. ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος 1 2 3 Εικόνα 43: Διάφορες πλακέτες υπολογιστών Μέσα σε δύο

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ Στόχος Θεματικής Ενότητας Οι μαθητές να περιγράφουν τους βασικούς τομείς της Επιστήμης των Υπολογιστών και να μπορούν

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++ ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση του περιβάλλοντος Dev C++ το οποίο θα χρησιμοποιηθεί για την υλοποίηση

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ ΥΠΟΥΡΓΕΙΟ ΕΘΝΙΚΗΣ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ Κ Υ Κ Λ Ο Υ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Κ Α Ι Υ Π Η Ρ Ε Σ Ι Ω Ν Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Η

Διαβάστε περισσότερα

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών Οργάνωση Υπολογιστών Υπολογιστικό Σύστημα Λειτουργικό Σύστημα Αποτελεί τη διασύνδεση μεταξύ του υλικού ενός υπολογιστή και του χρήστη (προγραμμάτων ή ανθρώπων). Είναι ένα πρόγραμμα (ή ένα σύνολο προγραμμάτων)

Διαβάστε περισσότερα

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ Η ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΤΟ ΛΥΚΕΙΟ Εισαγωγή Η μεγάλη ανάπτυξη και ο ρόλος που

Διαβάστε περισσότερα

Θεματογράφος (ή ο βοηθός του Καθηγητή)

Θεματογράφος (ή ο βοηθός του Καθηγητή) Θεματογράφος (ή ο βοηθός του Καθηγητή) Τι είναι ο Θεματογράφος; Σύντομη Περιγραφή Ο Θεματογράφος είναι μία εφαρμογή με την οποία ο χρήστης μπορεί εύκολα να δημιουργήσει, να ταξινομήσει και να αποθηκεύσει

Διαβάστε περισσότερα

Λειτουργικά Συστήματα (Λ/Σ)

Λειτουργικά Συστήματα (Λ/Σ) Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων

Διαβάστε περισσότερα

ΑΡΧΙΜΗΔΗΣ ΙΙΙ Ενίσχυση Ερευνητικών Ομάδων στο ΤΕΙ Δυτικής Μακεδονίας» - MIS

ΑΡΧΙΜΗΔΗΣ ΙΙΙ Ενίσχυση Ερευνητικών Ομάδων στο ΤΕΙ Δυτικής Μακεδονίας» - MIS ΑΡΧΙΜΗΔΗΣ ΙΙΙ Ενίσχυση Ερευνητικών Ομάδων στο ΤΕΙ Δυτικής Μακεδονίας» - MIS 383583 Υποέργο 11: 3D Προσομοίωση της κατεργασίας της διάτρησης, βασισμένη στον προγραμματισμό συστήματος CAD Παραδοτέο του Π.Ε.1:

Διαβάστε περισσότερα

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ 2.3.1.1. Παπαγιάννη Νάσια Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ 1 περιλαμβάνει: Η έννοια του προγράμματος Επίλυση προβλήματος 1. Ακριβή προσδιορισμό

Διαβάστε περισσότερα