Dopo aver pubblicato il mio libro “Visual Basic 2019 – Guida alla programmazione” (ved. http://books.bell1.net) è tempo di dedicarmi a C# e in particolare alla prossima versione che sarà distribuita con Visual Studio 2022, presumibilmente verso fine 2021 o all’inizio del 2022.
Non so se sto delirando ma c’è talmente tanto materiale da sviscerare che ho quasi in mente l’idea di farne più libri, non uno solo, anche perché ho un limite di circa 700 pagine con Youcanprint.it e sono troppo poche per quello che ci voglio mettere dentro: tutte le informazioni “base”, argomenti avanzati, la gestione di fonti di dati e le strutture/algoritmi (tuple, record, stack, queue ecc.). Ho idea che serviranno almeno due o tre libri per tutto, quindi ci vorrà un po’ di tempo.
Allora ho pensato di pubblicare qui qualche “pezzo”, qualche “tips & tricks”, tratti dai testi che man mano termino di scrivere. Non sarà ovviamente una pubblicazione completa: per averla completa dovrete acquistare i libri, ma saranno comunque spunti su cui studiare e approfondire.
Dato che ho appena terminato il 1° capitolo introduttivo su Visual Studio 2022, ecco qui qualche assaggio.
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
Gli ambienti di sviluppo integrati (IDE) sono una categoria molto particolare di programmi applicativi: sono programmi che servono a costruire altri programmi. Tra i tanti ambienti di sviluppo esistenti, uno ha avuto forse più successo di tutti: Visual Studio, prodotto da Microsoft e ormai giunto alla versione 2022. Internamente è classificato come versione “17”.
NOTA – L’acronimo IDE significa Integrated Development Environment, cioè ambiente di sviluppo integrato.
———-
Ciclo di vita di qualsiasi tipo di applicazione:
· progettazione e creazione di prototipi;
· creazione dell’interfaccia utente, anche con i designer di interfacce grafiche e con gli emulatori di dispositivi mobili;
· scrittura del codice con l’editor di codice;
· gestione e interazione con le fonti di dati: progettazione, modellazione, visione/modifica;
· gestione della documentazione;
· test (per mezzo degli unit test);
· debug, con molti strumenti di analisi del codice e del programma in esecuzione;
· creazione del pacchetto di installazione;
· rilascio e distribuzione dell’applicazione.
———-
Nelle versioni più recenti la parità delle funzionalità dei due linguaggi si è persa, dato che mentre C# ha continuato a essere esteso con nuove funzionalità (spesso prese anche dal paradigma funzionale adottato dal linguaggio F#), Visual Basic è rimasto al palo, salvo pochi aggiustamenti che sono serviti per correggere alcuni errori. La motivazione data dal team di sviluppo sul mancato sviluppo di Visual Basic è la necessità di dare stabilità al linguaggio.
NOTA – La nostra opinione è che portare ancora avanti il linguaggio Visual Basic è ormai economicamente insostenibile per Microsoft, dato che commercialmente si tratta di un “doppione” di C# (facevano le stesse cose). Ciò non toglie che Visual Basic resterà nel mondo reale ancora per decenni come è successo per VB 6.0, dato che esistono ormai decine o centinaia di migliaia di applicazioni scritte in Visual Basic. La conversione a C# prima o poi avverrà, ma molto gradualmente e solo quando sarà necessario estendere il campo delle applicazioni ad altre piattaforme o a funzionalità che non sono disponibili in Visual Basic.
———-
Alcuni linguaggi, come C#, aderiscono a più di un paradigma di programmazione. Se prendiamo qualsiasi programma C#, scopriremo che aderisce all’importantissimo paradigma della programmazione orientata agli oggetti, perché in C# “tutto” è un oggetto, perfino l’utente. In C# troviamo anche il paradigma della programmazione orientata agli eventi, in particolare per la definizione dei comportamenti delle interfacce grafiche, e possiamo utilizzare anche le tecniche della programmazione strutturata. Naturalmente possiamo facilmente individuare anche i paradigmi della programmazione imperativa (le istruzioni sono “comandi”), della programmazione dichiarativa (per esempio nell’ambito delle interfacce grafiche definite nelle applicazioni WPF, con il codice XAML) e della programmazione funzionale (istruzioni della libreria LINQ e altre tecniche funzionali spesso derivate da F#).
———-
Visto che la programmazione orientata agli oggetti, spesso chiamata con l’acronimo OOP che significa Object Oriented Programming, è così importante in C# e negli altri linguaggi .NET, iniziamo ad approfondire i tre concetti fondamentali che costituiscono i pilastri su cui si basa questo paradigma: ereditarietà, incapsulamento e polimorfismo.
È programmazione orientata agli oggetti vera e propria se sono applicati tutti e tre questi concetti, altrimenti si tratta tutt’al più di programmazione basata sugli oggetti.
———-
Per denominare in modo sintetico le classi derivate, in tutto il loro percorso, si può usare una notazione con il punto (.), come nel seguente esempio:
RegnoAnimale.Cordati.Mammiferi.Felini.Gatto
NOTA – Abbiamo introdotto la notazione del punto (.). Il punto tra due elementi (due classi o una classe e il suo metodo o attributo) significa semplicemente che l’elemento posto a destra del punto “appartiene” all’elemento posto a sinistra.
La stessa cosa si può fare quando ci si deve riferire a un metodo di una classe. Per esempio, per indicare il colore di un gatto possiamo riferirci alla corrispondente proprietà:
Gatto.Colore = “Nero”
———-
L’incapsulamento rende una classe molto simile a una “scatola nera”: l’interazione con la scatola nera (classe) è limitata ai metodi che possono essere richiamati. Non è possibile in alcun modo modificare lo stato interno della scatola nera se non in modo fortemente controllato attraverso i metodi.
In questo scenario c’è un vantaggio collaterale: se dall’esterno non è possibile vedere alcuna modifica dei “punti di accesso” (metodi) alla scatola nera, possiamo modificare anche pesantemente il codice interno alla classe senza dover cambiare anche di una sola riga di codice in tutto il resto dell’applicazione. Tecnicamente, in questo caso si parla di alto grado di isolamento tra l’interno e l’esterno della classe.
———-
Per polimorfismo si intende la possibilità di interagire con due o più classi, dotate di un insieme di metodi e di proprietà comuni, senza dover identificare esattamente il tipo di oggetto con il quale si sta lavorando.
———-
Esempio CS_01_02
———-
Esempio CS_01_03
———-
Volete fare qualcosa di ancora più veloce, cioè provare una istruzione o più istruzioni “al volo”, senza creare appositamente un programma? Allora dovete provare la finestra “C# Interactive”: cliccate sul menu View > Other Windows > C# Interactive.
Si aprirà una finestra come quella che potete vedere nella Figura 1.2:
Figura 1.2 – La finestra C# Interactive.