ASP es una tecnología de programación de páginas web dinámica introducida por Microsoft en una etapa temprana. Sin embargo, su capacidad de combinar ADO para proporcionar un acceso conveniente y rápido a bases de datos y otras tecnologías como XML, COM/ActiveX, etc. La estructura de múltiples capas del servidor hace que todavía tenga una fuerte vitalidad y todavía tenga cierto desarrollo. Aunque ASP.Net es completamente diferente de ASP en arquitectura, muchos de sus objetos integrados también se extienden en función de ASP. Hay innumerables artículos que presentan ASP en Internet, pero pocos presentan ASP orientado a objetos y lo comparan con otros lenguajes. Por eso decidí escribir este artículo.
??Por ser una versión temprana, ASP sólo proporciona una interfaz orientada a objetos muy débil. Como todos sabemos, el lenguaje de implementación de ASP se divide en VBScript y JavaScript/JScript: en VBScript, existe la palabra clave Class, que se puede usar para declarar una clase personalizada. JavaScript es extraño, usa una función para "declarar"; la clase, y luego en la función Aquí, las propiedades se definen a través de this.prototype y los métodos se definen a través de this.func. La discusión aquí se centrará en VBScript. La declaración de clase de VBScript es la siguiente:
??Nombre de la clase
?? declaraciones
??Finalizar clase
Aquí puede declarar miembros públicos o privados en declaraciones, incluidas funciones, miembros y propiedades. En cuanto a los atributos, tengo que elogiar los métodos get y set de Microsoft. Este concepto que apareció en COM se ha utilizado hasta .Net. Personalmente creo que para los programadores es mejor usar getProp() y setProp() que Java. Mucho más conveniente e intuitivo para lograr el mismo efecto de una manera.
??En comparación, las clases en VBScript son diferentes de las clases en PHP4 (por supuesto, no son comparables al último PHP5. Las clases en VBScript mantienen las "características" orientadas a objetos incompletas de VB. Solo implementa la mayoría). basic Los constructores/destructores básicos, las funciones miembro, las variables, las propiedades e incluso los constructores no pueden aceptar parámetros. En PHP4, también se implementan propiedades importantes de clases como la herencia y la sobrecarga de funciones. Solo cuando se implementan se puede llamar orientado a objetos y puede proporcionar una base para realizar el polimorfismo. Pero ninguno de ellos implementa funciones como miembros estáticos de la clase. Aunque se pueden usar algunas otras modificaciones para lograr el mismo efecto, desde la perspectiva orientada a objetos, esto es incompleto (debido a que PHP es muy flexible, en PHP4, las variables estáticas de una clase se pueden implementar indirectamente a través de variables estáticas de funciones miembro; y " ::" - operador que puede implementar el acceso a funciones estáticas de una clase; no existe una verificación estricta en PHP4. En otras palabras, se puede acceder a todas las funciones miembro como funciones estáticas, siempre que no se utilicen variables miembro en la función. No hay error. VBScript no implementa estática en absoluto y solo se puede implementar mediante Sesión o Aplicación). Entonces, en uso normal, puede usar las clases personalizadas de VBScript para encapsular algunas operaciones, pero no espere que sirva para sus ideas orientadas a objetos como C++/Java/.Net.
??VBScript también promueve el buen estilo en VB de que los parámetros o variables predeterminados son referencias. De esta manera, aunque el lenguaje Script no es sensible al tipo, también puede lograr el mismo efecto de punteros/referencias en C/C++ y lograr muchas cosas. El más básico, por ejemplo, úsalo para definir la clase de nodo ListNode de una lista:
<%
Nodo de lista de clases
Contenido público
Público NextNode
Privado Sub Class_Initialize()
Contenido="Nodo"
Establecer NextNode = Nada
Subtítulo final
Fin de clase
%>
??Jaja, así de simple, pero no sientas desprecio y no olvides inicializar las variables. Es similar en VB, solo agregue el tipo al declarar. Y al usar:
<%
Establecer nh = nuevo ListNode
Establecer nh.NextNode=nuevo ListNode
'Otras declaraciones...
'Recorrer la lista
Establecer n=nh
Mientras que No n es Nada
Respuesta.Escribir n.Contenido+"<br />"
Establecer n=n.NextNode
Encaminarse a
%>
??Si no se agrega ningún otro código, el resultado de ejecución anterior son dos "nodos". Lo mismo ocurre con las clases y objetos personalizados de VBScript. Siempre que domines los conceptos básicos y tengas cierta comprensión de ellos, no podría ser más fácil. Nuevamente, usar la declaración Set para asignar un valor a un objeto es equivalente a la asignación en Java, que consiste en obtener una referencia. Esto es mucho mejor que la asignación de objetos predeterminada en PHP4 que llama al constructor de copia para crear un nuevo objeto (incluso una declaración como obj=new Obj; ¡creará dos objetos! Si desea obtener una referencia, debe colocar la variable después el signo igual se muestra con &) delante, y parece que PHP5 no quiere modificar este enfoque de PHP4.
La sesión en sí en ASP puede almacenar objetos. Puede guardar variables básicas, matrices, objetos de automatización (Objetos de automatización), etc., pero encontrará problemas al almacenar objetos de clases personalizadas. Como el siguiente código:
<%
Si está vacío (Sesión ("nodo")), establezca la sesión ("nodo") = Nuevo nodo de lista
Establecer n=Sesión("nodo")
Respuesta.Escribir n.Contenido
%>
??Aún siendo la clase ListNode anterior, este código está destinado a retener solo un objeto ListNode en una sesión de usuario. Por lo tanto, cuando el usuario visita la página web por primera vez, se generará un objeto de ListNode y se guardará en la Sesión ("nodo" cuando el usuario visite la página web más tarde, porque la Sesión ("nodo") no está vacía; no generará un nuevo objeto, pero recuperará el objeto guardado de la sesión ("nodo"). En teoría, también debería aparecer 100, pero aquí viene el problema: ASP sigue informando un error:
??Error de tiempo de ejecución de Microsoft VBScript '800a01b6'
??El objeto no admite esta propiedad o método: 'n.Content'
??El uso de n.Type también provocará errores. El mismo código se traduce a PHP y se ejecuta correctamente. ¿Por qué?
Después de un análisis personal, creo que es correcto que Session pueda guardar objetos, pero el mecanismo de conversión de tipos en VBScript es demasiado débil y no existe una conversión de tipos forzada explícita para que la utilicen los usuarios, por lo que Session ("nodo") no puede ser convertido correctamente al tipo ListNode. Debido a que es una clase personalizada, solo podemos tener la declaración de definición de la clase en cada página. De esta manera, desde la perspectiva de ASP, cada vez que se lee esta página, la clase ListNode es una clase nueva, por lo que no es así. reconocer la clase en el objeto de sesión de esta clase.
??Conclusión: Intente no utilizar Sesión o Aplicación para almacenar objetos de clases personalizadas en ASP. Si realmente lo necesita, puede considerar usar COM para escribir la clase y luego usar: Set Session("obj") = Server.CreateObject("YourApp.YourClass") en VBScript para crear un objeto, y luego podrá lograr las funciones previstas anteriormente.