Serie di istruzioni
Questa è la parte 2 di una serie di 5 parti per Introduzione alla programmazione
- Introduzione alla programmazione:per iniziare
- Introduzione alla programmazione:il tuo primo programma
- Introduzione alla programmazione:variabili, tipi e manipolazione dei dati
- Introduzione alla programmazione:controllo del flusso
- Introduzione alla programmazione:programmazione orientata agli oggetti
Sei tornato!
È bello rivederti e spero che tu abbia festeggiato profondamente dopo aver completato il primo articolo di questa serie su Atlantic.NET in cui hai creato il tuo primo programma e l'hai eseguito imparando come ciò che costruisci si trasforma da codice leggibile dall'uomo a macchina istruzioni.
Non preoccuparti, se non hai ancora letto quell'articolo, puoi farlo ora. Aspetterò qui che torni.
In questa parte della serie, esploreremo maggiormente il primo programma e ci concentreremo sulla comprensione di più concetti di programmazione e sviluppo software. In particolare, esamineremo input e output, ti presenteremo un concetto chiamato orientamento degli oggetti ed esplora come e perché vogliamo nascondere codice complesso usando l'astrazione .
Mettiamoci al lavoro, vero?
.
Analizzando "Hello World!"
Nell'articolo precedente, abbiamo creato un semplice "Hello World!" programma composto da due righe di codice che abbiamo scritto noi stessi. C'erano righe di codice aggiuntive, ma Visual Studio le ha generate per noi e sono specifiche per il tipo di programma che stiamo costruendo e il linguaggio che stiamo usando, quindi per ora non ci dedichiamo più tempo.
Le due righe che abbiamo aggiunto, tuttavia, si concentrano specificamente sull'output e sull'input, quindi esaminiamole più da vicino.
Console.WriteLine("Hello World!"); Console.ReadLine();
Ignorando la Console.
(leggi:"punto della console") parte delle righe per ora, puoi vedere che c'è un'istruzione alla macchina per scrivere una riga e quindi per leggere una riga. In un programma o un'applicazione console come quello che stiamo costruendo ora, questi sono due dei modi principali per interagire con l'utente; emettiamo qualcosa sullo schermo della console con Console.WriteLine
e ottieni input dall'utente con Console.Readline
. Il risultato è simile alla Figura 1 di seguito.
Figura 1:output della console
Questa applicazione console è solo uno dei tanti tipi di applicazioni che possiamo creare. Diversi tipi di applicazioni richiedono approcci diversi per l'input e l'output. Se stiamo costruendo una semplice pagina web, ad esempio, non esiste una console da e verso la quale possiamo interagire con l'utente. La pagina web è solo un pezzo di testo statico e forse alcune immagini. Sebbene un programma possa generarlo, non è ancora molto interattivo nello stesso modo in cui costruiamo l'interattività in un'applicazione console.
Nota:agli albori del web esisteva un metodo chiamato CGI (Common Gateway Interface) che permetteva di inserire applicazioni console come queste direttamente su una pagina web e interagire con esse tramite l'URL.
.
Un esempio di codice di pagina Web
Una pagina web ha un metodo completamente diverso di comportamento interattivo. Guarda il seguente codice della pagina web, ad esempio, e non preoccuparti se questo ti è completamente estraneo:
<html> <head> <title>Hello World!</title> </head> <body> <h1>Hello world!</h1> </body> </html>
Questa pagina Web presenta semplicemente all'utente un titolo che dice "Hello world!" e non molto altro, come di seguito.
Figura 2:Pagina web Hello World
Da sola, questa pagina web, o anche qualsiasi pagina web, non può fare molto. Per creare interattività, i browser possono interpretare le istruzioni dei comandi attraverso linguaggi come JavaScript per manipolare la pagina web in vari modi, inclusa la manipolazione del layout, del contenuto e della struttura della pagina web.
Ad esempio, di seguito nella Figura 3, utilizzo JavaScript su una pagina HTML per visualizzare una finestra di notifica all'utente. Nota che sto usando Visual Studio per modificare anche la pagina HTML e JavaScript.
Figura 3:avviso JavaScript nella pagina Hello World
Un modo in cui una pagina Web può recuperare informazioni da un utente è tramite moduli di pagina Web. Questi potrebbero non sembrare i tuoi tipici moduli cartacei, ma questa è la bellezza del web; non deve essere noioso e sciocco, può sembrare sbalorditivo e allettante (sebbene la configurazione necessaria per ottenere un aspetto sorprendente e allettante sia oltre il nostro scopo qui!).
Indipendentemente dall'aspetto, i moduli possono recuperare informazioni specifiche dall'utente che un browser può quindi inviare da qualche parte. Se abbiamo, ad esempio, un programma da qualche parte in grado di leggere l'input da una pagina Web, possiamo fare in modo che il browser invii il contenuto dei moduli a quel programma.
.
Programmazione basata sugli eventi
Un altro approccio consiste nell'utilizzare i dati del modulo combinati con JavaScript per fare in modo che la pagina Web stessa gestisca i dati dell'utente. Invece di visualizzare sempre Hello World in JavaScript, ad esempio, possiamo facilmente visualizzare l'input dell'utente in un modulo.
Figura 4:avviso JavaScript dinamico
Non preoccuparti troppo del codice qui, ma nota che a differenza della nostra applicazione console in cui il flusso del programma è generalmente riga per riga dall'inizio alla fine, in questa pagina Web stiamo usando ciò che è noto come event- programmazione guidata , facendo in modo che il codice risponda agli eventi che si verificano. Nell'esempio sopra, l'evento onblur
accade quando l'attenzione si sposta dalla casella di input e possiamo scrivere il codice per reagire a quell'evento e visualizzare l'avviso.
Indipendentemente da ciò, riconoscerai rapidamente un certo schema qui che attraversa i confini di piattaforme, linguaggi e framework. Il programma inizia presentando all'utente un'informazione, quindi l'utente in qualche modo invia istruzioni al programma. In un'applicazione console, questo scambio avviene tramite comandi come Console.WriteLine
e Console.ReadLine
. Sul web, questo scambio avviene presentando una pagina HTML e chiedendo all'utente di compilare un modulo.
Come programmatore, imparerai rapidamente che ciò che fai come programmatore è molto simile in tutti i linguaggi, piattaforme e strumenti. La sintassi può differire tra le lingue e potresti avere approcci diversi a come pensi in termini di flusso del programma, ma dietro tutto, il computer che comandi è lo stesso. È soggetto alla stessa logica indipendentemente dal linguaggio che usi per manipolarlo.
Una volta che te ne rendi conto, potresti avere la tua Matrix momento, in cui vedi oltre il codice e dentro la macchina e la logica dietro di essa e improvvisamente capisci completamente come comandare la macchina in qualsiasi modo tu voglia, usando qualsiasi linguaggio, qualsiasi piattaforma e qualsiasi strumento.
Prima di allora, però, c'è molto da imparare. Torniamo al nostro programma per un po' perché ci sono altre cose che voglio mostrarvi.
.
Classi, oggetti e metodi – Oh, mio Dio!
Inizieremo con la parte "Punto console" delle due righe.
Console.WriteLine("Hello World!");
La Console
part è un riferimento a una classe statica inclusa come parte dello spazio dei nomi di sistema e….
Oh, aspetta... Non ha ancora senso. Prima devo parlare un po' di classi e oggetti. Probabilmente dovrei parlare molto di classi e oggetti , ma per ora concentriamoci su una comprensione di base di cosa sia l'orientamento agli oggetti perché è prevalente in tutti i linguaggi di programmazione.
L'orientamento agli oggetti è un'idea di programmazione che dovresti costruire rappresentazioni programmatiche di oggetti della vita reale e quindi interagire con quegli oggetti come se fossero la cosa reale. Questa definizione non è molto accurata, ma per ora ci serve abbastanza bene.
In primo luogo, realizziamo questa interazione con gli oggetti attraverso due tipi di componenti chiamati proprietà e metodi . Le buone notizie? Ne stai già usando uno:il metodo. Nel nostro programma qui, il WriteLine
e ReadLine
i comandi sono i metodi. Le proprietà, che non tratteremo realmente in questo articolo, descrivono cos'è un oggetto, mentre i metodi descrivono cosa può fare un oggetto.
I metodi nell'orientamento agli oggetti sono associati agli oggetti o, in alcuni casi, alle classi. Impareremo molto di più sui metodi più avanti in questa serie, ma per ora pensa ai metodi come ad azioni che gli oggetti possono eseguire.
Inoltre, puoi pensare alla differenza tra classi e oggetti come la differenza tra una ricetta di torta e una torta, con la ricetta che è la classe e la torta che è l'oggetto. La classe definisce come si fa un oggetto, proprio come una ricetta definisce come si fa una torta.
È in qualche modo inutile avere una ricetta ma non ricavarne mai nulla, però. Una torta, invece, non può esistere senza una ricetta. In quanto tali, classi e oggetti, come ricette e dolci, esistono all'unisono.
Il punto in cui questa analogia diventa un po' più complessa è quando si tratta di quelle che chiamiamo classi statiche . Queste classi, o ricette, sono statiche perché esistono come cose reali. In effetti, non puoi nemmeno creare oggetti da loro; esistono solo come ricette e hanno solo metodi statici. Per complicare ulteriormente le cose, possiamo avere metodi statici su classi regolari! Confuso ancora? Bene, ricorda Douglas Adams:
Niente panico!
.
Nella nostra analogia con la torta, un metodo statico per una ricetta può essere qualcosa che non è correlato alla torta stessa ma anche non necessariamente alla ricetta. Ad esempio, puoi allegare alla ricetta un metodo statico chiamato PointMeToTheKitchen
che - sono sicuro che puoi indovinare - ti darà indicazioni per la cucina. La torta può essere cotta in qualsiasi cucina e la ricetta non dipende dall'essere trasformata in una torta in una cucina particolare.
Ad essere onesti, una situazione migliore, ma più complessa, sarebbe quella di avere una classe statica chiamata Baking
che gestisce tutte le cose necessarie relative alla cottura con una serie di metodi statici e che il PointMeToTheKitchen
il metodo probabilmente si adatterebbe meglio lì. In effetti, abbiamo lo stesso utilizzo con il nostro programma attuale.
Quindi, per ribadire:
* usi le classi per creare oggetti nello stesso modo in cui usi le ricette per creare torte.
* Gli oggetti hanno metodi e proprietà che definiscono rispettivamente cosa possono fare e cosa sono.
/>* Le classi possono avere metodi statici che esistono al di fuori di qualsiasi oggetto.
* Le classi statiche esistono al di fuori di tutto ed esistono da sole. Non puoi usarli per creare oggetti.
Trascorreremo molto più tempo con l'orientamento agli oggetti verso la fine della serie. Per ora, quando ripeto che la Console
parte delle nostre due righe è una classe statica, sai che è una classe che esiste indipendente da qualsiasi oggetto e che contiene anche metodi statici.
.
Astrazione dei dettagli
Guarda ancora le nostre linee:
Console.WriteLine("Hello World!"); Console.ReadLine();
Console
è una classe statica. Il suo scopo principale è darti accesso a ciò di cui hai bisogno per gestire la console proprio come un Baking
la classe verrebbe utilizzata per darti accesso agli strumenti di cottura.
Quando scriviamo un punto in C# e in molti linguaggi simili, stiamo chiamando il metodo, indicato dalle parentesi seguenti, o una proprietà. In effetti, stiamo dicendo:"Ehi, classe Console, fammi eseguire il tuo WriteLine
metodo, per favore”.
Nota:alcune lingue possono utilizzare notazioni diverse per questo. Ad esempio in C++, puoi usare ->
invece di un punto in certi contesti, e Perl 5 usa ->
coerentemente.
.
Dietro le quinte, la Console
la classe quindi, usando i parametri che forniamo (una stringa di testo letterale "Hello World!"), chiamerà la finestra della console corrente, farà del voodoo segreto e farà in modo che quella finestra della console stampi il testo che gli abbiamo inviato, letteralmente "Hello World! ”.
Nella riga successiva, chiamiamo nella stessa classe statica Console
di nuovo, e questa volta gli chiediamo di chiamare il suo ReadLine
metodo. In cambio, il programma indicherà alla console di attendere fino a quando non premiamo Enter
chiave prima di avanzare nel programma. Nel nostro caso, questo input completerà il programma e uscirà.
Possiamo entrare nei dettagli intricati di come funziona la console, ma a questo punto non è davvero rilevante. Ricorda, non siamo qui per imparare la programmazione della console più di quanto siamo qui per imparare C#; stiamo imparando concetti di programmazione. In quanto tale, lo chiamo "voodoo segreto" - anche se certamente non lo è - semplicemente perché è abbastanza avanzato per noi in questo contesto che potrebbe anche essere magico.
Quello che dovresti sapere, tuttavia, è che dietro le quinte, questi due semplici comandi eseguono effettivamente un numero enorme di compiti. Ad esempio, solo per interpretare i parametri che passi a WriteLine
metodo, il computer deve assegnare una determinata posizione di memoria alla stringa, caricare quei caratteri in quella stringa e indirizzare l'esecuzione del programma corrente a quella particolare posizione di memoria.
La CPU deve quindi leggere tutti quei bit di memoria, capire in quale contesto è in esecuzione, chiamare il sistema operativo (che, a sua volta, dovrà chiamare l'hardware specifico che hai) per attivare o disattivare i segnali che trasforma ogni pixel sullo schermo al rispettivo valore di colore. E questa piccola escursione non è nemmeno una rappresentazione completamente accurata o completa di tutto ciò che accade.
Tutte queste cose accadono perché hai scritto alcuni caratteri in Visual Studio e hai premuto un pulsante. Questa sbirciatina dietro le quinte illustra un altro principio molto importante nella programmazione chiamato astrazione . In breve, vogliamo nascondere i dettagli intricati di un'operazione e interagire con essa attraverso un metodo facile da usare. Per inviare il contenuto alla console, nascondiamo tutti i dettagli essenziali in un metodo chiamato WriteLine
.
Due vantaggi principali dell'astrazione sono che possiamo scrivere molto meno codice e che, non dovendo ripetere lo stesso codice ogni volta per ottenere gli stessi risultati, scriviamo anche codice migliore. Dietro le quinte, i risultati che otteniamo con il nostro semplice WriteLine
e ReadLine
il codice può richiedere centinaia di righe di codice. Dover scrivere tutto quel codice aumenta notevolmente le possibilità di commettere errori.
Per essere precisi, nel nostro esempio qui, è il team .NET di Microsoft che nasconde i dettagli per noi. In cambio, ci danno un'interfaccia molto semplificata con la quale possiamo programmare le nostre applicazioni. Mescola un po' le parole in quella frase e potresti persino chiamarla un'interfaccia di programmazione dell'applicazione o API.
Anche altri framework hanno API. Ad esempio, jQuery è un'API che astrae molti dettagli essenziali su come JavaScript interagisce con il contenuto in una pagina Web, come animazioni, convalide di moduli, manipolazione dei contenuti e così via. OpenGL è un'API che astrae l'interazione con l'hardware grafico.
Ci sono letteralmente migliaia di API che ti danno un modo per svolgere attività complicate. Atlantic.NET dispone anche di un'API per la gestione dei tuoi server cloud, in modo che una volta acquisita familiarità con la programmazione, puoi creare programmi che avviano, elencano, creano o terminano le istanze nel tuo account Atlantic.NET.
Nota:le API di Atlantic.NET richiedono l'utilizzo di qualcosa chiamato interfaccia RESTful, che va un po' oltre lo scopo di questi articoli introduttivi.
.
Il tuo primo riepilogo del programma
Hai avuto molto da imparare in questo articolo, ma ora è il momento di fare una pausa. Abbiamo discusso in modo approfondito come funzionano l'input e l'output e abbiamo fornito un'introduzione alla programmazione orientata agli oggetti. Hai anche imparato l'importanza dell'astrazione e come ci aiuta a evitare errori e a semplificare la scrittura del codice. Hai visto come le pagine Web e le applicazioni della console utilizzano approcci diversi ma simili per input e output e hai avuto almeno una rapida occhiata a un approccio di programmazione completamente diverso chiamato programmazione guidata dagli eventi.
Nel prossimo articolo, espanderemo il nostro programma introducendo variabili e tipi di dati e inizierai a costruire un gioco di ipotesi molto semplice utilizzando questi concetti insieme a ciò che hai già imparato.
Serie di istruzioni
Questa è la parte 2 di una serie di 5 parti per Introduzione alla programmazione
- Introduzione alla programmazione:per iniziare
- Introduzione alla programmazione:il tuo primo programma
- Introduzione alla programmazione:variabili, tipi e manipolazione dei dati
- Introduzione alla programmazione:controllo del flusso
- Introduzione alla programmazione:programmazione orientata agli oggetti
.