Classes em ASP

Hoje em dia, o ASP é uma plataforma (não uma linguagem, onde a linguagem mais comum utilizada é o VB Script) ultrapassada e antiga, porém, há muitos sistemas que ainda rodam sobre ela. Mesmo assim, há algumas características pouco conhecidas por muitas pessoas que a utilizam e que um dia chegaram a utiliza-la. A idéia deste post é de ser um dos muitos que ajudarão a deixar os sistemas que rodam até hoje e que não há previsão de troca por outro, além de ser destinados aqueles que o objetivo é de atualização de linguagem (deixando o mais próximo possível, nunca igual, de linguagens atuais). Falo isto porque por favor, não me criem sistemas novos a partir desta linguagem, a não ser em casos muito extremos, pois, o ASP já foi descontinuado pela Microsoft há muitos anos.

Uma destas características é a utilização de classes. Não estou falando de classes compiladas no VB e referenciadas pela linguagem e sim nas linguagens de script que rodam sobre ela. Porém, existem várias e várias limitações que mesmo trabalhando com classes e objetos, nunca deixarão seus sistemas Orientados à Objetos, pois, não há nenhuma característica de orientação à objetos (herança, polimorfismo entre várias outras) na plataforma a não ser a possibilidade de aglomerar funções e manter o escopo de alguma variáveis limitados à necessidade de fazer referencia às classes que as possuem e da existência de um construtor e um destrutor para as classes . Resta ao desenvolvedor, utilizar esta característica ao seu favor, utilizando-a da maneira mais bem pensada o possível. Favor, lembrar de limitar as classes à escopos bem definidos, nunca fazer classes "faz-tudo".

Vamos deixar de teoria e começar a ver exemplos de classes na linguagem utilizando as características de padronização de programação de um post anterior do blog só que com a adição de comentários para seu entendimento sobre as classes, vamos chama-la de Modelo.

Primeiro, vamos criar uma classe simples, vazia, que não serve para nada!

<%
'Início da classe Modelo

class Modelo

'Fim da classe Modelo
end class
>

Muito BOM!!! Com estas linhas, você definirá a sua classe inútil.

Agora, vamos colocar os construtores e destrutores na classe.

<%
'Início da classe Modelo.
class Modelo

'Construtor da classe.
private sub class_Initialize()
end sub

'Destrutor da classe.
private sub class_Terminate()
end sub

'Fim da classe Modelo.
end class
>

Não vou explicar o que é um construtor e destrutor de classes agora, mas, em breve, ou eu ou outra pessoa, publicará o que são estas facilidades. Mas, em algum momento deste post, posso aprofundar pouca coisa sobre eles.

Agora, vamos colocar alguns atributos na classe.

<%
'Início da classe Modelo.

class Modelo

'Atributos públicos da classe.
public strNome
public strDescricao

'Construtor da classe.
private sub class_Initialize()
end sub

'Destrutor da classe.
private sub class_Terminate()
end sub

'Fim da classe Modelo.
end class
>

Agora que colocamos atributos públicos na classe (o que raramente ou nunca deve ocorrer), vamos colocar propriedades na mesma.

<%
'Início da classe Modelo.
class Modelo

'Atributos públicos da classe.
private strNome
private strDescricao

'Construtor da classe.
private sub class_Initialize()
end sub

'#region Propriedade Nome
public property let Nome(strValue)
strNome = strValue
end property

public property get Nome()
Nome =
strNome
end property
'#endregion Propriedade Nome

'#region Propriedade Descrição
public property let Descricao(strValue)
strDescricao = strValue
end property

public property get Descricao()
Descricao = strDescricao
end property
'#endregion Propriedade Descrição

'Destrutor da classe.
private sub class_Terminate()
end sub

'Fim da classe Modelo.
end class
>

Agora, temos uma classe quase decente, que pode ser utilizada para transporte de dados. Quase, pois falta o comentário. Porém, lembre-se, nunca deve-se fazer códigos sem comentário. Fiz isto neste post, para não criar tantas linhas no post e por haver comentários explicativos na classe que são coisas que não escrevo em classes, mas, deve-se sempre já colocar os comentários.

Porém, ainda não acabamos, vou colocar um procedimento (não tem retorno) e uma função (tem retorno) que são conceitos antigos de linguagens antigas, porém, tenho que colocar no exemplo por estar falando do ASP.

<%
'Início da classe Modelo.
class Modelo

'Atributos públicos da classe.
private strNome
private strDescricao

'Construtor da classe.
private sub class_Initialize()
end sub

'#region Propriedade Nome
public property let Nome(strValue)
strNome = strValue
end property

public property get Nome()
Nome = strNome

end property
'#endregion Propriedade Nome

'#region Propriedade Descrição
public property let Descricao(strValue)
strDescricao = strValue
end property

public property get Descricao()
Descricao = strDescricao

end property
'#endregion Propriedade Descrição


'Exemplo de Função
public function QualquerCoisa()
QualquerCoisa = "QualquerCoisa"
end function

'Exemplo de Procedimento ou Sub
public sub QualquerCoisaSemRetorno()
response.write ("QualquerCoisaSemRetorno")
end sub

'Destrutor da classe.
private sub class_Terminate()
end sub

'Fim da classe Modelo.
end class

>

Agora, temos todas as possibilidades que vislumbro neste momento que podem existir em uma classe.

Vamos fazer os comentários certos e retirar os que fiz para os leitores entenderem.

<%
'/**
'* @description Transporte de Modelo
'*
'* @author David B S Ribeiro
'* @access public
'* @package br.com.mdstecnologia.modelo.asp.modelo
'*/
class Modelo

private strNome
private strDescricao

'/**
'* @description Construtor padrão
'* @author David B S Ribeiro
'* @access private
'*/
private sub class_Initialize()
end sub

'#region Propriedade Nome

'/**
'* @description Configura o Nome do Modelo
'*
'* @author David B S Ribeiro
'* @access public
'*/
public property let Nome(strValue)
strNome = strValue
end property

'/**
'* @description Recupera o Nome do Modelo
'*
'* @author David B S Ribeiro
'* @package br.com.mdstecnologia.modelo.asp.modelo
'* @access public
'*/
public property get Nome()
Nome = strNome
end property
'#endregion Propriedade Nome

'#region Propriedade Descrição
'/**
'* @description Configura a Descrição do Modelo
'*
'* @author David B S Ribeiro
'* @access public
'*/
public property let Descricao(strValue)
strDescricao = strValue
end property

'/**
'* @description Recupera a Descrição do Modelo
'*
'* @author David B S Ribeiro
'* @access public
'*/
public property get Descricao()
Descricao = strDescricao
end property
'#endregion Propriedade Descrição

'/**
'* @description Retorna a string "QualquerCoisa"
'* @author David B S Ribeiro
'* @access public
'* @return A string "QualquerCoisa"
'*/
public function QualquerCoisa()
QualquerCoisa = "QualquerCoisa"
end function

'/**
'* @description Escreve no HTML "QualquerCoisaSemRetorno"
'* @author David B S Ribeiro
'* @access public
'*/
public sub QualquerCoisaSemRetorno()
response.write ("QualquerCoisaSemRetorno")
end sub

'/**
'* @description Destrutor
'* @author David B S Ribeiro
'* @access private
'*/
private sub class_Terminate()
end sub

'Fim da classe Modelo.
end class
>

Agora sim, podemos dizer que finalizamos nossa classe.

Mas, como referencia-la? Segue o exemplo abaixo:

<%
dim objModelo
set objModelo = new Modelo

objModelo.QualquerCoisaSemRetorno()
%>

Gostaria de mandar agradecimentos para Olavo Alexandrino por ter pesquisado estas informações uns anos atrás (classes em ASP) e para Leonardo Postachini e Mario Valentim por terem me ensinado um pouco mais de OO.

É isto pessoal. Bom estudo.

2 comentários:

Rix disse...

Então... como eu faço para uma página asp reconhecer a existência da classe em outra página? Se eu fizer apenas o que foi recomendado no artigo, recebo erro de classe não definida.
Obrigado.

txai.online disse...

Eu tenho uma pagina com varias funções que uso como incude, mas esta pg esta chegando a 5mil linhas, seria interessante agrupar essas funções em classes e chamar separadamente?

 

©2007 - 2010 Escovando Bytes | Template Blue by TNB