Learn & Get … Ovvero come sopravvivere alla migrazione da VB6 a VB2005.

Slides:



Advertisements
Presentazioni simili
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
Advertisements

1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Interfacce Java.
Corrado Cavalli Microsoft .NET MVP
Midrange Modernization Conference 1 Scenari evolutivi per le soluzioni basate su AS/400 Walter Poloni Direttore Developer & Platform Evangelism Microsoft.
Andrea Saltarello [IDevGuro] Corrado Cavalli [DevGuro(Of T)]
1 Teaching Cloud Computing and Windows Azure in Academia Domenico Talia UNIVERSITA DELLA CALABRIA & ICAR-CNR Italy Faculty Days 2010.
Luca Bianchi Windows Development Day Bologna 28 gennaio 2005 SQL Server Desktop Engine (MSDE) & SQL Server 2005 Express.
ASP.NET – Web Forms Davide Vernole.NET MVP. Di cosa parleremo Introduzione ad ASP.NET ASP.NET, dietro le quinte Componenti principali di una applicazione.
Lez. 10 (10/11) - PBElementi di Programmazione1 Lezione 10 Funzioni e Moduli Macro Analisi del flusso Esercizi.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
E Windows SharePoint Services 2.0 Ivan Renesto Overview how to use Windows SharePoint Services.
Un DataBase Management System (DBMS) relazionale client/server.
Microsoft Robotics Studio Marco Petrucco Microsoft Student Partner - Udine.
EJB Enterprise Java Beans B. Pernici. Approccio Java.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 2: Microsoft.NET.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Constraints.
Componenti dell’architettura Oracle
A.N 991 Client server SQL DBMS TP monitors componenti middleware CORBA Web server OTM HTML Protocolli Sicurezza dati istruzioni funzioni oggetti interfacce.
C# LE BASI 2007 Prima lezione - Introduzione.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Un esempio: Registrazione e lettura di dati in un file
7 cose da sapere su Volume Activation con Windows 7 © 2009 Microsoft Corporation. Tutti i diritti riservati. Come professionista IT, devi sapere che l'attivazione.
Primi passi con Windows: Gestione del Desktop Barra Applicazioni Menu Avvio ISTITUTO COMPRENSIVO N.7 - VIA VIVALDI - IMOLA Via Vivaldi, Imola.
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
14° Workshop – DotNetMarche :: Castelfidardo, 16 Aprile 2010 Introduzione ai framework per IoC / DI e AOP.
Attribution-NonCommercial-ShareAlike Le novità
Scoprirete che su Office non si può solo contare ma anche sviluppare.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Personalizzazione e porting delle procedure esterne connesse ad Aleph Il caricamento degli utenti della circolazione da files esterni Modifiche introdotte.
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
VB.NET Sviluppo Applicazioni Desktop
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
SQL Server 2005 Sicurezza Davide Mauri Factory Software
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Corso di Web Services A A Domenico Rosaci Patterns di E-Business D. RosaciPatterns per l'e-Business.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Collection & Generics in Java
Introduction to automatic ABMs documentation Keywords: Doxygen ODD protocol MASON documentation Simone Romano.
Fondamenti di informatica T-A Esercitazione 7 : Collezioni AA 2012/2013 Tutor : Domenico Di Carlo.
Azure: Mobile Services e Notification Hub ANDREA GIUNTA.
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Nuove funzionalitA’ e caratteristiche del linguaggio
Transcript della presentazione:

Learn & Get … Ovvero come sopravvivere alla migrazione da VB6 a VB2005

Perchè .NET ? Tecnologia nella quale Microsoft ha investito molto (Tempo e $$$) creata dai migliori architetti software (MS e non) Tecnologia alla base di tutti i nuovi prodotti (da SQL Server 2005 a Windows Vista™) Standard ISO E’ il futuro di Microsoft, COM è il passato

Perchè .NET ? Progetto nato nel 1998 come evoluzione di COM, Alpha a PDC 2000 Effetto scrivania... Le applicazioni di oggi hanno necessità diverse (Connettività, Interazione...) I linguaggi devono interagire tra loro Il sistema operativo si è evoluto seguendo una logica di “espansione” DLL Hell Eliminare gli errori del passato (COM)

Sistema Operativo (Windows 98/NT/2000/XP/2003/CE e Altri) Perchè .NET ? Strato software che si interpone tra l’applicazione e il sistema operativo Codice MSIL C#,VB.NET... .NET Framework CLR (Garbage Collector,Eccezioni,Multithreading) BCL (Tipi Base) Sistema Operativo (Windows 98/NT/2000/XP/2003/CE e Altri) Circa 8000 classi...

Vantaggi del .NET Framework (#1) Modello di programmazione OOP comune basta (!?) accessi alle DLL Utilizzo facilitato (IUnknown,AddRef,Registrazioni...) Aggiornamenti facilitati (basta RegSvr32!) Distribuzione semplificata (XCopy) Side by Side execution Codice ottimizzato per la piattaforma di esecuzione Codice sicuro in quanto “gestito” (“managed”)

Vantaggi del .NET Framework (#2) Integrazione dei linguaggi (CTS è comune) Gestione automatica della memoria (Garbage Collector) Totalmente gratuito! http://www.microsoft.com/downloads/details.aspx?FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec&DisplayLang=en

Codice IL e Metadati RUN! VB.NET Compilatore vbc.exe JIT Compiler Codice x86

Codice IL e Metadati Public Sub Main Console.WriteLine(“Ciao”) Console.WriteLine(“A tutti!”) End Sum Il JIT Analizza tutti i tipi (oggetti) utilizzati in Main Riserva una struttura dati per ogni metodo associa un puntatore ad una funzione JITCompiler Quando un metodo viene invocato, compila il codice, aggiorna il puntatore al codice X86 ed esegue il codice La seconda WriteLine non deve essere ricompilata Il codice viene compilato “on demand” e ottimizzato sulla macchina client

.NET Framework blocks ASP.NET : Web Forms Windows Forms e servizi ADO.NET : Accesso ai dati e XML BCL - Libreria di classi Common Language Runtime

Riassumendo... Redist circa 22 MB Non supporta Windows 95 Per sviluppare serve Win2000 o superiore L’attuale versione è la 2.0 Il framework funziona Side-by-Side Visual Studio 2005 supporta solo il framework 2.0 Non serve per applicazioni ASP.NET (lato client) Esiste per Linux (Mono) Esiste per Pocket PC,SmartPhones, Embedded Su NT serve Sp6a Richiede IE 5.01 o superiore Richiede Windows Installer 3.0

VB 2005: Il linguaggio Attenzione: Non stiamo parlando di VB7

Files .vb In VB6 ci sono diverse estensioni (cls, frm...) In VB2005 esiste una sola estensione .vb che può (anche) contentere più classi e/o moduli. Il nome della classe non è legato al nome del file File MyFile1.vb Public Class Person … End Class File MyFile2.vb Module MainModule … End Module File MyFile3.vb Public Class Person2 … End Class Module MainModule2

Program EntryPoint In VB6 un applicativo può partire da un Form o da una Sub Main In VB 2005... pure  però.. La Sub Main non deve necessariamente stare in un modulo VB 2005 però, by default, utilizza l’Application Framework Application Framework Permette di gestire un applicazione in maniera più semplice Offre una serie di eventi “tipici” di un applicazione Startup, Shutdown StartupNextInstance UnhandledException

Namespaces Il compilatore ha bisogno di sapere esattamente quale classe instanziare Possono esserci dei conflitti Sono dei raggruppamenti Logici I moduli e le classi vivono nei Namespaces VB Imposta un root namespace VB.NET definisce degli imports globali La keyword Imports permette di importare i namespaces Imports System.IO Imports Test=System.IO Permette di evitare di scrivere il percorso completo a un namespace Posso creare un namespace all’interno di un altro namespace Usare Global per far riferimento al root namespace

Variabili Global Variables (usare Shared) Usare Option Explicit e Option Strict Dichiarazioni multiple sulla stessa riga Block scope (cicli For,Do...Loop)

Data Types Byte (*) Char (2 bytes) [A“c”] Boolean (4 bytes) Short (2 bytes) ex Integer di VB6 (*) Integer (4 bytes) ex Long di VB6 (*) Long (8 bytes) (*) Currency -> Decimal (16 bytes) Single Double Date Sono Alias dei tipi definiti nel .NET framework (Int16, Int32...) (*) Sono sia signed che Unsigned Per ognuno esiste il relativo operatore di conversione e la classe Convert. I tipi unsigned non sono CLS compliant

Nullable Types Sono Value Types che possono essere Nothing Dim i As Integer= Nothing ‘Value=0 Dim i As Nullable(Of DateTime)= Nothing ‘Value=Nothing Sono basati sulla classe generica Nullable Nullable.GetValueOrDefault() La properietà HasValue indica se il nullable ha un valore associato

Le stringhe sono immutabili Usate StringBuilder Data Types - String Il framework non supporta le stringhe a lunghezza fissa VB6 Dim s As String * 20 VB 2005 Dim s As New String(“ “c,20) Le stringhe sono immutabili Usate StringBuilder Usate le costanti ControlChars.X

E’ possibile dichiarare e inizializzare con lo stesso statement. Inizializzazione E’ possibile dichiarare e inizializzare con lo stesso statement. Dim x As integer=9 Inizializzazione di oggetti Dim o As Person O=New Person() Dim o As New Person() ‘ è identico (In VB6 non lo era)

Assegnazione Le proprietà di Default non esistono più Si può usare se la proprietà ha un indice Set non si usa più Nuovi operatori X+=1 X-=1 X*=n X\=n Y^=n s+=“xyz” Usare & oppure +? s=s & “ciao” s=s + ”ciao”

Value Types Ereditano le caratteristiche da System.ValueType Enum, Structures, Integer... Tipi base Sono memorizzate sullo stack Memorizzano il valore della variabile

Reference Types Sono memorizzate nella memoria Heap Contengono un riferimento alla variabile Stringhe, Objects Sono controllati dal Garbage Collector Attenzione alle assegnazioni Dim s as String=“pippo” Heap &H1235 &H1230 Ciao &H1235 pippo ... pluto

Boxing-Unboxing E’ la conversione di un value type in un reference type e viceversa E’ un operazione dispendiosa in termini di prestazioni e memoria Accade quando si associa un Value Type ad una variabile di tipo Object Usare CType() o DirectCast() per convertire CType tenta la conversione del tipo DirectCast è più veloce (solo reference types) TryCast è un operatore di cast che ritorna Nothing se il casting fallisce

Enum Simili a VB6 E’ possibile definire il tipo usato dall’Enum E’ possibile “decorare” un enumerato con <Flags()> Il tipo Enum è presente nel framework ed espone metodi per la gestione degli enum Parse GetValues

Array Sono 0 (zero!) based Il valore usato nella Dim è l’upper bound! Dim k() as Integer(0 to 10) Il valore usato nella Dim è l’upper bound! Dim a(3,2) as Integer [Matrici] Array Initializers Dim x() as Int32={1,2,3} Non si può usare ReDim per dimensionare un array Sono basati sulla classe Array del Framework Array.Clone Array.Copy(...)

In VB6 si usava Type-End Type Strutture Sono Value Types In VB6 si usava Type-End Type In VB 2005 si usa Structure-End Structure Possono essere viste come classi “leggere” Possono avere metodi, proprietà ed eventi

Procedure e Funzioni I Parametri sono ByVal (erano ByRef in VB6) Si può usare Return per ritornare un valore ad una funzione Si possono usare parametri Optional Supportati solo da VB Sono un trucchetto per mantenere la compatibilità IsMissing non esiste più, bisogna dare un default Usare gli Overloads Le routines richiedono sempre le parentesi

Cicli e controllo di flusso VB 2005 offre le versioni cortocircuitate di And e Or IIF non è cortocircuitata While/Wend di VB6 diventa While/End While I cicli For/For Each permettono di dimensionare la variabile usata nel ciclo Statement Continue

Gestione degli errori VB 2005 offre ancora On Error... Meccanismo obsoleto Mantenuto per compatibilità Sostituito dalla gestione strutturata delle eccezioni Un eccezione è un anomalia che può capitare durante la vita dell’applicazione L’anomalia viene segnalata attraverso un oggetto Exception (o ereditato da esso) Exception.Message Exception.Source Exception.StackTrace Come faccio a intercettare le eccezioni?

Gestione degli errori : Try-Catch-Finally ... Catch ex As ArgumentException [When] Catch ex As Exception ‘Generica Finally End Try Per lanciare da codice un eccezione usare Throw [exception] E’ possibile passare l’eccezione originale usando InnerException Le eccezioni vanno indicate dalla più specifica alla generica Usate l’evento UnHandledException per intercettare eventuali errori non gestiti Non lanciate eccezioni inutilmente Usate Debug->Exceptions per controllare il debugger

My Namespace — Application title, version, logs, description, … — Registry, Printer, Audio, File System, … — User name, group, domain, … — Accesso alle risorse di un applicazione — User e application settings — Collezione dei form presenti nel progetto — Collezione dei web services referenziati http://msdn.microsoft.com/msdnmag/issues/05/07/My/default.aspx

Visual Studio 2005 Overview

Express Pro Team Standard Windows or Web Designers Code Editors and IntelliSense Programming Languages Remote Data Access Mobile Device Development User Experience Simplified Server Development/Debugging SQL Server 2005 Development Application Modeling, Code Profiling, Unit Testing, Static Code Analysis, Load Testing, Enterprise Source Control, Work Item Tracking

“Personalizzare” Visual Studio 2005 E’ il vostro strumento di lavoro, rendetelo ‘piacevole’ e produttivo Import/Export Settings Colorare il testo come preferite Keyboard scheme (VB6) Task List personalizzabile Option Strict On !!! External Tools Creazione di macro da associare a combinazioni di tasti Object Browser Immediate window a design time Regions

Scelta di un Project Template Windows Application Class Library Windows Control Library ASP .NET Web Application / Service / Control Library Console Application Windows Service Custom templates

Ma dov’è il comando Build di VB6? Ogni volta che premete F5 Visual Studio compila sempre il vostro progetto L’eseguibile e tutti i files necessari sono nella cartella bin Debug Relase Debug vs Release La modalità Release non contiene le informazioni di debug Il codice è ottimizzato rispetto alla versione Debug

Struttura di un Progetto VB 2005 Solution Files (.sln, .suo) Rappresentano l’intero applicativo e il suo stato Project Files (.vbproj) Windows Application Librerie Local Project Items Classi, Form, Moduli, ecc. (.vb) Risorse (.resx) Web Project Items XML Web services (.asmx) Web Form (.aspx) Global application classes (.asax)

IDE Features XML Comments Refactor Tool Code Snippets e Expansions Commenti aggiuntivi inseriti nel codice e gestiti dall’intellisense Potete usarli per generare documentazione con NDoc http://ndoc.sourceforge.net/ Refactor Tool http://msdn.microsoft.com/vbasic/downloads/tools/refactor/ L’ide supporta il name refactoring Code Snippets e Expansions “Pezzi” di codice pronti all’uso e parametrizzabili Potete aggiungere i vostri http://www.gotcodesnippets.net/ http://msdn.microsoft.com/vbasic/downloads/tools/snippeteditor/

Compiler Features Smart Tags Warnings Autocorrezione del codice Il compilatore analizza in maniera dettagliata il codice Variabili inutilizzate Instanze non create Funzioni ricorsive Uso incorretto di Try/Catch

Debugger Features Edit & Continue come in VB6!!! DataTips Visualizer Visualizzazione di tutti i dettagli di una variabile Visualizer Permettono di visualizzare i dati in maniera più chiara Potete creare i vostri visualizers http://www.code-magazine.com/article.aspx?quickid=0503061&page=1 BreakPoints TracePoints Scrivono delle informazioni quando il codice passa dal tracepoint Locals e Autos Window Conditional,Obsolete attributes Debug e My.Application.Log classes

VB 2005: Novità OOP

Classi Parziali Le classi possono essere Nested <Scope> Class Car … End Class File Class1.vb Public Class Car Public Sub Start() End Sub End Class Le classi possono essere Nested Dim T As New Car() T.Start() T.Stop() File Class2.vb Public Partial Class Car Public Sub Stop() End Sub End Class

Uso dei Costruttori Sub New rimpiazza Class_Initialize Viene eseguita quando l’oggetto è istanziato Public Sub New( ) intValue = 1 End Sub Possiamo specificare più costruttori per la stessa classe (Overload) Può essere usato per simulare PublicNotCreatable di VB6 Public Sub New(ByVal i As Integer) intValue = i End Sub

Distruzione degli oggetti Sub Finalize rimpiazza l’evento Class_Terminate La usiamo per liberare le risorse usate dall’oggetto Viene eseguita quando il GC distrugge l’oggetto Usiamo x = Nothing per permettere la Garbage Collection Attenzione: la distruzione potrebbe non avvenire immediatamente! Protected Overrides Sub Finalize( ) ‘Rilascio delle risorse End Sub Se dovete rilasciare un oggetto immediatamente implementate il pattern Dispose Interfaccia IDisposable Usatelo solo quando veramente necessario!

Using Dim MyObj As New DisposableObject Try MyObj.DoSomething() Finally MyObj.Dispose() End Try Dim MyObj As New DisposableObject MyObj.DoSomething() MyObj.Dispose() Using MyObj as New DisposableObject MyObj.DoSomething() End Using Dim Temp As DisposableObject = New DisposableObject Try Temp.DoSomething() Finally If (Temp IsNot Nothing) Then _ DirectCast(Temp, IDisposable).Dispose() End Try

Metodi e Overloading Metodo Permette di definire delle azioni che l’oggetto deve compiere Car.Faster() Guideline: I nomi dei metodi sono PascalCase Non si applica ai valori di ritorno Class Car ... Public Sub Faster() ... End Sub End Class Class Car ... Public Sub Faster() ... End Sub Public Sub Faster(maxSpeed as Integer) End Class Unico punto dove è possibile inizilizzare fields ReadOnly

Shared Members VB6 Moduli VB.NET Moduli -> Classi con metodi statici (Shared) Class Car ... Public Shared Function GetConsumo(km as Int32,_ litri as Int32) as Single ... End Sub End Class Dim Consumo as Double = Car.GetConsumo(100,6)

Shared Fields VB6 Necessità di avere dei fields condivisi dalle varie istanze La classe usava un campo definito in un modulo Class Car Private Shared carOwner as String Public Property Owner() As String Get Return carOwner End Get Set(ByVal Value As String) carOwner = Value End Set End Property End Class Dim c as New Car c.Owner=“Corrado” Dim k as New Car Console.WriteLine(k.Owner) ‘Corrado

Proprietà Shared Class Car Private Shared carOwner as String Public Shared Property Owner() As String Get Return carOwner End Get Set(ByVal Value As String) carOwner = Value End Set End Property End Class Le proprietà Shared non possono accedere a field non Shared Car.Owner=“Corrado” Console.WriteLine(Car.Owner) ‘Corrado Dim k as New Car() k.Owner=“Mario” ‘Warning! Accedete sempre a item statici usando NomeClasse.XXX Il compilatore emette warning se accedete via istanza Definite un costruttore privato per Classi statiche

Eventi Delegates Gestione degli eventi Eventi Sono internamente basati su Delegates Delegates Sono l’equivalente .NET dei puntatori a funzione del C Sono type safe Si definisce attraverso la keyword Delegate Possiamo passare un metodo come parametro Gestione degli eventi WithEvents AddHandler RemoveHandler Handles Si applicano anche ai costruttori

Interfacce In VB6 si usava una classe No scope No implementazione Public Interface ICar Sub Start() Sub Faster() Sub Slower() ReadOnly Property Speed() As Integer Event LowOil() ‘ End Interface In VB6 si usava una classe No scope No implementazione Public Class Car Implements ICar ‘Enter  ... Public Sub Faster() Implements ICar.Faster End Sub Public Event LowOil() Implements ICar.LowOil Public ReadOnly Property Speed() As Integer Implements ICar.Speed Get End Get End Property End Class Implements ha parecchi vantaggi...

Interfacce Il framework fa largo uso di interfacce Public Class Car ... Private Sub Faster() Implements ICar.Faster End Sub Public Sub AutoPilot() ... End Class Public Class Car : Implements ICar,ITruck Private Sub Faster() Implements _ ICar.Faster,ITruck.Faster End Sub Public Sub AutoPilot() ... End Class Il framework fa largo uso di interfacce

Insiemi di oggetti System.Collections namespace ArrayList HashTable SortedList Stack Queue Ogni oggetto permette di gestire insiemi di oggetti con caratteristiche proprie

HashTable E’ un array autodimensionante Implementa IDictionary La ricerca è By Key (Object) Gli items non sono memorizzati secondo un ben preciso ordine Dim list as New HashTable(10) For i as Integer=0 to 9 Dim c as New Car list.Add(“car”+i.ToString,c) Next Dim c as Car= DirectCast(list(“car6”), Car) For Each c as Car in list ...

SortedList E’ un array autodimensionante Gli Items sono ordinati (usando IComparable) La ricerca è By Key Sorting <>Performances Dim list as New SortedList(10) For i as Integer=0 to 9 Dim c as New Car list.Add(“car”+i.ToString,c) Next Dim c as Car= DirectCast(list(“car6”), Car) For Each c as Car in list ...

Stack E’ una pila autodimensionante LIFO – Last In, First Out Push, Pop e Peek Dim list as New Stack() list.Push(“a”) list.Push(“b”) list.Push(“c”) Console.WriteLine(list.Pop)‘c

Queue ...e le collezioni tipizzate? ...attendere prego... E’ una coda autodimensionante FIFO – First In, First Out Enqueue, Dequeue e Peek Dim list as New Queue() list.Enqueue(“a”) list.Enqueue(“b”) list.Enqueue(“c”) Console.WriteLine(list.Dequeue) ‘a Altri tipi di collezioni sono disponibili in System.Collection.Specialized NameValueCollection ...e le collezioni tipizzate? ...attendere prego...

Ereditarietà Classi con funzionalità e interfacce molto simili ad un altra Modifica della classe (errori,interfaccia non congrua) Copia e Incolla Il codice potrebbe non essere disponibile Eredità per delega Parecchio codice per il wrapping della classe interna SuperCar Start 4 Start Faster Car

Ereditarietà Creare una classe che eredita da un altra Eredita Interfaccia e Implementazione Inherits Non è necessario Source Code Stesso linguaggio (C# <-> VB.NET) Public Class SuperCar Inherits Car End Class Dim sc as New SuperCar sc.Start() Sc.Faster() 4 Public Class SuperCar Inherits Car Public Sub Turbo End Sub End Class Dim sc as New SuperCar sc.Start() ‘Car sc.Faster() ‘Car sc.Turbo() ‘SuperCar

Ereditarietà Concetti Covarianza La classe da cui si eredita è definita classe Base Posso ereditare da qualsiasi classe .NET (che lo permette) Tutte le classi in .NET ereditano da System.Object Si definisce una relazione “Is a” (é un) In .NET tutto è Object Covarianza Public Class SuperCar Inherits Car Public Sub Turbo End Sub End Class Dim c as Car= New SuperCar c.Start() c.Turbo() ‘Errore 4 Una classe può ereditare da una sola classe base Single Inheritance

Override La classe che eredita può modificare il comportamento della classe base Ridefinendone i metodi/proprieta/eventi La classe base deve permetterne la redifinizione Overridable Public Class Car Public Overridable Sub Faster Console.WriteLine(“base”) End Sub End Class Public Class SuperCar Inherits Car Public Overrides Sub Faster Console.WriteLine(“Inherited”) End Sub End Class 4 Dim c As Car = New SuperCar() c.Faster() ‘Inherited

Override Un metodo dichiarato Overrides: MyBase E’ automaticamente Overridable Si può usare NotOverridable per modificarne il comportamento Public Class SuperCar: Inherits Car Public NotOverridable Overrides Sub Faster Console.WriteLine(“Inherited”) End Sub End Class MyBase Rappresenta la classe da cui si sta ereditando 4 Public Class SuperCar: Inherits Car Public Overrides ReadOnly Property Model as String Return MyBase.Model + “ Super” End Sub End Class

Override I costruttori non vengono ereditati No problem se non avete dei costruttori parametrici (usa default) Dovete invocarli esplicitamente (prima istruzione) Public Class Car Public Sub New (cilindrata as Integer) End Sub End Class Public Class SuperCar: Inherits Car Public Sub New (cilindrata as Integer) MyBase.New(cilindrata) ‘Inizializzo la classe base End Sub End Class 4

Override, classe base e Me Quando associate un istanza di una classe ereditata ad una variabile di tipo base, la classe base “vede” l’implementazione dei metodi della classe ereditata Public Class Car Public Overridable Sub Faster Console.WriteLine(“base”) End Sub End Class Public Class SuperCar: Inherits Car Public Overrides Sub Faster Console.WriteLine(“Inherited”) End Sub End Class Dim c as Car= New SuperCar c.Faster()’ Inherited 4 Public Class Car Private Sub IncreaseSpeed Me.Faster() End Sub End Class Me non indica il contesto corrente

MyClass MyClass permette di specificare che il contesto di esecuzione sia quello della classe base e non quello di eventuali overrides in classi ereditanti da essa Public Class Car Private Sub IncreaseSpeed MyClass.Faster() End Sub End Class Viene eseguito il metodo Faster della classe Car Non disponibile in C# 4

Protected scope Protected rende visibile un elemento alle sole classi ereditanti o alla classe che lo definisce Si usa quando un metodo è utile al colloquio tra classe base e classe ereditante Public Class Car Protected Sub IncreaseSpeed End Sub End Class Public Class SuperCar: Inherits Car Public Sub Faster MyBase.IncreaseSpeed() End Sub End Class 4 Dim c As New Car c.IncreaseSpeed()’ Errore Può essere abbinato con Friend

Shadows Overrides funziona se il metodo della classe base è virtual Potrebbe non esserlo (I metodi Overridable sono più ‘lenti’) Potremmo non poterlo modificare Shadows Permette di ridefinire metodi già presenti nella classe base Sono a tutti gli effetti delle nuove implementazioni Sono ignorate dalla classe base (no ereditarietà) Va usato per ridefinire membri Shared Public Class SuperCar: Inherits Car Public Shadows Sub Faster Console.WriteLine(“Inherited”) End Sub End Class 4 Dim c as Car= New SuperCar c.Faster()’ base In alcuni casi potremmo non volere che qualcuno erediti la nostra classe

NotInheritable e MustInherit Indica che la classe non è ereditabile (sealed class) Public Class SuperCar Inherits Car ‘Errore End Class Public NotInheritable Class Car End Class MustInherith Non può essere istanziata (abstract class) Può essere usata solo ereditando da essa Spesso contiene dei metodi definiti MustOverride Permette di definire delle classi che hanno funzionalità parziale 4 Public MustInherit Class Car Public MustOverride Sub Faster End Sub End Class

Classe Astratta: CollectionBase System.Collection.CollectionBase Permette di creare collezioni tipizzate Public Class Cars : Inherits CollectionBase Public Sub Add(ByVal item As Car) MyBase.InnerList.Add(item) End Sub Default Property Item(ByVal index As Integer) As Car Get Return DirectCast(MyBase.InnerList(index), Car) End Get Set(ByVal Value As Car) MyBase.InnerList(index) = Value End Set End Property End Class 4 Dim l as New Cars() l.Add(New Car()) ‘ok l.Add (New Truck()) ‘Errore

Override di eventi La classe base deve essere strutturata in maniera opportuna Public Class Car Public Event LowOil() Public Overridable Sub Faster If (Me.OilLevel<5) Then Me.OnLowOil() End Sub Protected Overridable Sub OnLowOil() RaiseEvent LowOil() End Class Public Class SuperCar: Inherits Car Protected Overrides Sub OnLowOil() Me.Signal(“Low oil”) MyBase.OnLowOil() End Sub End Class 4

Generics Collections Public Class List(Of T) Public Class List Private elements() As T Private count As Integer Public Sub Add(ByVal element As T) If count = elements.Length Then Resize(count * 2) elements(count) = element : count += 1 End Sub Public Default Property Item(ByVal Index _ As Integer) As T Get Return elements(index) End Get Set (value as T) elements(index) = value End Set End Property End Class Public Class List Private elements() As Object Private count As Integer Public Sub Add(ByVal element As Object) If count = elements.Length Then Resize(count * 2) elements(count) = element : count += 1 End Sub Public Default Property Item(ByVal Index _ As Integer) As Object Get Return elements(index) End Get Set (value as object) elements(index) = value End Set End Property End Class Dim intList As New List() intList.Add(1) ‘ Boxing! intList.Add(2) ‘ Boxing! intList.Add(“Pippo") ‘ No error…  i = CInt(intList(0)) ‘ Richiesto cast Dim intList As New List(Of Int32) intList.Add(1) ‘ No Boxing! intList.Add(2) ‘ No Boxing! intList.Add(“Pippo") ‘ Error…  i = intList(0) ‘ Non serve castare

Generics Collections Collection Classes Collection Interfaces List (of T) Dictionary (Of K,V) SortedDictionary (Of K,V) Stack(Of T) Queue(Of T) Collection Classes Public Class TypedCollection(Of T) _ Inherits System.Collections.ObjectModel.Collection(Of T) ... End Class Dim Coll as New TypedCollection(Of DataTable) Coll.Add(new DataTable()) Dim coll As New List(Of DataTable) List (of T) IDictionary (Of K,V) ICollection (Of T) IEnumerable (Of T) IEnumerator (Of T) IComparable(Of T) IComparer(Of T) Collection Interfaces Collection Base Classes Collection (Of T) KeyedCollection (Of T) ReadOnlyCollection(Of T)

Generics Methods Public Function MyIIF (Of T)(cond As Boolean, _ trueP As T, falseP As T) As T If (cond) Then Return trueP Else Return falseP End If End Sub Dim X As Int32 = 3 Dim Y As Int32 = 4 Dim Z As Int32 = IIf(X>Y,X,Y) ‘Error Dim Z As Int32 = MyIIF(Of Int32)(X>Y,X,Y) ‘No cast! Dim Z As Int32 = MyIIF(X>Y,X,Y) ‘ Type inferencing

Generics Constraints Public Class Car(Of T As New) Private _Navigator As New T Public ReadOnly Property Navigator As T Get Return _Navigator End Get End Class Public Class Car(Of T) Private _Navigator As T Public ReadOnly Property Navigator As T Get Return _Navigator End Get End Class Public Class Car(Of T) Private _Navigator As New T Public ReadOnly Property Navigator As T Get Return _Navigator End Get End Class Dim Car1 As New Car(Of TomTom) Car1.Navigator.RouteTo()’ Error Public Class Car _ (Of T As {New,BaseClass,I1,I2,Class,Structure}) Private _Navigator As New T Public ReadOnly Property Navigator As T Get Return _Navigator End Get End Class

Operator Overloading Public Class SetPoint Public Temperature as Single Public Sub New (value as Single) Me.Temperature=value End Sub Public Shared Operator +(ByVal a As SetPoint,_ ByVal b As SetPoint) As SetPoint Return New SetPoint(a.Temperature + b.Temperature) End Operator End Class Public Class SetPoint Public Temperature as Single Public Sub New (value as Single) Me.Temperature=value End Sub End Class Dim T1 as New SetPoint(12.5) Dim T2 as New SetPoint(13) Dim T3 as SetPoint = T1 + T2

Operator Overloading Alcuni operatori sono accoppiati <> e = IsTrue e IsFalse AndAlso Richiede And deve ritornare un tipo simile a quello in cui è definito Richiede la definizione di IsFalse/IsTrue CType è l’operatore di conversione Widening – Implicite Narrowing – Esplicite