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
'*/
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:
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.
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?
Postar um comentário