??ASP é uma tecnologia dinâmica de programação de páginas da Web introduzida pela Microsoft em um estágio inicial. No entanto, sua capacidade de combinar ADO para fornecer acesso conveniente e rápido a bancos de dados e outras tecnologias como XML, COM/ActiveX, etc. a estrutura multicamadas do servidor faz com que ele ainda tenha uma forte vitalidade hoje e ainda tenha certo desenvolvimento. Embora o ASP.Net seja completamente diferente do ASP em arquitetura, muitos de seus objetos integrados também são estendidos com base no ASP. Existem inúmeros artigos apresentando ASP na Internet, mas poucos introduzem ASP orientado a objetos e o comparam com outras linguagens.
“Por ser uma versão inicial, o ASP fornece apenas uma interface orientada a objetos muito fraca. Como todos sabemos, a linguagem de implementação do ASP é dividida em VBScript e JavaScript/JScript: No VBScript, existe a palavra-chave Class, que pode ser usada para declarar uma classe customizada, é estranho, ela usa uma função para "declarar"; a classe e, em seguida, na função Aqui, as propriedades são definidas por meio de this.prototype e os métodos são definidos por meio de this.func. A discussão aqui se concentrará no VBScript. A declaração de classe do VBScript é a seguinte:
??Nome da classe
?? declarações
??Fim da aula
??Você pode declarar membros públicos ou privados em declarações aqui, incluindo funções, membros e propriedades. Em relação aos atributos, tenho que elogiar os métodos get e set da Microsoft. Esse conceito que apareceu no COM foi usado até .Net. Pessoalmente, acho que para programadores é melhor usar getProp() e setProp() do que Java. muito mais conveniente e intuitivo obter o mesmo efeito de uma maneira.
??Em comparação, as classes em VBScript são diferentes das classes em PHP4 (é claro que não são comparáveis ao PHP5 mais recente). As classes em VBScript mantêm os "recursos" incompletos de orientação a objetos do VB. básico Construtores/destruidores básicos, funções-membro, variáveis, propriedades e até mesmo construtores não podem receber parâmetros. No PHP4, propriedades importantes de classes, como herança e sobrecarga de funções, também são realizadas. Somente quando estas são realizadas ele pode ser chamado de orientado a objetos e pode fornecer uma base para a realização do polimorfismo. Mas nenhum deles implementa funções como membros estáticos da classe. Embora algumas outras modificações possam ser usadas para obter o mesmo efeito, da perspectiva orientada a objetos, isso está incompleto (porque o PHP é muito flexível, no PHP4, variáveis estáticas de uma classe podem ser implementadas indiretamente através de variáveis estáticas de funções de membro; e " ::" - operador que pode implementar o acesso à função estática de uma classe - não há verificação estrita no PHP4. Em outras palavras, todas as funções membro podem ser acessadas como funções estáticas, desde que você não use variáveis membro na função. Nenhum erro. O VBScript não implementa estática e só pode ser implementado usando Sessão ou Aplicativo). Portanto, em uso normal, você pode usar classes personalizadas do VBScript para encapsular algumas operações, mas não espere que elas sirvam às suas ideias orientadas a objetos, como C++/Java/.Net.
??VBScript também promove o bom estilo em VB de que os parâmetros ou variáveis padrão são referências. Dessa forma, embora a linguagem Script não seja sensível ao tipo, ela também pode obter o mesmo efeito de ponteiros/referências em C/C++ e realizar muitas coisas. O mais básico, por exemplo, use-o para definir a classe de nó ListNode de uma lista:
<%
Classe ListNode
Conteúdo Público
NextNode público
Subclasse privada_Initialize()
Conteúdo="Nó"
Definir NextNode=Nada
Finalizar sub
Fim da aula
%>
??Haha, é simples assim, mas não sinta desprezo e não se esqueça de inicializar as variáveis. É semelhante em VB, basta adicionar o tipo ao declarar. E ao usar:
<%
Definir nh = novo ListNode
Definir nh.NextNode = novo ListNode
'Outras declarações...
'Percorre a lista
Definir n=nh
Embora não seja nada
Resposta.Write n.Content+"<br />"
Definir n=n.NextNode
Wend
%>
??Se nenhum outro código for adicionado, o resultado da execução acima será de dois "nós". O mesmo vale para classes e objetos personalizados do VBScript. Contanto que você domine os conceitos básicos e tenha um certo entendimento sobre eles, não poderia ser mais fácil. Novamente, usar a instrução Set para atribuir um valor a um objeto é equivalente à atribuição em Java, que é obter uma referência. Isso é muito melhor do que a atribuição de objeto padrão no PHP4, que chama o construtor de cópia para criar um novo objeto (até mesmo uma instrução como obj=new Obj; criará dois objetos! Se você deseja obter uma referência, você deve colocar a variável depois o sinal de igual é exibido com &) antes dele, e parece que o PHP5 não deseja modificar esta abordagem do PHP4.
A própria sessão em ASP pode armazenar objetos. Ela pode salvar variáveis básicas, arrays, objetos de automação (Objetos de Automação), etc., mas encontrará problemas ao armazenar objetos de classes personalizadas. Como o seguinte código:
<%
Se isempty(Session("node")) Então defina Session("node")=New ListNode
Definir n=Sessão("nó")
Resposta.Escrever n.Conteúdo
%>
??Ainda a classe ListNode acima, este código tem como objetivo reter apenas um objeto ListNode em uma sessão de usuário. Portanto, quando o usuário visitar a página pela primeira vez, um objeto de ListNode será gerado e salvo na Sessão ("nó"); quando o usuário visitar a página posteriormente, pois a Sessão ("nó") não está vazia, ela não gerará um novo objeto, mas recuperará o objeto salvo da Sessão ("nó"). Teoricamente, 100 também deveria ser gerado, mas aí vem o problema, o ASP continua relatando um erro:
??Erro de tempo de execução do Microsoft VBScript '800a01b6'
??O objeto não suporta esta propriedade ou método: 'n.Content'
??Usar n.Type também causará erros. O mesmo código é traduzido para PHP e executado com sucesso. Por que?
??Após análise pessoal, acho que é correto que a Sessão possa salvar objetos, mas o mecanismo de conversão de tipo no VBScript é muito fraco e não há conversão de tipo forçada explícita para os usuários usarem, então a Sessão ("nó") não pode ser convertido corretamente para o tipo ListNode. Por ser uma classe customizada, só podemos ter a instrução de definição da classe em cada página. Desta forma, na perspectiva do ASP, toda vez que esta página é lida, a classe ListNode é uma nova classe, portanto não. reconhecer a classe no objeto Session desta classe.
??Conclusão: Procure não utilizar Session ou Application para armazenar objetos de classes customizadas em ASP. Se você realmente precisar, você pode considerar usar COM para escrever a classe e, em seguida, usar: Set Session("obj") = Server.CreateObject("YourApp.YourClass") em VBScript para criar um objeto, e então você pode conseguir as funções previstas acima.