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

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

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

Transcript

1 ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΡΓΑΣΤΗΡΙΟ ΤΕΧΝΟΛΟΓΙΑΣ ΠΟΛΥΜΕΣΩΝ Εισαγωγή στη C# και το.net 4.0 Σημειώσεις Σεμιναρίου Ενότητα 3 Κλάσεις και αντικείμενα Πεδία Μέθοδοι Επιμέλεια: Βασίλης Κόλιας 1.0.0

2 Πίνακας Περιεχομένων Εισαγωγή στη C# και το.net 4.0 Πίνακας Περιεχομένων Κλάσεις και αντικείμενα Δήλωση κλάσης Μέλη κλάσης Μέλη δεδομένων Μέλη λειτουργιών Προσπέλαση μελών κλάσης Δημιουργία αντικειμένων Κατασκευαστές Δήλωση αντικειμένων Ο τελεστής new Αρχικοποιητές Καταστροφή αντικειμένων Καταστροφείς Στατικά μέλη και κλάσεις Στατικά μέλη Στατικές κλάσεις

3 4. Κλάσεις και αντικείμενα Σε αυτήν την ενότητα γίνεται μια εισαγωγή στον αντικειμενοστρεφή προγραμματισμό έτσι όπως είναι υλοποιημένος στη C#. Η ενότητα αυτή και η επόμενη ενδεχομένως είναι οι πιο σημαντικές καθώς, εξαιτίας της αντικειμενοστρέφειας της C#, δεν νοείται προγραμματιστής που επιθυμεί να τη χρησιμοποιήσει για την ανάπτυξη εφαρμογών, να μην είναι εξοικειωμένος με αυτές. Όλα τα προγράμματα σε C# χρησιμοποιούν αντικείμενα και ο τύπος των αντικειμένων ορίζεται από την κλάση (class) ή το interface (διασύνδεση) τους. Κάθε πρόγραμμα σε C# ορίζεται με μια κλάση και τα σύνθετα προγράμματα συνήθως περιλαμβάνουν αρκετούς ο- ρισμούς κλάσεων. Ξεκινούμε με μερικές έννοιες: Μια κλάση είναι μια δόμηση που χρησιμοποιείται σαν ένα προσχέδιο για τη δημιουργία στιγμιότυπων του εαυτού της που καλούνται στιγμιότυπα κλάσεων, αντικείμενα κλάσεων ή απλώς αντικείμενα. Μια κλάση ορίζει τα μέλη που την αποτελούν τα οποία δίνουν τη δυνατότητα στα αντικείμενά της να έχουν κατάσταση και συμπεριφορά. Τα πεδία μιας κλάσης διατηρούν την κατάσταση κάθε αντικειμένου της, ενώ οι μέθοδοι (κατά κύριο λόγο) καθορίζουν τη συμπεριφορά των αντικειμένων της. Όπως αναφέρθηκε στην πρώτη ενότητα, η κλάση αποτελεί τη θεμελιώδη μονάδα του αντικειμενοστρεφούς προγραμματισμού (μαζί με το αντικείμενο), μέσω της οποίας ο προγραμματιστής ορίζει νέους τύπους δεδομένων. Στη C# δεν γίνεται να γραφτεί κώδικας χωρίς να οριστεί μια κλάση και όλες οι μέθοδοι ορίζονται μέσα σε κλάσεις. Με μια κλάση ορίζεται ένας τύπος αναφοράς (reference type). Ορίζοντας λοιπόν μια κλάση ουσιαστικά ορίζουμε έναν νέο τύπο δεδομένων που περιέχει μεταβλητές και μεθόδους. Μια κλάση μπορεί να θεωρηθεί σαν μια ομαδοποίηση δεδομένων και μεθόδων που λογικά ενώνονται μαζί σε ένα πακέτο. Η C# δίνει μεγάλη ευελιξία στη δημιουργία κλάσεων ωστόσο καλές κλάσεις θεωρούνται αυτές που αναπαριστούν έννοιες του πραγματικού κόσμου. Η Επιστήμη των Υπολογιστών μοντελοποιεί τον κόσμο μέσα από δομές που αναπαριστούν έννοιες ή πράγματα του πραγματικού κόσμου, όπως για παράδειγμα τραπεζικούς λογαριασμούς, πελάτες, έγγραφα ή προϊόντα. Για τους αναλυτές προγραμμάτων οι κλάσεις αντικατοπτρίζουν τις έννοιες ενός προβλήματος σε ένα πρόγραμμα. Για παράδειγμα ένα πρόβλημα θα μπορούσε να είναι η στατιστική ανάλυση των επιδόσεων των φοιτητών μιας σχολής για την βελτίωση του οδηγού σπουδών. Οποιαδήποτε περιγραφή του προβλήματος αυτού θα περιείχε τον όρο φοιτητής σε κάθε πιθανή λύση του. Οι φοιτητές έχουν μερικές ι- διότητες που πρέπει να ληφθούν υπόψη σε μια τέτοια ανάλυση, όπως ο μέσος όρος των μαθημάτων όπου έχουν επιτύχει, τα χρωστούμενα μαθήματα, οι απουσίες τους, η ηλικία τους. Επιπρόσθετα οι φοιτητές εκδηλώνουν κάποιες συμπεριφορές, όπως για παράδειγμα ότι δηλώνουν τα μαθήματα που τους ενδιαφέρουν σε κάθε εξάμηνο, δίνουν εξετάσεις, παρακολουθούν μαθήματα, δίνουν ασκήσεις κ.α. Επομένως η έννοια του φοιτητή είναι μέρος του προβλήματος που περιγράφτηκε και κάθε καλό πρόγραμμα που θέλει να κάνει μια τέτοια ανάλυση θα πρέπει να εκφράσει κάπως την έννοια του φοιτητή. Αυτό στη C# (και κάθε άλλη αντικειμενοστρεφή γλώσσα) γίνεται με τη χρήση μιας κλάσης Student. Ένα αντικείμενο από την άλλη είναι ένα στιγμιότυπο μιας κλάσης. Αν η έννοια του φοιτητή αναπαρίσταται με μια κλάση, τότε ένας πραγματικός φοιτητής αναπαρίσταται με ένα αντικείμενο. Ένα από τα ζητούμενα στην ανάπτυξη αντικειμενοστρεφών προγραμμάτων είναι το πώς θα αναπαρασταθούν αντικείμενα του πραγματικού κόσμου μέσα στο πρόγραμμα, μέσω των κλάσεων. Ένας απλούστερος ορισμός λοιπόν θα ήταν ότι το αντικείμενο αποτελεί ένα επαναχρησιμοποιήσιμο κομμάτι λογισμικού που αναπαριστά ένα αντικείμενο του πραγματικού κόσμου Δήλωση κλάσης Όπως αναφέραμε, μια κλάση είναι το πιο συνηθισμένο είδος τύπου αναφοράς. Η πιο απλή δήλωση κλάσης είναι η ακόλουθη: 3

4 class όνομα-κλάσης Μια πιο πολύπλοκη δήλωση κλάσης θα περιελάμβανε τα ακόλουθα: Πριν τη λέξη class Ένα σύνολο χαρακτηριστικών (attributes) Ένα σύνολο τροποποιητών (modifiers). Αυτοί είναι οι public, internal, abstract, sealed, static, unsafe και partial Μετά το όνομα-κλάσης Μια λίστα παραμέτρων τύπων (type parameter list) Μια κλάση γονέα (base class) Ένα ή περισσότερα interfaces Μεταξύ των αγκίστρων Ένα σύνολο μελών κλάσης. Αυτά μπορεί να είναι μέθοδοι (methods), ιδιότητες (properties), indexers, πεδία (fields), κατασκευαστές (constructors), operator functions, φωλιασμένοι τύποι και ένας καταστροφέας. Στην απλοϊκή δήλωση της κλάσης παραπάνω, μετά τη δεσμευμένη λέξη class ακολουθεί ένας προσδιοριστής. Όπως σε όλους τους προσδιοριστές, ισχύουν και εδώ οι κανόνες ονοματοδοσίας (παράγραφος 3.1.1), ενώ υπάρχει και η σύμβαση να ακολουθείται το στυλ γραφής της Pascal, δηλαδή το πρώτο γράμμα του προσδιοριστή να είναι κεφαλαίο, όπως και τα πρώτα γράμματα των συνενωμένων λέξεων (αν υπάρχουν). Ακολουθεί το σώμα της κλάσης που περικλείεται σε άγκιστρα. Στο κύριο μέρος μιας κλάσης ορίζονται τα μέλη της. Παρατηρούμε ότι στο παραπάνω παράδειγμα είναι κενό, κάτι που σημαίνει ότι η παραπάνω κλάση είναι μια κενή κλάση (empty class). Οι κενές κλάσεις δεν έχουν καμία χρηστικότητα, οπότε πρέπει να προσθέσουμε σε αυτές μέλη. Ας δούμε αναλυτικά ποια είναι τα έγκυρα μέλη μιας κλάσης και πως τα δηλώνουμε Μέλη κλάσης Τα δεδομένα και οι μέθοδοι μιας κλάσης καλούνται μέλη κλάσης (class members). Η επίσημη ορολογία της Microsoft διαχωρίζει τα μέλη σε α) μέλη δεδομένων (data members) και β) μέλη λειτουργιών (function members). Επιπρόσθετα των δύο αυτών μελών, οι κλάσεις μπορούν να περιέχουν εμφωλευμένους τύπους (nested types). Μια κλάση μπορεί να έχει όσα μέλη δεδομένων και μεθόδων χρειάζεται από τους συνδυασμούς 9 πιθανών μελών. Α- κολουθεί η περιγραφή των μελών αυτών Μέλη δεδομένων Τα μέλη δεδομένων είναι εκείνα που περιέχουν τα δεδομένα των αντικειμένων μιας κλάσης: τα πεδία (fields), τις σταθερές (constants) και τα γεγονότα (events). Πεδία Τα πεδία (fields) είναι η ονομασία που δίνεται στις μεταβλητές που ανήκουν στα α- ντικείμενα μιας κλάσης ή την ίδια την κλάση (συγκρατήστε αυτόν τον διαχωρισμό γιατί έχει σημασία). Μπορεί να είναι οποιουδήποτε τύπου δεδομένων, είτε τύπου τιμής, είτε τύπου αναφοράς. Όπως όλες οι μεταβλητές, τα πεδία αποθηκεύουν δεδομένα και έχουν τα ακόλουθα χαρακτηριστικά: Μπορούν να ενημερωθούν. Μπορούν να προσπελαστούν. Η δήλωση ενός πεδίου με το ελάχιστο συντακτικό είναι η ακόλουθη: Τύπος-δεδομένων προσδιοριστής 4

5 Ένα παράδειγμα ενός πεδίου μέσα σε μια κλάση, είναι το ακόλουθο, όπου η κλάση MyClass περιέχει μια μεταβλητή int: class MyClass int MyField; Μια πιο πολύπλοκη δήλωση πεδίου θα περιελάμβανε προαιρετικά τα ακόλουθα χαρακτηριστικά : Πριν τον τύπο δεδομένων τον τροποποιητή static του πεδίου έναν τροποποιητή πρόσβασης (access modifier). Αυτοί είναι οι public, protected, internal, private τον τροποποιητή κληρονομικότητας new τον τροποποιητή readonly τον τροποποιητή για τα νήματα volatile τον τροποποιητή unsafe Μετά τον προσδιοριστή τον τελεστή ανάθεσης και ένα κυριολεκτικό. έναν ή περισσότερους προσδιοριστές διαχωρισμένους από κόμματα. Πρέπει να προσέξουμε ότι αντίθετα με άλλες γλώσσες, στη C# δεν υπάρχουν καθολικές μεταβλητές (global variables), δηλαδή μεταβλητές που να ορίζονται έξω από ένα τύπο. Όλα τα πεδία ανήκουν σε έναν τύπο και πρέπει να δηλώνονται μέσα στον ορισμό του. Εφόσον ένα πεδίο είναι μια μεταβλητή, μπορεί να αρχικοποιείται και κατά τη δήλωσή του. Ένα πεδίο αρχικοποιείται κατά τη δήλωσή του, αν μετά τον προσδιοριστή του, ακολουθεί ο τελεστής ανάθεσης = και μια έκφραση που αποτιμάται σε μια τιμή του τύπου δεδομένων του πεδίου, ή τουλάχιστον ενός τύπου που μπορεί να μετατραπεί αυτόματα στον τύπο του πεδίου. Η τιμή αυτή πρέπει να μπορεί να προσδιοριστεί κατά τη μεταγλώττιση. Αν δεν ορίζεται τιμή (όπως στο παραπάνω παράδειγμα), η τιμή του πεδίου τίθεται αυτόματα από το μεταγλωττιστή στην προεπιλεγμένη τιμή του τύπου δεδομένων του πεδίου. Οι προεπιλεγμένες τιμές των ενσωματωμένων τύπων της C# δίνονται στους πίνακες 3.8 και Για να τους συνοψίσουμε αυτοί είναι οι 0 για τους αριθμητικούς τύπους, false για τον τύπο bool ενώ η προεπιλεγμένη τιμή για τους τύπους αναφοράς είναι η null. Για παράδειγμα ο κώδικας στο ακόλουθο παράδειγμα περιέχει τέσσερα πεδία. Τα δύο πρώτα πεδία αρχικοποιούνται αυτόματα, ενώ τα δύο τελευταία αρχικοποιούνται κατά τη δήλωσή τους. class MyClass int f1; // Αρχικοποίηση στην τιμή 0 - value type string f2; // Αρχικοποίηση στην τιμή null - reference type int f3 = 25; // Αρχικοποίηση στην τιμή 25 string f4 = "abcd"; // Αρχικοποίηση στην τιμή "abcd" Είναι δυνατή επίσης η δήλωση πολλαπλών πεδίων του ίδιου τύπου δεδομένων στην ίδια πρόταση, χωρίζοντας τα ονόματα των πεδίων με κόμματα. Δεν γίνεται να γίνει ταυτόχρονη δήλωση πεδίων διαφορετικών τύπων δεδομένων. Οι δηλώσεις του παραπάνω παραδείγματος μπορούν να συνδυαστούν ως εξής: class MyClass int f1, f3 = 25; string f2, f4 = "abcd"; Η τιμή ενός πεδίου μπορεί να προσπελαστεί και να ενημερωθεί από τα αντικείμενα της ίδιας της κλάσης ή και άλλων αντικειμένων μέσα από τις μεθόδους τους. 5

6 Σταθερές Εισαγωγή στη C# και το.net 4.0 Μια σταθερά (constant) είναι ένα μέλος κλάσης που αναπαριστά μια σταθερή τιμή, δηλαδή μια τιμή που δεν μπορεί να μεταβληθεί κατά τη διάρκεια εκτέλεσης του προγράμματος. Τέτοιου είδους μέλη, μπορούν να φανούν χρήσιμα στην αναγνωσιμότητα του κώδικα, όταν χρειάζεται να εκφραστεί με ένα περιγραφικό όνομα μια τιμή που επαναλαμβάνεται σε διάφορα τμήματα του κώδικα, όπως για παράδειγμα η μαθηματική σταθερά π. Η χρήση των σταθερών, έχει και το προφανές πλεονέκτημα του ότι αν ποτέ χρειαστεί να αλλαχτούν (π.χ. να προστεθεί μεγαλύτερη ακρίβεια στα δεκαδικά ψηφία του π), τότε αλλάζουμε μόνο ένα σημείο στον κώδικά μας. Υπάρχουν δύο ειδών σταθερές: η σταθερές που δηλώνονται με τη λέξη const και οι σταθερές που δηλώνονται με τη λέξη readonly. Στην περίπτωση χρήσης της const, η τιμή της σταθεράς ορίζεται κατά τη δήλωση της μεταβλητής και πρέπει να μπορεί να αποτιμηθεί κατά τη μεταγλώττιση. class MyMathClass const double PI = 3.14; Στην περίπτωση χρήσης της readonly η τιμή της σταθεράς μπορεί να οριστεί τόσο κατά τη δήλωση της μεταβλητής όσο και μέσα στον κατασκευαστή της κλάσης, δηλαδή κατά τη δημιουργία των αντικειμένων (βλέπε παρακάτω). Αφού όμως οριστεί μια τιμή, αυτή δεν μπορεί να αλλάξει. Τότε λέμε ότι η μεταβλητή γίνεται immutable. class MyMathClass readonly double PI = 3.14; MyMathClass() PI = ; Γεγονότα Τα γεγονότα (events) είναι μέλη κλάσης που επιτρέπουν σε ένα αντικείμενο να ειδοποιήσει άλλα αντικείμενα ότι συνέβη ένα αξιοπρόσεκτο γεγονός, όπως η αλλαγή μιας τιμής ενός πεδίου ή ότι προκύπτει κάποια διάδραση με το χρήστη (π.χ. το πάτημα ενός κουμπιού). Τα τμήματα κώδικα που χειρίζονται τέτοια γεγονότα, καλούνται χειριστές γεγονότων (event handlers). Τα γεγονότα ορίζονται και ενεργοποιούνται χρησιμοποιώντας τα delegates. Θα αφιερώσουμε ολόκληρη ενότητα στα γεγονότα γιατί συνδέονται με τις παραθυρικές εφαρμογές και είναι αρκετά σημαντικά Μέλη λειτουργιών Τα μέλη λειτουργιών (function members) είναι τα μέλη κλάσεων που παρέχουν τη λειτουργικότητα για την επεξεργασία των δεδομένων της κλάσης (ή και άλλων κλάσεων). Τα μέλη λειτουργιών γενικά μοντελοποιούν τη συμπεριφορά των αντικειμένων του πραγματικού κόσμου. Μέθοδοι Οι μέθοδοι (methods) είναι οι γνωστές από άλλες γλώσσες προγραμματισμού συναρτήσεις. Μια μέθοδος είναι ένα ονομασμένο μπλοκ εκτελέσιμου κώδικα που μπορεί να εκτελεστεί από πολλά και διαφορετικά τμήματα ενός προγράμματος, ακόμα και από άλλα προγράμματα. Όταν μια μέθοδος καλείται (called/invoked), εκτελεί τον κώδικα που περικλείεται στο μπλοκ της και μετά την ολοκλήρωσή της επιστρέφει τη ροή εκτέλεσης εκεί απ όπου κλήθηκε. Το συντακτικό για τη δήλωση μιας μεθόδου περιλαμβάνει τα ακόλουθα στοιχεία: Τροποποιητές: οι τροποποιητές περιλαμβάνουν δεσμευμένες λέξεις που προσδιορίζουν αν είναι δυνατό να κληθεί η μέθοδος από άλλες κλάσεις, ε- ντός και εκτός της ιεραρχίας κλάσεων, εντός και εκτός ενός ονοματοχώρου και εντός και εκτός ενός assembly. 6

7 Τύπο επιστροφής: ο τύπος επιστροφής ορίζει τον τύπο δεδομένων της τιμής που θα επιστρέφει η μέθοδος. Αν μια μέθοδος δεν επιστρέφει κάποια τιμή, ο τύπος επιστροφής ορίζεται ως void. Όνομα: ένας προσδιοριστής για να αναγνωρίζεται μοναδικά μια μέθοδος. Λίστα παραμέτρων: η λίστα παραμέτρων είναι μια σειρά δηλώσεων παραμέτρων, χωριζόμενων με κόμματα, εσωκλειόμενων σε παρενθέσεις. Κάθε δήλωση παραμέτρου είναι ένα ζευγάρι τύπου δεδομένων προσδιοριστή, παρόμοια δηλαδή με τη δήλωση μεταβλητών. Σώμα μεθόδου: το σώμα αποτελείται από εκτελέσιμο κώδικα κλεισμένο μέσα σε άγκιστρα. <τροποποιητές> τύπος_επιστροφής όνομα-μεθόδου(<λίστα-παραμέτρων>) // Σώμα μεθόδου Για παράδειγμα, ο επόμενος κώδικας ορίζει μια κλάση με μια μέθοδο με το όνομα PrintNums. class SimpleClass void PrintNums() Console.WriteLine("1"); Console.WriteLine("2"); Από τη δήλωση, μπορούμε να πούμε τα ακόλουθα για την PrintNums: Δεν επιστρέφει κάποια τιμή, άρα ο τύπος επιστροφής ορίζεται σαν void. Έχει μια κενή λίστα παραμέτρων. Περιέχει δυο εντολές μέσα στο κύριο μέρος της μεθόδου. Αντίθετα με άλλες γλώσσες προγραμματισμού, δεν γίνεται να οριστούν καθολικές μέθοδοι (global functions), δηλαδή μέθοδοι που ορίζονται έξω από μια δήλωση κλάσης ( ή τύπου γενικότερα). Στο σώμα μιας μεθόδου είναι ένα μπλοκ κώδικα, το οποίο όπως αναφέραμε είναι μια σειρά εντολών ανάμεσα σε άγκιστρα. Το μπλοκ αυτό μπορεί να περιέχει τα ακόλουθα συστατικά: Τοπικές μεταβλητές Προτάσεις ελέγχου ροής Κλήσεις άλλων μεθόδων (ή και της ίδιας οπότε έχουμε αναδρομή) Άλλα μπλοκ κώδικα Μια μέθοδος μπορεί να καλέσει άλλες μεθόδους από το σώμα της. Η κλήση μιας μεθόδου γίνεται απλώς με το όνομά της και τη λίστα παραμέτρων της. Κατά την κλήση μιας μεθόδου: 1. Η εκτέλεση της τρέχουσας μεθόδου παύει στο σημείο της κλήσης. 2. Η ροή εκτέλεσης μεταφέρεται στην αρχή της μεθόδου που κλήθηκε. 3. Η καλεσμένη μέθοδος εκτελείται μέχρι να ολοκληρώσει. 4. Η ροή επιστρέφει στην αρχική μέθοδο. Μια μέθοδος μπορεί να επιστρέψει μια τιμή στον κώδικα που την καλεί στη θέση της έκφρασης απ όπου κλήθηκε. Για να επιστραφεί μια τιμή η μέθοδος πρέπει να δηλώσει έναν τύπο επιστροφής πριν το όνομά της και να επιστρέψει μια τιμή με την εντολή return. Αν η μέθοδος δεν επιστρέφει τιμή πρέπει να δηλωθεί void. Μια κλάση μπορεί να έχει περισσότερες από μια μεθόδους με το ίδιο όνομα. Το χαρακτηριστικό αυτό καλείται υπερφόρτωση μεθόδου (overloading). Κάθε μέθοδος με το ίδιο όνομα πρέπει να έχει διαφορετική υπογραφή από τις υπόλοιπες μεθόδους. Η υπογραφή (signature) μιας μεθόδου αποτελείται από τις ακόλουθες πληροφορίες: Το όνομα μιας μεθόδου Το πλήθος των παραμέτρων της 7

8 Τον τύπο δεδομένων των παραμέτρων και τη σειρά εμφάνισης τους Τους τροποποιητές των παραμέτρων Ο τύπος επιστροφής μιας μεθόδου δεν είναι μέρος της υπογραφής της, όπως επίσης και τα ονόματα των παραμέτρων της. Ακολουθεί ένα παράδειγμα υπερφόρτωσης μεθόδου: class Overload public void OverloadedMethod() Console.WriteLine("No parameters"); // Overload με μια ακέραια παράμετρο. public void OverloadedMethod(int a) Console.WriteLine("One parameter: " + a); // Overload με μια παράμετρο συμβολοσειρών. public void OverloadedMethod(string a) Console.WriteLine("One parameter: " + a); // Overload για δύο ακέραιες παραμέτρους. public int OverloadedMethod(int a, int b) Console.WriteLine("Two parameters: " + a + " " + b); return a + b; // Overload για δυο double παραμετρους. public double OverloadedMethod(double a, double b) Console.WriteLine("Two double parameters: " + a + " "+ b); return a + b; class OverloadDemo static void Main() Overload ob = new Overload(); int resi; double resd; //Κάλεσμα όλων των μεθόδων της OverloadedMethod(). ob.overloadedmethod(); Console.WriteLine(); ob.overloadedmethod(2); Console.WriteLine(); ob.overloadedmethod( Hello! ); Console.WriteLine(); resi = ob.overloadedmethod (4, 6); Console.WriteLine("Result of ob.overloadedmethod(4, 6): " + resi); Console.WriteLine(); resd = ob.overloadedmethod(1.1, 2.32); Console.WriteLine("Result of ob.overloadedmethod(1.1, 2.32): " + resd); Οι παράμετροι μιας μεθόδου στη C# είναι ειδικές μεταβλητές που επιτρέπουν τόσο τη πέρασμα δεδομένων στη μέθοδο κατά την έναρξη της εκτέλεσής της, όσο και την έξοδο δεδομένων από αυτή κατά τον τερματισμό της. Οι τυπικές παράμετροι(formal parameters) είναι τοπικές μεταβλητές που δηλώνονται στη λίστα παραμέτρων της μεθόδου, αντί να δηλώνονται στο σώμα της. Αντίθετα όμως με τις τοπικές μεταβλητές, οι τυπικές παράμετροι ορίζονται έξω από το σώμα της μεθόδου και αρχικοποιούνται πριν το ξεκίνημα της εκτέλεσής της, εκτός από τις παραμέτρους εξόδου (output parameters). Η λίστα παραμέτρων μπορεί να έχει οποιοδήποτε αριθμό τυπικών παραμέτρων και οι δηλώσεις πρέπει να διαχωρίζονται με κόμματα. Οι τυπικές παράμετροι χρησιμοποιούνται στο σώμα της μεθόδου, όπως κάθε άλλη τοπική μεταβλητή. Όταν καλείται μια μέθοδος μέσα από τον κώδικα, οι τιμές των τυπικών παραμέτρων πρέπει να αρχικοποιηθούν πριν το ξεκίνημα της εκτέλεσης των παραμέτρων. Οι εκφράσεις που χρησιμοποιούνται για την αρχικοποίηση των τυπικών παραμέτρων καλούνται πραγματικές παράμετροι (actual parameters). Μερικές φορές καλούνται και ορίσματα (arguments). Οι πραγματικές παράμετροι τοποθετούνται στην λίστα παραμέτρων της μεθόδου κατά την κλήση της. Κάθε πραγματική παράμετρος πρέπει να έχει τον τύπο της αντίστοιχης τυπικής παραμέτρου, ή ο μεταγλωττιστής θα πρέπει να μπορεί να μετατρέψει τον τύπο της στον τύπο της τυπικής παραμέτρου. 8

9 Οι τύποι παραμέτρων που είδαμε ως τώρα καλούνται παράμετροι τιμής (value parametrs), γιατί τα δεδομένα που περνούν στη μέθοδο από αυτές αντιγράφουν την τιμή της πραγματικής παραμέτρου στην τυπική παράμετρο. Όταν καλείται μια μέθοδος, το σύστημα δεσμεύει χώρο στη μνήμη (και πιο συγκεκριμένα στο σωρό) για τις τυπικές παραμέτρους και αντιγράφει τις τιμές των πραγματικών παραμέτρων σε αυτές. Επομένως κάθε αλλαγή στις τιμές των τυπικών παραμέτρων δεν επηρεάζει τις τιμές των πραγματικών παραμέτρων. Αυτή η ιδιότητα είναι γνωστή στη βιβλιογραφία και ως πέρασμα με τιμή (pass by value). Το δεύτερο είδος παραμέτρων που υπάρχει είναι οι παράμετροι αναφορών (reference parameters). Όταν χρησιμοποιούμε μια παράμετρο αναφοράς πρέπει να χρησιμοποιήσουμε τον τροποποιητή ref, τόσο κατά τη δήλωση της μεθόδου όσο και κατά την κλήση της. Η πραγματική τιμή πρέπει να είναι μεταβλητή (άρα όχι κυριολεκτικό) και πρέπει να είναι αρχικοποιημένη πριν χρησιμοποιηθεί σαν πραγματική παράμετρος. Αν είναι μεταβλητή τύπου αναφοράς τότε είτε πρέπει να αναφέρεται σε ένα πραγματικό αντικείμενο, είτε να έχει την τιμή null. Σε αντίθεση με τις παραμέτρους τιμών, στις παραμέτρους αναφορών η τυπική παράμετρος συμπεριφέρεται σαν ψευδώνυμο (alias) της πραγματικής παραμέτρου, δηλαδή αναφέρεται στην ίδια θέση μνήμης με την πραγματική παράμετρο. Κατά συνέπεια, κάθε αλλαγή στις τιμές των τυπικών παραμέτρων επηρεάζει τις τιμές των πραγματικών παραμέτρων. Αυτή η ιδιότητα είναι γνωστή στη βιβλιογραφία και ως πέρασμα με αναφορά (pass by reference). Το τρίτο είδος παραμέτρων που μπορεί να υπάρξει σε μια μέθοδο είναι οι παράμετροι εξόδου (output parameters) και χρίζει ιδιαίτερης προσοχής. Η συμπεριφορά τους είναι ίδια με την συμπεριφορά των παραμέτρων αναφορών, ωστόσο δεν χρειάζεται να είναι αρχικοποιημένη η πραγματική παράμετρος όπως στις παραμέτρους αναφορών, ενώ δεν πρέπει να είναι οποιαδήποτε άλλη έκφραση, έστω και αν αποτιμάται σε κάποια τιμή. Επίσης μέσα στο σώμα της μεθόδου πρέπει υποχρεωτικά να αρχικοποιηθεί η τιμή της παραμέτρου πριν αυτή προσπελαστεί. Κάθε μετέπειτα αλλαγή στην τυπική παράμετρο αντικατοπτρίζεται και στην πραγματική παράμετρο. Δηλώνουμε μια παράμετρο εξόδου με τον τροποποιητή out. Επίσης καλούμε μια μέθοδο με παράμετρο εξόδου πάλι με τον τροποποιητή out. Ακολουθεί ένα παράδειγμα: class Program static void MyMethod(out MyClass f1, out int f2) f1 = new MyClass(); // δημιουργία αντικειμένου της κλάσης. f1.val = 25; // Ανάθεση στο πεδίο της κλάσης. f2 = 15; // ανάθεση στη δεύτερη παράμετρο int. static void Main() MyClass a1 = null; int a2; MyMethod(out a1, out a2); // κλήση της μεθόδου Για τα παραπάνω είδη παραμέτρων που είδαμε πρέπει να υπάρχει ακριβώς μια πραγματική παράμετρος για κάθε τυπική. Οι πίνακες παραμέτρων (parameter arrays) είναι διαφορετικοί στο ότι επιτρέπουν την ύπαρξη πολλαπλών πραγματικών παραμέτρων για μια συγκεκριμένη τυπική παράμετρο. Για τους πίνακες παραμέτρων πρέπει να προσέξουμε τα εξής σημεία: Μπορεί να υπάρξει μόνο ένας πίνακας παραμέτρων σε μια λίστα παραμέτρων. Αν υπάρχει πίνακας παραμέτρων σε μια λίστα παραμέτρων, πρέπει να είναι η τελευταία παράμετρος στη λίστα. Ένας πίνακας παραμέτρων δηλώνεται χρησιμοποιώντας τον τροποποιητή params πριν τον τύπο δεδομένων της παραμέτρου, ενώ χρειάζονται άδειες αγκύλες μετά τον τύπο δεδομένων. Μια τέτοια δήλωση θα έμοιαζε σαν την ακόλουθη: void ListInts( params int[] invals ) 9

10 Οι αγκύλες δίπλα από τον τύπο δεδομένων προσδιορίζουν ότι η παράμετρος θα είναι ένας πίνακας ακεραίων (array of ints). Οι πίνακες θα αναλυθούν σε επόμενη ενότητα αλλά το μόνο που χρειαζόμαστε να ξέρουμε για αυτούς προς το παρόν είναι ότι είναι μια διατεταγμένη λίστα μεταβλητών του ίδιου τύπου δεδομένων που προσπελαύνεται με έναν αριθμητικό δείκτη. Τα τέσσερα είδη παραμέτρων που είδαμε συνοψίζονται στον πίνακα 4.1. Πίνακας Είδη παραμέτρων σε μια μέθοδο Είδος παραμέτρου Τροποποιητής Χρησιμοποιείται Χρησιμοποιείται κατά Υλοποίηση κατά τη δήλωση; την κλήση; Value Κανένας - - Το σύστημα αντιγράφει την τιμή της πραγματικής παραμέτρου στην τυπική παράμετρο Reference ref Ναι Ναι Η τυπική παράμετρος αποτελεί ψευδώνυμο της πραγματικής παραμέτρου Output out Ναι Ναι Η τυπική παράμετρος αποτελεί ψευδώνυμο της πραγματικής παραμέτρου Array params Ναι Όχι Περνάει ένα πλήθος πραγματικών παραμέτρων στη μέθοδο Τέλος η C# μας δίνει δυο χαρακτηριστικά για τις παραμέτρους που μπορούν να μας φανούν χρήσιμα. Αυτά είναι οι προαιρετικές παράμετροι (optional parameters) και οι ονομασμένες παράμετροι (named parameters). Οι πρώτες μας επιτρέπουν να παραλείψουμε την παροχή μιας παραμέτρου κατά την κλήση μιας μεθόδου και οι δεύτερες μας επιτρέπουν να αλλάξουμε τη σειρά των παραμέτρων κατά την κλήση μιας μεθόδου. Το πρώτο επιτυγχάνεται κάνοντας μια ανάθεση τιμής σε μια τυπική παράμετρο μιας μεθόδου και το δεύτερο επιτυγχάνεται παρέχοντας το όνομα της τυπικής παραμέτρου ακολουθούμενο από άνω και κάτω τελεία κατά την κλήση της μεθόδου. Ακολουθεί ένα παράδειγμα: class Calculator public int PerformCalculation(int x, int y = 10, int divisor = 2) return (x*y)/divisor; static void Main(string[] args) Calculator c = new Calculator(); //default constructor //παρακάτω περνάμε μόνο δυο παραμέτρους και μάλιστα σε διαφορετική //σειρά απ ότι δηλώθηκαν //παρατηρήστε ότι το x είναι υποχρεωτικό και δεν γίνεται να παραληφθεί int result = c.performcalculation(y: 10, x: 1); Ιδιότητες Οι ιδιότητες (properties) μοιάζουν με πεδία εξωτερικά, αλλά εσωτερικά περιέχουν λογική, δηλαδή εκτελέσιμο κώδικα, ακριβώς όπως οι μέθοδοι. Οι ιδιότητες μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο που χρησιμοποιούνται τα μέλη δεδομένων. Η C# παρέχει ένα συγκεκριμένο συντακτικό για την υλοποίηση ιδιοτήτων για το διάβασμα (read) και το γράψιμο (write) των πεδίων μιας κλάσης, για να μη χρειάζεται η χρήση μεθόδων με το όνομα getx ή sety, όπως χρειάζεται σε άλλες γλώσσες προγραμματισμού. Μια ιδιότητα δηλώνεται όπως ένα πεδίο, αλλά με την προσθήκη δυο get και set μπλοκ κώδικα. Ακολουθεί ένα παράδειγμα: public class MyClass decimal price; public decimal Price 10

11 get return price; set price = value; Οι λέξεις get και set καλούνται property accessors. Ο get accessor εκτελείται όταν η ιδιότητα διαβάζεται. Πρέπει να επιστρέφει μια τιμή του τύπου δεδομένων της ιδιότητας. Ο set accessor εκτελείται όταν ανατίθεται τιμή. Έχει μια νοητή παράμετρο με το όνομα value του ίδιου τύπου δεδομένων με αυτού της ιδιότητας, η οποία ανατίθεται στο πεδίο που αντιστοιχεί στην ιδιότητα. Στο παραπάνω παράδειγμα η νοητή παράμετρος value αναθέτει μια τιμή στο πεδίο price. Παρόλο που οι ιδιότητες προσπελαύνονται με τον ίδιο τρόπο που προσπελαύνονται τα πεδία, διαφέρουν στο γεγονός ότι δίνουν πλήρη έλεγχο στον προγραμματιστή στο πως θα παρουσιάσει τα δεδομένα χωρίς να εκθέσει τις εσωτερικές τους λεπτομέρειες. Στο παράδειγμα παραπάνω, θα μπορούσε να προκύπτει μια εξαίρεση, ή να εμφανίζεται ένα μήνυμα λάθους αν η value ήταν π.χ. αρνητική τιμή (αφού ένα κόστος δεν μπορεί να έχει αρνητική τιμή). Οι ιδιότητες μπορούν να έχουν μπροστά από τον τύπο δεδομένων τους, τους εξής τροποποιητές: Τον τροποποιητή static Τους τροποποιητές πρόσβασης: public, internal, private, protected Τους τροποποιητές κληρονομικότητας: new, virtual, abstract, override, sealed Τους τροποποιητές μη-διαχειρισμένου κώδικα: unsafe, extern Μια ιδιότητα καλείται read-only αν ορίζει μόνο έναν get accessor και είναι write-only αν ορίζει μόνο έναν set accessor. Οι ιδιότητες write-only χρησιμοποιούνται σπάνια. Μια ι- διότητα συνήθως αντιστοιχεί αποκλειστικά σε ένα πεδίο που αποθηκεύει τα δεδομένα της. Ωστόσο είναι δυνατό, μια ιδιότητα να υπολογίζεται από άλλα δεδομένα, όπως στο παρακάτω παράδειγμα: decimal currentprice, sharesowned; public decimal Worth get return currentprice * sharesowned; Η πιο συνηθισμένη υλοποίηση μιας ιδιότητας που αποτελεί ταυτόχρονα και καλή πρακτική είναι ένα get και ένα set που απλώς διαβάζουν και γράφουν σε ένα (private) πεδίο του ίδιου τύπου δεδομένων με την ιδιότητα. Για τον λόγο αυτό, υπάρχει η δυνατότητα χρήσης της αυτόματης ιδιότητας (automatic property). Μια δήλωση αυτόματης ιδιότητας ζητάει από το μεταγλωττιστή να ορίσει αυτόματα ένα πεδίο που αντιστοιχεί στην ιδιότητα. Ένα παράδειγμα θα ήταν το ακόλουθο: public class Stock //... άλλες δηλώσεις public decimal CurrentPrice get; set; Ο μεταγλωττιστής παράγει αυτόματα ένα αντίστοιχο πεδίο με ένα όνομα που δεν μπορεί ωστόσο να χρησιμοποιηθεί. Η χρήση του προφανώς θα γίνεται μόνο μέσω της ιδιότητας. Ακόμα και στις αυτόματες ιδιότητες είναι δυνατόν να οριστούν τροποποιητές πριν τις λέξεις get και set για τον έλεγχο πρόσβασης στο διάβασμα ή το γράψιμο. 11

12 Κατασκευαστές Εισαγωγή στη C# και το.net 4.0 Οι κατασκευαστές (constructors) είναι ειδικές μέθοδοι που καλούνται κατά τη δημιουργία ενός αντικειμένου. Πρέπει να έχουν το ίδιο όνομα με την κλάση στην οποία ανήκουν και δεν μπορεί να έχουν τύπο επιστροφής. Οι κατασκευαστές παρουσιάζονται αναλυτικά στην παράγραφο 4.3. Καταστροφείς Οι καταστροφείς είναι παρόμοιοι με τους κατασκευαστές αλλά καλούνται όταν το CLR αντιληφθεί ότι ένα αντικείμενο δεν χρησιμοποιείται και κατά συνέπεια δεν χρειάζεται άλλο στο πρόγραμμα. Οι καταστροφείς έχουν το ίδιο όνομα με την κλάση στην οποία ανήκουν με μια πεσπιρωμένη (tilde) μπροστά (~). Τελεστές Η C# επιτρέπει την παράκαμψη της λειτουργικότητας των τελεστών μέσα σε μια κλάση, από την προεπιλεγμένη συμπεριφορά τους όπως τους είδαμε. Indexers Οι indexers επιτρέπουν τη δημιουργία ευρετηρίων από τα μέλη μιας κλάσης, δίνοντάς τους λειτουργικότητα όμοια με αυτή των πινάκων ή των συλλογών. Έστω για παράδειγμα ότι ορίζουμε μια κλάση με τρία πεδία. Μπορούμε να χρησιμοποιήσουμε αυτά τα πεδία έξω από την κλάση με τη σημειογραφία dot-syntax (περιγράφεται στην επόμενη παράγραφο 4.2.3). Αυτό φαίνεται στον ακόλουθο κώδικα: class MyClass public int a; public int b; public int c; class Program static void Main() MyClass obj = new MyClass(); obj.a = 1; obj.b = 2; obj.c = 3; Υπάρχουν περιπτώσεις ωστόσο που είναι βολικό να προσπελαύνουμε τα πεδία αυτά με τον ίδιο τρόπο που προσπελαύνουμε τους πίνακες, δηλαδή με τη σημειογραφία ευρετηρίου(index notation). Η σημειογραφία αυτή αποτελείται από έναν δείκτη ανάμεσα σε αγκύλες. Ακολουθεί ένα παράδειγμα που χρησιμοποιεί τη MyClass όπως ορίστηκε παραπάνω: class Program static void Main() MyClass obj = new MyClass(); οbj[1] = 1; //ίδια δήλωση με obj.a = 1; οbj[2] = 2; //ίδια δήλωση με obj.a = 2; οbj[3] = 3; //ίδια δήλωση με obj.a = 3; Ένας indexer είναι ένα ζευγάρι από set και get accessors, παρόμοιους με αυτούς των ιδιοτήτων. Οι indexers και οι ιδιότητες είναι παρόμοιες σε πολλαπλά σημεία: Ένας indexer δεν δεσμεύει μνήμη για αποθήκευση. Τόσο οι indexers όσο και οι ιδιότητες χρησιμοποιούνται κυρίως για να δίνουν πρόσβαση σε άλλα μέλη δεδομένων μιας κλάσης με τα οποία συσχετίζονται και για τα οποία παρέχουν τα get και set. 12

13 Μια ιδιότητα κυρίως αναπαριστά ένα μέλος δεδομένων. Ένας indexer συνήθως αναπαριστά πολλαπλά μέλη δεδομένων. Πρέπει να παρατηρήσουμε τα εξής για το συντακτικό δήλωσης ενός indexer: Ένας indexer δεν έχει όνομα αλλά χρησιμοποιεί τη λέξη this. Η λίστα παραμέτρων βρίσκεται ανάμεσα σε αγκύλες. Πρέπει να υπάρχει τουλάχιστον μια παράμετρος στη λίστα παραμέτρων. Το συντακτικό δήλωσης θα φαίνεται κάπως έτσι: ReturnType this [ Type param1,... ] get Square bracket Square bracket //... set // Προσπέλαση μελών κλάσης Μέσα σε μια κλάση, μέσα σε κάθε μέλος λειτουργίας όπως για παράδειγμα μια μέθοδο, μπορεί να προσπελαστεί οποιοδήποτε άλλο μέλος της κλάσης, πολύ απλά χρησιμοποιώντας το όνομά του. Ήδη έχουμε δει μερικά παραδείγματα παραπάνω αλλά ας ξαναδούμε ένα παράδειγμα: public class MyClass decimal myfield; public decimal Price get return myfield * 2; //προσπέλαση του πεδίου myfield set myfield = value / 2; //προσπέλαση του πεδίου myfield void PrintNum() Console.WriteLine(myField); //προσπέλαση του πεδίου myfield Αυτό που χρειάζεται προσοχή ωστόσο είναι η προσπέλαση των μελών εκτός της κλάσης που ορίζονται. Στην περίπτωση αυτή μιλάμε πλέον για προσπέλαση μελών αντικειμένων και πιο συγκεκριμένα για προσπέλαση μελών στιγμιότυπου (instance members). Η προσπέλαση των μελών στιγμιότυπου γίνεται μόνο μέσα από τα αντικείμενα μιας κλάσης, κάτι που σημαίνει ότι πρώτα πρέπει να έχουμε δημιουργήσει ένα αντικείμενό της (παράγραφος 4.3). Αφού έχουμε διαθέσιμο ένα αρχικοποιημένο αντικείμενο μπορούμε να προσπελάσουμε τα διαθέσιμα μέλη της με τον τελεστή τελεία (.). Η χρήση της τελείας για την προσπέλαση των μελών στιγμιότυπου εκτός της κλάσης όπου ορίζονται καλείται σημειογραφία dot-syntax. Η σημειογραφία αυτή αποτελείται από το όνομα του αντικειμένου (στιγμιότυπου), ακολουθούμενο από μια τελεία, ακολουθούμενο από το όνομα του μέλους. Μια πρόταση που προσπελαύνει ένα μέλος στιγμιότυπου είναι η ακόλουθη: myobject.myfield = 5; 13

14 Η παραπάνω πρόταση για να είναι έγκυρη, προϋποθέτει την ύπαρξη ενός αρχικοποιημένου αντικειμένου, στην συγκεκριμένη περίπτωση του myobject και την ύπαρξη ενός προσβάσιμου (accessible) πεδίου. Όπως θα δούμε σε επόμενη ενότητα, μπορούμε να ελέγξουμε το αν θα είναι προσβάσιμο ένα μέλος από μια κλάση εξωτερικά, από μια κλάση ενός άλλου ονοματοχώρου ή από μια κλάση εκτός του assembly. Η C# μας παρέχει έναν ολοκληρωμένο τρόπο για τον έλεγχο πρόσβασης (access control) στα μέλη μιας κλάσης με τους τροποποιητές πρόσβασης (access modifiers). Η λέξη this Η λέξη this, που χρησιμοποιείται μέσα σε μια κλάση, είναι μια αναφορά στο τρέχον αντικείμενο. Μπορεί να χρησιμοποιηθεί μόνο μέσα σε μπλοκ κώδικα των ακόλουθων μελών κλάσης: Των κατασκευαστών στιγμιότυπου Των μεθόδων στιγμιότυπου Των ιδιοτήτων και των indexers Η λέξη this χρησιμοποιείται κυρίως για να διακρίνουμε τα μέλη μιας κλάσης από συνώνυμες τοπικές μεταβλητές ή παραμέτρους ή απλώς σαν μια παράμετρος σε μια μέθοδο. Για παράδειγμα στον παρακάτω κώδικα, δηλώνεται μια κλάση με ένα πεδίο int και μια μέθοδο που λαμβάνει μια μόνο παράμετρο. Η μέθοδος συγκρίνει τις τιμές της παραμέτρου και του πεδίου και επιστρέφει αυτήν που έχει τη μεγαλύτερη τιμή. Το μόνο περίπλοκο σε αυτό το παράδειγμα είναι ότι το όνομα του πεδίου και της μεταβλητής είναι το ίδιο. Για να διακρίνουμε τις δύο μεταβλητές μεταξύ τους χρησιμοποιούμε τη λέξη this. class MyClass int Var1 = 10; public int ReturnMaxSum(int Var1) return Var1 > this.var1? Var1 : this.var1; class Program static void Main() MyClass mc = new MyClass(); Console.WriteLine("Max: 0", mc.returnmaxsum(30)); Console.WriteLine("Max: 0", mc.returnmaxsum(5)); 4.3. Δημιουργία αντικειμένων Έχοντας μια λειτουργική δήλωση κλάσης το επόμενο βήμα είναι να δημιουργήσουμε αντικείμενα από αυτή και να τα χρησιμοποιήσουμε στον κώδικά μας. Η δημιουργία ενός α- ντικειμένου από μια κλάση αποτελείται από δυο χαρακτηριστικά: Τον τελεστή new Έναν κατασκευαστή της κλάσης Ας εξετάσουμε καθένα από τα χαρακτηριστικά αυτά ξεχωριστά Κατασκευαστές Οι κατασκευαστές (constructors) είναι ειδικές μέθοδοι που καλούνται κατά τη δημιουργία ενός αντικειμένου. Οι κατασκευαστές περιέχουν τις εντολές αρχικοποίησης ενός α- ντικειμένου, δηλαδή τις εντολές που δίνουν στο αντικείμενο μια αρχική κατάσταση (initial state). Τέτοιες μπορεί να είναι η ανάθεση αρχικών τιμών στα πεδία του αντικειμένου, το ά- νοιγμα συνδέσεων στο δίκτυο ή σε βάσεις δεδομένων και άλλες. Το συντακτικό για τη δήλωση ενός απλού κατασκευαστή είναι μια μέθοδος που έχει το ίδιο όνομα με την κλάση που τον περιέχει αλλά δεν έχει τύπο επιστροφής: public class MyClass 14

15 public MyClass() //... υπόλοιπη δήλωση της κλάσης Οι κατασκευαστές επιτρέπουν τους ακόλουθους τροποποιητές πριν το όνομά τους: Τους τροποποιητές πρόσβασης public, internal, private, protected Τους τροποποιητές μη-διαχειρισμένου κώδικα: unsafe, extern Σε μια κλάση μπορούν να οριστούν περισσότεροι από ένας κατασκευαστές. Οι κατασκευαστές διακρίνονται μεταξύ τους ανάλογα με το πλήθος και τον τύπο δεδομένων των παραμέτρων τους. Για κάθε πιθανό συνδυασμό παραμέτρων όμως μπορεί να οριστεί μόνο ένας κατασκευαστής. Η δυνατότητα αυτή ονομάζεται υπερφόρτωση κατασκευαστών (constructor overloading). Ακολουθεί ένα παράδειγμα: class MyClass int Id; string Name; public MyClass() Id=28; Name="Nemo"; // Constructor 0 public MyClass(int val) Id=val; Name="Nemo"; // Constructor 1 public MyClass(string name) Name=name; // Constructor 2 public void PrintName() Console.WriteLine("Name 0, Id 1", Name, Id); Στο παραπάνω παράδειγμα η κλάση MyClass περιέχει τρεις κατασκευαστές: έναν χωρίς παραμέτρους, έναν με μια παράμετρο και πιο συγκεκριμένα έναν ακέραιο και έναν πάλι με μια παράμετρο αλλά αυτή τη φορά τύπου string. Παρατηρούμε ότι οι παράμετροι των κατασκευαστών έχουν το ίδιο όνομα με το όνομα των πεδίων, αλλά αν προσέξουμε πιο προσεκτικά τα ονόματα των πεδίων ξεκινούν με κεφαλαίο. Επειδή η C# κάνει διάκριση μεταξύ πεζών και κεφαλαίων, είναι σε θέση να διακρίνει τα πεδία από τις παραμέτρους. Στην περίπτωση ωστόσο που είχαν ακριβώς το ίδιο όνομα τότε θα υπήρχε πρόβλημα και ο μεταγλωττιστής θα αναγνώριζε μόνο την τοπική μεταβλητή. Ένας κατασκευαστής μπορεί να αρχικοποιεί ένα σύνολο πεδίων ακριβώς με τον ίδιο τρόπο που αρχικοποιεί το ίδιο σύνολο πεδίων ένας άλλος κατασκευαστής, αλλά να διαφοροποιείται στην αρχικοποίηση ορισμένων μόνο μεταβλητών. Η C# δίνει τη δυνατότητα κλήσης ενός κατασκευαστή από έναν άλλο με τη χρήση της λέξης this, για την αποφυγή της ε- πανάληψης κώδικα. Η δυνατότητα αυτή φαίνεται στο ακόλουθο παράδειγμα: public class Wine public decimal Price; public int Year; public Wine (decimal price) Price = price; public Wine (decimal price, int year) : this (price) Year = year; Αν δεν έχει οριστεί κάποιος κατασκευαστής σε μια κλάση, ο μεταγλωττιστής παράγει αυτόματα έναν κατασκευαστή χωρίς παραμέτρους. Αν όμως δηλωθεί έστω και ένας με ο- ποιεσδήποτε παραμέτρους τότε αυτός ο κατασκευαστής δεν δημιουργείται. Άλλο ένα λιγότερο δημοφιλές χαρακτηριστικό των κατασκευαστών, είναι η αρχικοποίηση των παραμέτρων μέσα στη λίστα των παραμέτρων του κατασκευαστή, καθιστώντας τες προαιρετικές. Για παράδειγμα: public Student(string name, bool hasgraduated = false, bool isfreshman = false) Name = name; HasGraduated = hasgraduated; IsFreshman = isfreshman; 15

16 Με αυτή τη δήλωση μπορεί να παραληφθεί οποιαδήποτε εκ των αρχικοποιημένων παραμέτρων κατά την κλήση του κατασκευαστή. Ωστόσο μια τέτοια δήλωση καλό είναι να αποφεύγεται γιατί δημιουργεί προβλήματα μεταξύ διαφορετικών assemblies κατά τις αλλαγές της λίστας παραμέτρων Δήλωση αντικειμένων Η δήλωση μιας κλάσης απλώς περιγράφει τη δομή των αντικειμένων της. Έχοντας δηλώσει μια κλάση και (προαιρετικά) έναν ή περισσότερους κατασκευαστές, μπορούμε να δημιουργήσουμε τα αντικείμενα μιας κλάσης. Η δήλωση ενός αντικειμένου, δηλαδή μιας μεταβλητής με τύπο δεδομένων μια κλάση (τύπο αναφοράς δηλαδή), γίνεται με τον ίδιο τρόπο που δηλώνονται οι μεταβλητές τύπου τιμής: class MyClass //δήλωση κλάσης class Program static void Main() MyClass myobject; //δήλωση αντικειμένου, δηλ. μεταβλητής τύπου αναφοράς Οι κλάσεις είναι τύποι αναφορών (reference types), κάτι που σημαίνει ότι χρειάζονται μνήμη τόσο για την αναφορά προς τα δεδομένα, όσο και για τα δεδομένα καθαυτά. Η αναφορά προς τα δεδομένα είναι ουσιαστικά μια διεύθυνση μνήμης που αποθηκεύεται σε μια μεταβλητή του τύπου της κλάσης. Για να δημιουργηθεί λοιπόν ένα αντικείμενο μιας κλάσης πρέπει να ξεκινήσουμε δηλώνοντας μια αναφορά. Αν αυτή η αναφορά (δηλαδή η μεταβλητή του τύπου της κλάσης) δεν έχει αρχικοποιηθεί, η τιμή της είναι μη καθορισμένη(undefined). Στο παραπάνω παράδειγμα λοιπόν η μεταβλητή myobject, που έτσι όπως είναι, είναι κενή, θα κρατήσει μια αναφορά και όχι τα μέλη δεδομένων του αντικειμένου, όπως προστάζει η κλάση. Αυτή η διάκριση είναι πολύ σημαντική και πρέπει να τη θυμόμαστε πάντα. Για να δεσμεύσουμε τη μνήμη που θα αποθηκεύει τα πραγματικά δεδομένα του αντικειμένου πρέπει να χρησιμοποιήσουμε τον τελεστή new Ο τελεστής new H δήλωση μιας μεταβλητής τύπου αναφοράς, δεσμεύει μεν χώρο στη μνήμη για μια αναφορά, αλλά όχι και για τα πραγματικά δεδομένα του αντικειμένου. Για τη δέσμευση των πραγματικών δεδομένων χρησιμοποιούμε τον τελεστή new. Ο τελεστής new δεσμεύει μνήμη και αρχικοποιεί ένα στιγμιότυπο ενός συγκεκριμένου τύπου αναφοράς, καλώντας τον κατασκευαστή του. Μια έκφραση δημιουργίας αντικειμένων (object creation expression) λοιπόν έχει την εξής μορφή: new όνομα-κλάσης(λίστα παραμέτρων) Το όνομα-κλάσης είναι το όνομα της κλάσης από την οποία θέλουμε να δημιουργήσουμε ένα αντικείμενο. Το όνομα της κλάσης ακολουθούμενο από τις παρενθέσεις προσδιορίζει τον κατασκευαστή της κλάσης. Όπως αναφέραμε, αν στην κλάση δεν ορίζεται κανένας κατασκευαστής, η C# θα δημιουργήσει έναν χωρίς παραμέτρους αυτόματα και θα χρησιμοποιήσει αυτόν. Επομένως ο τελεστής new μπορεί να χρησιμοποιηθεί για τη δημιουργία α- ντικειμένων οποιασδήποτε κλάσης. Η παραπάνω έκφραση επιστρέφει μια αναφορά προς τις δεσμευμένες θέσεις στη μνήμη που περιέχουν τις τιμές των πεδίων, έτσι όπως ορίστηκαν από τον κατασκευαστή. Η δήλωση μιας μεταβλητής τύπου αναφοράς και η αρχικοποίησή της (δηλαδή η δημιουργία του αντικειμένου) μπορούν προφανώς να γίνουν σε ξεχωριστά μέρη στον κώδικα. Σε αυτήν την περίπτωση όμως θα πρέπει να προσέχουμε την ορατότητα της μεταβλητής, όπως στο παρακάτω παράδειγμα: class A class B class C //δήλωση δυο απλών κλάσεων; //παρατηρούμε ότι δεν ορίζουν κατασκευαστές 16

17 A aobject; //δήλωση ενός αντικειμένου που είναι ορατό σε όλες τις μεθόδους //της κλάσης C void Initialize() B bobject; aobject = new A(); //το aobject είναι ορατό // και η αρχικοποίηση γίνεται εδώ void DoNothing() bobject = new B(); //ERROR! το bobject δεν είναι ορατό μόνο στην //Initialize και δεν μπορεί να αρχικοποιηθεί από εδώ! Αρχικοποιητές Παραπάνω είδαμε ότι μια έκφραση δημιουργίας αντικειμένων αποτελείται από τη λέξη new ακολουθούμενη από τον κατασκευαστή της κλάσης και τη λίστα παραμέτρων του. Ένας αρχικοποιητής αντικειμένων(object initializer) επεκτείνει το συντακτικό αυτό τοποθετώντας μια λίστα αρχικοποιήσεων μελών στο τέλος της έκφρασης. Έτσι επιτρέπεται η ανάθεση τιμών στα πεδία και τις ιδιότητες όταν δημιουργείται ένα νέο αντικείμενο. Το συντακτικό έχει δυο μορφές και φαίνεται παρακάτω. Η πρώτη μορφή περιλαμβάνει τη λίστα παραμέτρων του κατασκευαστή, ενώ η δεύτερη όχι. Στη δεύτερη παρατηρούμε ότι δεν χρειάζεται να χρησιμοποιήσουμε τις παρενθέσεις του κατασκευαστή: new TypeName(ArgList) FieldOrProp = InitExpr, FieldOrProp = InitExpr,... new TypeName FieldOrProp = InitExpr, FieldOrProp = InitExpr,... Για παράδειγμα, για μια κλάση με δυο public ακέραια πεδία x και y, μπορούμε να χρησιμοποιήσουμε την ακόλουθη έκφραση για τη δημιουργία ενός αντικειμένου: new Point x = 5, y = 6 ; Τα σημεία που πρέπει να θυμώμαστε για τους αρχικοποιητές είναι τα ακόλουθα: Τα πεδία και οι ιδιότητες που αρχικοποιούνται πρέπει να είναι προσβάσιμα στον κώδικα που δημιουργεί το αντικείμενο. Η αρχικοποίηση πραγματοποιείται μετά το πέρας της εκτέλεσης του κατασκευαστή, οπότε μπορεί ο κατασκευαστής να έχει αρχικοποιήσει με έναν τρόπο τα πεδία, αλλά τελικά θα έχουν τις τιμές που ορίζει ο αρχικοποιητής Καταστροφή αντικειμένων Σε μερικές γλώσσες όπως η C++, ο προγραμματιστής χρειάζεται να δεσμεύσει ρητά τους πόρους του συστήματος που χρειάζεται ένα αντικείμενο, πριν αυτό χρησιμοποιηθεί. Το αντίστροφο συμβαίνει και όταν πρέπει ένα αντικείμενο να καταστραφεί. Η αποδέσμευση των πόρων που χρησιμοποιούσε ένα αντικείμενο πρέπει να γίνει ρητά από τον προγραμματιστή. Αν οι πόροι δεν αποδεσμεύονται (ειδικά αν αυτοί είναι μνήμη) τότε λέμε ότι συμβαίνει διαρροή μνήμης (memory leak) και το πρόγραμμα δεσμεύει όλο και περισσότερους πόρους. Από την άλλη μεριά, αν οι πόροι αποδεσμευτούν νωρίς, μπορεί να συμβεί απώλεια δεδομένων, αλλοίωση περιοχών στη μνήμη και μπορεί να προκύψουν null pointer exceptions. Αυτοί οι κίνδυνοι δεν υπάρχουν στο.νετ. Ο κύκλος ζωής ενός αντικειμένου είναι α- ποκλειστική δουλειά του CLR μέσα από το μηχανισμό της συλλογής σκουπιδιών (garbage collection). O συλλογέας σκουπιδιών ελέγχει περιοδικά το σωρό (heap) στη μνήμη για αντικείμενα που πλέον δεν χρειάζονται στο πρόγραμμα για την ακρίβεια που δεν αναφέρονται από κανένα άλλο αντικείμενο και αποδεσμεύει αυτόματα τους πόρους που δεσμεύουν τα αντικείμενα αυτά. 17

18 Καταστροφείς Εισαγωγή στη C# και το.net 4.0 Οι καταστροφείς (destructors) επιτελούν τις απαραίτητες ενέργειες για το «καθάρισμα» ή την αποδέσμευση πόρων, όπως για παράδειγμα μια σύνδεση στη βάση δεδομένων ή το δίκτυο, όταν ένα αντικείμενο μιας κλάσης δεν αναφέρεται άλλο από οπουδήποτε στον κώδικα. Τα σημεία που πρέπει να θυμόμαστε για τους καταστροφείς είναι τα ακόλουθα: Μπορεί να υπάρχει μόνο ένας καταστροφέας ανά κλάση. Ένας καταστροφέας δεν μπορεί να έχει παραμέτρους. Ένας καταστροφέας έχει το ίδιο όνομα με την κλάση αλλά από αυτό προηγείται μια πεσπιρωμένη (tilde) ~. Ένας καταστροφέας ενεργεί πάνω σε αντικείμενα μιας κλάσης και κατά συνέπεια δεν υπάρχουν στατικοί κατασκευαστές. Δεν γίνεται να κληθεί ένας καταστροφέας από τον κώδικα. Αντίθετα καλείται αυτόματα κατά τη διαδικασία της συλλογής σκουπιδιών, όταν ο συλλογέας αναλύσει τον κώδικα και αποφασίσει ότι δεν υπάρχει κάποιο μονοπάτι εκτέλεσης που να αναφέρεται στο αντικείμενο. Δεν υπάρχει τρόπος να γνωρίζουμε πότε θα κληθεί ο καταστροφέας. Η δήλωση ενός καταστροφέα μοιάζει με την παρακάτω: MyClass ~MyClass() // destructor CleanupCode... Δεν χρειάζεται να υλοποιήσουμε έναν καταστροφέα αν δεν τον χρειαζόμαστε πραγματικά γιατί εισάγει κόστος στην επίδοση. Ένας καταστροφέας πρέπει να αποδεσμεύει μόνο εξωτερικούς πόρους που διαχειρίζεται ένα αντικείμενο. Ένας καταστροφέας δεν πρέπει να χρησιμοποιεί άλλα αντικείμενα γιατί δεν μπορούμε να ξέρουμε αν αυτά έχουν ήδη καταστραφεί. Αν ο κώδικας μας περιέχει μη διαχειρισμένους πόρους, δηλαδή πόρους που δεν διαχειρίζεται το.νετ, και οι πόροι αυτοί πρέπει να αποδεσμευτούν, η χρήση ενός καταστροφέα δεν είναι ενδεδειγμένη, γιατί δεν ξέρουμε πότε θα εκτελεστεί. Στην περίπτωση αυτή χρησιμοποιείται μια πιο προχωρημένη μέθοδος που δεν θα εξετάσουμε: η χρήση κλάσεων που υλοποιούν το interface IDisposable Στατικά μέλη και κλάσεις Μέχρι στιγμής εξετάσαμε τα πιθανά μέλη μιας κλάσης τα οποία είναι γνωστά ως μέλη στιγμιότυπου (instance members). Όπως είδαμε στην παράγραφο 4.2.3, για να προσπελαστούν εκτός της κλάσης στην οποία ορίζονται, πρέπει να δημιουργήσουμε ένα αντικείμενο της συγκεκριμένης κλάσης. Αυτό σημαίνει ότι ουσιαστικά τα μέλη αυτά ανήκουν σε κάθε α- ντικείμενο και όχι στην ίδια την κλάση. Αυτό φαίνεται και στο παρακάτω παράδειγμα: class MyClass public int a; public MyClass(int p)a = p; class Program static void Main(string[] args) //δήλωση και αρχικοποίηση δυο διαφορετικών αντικειμένων MyClass ob1 = new MyClass(1);// το πεδίο a του αντικειμένου έχει τιμή 1 MyClass ob2 = new MyClass(2);// το πεδίο a του αντικειμένου έχει τιμή 2 18

19 Στατικά μέλη Εισαγωγή στη C# και το.net 4.0 Εκτός των πεδίων στιγμιότυπων οι κλάσεις μπορούν να έχουν και τα στατικά μέλη (static members). Καλούμε ως στατικά τα μέλη που ανήκουν στην ίδια την κλάση (στον ίδιο τον τύπο δεδομένων) αντί να ανήκουν σε κάθε αντικείμενο. Ορίζουμε στατικά μέλη ακριβώς με τον ίδιο τρόπο που ορίζουμε μέλη στιγμιότυπου, προσθέτοντας πριν το όνομα του μέλους τον τροποποιητή static. Τα στατικά μέλη μιας κλάσης είναι κοινά σε όλα τα αντικείμενα της κλάσης αλλά και όλα τα υπόλοιπα αντικείμενα (ανάλογα με την προσβασιμότητά τους). Ο χρόνος ύπαρξης των στατικών μελών είναι διαφορετικός από αυτόν των μελών στιγμιότυπου. Τα μέλη στιγμιότυπου αρχικοποιούνται κατά τη δημιουργία του στιγμιότυπου και παύουν να υπάρχουν όταν αυτό καταστρέφεται. Αντίθετα τα στατικά μέλη υπάρχουν και είναι προσπελάσιμα ακόμα και αν δεν υπάρχουν στιγμιότυπα της κλάσης όπου περιέχονται. Αν κάποιο στατικό πεδίο αρχικοποιείται κατά τη δήλωσή του, τότε η αρχικοποίηση συμβαίνει πριν τη χρήση οποιουδήποτε στατικού πεδίου της κλάσης όπου ανήκει, αλλά όχι απαραίτητα κατά το ξεκίνημα της εκτέλεσης του προγράμματος. Από τη λίστα των πιθανών μελών μιας κλάσης δύο μέλη δεν μπορούν να δηλωθούν ως στατικά: Οι σταθερές (constants) και οι indexers. Οι σταθερές έχουν αυτή την ιδιομορφία γιατί έχουν παρόμοια συμπεριφορά με ένα static πεδίο: είναι ορατές σε κάθε στιγμιότυπο μιας κλάσης και είναι διαθέσιμες ακόμα και αν δεν υπάρχουν στιγμιότυπα της κλάσης. Αντίθετα με τα πραγματικά στατικά πεδία όμως, οι σταθερές δεν έχουν μια ξεχωριστή δική τους θέση στη μνήμη και μεταφέρονται στη μνήμη από τον μεταγλωττιστή κατά την εκτέλεση του προγράμματος. Στατικά πεδία Στο παρακάτω παράδειγμα αντιπαραθέτουμε ένα στατικό με ένα μέλος στιγμιότυπου και δημιουργούμε δυο αντικείμενα για να δούμε τη διαφορά: public class Student public string Name; // Instance field public static int Population; // Static field public Student(string n) // Constructor Name = n; // ανάθεση τιμής στο πεδίο στιγμιότυπου Population = Population + 1; // αύξηση κατά ένα στον πληθυσμό class Program static void Main() Student p1 = new Student("Nick"); Student p2 = new Student("George"); Console.WriteLine (p1.name); // Nick Console.WriteLine (p2.name); // George Console.WriteLine (Student.Population); // 2 Όπως παρατηρούμε στο παραπάνω παράδειγμα χρησιμοποιούμε ένα στατικό πεδίο χρησιμοποιώντας το όνομα της κλάσης και όχι το όνομα κάποιου αντικειμένου. Στατικές μέθοδοι Εκτός από τα στατικά πεδία, υπάρχουν και οι στατικές μέθοδοι. Οι στατικές μέθοδοι, όπως όλα τα στατικά μέλη, σχετίζονται με την ίδια την κλάση. Ωστόσο με τις στατικές μεθόδους μπορούμε να προσπελάσουμε μόνο στατικά μέλη, δηλαδή στατικά πεδία, στατικές ι- διότητες και άλλες στατικές μεθόδους. Για παράδειγμα, η ακόλουθη κλάση περιέχει ένα στατικό πεδίο και μια στατική μέθοδο. Παρατηρούμε, ότι το σώμα της στατικής μεθόδου προσπελαύνει ένα στατικό πεδίο: class MyClass static public int A; // Static field 19

20 static public void PrintValA() // Static method Console.WriteLine("Value of A: 0", A); class Program static void Main() MyClass.A = 10; // Use dot-syntax notation MyClass.PrintValA(); // Use dot-syntax notation Στατικοί κατασκευαστές Οι κατασκευαστές μιας κλάσης μπορούν επίσης να είναι στατικοί. Ενώ ένας κανονικός κατασκευαστής, αρχικοποιεί κάθε νέο αντικείμενο μιας κλάσης, ένας στατικός κατασκευαστής αρχικοποιεί τα στατικά πεδία μιας κλάσης. Οι στατικοί κατασκευαστές μοιάζουν με τους κανονικούς κατασκευαστές, αφού το όνομα ενός στατικού κατασκευαστή πρέπει να είναι το ίδιο με αυτό της κλάσης, ενώ δεν μπορεί να επιστρέφει κάποια τιμή. Αντίθετα οι στατικοί κατασκευαστές, διαφέρουν από τους κατασκευαστές στιγμιότυπου, αφού έχουν τη λέξη static στη δήλωσή τους, μπορεί να υπάρχει μόνο ένας στατικός κατασκευαστής, ενώ μπορούν να υπάρχουν πολλαπλοί κατασκευαστές στιγμιότυπου και τέλος οι στατικοί κατασκευαστές δεν μπορούν έχουν τροποποιητές πρόσβασης. Ένας στατικός κατασκευαστής θα έμοιαζε με τον παρακάτω: class Class1 static Class1()... // Do all the static initializations.... Άλλα σημαντικά σημεία που πρέπει να θυμόμαστε για τους στατικούς κατασκευαστές είναι τα εξής: Μια κλάση μπορεί να έχει ταυτόχρονα στατικό κατασκευαστή και κατασκευαστή στιγμιότυπου. Όπως οι στατικές μέθοδοι, ένας στατικός κατασκευαστής δεν μπορεί να προσπελάσει μέλη στιγμιότυπου και δεν μπορεί να χρησιμοποιήσει το this. Δεν μπορούμε να καλέσουμε έναν στατικό κατασκευαστή από το πρόγραμμά μας. Καλούνται αυτόματα από το σύστημα κάποια στιγμή: o Πριν τη δημιουργία κάποιου αντικειμένου της κλάσης. o Πριν την αναφορά σε οποιοδήποτε στατικό μέλος της κλάσης. Ακολουθεί ένα παράδειγμα με στατικό κατασκευαστή: class RandomNumberClass private static Random RandomKey; // Private static field static RandomNumberClass() // Static constructor RandomKey = new Random(); // Αρχικοποίηση του RandomKey public int GetRandomNumber() return RandomKey.Next(); class Program static void Main() RandomNumberClass a = new RandomNumberClass(); RandomNumberClass b = new RandomNumberClass(); Console.WriteLine("Next Random #: 0", a.getrandomnumber()); 20

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

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

8. Μέθοδοι (Methods)

8. Μέθοδοι (Methods) 8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και

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

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi ee.duth.

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth. Το πρόγραμμα HelloWorld.java Σχόλια στη Java HelloWorld Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Το πρόγραμμα HelloWorld 1 Java Το πρόγραμμα HelloWorld 2 Σχόλια στη Java ΗγλώσσαJava υποστηρίζει

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

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

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))

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

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

(Διαφάνειες Νίκου Βιδάκη)

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή Στο εργαστήριο αυτό θα μάθουμε για τη χρήση συναρτήσεων με σκοπό την κατασκευή αυτόνομων τμημάτων προγραμμάτων που υλοποιούν μία συγκεκριμένη διαδικασία, τα οποία

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

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

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

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks)

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks) Ονόματα και Εμβέλεια Ανακύκλωση ονομάτων Η κατανόηση της εμβέλειας είναι άμεση εάν το κάθε τι έχει το δικό του όνομα fun square a = a * a; fun double b = b + b; Αλλά στις μοντέρνες γλώσσες προγραμματισμού,

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string 12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string Aλφαριθµητικά της C int main() const int max=80; char str[max); //κάθε char δεσµεύει

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Το if-else statement Το if-else statement δουλεύει καλά όταν στο condition θέλουμε να περιγράψουμε μια επιλογή με δύο πιθανά ενδεχόμενα.

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον

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

Υπολογιστικά Συστήματα

Υπολογιστικά Συστήματα Υπολογιστικά Συστήματα Ενότητα 3: Βασικά στοιχεία της γλώσσας προγραμματισμού Visual Basic for Applications (VBA) Σαπρίκης Ευάγγελος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1) Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ Διάλεξη 2 Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις Διοργάνωση : ΚΕΛ ΣΑΤΜ Διαφάνειες: Skaros, MadAGu Παρουσίαση: MadAGu Άδεια: Creative Commons 3.0 2 Internal

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 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 στην

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

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται

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

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

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

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

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video ιάγραµµα κλάσεων [Class diagram] Εβδοµάδα 2: Υπο-τύποι και πολυµορφισµός [sub-typing and polymorphism] Database Music Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη

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

Εισαγωγή στη C# και. Σημειώσεις Σεμιναρίου Επιμέλεια: Βασίλης Κόλιας. το.net 4.0

Εισαγωγή στη C# και. Σημειώσεις Σεμιναρίου Επιμέλεια: Βασίλης Κόλιας. το.net 4.0 Εισαγωγή στη C# και Σημειώσεις Σεμιναρίου Επιμέλεια: Βασίλης Κόλιας το.net 4.0 2 Π ί ν α κ α ς Π ε ρ ι ε χ ο μ έ ν ω ν Πίνακας Περιεχομένων... 1 1. Εισαγωγή... 11 1.1. Γλώσσες και γλώσσες προγραμματισμού...

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

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων Μέθοδοι Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων Μέθοδοι Οιµέθοδοικαθορίζουντηνσυµπεριφοράενόςαντικειµένου. Τα βασικά µέρη από τα οποία αποτελείται µία µέθοδος είναι τα εξής: Το όνοµα της µεθόδου

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος sfetsos@it.teithe.gr

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΕΡΓΑΣΤΗΡΙΟ - 3 ΘΕΜΑΤΑ: Κλάσεις Αντικείμενα Δομητές/Κατασκευαστές - Μέθοδοι - Παράμετροι

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 10 η Αλφαριθμητικά Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

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

Ενδεικτική περιγραφή μαθήματος

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

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

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

Εισαγωγή στον Προγ/μό Η/Υ Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας Περιεχόμενα Τι μπορεί να περιέχει μια τάξη Μέθοδοι τάξης και σταθερές τάξης Πολυμορφισμός

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Επέκταση κλάσεων στη C++ Τροποποίηση μεθόδων (method overriding) Κληρονομικότητα και κατασκευαστές, καταστροφείς,

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Aντώνης Σπυρόπουλος v2_061015 Οροι που

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

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4

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

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

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στην FORTRAN Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Fortran FORmula TRANslation: (Μία από τις πρώτες γλώσσες τρίτης γενιάς) Εκδόσεις FORTRAN (1957) FORTRAN II (1958) FORTRAN III

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Βρείτε τα λάθη Στο πρόγραμμα στην επόμενη διαφάνεια υπάρχουν διάφορα λάθη Ποια είναι? public abstract

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

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

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams CONSTRUCTORS DESTRUCTORS Η κλάση mystring class mystring private: char s[100]; public: char *GetString(); void SetString(char

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩN ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ι ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ: ΙΟΥΝΙΟΣ 2015 (10/7/2015) ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α 1. (3.5 μονάδες)

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

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

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

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 3 ο Symbol Table & Scopes Ι ΑΣΚΩΝ Αντώνιος Σαββίδης

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

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

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

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

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Δημιουργία Νέου αρχείου Από το μενού προγραμμάτων ανοίγετε το DEV C++ Επιλέγετε File-> New-> Source File (συντόμευση πληκτρολογίου Ctrl+N)

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

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

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

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

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

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

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

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

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

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

Τύποι, Σταθερές και Μεταβλητές

Τύποι, Σταθερές και Μεταβλητές ΚΕΦΑΛΑΙΟ 3 Τύποι, Σταθερές και Μεταβλητές Η έννοια της μεταβλητής Γενικά μπορούμε να πούμε ότι η έννοια της μεταβλητής στον προγραμματισμό είναι άμεσα συνδεδεμένη με την έννοια που αυτή έχει σε μαθηματικό

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

Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο. Εργαστήριο #12 Από τα προηγούμενα εργαστήρια: Το εργαστήριο αυτό είναι ανεξάρτητο από τα προηγούμενα επειδή όμως ασχολείται με τη γλώσσα JavaScript, βεβαιωθείτε ότι έχετε διαβάσει το εισαγωγικό Παράρτημα

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

Υπερφόρτωση τελεστών (operator(

Υπερφόρτωση τελεστών (operator( Υπερφόρτωση τελεστών (operator( overloading) Η υπερφόρτωση τελεστών είναι ένα από τα πιο ενδιαφέροντα χαρακτηριστικά του αντικειμενοστραφούς προγραμματισμού. Αναφέρεται στην πρόσθετη χρήση των συνηθισμένων

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

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Σενάριο 17: Παιχνίδι μνήμης με εικόνες Σενάριο 17: Παιχνίδι μνήμης με εικόνες Φύλλο Εργασίας Τίτλος: Παιχνίδι μνήμης με εικόνες Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω, Συνθετικές

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Nα κατασκευάσουν πίνακες από δεδομένα. Να κατασκευάσουν συναρτήσεις με πίνακες. Να κάνουν χρήση

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πίνακες Πίνακες (arrays) Πολύ συχνά είναι απαραίτητο το πρόγραμμα μας να χειριστεί

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29 5. ΣΥΝΑΡΤΗΣΕΙΣ 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή Η συνάρτηση είναι void, δεν επιστρέφει κάποια τιµή. //Oρισµός συνάρτησης χωρίς παραµέτρους // 12.

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

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4) HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 1ο Εισαγωγή στο FLEX Ι ΑΣΚΩΝ Αντώνιος Σαββίδης Slide

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

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

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων

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

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος... 11 1. Εισαγωγικά Στοιχεία... 13 Το πρώτο πρόγραμμα... 15 Οι βασικοί τύποι δεδομένων και ο χειρισμός τους... 19 Σταθερές και Μεταβλητές... 19 Σταθερές τύπου ακεραίου... 19 Μεταβλητές

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΒΑΣΙΚΗ ΚΑΙ ΠΑΡΑΓΩΓΕΣ ΚΛΑΣΕΙΣ #include class logariasmos //basikh klash //prostateymeno dedomeno-melos float ypoloipo; logariasmos() //dhlosh constructor ypoloipo=0; float pareypoloipo()

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και αντικείμενα στην Java Strings Πίνακες ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΑ Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά

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

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ 2015-2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ.

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ 2015-2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών 5 Εξάμηνο ΤΗΜΜΥ Α.Π.Θ 2015-2016 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ DS Prximity Το παιχνίδι Το Prximity είναι ένα παιχνίδι στρατηγικής,

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού 5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού Χειμερινό εξάμηνο 2013 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Αντικειμενοστραφής προγραμματισμός Τάξεις (classes)

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2008 ΔΙΔΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙΔΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Παράδοση: Πέμπτη 10 Απριλίου 2008, 24:00 (μεσάνυχτα)

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

Τεχνικός Εφαρμογών Πληροφορικής

Τεχνικός Εφαρμογών Πληροφορικής Τεχνικός Εφαρμογών Πληροφορικής ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΥΝΑΡΤΗΣΕΙΣ Εξάμηνο: 2014Β Διδάσκουσα: Ηλεκτρονική Τάξη: Κανελλοπούλου Χριστίνα_ΠΕ19 Πληροφορικής Περιεχόμενα Συναρτήσεις Συναρτήσεις Οι συναρτήσεις

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες

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

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Τετάρτη, 30 Οκτωβρίου 2013 Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο Λύστε στο Visual Basic Express 2010 τις παρακάτω ασκήσεις: 1. Να δημιουργήσετε ένα νέο Project του είδους Console

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