SOCIAL LOCATION BASED APP

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

Download "SOCIAL LOCATION BASED APP"

Transcript

1 1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΕΦΑΡΜΟΓΗ ios APPLICATION ios SOCIAL LOCATION BASED APP ΣΟΥΜΠΛΗΣ ΑΝΤΩΝΙΟΣ ΙΩΑΝΝΗΣ ΤΖΑΝΑΚΗΣ ΑΡΝΑΟΥΤΑΚΗΣ ΛΕΑΝΔΡΟΣ Επιβλέπων : Ακρίτας Αλκιβιάδης, Καθηγητής Πανεπιστημίου Θεσσαλίας Βόλος, Οκτώβριος 2015 Σελίδα 1

2 2 Ευχαριστίες Η παρούσα Διπλωματική Εργασία ξεκίνησε υπό την επίβλεψη του καθηγητή κ. Αλκιβιάδη Ακρίτα και ολοκληρώθηκε στο διάστημα Γι αυτό το λόγο θα θέλαμε να τον ευχαριστήσουμε ιδιαίτερα που μας έδωσε την ευκαιρία και το κίνητρο να συγγράψουμε αυτή την εργασία για τον τομέα των εφαρμογών ios που ήταν κάτι το οποίο είχαμε αρχικά ως επιχειρηματική ιδέα και στη συνέχεια υλοποιήσαμε ως διπλωματική. Επίσης θα θέλαμε να ευχαριστήσουμε τους γονείς μας ο καθένας ξεχωριστά, για την αμέριστη στήριξη τους σε οικονομικό, ηθικό και ψυχολογικό επίπεδο διότι χωρίς εκείνους δεν θα είχαμε φτάσει έως εδώ. Τέλος θα θέλαμε να ευχαριστήσουμε τον φίλο μας τον Δημήτρη για την πολύτιμη βοήθεια του πάνω σε θέματα της εφαρμογής και του κώδικα Objective C. Σελίδα 2

3 3 Περίληψη Στη παρούσα διπλωματική εργασία παρουσιάζεται ο σχεδιασμός και η ανάπτυξη μιας εφαρμογής σε περιβάλλον ios, η οποία έχει ως σκοπό το συντονισμό μιας συνάντησης μεταξύ μιας ομάδας ατόμων από άποψη οργάνωσης και εξοικονόμησης χρόνου κόστους. Η δημιουργία της εφαρμογής αυτής έγινε με την χρήση του λογισμικού Xcode, το οποίο είναι ένα ολοκληρωμένο περιβάλλον μέσα από το οποίο μπορούμε να γράψουμε και να εκτελέσουμε κώδικα. Eίναι το ίδιο με αυτό που χρησιμοποιείται στο Mac OS X. Το ios (γνωστό και ως iphone OS) είναι το λειτουργικό σύστημα για κινητές πλατφόρμες της Apple. Η εφαρμογή θα μπορεί να χρησιμοποιηθεί από όλους τους χρήστες συσκευών Apple με λειτουργικό I-OS. Πιο συγκεκριμένα, η εφαρμογή προσφέρει στο χρήστη τη δυνατότητα να επιλέξει, να προτείνει και να μοιραστεί μέσα από συγκεκριμένες δομές, τον τόπο, τον χρόνο και το σκοπό της συνάντησης με τα άτομα τα οποία επιθυμεί μέσα από τη λίστα επαφών της συσκευής του. Σελίδα 3

4 4 Abstract This diploma dissertation concerns the design and development of an application in an environment ios, which aims to coordinate a meeting between a group of people in terms of organization and time savings cost. The creation of this app was done using the Xcode software, which is an integrated environment through which we can write and execute code. It is the same as the one used in Mac OS X. The ios (known as iphone OS) is the operating system for mobile platforms of Apple. The application can be used by all devices Apple users functional I-OS. More specifically, the application offers the user the ability to select, propose and share through specific structures,the place,the time and the purpose of the meeting with the people who wish through the list of device contacts. ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 1: ΕΙΣΑΓΩΓΗ 1.1 Στόχος και χρησιμότητα 1.2 Πρακτικές δυσκολίες στην υλοποίηση ΚΕΦΑΛΑΙΟ 2: ΓΕΝΙΚΕΣ ΓΝΩΣΕΙΣ Σελίδα 4

5 5 2.1 Η Γλώσσα Προγραμματισμού Objective-C Αντικειμενοστραφής και Διαδικαστικός Προγραμματισμός Η Objective C ως επέκταση της C Δομή αρχείων της γλώσσας Objective C 2.2. Διαχείριση Μνήµης Εντολές διαχείρισης μνήμης (Alloc, Retain, Copy και Release) Setter μέθοδοι Μελλοντική αποδέσμευση μνήμης (Autorelease και Autorelease pool) 2.3 Προγραμματισμός για ios με χρήση του Xcode Model, View, Controller (MVC) Πρότυπα αρχεία ΚΕΦΑΛΑΙΟ 3: Η ΕΦΑΡΜΟΓΗ 3.1 Αρχεία στο Xcode 3.2 View Controllers της Εφαρμογής Δημιουργία λίστας από Meetings Δημιουργία ενός νέου Meetings Δημιουργία Προφίλ του Χρήστη 3.3 Τα Models της Εφαρμογής 3.4 Τα Views της Εφαρμογής 3.5 Foursquare Integration ΚΕΦΑΛΑΙΟ 4: SIMULATION ΤΗΣ ΕΦΑΡΜΟΓΗΣ ΚΕΦΑΛΑΙΟ 5:ΣΥΜΠΕΡΑΣΜΑΤΑ ΚΑΙ ΜΕΛΛΟΝΤΙΚΕΣ ΒΕΛΤΙΩΣΕΙΣ Σελίδα 5

6 6 ΚΕΦΑΛΑΙΟ 6: ΠΑΡΑΡΤΗΜΑ Α Κώδικας Objective C Β - Βιβλιογραφία Κεφάλαιο 1 O Εισαγωγή 1.1 Στόχος και χρησιμότητα Έπειτα από προσωπική εμπειρία και παρατήρηση διαπιστώσαμε εμφανές το πρόβλημα έλλειψης συντονισμού που παρατηρείται μεταξύ φίλων/ομάδων ατόμων για τον προγραμματισμό μια συνάντησης μεταξύ τους, κυρίως σε μεγάλα αστικά κέντρα. Αυτή η έλλειψη συντονισμού έχει να κάνει είτε με την αποδοχή-επικύρωση της πρότασης που έχει γίνει από κάποιο άτομο προς τους φίλους του που έχει ως συνέπεια την ασυνεννοησία μεταξύ τους και την σπατάλη χρόνου και κόστους τηλεφωνημάτων,είτε και με την ασυνέπεια πολλές φορές ορισμένων ως προς την ώρα ( και τοποθεσία-λόγω μπερδέματος) συνάντησης με αποτέλεσμα την άσκοπη σπατάλη σημαντικού χρόνου, εκνευρισμού καθυστέρησης κτλ των υπόλοιπων μελών της ομάδας. Με την εφαρμογή μας λοιπόν σκοπεύουμε στον εξορθολογισμό και επίλυση αυτού του προβλήματος που είναι καθοριστικής σημασίας για την καθημερινή προσωπική/επαγγελματική μας ζωή. Στην ψηφιακή εποχή που ζούμε με την ραγδαία ανάπτυξη της τεχνολογίας ο προγραμματισμός συναντήσεων μεταξύ των ανθρώπων έχει επιτευχθεί με την χρήση κινητών τηλεφώνων, διαδικτυακών μέσων ( skype, facebook, what sapp etc..). Ωστόσο κανένα από τα προαναφερθέντα δεν έχει την δυνατότητα να συντονίσει μια ομάδα με αποτελεσματικότητα 100% χωρίς σπατάλη χρόνου κόστους και απόλυτου συντονισμού σε πραγματικό χρόνο των μελών χωρίς να υπάρχουν «στησίματα» και ανακρίβειες χρόνου-τοποθεσίας. Έπειτα τα παραπάνω μέσα δεν έχουν τέτοιο απολύτως στοχευμένο χαρακτήρα εφαρμογής και λειτουργίας εξορθολογισμού του προβλήματος. Η εφαρμογή μας λοιπόν στηρίζεται στην επιτυχία δημιουργίας μιας πρακτικής και πολλή απλής στα δεδομένα του χρήστη διεπαφής σε compact μορφή όσο το δυνατό πιο εύχρηστης και λειτουργικής που έχει τη δυνατότητα να επιλύσει τις παραπάνω αδυναμίες του «συστήματος» των συναντήσεων. Συγκεκριμένα ο χρήστης θα μπορεί να προγραμματίσει μια συνάντηση ενημερώνοντας όλα τα μέλη μεταξύ τους με πλήρη περιγραφή σκοπού/τόπου/χρόνου κτλ και να λάβει απαντήσεις αποδοχής-απόρριψης. Έπειτα, θα έχει σε λίστα όλα τα προγραμματισμένα ραντεβού του στα οποία θα του έρχεται ειδοποίηση αφύπνισης καθώς και θα γνωρίζει εκ των Σελίδα 6

7 προτέρων ποια άτομα είναι καλεσμένα και ποια θα παρευρεθούν στην εκάστοτε συνάντηση που δημιούργησε ή είναι καλεσμένος. Στο μέλλον έχουμε σκοπό όλοι οι προσκεκλημένοι να έχουν τη δυνατότητα να ενημερώνονται για την τρέχουσα θέση εναπομείναντα χρόνου άφιξης των μελών που επρόκειτο να παρευρεθούν στο σημείο συνάντησης ώστε να κάνουν την κατάλληλη διαχείριση του χρόνου τους προς αποφυγή «καθυστερήσεων» μεταξύ τους Πρακτικές δυσκολίες στην υλοποίηση Η βασικότερη δυσκολία της υλοποίησης της εφαρμογής είναι η έλλειψη ευρείας γνώσης και εμπειρίας μας πάνω σε εφαρμογές της γλώσσας Objective C καθώς επίσης και της εξοικείωσης μας με το λειτουργικό του mac OS και του προγραμματιστικού περιβάλλοντος Χcode. Στη συνέχεια προέκυψαν δυσκολίες και ως προς την ενσωμάτωση και διασύνδεση μερικών λειτουργιών του προγράμματος για παράδειγμα την υλοποίηση της διασύνδεσης της βάσης του foursquare με τους χάρτες Google maps καθώς και της ενσωμάτωσης των επαφών του χρήστη από τον τηλεφωνικό κατάλογο της συσκευής του. Στα επόμενα κεφάλαια θα αναφερθούμε εκτενώς με περισσότερες λεπτομέρειες. Εξίσου σημαντική δυσκολία είναι η ανάπτυξη της εφαρμογής σε συγκεκριμένη γλώσσα προγραμματισμού Objective C, και στην συγκεκριμένη πλατφόρμα που (τουλάχιστον στην Ελλάδα) δεν είναι τόσο διαδεδομένη. Τα «έξυπνα» τηλέφωνα (κοινώς smart phones) της κατασκευάστριας εταιρείας Apple, iphone, υποστηρίζουν εφαρμογές που αναπτύσσονται σε Objective-C, και για την παρούσα εργασία η ανάπτυξη έγινε μέσω της πλατφόρμας Xcode, που είναι αποκλειστικότητα του λειτουργικού συστήματος της Apple, Mac OS. Σελίδα 7

8 8 Κεφάλαιο 2 O Γενικές Γνώσεις 2.1 Η Γλώσσα Προγραμματισμού Objective-C Ξεκινώντας την περιγραφή της γλώσσας προγραμματισμού που χρησιμοποιήθηκε, αρκεί να δούμε το όνομά της και να πάρουμε δύο πολύ σημαντικά δεδομένα: - Objective - C Πρώτον, πρόκειται για μια αντικειμενοστραφή γλώσσα, όπως οι περισσότερες νέες γλώσσες υψηλού επιπέδου που έχουν αναπτυχθεί. Ως αντικειμενοστραφής, βασίζεται στην έννοια της κλάσης (class) και του στιγμιότυπου (instance). Δεύτερον, πρόκειται για μια γλώσσα που δημιουργήθηκε ως επέκταση της γλώσσας προγραμματισμού C, μια από τις πιο βασικές γλώσσες προγραμματισμού. Περιμένουμε να δούμε λοιπόν πολλές ομοιότητες, συντακτικού κυρίως χαρακτήρα με την γλώσσα C, αλλά πολύ διαφορετικές δυνατότητες, καθώς η C είναι διαδικαστική γλώσσα Αντικειμενοστραφής και Διαδικαστικός Προγραμματισμός Ο αντικειμενοστραφής προγραμματισμός (Object-Oriented Programming) διαφέρει από τον διαδικαστικό προγραμματισμό (Procedural Programming) κυρίως στον βαθμό της αφαιρετικότητας που προσφέρει. Ο διαδικαστικός προγραμματισμός προσφέρει αφαιρετικότητα μέσω των συναρτήσεων, και συνδυάζει τις δυνατότητες τους για να εκτελέσει το κυρίως πρόγραμμα. Τα δεδομένα που απαιτούνται περνιούνται ως παράμετροι στις συναρτήσεις, ή υπάρχουν ως καθολικά δεδομένα. Όταν όμως τα κύρια προγράμματα μεγαλώνουν, όπως μεγαλώνουν κι οι απαιτήσεις, δεν είναι δυνατόν και συνήθως ούτε ασφαλές να βλέπουν όλοι όλα τα δεδομένα. Επίσης τα πράγματα δυσκολεύουν όταν η συμπεριφορά που επιθυμούμε δεν είναι μια απλή κλήση σε μια συνάρτηση, αλλά συμπεριφορά μιας συνάρτησης που διαφέρει ανάλογα με τα δεδομένα. Προχωρώντας λοιπόν στον αντικειμενοστραφή προγραμματισμό, ορίζουμε την έννοια του αντικειμένου. Κάθε αντικείμενο έχει τα δικά του δεδομένα, τα οποία μπορεί να μοιράζεται με Σελίδα 8

9 άλλους, μπορεί και όχι, και την δική του συμπεριφορά που μπορεί να καθορίζεται από τον τύπο του αντικειμένου, από τα δεδομένα του και τα λοιπά. Έτσι μια φαινομενικά απλή πράξη, όπως η πρόσθεση, μπορεί να έχει εντελώς διαφορετική εκτέλεση ανάλογα με το αντικείμενο που την εκτελεί: - Ένας ακέραιος θα μας έδινε την γνωστή μαθηματική πρόσθεση - Η πρόσθεση όμως δύο συμβολοσειρών είναι κάτι εντελώς διαφορετικό, κι όμως υπακούει στην ίδια εντολή (+) Η Objective C ως επέκταση της C 9 Η Objective C είναι ένα υπερσύνολο της C με την αυστηρή έννοια. Είναι δυνατόν να συνθέσουμε (compile) οποιοδήποτε πρόγραμμα γραμμένο σε C σε έναν οποιονδήποτε συνθέτη γλώσσας Objective C (compiler). Έτσι προφανώς μπορούμε να συμπεριλάβουμε κώδικα C μέσα ένα πρόγραμμα γραμμένο σε Objective C, χωρίς καμία απολύτως επιπλοκή. Μια τέτοια επιλογή θα είχε λογική για εξοικονόμηση πόρων του συστήματος, όπως μνήμη, χρόνο και υπολογιστική ισχύ. Ως γλώσσα αρκετά υψηλού επιπέδου, η Objective C είναι αρκετά πιο «ακριβή» σε ισχύ από μια γλώσσα όπως η C. Ως επέκταση της C, όλο το συντακτικό που αφορά μη αντικειμενοστραφείς λειτουργίες είναι αυτό της C, ενώ για το υπόλοιπο κομμάτι, η Objective C ακολουθεί το συντατικό όπως ακολουθεί το στυλ των μηνυμάτων Smalltalk. Ένα αντικείμενο μπορεί να κάνει ακριβώς τρία πράγματα: 1. Να έχει μια εσωτερική κατάσταση (συνήθως και με αναφορές σε άλλα αντικείμενα) 2. Να λαμβάνει μηνύματα από τον εαυτό του ή από κάποιο άλλο αντικείμενο 3. Καθώς επεξεργάζεται ένα μήνυμα, μπορεί να στείλει μηνύματα στον εαυτό του ή σε άλλο αντικείμενο Έτσι μια «κλήση» σε μια μέθοδο, ή γενικότερα όπως αναφέρεται, η αποστολή ενός μηνύματος, ακολουθεί το παρακάτω συντακτικό: [obj method:argument]; Όπου obj το αντικείμενο, method η μέθοδός του που καλούμε και argument η πρώτη από τις παραμέτρους που απαιτεί η μέθοδος. Μια λίγο πιο γενική μορφή είναι η: [obj method:argument1 moremethodtext:argument2... methodfinaltext:argumentn]; Η χρήση των τετράγωνων παρενθέσεων (square brackets [] ) λοιπόν σημαίνει την κλήση σε μια μέθοδο, την αποστολή μηνύματος σε ένα αντικείμενο, και επίσης όπως κάθε εντολή Σελίδα 9

10 10 της C, τελειώνει με το ελληνικό ερωτηματικό (semicolon ; ) Δομή αρχείων της γλώσσας Objective C Ας δούμε τη δομή των αρχείων ενός προγράμματος γραμμένου σε Objective C. Γνωστά και από την C, έχουμε τα αρχεία κεφαλίδων (header files), με δηλώσεις ονομάτων συναρτήσεων ή και μεταβλητών, και τα αρχεία κώδικα (code files), που παρέχουν την υλοποίηση. Στην Objective C, τα header files, έχουν κατάληξη.h, και περιέχουν την «διεπαφή» μιας κλάσης (interface). Δηλώνονται όσες μεταβλητές χρησιμοποιούνται από τις περισσότερες μεθόδους (όπως θα δούμε παρακάτω, η Objective C είναι δυναμική γλώσσα και επιτρέπει την υλοποίηση μεταβλητών και δέσμευση μνήμης κατά τη διάρκεια εκτέλεσης (run time), όχι μόνο κατά τη διάρκεια σύνθεσης (compilation time)) και οι μορφές των μεθόδων της classname : superclassname { // instance variables + classmethod1; + (return_type)classmethod2; + (return_type)classmethod3:(param1_type)param1_varname; - (return_type)instancemethod1:(param1_type)param1_varname : (param2_type)param2_varname; - (return_type)instancemethod2withparameter : (param1_type)param1_varname Όπου με άνω κάτω τελεία (colon) μετά το όνομα της κλάσης (classname) δηλώνουμε την κληρονομικότητα (inheritance), δίνοντας το όνομα της άλλης κλάσης από την οποία λάμβανει τα κληρονομικά χαρακτηριστικά, γνωστή και ως υπερ-κλάση (superclass). Αν δεν έχουμε κάποια κλάση που επιθυμούμε να κάνουμε subclass, τότε πάντα πρέπει να κάνουμε subclass την NSObject, η οποία είναι η βασική κλάση (root class). Οι μέθοδοι με το σύμβολο συν ( + ) αριστερά αναγνωρίζονται ως μέθοδοι κλάσης (class methods), ενώ αυτές με το σύμβολο πλην ( - ) είναι μέθοδοι στιγμιοτύπου (instance methods). Ο τύπος του αντικειμένου που επιστρέφουν αναγράφεται αμέσως μετά, μέσα σε παρενθέσεις, και μπορεί να είναι void (κοινώς να μην επιστρέφει κάτι), κάποιος πρωτογενής τύπος της C (int, float, κλπ), δείκτης σε ένα αντικείμενο συγκεκριμένου τύπου, από αυτά που ορίζουν οι βιβλιοθήκες της Objective C, ή τέλος, δείκτης σε αντικείμενο του οποίου τον τύπο έχει ορίσει ο προγραμματιστής. Τα αρχεία κώδικα, περιέχουν την υλοποίηση των μεθόδων που αναφέρονται στα αρχεία κεφαλίδων. Αρχικά σημαίνοντας μηνύματα (messages), τα αρχεία αυτά έχουν την κατάληξη.m, και έχουν την ακόλουθη classname + (return_type)classmethod { // implementation - (return_type)instancemethod { Σελίδα 10

11 11 // Δημιουργία στιγμιοτύπων (αντικειμένων) Αφού μια κλάση έχει γραφεί σε κώδικα, για να πραγματοποιηθεί χρειάζονται δύο βήματα: - Το πρώτο δεσμεύει χώρο στην μνήμη για ένα μη αρχικοποιημένο στιγμιότυπο της κλάσης - Το δεύτερο το αρχικοποιεί Μόνο αν γίνουν και τα δύο βήματα μπορεί να χρησιμοποιηθεί το αντικείμενο. Συνήθως αυτά τα δύο βήματα γίνονται σε μια γραμμή, για να είναι σίγουρο ότι ένα αντικείμενο έχει δεσμευτεί και αρχικοποιηθεί, καθώς επίσης επειδή το ενδιάμεσο αντικείμενο δεν είναι κάτι το οποίο θα χρησιμοποιηθεί, και μερικές φορές δεν συμπίπτει καν με το αντικείμενο που επιστρέφει η αρχικοποίηση. MyObject *o = [[MyObject alloc] init]; Ο παραπάνω τρόπος είναι ο δεδομένος για όλες τις κλάσεις. Πέρα από αυτόν μπορούν να γραφούν διαφορετικοί προσαρμοσμένοι τρόποι (στο κομμάτι της αρχικοποίησης, όχι στο κομμάτι της δέσμευσης της μνήμης). Για παράδειγμα: MyObject *o = [[MyObject alloc] initwithstring:mystring]; Στην πρώτη περίπτωση, που δεν έχουμε διαφορετική αρχικοποίηση, μπορεί να χρησιμοποιηθεί και η μέθοδος new: MyObject *o = [MyObject new]; Το μήνυμα alloc δεσμεύει αρκετό χώρο για όλες τις μεταβλητές που δηλώνει το στιγμιότυπο, δίνει σε όλες την τιμή μηδέν και μετατρέπει τη μνήμη σε ένα στιγμιότυπο της κλάσης. Το μήνυμα init αρχικοποιεί το στιγμιότυπο αφού δημιουργηθεί. Η υλοποίηση του μηνύματος έχει την ακόλουθη μορφή: - (id)init { self = [super init]; if (self) { // perform initialization of object here return self; Σελίδα 11

12 Το id είναι ένας τύπος αντικειμένου που σημαίνει «δείκτης σε οτίδηποτε αντικείμενο». Μετατρέπεται σε οποιοδήποτε αντικείμενο κατά την ώρα εκτέλεσης (ξανά ένα από τα στοιχεία που καθιστούν την Objective-C δυναμική γλώσσα προγραμματισμού). Γίνεται πρώτα μια κλήση στην υπερκλάση και αναθέτει το αποτέλεσμα στο ίδιο το αντικείμενο (self). Αν είναι ένα έγκυρο αντικείμενο γίνονται οι αρχικοποιήσεις. Ένα μη έγκυρο αντικείμενο (ή καλύτερα ένας μη έγκυρος δείκτης σε αντικείμενο), έχει την τιμή nil (γνωστό ως Null σε άλλες γλώσσες). Έτσι σε περίπτωση σφάλματος επιστρέφεται η τιμή nil. 12 Πρωτόκολλα Ένα επίσης νέο στοιχείο της Objective-C είναι τα πρωτόκολλα (protocols). Επειδή η Objective-C δεν υποστηρίζει πολλαπλή κληρονομικότητα (σε άμεση υλοποίηση), την υποστηρίζει έμμεσα μέσω των πρωτοκόλλων. Ξεχωρίζουμε τα πρωτόκολλα σε επίσημα και ανεπίσημα (formal & informal). Τα επίσημα πρωτόκολλα ορίζουν μεθόδους που η κλάση που το εφαρμόζει υποχρεούται να υλοποιήσει, ενώ τα ανεπίσημα ορίζουν προαιρετικές μεθόδους. Για να δηλώσει μια κλάση ότι υποστηρίζει ένα πρωτόκολλο, το αναφέρει στο Interface της, ως SomeClass : SomeSuperClass ενώ το ίδιο το πρωτοκόλλο ορίζεται ως Locking - (void)lock; - H κατευθυντική εντολή #import Αντίστοιχα με το #include της C, η Objective C έχει την ντιρεκτίβα #import, που συμπεριλαμβάνει τα αρχεία που την ακολουθούν στον κώδικα κατά τη διάρκεια της σύνθεσης (compilation). Το πλεονέκτημά της σε σχέση με την #include, είναι ότι συμπεριλαμβάνει τα αρχεία μόνο μια φορά, καθιστώντας αχρείαστη την προφύλαξη σε περιπτώσεις διπλής εισαγωγής. Ένα αρχείο κώδικα (.m) συμπεριλαμβάνει πάντα το αρχείο κεφαλίδας (header file) για την διεπαφή του (interface), καθώς και οποιαδήποτε πρωτόκολλα στα οποία συμμορφώνεται, ή άλλα αρχεία κεφαλίδων άλλων κλάσεων των οποίων στιγμιότυπα χρησιμοποιεί. Τύποι Δεδομένων Όπως έχει ήδη αναφερθεί πιο πάνω, η Objective C υποστηρίζει τους γνωστούς πρωτογενείς τύπους δεδομένων της C, όπως int, float, double, char και το id, το οποίο όπως είπαμε είναι ένας δείκτης σε αντικείμενο οποιασδήποτε κλάσης, το οποίο μπορεί να αλλάξει δυναμικά τύπο στην εκτέλεση του προγράμματος (ή καλύτερα, απλά δεν είναι γνωστός ο τύπος του κατά την σύνθεση του κώδικα). Σελίδα 12

13 Υπάρχει επίσης ο ψευδο-τύπος BOOL για τις δυαδικές μεταβλητές (boolean) οι οποίες ουσιαστικά εκφυλίζονται από YES/NO σε 1/0. Πέρα από αυτούς τους τύπους, ανάλογα με το framework που συμπεριλαμβάνει η εφαρμογή μας, υπάρχουν έτοιμες κλάσεις των οποίων μπορούμε να δημιουργήσουμε αντικείμενα. Για παράδειγμα, για το Foundation Framework (NSFoundation), έχουμε εξ αρχής πρόσβαση σε χρήσιμες κλάσεις όπως την NSString, NSArray, NSNumber και τα λοιπά. Καθώς το string (αλφαριθμητικό) είναι από τους πιο συχνά και ευρέως χρησιμοποιούμενους τύπους δεδομένων, υπάρχει η δυνατότητα να κατασκευαστεί στιγμιότυπο, χωρίς την διαδικασία που αναφέραμε πιο πάνω. Απλά Οποιοδήποτε κείμενο εδώ έχουμε δημιουργήσει ένα στιγμιότυπο της κλάσης NSString (το οποίο όμως δεν γίνεται deallocate ποτέ, το σύστημα το βλέπει και το αποθηκεύει ως δεδομένο και καταλήγει στο κομμάτι δεδομένων της εφαρμογής). Μέθοδοι Πρόσβασης (Accessor Methods) Στην Objective C τα δεδομένα και οι μεταβλητές μιας κλάσης είναι προσβάσιμα μόνο από την ίδια. Αν όμως θέλουμε να περάσουμε ή να χρησιμοποιήσουμε την τιμή μιας μεταβλητής σε κάποια άλλη κλάση, πρέπει να έχουμε τρόπο να αναφερθούμε σε αυτήν. Μπορούμε να γράψουμε δικές μας συναρτήσεις που θα υλοποιούν αυτό το κομμάτι. Αυτές αναφέρονται γενικά ως μέθοδοι τοποθέτησης και ανάκτησης (setter & getter methods). 13 Η σύμβαση που ακολουθείται είναι η εξής: variable = [object varname]; Και [object setvarname: value]; με προσοχή πάντα το πρώτο γράμμα στο όνομα της μεταβλητής μετά το set να είναι κεφαλαίο. Στην δήλωση των μεθόδων αυτών έχουμε προνοήσει να έχουμε δηλώσει σωστά τους τύπους, δηλαδή: //Δήλωση μεταβλητών int age; //Δήλωση μεθόδων - (int) age; - (void) setage: (int) newage; Ακριβώς την ίδια λειτουργικότητα προσφέρουμε και σε οποιοδήποτε αντικείμενο αν χρησιμοποιήσουμε //Δήλωση μεταβλητών int age; NSString *name; Σελίδα 13

14 14 //Δήλωση μεθόδων - (int) age; - (void) setage: (int) newage; - (NSString *) name; - (void) setname: (NSString *) newname; Οι τελευταίες γραμμές μπορούν να συμπτιχθούν σε δύο, αν χρησιμοποιήσουμε τα int (copy) NSString *name; Μέσω των properties μπορούμε να συμπιέσουμε τον κώδικα, αλλά μας δίνει επίσης την δυνατότητα της διαχείρισης μνήμης (εκεί αναφέρεται το (copy) στην μεταβλητή name), και σε περίπτωση που δεν θέλουμε να υπάρχει setter, υπάρχει η δυνατότητα δημιουργίας read-only property με την προσθήκη του (readonly) μετά Αυτά για το κομμάτι δηλώσεων, που είναι στο.h αρχείο, δηλαδή στο interface της κλάσης. Στο.m αρχείο που θα γράφαμε την υλοποίηση της μεθόδου γράφουμε name; και δεν θα υπήρχε ανάγκη να συμπληρώσουμε κάτι παραπάνω. Υπάρχει επίσης η δυνατότητα, η μεταβλητή για την οποία κάνουμε το synthesize, να έχει διαφορετικό όνομα από την μεταβλήτη του στιγμιοτύπου. Για ClassName :NSObject { int age = Έτσι καλώντας την [obj setage: someintvalue], αυτό που θα έπαιρνε την τιμή someintvalue θα ήταν η μεταβλητή στιγμιότυπου numberofyearsold. Σύνταξη με τελεία (Dot syntax) Μετά από την έκδοση της Objective C 2.0, υποστηρίζεται και η σύνταξη με την τελεία για τις κλήσεις μεθόδων. Κοινώς η εντολή: self.height = 50; Είναι ισοδύναμη με την εντολή: [self setheight:50]; Και αξίζει να σημειωθεί ότι η σύνταξη με την τελεία πάντα θα καλεί τις μεθόδους τοποθέτησης και Σελίδα 14

15 ανάκτησης (setter & getter). Αυτό έχει σημασία γιατί δεν γίνεται απλή ανάθεση τιμών, αλλά ακολουθείται η διαδικασία διαχείρησης μνήμης που έχει δηλωθεί στην ιδιότητα (property) Διαχείριση Μνήµης Από τα σηµαντικότερα θέµατα που προκύπτουν όταν προγραµµατίζουµε για φορητές συσκευές, είναι αυτό της διαχείρισης µνήµης, καθώς οι πόροι είναι αρκετά περιορισµένοι σε σχέση µε έναν σταθερό ηλεκτρονικό υπολογιστή. Συνεπώς είναι αναγκαία η σωστή διαχείριση µνήµης ώστε να αποφύγουµε τυχόν απρόβλεπτες αποτυχίες λογισµικού, όπως τον ξαφνικό τερµατισµό της εφαρµογής. H Objective C ως δυναµική γλώσσα προγραµµατισµού, επιτρέπει την δέσµευση και αποδέσµευση µνήµης για αντικείµενα κατά την διάρκεια της εκτέλεσης και χωρίς να είναι γνωστό το µέγεθος τους εκ των προτέρων, δηλαδή κατά την διάρκεια της σύνθεσης (complile). Κατ αντιστοιχία με την C, η οποία υποστήριζε τις εντολές malloc και free, για δέσμευση και απελευθέρωση χώρου στη μνήμη, η Objective C υποστηρίζει τις alloc και dealloc Εντολές διαχείρισης μνήμης (Alloc, Retain, Copy και Release) Έχουμε ήδη αναφέρει την διαδικασία δημιουργίας ενός στιγμιοτύπου, και ότι είναι απαραίτητο ένα αντικείμενο να δεσμεύεται και να αρχικοποιείται στην ίδια γραμμή. Αυτό διότι σε κάποιες σπάνιες περιπτώσεις, η init που κάνει την αρχικοποίηση επιστρέφει (δείκτη πάντα, σε ) διαφορετικό αντικείμενο από αυτό που έκανε την κλήση της. Επίσης, καθώς ένα αντικείμενο ουσιαστικά δεν είναι χρήσιμο αναρχικοποίητο, δεν έχει νόημα να κρατάμε δείκτη σε αυτό. Έτσι έχουμε ήδη κάνει το πρώτο κομμάτι, αυτό της δέσμευσης της μνήμης. Μένει μόνο όταν τελειώσουμε με την εργασία που χρειαζόμαστε το αντικείμενο, να αποδεσμεύσουμε αυτήν τη μνήμη. Πρέπει να λοιπόν να κληθεί η dealloc στο αντικείμενο, και έχει επέλθει ισορροπία. Αν δεν το κάνουμε, και απλά «ξεχάσουμε» τον δείκτη που έχουμε, έχουμε τις λεγόμενες διαρροές μνήμης (memory leaks), οι οποίες αν ξεφύγουν σε πλήθος, μπορεί να αναγκάσουν το σύστημα να τερματίσει την εφαρμογή μας. Επίσης η εφαρμογή μπορεί να τερματίσει απρόσμενα και λανθασμένα, αν υπάρξει κλήση σε ένα δείκτη που δείχνει σε μνήμη που έχει αποδεσμευτεί (bad memory access), ή αν προσπαθήσουμε να αποδεσμεύσουμε μνήμη που έχει ήδη αποδεσμευτεί (βασικά επειδή πρόκειται για την προηγούμενη περίπτωση, στέλνουμε ένα μήνυμα σε μη έγκυρη περιοχή μνήμης). Συνήθως βέβαια δεν καλείται απ ευθείας μες στον κώδικα η εντολή dealloc. Αυτό που χρησιμοποιείται, είναι ένας αριθμός που δείχνει πότε ένα αντικείμενο πρέπει να καταστραφεί. Αυτό είναι το retain count. Σελίδα 15

16 Κάθε αντικείμενο, όταν δημιουργείται από εντολές alloc ή copy, ξεκινά με retain count ίσο με 1. Μπορούμε να αυξήσουμε αυτόν τον αριθμό κατά ένα καλώντας την εντολή retain, και να τον μειώσουμε κατά ένα καλώντας την εντολή release. Με το που φτάσει το retain count στο 0, το αντικείμενο καταστρέφεται, καλείται η dealloc, και δεν υπάρχει κανένας απολύτως τρόπος να το ανακτήσουμε. Και γιατί να θέλουμε να αυξήσουμε αυτόν τον αριθμό? Ας σκεφτούμε την παρακάτω περίπτωση: Έστω ένας αριθμός, στιγμιότυπο της κλάσης NSNumber για να μιλάμε για αντικείμενο, και δύο ξεχωριστές μέθοδοι, η μια θέλει να τον προσθέσει με κάτι και η άλλη να τον εκτυπώσει 50 φορές. Αν η πρώτη μέθοδος με το που τελειώσει αποδεσμεύσει τη μνήμη του αριθμού, η δεύτερη θα συναντήσει κακή μνήμη. Θα μπορούσαμε να βάλουμε την δεύτερη μέθοδο να κάνει την αποδέσμευση. Αν όμως αντίθετα για κάποιο λόγο τερματίσει η δεύτερη μέθοδος πρώτη (όχι απαραίτητα λόγο φόρτου εργασίας, αλλά για παράδειγμα λόγω χρονοπρογραμματισμού διεργασιών του συστήματος), θα έχουμε το ίδιο πρόβλημα. Η λύση: Όταν η πρώτη μέθοδος πάρει το αντικείμενο, το κάνει retain. Συνεπώς το retain count αυξάνεται κατά ένα. Αντίστοιχα και η δεύτερη. Όταν τελειώσουν, η κάθε μία κάνει από ένα release στο αντικείμενο. Συνεπώς το retain count είναι στο ίδιο νούμερο που ήταν πριν αρχίσει η διαδικασία, και πλέον ουσιαστικά είναι ευθύνη του δημιουργού του να το αποδεσμεύσει. Αν ήταν αυτή η πρώτη διαδικασία που το δημιούργησε (ξεκίνησε δηλαδή το retain count από 0 και έγινε 1 με ένα alloc), το αντικείμενο απελευθερώνεται με το που γίνει το δεύτερο release (αφού το count έχει επανέλθει στο 0). Τέλος να αναφέρουμε ότι η dealloc καλείται σε μια και μόνο περίπτωση ευθέως. Αφού έχουμε κάνει release όλα τα αντικείμενα για τα οποία είμαστε υπεύθυνοι, καλούμε την dealloc στην υπερκλάση της κλάσης μας, ως εξής: [var1 release]; [var2 release]; [super dealloc]; Όπου το super υποδεικνύει πέρασμα μηνύματος σε υπερκλάση. Με άλλα λόγια, αφού έχουμε «ξεκαθαρίσει» όση μνήμη είμαστε εμείς υπεύθυνοι, περνάμε τον έλεγχο προς τα πάνω για να «καθαριστούν» και τα υπόλοιπα. Μην ξεχνάμε ότι υπερκλάση όλων, κλάση-ρίζα είναι το NSObject, και όλες οι κλήσεις εν τέλει θα καταλήξουν εκεί. Αυτή η διαδικασία είναι πολύ εμφανής και στην ανάπτυξη εφαρμογών, καθώς τα View Controllers όπως θα δούμε, καθορίζουν την δική τους dealloc, όπου εμείς πρέπει να γράψουμε τι διαχειρίσεις γίνονται, και είναι ευθύνη του συστήματος να την καλέσει. 16 Σελίδα 16

17 Setter μέθοδοι Έχοντας μια πρώτη άποψη για την διαχείριση της μνήμης, μπορούμε να δούμε λίγο καλύτερα τι κάνει μια setter μέθοδος, όταν μιλάμε για αντικείμενα (δεν μιλάμε για τους πρωτογενείς τύπους της C, καθώς σε αυτούς δεν αναφερόμαστε συνήθως με δείκτες, οπότε οι περιπτώσεις που περιγράφονται παρακάτω συνήθως δεν εφαρμόζονται): Υπάρχουν 3 διαφορετικοί τρόποι που θα μπορούσαμε να κάνουμε μια τοποθέτηση «τιμής» (ουσιαστικά γίνεται αντιστοίχιση δεικτών - αντικειμένων). - (void)setname:(nsstring *)newname { name = newname; Αυτός ο τρόπος, παίρνει τον δείκτη της τοπικής μεταβλητής name, και τον βάζει να δείχνει όπου δείχνει ο newname. Το κακό με αυτόν τον τρόπο είναι ότι δεν είμαστε ιδιοκτήτες αυτού του αντικειμένου. Ανά πάσα στιγμή, όποιοσδήποτε έχει ένα δείκτη στο αντικείμενό μας, μπορεί να το αποδεσμεύσει και να μείνουμε με ένα δείκτη σε κακή μνήμη. - (void)setname:(nsstring *)newname { if (name!= newname) { [name release]; name = [newname retain]; Αυτός ο τρόπος είναι καλύτερος από την άποψη του ότι, ότι και να γίνει, εμείς θα έχουμε πάντα έναν έγκυρο δείκτη στο αντικείμενο, αφού του αυξήσαμε το retain count κατά 1. Εφόσον δεν χρειαζόμαστε το παλιό αντικείμενο, το κάνουμε release, για να έρθει το retain count σε ισορροπία. Ο έλεγχος στην αρχή έχει το εξής νόημα. Αν για κάποιο λόγο περαστεί ως παράμετρος το ίδιο το αντικείμενο, αν το κάνουμε release και είμαστε οι μόνοι που έχουμε δείκτη σ αυτό, η αμέσως επόμενη εντολή θα καταλήξει σε πρόσβαση σε κακή μνήμη. Με αυτό τον έλεγχο προλαβαίνουμε αυτή την περίπτωση. - (void)setname:(nsstring *)newname{ if (name!= newname) { [name release]; name = [newname copy]; Αυτός ο τρόπος είναι ίδιος με τον δεύτερο, με τη μόνη διαφορά ότι αντί να αυξάνουμε το retain count, δημιουργούμε ένα νέο αντικείμενο, αντίγραφο του αρχικού και βάζουμε τον δείκτη να δείχνει εκεί. Το retain count μετά από το copy είναι 1. Αυτοί ακριβώς οι 3 τρόποι είναι αυτοί που υποστηρίζονται από με μορφή: Σελίδα 17

18 (assign) ClassName (retain) ClassName (copy) ClassName *varname Συχνά παρεμβάλεται και το πρόθεμα non-atomic, ως (nonatomic, copy) ClassName *varname Με την έννοια ότι οι μέθοδοι setter και getter δεν είναι ατομικές. Αν παραλείπεται, θα θεωρούνται ατομικές. Ατομικότητα μιας μεθόδου ορίζεται ως η ιδιότητα ότι δεν μπορεί να τμηθεί. Με άλλα λόγια, αυτή η μέθοδος είτε εκτελείται είτε όχι. Δεν υπάρχει η περίπτωση να διακοπεί στην μέση μιας ανάθεσης. Η ατομικότητα παίζει πολύ σημαντικό ρόλο στον συγχρονισμό διεργασιών και νημάτων, αλλά κάνει το σύστημα πιο «δυσκίνητο», καθώς όταν εκτελείται μια τέτοια διεργασία, δεν επιτρέπεται να εκτελεστεί παράλληλα κάποια άλλη η οποία πιθανόν να χρειαστεί την μεταβλητή (πιθανόν και όχι). Γενικότερα χρησιμοποιείται αρκετά αυτό το πρόθεμα, καθώς οι περισσότερες εφαρμογές είναι ενός νήματος (single threaded) και δεν απαιτούνται πολύπλοκες διαδικασίες συγχρονισμού Μελλοντική αποδέσμευση μνήμης (Autorelease και Autorelease pool) Ως τώρα έχουμε δει πως μπορούμε να δημιουργήσουμε ένα αντικείμενο και να κρατήσουμε ένα δείκτη σε αυτό, και πως αν πάρουμε ένα αντικείμενο, να κρατήσουμε ένα δείκτη σε αυτό και να είμαστε σίγουροι πως όσο τον κρατάμε, το αντικείμενο δεν πρόκειται να αποδεσμευτεί. Σελίδα 18

19 19 Αν όμως θέλουμε να δημιουργήσουμε ένα αντικείμενο με τον σκοπό του να το περάσουμε ή να το δώσουμε σε κάποιον άλλο, πρέπει να δώσουμε σε αυτόν τον άλλον να καταλάβει και πως πρέπει να το διαχειριστεί. Το αν θα πρέπει να το αποδεσμεύσει η άλλη κλάση ή αυτή που το έδωσε, πρέπει να φαίνεται στο όνομα της μεθόδου, και αυτό είναι μια σύμβαση που πρέπει να ακολουθείται, προκειμένου να μην υπάρχουν μπερδέματα και κακή διαχείρηση μνήμης. Αν το όνομα της μεθόδου περιέχει κάποια από τις λέξεις alloc, copy, ή new, τότε ο παραλήπτης πρέπει να κάνει το release. Διαφορετικά πρέπει να το κάνει η δημιουργός μέθοδος. Πως όμως θα ξέρει η μέθοδος που το δημιούργησε, πότε πρέπει να το αποδεσμεύσει? Για παράδειγμα: - (NSString *)fullname { NSString *result; result = [[NSString alloc] initwithformat:@ %@ %@, firstname, lastname]; [result release]; return result; Με αυτή την μέθοδο, έχουμε ήδη αποδεσμεύσει το αντικείμενο, πριν καν το επιστρέψουμε σε αυτόν που κάλεσε τη μέθοδο. Η λύση: - (NSString *)fullname { NSString *result; result = [[NSString alloc] initwithformat:@ %@ %@, firstname, lastname]; [result autorelease]; return result; Με την λέξη-κλειδί autorelease, μαρκάρουμε το αντικείμενο για να γίνει release σε κάποια μελλοντική στιγμή, και όχι αμέσως. Έτσι όποιος κάνει την κλήση μπορεί ελεύθερα να το κάνει retain και να κρατήσει ένα δείκτη στο αντικείμενό του. Αντίστοιχα από την μεριά του δημιουργού, ξέρει ότι έχει εξισορροπήσει τις κλήσεις του σε retain και release, αφού το αντικείμενο θα γίνει release αργότερα. Για να δούμε πότε θα γίνει αυτό, στρεφόμαστε στην ιδέα του autorelease pool. Ένα τέτοιο pool δημιουργείται σε κομβικά θα λέγαμε σημεία, και κάθε αντικείμενο που δημιουργείται και μαρκάρεται ως autoreleased μπαίνει εκεί μέσα. Όταν τελειώσει η όποια διεργασία, το pool γίνεται release, και αυτό αυτόματα καλεί το release σε όλα τα αντικείμενα που είχε. Είναι ένας πολύ κομψός και βολικός τρόπος διαχείρησης Σελίδα 19

20 20 μνήμης, και προσθέτει πολύ μεγάλη ευελιξία στον κώδικα. Μπορούμε επίσης να έχουμε εμφωλευμένα pools, χωρίς κανένα πρόβλημα απολύτως. Επίσης το πρώτο πράγμα που κάνει η εφαρμογή που φτιάχνουμε, είναι να δημιουργήσει ένα τέτοιο pool, και το τελευταίο που κάνει είναι το κάνει release. Αυτό φαίνεται ξεκάθαρα στο main.m αρχείο που δημιουργείται για μας αυτόματα, και περιέχει απλά τον παρακάτω κώδικα: int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retval = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retval; Αυτή είναι η main συνάρτηση που καλείται πριν καν ξεκινήσουν οι διαδικασίες αρχικοποίησης για την εφαρμογή μας, και όλη η εφαρμογή τρέχει από την UIApplicationMain(). Επίσης μπορούμε να ορίσουμε εμείς δικό μας autorelease pool σε σημείο που ξέρουμε ότι θα δεσμεύσουμε αρκετή μνήμη, την οποία δεν θα χρειαζόμαστε μετά. Δημιουργούμε όσα αντικείμενα χρειαζόμαστε, φροντίζουμε να τα μαρκάρουμε ως autoreleased, και στο τέλος απλά αδειάζουμε το pool, κάνοντάς το release. Είναι πολύ σημαντικό αυτό να εφαρμόζεται και σε περίπτωση που δημιουργούμε ξεχωριστά νήματα, καθώς κάθε νήμα πρέπει να βλέπει την δική του μνήμη και να την διαχειρίζεται κατάλληλα (πέρα φυσικά από όποια επικοινωνία μπορεί να υπάρχει μεταξύ των νημάτων). 2.3 Προγραμματισμός για ios με χρήση του Xcode Για την ανάπτυξη της εφαρμογής χρησιμοποιήθηκε η πλατφόρμα του Xcode, που δίνει πολλά βασικά στοιχεία για να ξεκινήσει καποιος να δημιουργήσει μια εφαρμογή Model, View, Controller (MVC) Η τεχνική που θα χρησιμοποιήσουμε για την δημιουργία της εφαρμογής ακολουθεί το μοντέλο ανάπτυξης MVC( Model, View, Controller), κοινώς κατηγοριοποιεί την εφαρμογή σε 3 είδη : Model. To µοντέλο είναι υπεύθυνο για τα δεδοµένα που παρέχονται στην εφαρµογή σε οποιοδήποτε σηµείο της. Αυτό θα πρέπει να είναι συµπαγές και να µην διατηρεί καµία εξάρτηση από τον τρόπο παρουσίασης των. Ένα καλά δοµηµένο µοντέλο Σελίδα 20

21 21 µπορεί εµφανιστεί χωρίς προβλήµατα µέσα από διαφορετικές διεπαφές. Το µοντέλο συνηθίζεται να είναι κάποια βάση δεδοµένων (SQLite ή CoreData). View. Η εικόνα δηλαδή αυτό που βλέπει ο χρήστης είναι υπεύθυνη για την προβολή και µόνο των δεδοµένων και των αλλαγών στον χρήστη. Δεν θα πρέπει να αποθηκεύει και να εξαρτάται από τα δεδοµένα που εµφανίζει σε οποιοδήποτε κοµµάτι της. Ο χρήστης θα πρέπει να είναι ικανός να αλληλεπιδράσει µε τα στοιχεία της και κατ επέκταση τα δεδοµένα αλλά όχι άµεσα. Ακόµη, ιδανικό θα ήταν να µπορεί να επαναχρησιµοποιηθεί και να προσαρµόζεται στις ανάγκες του χρήστη. Controller. Ο ελεγκτής είναι υπεύθυνος για όλες τις ενδιάµεσες λειτουργίες µεταξύ του µοντέλου και της εικόνας. Αναλαµβάνει την ενηµέρωση της εικόνας για τις όποιες αλλαγές στο µοντέλο δεδοµένων αλλά και το ανάποδο, δηλαδή ενηµέρωση των δεδοµένων βάσει των όποιων αλλαγών έχει πραγµατοποιήσει ο χρήστης διαµέσου της εικόνας. Πρακτικά είναι το κοµµάτι µε το οποίο συνήθως ασχολούµαστε περισσότερο καθώς αυτός περιέχει τον κώδικα της λογικής που θέλουµε να υλοποιήσουµε. Θα λέγαµε ότι είναι η καρδιά της εφαρµογής µας. Συνεπώς το κομμάτι του κώδικα που γράφουμε που καθορίζει την εφαρμογή μας είναι αυτό του ελεγκτή. Συγκεκριμένα το περιβάλλον του Xcode διευκολύνει την εφαρμογή αυτού του μοντέλου ανάπτυξης, διαχωρίζοντας αυτά τα τρία κομμάτια. Πέρα από το βασικό περιβάλλον που γράφουμε τον κώδικα, υπάρχει ένα ξεχωριστό κομμάτι, το Interface Builder, που απευθύνεται στην δημιουργία των views. Είναι μια γραφική διεπαφή που μας επιτρέπει να προσθέτουμε στοιχεία όπως κουμπιά, διακόπτες και άλλα, κάνοντας drag & drop, χωρίς να γράψουμε ούτε μια γραμμή κώδικα. Σε εμάς μένει μόνο να κάνουμε τη διασύνδεση των στοιχείων του view με τις πράξεις στον ελεγκτή. Τα αρχεία που δημιουργούνται ονομάζονται nib files και έχουν την κατάληξη.xib. Όσο για το μοντέλο, υποστηρίζονται βάσεις δεδομένων SQLite (μια μορφή για σχετικά πιο μικρές βάσεις δεδομένων), αν και η βασική διεπαφή με μια βάση δεδομένων γίνεται μέσω CoreData Πρότυπα αρχεία Από το περιβάλλον του XCode έχουμε αρκετούς τρόπους να ξεκινήσουμε να χτίζουμε την εφαρμογή μας, δίνοντάς μας διαφορετικά πρότυπα αρχεία για να ξεκινήσουμε. 1) Window-based application 2) View-based application 3) Navigation-based application 4) TableView-based application 5) Και άλλα Σελίδα 21

22 22 Όλες οι περιπτώσεις δημιουργούν το appdelegate για την εφαρμογή μας, και ένα.xib αρχείο με την γραφική εικόνα της εφαρμογής μας. Στην περίπτωση 1) το αρχείο αυτό είναι ένα κενό παράθυρο, στην 2) δημιουργείται αυτό το παράθυρο και ταυτόχρονα ένα δεύτερο.xib αρχείο για το view, και συνδέει τα δύο. Στις περιπτώσεις 3) και 4) συμπληρώνεται στο view και το αντίστοιχο στοιχείο που αναφέρει το όνομα, ήτοι ένα Navigation view ή ένα TableView. Στην περίπτωση 4), μας προτρέπει να δημιουργήσουμε και την αντίστοιχη βάση δεδομένων CoreData για τα περιεχόμενα του πίνακα. Δεν είναι υποχρεωτικό να επιλέξουμε κάτι από αυτά, υπάρχει και η επιλογή για κενή εφαρμογή, αλλά μας διευκολύνει διότι προσθέτει πάρα πολύ κώδικα που ούτως ή άλλως θα κληθούμε να γράψουμε. Σελίδα 22

23 23 Κεφάλαιο 3 O Η εφαρμογή 3.1 Αρχεία στο Xcode Η εφαρμογή ξεκίνησε ως ένα view-based application, με το ένα βασικό view και τον controller του που προσφέρει το XCode από μόνο του και την κλάση για το ApplicationDelegate. Πιο συγκεκριμένα αυτή η κλάση φορτώνει τα αρχικοποιημένα δεδομένα τα οποία έχουμε ορίσει εμείς εκεί,ένα TabBar και μια default View την οποία έχουμε αναθέσει να είναι η meetinglist. Σε αυτά προστέθηκαν τελικά: - 5 επιπλέον.m αρχεία στο φάκελο views με τα αντίστοιχα header files ( σύνολο 10 αρχεία) - 2.m αρχεία με κώδικα με τα header files (σύνολο 4 αρχεία) στο φάκελο model - 10.m αρχεία με τα header files τους μαζί με τα 3. xib αρχεία που παρήχθησαν μέσω του Interface Builder (σύνολο 23) στο φάκελο controllers - 3.m αρχεία μαζί με τα header files τους (σύνολο 6 αρχεία) στο φάκελο Foursquare - το αρχείο main.m που βρίσκεται σε ξεχωριστό φάκελο supporting files. 3.2 View Controllers της Εφαρμογής Δημιουργία λίστας από meetings Το αρχικό View Controller της εφαρμογής που ευθύνεται για τη δημιουργία της λίστας συναντήσεων είναι το MAMeetingListVC το οποίο αναλύεται παρακάτω: MAMeetingListVC Ουσιαστικά αποτελεί ένα TableView της εφαρμογής με τη μορφή ενός πίνακα με τις ετικέτες των συναντήσεων του χρήστη και είναι το αρχικό Screen που βλέπει ο χρήστης με το που ξεκινήσει η εφαρμογή. Στο αρχείο αυτό υλοποιούνται όλες οι συναρτήσεις που θα χρησιμοποιηθούν για την κατασκευή του πίνακα. Σελίδα 23

24 24 - (id)init { self = [super init]; if(self) { self.title // Label Meetings self.tabbaritem.image = [UIImage imagenamed:@"879-mountains"]; // image mountains return self; Το background color δημιουργείται με τον παρακάτω κώδικα : - (void)loadview { self.tableview = [[UITableView alloc] initwithframe:cgrectzero style:uitableviewstylegrouped]; self.tableview.backgroundcolor = [UIColor colorwithred:0.40 green:0.71 blue:0.9 alpha:1.0]; self.tableview.datasource = self; self.tableview.delegate = self; self.view = self.tableview; Με την παρακάτω εντολή γίνονται load από τη μνήμη (το μοντέλο των meetings) τα meetings : self.datasource = [[Meetings getmeetingsfromarchive] allmeetings]; και στη συνέχεια φορτώνει ξανά τον πίνακα απο την αρχή: [self.tableview reloaddata]; Επίσης όταν ο χρήστης βλέπει τον πίνακα και εμφανιστεί ένα καινούριο meeting τότε έρχεται ειδοποίηση(notification): [[NSNotificationCenter defaultcenter] addobserver:self selector:@selector(newmeetingadded) name:@"newmeetingadded" object:nil]; Σελίδα 24

25 25 Στην συνέχεια υλοποιούνται συναρτήσεις που έχουν να κάνουν καθαρά με την κατασκευή του πίνακα όπως για παράδειγμα, τις διαστάσεις και τον αριθμό των κελιών του πίνακα κ.τ.λ. Στο τέλος του αρχείου υλοποιούνται μέθοδοι UITableViewDelegate που είναι υπεύθυνες για τη διαχείριση του πίνακα δηλαδή όταν ο χρήστης πατήσει σε κάποιο button. MAMeetingMapVC Στο αρχείο αυτό υλοποιούνται οι συναρτήσεις που είναι υπεύθυνες για τον χάρτη. Πιο συγκεκριμένα, αυτός ο View Controller ελέγχει και κανονίζει το τι θα συμβεί όταν πατήσουμε πάνω στο χάρτη και πώς αυτό θα εμφανιστεί στην οθόνη μας. Αρχικά δημιουργείται το view του χάρτη (μέσω Google Maps συναρτήσεων ) : self.meetingmapview.mylocationenabled = YES;// να εμφανίζεται η τοποθεσία self.meetingmapview.settings.compassbutton = YES;// να εμφανίζεται κουμπί πυξίδας self.meetingmapview.settings.mylocationbutton = YES;// να εμφανίζεται κουμπί τοποθεσίας self.meetingmapview.settings.zoomgestures = YES;// να επιτρέπεται το zoom in, zoom out [self.meetingmapview setminzoom:5 maxzoom:18];// όρια zoom Με τον παρακάτω κώδικα κεντρικοποιείται η εικόνα του χάρτη στην οθόνη μας καθώς και το αν θα καλύπτει το status bar: -(BOOL)prefersStatusBarHidden { return NO; //Επιλέγουμε αν το status bar Θα εμφανίζεται η όχι _meetingmapview.padding = UIEdgeInsetsMake(self.topLayoutGuide.length + 100, 0, self.bottomlayoutguide.length +100, 0); Σελίδα 25

26 26 Στη συνέχεια υλοποιείται συνάρτηση για τη διαχείριση του marker(δείκτης τοποθεσίας στο χάρτη), δηλαδή όταν ο χρήστης ''πατήσει'' επάνω του να εμφανίζονται οι πληροφορίες για την συγκεκριμένη τοποθεσία. - (void)mapview:(gmsmapview *)mapview didtapinfowindowofmarker:(gmsmarker *)marker MAMeetingDetailVC Στο αρχείο αυτό υλοποιείται η εμφάνιση του meeting, δηλαδή οι λεπτομέρειες για το συγκεκριμένο meeting όπως είναι ο χάρτης με το σημείο συνάντησης, ημερομηνία και ώρα της συνάντησης, τα άτομα που θα παρευρεθούν καθώς και κάποια περιγραφή(notes) που θα έχει δώσει ο δημιουργός-χρήστης. Υλοποιούνται συναρτήσεις για την κατασκευή του view όπως για παράδειγμα, για το χρώμα, τα buttons, τα labels καθώς και τις διαστάσεις τους, καθώς επίσης επιτυγχάνεται και η ταξινόμηση τους στο χώρο του view. Δεν χρησιμοποιήθηκε ο interface builder για την κατασκευή των subviews καθώς και των παραπάνω. Στη συνέχεια επιτυγχάνεται η διαχείριση και εμφάνιση του χάρτη(googlemaps), με τον ίδιο τρόπο όπως και στο αρχείο MAMeetingMapVC.m Στον παρακάτω κώδικα δεσμεύουμε τον απαιτούμενο χώρο για την εμφάνιση των frames, και των buttons : self.functionbar.frame = CGRectMake(0, CGRectGetMaxY(self.meetingMapView.frame), CGRectGetWidth(self.view.frame), 44); self.notesview.frame = CGRectMake(10, CGRectGetMaxY(self.functionBar.frame) + 10, CGRectGetWidth(self.view.frame) - 10, 140); self.meetingdate.frame = CGRectMake(10, CGRectGetMaxY(self.notesView.frame) + 10, CGRectGetWidth(self.view.frame) - 10, Σελίδα 26

27 27 40); self.meetingmemberscount.frame = CGRectMake(10, CGRectGetMaxY(self.meetingDate.frame) + 10, CGRectGetWidth(self.scrollView.frame) - 10, self.viewmeetingmembersbutton.frame = CGRectMake(CGRectGetMidX(self.view.frame)-50, 40); CGRectGetMaxY(self.meetingMembersCount.frame) + 10, [self.viewmeetingmembersbutton addtarget:self 100, 50); και στη συνέχεια υλοποιούνται συναρτήσεις που αφορούν τη λειτουργία των buttons : - (void)editbuttontapped:(id)sender - (void)linkbuttontapped:(id)sender - (void)viewmembers - (void) mapview:(gmsmapview *) mapview didlongpressatcoordinate:(cllocationcoordinate2d) coordinate MAEditMeetingNote Είναι το view που εμφανίζεται όταν ο χρήστη ''πατάει'' το button edit note. Πρόκειται για έναν απλό ViewController που δίνει τη δυνατότητα στο χρήστη για επεξεργασία ενός κειμένου, πιο συγκεκριμένα κάποια περιγραφή για την συγκεκριμένη συνάντηση. Μόλις τελειώσει η επεξεργασία, το κείμενο αποθηκεύεται με τον παρακάτω κώδικα : NSArray *allmeetings = [[Meetings getmeetingsfromarchive] allmeetings]; NSMutableArray *allmetingsmutable = [[NSMutableArray alloc] initwitharray:allmeetings]; [allmeetings enumerateobjectsusingblock:^(id obj, NSUInteger idx, BOOL *stop) { if([obj meetingid] == self.meeting.meetingid) { Σελίδα 27

28 28 self.meeting.notes = self.notestextview.text; [allmetingsmutable replaceobjectatindex:idx withobject:self.meeting]; Δημιουργία ενός νέου meeting MACreateMeetingVC Tο αρχείο αυτό έχει να κάνει με τον view-controller create a meeting δηλαδή για την δημιουργία μιας συνάντησης. Στα headers files δηλώνουμε όλες τις λειτουργικότητες που θα χρησιμοποιήσουμε παρακάτω. Πιο συγκεκριμένα για το foursquare, το venue search, για το ημερολογιο κτλ. Αρχικά δηλώνουμε τα στοιχεία που θα εμφανίζονται μέσα στον view-controller πχ ετικέτα του meeting, ετικέτα με τα notes, όνομα τοποθεσίας, λίστα καλεσμένων, δομή ημερολογίου με τα αντίστοιχα background colors και borders. self.nametext = [[UITextField alloc] init]; self.nametext.borderstyle = UITextBorderStyleRoundedRect; self.nametext.contentverticalalignment = UIControlContentVerticalAlignmentCenter; self.nametext.placeholder a name..."; self.meetingnoteslabel = [[UILabel alloc] init]; self.notestext = [[UITextField alloc] init]; self.notestext.borderstyle = UITextBorderStyleRoundedRect; self.notestext.contentverticalalignment = UIControlContentVerticalAlignmentCenter; self.notestext.placeholder a name..."; self.meetingnamelabel.backgroundcolor = [UIColor clearcolor]; self.meetingnamelabel.textcolor = [UIColor whitecolor]; self.meetingdatelabel.backgroundcolor = [UIColor clearcolor]; self.meetingdatelabel.textcolor = [UIColor whitecolor]; self.meetingmemberslabel.backgroundcolor = [UIColor clearcolor]; self.meetingmemberslabel.textcolor = [UIColor whitecolor]; self.meetingplacelabel.backgroundcolor = [UIColor clearcolor]; self.meetingplacelabel.textcolor = [UIColor whitecolor]; self.pickdatebutton = [UIButton buttonwithtype:uibuttontyperoundedrect]; Σελίδα 28

29 29 [self.pickdatebutton a date" forstate:uicontrolstatenormal]; self.pickdatebutton.tintcolor = [UIColor purplecolor]; [self.contentsubview addsubview:self.pickdatebutton]; self.picklocationbutton = [UIButton buttonwithtype:uibuttontyperoundedrect]; [self.picklocationbutton settitle:@"select a place" forstate:uicontrolstatenormal]; self.picklocationbutton.tintcolor = [UIColor browncolor]; Έπειτα υλοποιούμε και τα subviews τους ακριβώς παρακάτω : self.contentsubview.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)); self.meetingnamelabel.frame = CGRectMake(50, 30, 200, 44);//self.meetingNameLabel.font.pointSize + 5); self.nametext.frame = CGRectMake(50, 80, 280, 30); self.meetingnoteslabel.frame = CGRectMake(50, 120, 350, 44); self.notestext.frame = CGRectMake(50, 150, 280, 30); self.meetingdatelabel.frame = CGRectMake(50, 200, 250, 30); self.pickdatebutton.frame = CGRectMake(50, 210, 150, 50); self.meetingmemberslabel.frame = CGRectMake(50, 250, 250, 30); self.pickmembersbutton.frame = CGRectMake(50, 280, 150, 50); self.meetingplacelabel.frame = CGRectMake(50, 340, 250, 30); self.meetingplacetext.frame = CGRectMake(50, 370, 250, 30); self.picklocationbutton.frame = CGRectMake(50, 400, 150, 50); self.createmeetingbutton.frame = CGRectMake(50, 450, 80, 50); Σελίδα 29

30 30 self.contentsubview.contentsize = CGSizeMake(CGRectGetWidth(self.contentSubview.frame), CGRectGetMaxY(self.meetingNameLabel.frame)); Και στο τέλος υλοποιούνται οι συναρτήσεις των views δηλαδή τι θα γίνει αν ο χρήστης επιλέξει καθεμία από τις παραπάνω λειτουργίες. -(void)pickdate -(void)pickmembers -(void)picklocation -(void)savemeeting MAContactPickerVC Το αρχείο αυτό έχει να κάνει με την διαχείριση των επαφών του χρήστη. Πιο συγκεκριμένα πώς θα εμφανίζονται και πως θα αποθηκεύονται οι επαφές (υπό μορφή πίνακα ) από τον τηλεφωνικό κατάλογο του κινητού στην εφαρμογή μας. Οπότε και αυτό το αρχείο περιέχει ένα TableView και τις αντίστοιχες συναρτήσεις όπως και τα υπόλοιπα. Αρχικά μετράει με την μεταβλητή contactsdata.count τον αριθμό των επαφών του χρήστη για να προσθέσει γραμμές από τις ετικέτες ονομάτων αλλιώς αν δεν έχει επαφές καθόλου δεν προσθέτει καμία. - (NSInteger)tableView:(UITableView *)tableview numberofrowsinsection:(nsinteger)section{ if (_contactsdata){ return _contactsdata.count; Else{ return 0; Έπειτα υλοποιούμε μια σειρά από συναρτήσεις για παράδειγμα την showaddressbook η οποία διαχειρίζεται το πώς εμφανίζεται το ΑddressBook δηλαδή ο κατάλογος των επαφών. - (void)showaddressbook { _addressbookcontroller = [[ABPeoplePickerNavigationController alloc] init]; [_addressbookcontroller setpeoplepickerdelegate:self]; [self presentviewcontroller:_addressbookcontroller animated:yes completion:nil]; Παρακάτω στη συνάρτηση peoplepickernavigationcontroller που υλοποιούμε το ευρετήριο των επαφών από τις τιμές των τηλεφωνικών αριθμών, προσθέτουμε και τα s των χρηστών που τα έχουν συμπεριλάβει. sref = ABRecordCopyValue(person, Σελίδα 30

31 31 kabperson property); for (int i=0; i<abmultivaluegetcount( sref); i++) { CFStringRef current label = ABMultiValueCopyLabelAtIndex( sRef, i); CFStringRef current value = ABMultiValueCopyValueAtIndex( sRef, i); if (CFStringCompare(current Label, kabhomelabel, 0) == kcfcompareequalto) { [contactinfodictionary setobject:( bridge NSString *)current value forkey:@"home "]; if (CFStringCompare(current Label, kabworklabel, 0) == kcfcompareequalto) { [contactinfodictionary setobject:( bridge NSString *)current value forkey:@"work "]; CFRelease(current Label); CFRelease(current Value); CFRelease( sRef); MAContactDetailVC Στο αρχείο αυτό υλοποιείται η λειτουργία του τι ακριβώς γίνεται εάν πατήσει ο χρήστης πάνω σε κάποια από τις επαφές του. Η επαφή αποτελείται από μία ετικέτα-όνομα, κάποια εικόνα (image) και κάποιες πληροφορίες τις οποίες αυτές τι παίρνουμε μέσα από το ΑddressBook. Στη συνάρτηση populatecontactdata επιλέγουμε τη μορφοποίηση με τη οποία θα εμφανίζεται το όνομα, η εικόνα και οι πληροφορίες του εκάστοτε χρήστη. -(void)populatecontactdata{ NSString *contactfullname = [NSString stringwithformat:@"%@ %@", [_dictcontactdetails objectforkey:@"firstname"], [_dictcontactdetails objectforkey:@"lastname"]]; [_lblcontactname settext:contactfullname]; // Set the contact image. if ([_dictcontactdetails objectforkey:@"image"]!= nil) { [_imgcontactimage setimage:[uiimage Σελίδα 31

32 32 imagewithdata:[_dictcontactdetails [_tblcontactdetails reloaddata]; Στους παρακάτω μεθόδους υλοποιούμε κάποιες περιπτώσεις για να δείξουμε σε ποιο κομμάτι section πληροφορίας της επαφής βρίσκεται ο χρήστης κατά την περιήγηση του στο ευρετήριο. Για παράδειγμα λειτουργία για ανάκτηση πληροφορίας σχετικά με τον αριθμό κινητού τηλεφώνου, οικιακό τηλεφωνικό αριθμό, εργασίας και σπιτιού καθώς και εμφάνιση διεύθυνσης της επαφής. switch (indexpath.section) case 0: celltext = [_dictcontactdetails objectforkey:@"mobilenumber"]; detailtext Number"; break; case 1: celltext = [_dictcontactdetails objectforkey:@"homenumber"]; detailtext Number"; break; break; case 1: switch (indexpath.row) { case 0: celltext = [_dictcontactdetails objectforkey:@"home "]; detailtext "; break; case 1: celltext = [_dictcontactdetails objectforkey:@"work "]; detailtext "; break; break; case 2: switch (indexpath.row) { case 0: celltext = [_dictcontactdetails objectforkey:@"address"]; detailtext Address"; break; Σελίδα 32

33 33 case 1: celltext = [_dictcontactdetails objectforkey:@"zipcode"]; detailtext Code"; break; case 2: celltext = [_dictcontactdetails objectforkey:@"city"]; detailtext break; Σελίδα 33

34 34 MADatePickerVC To αρχείο αυτό έχει να κάνει με την διαχείριση της εμφάνισης του ημερολογίου. Κατ αντιστοιχία όπως είναι για τις επαφές υλοποιούμε και τη δομή του ημερολογίου. Σε αυτό το κομμάτι του κώδικα χρησιμοποιήσαμε τη τεχνική του εργαλείου Interface Builder την οποία διαθέτει το Χcode για την άμεση υλοποίηση κάποιων δομών για σχεδίαση γραφικού περιβάλλοντος. Απλώς αλλάξαμε την μορφοποίηση για την εμφάνιση της ημερομηνίας και που αποθηκεύεται δηλαδή το ότι αναθέτουμε στο meeting πιο συγκεκριμένα στη μεταβλητή date την τιμή datevalue δηλ. την ημερομηνία διεξαγωγής του meeting. - (void)datepickerchanged:(uidatepicker *)datepicker { NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init]; [dateformatter setdateformat:@"dd-mm-yyyy HH:mm"]; NSString *datevalue = [dateformatter stringfromdate:datepicker.date]; self.selecteddate.text = datevalue; self.meeting.date = datevalue; //save the date value Δημιουργία Προφίλ του Χρήστη MAProfileVC Στο αρχείο αυτό έγινε μία προσπάθεια να υλοποιηθεί το profile section ενός χρήστη ο οποίος είναι εγγεγραμένος στην εφαρμογή για περεταίρω μελλοντική χρήση και ανάπτυξη της υπάρχουσας εφαρμογής σε πραγματικό επέπδο. Στην προκειμένη φάση πήραμε ένα κείμενο από ένα tutorial της Objective C και το προσθέσαμε στην κενή σελίδα του profile σχετικά με πληροφορίες για την γλώσσα. NSAttributedString *headertext = [[NSAttributedString alloc] initwithstring:@"photonotes" attributes:@{nsshadowattributename: textshadow]; self.headerlabel.attributedtext = headertext; self.authorlabel.text by"; self.descriptiontextview.text is a simple app created for Code School's Core ios 7 course. If you install this app on your phone then you will be able to take photos and add some notes about them. For example, you might take a picture of a tree and leave a note about why you found that tree worthy of capturing."; self.csinfotextview.text School teaches web and app development technologies in the comfort of your browser with video lessons, coding challenges, and screencasts. With the release of Σελίδα 34

35 ios 7, we're now expanding our code challenges to the environment that most ios developers work in - Xcode. By completing challenges in Xcode and still earning points and badges on codeschool.com, we're able to bring you the best of both worlds so you can start building apps quickly. We strive to help you learn by doing."; 35 [[NSNotificationCenter defaultcenter] addobserver:self selector:@selector(contentsizechanged:) name:@"uicontentsizecategorydidchangenotification" object:nil]; 3.3 Τα Models της Εφαρμογής Meeting Το meeting που περιέχει τις αναλυτικές λεπτομέρειες μίας συνάντησης που εισάγει ο χρήστης. Για παράδειγμα, το όνομα της συνάντησης, τις επιπλέον πληροφορίες, την ημερομηνία, τα μέλη, το σημείο συνάντησης κτλ. ( create meeting Meeting : NSObject (assign, nonatomic) NSInteger (strong, nonatomic) NSString (strong, nonatomic) NSString (strong, nonatomic) NSDate (strong, nonatomic) NSArray (strong, nonatomic) CLLocation (strong, nonatomic) NSString Με τον coder που περιέχει από μόνο του το ios κάνουμε την αποθήκευση-store των παραπάνω στοιχείων με αυτόν εδώ τον τρόπο : [acoder encodeinteger:self.meetingid forkey:@"photoid"]; [acoder encodeobject:self.name forkey:@"name"]; [acoder encodeobject:self.date forkey:@"date"]; [acoder encodeobject:self.notes forkey:@"notes"]; [acoder encodeobject:self.meetingmembers forkey:@"invitees"]; [acoder encodeobject:self.meetingpoint forkey:@"location"]; [acoder encodeobject:self.venuename forkey:@"venuename"]; Και αντίστοιχα τα κάνουμε loading με τον decoder του ios με τον παρακάτω τρόπο : Σελίδα 35

36 36 self.meetingid = [adecoder decodeintegerforkey:@"photoid"]; self.name = [adecoder decodeobjectforkey:@"name"]; self.date = [adecoder decodeobjectforkey:@"date"]; self.notes = [adecoder decodeobjectforkey:@"notes"]; self.meetingmembers = [adecoder decodeobjectforkey:@"invitees"]; self.meetingpoint = [adecoder decodeobjectforkey:@"location"]; self.venuename = [adecoder decodeobjectforkey:@"venuename"]; Meetings Το αρχείο με τα αποθηκευμένα δεδομένα της λίστας τα οποία παίρνει ένα tableview και τα εμφανίζει στο screenhome. Aρχικά αποθηκεύουμε το meeting στη λίστα με το αντίστοιχο coder και έπειτα το loading ενός νέου meeting με τον αντίστοιχο decoder. [acoder encodeobject:self.allmeetings forkey:@"allmeetings"]; self.allmeetings = [adecoder decodeobjectforkey:@"allmeetings"]; Στη συνέχεια ορίζουμε και το μονοπάτι-path το οποίο θα αποθηκεύεται αυτή η λίστα. (NSString *)pathtoarchive { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docsdir = [paths objectatindex:0]; return [docsdir stringbyappendingpathcomponent:@"meetings.model"]; 3.4 Τα Views της Εφαρμογής MAMeetingCell Το Xcode μέσα από έτοιμες συναρτήσεις δημιουργεί κάποια πρωτότυπα κελιά για έναν πίνακα. Στη συγκεκριμένη περίπτωση για να δημιουργήσουμε τον πίνακα του Meeting έπρεπε να δημιουργήσουμε και να τροποποιήσουμε ένα είδος κελιού που θα ταίριαζε στην περίπτωση αυτή. Το κελί αυτό αποτελείται από ένα CellName καθώς και από κάποια Notes ( CellNotesView). Στη συνέχεια υλοποιούμε συναρτήσεις που έχουν να κάνουν με το μέγεθος-έκταση του κελιού, τη γραμματοσειρά (font). self.cellname.font = [UIFont fontwithname:@"helveticaneue-bold" size:16.0f]; Σελίδα 36

37 37 self.cellname.frame = CGRectMake(5,//CGRectGetMaxX(self.cellImage.frame) + 10, 17, 160, 16); self.cellnotesview.frame = CGRectMake(CGRectGetWidth(self.frame) - 60, 20, 40, 40); MAMeetingMembersListCell Όπως και στο προηγούμενο αρχείο δημιουργούμε κελιά τα οποία θα περιέχουν τα Members, δηλαδή τα ονόματα από τη βάση των επαφών της συσκευής. MAFoursquareCell Παρόμοια, στο αρχείο αυτό γίνεται δημιουργία κελιών για την εμφάνιση των venues(διευθύνσεων) που επιστρέφει το Foursquare. MADirections Το Google maps όταν του ζητάμε να μας επιστρέψει πληροφορίες σχετικά με directions μιας τοποθεσίας (get http request), μας επιστρέφει δεδομένα σε μορφή dictionary και θα πρέπει εμείς να επιλέξουμε το πως θα εμφανίσουμε τα δεδομένα αυτά.στην προκειμένη περίπτωση η εμφανιση θα γίνει με τη μορφή πίνακα ( δημιουργούμε ενα TableView). DirectionsCell Στο αρχείο αυτό γίνεται η δημιουργία των κελιών του παραπάνω πίνακα. 3.5 Foursquare Integration BZFoursquare Το αρχείο αυτό είναι υπεύθυνο για τη δημιουργία των βασικών-basics συναρτήσεων για την ενσωμάτωση του Foursquare δηλαδή για την εγκαθίδρυση της βάσης του foursquare και του venue search στην εφαρμογή μας η οποία ολοκληρώνεται με τη δημιουργία της FoursquareRequest. Για παράδειγμα η παρακάτω συνάρτηση ξεκινάει να αρχικοποιήσει μια URL επικοινωνία με τη βάση δεδομένων - (id)initwithclientid:(nsstring *)clientid callbackurl:(nsstring *)callbackurl { NSParameterAssert(clientID!= nil && callbackurl!= nil); Σελίδα 37

38 38 self = [super init]; if (self) { self.clientid = myclientid; self.callbackurl = callbackurl; self.version = kminsupportedversion; return self; BZFoursquareRequest To αρχείο αυτό είναι μία URL request ενέργεια δηλαδή κατά βάση είναι μία get HTTP λειτουργία η οποία αυτό που κάνει είναι να μεταφέρει με τη μορφή ενός dictionary τη ζήτηση η οποία απαιτείται κάθε φορά. H ζήτηση αποτελείται από το όνομα του venue που επιθυμεί ο χρήστης να αναζητήσει καθώς και από κάποιες άλλους παραμέτρους για παράδειγμα το κατά πόσο κοντά ( near ) ή μακριά (far) στο χρήστη πραγματοποιείται η αναζήτηση της εν λόγω τοποθεσίας κτλ. Όλα αυτά τα χαρακτηριστικά συνδυάζονται σε μία HTTP Request και στέλνονται στη βάση δεδομένων του foursquare και αυτό με τη σειρά του στέλνει πίσω σε μορφή dictionary πάλι τα αποτελέσματα της αναζήτησης. Στην παρακάτω συνάρτηση αρχικά ορίζουμε τη μέθοδο που θα χρησιμοποιήσουμε ως μέθοδο GET if ([_HTTPMethod isequaltostring:@"get"]) { request = [self requestforgetmethod]; Στη συνέχεια ορίζουμε τις παραμέτρους της GET μεθόδου για παράδειγμα το όνομα της τοποθεσίας venue το οποίο θα αποτελεί την παράμετρο και το key την επιστρεφόμενη τιμή πχ. Café entra for (NSString *key in _parameters) { NSString *value = _parameters[key]; if (![value iskindofclass:[nsstring class]]) { if ([value iskindofclass:[nsnumber class]]) { value = [value description]; else { continue; Και στο τέλος πραγματοποιούμε ένα URL Request δηλαδή στέλνεις μία αίτηση για το εν λόγω url ανάκτηση διεύθυνσης. Return [NSURLRequestrequestWithURL:URLcachePolicy:NSURLRequestReloadIgnoringL ocalcachedata timeoutinterval:ktimeoutinterval]; Σελίδα 38

39 39 FSVenueSearchVC Tο αρχείο αυτό έχει να κάνει με τη διαχείριση της προβολής των αποτελεσμάτων της αναζήτησης searching. Το venue search επιστρέφει μία απάντηση την οποία απάντηση αυτή θα πρέπει να διαχειριστούμε την προβολή της, δηλ πως θα εμφανιστεί στο χρήστη της εφαρμογής. Πιο συγκεκριμένα είναι ένας πίνακας, ένα tableview, όπως και η λίστα από τα meeting, που προβάλει τα αποτελέσματα της αναζήτησης του χρήστη. - (void)loadview { self.tableview = [[UITableView alloc] initwithframe:cgrectzero style:uitableviewstylegrouped]; self.tableview.backgroundcolor = [UIColor colorwithred:0.40 green:0.71 blue:0.9 alpha:1.0]; self.tableview.delegate = self; self.view = self.tableview; self.functionbar = [[UIToolbar alloc] initwithframe:cgrectmake(0, 0, 60, 44)]; self.searchfield = [[UITextField alloc] initwithframe:cgrectmake(0, 0, 250,30)]; self.searchfield.borderstyle = UITextBorderStyleRoundedRect; self.searchfield.contentverticalalignment = UIControlContentVerticalAlignmentCenter; self.searchfield.placeholder Foursquare"; self.searchfield.delegate = self; UIBarButtonItem *textfielditem = [[UIBarButtonItem alloc] initwithcustomview:self.searchfield]; self.custombutton = [UIButton buttonwithtype:uibuttontyperoundedrect]; [self.custombutton settitle:@"search" forstate:uicontrolstatenormal]; self.custombutton.tintcolor = [UIColor redcolor]; [self.custombutton addtarget:self action:@selector(searchbuttontapped) UIBarButtonItem *searchbutton = [[UIBarButtonItem alloc] initwithcustomview:self.custombutton]; UIBarButtonItem *flexiblespace = [[UIBarButtonItem alloc] initwithbarbuttonsystemitem:uibarbuttonsystemitemflexiblespace target:nil action:nil]; [self.functionbar setitems:@[flexiblespace, textfielditem, flexiblespace, searchbutton, flexiblespace]]; self.tableview.tableheaderview = self.functionbar; Σελίδα 39

40 40 Κεφάλαιο 4 O SIMULATION ΤΗΣ ΕΦΑΡΜΟΓΗΣ Ο χρήστης μόλις ανοίξει την εφαρμογή, του παρουσιάζεται η λίστα με τα Meetings από τα οποία είναι προσκεκλημένος ή έχει δημιουργήσει ο ίδιος. Κάνοντας scrolling στο home page παρατηρούμε το tap bar όπου ο χρήστης έχει τη δυνατότητα να επιλέξει ανάμεσα σε τρεις ενέργειες: 1. Nα εμφανίσει τη λίστα με τα meetings( εκεί όπου βρίσκεται) 2. Να δημιουργήσει ένα καινούριο meetings 3. Να εμφανίσει το προφίλ του Έπειτα ο χρήστης έχει δυνατότητα να πατήσει σε κάποιο από τα υπάρχοντα meeting και να πλοηγηθεί στις περεταίρω πληροφορίες της συνάντησης.( π.χ. coffee at entra) Σελίδα 40

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

42 42 Ο χρήστης πατώντας παρατεταμένα πάνω στο χάρτη έχει τη δυνατότητα να κάνει zoom-in και zoom-out καθώς και να δει την ετικέτα marker(δείκτης τοποθεσίας). Σε μελλοντικό ανάπτυξη της εφαρμογής ο χρήστης πατώντας το κουμπί Direction θα λαμβάνει οδηγίες πλοήγησης προς το σημείο συνάντησης. Αν ο χρήστης πατήσει πάνω στο κουμπί View invitees θα πλοηγηθεί στη λίστα από τα μέλη της ομάδας που συμμετέχουν στο meeting. Σελίδα 42

43 43 Επιλέγοντας από το tap bar create a new meeting. Σελίδα 43

44 44 Πατώντας το κουμπί select a date, ο χρήστης επιλέγει την ημερομηνία και ώρα της συνάντησης. Πατώντας το κουμπί add invitees, ο χρήστης επιλέγει τα άτομα τα οποία επιθυμεί από τη λίστα επαφών του. Σελίδα 44

45 45 Πατώντας το κουμπί pick a spot, ο χρήστης καλείται να επιλέξει το σημείο συνάντησης που επιθυμεί. Σελίδα 45

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΣΕ ΠΕΡΙΒΑΛΛΟΝ iphone ΓΙΑ ΤΗΝ ΔΙΕΥΚΟΛΥΝΣΗ ΤΗΣ ΠΡΟΣΒΑΣΗΣ ΤΩΝ ΦΟΙΤΗΤΩΝ ΣΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΣΕ ΠΕΡΙΒΑΛΛΟΝ iphone ΓΙΑ ΤΗΝ ΔΙΕΥΚΟΛΥΝΣΗ ΤΗΣ ΠΡΟΣΒΑΣΗΣ ΤΩΝ ΦΟΙΤΗΤΩΝ ΣΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΓΕΩΡΓΙΟΥ ΧΡΙΣΤΟΥΛΑΚΗ ΕΠΙΒΛΕΠΩΝ: Κ. ΣΓΑΡΜΠΑΣ ΠΑΤΡΑ - ΙΟΥΝΙΟΣ 2012 ΠΙΣΤΟΠΟΙΗΣΗ

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

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

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

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

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

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

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

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

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

Κατανεμημένα Συστήματα

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

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

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

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

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

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

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

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

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

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

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

ios Developing Κεφάλα Αικατερίνη Μουρίκης Ευάγγελος Επιβλέπων: Μηνάς Δασυγένης

ios Developing Κεφάλα Αικατερίνη Μουρίκης Ευάγγελος Επιβλέπων: Μηνάς Δασυγένης ios Developing Κεφάλα Αικατερίνη Μουρίκης Ευάγγελος http://arch.icte.uowm.gr Επιβλέπων: Μηνάς Δασυγένης ios Συσκευές Λόγος επιλογής προγραμματισμού σε ios Δείγμα τελευταίων εκδόσεων Υιοθέτηση των IOS 6

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

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

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

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΑΝΑΛΥΣΗ ΜΕΝΟΥ ΕΦΑΡΜΟΓΗΣ... 4 2. ΕΠΕΞΗΓΗΣΗ ΚΕΝΤΡΙΚΟΥ ΜΕΝΟΥ ΚΑΡΤΕΛΑΣ... 5 3. ΔΗΜΙΟΥΡΓΙΑ ΠΕΛΑΤΗ... 6 4. ΑΝΑΖΗΤΗΣΗ ΠΕΛΑΤΗ... 6 5. ΕΠΕΞΕΡΓΑΣΙΑ/ΔΙΑΓΡΑΦΗ

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

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

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

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

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ «ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα

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

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

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

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

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εκφώνηση: Δημιουργείστε εφαρμογή σε Java Swing με χρήση του IDE NetBeans όπου θα παρουσιάζεται ποιο κουμπί πατήθηκε. Η εφαρμογή θα μοιάζει ως εξής: Πρώτο Βήμα: Αρχική

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΟΔΗΓΟΣ ΧΡΗΣΗΣ ΓΙΑ ΛΟΓΙΣΜΙΚΟ CISCO JABBER ΥΠΗΡΕΣΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΥΠΣ-ΕΔ/76

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΟΔΗΓΟΣ ΧΡΗΣΗΣ ΓΙΑ ΛΟΓΙΣΜΙΚΟ CISCO JABBER ΥΠΗΡΕΣΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΥΠΣ-ΕΔ/76 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΥΠΗΡΕΣΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΟΔΗΓΟΣ ΧΡΗΣΗΣ ΓΙΑ ΛΟΓΙΣΜΙΚΟ CISCO JABBER ΥΠΗΡΕΣΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΥΠΣ-ΕΔ/76 31/07/2014 ΠΕΡΙΕΧΟΜΕΝΑ ΕΓΚΑΤΑΣΤΑΣΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ... 3 ΛΕΙΤΟΥΡΓΙΑ

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1 Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων Προγραμματισμός II 1 lalis@inf.uth.gr Βιβλιοθήκες Τμήματα λογισμικού ευρύτερης χρησιμότητας που έχουν σχεδιαστεί με σκοπό να διευκολύνουν την ανάπτυξη πολλών διαφορετικών

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

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

Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences

Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences Γεια σου. Σε αυτό το μάθημα θα μιλήσουμε για τις δυνατότητες που μας δίνει η Unity να την κάνουμε να λειτουργεί όπως θέλουμε. Η αλήθεια είναι ότι

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ SMARTPHONE ΓΙΑ ΤΙΣ ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΤΟΥ ΜΟΥΣΕΙΟΥ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ (Μ.Ε.Τ) ΤΖΟΥΛΑ ΔΗΜΗΤΡΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ SMARTPHONE ΓΙΑ ΤΙΣ ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΤΟΥ ΜΟΥΣΕΙΟΥ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ (Μ.Ε.Τ) Δ Ι Π Λ Ω Μ Α Τ Ι Κ Η Ε Ρ Γ Α Σ Ι Α ΤΖΟΥΛΑ ΔΗΜΗΤΡΙΟΥ ΕΠΙΒΛΕΠΩΝ: Κ. ΣΓΑΡΜΠΑΣ ΠΑΤΡΑ - ΦΕΒΡΟΥΑΡΙΟΣ 2014

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

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ 7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ 7.1 Ορισμός και δήλωση συνάρτησης Μία συνάρτηση είναι μία ενότητα οδηγιών οι οποίες μαζί εκτελούν μία συγκεκριμένη εργασία. Παρέχει έναν κατάλληλο τρόπο να μπορέσουμε να κάνουμε

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

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

Η βασική συνάρτηση προγράμματος main()

Η βασική συνάρτηση προγράμματος main() Η βασική συνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Η συνάρτηση είναι ένα υποπρόγραμμα

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1 Εισαγωγή

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

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run Καλώς ήλθες. Στο προηγούμενο μάθημα είδαμε τις λειτουργίες του μενού File του Editor της Unity. Όπως είπαμε οι δύο επιλογές που διαφέρουν

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

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

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

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

Wrapper Classes, Abstract Classes and Interfaces

Wrapper Classes, Abstract Classes and Interfaces Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

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

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

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

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

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Λαμπαδαρίδης Αντώνιος el04148@mail.ntua.gr Διπλωματική εργασία στο Εργαστήριο Συστημάτων Βάσεων Γνώσεων και Δεδομένων Επιβλέπων: Καθηγητής Τ. Σελλής Περίληψη

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

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

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

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

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

FAIL PASS PASS οριακά

FAIL PASS PASS οριακά AEM 0001 0002 COMMENTS οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον

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

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Φτάσαμε σιγά σιγά στο τέλος του βιβλίου. Αντί για κάποιον επίλογο σκέφτηκα να συλλέξω κάποια πράγματα που θα ήθελα να πω σε κάποιον ο οποίος αρχίζει

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

Συναρτήσεις. Εισαγωγή

Συναρτήσεις. Εισαγωγή Συναρτήσεις Εισαγωγή Η χρήση συναρτήσεων στα προγράμματα της γλώσσας C είναι πολύ σημαντική καθώς μας επιτρέπει τη διάσπαση ενός προβλήματος σε μικρότερα υποπροβλήματα τα οποία μπορούμε να επιλύσουμε πιο

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

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

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

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

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

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

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

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

Γενικά (για τις γραπτές εξετάσεις)

Γενικά (για τις γραπτές εξετάσεις) Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #12 η : Επανάληψη Γαβαλάς Δαμιανός dgavalas@aegean.gr Γενικά (για τις γραπτές εξετάσεις) Δεν υπάρχει αυστηρά ορισμένη «ύλη εξετάσεων» (καθώς δεν έχετε

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

Τύποι δεδομένων, τελεστές, μεταβλητές

Τύποι δεδομένων, τελεστές, μεταβλητές Τύποι δεδομένων, τελεστές, μεταβλητές Βασικά στοιχεία της γλώσσας Η Java χαρακτηρίζεται από ένα αρκετά καλά οργανωμένο σύνολο εντολών κι ένα μέρος της επιτυχίας της οφείλεται στα διάφορα APIs (βιβλιοθήκες)

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού

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

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

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

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

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

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

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

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

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

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

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών. Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ Δεν κάνει compile και το λάθος είναι σηµαντικό: Το head1 είναι δείκτης σε struct, εποµένως η προσπέλαση πεδίου γίνεται 321 FAIL µε head1->next και όχι head1.next. Επιπλέον, έχετε λάθος

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13 Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις

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

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

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

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

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

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

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

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

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

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and alpha Language (1/5) ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language Στην alpha δεν υπάρχει main() συνάρτηση, ο κώδικας ξεκινάει την εκτέλεση από την αρχή του

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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

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

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

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

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

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

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

Εισαγωγή 6. Δημιουργία λογαριασμού 13. Εγκατάσταση και λειτουργία του Skype 28. Βασικές λειτουργίες 32. Επιλογές συνομιλίας 48

Εισαγωγή 6. Δημιουργία λογαριασμού 13. Εγκατάσταση και λειτουργία του Skype 28. Βασικές λειτουργίες 32. Επιλογές συνομιλίας 48 ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή 6 Δημιουργία λογαριασμού 13 Εγκατάσταση και λειτουργία του Skype 28 Βασικές λειτουργίες 32 Επιλογές συνομιλίας 48 Γενικές ρυθμίσεις Skype 64 Το Skype σε φορητές συσκευές 78 Εγγραφή

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

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

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

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

Τιμή Τιμή. σκορ. ζωές

Τιμή Τιμή. σκορ. ζωές Εισαγωγή στην έννοια των μεταβλητών Οι μεταβλητές Θα πρέπει να έχετε παρατηρήσει ότι έχουμε φτιάξει τόσα παιχνίδια μέχρι αυτό το σημείο και δεν έχουμε αναφερθεί πουθενά για το πως μπορούμε να δημιουργήσουμε

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

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

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

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

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

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

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

Edmodo Σύντομος οδηγός για εκπαιδευτικούς

Edmodo Σύντομος οδηγός για εκπαιδευτικούς Edmodo Σύντομος οδηγός για εκπαιδευτικούς Δημήτρης Συμεωνίδης (www.demsym.com) Τι είναι το Edmodo Το Edmodo είναι μια δωρεάν και ασφαλής πλατφόρμα κοινωνικής δικτύωσης και ηλεκτρονικής μάθησης ειδικά σχεδιασμένη

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

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

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

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

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

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

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

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

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

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

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

ΤΗΛΕΦΩΝΙΚΗ ΣΥΣΚΕΥΗ SNOM 300 έκδοση ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΙΣΤΟΣΕΛΙΔΑΣ

ΤΗΛΕΦΩΝΙΚΗ ΣΥΣΚΕΥΗ SNOM 300 έκδοση ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΙΣΤΟΣΕΛΙΔΑΣ ΤΗΛΕΦΩΝΙΚΗ ΣΥΣΚΕΥΗ SNOM 300 έκδοση 8.7.5.44 ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΙΣΤΟΣΕΛΙΔΑΣ Πίνακας περιεχομένων ΑΡΧΙΚΗ ΣΕΛΙΔΑ... 1 ΕΝΤΟΛΕΣ MENOY... 2 1. ΛΕΙΤΟΥΡΓΙΑ (Operation)... 2 1.1 Αρχική Σελίδα (Home)... 2 1.2 Κατάλογος

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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