031.1 Μάθημα 1
Πιστοποιητικό: |
Web Development Essentials |
---|---|
Έκδοση: |
1.0 |
Θέμα: |
031 Ανάπτυξη Λογισμικού και Web Τεχνολογίες |
Σκοπός: |
031.1 Βασικά Στοιχεία Ανάπτυξης Λογισμικού |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Οι πρώτοι υπολογιστές προγραμματίστηκαν μέσω της εξουθενωτικής διαδικασίας σύνδεσης καλωδίων σε πρίζες. Οι επιστήμονες υπολογιστών άρχισαν σύντομα μια ατέρμονη αναζήτηση εύκολων τρόπων, για να λένε στον υπολογιστή τι να κάνει. Αυτό το κεφάλαιο παρουσιάζει τα εργαλεία προγραμματισμού. Εξετάζει τους βασικούς τρόπους με τους οποίους οι οδηγίες κειμένου—γλώσσες προγραμματισμού—αντιπροσωπεύουν τις εργασίες που θέλει να ολοκληρώσει ένας προγραμματιστής και τα εργαλεία που αλλάζουν το πρόγραμμα σε μια μορφή που ονομάζεται γλώσσα μηχανής [machine language] που μπορεί να εκτελέσει ένας υπολογιστής.
Note
|
Σε αυτό το κείμενο, οι όροι πρόγραμμα και εφαρμογή χρησιμοποιούνται ως ισοδύναμοι. |
Source Code
Ένας προγραμματιστής συνήθως αναπτύσσει μια εφαρμογή γράφοντας μια κειμενική περιγραφή, που ονομάζεται source code [πηγαίος κώδικας], της επιθυμητής εργασίας. Ο πηγαίος κώδικας είναι σε μια προσεκτικά καθορισμένη γλώσσα προγραμματισμού που αντιπροσωπεύει τι μπορεί να κάνει ο υπολογιστής σε μια υψηλού επιπέδου αφαίρεση που μπορούν να κατανοήσουν οι άνθρωποι. Έχουν επίσης αναπτυχθεί εργαλεία που επιτρέπουν σε προγραμματιστές καθώς και σε μη προγραμματιστές να εκφράσουν τις σκέψεις τους οπτικά, αλλά η συγγραφή πηγαίου κώδικα εξακολουθεί να είναι ο κυρίαρχος τρόπος προγραμματισμού.
Με τον ίδιο τρόπο που μια φυσική γλώσσα έχει ουσιαστικά, ρήματα και κατασκευές για να εκφράσει ιδέες με δομημένο τρόπο, οι λέξεις και τα σημεία στίξης σε μια γλώσσα προγραμματισμού είναι συμβολικές αναπαραστάσεις πράξεων που θα εκτελεστούν στη μηχανή.
Υπό αυτή την έννοια, ο source code δεν διαφέρει πολύ από οποιοδήποτε άλλο κείμενο στο οποίο ο συγγραφέας χρησιμοποιεί τους καθιερωμένους κανόνες μιας φυσικής γλώσσας για να επικοινωνήσει με τον αναγνώστη. Στην περίπτωση του πηγαίου κώδικα, ο “αναγνώστης” είναι το μηχάνημα, επομένως το κείμενο δεν μπορεί να περιέχει ασάφειες ή ασυνέπειες—ακόμα και ανεπαίσθητες.
Και όπως κάθε κείμενο που συζητά κάποιο θέμα σε βάθος, ο source code πρέπει επίσης να είναι καλά δομημένος και λογικά οργανωμένος κατά την ανάπτυξη πολύπλοκων εφαρμογών. Πολύ απλά προγράμματα και διδακτικά παραδείγματα μπορούν να αποθηκευτούν σε λίγες γραμμές ενός μόνο αρχείου κειμένου, το οποίο περιέχει όλο τον πηγαίο κώδικα του προγράμματος. Πιο πολύπλοκα προγράμματα μπορούν να υποδιαιρεθούν σε χιλιάδες αρχεία, το καθένα με χιλιάδες γραμμές.
Ο πηγαίος κώδικας των επαγγελματικών εφαρμογών θα πρέπει να είναι οργανωμένος σε διαφορετικούς φακέλους, που συνήθως σχετίζονται με έναν συγκεκριμένο σκοπό. Ένα πρόγραμμα chat, για παράδειγμα, μπορεί να οργανωθεί σε δύο φακέλους: έναν που περιέχει τα αρχεία κώδικα που χειρίζονται τη μετάδοση και λήψη μηνυμάτων μέσω του δικτύου και έναν άλλο φάκελο που περιέχει τα αρχεία που δημιουργούν το interface και ανταποκρίνονται στις ενέργειες του χρήστη. Πράγματι, είναι σύνηθες να υπάρχουν πολλοί φάκελοι και υποφάκελοι με αρχεία πηγαίου κώδικα αφιερωμένα σε πολύ συγκεκριμένες εργασίες εντός της εφαρμογής.
Επιπλέον, ο source code δεν είναι πάντα απομονωμένος στα δικά του αρχεία, με τα πάντα γραμμένα σε μία μόνο γλώσσα. Σε εφαρμογές web, για παράδειγμα, ένα έγγραφο HTML μπορεί να ενσωματώσει κώδικα JavaScript για να συμπληρώσει το έγγραφο με επιπλέον λειτουργικότητα.
Editors Κώδικα και IDE
Η ποικιλία των τρόπων με τους οποίους μπορεί να γραφτεί ο source code μπορεί να είναι τρομακτική. Επομένως, πολλοί προγραμματιστές επωφελούνται από εργαλεία που βοηθούν στη συγγραφή και τη δοκιμή του προγράμματος.
Το αρχείο πηγαίου κώδικα είναι απλώς ένα αρχείο απλού κειμένου. Ως εκ τούτου, μπορεί να επεξεργαστεί από οποιοδήποτε editor κειμένου, όσο απλό κι αν είναι αυτό. Για να διευκολυνθεί η διάκριση μεταξύ πηγαίου κώδικα και απλού κειμένου, κάθε γλώσσα υιοθετεί μια αυτονόητη επέκταση ονόματος αρχείου: .c
για τη γλώσσα C, .py
για την Python, .js
για τη JavaScript κ.λπ. Οι editors γενικού σκοπού συχνά κατανοούν τον πηγαίο κώδικα των δημοφιλών γλωσσών αρκετά καλά ώστε να προσθέτουν italics, χρώματα και εσοχές στο κείμενο για να κάνουν τον κώδικα κατανοητό.
Δεν επιλέγει κάθε προγραμματιστής να επεξεργαστεί τον πηγαίο κώδικα σε έναν editor γενικού σκοπού. Ένα integrated development environment (IDE) [ενσωματωμένο περιβάλλον ανάπτυξης] παρέχει έναν editor κειμένου μαζί με εργαλεία που βοηθούν τον προγραμματιστή να αποφύγει συντακτικά λάθη και προφανείς ασυνέπειες. Αυτοί οι editors συνιστώνται ιδιαίτερα σε λιγότερο έμπειρους προγραμματιστές, αλλά τους χρησιμοποιούν και έμπειροι προγραμματιστές.
Δημοφιλή IDE όπως το Visual Studio, το Eclipse και το Xcode παρακολουθούν έξυπνα τι πληκτρολογεί ο προγραμματιστής, προτείνοντας συχνά λέξεις προς χρήση (αυτόματη συμπλήρωση) και επαληθεύοντας τον κώδικα σε πραγματικό χρόνο. Τα IDE μπορούν ακόμη και να προσφέρουν αυτοματοποιημένο debugging (αποσφαλμάτωση) και testing (έλεγχο), για τον εντοπισμό προβλημάτων κάθε φορά που αλλάζει ο πηγαίος κώδικας.
Ορισμένοι πιο έμπειροι προγραμματιστές επιλέγουν λιγότερο εύχρηστους editors όπως το Vim, οι οποίοι προσφέρουν μεγαλύτερη ευελιξία και δεν απαιτούν εγκατάσταση πρόσθετων πακέτων. Αυτοί οι προγραμματιστές χρησιμοποιούν εξωτερικά, αυτόνομα εργαλεία για να προσθέσουν τα χαρακτηριστικά που είναι ενσωματωμένα όταν χρησιμοποιείται ένα IDE.
Συντήρηση Κώδικα
Είτε σε ένα IDE είτε με χρήση αυτόνομων εργαλείων, είναι σημαντικό να χρησιμοποιείτε κάποιο είδος version control system (VCS) [σύστημα ελέγχου έκδοσης]. Ο πηγαίος κώδικας εξελίσσεται συνεχώς, επειδή πρέπει να διορθωθούν απρόβλεπτες ατέλειες και να ενσωματωθούν βελτιώσεις. Μια αναπόφευκτη συνέπεια αυτής της εξέλιξης είναι ότι οι διορθώσεις και οι βελτιώσεις μπορούν να εμπλέκονται σε άλλα μέρη των εφαρμογών σε μια μεγάλη βάση κώδικα. Τα εργαλεία version control όπως το Git, το Subversion και το Mercurial καταγράφουν όλες τις αλλαγές που έγιναν στον κώδικα και ποιος έκανε την αλλαγή, επιτρέποντάς σας να εντοπίσετε μια ανεπιτυχή τροποποίηση και τελικά να κάνετε ανάκτηση.
Επιπλέον, τα εργαλεία version control επιτρέπουν σε κάθε προγραμματιστή της ομάδας να εργαστεί σε ένα αντίγραφο των αρχείων του πηγαίου κώδικα χωρίς να εμπλέκεται στην εργασία άλλων προγραμματιστών. Μόλις οι νέες εκδόσεις του πηγαίου κώδικα είναι έτοιμες και δοκιμαστούν, οι διορθώσεις ή οι βελτιώσεις που έγιναν σε ένα αντίγραφο μπορούν να ενσωματωθούν από άλλα μέλη της ομάδας.
Το Git, το πιο δημοφιλές σύστημα version control στις μέρες μας, επιτρέπει τη διατήρηση πολλών ανεξάρτητων αντιγράφων ενός repository [αποθετήριο] από διαφορετικά άτομα, τα οποία μοιράζονται τις αλλαγές τους όπως θέλουν. Ωστόσο, είτε χρησιμοποιούν ένα αποκεντρωμένο είτε ένα κεντρικό σύστημα version control, οι περισσότερες ομάδες διατηρούν ένα αξιόπιστο repository επί του οποίου βασίζεται ο source code και διάφοροι άλλοι πόροι. Αρκετές διαδικτυακές υπηρεσίες προσφέρουν χώρο αποθήκευσης για repositories πηγαίου κώδικα. Οι πιο δημοφιλείς από αυτές τις υπηρεσίες είναι το GitHub και το GitLab, αλλά αξίζει να αναφερθεί και το Savannah έργο του GNU.
Γλώσσες Προγραμματισμού
Υπάρχει μεγάλη ποικιλία γλωσσών προγραμματισμού· κάθε δεκαετία βλέπει την εφεύρεση νέων. Κάθε γλώσσα προγραμματισμού έχει τους δικούς της κανόνες και συνιστάται για συγκεκριμένους σκοπούς. Αν και οι γλώσσες παρουσιάζουν επιφανειακές διαφορές στη σύνταξη και τις λέξεις-κλειδιά, αυτό που πραγματικά διακρίνει τις γλώσσες είναι οι βαθιές εννοιολογικές προσεγγίσεις που αντιπροσωπεύουν, γνωστές ως paradigms.
Paradigms
Τα paradigms ορίζουν τις υποθέσεις επάνω στις οποίες βασίζεται μια γλώσσα προγραμματισμού, ειδικά όσον αφορά τον τρόπο δομής του πηγαίου κώδικα.
Ο προγραμματιστής ξεκινά από το γλωσσικό paradigm για να διατυπώσει τις εργασίες που θα εκτελεστούν από το μηχάνημα. Αυτές οι εργασίες, με τη σειρά τους, εκφράζονται συμβολικά με τις λέξεις και τις συντακτικές δομές που προσφέρει η γλώσσα.
Η γλώσσα προγραμματισμού είναι procedural [διαδικαστική] όταν οι οδηγίες που παρουσιάζονται στον πηγαίο κώδικα εκτελούνται με διαδοχική σειρά, όπως ένα σενάριο ταινίας. Εάν ο source code είναι τμηματοποιημένος σε functions [συναρτήσεις] ή subroutines [υπορουτίνες], ένα κύριο routine φροντίζει για την κλήση των functions με τη σειρά.
Ο παρακάτω κώδικας είναι ένα παράδειγμα μιας procedural γλώσσας. Γραμμένος σε C, ορίζει μεταβλητές που αντιπροσωπεύουν την πλευρά, την περιοχή και τον όγκο των γεωγραφικών σχημάτων. Η τιμή της μεταβλητής side
ορίζεται στη main()
, η οποία είναι η function που καλείται όταν εκτελείται το πρόγραμμα. Οι μεταβλητές area
και volume
υπολογίζονται στις square()
και cube()
subroutines που προηγούνται της main function:
#include <stdio.h>
float side;
float area;
float volume;
void square(){ area = side * side; }
void cube(){ volume = area * side; }
int main(){
side = 2;
square();
cube();
printf("Volume: %f\n", volume);
return 0;
}
Η σειρά των ενεργειών που ορίζεται στην main()
καθορίζει την ακολουθία των καταστάσεων του προγράμματος, που χαρακτηρίζεται από την τιμή των μεταβλητών side
, area
και volume
. Το παράδειγμα τελειώνει αφού εμφανίσει την τιμή του volume
με το statement printf
.
Από την άλλη πλευρά, το paradigm του object-oriented programming (OOP) [αντικειμενοστρεφής προγραμματισμός] έχει ως κύριο χαρακτηριστικό τον διαχωρισμό της κατάστασης προγράμματος σε ανεξάρτητες υποκαταστάσεις. Αυτές οι υποκαταστάσεις και οι σχετικές λειτουργίες είναι τα objects [αντικείμενα], που ονομάζονται έτσι επειδή έχουν μια λίγο πολύ ανεξάρτητη ύπαρξη εντός του προγράμματος και επειδή έχουν συγκεκριμένους σκοπούς.
Τα διαφορετικά paradigms δεν περιορίζουν απαραίτητα τον τύπο της εργασίας που μπορεί να εκτελεστεί από ένα πρόγραμμα. Ο κώδικας από το προηγούμενο παράδειγμα μπορεί να ξαναγραφτεί σύμφωνα με το OOP paradigm χρησιμοποιώντας τη γλώσσα C++:
#include <iostream>
class Cube {
float side;
public:
Cube(float s){ side = s; }
float volume() { return side * side * side; }
};
int main(){
float side = 2;
Cube cube(side);
std::cout << "Volume: " << cube.volume() << std::endl;
return 0;
}
Το function main()
εξακολουθεί να υπάρχει. Αλλά τώρα υπάρχει μια νέα λέξη, class
, που εισάγει τον ορισμό ενός object. Η ορισμένη class, που ονομάζεται Cube
, περιέχει τις δικές της μεταβλητές και subroutines. Στον OOP, μια μεταβλητή ονομάζεται επίσης attribute και μια subroutine ονομάζεται method.
Είναι πέραν του πεδίου αυτού του κεφαλαίου να εξηγήσουμε όλο τον κώδικα C++ στο παράδειγμα. Αυτό που είναι σημαντικό για εμάς εδώ είναι ότι το Cube
περιέχει το attribute side
και δύο methods. Η volume()
method υπολογίζει τον όγκο του κύβου.
Είναι δυνατό να δημιουργηθούν πολλά ανεξάρτητα objects από την ίδια class και οι classes μπορούν να αποτελούνται από άλλες classes.
Λάβετε υπόψη ότι αυτά τα ίδια χαρακτηριστικά μπορούν να γραφτούν διαφορετικά και ότι τα παραδείγματα σε αυτό το κεφάλαιο είναι υπερβολικά απλοποιημένα. Οι C και C++ έχουν πολύ πιο εξελιγμένα χαρακτηριστικά που επιτρέπουν πολύ πιο σύνθετες και πρακτικές δομές.
Οι περισσότερες γλώσσες προγραμματισμού δεν επιβάλλουν αυστηρά ένα paradigm, αλλά επιτρέπουν στους προγραμματιστές να επιλέξουν διάφορες πτυχές του ενός ή του άλλου paradigm. Η JavaScript, για παράδειγμα, ενσωματώνει πτυχές διαφορετικών paradigms. Ο προγραμματιστής μπορεί να αποσυνθέσει ολόκληρο το πρόγραμμα σε functions που δεν μοιράζονται μια κοινή κατάσταση μεταξύ τους:
function cube(side){
return side*side*side;
}
console.log("Volume: " + cube(2));
Αν και αυτό το παράδειγμα είναι παρόμοιο με τον procedural προγραμματισμό, σημειώστε ότι το function λαμβάνει ένα αντίγραφο όλων των πληροφοριών που είναι απαραίτητες για την εκτέλεσή της και παράγει πάντα το ίδιο αποτέλεσμα για την ίδια παράμετρο, ανεξάρτητα από τις αλλαγές που συμβαίνουν εκτός του πεδίου της function. Αυτό το paradigm, που ονομάζεται functional, επηρεάζεται έντονα από τον μαθηματικό φορμαλισμό, όπου κάθε πράξη είναι αυτάρκης.
Ένα άλλο paradimg καλύπτει τις declarative γλώσσες, οι οποίες περιγράφουν τις καταστάσεις στις οποίες θέλετε να βρίσκεται το σύστημα. Μια declarative γλώσσα μπορεί να καταλάβει πώς να επιτύχετε τις καθορισμένες καταστάσεις. Η SQL, η παγκόσμια γλώσσα για την αναζήτηση βάσεων δεδομένων, ονομάζεται μερικές φορές declarative γλώσσα, αν και πραγματικά καταλαμβάνει μια μοναδική θέση στο πάνθεον προγραμματισμού.
Δεν υπάρχει παγκόσμιο paradigm που να μπορεί να υιοθετηθεί σε οποιοδήποτε πλαίσιο αναφοράς. Η επιλογή της γλώσσας μπορεί επίσης να περιορίζεται από τις γλώσσες που υποστηρίζονται στην πλατφόρμα ή στο περιβάλλον εκτέλεσης όπου θα χρησιμοποιηθεί το πρόγραμμα.
Μια εφαρμογή web που θα χρησιμοποιηθεί από το πρόγραμμα περιήγησης, για παράδειγμα, θα πρέπει να είναι γραμμένη σε JavaScript, η οποία είναι μια γλώσσα που υποστηρίζεται καθολικά από τα προγράμματα περιήγησης. (Μπορούν να χρησιμοποιηθούν μερικές άλλες γλώσσες επειδή παρέχουν μετατροπείς για τη δημιουργία JavaScript.) Επομένως, για το πρόγραμμα περιήγησης web—που μερικές φορές ονομάζεται client side ή front end της εφαρμογής web—ο προγραμματιστής θα πρέπει να χρησιμοποιήσει τα paradigms που επιτρέπονται στο JavaScript. Η πλευρά του server ή το back end της εφαρμογής, που χειρίζεται αιτήματα από το πρόγραμμα περιήγησης, προγραμματίζεται συνήθως σε διαφορετική γλώσσα· η PHP είναι η πιο δημοφιλής για τον σκοπό αυτόν.
Ανεξάρτητα από το paradigm, κάθε γλώσσα έχει προκατασκευασμένες libraries με functions που μπορούν να ενσωματωθούν στον κώδικα. Οι μαθηματικές συναρτήσεις—όπως αυτές που απεικονίζονται στον κώδικα του παραδείγματος—δεν χρειάζεται να υλοποιηθούν από την αρχή, καθώς η γλώσσα έχει ήδη το function έτοιμο για χρήση. Η JavaScript, για παράδειγμα, παρέχει το object Math
τις πιο συνηθισμένες μαθηματικές πράξεις.
Ακόμη πιο εξειδικευμένα functions, είναι συνήθως διαθέσιμα από τον προμηθευτή της γλώσσας ή από τρίτους προγραμματιστές. Αυτά τα επιπλέον libraries πόρων μπορούν να είναι σε μορφή πηγαίου κώδικα· π.χ. σε επιπλέον αρχεία που συμπεριλαμβάνονται στο αρχείο όπου θα χρησιμοποιηθούν. Στην JavaScript, η ενσωμάτωση γίνεται με import from
:
import { OrbitControls } from 'modules/OrbitControls.js';
Αυτός ο τύπος εισαγωγής, όπου ο ενσωματωμένος πόρος είναι επίσης ένα αρχείο πηγαίου κώδικα, χρησιμοποιείται συχνότερα στις λεγόμενες interpreted languages . Οι compiled languages επιτρέπουν, μεταξύ άλλων, την ενσωμάτωση pre-compiled χαρακτηριστικών στη γλώσσα μηχανής, δηλαδή τις compiled libraries. Η επόμενη ενότητα εξηγεί τις διαφορές μεταξύ αυτών των τύπων γλωσσών.
Compilers και Interpreters [Μεταγλωττιστές και Διερμηνευτές]
Όπως ήδη γνωρίζουμε, ο source code είναι μια συμβολική αναπαράσταση ενός προγράμματος που πρέπει να μεταφραστεί σε γλώσσα μηχανής για να εκτελεστεί.
Σε γενικές γραμμές, υπάρχουν δύο πιθανοί τρόποι για να κάνετε τη μετάφραση: να μετατρέψετε τον πηγαίο κώδικα εκ των προτέρων για μελλοντική εκτέλεσή του ή να μετατρέψετε τον κώδικα τη στιγμή της εκτέλεσής του. Οι γλώσσες της πρώτης τροπικότητας ονομάζονται compiled languages [μεταγλωττισμένες γλώσσες] και οι γλώσσες της δεύτερης τροπικότητας ονομάζονται interpreted languages [διερμηνευμένες γλώσσες]. Ορισμένες interpreted γλώσσες παρέχουν τη μεταγλώττιση ως επιλογή, έτσι ώστε το πρόγραμμα να μπορεί να ξεκινήσει πιο γρήγορα.
Στις compiled γλώσσες, υπάρχει σαφής διάκριση μεταξύ του πηγαίου κώδικα του προγράμματος και του ίδιου του προγράμματος, που θα εκτελεστεί από τον υπολογιστή. Μόλις μεταγλωττιστεί, το πρόγραμμα θα λειτουργεί συνήθως μόνο στο λειτουργικό σύστημα και την πλατφόρμα για την οποία μεταγλωττίστηκε.
Σε μια interpreted γλώσσα, ο ίδιος ο source code αντιμετωπίζεται ως το πρόγραμμα και η διαδικασία της μετατροπής σε γλώσσα μηχανής είναι διαφανής για τον προγραμματιστή. Για μια interpreted γλώσσα, είναι σύνηθες να αποκαλούμε τον πηγαίο κώδικα script [σενάριο]. Ο interpreter μεταφράζει το script στη γλώσσα μηχανής για το σύστημα, πάνω στο οποίο εκτελείται.
Compilation και Compilers [Μεταγλώττιση και Μεταγλωττιστές]
Η γλώσσα προγραμματισμού C είναι ένα από τα πιο γνωστά παραδείγματα μιας compiled γλώσσας. Τα μεγαλύτερα δυνατά σημεία της γλώσσας C είναι η ευελιξία και η απόδοσή της. Τόσο οι υπερυπολογιστές υψηλής απόδοσης όσο και οι μικροελεγκτές σε οικιακές συσκευές μπορούν να προγραμματιστούν στη γλώσσα C. Άλλα παραδείγματα δημοφιλών compiled γλωσσών είναι η C++ και η C# (C sharp). Όπως υποδηλώνουν τα ονόματά τους, αυτές οι γλώσσες είναι εμπνευσμένες από τη C, αλλά περιλαμβάνουν χαρακτηριστικά που υποστηρίζουν το object-oriented paradigm.
Το ίδιο πρόγραμμα γραμμένο σε C ή C++ μπορεί να γίνει compiled για διαφορετικές πλατφόρμες, απαιτώντας ελάχιστη ή καθόλου αλλαγή στον πηγαίο κώδικα. Είναι ο compiler που ορίζει την πλατφόρμα στόχο του προγράμματος. Υπάρχουν compilers για συγκεκριμένες πλατφόρμες καθώς και compilers πολλών πλατφορμών όπως το GCC (που σημαίνει GNU Compiler Collection) που μπορούν να παράγουν binary προγράμματα για πολλές διαφορετικές αρχιτεκτονικές.
Note
|
Υπάρχουν επίσης εργαλεία που αυτοματοποιούν τη διαδικασία του compilation. Αντί να καλείται απευθείας ο compiler, ο προγραμματιστής δημιουργεί ένα αρχείο που υποδεικνύει τα διάφορα βήματα του compilation που πρέπει να εκτελεστούν αυτόματα. Το παραδοσιακό εργαλείο που χρησιμοποιείται για το σκοπό αυτό είναι το |
Η διαδικασία του compilation δεν δημιουργεί πάντα ένα binary πρόγραμμα σε γλώσσα μηχανής. Υπάρχουν compiled γλώσσες που παράγουν ένα πρόγραμμα σε μορφή γενικώς ονομαζόμενη bytecode. Όπως ένα script, το bytecode δεν είναι σε γλώσσα συγκεκριμένης πλατφόρμας, επομένως απαιτεί έναν interpreter που το μεταφράζει σε γλώσσα μηχανής. Σε αυτήν την περίπτωση, ο interpreter ονομάζεται απλώς runtime.
Η γλώσσα Java ακολουθεί αυτήν την προσέγγιση, επομένως τα compiled προγράμματα γραμμένα σε Java μπορούν να χρησιμοποιηθούν σε διαφορετικά λειτουργικά συστήματα. Παρά το όνομά της, η Java δεν σχετίζεται με το JavaScript.
Το bytecode είναι πιο κοντά στη γλώσσα μηχανής από τον πηγαίο κώδικα, επομένως η εκτέλεσή του τείνει να είναι συγκριτικά ταχύτερη. Επειδή εξακολουθεί να υπάρχει μια διαδικασία μετατροπής κατά την εκτέλεση του bytecode, είναι δύσκολο να επιτύχουμε την ίδια απόδοση με ένα παρόμοιο πρόγραμμα compiled σε γλώσσα μηχανής.
Interpretation και Interpreters [Διερμήνευση και Διερμηνευτές]
Σε interpreted γλώσσες όπως η JavaScript, η Python και η PHP, το πρόγραμμα δεν χρειάζεται να γίνει εκ των προτέρων compiled, καθιστώντας ευκολότερη την ανάπτυξη και την τροποποίησή του. Αντί να γίνει compiling, το script εκτελείται από ένα άλλο πρόγραμμα που ονομάζεται interpreter. Συνήθως, ο interpreter μιας γλώσσας ονομάζεται από την ίδια τη γλώσσα. Ο interpreter ενός Python script, για παράδειγμα, είναι ένα πρόγραμμα που ονομάζεται python
. Ο interpreter της JavaScript είναι συνήθως το πρόγραμμα περιήγησης web, αλλά τα scripts μπορούν επίσης να εκτελεστούν εκτός προγράμματος περιήγησης από το πρόγραμμα node
. Επειδή κάθε φορά που εκτελείται μετατρέπεται σε binary οδηγίες, ένα interpreted γλωσσικό πρόγραμμα τείνει να είναι πιο αργό από ένα compiled γλωσσικά παρόμοιο πρόγραμμα.
Τίποτα δεν εμποδίζει την ίδια εφαρμογή να έχει στοιχεία γραμμένα σε διαφορετικές γλώσσες. Εάν είναι απαραίτητο, αυτά τα στοιχεία μπορούν να επικοινωνούν μέσω μιας αμοιβαία κατανοητής application programming interface (API).
Η γλώσσα Python, για παράδειγμα, έχει πολύ εξελιγμένες δυνατότητες mining και tabulation δεδομένων. Ο προγραμματιστής μπορεί να επιλέξει την Python για να γράψει τα μέρη του προγράμματος που ασχολούνται με αυτές τις πτυχές και μια άλλη γλώσσα, όπως η C++, για να εκτελέσει τη βαρύτερη αριθμητική επεξεργασία. Είναι δυνατή η υιοθέτηση αυτής της στρατηγικής ακόμη και όταν δεν υπάρχει API που να επιτρέπει την άμεση επικοινωνία μεταξύ των δύο μερών. Ο κώδικας γραμμένος σε Python μπορεί να δημιουργήσει ένα αρχείο στη σωστή μορφή που θα χρησιμοποιηθεί από ένα πρόγραμμα γραμμένο σε C++, για παράδειγμα.
Παρόλο που είναι δυνατή η σύνταξη σχεδόν οποιουδήποτε προγράμματος σε οποιαδήποτε γλώσσα, ο προγραμματιστής θα πρέπει να υιοθετήσει αυτό που συνάδει περισσότερο με τον σκοπό της εφαρμογής. Με αυτόν τον τρόπο, επωφελείστε από την επαναχρησιμοποίηση ήδη ελεγμένων και καλά τεκμηριωμένων στοιχείων.
Καθοδηγούμενες Ασκήσεις
-
Τι είδους πρόγραμμα μπορεί να χρησιμοποιηθεί για την επεξεργασία του πηγαίου κώδικα;
-
Τι είδους εργαλείο βοηθά στην ενσωμάτωση της εργασίας διαφορετικών προγραμματιστών στην ίδια βάση κώδικα;
Ασκήσεις Εξερεύνησης
-
Ας υποθέσουμε ότι θέλετε να γράψετε ένα 3D παιχνίδι που θα παιχτεί στο πρόγραμμα περιήγησης. Οι web εφαρμογές και τα παιχνίδια προγραμματίζονται σε JavaScript. Αν και είναι δυνατό να γραφτούν όλες οι γραφικές λειτουργίες από την αρχή, είναι πιο παραγωγικό να χρησιμοποιήσετε ένα έτοιμο library για το σκοπό αυτό. Ποιά libraries τρίτων παρέχουν δυνατότητες για 3D κίνηση σε JavaScript;
-
Εκτός από την PHP, ποιες άλλες γλώσσες μπορούν να χρησιμοποιηθούν στην πλευρά του server μιας web εφαρμογής;
Σύνοψη
Αυτό το μάθημα καλύπτει τις πιο βασικές έννοιες της ανάπτυξης λογισμικού. Ο προγραμματιστής πρέπει να γνωρίζει σημαντικές γλώσσες προγραμματισμού και το σωστό σενάριο χρήσης για καθεμία. Αυτό το μάθημα περιλαμβάνει τις ακόλουθες έννοιες και διαδικασίες:
-
Τι είναι ο πηγαίος κώδικας.
-
Editors πηγαίου κώδικα και σχετικά εργαλεία.
-
Procedural, object-oriented, functional, και declarative paradigms προγραμματισμού.
-
Χαρακτηριστικά των compiled και interpreted γλωσσών.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Τι είδους πρόγραμμα μπορεί να χρησιμοποιηθεί για την επεξεργασία του πηγαίου κώδικα;
Kάθε πρόγραμμα που μπορεί να επεξεργαστεί απλό κείμενο.
-
Τι είδους εργαλείο βοηθά στην ενσωμάτωση της εργασίας διαφορετικών προγραμματιστών στην ίδια βάση κώδικα;
Ένα σύστημα ελέγχου πηγαίου κώδικα ή version όπως το Git.
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Ας υποθέσουμε ότι θέλετε να γράψετε ένα 3D παιχνίδι που θα παιχτεί στο πρόγραμμα περιήγησης. Οι web εφαρμογές και τα παιχνίδια προγραμματίζονται σε JavaScript. Αν και είναι δυνατό να γραφτούν όλες οι γραφικές λειτουργίες από την αρχή, είναι πιο παραγωγικό να χρησιμοποιήσετε μια έτοιμη library για το σκοπό αυτό. Ποιες libraries τρίτων παρέχουν δυνατότητες για 3D κίνηση σε JavaScript;
Υπάρχουν πολλές επιλογές για 3D libraries γραφικών για JavaScript, όπως το threejs και το BabylonJS.
-
Εκτός από την PHP, ποιες άλλες γλώσσες μπορούν να χρησιμοποιηθούν στην πλευρά του server μιας web εφαρμογής;
Οποιαδήποτε γλώσσα που υποστηρίζεται από την εφαρμογή του HTTP server που χρησιμοποιείται στον host server. Μερικά παραδείγματα είναι η Python, η Ruby, η Perl και η ίδια η JavaScript.