20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 1 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Βασικές έννοιες αλγορίθμων
Advertisements

Επιμέλεια: Τίκβα Χριστίνα
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Δ.Π.Θ. Επεξεργασία Κειμένου - 1 Επεξεργασία Κειμένου Ένα πρόγραμμα σε γλώσσα HTML είναι ανεξάρτητο της μηχανής όπου θα εκτελεστεί. Δηλαδή αγνοούνται τα.
Διαχείριση Έργου Οργάνωση, σχεδιασμός και προγραμματισμός έργων ανάπτυξης λογισμικού.
-Στοίβα-Ουρά - Πλεονεκτήματα πινάκων -Δομές δεδομένων δευτερεύουσας μνήμης -Πληροφορική και δεδομένα -Παραδείγματα-Προβλήματα ψευδοκώδικα.
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
Επιμέλεια: Δέγγλερη Σοφία
Εισαγωγή στους Η/Υ Πίνακες.
Ανοικτά Ακαδημαϊκά Μαθήματα
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Πρόγραμμα Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ. Ε
Εκτέλεση Αλγορίθμων σε ψευδογλώσσα
Γλώσσα Προγραμματισμού
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Δομές Διακλάδωσης.
Δρ. Παναγιώτης Συμεωνίδης
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
PL/SQL.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος α
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος δ
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Page  1 Ο.Παλιάτσου Γαλλική Επανάσταση 1 ο Γυμνάσιο Φιλιππιάδας.
Γενική μορφή προγράμματος Pascal
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
1 ΕΝΤΟΛΕΣ ΠΛΗΡΟΦΟΡΙΩΝ ΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ ΘΕΣΗ ΣΗΜΕΙΟΥΘΕΣΗ ΣΗΜΕΙΟΥ ΑΠΟΣΤΑΣΗΑΠΟΣΤΑΣΗ ΕΜΒΑΔΟΝΕΜΒΑΔΟΝ.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ
Δημιουργία Διαφανειών
Κεφ.1 Εισαγωγη στην εννοια του Αλγοριθμου και στον Προγραμματισμο
Διαφάνειες παρουσίασης #3
Τεχνολογία ΛογισμικούSlide 1 Αλγεβρική Εξειδίκευση u Καθορισμός τύπων αφαίρεσης σε όρους σχέσεων μεταξύ τύπων λειτουργιών.
Δημιουργία Παρουσίασης
ΜΕΘΟΔΟΙ ΔΙΔΑΣΚΑΛΙΑΣ Δομιστική προσέγγιση (Ι)
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
1 6.Εισαγωγή γραφικού 6.1 Εισαγωγή γραφικού Στο μενού «Εισαγωγή» τοποθετούμε τον κέρσορα στην επιλογή «Εικόνα»
Ουρά Προτεραιότητας: Heap
Lists– Λίστες 1. Αυτό-αναφορικές δομές Τα μέλη μίας δομής μπορεί να είναι οποιουδήποτε τύπου, ακόμα και δείκτες σε δομές του ίδιου τύπου. Χρησιμοποιώντας.
Ενότητα Α.4. Δομημένος Προγραμματισμός
Τα προϊόντα της EmGoldEx Τα προϊόντα της EmGoldEx Ράβδοι χρυσού 24k καθαρότητας 999,9 απο 1 έως 100 γραμμάρια Όλες οι ράβδοι χρυσού είναι πιστοποιημένες.
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τρίτη, 31 Μαρτίου 2015Τμ. Πληροφορικής,
ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΟΝΤΕΣ: Π. ΚΑΤΣΑΡΟΣ Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τετάρτη, 1 Απριλίου 2015Τμ. Πληροφορικής,
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Συγγραφείς Α.Βακάλη Η. Γιαννόπουλος Ν. Ιωαννίδης Χ.Κοίλιας Κ. Μάλαμας Ι. Μανωλόπουλος Π. Πολίτης Γ΄ τάξη.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Βάσεις Δεδομένων Εργαστήριο ΙΙ Τμήμα Πληροφορικής ΑΠΘ
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Προπτυχιακό.
ΜΑΘΗΜΑ: ΣΧΕΔΙΑΣΗ ΑΛΓΟΡΙΘΜΩΝ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Τμ.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
1 Βάσεις Δεδομένων ΙI Επιμέλεια: ΘΟΔΩΡΗΣ ΜΑΝΑΒΗΣ SQL (3 από 3) T Manavis.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Μορφοποίηση Παραγράφων
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 12: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Β) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Γνωριμία με το Λογισμικό του υπολογιστή Μια παρουσίαση για τους μαθητές της Α΄ Τάξης του 49ου Γυμνασίου Αθήνας Διδάσκων: Χ. Μοτσενίγος 49ο Γυμνάσιο Αθήνας.
Σχεδίαση Διαφανειών Πρακτικός Οδηγός Μιχαηλίδη Αφροδίτη.
Ενισχυτική διδασκαλία
ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ Γυμνασίου Α΄ Τρίμηνο
Μεταγράφημα παρουσίασης:

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 1 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE) Διάταξη Κώδικα: ακραίο παράδειγμα προς αποφυγή (σε Pascal) procedure InsertionSort( Var Data: SortArray_t; FirstElmt: Integer; LastElmt: Integer ); { Use the insertion sort technique to sort the "Data" array in ascending order. This routine assumes that Data [ FirstElmt ] is not the FirstElmt element in Data and that Data [ FirstElmt−1 ] can be accessed. } Const SortMin = ''; Var SortBoundary: Integer; { upper end of sorted range } InsertPos: Integer; { position to insert element } InsertVal: SortElmt_t; { value to insert } LowerBoundary: SortElmt_t; { first value below range to sort } begin { Replace element at lower boundary with an element guaranteed to be first in a sorted list } LowerBoundary := Data[ FirstElmt−1 ]; Data [ FirstElmt−1 ] := SortMin; { The elements in positions FirstElmt through SortBoundary−1 are always sorted. In each pass through the loop, SortBoundary is increased, and the element at the position of the new SortBoundary probably isn't in its sorted place in the array, so it's inserted into the proper place somewhere between FirstElmt and SortBoundary. } for SortBoundary := FirstElmt+1 to LastElmt do begin InsertVal := Data [ SortBoundary ]; InsertPos := SortBoundary; while InsertVal < Data [ InsertPos−1 ] do begin Data[ InsertPos ] := Data[ InsertPos−1 ]; InsertPos := InsertPos−1; end; Data [ InsertPos ] := InsertVal; end; { Replace original lower-boundary element } Data[ FirstElmt−1 ] := LowerBoundary; end; { InsertionSort }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 2 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE) Διάταξη Κώδικα: ο ίδιος κώδικας λίγο καλύτερα procedure InsertionSort( Var Data: SortArray_t; FirstElmt: Integer; LastElmt: Integer ); { Use the insertion sort technique to sort the "Data" array in ascending order. This routine assumes that Data[ FirstElmt ] is not the first element in Data and that Data[ FirstElmt−1 ] can be accessed. } Const SortMin = ''; Var SortBoundary: Integer; { upper end of sorted range } InsertPos: Integer; { position to insert element } InsertVal: SortElmt_t; { value to insert } LowerBoundary: SortElmt_t; { first value below range to sort } begin { Replace element at lower boundary with an element guaranteed to be first in a sorted list } LowerBoundary := Data[ FirstElmt−1 ]; Data[ FirstElmt−1 ] := SortMin; { The elements in positions FirstElmt through SortBoundary−1 are always sorted. In each pass through the loop, SortBoundary is increased, and the element at the position of the new SortBoundary probably isn't in its sorted place in the array, so it's inserted into the proper place somewhere between FirstElmt and SortBoundary. } for SortBoundary := FirstElmt+1 to LastElmt do begin InsertVal := Data[ SortBoundary ]; InsertPos := SortBoundary; while InsertVal < Data[ InsertPos−1 ] do begin Data[ InsertPos ] := Data[ InsertPos−1 ]; InsertPos := InsertPos−1; end; Data[ InsertPos ] := InsertVal; end; { Replace original lower-boundary element } Data[ FirstElmt−1 ] := LowerBoundary; end; { InsertionSort }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 3 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE) Διάταξη Κώδικα: σωστά γραμμένος κώδικας procedure InsertionSort ( Var Data:SortArray_t; FirstElmt: Integer; LastElmt: Integer ); { Use the insertion sort technique to sort the "Data" array in ascending order. This routine assumes that Data[ FirstElmt ] is not the first element in Data and that Data[ FirstElmt−1 ] can be accessed. } Const SortMin = ''; Var SortBoundary: Integer; { upper end of sorted range } InsertPos: Integer; { position to insert element } InsertVal: SortElmt_t;{ value to insert } LowerBoundary: SortElmt_t;{ first value below range to sort } begin { Replace element at lower boundary with an element guaranteed to be first in a sorted list } LowerBoundary := Data[ FirstElmt−1 ]; Data[ FirstElmt−1 ] := SortMin; { The elements in positions FirstElmt through SortBoundary−1 are always sorted. In each pass through the loop, SortBoundary is increased, and the element at the position of the new SortBoundary probably isn't in its sorted place in the array, so it's inserted into the proper place somewhere between FirstElmt and SortBoundary.}

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 4 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE) Διάταξη Κώδικα: σωστά γραμμένος κώδικας (συνέχεια) for SortBoundary := FirstElmt+1 to LastElmt do begin InsertVal := Data[ SortBoundary ]; InsertPos := SortBoundary; while InsertVal < Data[ InsertPos−1 ] do begin Data[ InsertPos ] := Data[ InsertPos−1 ]; InsertPos := InsertPos−1; end; Data[ InsertPos ] := InsertVal; end; { Replace original lower-boundary element } Data[ FirstElmt−1 ] := LowerBoundary; end; { InsertionSort }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 5 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ (LAYOUT & STYLE) Διάταξη Κώδικα: μορφοποίηση κώδικα που αξιοποιεί τυπογραφικά χαρακτηριστικά (με κατάλληλο εργαλείο)

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 6 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ Η ΒΑΣΙΚΗ ΑΡΧΗ ΤΗΣ ΣΩΣΤΗΣ ΜΟΡΦΟΠΟΙΗΣΗΣ Τεχνικές που ωραιοποιούν τον κώδικα είναι πάντα χρήσιμες, αλλά όχι τόσο σημαντικές όσο οι τεχνικές που αναδεικνύουν τη λογική του δομή και οργάνωση. ΑΝΘΡΩΠΙΝΗ ΚΑΙ ΥΠΟΛΟΓΙΣΤΙΚΗ ΕΡΜΗΝΕΙΑ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Η διάταξη του κώδικα είναι μία χρήσιμη ένδειξη της δομής ενός προγράμματος. Ενώ ο υπολογιστής στηρίζεται αποκλειστικά σε εντολές όπως begin και end ή { και }, ο άνθρωπος δημιουργεί παραστάσεις αντίληψης από την οπτική παρουσίαση του κώδικα.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 7 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ Παράδειγμα κώδικα που διαφορετική σημασία έχει για τον υπολογιστή και διαφορετική σημασία έχει για τον άνθρωπο /* swap left and right elements for whole array */ for ( i = 0; i < MAX_ELMTS; i++ ) LeftElmt= Left[ i ]; Left[ i ] = Right[ i ]; Right[ i ] = LeftElmt; Δεύτερο παράδειγμα κώδικα που διαφορετική σημασία έχει για τον υπολογιστή και διαφορετική σημασία έχει για τον άνθρωπο x = 3+4 * 2+7;

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 8 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ Είναι πιο απλή η συγγραφή κώδικα που να είναι αναγνώσιμος από τον υπολογιστή, αλλά πολύ περισσότερο σύνθετη η συγγραφή κώδικα που να είναι αναγνώσιμος από τον άνθρωπο. Το πείραμα με τη σκακιέρα, τους experts και τους αρχάριους: όταν τα πιόνια είναι τοποθετημένα σε θέσεις που θα μπορούσαν να εμφανιστούν στη διάρκεια ενός παιχνιδιού η μνήμη ενός expert λειτουργεί πιο αποτελεσματικά από τη μνήμη ενός αρχάριου. Όταν τα πιόνια τοποθετούνται τυχαία δεν υπάρχει διαφορά μεταξύ expert και αρχάριου.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 9 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ ΣΥΜΠΕΡΑΣΜΑ: Όταν η πληροφορία αντιστοιχεί σε δομημένη γνώση - τοποθέτηση σε θέσεις που έχουν νόημα - ο ειδικός μπορεί να θυμάται καλύτερα. Όταν η πληροφορία δεν αντιστοιχεί σε δομημένη γνώση ο ειδικός δεν μπορεί να θυμάται πολύ καλύτερα από ότι ο αρχάριος. ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ: Όταν οι εντολές του προγράμματος είναι διευθετημένες σε λογική σειρά (που είναι εύκολα αντιληπτή) οι ειδικοί εμφανίζουν βελτιωμένες δυνατότητες απομνημόνευσης σε σχέση με τους αρχάριους. Όταν οι εντολές είναι ανακατεμένες (ή έτσι φαίνεται) δεν υπάρχει διαφορά στη δυνατότητα απομνημόνευσης της λογικής του κώδικα.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 10 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ Δεδομένης της πληθώρας των στυλ διάταξης κώδικα και της εμμονής των προγραμματιστών στο δικό τους στυλ, οι λεπτομέρειες της συγκεκριμένης μεθόδου δόμησης προγράμματος είναι πολύ λιγότερο σημαντικές από το γεγονός ότι τελικά ο κώδικας έχει μια δομή. Οι καλοί προγραμματιστές θα πρέπει να είναι ανοιχτοί σε νέες πρακτικές διάταξης κώδικα και να υιοθετούν πρακτικές που αποδεδειγμένα είναι καλύτερες απ΄ αυτές που χρησιμοποιούν, παρόλο που η αλλαγή αυτή μπορεί αρχικά να δημιουργεί μία δυσκολία.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 11 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΘΕΜΕΛΙΩΔΕΙΣ ΑΡΧΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ ΚΑΙ ΣΤΥΛ Στόχοι μιας σωστής διάταξης κώδικα: – Ακριβής αναπαράσταση της λογικής δομής του κώδικα – Συνεπής αναπαράσταση της λογικής δομής του κώδικα: κάποια στυλ έχουν τόσες πολλές εξαιρέσεις που είναι τελικά δύσκολο να διακρίνουμε συνεπείς κανόνες δόμησης κώδικα – Βελτίωση αναγνωσιμότητας – Ανθεκτικότητα σε τροποποιήσεις: στα καλά σχήματα διάταξης η τροποποίηση μιας γραμμής κώδικα δεν επιφέρει τροποποιήσεις στις υπόλοιπες γραμμές

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 12 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΤΕΧΝΙΚΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Κενά: – Χρησιμοποιείτε χαρακτήρες κενού, tabs, χαρακτήρες αλλαγής γραμμής και κενές γραμμές για να βελτιώσετε την αναγνωσιμότητα του προγράμματος – Φανταστείτε το ρόλο των κεφαλαίων, των παραγράφων και των προτάσεων σε ένα βιβλίο: καταδεικνύουν στον αναγνώστη πως να οργανώσει νοητικά ένα θέμα. Η πληροφορία που περιέχεται σε ένα πρόγραμμα είναι πολύ πιο πυκνή από την πληροφορία που περιέχεται στα περισσότερα βιβλία.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 13 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΤΕΧΝΙΚΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Κενά: – Συνήθως σε ένα ή δύο λεπτά μπορούμε να διαβάσουμε και να καταλάβουμε μια σελίδα βιβλίου, αλλά οι περισσότεροι προγραμματιστές δεν μπορούν να κατανοήσουν ένα πρόγραμμα με αυτόν τον ρυθμό. ΣΥΜΠΕΡΑΣΜΑ: ένα πρόγραμμα πρέπει να παρέχει πολύ περισσότερες ενδείξεις οργάνωσης και δομής από ότι ένα βιβλίο. – Ομαδοποίηση: Τα κενά χρησιμοποιούνται για την ομαδοποίηση εντολών που σχετίζονται μεταξύ τους.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 14 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΤΕΧΝΙΚΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Κενά: – Κενές γραμμές: Όσο σημαντική είναι η ομαδοποίηση γραμμών που σχετίζονται μεταξύ τους, άλλο τόσο σημαντικός είναι ο διαχωρισμός εντολών που δε σχετίζονται μεταξύ τους. Αυτό γίνεται με τις κενές γραμμές που ουσιαστικά χρησιμοποιούνται για το άνοιγμα νέων παραγράφων κώδικα. Έχει βρεθεί ότι η βέλτιστη αναλογία κενών γραμμών σε ένα πρόγραμμα είναι 8 % με 16 %. Περισσότερες κενές γραμμές αυξάνουν δραματικά τον απαιτούμενο χρόνο αποσφαλμάτωσης.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 15 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΤΕΧΝΙΚΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Κενά: – Στοίχιση: Στοιχίζουμε τα όμοια στοιχεία (π.χ. τελεστές ανάθεσης) στις ομάδες εντολών που σχετίζονται μεταξύ τους. Αυτή η τακτική επιτείνει την ιδέα ότι οι συγκεκριμένες εντολές ανήκουν όλες στην ίδια ομάδα. – Εσοχές: Χρησιμοποιούμε εσοχές για να καταδείξουμε τη λογική δομή του προγράμματος. Σα βασικό κανόνα υιοθετούμε την εσοχή εντολών κάτω από την εντολή στην οποία λογικά αυτές υπάγονται. Μελέτες έχουν δείξει ότι όταν χρησιμοποιούνται εσοχές από δύο μέχρι τέσσερις θέσεις η κατανοησιμότητα των προγραμμάτων βελτιώνεται από 20% μέχρι 30%.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 16 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΤΕΧΝΙΚΕΣ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Παρενθέσεις: – Χρησιμοποιείτε παρενθέσεις πολύ πιο συχνά από όσο νομίζετε ότι σας χρειάζονται για να διευκρινίζετε τις εκφράσεις που συνδυάζουν περισσότερους από δύο όρους. Παράδειγμα C: πως αποτιμάται η έκφραση 12+4 % 3 * 7 / 8

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 17 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΣΤΥΛ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Ένα block κώδικα περικλείεται σε λέξεις κλειδιά: στην Pascal μεταξύ begin και end και στη C μεταξύ { και }. Πολλά από τα θέματα που σχετίζονται με τη διάταξη του κώδικα έχουν να κάνουν με τη διάταξη blocks κώδικα. Τα τέσσερα πιο συχνά χρησιμοποιούμενα στυλ διάταξης είναι: – τα άψογα διευθετημένα blocks (pure blocks) – η διάταξη τέλους γραμμής – η προσομοίωση άψογα διευθετημένων blocks – χρήση ορίων block begin και end Το στυλ διάταξης που επιλέγεται εξαρτάται και από τη γλώσσα προγραμματισμού.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 18 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΣΤΥΛ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ άψογα διευθετημένα blocks (pure blocks) παραδείγματα κώδικα Ada: if PixelColor = RedColor then statement1; statement2;... end if; while PixelColor = RedColor loop statement1; statement2;... end loop; case PixelColor of when RedColor => statement1; statement2;... when GreenColor => statement1; statement2;... when others => statement1; statement2;... end case;

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 19 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΣΤΥΛ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ διάταξη τέλους γραμμής μερικές φορές βολεύει: αλλά if ( SoldCount > 10 and PrevMonthSales > 10 ) then if ( SoldCount > 100 and PrevMonthSales > 10 ) then if ( SoldCount > 1000 ) then begin Markdown := 0.10; Profit := 0.05 end else Markdown := 0.05 else Markdown := else Markdown := 0.0; while PixelColor = RedColor do begin statement1; statement2;... end;

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 20 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΣΤΥΛ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ Αποφεύγετε τη διάταξη τέλους γραμμής γιατί δεν είναι ακριβής, είναι δύσκολο να εφαρμοστεί με συνέπεια και δύσκολο να συντηρηθεί. προσομοίωση άψογα διευθετημένων blocks if PixelColor = RedColor then begin statement1; statement2;... end;

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 21 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΣΤΥΛ ΔΙΑΤΑΞΗΣ ΚΩΔΙΚΑ χρήση ορίων block begin και end if PixelColor = RedColor then begin statement1; statement2;... end; Αυτό το στυλ είναι καλό, συμμορφώνεται στη βασική αρχή της σωστής μορφοποίησης, μπορεί εύκολα να εφαρμοσθεί με συνέπεια και δε δημιουργεί προβλήματα συντήρησης.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 22 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΔΟΜΩΝ ΕΛΕΓΧΟΥ Αποφεύγετε τα ζεύγη begin – end χωρίς εσοχή Αποφεύγετε τη διπλή εσοχή με begin και end

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 23 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΔΟΜΩΝ ΕΛΕΓΧΟΥ Χρησιμοποιείτε κενές γραμμές μεταξύ παραγράφων: μερικά blocks δε διαχωρίζονται με ζεύγη begin και end. Ένα λογικό block πρέπει να αντιμετωπίζεται όπως οι παράγραφοι σε ένα συμβατικό κείμενο. Μορφοποιείτε με συνέπεια τα block που αποτελούνται από μία μόνο εντολή.

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 24 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΔΟΜΩΝ ΕΛΕΓΧΟΥ Στυλ για block μιας εντολής

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 25 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΔΟΜΩΝ ΕΛΕΓΧΟΥ Στις περίπλοκες εκφράσεις διαχωρείστε τις συνθήκες σε ξεχωριστές γραμμές if ( ( '0' <= InChar and InChar <= '9' ) or ( 'a' <= InChar and InChar <= 'z' ) or ( 'A' <= InChar and InChar <= 'Z' ) ) then... Αποφεύγετε εντολές τύπου goto

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 26 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Περιορίστε το μήκος των εντολών το πόλύ στους 80 χαρακτήρες – γραμμές μεγαλύτερες από 80 χαρακτήρες είναι δύσκολα αναγνώσιμες – το όριο των 80 χαρακτήρων αποτρέπει τα πολλά επίπεδα εμφώλευσης – γραμμές μεγαλύτερες από 80 χαρακτήρες δε χωράνε σε χαρτί Α4 Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα των λογικών εκφράσεων Παράδειγμα μη αναγνώσιμου κώδικα: while(PathName[StartPath+Pos]<>';') and ((StartPath+Pos)<=length(PathName)) do

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 27 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα των λογικών εκφράσεων – χρησιμοποιείτε κενά για να διαχωρίζετε τα ονόματα μεταξύ τους Παράδειγμα αναγνώσιμου κώδικα: while ( PathName[ StartPath + Pos ] <> ';' ) and (( StartPath + Pos ) <= length( PathName )) do Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα αναφορών σε στοιχεία πίνακα

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 28 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα αναφορών σε στοιχεία πίνακα Παράδειγμα μη αναγνώσιμου κώδικα: GrossRate[Census[GroupID].Sex,Census[GroupID].AgeGroup] Παράδειγμα αναγνώσιμου κώδικα: GrossRate[ Census[ GroupID ].Sex, Census[ GroupID ].AgeGroup ] Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα ορισμάτων συναρτήσεων

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 29 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Χρησιμοποιείτε κενά για να βελτιώνετε την αναγνωσιμότητα ορισμάτων συναρτήσεων Παράδειγμα μη αναγνώσιμου κώδικα: ReadEmployeeData(MaxEmps,EmpData,InputFile,EmpCount,InputError); Παράδειγμα μη αναγνώσιμου κώδικα: GetCensus( InputFile, EmpCount, EmpData, MaxEmps, InputError ); Στοίχιση εντολών που σχετίζονται μεταξύ τους Παράδειγμα λάθος στοίχισης: EmployeeName = InputName EmployeeSalary = InputSalary EmployeeBirthdate = InputBirthdate

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 30 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Στοίχιση εντολών που σχετίζονται μεταξύ τους Παράδειγμα σωστής στοίχισης: EmployeeName = InputName EmployeeSalary = InputSalary EmployeeBirthdate = InputBirthdate Παράδειγμα λάθος στοίχισης: EmployeeName = InputName EmployeeAddress = InputAddress EmployeePhone = InputPhone BossTitle = Title BossDept = Department

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 31 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Στοίχιση εντολών που σχετίζονται μεταξύ τους Παράδειγμα σωστής στοίχισης: EmployeeName = InputName EmployeeAddress = InputAddress EmployeePhone = InputPhone BossTitle = Title BossDept = Department Μορφοποίηση μη ολοκληρωμένων γραμμών: Να κάνετε εμφανές το ότι η εντολή δεν είναι ολοκληρωμένη

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 32 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Παραδείγματα εμφανώς μη ολοκληρωμένων γραμμών:

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 33 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Μορφοποίηση μη ολοκληρωμένων γραμμών: Να διατηρείτε μαζί στοιχεία του κώδικα που σχετίζονται μεταξύ τους όπως π.χ. αναφορές σε στοιχεία πίνακα, ορίσματα συναρτήσεων κ.α. Παράδειγμα όχι καλού διαχωρισμού γραμμής: CustomerBill := PrevBalance( PaymentHistory[ CustomerID ] ) + LateCharge( PaymentHistory[ CustomerID ] ); Παράδειγμα σωστού διαχωρισμού γραμμής: CustomerBill := PrevBalance( PaymentHistory[ CustomerID ] ) + LateCharge( PaymentHistory[ CustomerID ] );

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 34 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Μορφοποίηση μη ολοκληρωμένων γραμμών: Χρησιμοποιείτε εσοχή για τη συνέχεια γραμμών κλήσης συναρτήσεων Παράδειγμα σωστού διαχωρισμού γραμμής: DrawLine( Window.North, Window.South, Window.East, Window.West, CurrentWidth, CurrentAttribute ); SetFontAttributes( Font.FaceName, Font.Size, Font.Bold, Font.Italic, Font.SyntheticAttribute[ FontID ].Underline, Font.SyntheticAttribute[ FontID ].Strikeout ); Ή για να τονίσουμε το όνομα της συνάρτησης: DrawLine( Window.North, Window.South, Window.East, Window.West, CurrentWidth, CurrentAttribute ); SetFontAttributes( Font.FaceName, Font.Size, Font.Bold, Font.Italic, Font.SyntheticAttribute[ FontID ].Underline, Font.SyntheticAttribute[ FontID ].Strikeout );

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 35 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Μορφοποίηση μη ολοκληρωμένων γραμμών: Βάλτε εσοχή σε συνέχεια εντολής ελέγχου Παράδειγμα: while ( PathName[ StartPath + Pos ] != ';' ) && ( ( StartPath + Pos ) <= length( PathName ) ) {... } for ( RecNum = Employee.Rec.Start + Employee.Rec.Offset; RecNum <= Employee.Rec.Start + Employee.Rec.Offset + Employee.NumRecs; RecNum++ ) {... }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 36 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Μορφοποίηση μη ολοκληρωμένων γραμμών: Βάλτε εσοχή σε συνέχεια εντολών ανάθεσης πέρα από τον τελεστή ανάθεσης Παράδειγμα μη σωστού διαχωρισμού γραμμής: CustomerPurchases:= CustomerPurchases + CustomerSales( CustomerID ); CustomerBill := CustomerBill + CustomerPurchases; TotalCustomerBill := CustomerBill + PreviousBalance( CustomerID ) + LateCharge( CustomerID ); CustomerRating := Rating( CustomerID, TotalCustomerBill ); Παράδειγμα μη σωστού διαχωρισμού γραμμής: CustomerPurchases:= CustomerPurchases + CustomerSales( CustomerID ); CustomerBill := CustomerBill + CustomerPurchases; TotalCustomerBill := CustomerBill + PreviousBalance( CustomerID ) + LateCharge( CustomerID ); CustomerRating := Rating( CustomerID, TotalCustomerBill );

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 37 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Βάζετε μόνο μία εντολή ανά γραμμή Να αποφεύγετε τα side effects (παράπλευρες επιπτώσεις της εκτέλεσης μιας εντολής) Παράδειγμα μη αποφυγής των side effects: printf( "%d %d \n", ++n, n + 2 ); Παράδειγμα σύνταξης αποφυγής των side effects: ++n; printf( "%d %d \n", n, n + 2 ); Ακραίο παράδειγμα μη αποφυγής των side effects: strcpy( char * t, char * s ) { while ( *++t = *++s ) ; }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 38 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Ακραίο παράδειγμα μη αποφυγής των side effects: strcpy( char * t, char * s ) { do { ++t; ++s; *t = *s; } while ( *t != ‘\0’ ); }

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 39 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Διάταξη δηλώσεων: να χρησιμοποιείτε στοίχιση int SortBoundary; int InsertPos; SORT_STRING InsertVal; SORT_STRING LowerBoundary; Διάταξη δηλώσεων: μόνο μία δήλωση ανά γραμμή int RowIdx, ColIdx; COLOR PreviousScreen, CurrentScreen, NextScreen; POINT PreviousTop, PreviousBottom, CurrentTop, CurrentBottom, NextTop, NextBottom; FONT PreviousFace, CurrentFace, NextFace; COLOR Choices[ NUM_COLORS ];

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 40 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΔΙΑΤΑΞΗ ΕΝΤΟΛΩΝ Διάταξη δηλώσεων: βάζετε τις δηλώσεις σε μία λογική σειρά π.χ. ανά τύπο ή αλφαβητικά (έχει πολλή δουλειά) Διάταξη δηλώσεων: στις δηλώσεις μεταβλητών δείκτη βάζετε το αστεράκι δεξιά του τύπου εκτός και αν έχουμε περισσότερα του ενός αστεράκια EMP_LIST * Employees; FILE * InputFile;

20 Αυγούστου 2014 ΔΙΑΦΑΝΕΙΑ 41 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓ/ΜΟΣ ΜΕ C++ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΠΡΟΤΕΙΝΟΜΕΝΟ ΒΙΒΛΙΟ Code Complete: A Practical Handbook of Software Construction Steve McConnell, Microsoft Press, 1993