| Indice
Premessa
Prefazione
Introduzione
Parte I Programmazione orientata agli oggetti
1 Panoramica generale
Programmazione procedurale
Un primo passo verso la programmazione orientata agli oggetti
Programmazione orientata agli oggetti
Esempio di una soluzione ad oggetti di un problema
Aspetti principali della programmazione orientata agli oggetti
Incapsulamento (astrazione e interfaccia pubblica)
Ereditarieta'
Polimorfismo
2 Tipi di dati definiti dal programmatore
Classi che definiscono "tipi"
Tipi definiti dal programmatore (UDT: User Defined Type)
Definizione di una classe
Campi membro
Funzioni membro
Classi e oggetti
"Campo di azione" di classe e "ciclo di vita" di un oggetto
Membri statici e non statici (d'istanza)
Livello di accesso ai membri di una classe
Modificatori del livello di accesso (o protezione)
Interfaccia pubblica e implementazione di una classe
Stabilire il livello di accesso dell'intera classe
Metodi
Metodi di accesso
Riferimento all'oggetto: parola chiave "this"
"Overloading" di metodi
"Risoluzione" di un metodo sovraccaricato
Costruttori
Codice ammissibile all'interno di un costruttore
Overloading di costruttori
Inizializzazione di costruttore
Costruttore di default
Il tipo "struttura"
Tipi struttura come semplici aggregati
Tipi struttura come oggetti
3 Un programma orientato agli oggetti: parte I
Rappresentazione del dominio del problema
Definizione dei requisiti
Definizione dei tipi di dati
Classe "Ordine"
Funzioni membro della classe "Ordine"
Costruttori della classe "Ordine"
Gestione della fattura
Metodi di gestione dell'elenco ordini
Realizzazione di un metodo interno di ricerca degli ordini
Metodo di calcolo dell'importo totale della fattura
Visualizzazione della fattura
Metodo Main() dell'applicazione
4 Un programma orientato agli oggetti: parte II
Classe "Fattura"
Scheletro della classe "Fattura"
Metodi di accesso ai dati generali
Metodi di accesso, di inserimento e di rimozione degli ordini
Accesso al numero degli ordini memorizzati nell'elenco
Costruttori della classe "Fattura"
Codice consumer dell'applicazione
Implementazione del metodo Visualizza()
Implementazione del metodo Main()
5 "Proprieta'" e "indicizzatori"
Migliorare l'accesso agli attributi della classe
"Proprieta'" (properties)
Definizione e uso dei una proprieta'
"set accessor" e "get accessor"
Codice ammissibile negli accessor di una proprieta'
Proprieta' e variabili a confronto
Linee guida nella scelta dei nomi delle proprieta'
Overloading di proprieta'
Definizione di proprieta' nelle classi "Fattura" e "Ordine"
Classe "Ordine"
Classe "Fattura"
Indicizzatori (indexers)
Definizione e uso degli indicizzatori
"set accessor" e "get accessor" negli indicizzatori
Tipo degli indici e codice ammissibile negli accessor di un indicizzatore
Definizione di indicizzatori nella classe "Fattura"
Overloading di indicizzatori
Terza versione del programma "fatturazione"
Implementazione del metodo Visualizza ()
Implementazione del metodo Main()
6 Ereditarieta'
"Tipi" e "tipi derivati"
Esempio concreto di ereditarieta'
Ereditarieta': "classi base" e "classi derivate"
Membri derivati e nuovi membri di una classe derivata
Rendere accessibili i membri definiti nella classe base
Invocare i costruttori della classe base
Invocazione implicita del costruttore di default della classe base
Ridefinire i membri della classe base
Definire un campo membro con lo stesso nome di un campo ereditato
Definire funzioni membro con lo stesso nome di funzioni ereditate
Sovraccaricare il metodo ereditato
Conclusioni
Polimorfismo
Premessa al polimorfismo
relazione "e' un" applicata agli oggetti
Funzioni membro virtuali e "invocazione ritardata"
Definizione e ridefinizione (override) di una funzione membro virtuale
"Invocazione ritardata" (collegamento ritardato) di una funzione
Invocare la funzione virtuale della classe base
Ridefinizione di funzioni virtuali sovraccaricate
7 Polimorfismo
Funzioni virtuali e funzioni non virtuali a confronto
Polimorfismo in .NET
Classe "Object"
Conversioni implicite ed esplicite
Uso delle conversioni esplicite
Conoscere il tipo effettivo di un oggetto: operatore "is"
Operatore di conversione esplicita "as"
Ottenere il tipo di un oggetto: metodo "GetType()"
Gerarchie di classi e classi generiche
Analisi del dominio del problema
Introduzione nella gerarchia di una classe generica o astratta
Definizione della classe Dipendente
Definizione delle classi "Operato" e "Impiegato"
Uso della nuova gerarchia di classi
Definizione formale di classi astratte e metodi di astratti
Definizione di funzioni membro astratte
Conclusioni
8 Interfacce
Introduzione alle interfacce
Che cos'e' un'interfaccia
Implementazione di un'interfaccia
Implementazione di piu' interfacce
Classi che implementano la stessa interfaccia
Uso delle interfacce
Uso dell'interfaccia "IDictionary"
Implementazione di interfacce
Oggetti che forniscono una rappresentazione testuale formattata
Implementare "IFormattable" nella classe "Dipendente"
Definizione di interfacce
definizione dell'interfaccia "IDipendente"
Derivazione di classe e implementazione di interfaccia a confronto
Conclusioni
Interfacce, ereditarieta' e polimorfismo
Ereditarieta' applicata alle interfacce
Implementazione di interfacce derivate
Interfacce ereditate dalla classe base
Reimplementazione di un'interfaccia in una classe derivata
Implementazione di interfacce mediante funzioni virtuali
Operatori di cast e interfacce
Interfacce e tipi struttura
Interfaccia "IComparable"
Definizione del tipo struttura "Rettangolo"
Implementazione dell'interfaccia "IComparable"
Parte II Applicazioni Windows
9 Finestre di dialogo
"Finestre di dialogo" (o dialog): Form modali
"Form modali"
Visualizzare un form come modale
Chiudere un form modale
Scambiare dati tra codice chiamante e finestra di dialogo
Acquisire i dati attraverso campi pubblici definiti dal form modale
Fornire dei valori iniziali ai campi pubblici del form modale
Creare e distruggere una finestra di dialogo
Distruggere (rilasciare le risorse grafiche di) un form modale
Verificare la validita' dei dati prima di chiudere il form modale
Evento "Closing": abortire il processo di chiusura del form
Verifica dei dati nel gestore di evento del bottone "OK"
Standardizzare aspetto e comportamento della finestra di dialogo
"Finestre di dialogo comuni" (common dialog)
Richiedere all'utente il nome di un file: "OpenFileDialog"
Richiedere all'utente di scegliere un font: FontDialog"
10 "GDI+": funzionalita' grafiche di .NET
Introduzione al "GDI+"
Oggetto "Graphics": accesso alla superficie di disegno
"Drawing" e "painting"
Disegno di figure geometriche
Strumenti di disegno: oggetti "Pen" e "Brush"
Metodi di disegno geometrico
Tipi "Rectangle" e "RectangleF"
Esempio di un'applicazione di disegno geometrico
Conversione da un sistema di coordinate reali a un sistema di coordinate intere
Scheletro della classe "Grafico"
Metodo "Disegna()"
Disegnare immagini
Metodi di rendering delle immagini
Tipi "Icon", "Image", "Bitmap" e "Metafile"
Riempire con un'immagine lo sfondo di un controllo
Effettuare il rendering del testo
Anatomia di un font
Visualizzare il testo specificando la sola posizione
Visualizzare il testo di un rettangolo di layout
Misurare l'area occupata da un testo
Visualizzare un elenco di stringhe
Rilasciare le risorse grafiche
11 Gestire il rendering dei controlli
Rendering di un controllo e richiesta di "painting"
Intervenire sul rendering di un controllo
Gestire l'evento "Paint" di un controllo
Esempio di gestione dell'evento "Paint"
"Invalidare" l'area occupata da un controllo
Ottimizzare il rendering di un controllo
Gestire l'evento "DrawItem" dei controlli "ListBox" e "ComboBox"
Tipo "DrawItemEventArgs"
Esempio di gestione dell'evento "DrawItem"
controlli realizzati dal programmatore (user's control)
Requisiti di base di un controllo
Collocazione del codice di rendering scritto dal programmatore
Controllo "GPListBox"
Caratteristiche del controllo "GPListbox"
Scheletro della classe "GPListBox"
Codice di rendering della classe "GPListBox": metodo "OnDrawItem"
Applicazione di esempio
Controllo "Grafico"
Scheletro della classe "Grafico"
Codice di rendering e metodo "ConvertiCoordinate()"
Applicazione di esempio
Gestione del ridimensionamento (resizing) del controllo
Parte III Gestione dei file
12 Introduzione al "file system"
Concetti generali
Dispositivi fisici per la memorizzazione dei file
File system
Organizzazione e logica dei file system
Percorsi assoluti e relativi di un file o una directory
Informazioni che caratterizzano file di directory
Natura, o tipo, dei file
Operazioni permesse sui file
Operazioni che agiscono sul contenuto del file
Operazioni che agiscono sul file come oggetto del file system
File di testo
Codifica dei dati in formato stringa
Codifica dei caratteri
File binari
Memorizzazione di stringhe nel formato binario
Lettura di un file binario
Concetto di stream
Lettura da uno stream
Scrittura su uno stream
Posizionamento
13 Classe "FileStream"
Introduzione alla classe "FileStream"
Connessione con il file: creazione di un oggetto "FileStream"
Lettura e scrittura del file
Posizione corrente e lunghezza dello stream
Impiego della classe "FileStream"
14 Elaborare file binari
Classe "BinaryWriter"
Proprieta' della classe "BinaryWriter"
Costruttori della classe "BinaryWriter"
Metodi della classe "BinaryWriter"
Classe "BinaryReader"
Proprieta' della classe "BinaryReader"
Costruttori della classe "BinaryReader"
Metodi della classe "BinaryReader"
Uso delle classi "BinaryWriter" e "BinaryReader"
Esempio n° 1: Archiviazione delle temperature giornaliere
Esempio n° 2: Archiviazione degli articoli di un magazzino
15 Elaborare file di testo
Classe "StreamWriter"
Proprieta' principali della classe "StreamWriter"
Costruttori della classe "StreamWriter"
Metodi della classe "StreamWriter"
Classe "StreamReader"
Proprieta' principali della classe: "StreamReader"
Costruttori della classe "StreamReader"
Metodi della classe "StreamReader"
Uso delle classi "StreamWriter" e "StreamReader"
Esempio n° 1: Impostazione a maiuscolo delle"case" delle lettere
Esempio n° 2: Archiviazione degli articoli di un magazzino
16 Accesso al file system
Introduzione
Classe "File"
Metodi della classe "File"
Attributi di un file o una directory: tipo "FileAttributes"
Classe "Directory"
Metodi della classe "Directory"
Pattern e caratteri jolly
Classe "Path"
Campi pubblici della classe "Path"
Metodi principali della classe "Path"
Uso delle classi "File", "Directory" e "Path"
Requisiti del programma "Elimina"
Struttura generale del programma
Individuazione degli oggetti - file o directory - da eliminare
Eliminazione dei file e delle directory
Parte IV Appendici
A Modelli di memorizzazione, stack, heap e garbage collection
Modello di memorizzazione degli oggetti
Modello di accesso agli oggetti: "tipi di riferimento" e "tipi valore"
"Copia superficiale" (shallow copy)
Tipi valore e tipi riferimento: costo computazionale e occupazione di memoria
Definizione di nuovi tipi: classi e tipi struttura a confronto
Modalita' di gestione della memoria: Stack e Heap
Introduzione alalo stack
Uso dello stack
Introduzione allo heap
Uso dello heap
Distribuzione degli oggetti allocati sullo heap: garbage collector"
Garbage collector e garbage collection
Gestione dello heap: strategia di lavoro del garbage collector
Allocazione e deallocazione di variabili statiche
B Livello di accesso dei tipi, tipi nidificati e namespace
Livello di accesso dei tipi
"Tipi nidificati": tipi definiti come membri di altri tipi
Campo di accessibilita'
Campo di accessibilita' di un tipo
Decidere il campo di accessibilita' di un tipo
Stabilire il campo di accessibilita' dei tipi di un programma eseguibile
Stabilire il campo di accessibilita' dei tipi di una libreria
Namespace
Definizione di un namespace
Namespace e campo di accessibilita' dei tipi
Riferimento ai tipi definiti all'interno di un namespace
Ruolo dei namespace
Indice analitico |