Lezioni classi quarte – Esempi di programmi Visual C#

Posted on

Lezioni classi quarte – Esempi di programmi Visual C#

Ultimo Aggiornamento: 21/07/2023.

ARGOMENTI DELLA PAGINA: Classi ed Oggetti, Eventi, Esercizi, Ereditarietà, Polmorfismo, Gestione Multiform, Controlli Utente, Liste a Puntatori, La Ricorsione I File


CLASSI ED OGGETTI

Abbiamo spiegato a lezione il paradigma OOP (Object Oriented Programming). Abbiamo definito i concetti di oggetto e di classe, Precisamente le classi raggruppano le caratteristiche (attributi) ed i modi di “funzionamento” (metodi) comuni agli oggetti, mentre con il termine istanza abbiamo definito un particolare oggetto della classe. Ad esempio nome, cognome, data di nascita, ecc. sono le caratteristiche comuni a tutte le persone (attributi); “Mario”, “Rossi”, “22/03/1982” è una particolare istanza, ossia un determinato oggetto. Analogamente per determinare l’età di una persona eseguiamo il calcolo ANNO CORRENTE – ANNO DI NASCITA. Se applichiamo questo calcolo a “Mario Rossi” e l’anno corrente è 2014 otteniamo: 2014 – 1982 = 32. Mario Rossi ha quindi 32 anni. Questa regola (“funzionamento” ETA’ = ANNO CORRENTE – ANNO DI NASCITA) comune a tutti le istanze di cui si vuole determinate l’età viene detto metodo. I metodi assomigliano molto ai sottoprogrammi che abbiamo studiato l’anno scorso ma il loro “funzionamento” è legato alle istanze. Come esempio vediamo il seguente programma: Frazioni in cui abbiamo definito la classe frazione con gli attributi numeratore e denominatore ed abbiamo definito i metodi per sommare, sottrarre, moltiplicare e dividere due frazioni.

 Esercizio proposto: Creare un programma che, definita la classe Data (gg/mm/aaaa), controlli la corretteza formale della data (attenzione all’anno bisestile e al mese di febbraio). La classe deve inoltre contenere un metodo che confronti due date e ne determini la maggiore restituendola in output.

Una possibile soluzione: ControllaDataClasse

Vediamo ora la keyword this. la keyword ci consente di utilizzare un metodo o una proprietà all’interno della classe ove sono definiti: in fase di esecuzione i metodi o le proprietà vengono attualizzati all’istanza corrente della classe.

class Esempio
{

public void Metodo1 ()
{
………..
this.Metodo2(); ⇒ in fase di esecuzione il metodo viene eseguito sull’istanza su cui è richiamato Metodo1
………
}

public void Metodo2()
{………….}

}

Come esempio vediamo come può essere modificato il metodo (e non solo) che effettua il confronto tra le due date del programma precedente: ControllaDataClasse1

Di seguito sono riportate le soluzioni dell’esercizio del conteggio dei punti di un game di una partita di tennis: GameTennis, GameTennisGiocatore

EVENTI

Sinora abbiamo utilizzato nel linguaggio VC#, il termine Evento per indicare che una parte (un programma/sottoprogramma) di codice viene eseguita al verificarsi di un particolare “accadimento” come ad esempio la pressione di un tasto (o di una combinazione di essi) o il click sul mouse o il tocco di un dito su un touch screen. Ora vediamo come possiamo usare un Evento definito da codice, per influire sull’esecuzione sequenziale delle istruzioni di un programma. Nel seguente semplice esempio utilizziamo un evento per controllare se, durante l’istanziamento di un oggetto, gli attributi vengono valorizzati correttamente: SempliceGestioneDiUnEvento

Una possibile soluzione del compito per la gestione del saldo di un CLIENTE di una Banca, tramite i versamenti ed i prelevamenti effettuati dal cliente ed il controllo di non sconfinamento (ossia evitare di prelevare più soldi di quanti siano disponibili sul Saldo): GestioneSaldo

EREDITARIETA’

Tra due classi logicamente correlate è possibile stabilire la relazione di ereditarietà. Siano persona ed impiegato due classi. Tali classi sono logicamente correlate in quanto un impiegato altro non è che una persona che ha un impiego. Definiti gli attributi e metodi per la classe persona (classe madre o superclasse) questi possono essere ‘ereditati’ dalla classe impiegati (classe derivata o sottoclasse) alla quale vanno aggiunti, ovviamente, gli attributi ed i metodi che caratterizzano gli impiegati. EreditarietaPersonaImpiegato

Avevamo visto in laboratorio l’esempio della pallina che si muove, di cui riporto di seguito l’esempio pilota PallinaMovente.

Esercizi

POLIMORFISMO

Il polimorfismo è la capacità di far funzionare in modo differente lo stesso programma o in base della classe che lo ha ereditato o in base ai dati di input che tratta. Nel primo caso si parla di OVERRIDE nel secondo di OVERLOAD. Di seguito riportiamo un semplice esempio di polimorfismo OVERLOAD: SommaSottrazioneOverload

Vediamo il primo esempio pilota di OVERRIDE: PersonaStudenteOverride In questo esempio è presente anche la gestione di più Form che scambiano dati provenienti da texbox.

Un esempio leggermente più complesso: GraficaEradietaretàPolimorfismo. Come esercizio modificare il programma aggiungendo la classe per il disegno di una piccola ellisse il cui asse maggiore sia il doppio dell’asse minore.

Vediamo un altro esercizio, leggermente più complesso: PallinaMovente2010 (come indica il nome, il programma è nella versione Visual C# 2010). Come esercizio modificare il programma aggiungendo, in modo analogo a come richiesto nell’esercizio precedente, la classe rettangolino, che si muove su, giù, dx e sx tramite i tasti “W”, “S”, “A”, “D” rispettivamente. La velocità delle due figure grafiche deve essere controllata in modo diffrente (tramite l’uso, ad es. anche dei tasti funzione “f11” ed “f12”).

GESTIONE MULTIFORM

Vediamo come si realizza un programma che deve prevedere l’utilizzo di più Form che si “richiamano” tra di loro e si trasferiscono dei dati. Ricordiamo che la Form altro non è che una classe e che quindi possiamo utilizzare tutti i concetti sulle classi ed oggetti appresi fino ad ora.

Cominciamo con il primo semplice esempio: GestioneMultiformSemplice.

Se vi è chiaro come si gestisce un programma con più form, vediamo ora il programma che gestisce le classi Persone ed Impiegati utilizzando più form: GestioneMultiformPersImp.

CONTROLLI UTENTE

Appunti: CONTROLLO UTENTE in Visual C# Esempio pilota: ControlloUtenteTextBoxNumerica. Altro semplice esempio VotiColore. Vediamo come può essere usato un oggetto di una classe all’interno di un controllo: Conversione24-12h nell’esempio il controllo trasforma l’orario dal formato 24h al formato 12h. Come esercizio aggiungere nel controllo la conversione inversa (dal formato 12h al formato 24h) aggiungendo il controllo TextBoxNumerica per evitare l’inserimento di dati non numerici.

LISTE A PUNTATORI

Appunti: Considerazioni ulteriori sulle classi. Esempio pilota:GestioneListaPuntatoriInserimentoInTesta, vediamo ulteriori appunti sulle liste: Appunti Liste e l’esempio pilota: GestioneListaPuntatoriInserimentoInCoda. Come esercizio provate a realizzare l’inserimento in una posizione intermedia e le cancellazioni in testa, coda e in una posizione intermedia di un elemento come spiegato negli appunti.

LA RICORSIONE

A lezione abbiamo definito la RICORSIONE come la capacità di un programma di richiamare se stesso (nel proprio corpo) per risolvere iterazioni. Abbiamo inoltre detto che il problema iterativo per poter essere risolto con la ricorsione deve avere due particolarità:

  1.  deve esistere almeno un caso base (almeno una condizione di uscita dalla ricorsione)
  2. il problema dopo un passo di ricorsione deve continuare ad essere ricorsivo

l’utilizzo della ricorsione (quando possibile) rende semplice la codifica poichè fa diminuire sensibilmente il numero di linee di codice da scrivere.

Il primo esempio che viene di seguito fornito è il calcolo del fattoriale di un numero. Nella pagina relativa alle lezioni del terzo anno, c’è il programma che calcola il fattoriale in modo iterativo.Esempio Pilota: CalcoloFattoriale Esempio Ricerca Binaria Ricorsiva: RicercaBinariaRicorsiva

Vediamo come possono essere gestite le liste a puntatori con la ricorsione. L’esempio pilota di seguito fornito, esegue l’inserimento in coda di nuovi elementi in una lista (a lezione abbiamo spiegato perchè l’inserimento in testa non è ricorsivo) e la visualizzazione degli elementi della lista a puntatori in una listbox sempre utilizzando la ricorsione. Esempio Pilota: GestioneListaPuntatoriRicorsiva

Vediamo un esempio di come vengono gestiti gli allberi binari. Esempio pilota: AlberoBinario1

new-40x40I FILE

I file permettono di memorizzare i dati in modo permanente sulla Memoria di Massa. I file possono essere considerarti come dei contenitori il cui contenuto sono dati organizzati in strutture detti Record. I file vengono gestiti da un modulo del S.O. (file system) che lavora in modo “trasparente” all’utilizzatore. In questa pagina consideriamo principalmente i File ad accesso sequenziale ed quelli ad accesso diretto. L’organizzazione sequenziale, già incontrata, ci consente di accedere ad un record partendo dall’inizio del file (dal primo record) scorrendo tutti i record in sequenza sino ad arrivare all’informazione cercata. I file ad accesso diretto ci permettono di accedere al record specificandone la posizione all’interno del file.

Esempi pilota:

Vediamo come esempio pilota la gestione di un file di testo (accesso sequenziale) GestioneFileDiTesto. File di testo ed Alberi Binari prova11

File ad accesso diretto FileAdAccessoDiretto1 Vediamo come possiamo gestire un File ad accesso diretto definendo il record con una classe FileAdAccessoDirettoConClassi

Appunti: I FILE

Massimo Stefanizzi
Author

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.