posts - 4237, comments - 3946, trackbacks - 370

Disclaimer

This was my personal weblog originally hosted by UgiDotNet, written mostly in Italian.

This blog is now part of my new site:
These postings are provided 'AS IS' with no warranties, and confer no rights. The views expressed on this weblog are mine alone and do not necessarily reflect the views of my employers.

Licenza Creative Commons

Tag Cloud

Archives

Post Categories

Virtual o non Virtual... o meglio... quanti si soffermano a pensare sul funzionamento di certi meccanismi...

Lo so... è un tema che ogni tanto ripropongo... ma visto che continuo ad avere conversazioni con persone che criticano la scelta di C# di non avere i metodi virtual di default (a differenza di Java) ho deciso di parlarne di nuovo, cercando di estendere il discorso...

Ci si lamenta del fatto che in Java è facilissimo estendere una libreria progettata da altri, mentre in C# no.

Riporto di nuovo la splendida intervista ad Anders Hejlsberg dove si spiega la motivazione di questa scelta, e anche il post How Virtual Methods Work dove si spiega il funzionamento del virtual.

Ma ricordate... mettere un metodo virtual o meno è una scelta di DESIGN. Se qualcuno la fa sbagliata... non dite in Java questo problema non c'è... perchè in Java c'è il problema opposto, quello dove TUTTO è virtual... e quindi tutto può essere ridefinito senza particolari scelte o senza pensarci troppo, e questo è causa di problemi subdoli e difficilmente individuabili mentre si scrive il codice. Senza poi parlare delle performance...

E senza poi condiderare questo:

I can demonstrate to you a very real world versioning problem, one that indeed we see now from experience with Java. Whenever they ship a new version of the Java class libraries, breakage occurs. Whenever they introduce a new method in a base class, if someone in a derived class had a method of that same name, that method is now an override—except if it has a different return type, it no longer compiles. The problem is that Java, and also C++, does not capture the intent of the programmer with respect to virtual.

Estendendo il discorso, durante una festa di Natale di quest'anno parlavo con una persona "mooolto" competente del fatto che a volte ci si mette a discutere di tante cose ad alto livello, SOA, architetture, Software Factories, Domain Model, ORM, etc.. ma poi ci si rende conto che spesso alcune cose vengono date troppo per scontate.

Chi ritiene di conoscere bene i delegate? Chi ha "ben" chiaro virtual, overrides e new? Ci sa bene come il garbage collector gestisce gli oggetti piccoli e quelli grandi? Generazioni non è solo un film della saga di Star Trek.

Ogni tanto riprendo in mano il Ritcher, MSDN Magazine e altre fonti, e mi faccio una bella ripassata di alcuni concetti, e, di solito, con il senno di poi e l'esperienza accumulata, ogni volta scopro qualcosa di nuovo o mi si chiarisce qualche concetto che prima era rimasto nebuloso...

Mi è piaciuto molto il post oggi di Raf, che ha riportato un po' di tecnico all'interno del blog di UGI, dopo i bagordi post-capodanno, Sete di handle e le applicazioni che non si aprono più. Mi chiedo quanti ci hanno ragionato almeno un po', soprattutto chi sviluppa applicazioni Windows.

Mi chiedo quanti hanno seguito il consiglio di Roberto (Forse non tutti sanno che...) e hanno scaricato il bellissimo webcast di Janky dal titolo impronunciabile. E pensare che quando Janky si è offerto di tenerlo non immaginava ancora a cosa sarebbe andato incontro.

Certo, poi c'è il libro Framework Design Guidelines : Conventions, Idioms, and Patterns for Reusable .NET Libraries che è un MUST HAVE, da leggere almeno una volta.

Senza parlare dell'italianissimo libro di Francesco e Giuseppe, che pure se ad un livello differente, introduce tanti e tali concetti nella normalità del lavoro quotidiano che andrebbe letto sicuramente più di una volta con attenzione, per scegliere le regole che conviene applicare sempre, e quelle che è bene applicare...

Boh... spero di non aver preso la tangente. Ma ricordatevi... Virtual, Override, i Delegate, etc... etc... sono tutte scelte di design che facciamo, non diamo la colpa al linguaggio se qualcuno le ha fatte nel modo sbagliato...

Print | posted on sabato 6 gennaio 2007 23:14 |

Feedback

Gravatar

# Memory Leak in .NET

07/01/2007 18:25 | Crad's .NET Blog
Gravatar

# Re: Virtual o non Virtual... o meglio... quanti si soffermano a pensare sul funzionamento di certi meccanismi...

dovrei chiederlo a janky, ma mi sa che "Framework Design Guidelines : Conventions, Idioms, and Patterns for Reusable .NET Libraries" è il libro che mi sono letto durante il viaggio di andata nelle Marche. Ovviamente non tutto...sbavoso e troppo bello a dir poco.
Il post di Raffaele mi ha davvero colpito, quando Raffaele scrive un post lo stampo quasi sempre: è nel mio zaino, adesso.
07/01/2007 22:53 | Igor Damiani
Comments have been closed on this topic.