O VB.NET não é uma linguagem OO. Nem o Java...
Estou cansado de ouvir a frase : "O Visual Basic não é uma linguagem orientada a objetos". (Aqui o termo Visual Basic refere-se a todas a versões do produto Visual Basic , incluindo o VB.NET.)
Geralmente quem faz a afirmação acima possui algumas características : trabalha com Java ou C++ e não sabe realmente o que significa "linguagem orientada a objetos".
O termo 'linguagem orientada a objetos' é atualmente usado para fazer referência a linguagens de programação que suportam a programação orientada a objetos.
Há no entanto um pequeno problema na declaração acima : o que significa 'programação orientada a objetos' ? e o que significa 'suportar' ?
Você vai encontrar em muitos livros que para uma linguagem ser considerada orientada a objetos ela deve suportar : Abstração , Encapsulamento , Polimorfismo e Herança.
Se considerarmos a assertiva a cima podemos dizer que o Visual Basic até a versão 6.0 não era uma linguagem orientada a objetos, e , que a partir do lançamento da plataforma .NET o VB.NET passou a ser uma linguagem OO.
Uma definição mais rigoroso sobre os requisitos que uma linguagem orientada a objetos deve possuir seria :
"Em uma linguagem orientada a objetos todos os construtores das classes devem ser orientados a objeto , ou seja, tudo deve ser um objeto. (Em uma linguagem 100% orientada a objetos todos os tipos são objetos e todo o código é código de método.)"
Aplicando este conceito creio que ficamos com apenas duas linguagens mais conhecidas : Smalltalk e Eiffel.
E o Java ? Bem , java também não é uma linguagem orientada a objetos sob este aspecto. Se Java fosse realmente orientada a objetos não haveria distinção entre os tipos primitivos e os objetos dentre outras coisas. Java é portanto uma linguagem híbrida.
Podemos dizer que Java é um linguagem mais baseada em objetos que o Visual Basic , Lisp ou Perl. Podemos dizer que tanto Java como Visual Basic .NET ou Perl ou Lisp ou C++ suportam a programação orientada a objetos.
Outra ponto importante a esclarecer é que programar em Java não significa que você esta programando usando a orientação a objetos. Você pode fazer verdadeiras barbaridades em Java como o pode fazer em Visual Basic ou qualquer outra linguagem.
Para finalizar , não existe linguagem perfeita , uma linguagem é apenas uma ferramenta e o trabalho do programador é escolher a ferramenta certa para resolver o problema. Não importa a linguagem : C , C++ , Java , Pascal , Eiffel , Prolog , Python cada uma possui sua própria característica , qualidades e defeitos. Cada uma pode a , seu próprio modo, ser eficiente para resolver um determinado problema que outra não o faria. Ou Java resolve tudo ?
Referências:
www.microsoft.com
www.sun.com
http://www.smalltalk.org/main/
http://www.eiffel.com/
José Carlos Macoratti