Press "Enter" to skip to content

0 Absolute Beginners – Un tour di Visual Studio 2015

Lezioni informali di programmazione C# per principianti.

Livello: principianti
Prerequisiti: nessuno (salvo la voglia di sapere)

Introduzione

Se davvero non avete mai scritto un programma, ma siete curiosi e volete provarci, questa è la serie di articoli che può darvi una mano a iniziare, associandola con un buon libro dove trovare le cose scritte in modo “serio” e completo. Un paio di titoli possono essere: C# For Dummies, come guida basica, C# Insegnato a mia Nonna che con un titolo un po’ divertito è un ottimo punto di partenza, oppure C# 5 Guida completa per lo sviluppatore, un po’ più approfondito e completo. Per gli anglofili come me, consiglio Pro C# 5.0 and the .NET 4.5 Framework approfondito e completo, ed a seguire quando vorrete sviluppare programmi da professionista utilizzando le tecniche più moderne, Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation (Developer Reference) di Charles Petzold, che contiene tutto lo scibile su WPF, e Pro WPF 4.5 in C#: Windows Presentation Foundation in .NET 4.5 di Matthew Mc Donald, che è uno dei miei autori preferiti per la programmazione perché scrive in modo chiaro, parla anche di concetti non solo per esempi e mostra davvero come ottenere il meglio dal framework .Net usando C#.

Dopo avervi dato qualche riferimento, passiamo a parlare di Visual Studio 2015, che potete scaricare gratuitamente qui nella versione Community è stato rilasciato pochi giorni fa mentre scrivo questo articolo, quindi lo userò per gli esempi. Questo articolo però non vuole fare un Tour per farvi capire quali sono le bellezze del prodotto, per quello vi consiglio di leggere Benvenuti in Visual Studio 2015 su MSDN, che di certo vi spiegherà ogni cosa in modo ottimo.

Se non vi racconto le funzionalità di base, allora cosa vi racconto? Essendo un articolo dedicato ai principianti, o agli Absolute Beginners, vi racconto un po’ di cose che vi aiutino a capire quali sono i fondamentali per iniziare ad usarlo. Prima di leggere questo articolo vi consiglio di guardare il video introduttivo su Channel 9 che vi illustra come Scaricare, installare e far partire Visual Studio 2015.

vs_ide_001[8]

I fondamentali

L’immagine qui sopra ci mostra la pagina iniziale di Visual Studio 2015, la colonna a sinistra contiene gli shortcut per il lavoro e i progetti più recenti, la parte centrale contiene le news ed i link utili di Microsoft per imparare le cose fondamentali e trovare esempi e suggerimenti. La parte a Destra contiene il Solution Explorer, al momento vuoto perché non abbiamo ancora creato o aperto una Solution.

Considerato che l’articolo è destinato agli absolute beginners, Ho già introdotto una cosa nuova la Solution (soluzione) che è la pietra angolare dei progetti C# creati con Visual Studio, vediamo di capire che cos’è.

Una applicazione C# sviluppata con Visual Studio è composta da Uno o più Project (progetto), ogni Project da origine a uno dei seguenti prodotti:

  • Un applicazione eseguibile  (il classico file .exe) [Se volete programmare e non avete già disattivato l’opzione del file system di Windows che non visualizza le estensioni dei file fatelo adesso oppure vi procurerete dei mal di testa]
  • Una libreria di classi o di componenti (i file di tipo .dll)
  • Un sito web (formato da pagine dinamiche come gli .aspx, .asmx ecc.)

Una Solution contiene una serie di Project logicamente collegati per la costruzione di una applicazione.

Una applicazione reale non sarà mai formata da un singolo progetto, a meno che non sia una applicazione davvero minimale, che utilizza solo le librerie del Framework .net. Una applicazione professionale (e con professionale intendo sviluppata in modo professionale, non sviluppata per la vendita) solitamente è composta da: Un progetto .exe che sarà l’applicazione, e una o più librerie .dll che conterranno gli “strati” che compongono le varie aree specifiche di gestione di una applicazione. Facciamo un esempio pratico:

Voglio creare una applicazione per la gestione del magazzino per un hobbista. Mia nipote ha l’hobby di creare oggetti artigianali, che spaziano dai gioielli in pietre dure, alle bomboniere origami, passando per i lampadari artigianali con i colapasta metallici o altri oggetti non convenzionali usati come contenitori per le lampadine. Poter gestire un minimo di magazzino in cui memorizzare gli oggetti che compera in internet per questo hobby ed i l loro prezzo in modo da sapere quanto le costa un manufatto quando volesse venderlo al mercatino del paese potrebbe esserle utile.

Una applicazione simile conterrà le seguenti cose:

  • Un database (sql server o mysql) dove saranno definite tutte le tabelle contenenti i dati
  • Una interfaccia utente per l’inserimento dei dati (Backend) con svariate finestre ove inserire gli oggetti in magazzino e aggiornarne le quantità ed i prezzi.

Già per creare una applicazione così lineare, avremo bisogno di 4 progetti ovvero:

  1. Eseguibile della User Interface
  2. Libreria della Business Logic per interrogare il database e mandare i dati per aggiornare il database.
  3. Libreria Dati per connetterci a Sql Server
  4. Libreria Dati per connetterci a MySql

Ho messo due diverse librerie dati per creare una applicazione non banale, ovviamente possiamo limitarci ad un solo tipo di database, ma comunque avremo 3 progetti, un .exe, e due .dll.

Possiamo mettere tutto in un singolo progetto? Si.

Perché mai non farlo e romperci le scatole a dividere tutto in tre progetti?

Perché se domani mattina decidessimo che vogliamo anche fare un Sito Web che ci permetta di verificare cosa abbiamo in magazzino quando siamo a fare il mercatino ed un possibile cliente ci chiede qualcosa su misura, separando subito la parte di gestione dati e regole potremo riutilizzare le due .dll anche creando un nuovo progetto Website che si collegherà al database per fornire informazioni e magari fotografie relative ai prodotti che vi inseriremo.

Invece che un sito web, potrebbe anche essere una App per il cellulare, che si connette alla virtual machine Azure dove abbiamo messo il Backend ed il database che abbiamo deciso di creare sul cloud perché anche le micro attività artigianali devono essere pronte alla globalizzazione.

Da qui deriviamo la cosa credo più importante da capire per chi aspira a diventare un programmatore, professionista o hobbista non importa.

Prima di iniziare a scrivere codice, apriamo un notepad e scriviamo, in italiano, una descrizione di quello che vogliamo realizzare e di tutte le caratteristiche che vogliamo dargli. Una volta che lo abbiamo fatto, suddividiamolo logicamente in aree. Le tre principali sono sicuramente:

  • Accesso ai Dati,
  • Funzioni di gestione della logica applicativa,
  • Interfaccia utente.

Ma per una applicazione non banale, potrebbe essere che sia opportuno suddividere con maggiori dettagli quello che compone il nostro programma.

C’è una regola base in merito?

  • E’ qualcosa che posso riutilizzare? SI, lo metto in una libreria.
  • Fa parte specificamente della gestione dell’interfaccia utente? SI, lo metto nell’eseguibile.
  • Posso aver bisogno di sostituirlo con qualcosa di diverso? (ad esempio usare SQL Server o MySql) SI, lo metto in una libreria e faccio in modo che l’exe non lo usi direttamente ma attraverso una libreria di oggetti Business.

Esiste ovviamente anche l’estremo opposto, pensateci bene prima di iniziare a fare una applicazione:

  • Voglio creare un programmino che mi permetta di leggere e scrivere un file di testo?
  • Se ho iniziato a creare una struttura con 3 librerie forse mi sto complicando troppo la vita.
  • L’ UFFICIO COMPLICAZIONE AFFARI SEMPLICI è aperto 24/7 e con il 100% di disponibilità. quindi è bene pensare a suddividere una applicazione in blocchi logici, perché nel tempo è manutenibile, ma attenzione a non complicarci troppo la vita oppure otterremo l’effetto contrario.

Com’è fatta una Solution

Creiamo il nostro primo, fatidico progetto, HelloWorld per iniziare a capire come funziona Visual Studio: Quindi sulla nostra pagina iniziale di Visual Studio:

vs_ide_002[8]

vs_ide_002_2[7]

vs_ide_002_3[8]

Premiamo il New Project lo trovate come potete notare non solo sui link rapidi della Start Page ma anche sulla toolbar e sul menu File di Visual Studio.

vs_ide_03[8]

Ci apparirà la finestra qui sopra, che ci permette di creare un nuovo progetto. Ho segnato i 3 punti fondamentali:

  1. Sulla treeview a sinistra, abbiamo una serie di “template” di Progetto (Modello o Stampino è la traduzione italiana) ciascun template crea già per noi un ossatura contenente tutto quello che serve per generare l’applicazione che vogliamo costruire. Ci sono vari template in base al linguaggio in cui vogliamo scrivere, ma soprattutto in base a quello che vogliamo creare. L’immagine che vedete è quella di Visual Studio 2015 Express Desktop Applications, ma esistono ovviamente la versione Windows 10 applications e Web applications che contengono i template di progetto per i vari tipi di applicazione. Se installate invece la versione Community o una delle versioni Professional, troverete i template per tutti i tipi di applicazioni.
  2. Nella finestra centrale, in base alla selezione sulla tree, vedrete i progetti del tipo selezionato, in questo caso, abbiamo i tipi di progetti fondamentali per le applicazioni desktop ovvero:
    • le applicazioni Windows Classiche (Windows Forms) quelle con interfaccia Windows che usano la GDI+ ovvero la grafica è di tipo Bitmap, e forniscono un interfaccia utente in stile Windows precedente a Windows Vista, sono ancora le più utilizzate nelle applicazioni gestionali.
    • Le Applicazioni WPF (Windows Presentation Foundation) che hanno visualmente lo stesso aspetto, ma sono costruite in grafica vettoriale, pertanto oltre alle finestre come siamo abituati a vedere, possiedono tutta una serie di funzionalità che permettono di costruire grafica 2D, 3D, ed interfacce più moderne delle vecchie finestre. WPF è la base per tutte le applicazioni Windows 10 pertanto comprenderlo e usarlo per creare applicazioni familiari a chi non ha mai lavorato con la tecnica “mobile” ci servirà per poter passare a Windows 10 con il minor “danno” possibile.
    • Le applicazioni Console sono le più antiche, quelle che i Born Digital difficilmente vedono se non scelgono di fare gli IT Professional, le applicazioni con interfaccia a carattere. Salvo utility specifiche è difficile che al giorno d’oggi siano usate, ma sfortunatamente, sono le applicazioni usualmente utilizzate dai libri per principianti per insegnare le basi della programmazione. Il nostro Hello World sarà una applicazione Console che ci permetterà di spiegare alcune cose fondamentali, poi, ci libereremo della Console e utilizzeremo subito un interfaccia grafica.
  3. Nella parte bassa dell’interfaccia, abbiamo 3 caselle, Name contiene il nome del nuovo progetto, Location la cartella in cui saranno create le sottocartelle che conterranno tale progetto, potete lasciarli sotto la vostra cartella documenti oppure se intendete lavorare su molti progetti, potreste creare una sottocartella sul disco C: o su una partizione apposita per evitare che i nomi delle cartelle di progetto siano troppo lunghi. La cartella Solution Name ci permette di indicare come chiamare la soluzione. Nel caso del nostro Hello World, per osservare quello che il sistema genererà su disco, cambiamo il nome della soluzione in Hello.

Creiamo l’ HelloWorld project come applicazione console, Visual studio ci costruirà l’ossatura di base necessaria a cominciare a scrivere il codice dell’applicazione.

vs_ide_04[8]

Cosa ci troviamo davanti agli occhi:

  1. L’editor di testo di visual studio, chiamarlo editor è un po’ sminuirlo, considerato che la differenza fra l’editor di Visual Studio e un Notepad è più o meno la stessa che passa fra una roncola e una mietitrebbia, così come con la roncola posso falciare un campo di grano, la mietitrebbia non solo fa il lavoro che io ci impiegherei una giornata a fare solo per tagliare il grano in pochi minuti, ma mi restituisce il grano trebbiato da una parte e le balle di paglia dall’altra. Allo stesso modo, L’editor di visual studio è disegnato per fare in modo di aiutarmi a scrivere codice rapidamente, in modo corretto e con il minore sforzo possibile grazie al motore di compilazione, all’ intellisense e al sistema di gestione delle estensioni che si trovano sotto ad esso dentro a Visual Studio.
  2. Il nostro intero programma, in questo caso, è composto da una singola classe, Program.cs possiamo vedere la classe nell’albero del solution explorer, e il suo contenuto modificabile nell’editor.
  3. Il Solution Explorer è lo strumento principale che utilizzeremo per generare i mattoncini che comporranno i nostri programmi, quelle che si chiamano classi e sono contenute in file di testo, unite ad altri file che conterranno risorse, immagini ed altro. Utilizzeremo il Solution explorer anche per aggiungere ulteriori progetti alla soluzione come vedremo nelle lezioni più avanzate.

Possiamo notare come Visual Studio abbia creato una nuova Solution, Hello, al cui interno è un progetto, HelloWorld, ma oltre al file contenente la classe Program.cs, possiamo vedere che vi sono degli altri oggetti nel progetto, c’è un oggetto Properties, e un oggetto References, ed un oggetto App.config (che al momento possiamo trascurare) ne parleremo fra poco, ora invece curiosiamo nelle cartelle su disco.

Se apriamo la cartella dove abbiamo indicato a Visual Studio di creare il progetto vediamo quel che troveremo:

helloworld_folder_01[8]

Possiamo notare che è stata creata una struttura di cartelle, la prima cartella Hello, contiene la Solution (Hello.sln) e una sottocartella HelloWorld che è la cartella di progetto che contiene il codice del nostro programma eseguibile.

helloworld_folder_02[8]

All’ interno della cartella HelloWorld troviamo il file di progetto (HelloWorld.csproj) il file Program.cs che contiene il codice, il file App.config che in questo contesto non ci interessa e potremmo cancellare e tre cartelle, Properties, bin, obj. Presumo abbiate notato che le cartelle bin e obj non si vedono nel solution explorer di visual studio. E’ perché queste due cartelle non sono parte del progetto, ma sono semplicemente le cartelle di output del compilatore, dove vengono prodotti i file compilati in linguaggio macchina ed eseguibili dal computer.

In realtà Visual Studio mi permette di vederli usando gli appropriati comandi:

vs_solution_dir_commands[8]

Tre comandi utili nel solution explorer:

  1. Il comando che attiva/disattiva la visualizzazione dei file che sono nelle cartelle di progetto ma non sono inclusi a progetto.
  2. Il comando Collassa Tutto, che richiude tutti i livelli della treeview della soluzione.
  3. Il comando reload, che aggiorna la tree andando a rileggere la cartella nel caso noi aggiungiamo dei file sulla cartella di progetto dall’esterno di visual studio mentre è aperto.

Altre due funzioni importanti in visual studio:

vs_environmentsearch_01[8]

Ricerca nell’ambiente di Visual Studio, permette di cercare per parole chiave le opzioni di menu e i contenuti del sistema di sviluppo, in questo caso, digitando save, troviamo 4 opzioni per salvare il file corrente o tutti i files e il salvataggio del layout delle finestre di Visual studio. Inoltre tre opzioni di configurazione per i salvataggi.

vs_solution_filter[8]

Il filtro della soluzione, permette di inserire una parola chiave e filtrare tutto il contenuto della soluzione per ottenere solo i file che contengono quanto indicato. Estremamente utile in soluzioni con decine, o centinaia di classi.

Prima di passare alla prossima lezione, e iniziare a studiare C# ci sono ancora 2 cose nella nostra soluzione che non abbiamo spiegato, ovvero le Properties e le References e quello che c’è dentro.

vs_properties_references[8]

  1. Abbiamo visto che il nostro template di progetto, ha creato nel nostro HelloWorld, una cartella Properties che contiene al suo interno un file di codice C#, Le properties sono un modo furbo e molto rapido per accedere a tutte quelle che sono le proprietà configurabili del nostro progetto, le vedremo in dettaglio nella lezione in cui scriveremo davvero l’HelloWorld e nella successiva dove scriveremo un HelloWorld in WPF. Queste proprietà stabiliscono cosa viene prodotto dal compilatore e come oltre a dare ai nostri prodotti una descrizione professionale e permetterci di firmarli digitalmente.
  2. Il nodo References della Treeview di progetto invece non è una cartella fisica sul disco, in quanto è un “contenitore virtuale”, cosa contiene questo contenitore? Il suo nome dovrebbe aiutarci. Se ricordate quello che vi ho detto in precedenza, un programma non è mai composto da un singolo file eseguibile, perché come vedremo nella prossima lezione, anche solo per creare un Hello World, utilizzeremo le librerie del Framework .net nel nostro programma. Il nodo References ci permette di dichiarare al compilatore quali sono le librerie di sistema, librerie di terze parti, o librerie sviluppate da noi stessi, che utilizzeremo all’interno del programma per interagire con il sistema e l’utente. Anche in un programma vuoto come quello appena creato, il template usato per generarlo ci aggancia ad una serie di librerie che ci permettono di non dover scrivere tutto da zero per ogni programma. Vediamo le principali:
    • Microsoft.CSharp – è la libreria che definisce il C#, senza di essa, o di una equivalente non saremo neppure in grado di scrivere le nostre classi in C#-
    • System… (tutte) sono una serie di librerie di base che fanno parte del Framework .net, che forniscono al programmatore tutti i servizi di base per lo sviluppo, dalle classi per accedere alle risorse del computer alle classi per leggere dati da database, alle classi per comunicare con il mondo usando il protocollo http, alle classi per leggere e scrivere dati su file in formato XML.

Se clicchiamo sul nodo References con il tasto destro, potremo aggiungere il reference ad una libreria alla nostra applicazione, sia questa parte del framework, sviluppata da noi o sviluppata da terze parti. Referenziare una libreria ci permette di utilizzare tutte le classi pubbliche al suo interno nel nostro programma. Vedremo come comprendere i come ed i perché nelle prossime lezioni.

Direi che come prima lezione abbiamo provveduto a confondervi a sufficienza, pertanto buona lettura e alla prossima lezione.