ASP — это технология программирования динамических веб-страниц, представленная Microsoft на ранней стадии. Однако ее способность сочетать ADO для обеспечения удобного и быстрого доступа к базам данных и другие технологии, такие как XML, COM/ActiveX и т. д., позволяют реализовать эту технологию. Многоуровневая структура сервера позволяет ему по-прежнему сохранять свою жизнеспособность и иметь определенное развитие. Хотя ASP.Net полностью отличается от ASP по архитектуре, многие из его встроенных объектов также расширены на основе ASP. В Интернете можно найти бесчисленное множество статей, посвященных ASP, но лишь немногие рассказывают об объектно-ориентированном языке ASP и сравнивают его с другими языками. Вот почему я решил написать эту статью.
«Поскольку это ранняя версия, ASP предоставляет лишь очень слабый объектно-ориентированный интерфейс. Как мы все знаем, язык реализации ASP разделен на VBScript и JavaScript/JScript: в VBScript есть ключевое слово Class, которое можно использовать для объявления пользовательского класса; JavaScript странен, он использует функцию для «объявления»; класс, а затем в функции. Здесь свойства определяются через this.prototype, а методы определяются через this.func. Обсуждение здесь будет сосредоточено на VBScript. Объявление класса VBScript выглядит следующим образом:
??Имя класса
?? заявления
??Конец урока
??Здесь вы можете объявить в операторах публичные или частные члены, включая функции, члены и свойства. Что касается атрибутов, я должен похвалить методы Microsoft get и set. Эта концепция, появившаяся в COM, использовалась до .Net. Лично я считаю, что для программистов лучше использовать getProp() и setProp(), чем Java. гораздо удобнее и интуитивно понятнее добиться того же эффекта одним способом.
Для сравнения, классы в VBScript отличаются от классов в PHP4 (конечно, они не сравнимы с последней версией PHP5). Классы в VBScript поддерживают неполные объектно-ориентированные «функции» VB. В них реализована только большая часть. базовые конструкторы/деструкторы Basic, функции-члены, переменные, свойства и даже конструкторы не могут принимать параметры. В PHP4 также реализованы важные свойства классов, такие как наследование и перегрузка функций. Только когда они реализованы, его можно назвать объектно-ориентированным и обеспечить основу для реализации полиморфизма. Но ни один из них не реализует такие функции, как статические члены класса. Хотя для достижения того же эффекта можно использовать и некоторые другие модификации, с объектно-ориентированной точки зрения это неполно (поскольку PHP очень гибок, в PHP4 статические переменные класса могут быть косвенно реализованы через статические переменные функций-членов; и «::» — оператор, который может реализовать доступ к статической функции класса — в PHP4 нет строгой проверки. Другими словами, ко всем функциям-членам можно обращаться как к статическим функциям, если вы не используете переменные-члены в функции. Нет ошибок. VBScript вообще не реализует статику и может быть реализован только с использованием сеанса или приложения). Таким образом, при обычном использовании вы можете использовать специальные классы VBScript для инкапсуляции некоторых операций, но не ждите, что они будут служить вашим объектно-ориентированным идеям, таким как C++/Java/.Net.
VBScript также способствует хорошему стилю VB, согласно которому параметры или переменные по умолчанию являются ссылками. Таким образом, хотя язык Script не является чувствительным к типам, он также может достигать того же эффекта указателей/ссылок в C/C++ и выполнять множество задач. Самый простой из них, например, использует его для определения класса узла ListNode списка:
<%
Список классовNode
Публичный контент
Публичный NextNode
Частный подкласс_Initialize()
Контент="Узел"
Установить NextNode=Ничего
Конец субтитра
Конечный класс
%>
??Ха-ха, это так просто, но не презирайте и не забудьте инициализировать переменные. В VB то же самое, просто добавьте тип при объявлении. И при использовании:
<%
Установить nh=новый ListNode
Установите nh.NextNode=новый ListNode
«Другие заявления...
'Пройти по списку
Установить n=nh
Пока нет, это ничего
Ответ.Напишите n.Content+"<br />"
Установить n=n.NextNode
Венд
%>
??Если никакой другой код не добавлен, приведенный выше результат выполнения — два «узла». То же самое касается пользовательских классов и объектов VBScript. Если вы освоили основные понятия и имеете определенное понимание, это не может быть проще. Опять же, использование оператора Set для присвоения значения объекту эквивалентно присваиванию в Java, которое заключается в получении ссылки. Это намного лучше, чем назначение объекта по умолчанию в PHP4, которое вызывает конструктор копирования для создания нового объекта (даже такой оператор, как obj=new Obj; создаст два объекта! Если вы хотите получить ссылку, вы должны поместить переменную после знак равенства отображается с помощью &) перед ним, и кажется, что PHP5 не хочет изменять этот подход PHP4.
Сама сессия в ASP может хранить объекты. Она может сохранять базовые переменные, массивы, объекты автоматизации (Automation Objects) и т. д., но при хранении объектов пользовательских классов возникают проблемы. Например, следующий код:
<%
Если isempty(Session("node")), то Set Session("node")=New ListNode
Set n=Session("узел")
Ответ.Напишите n.Содержимое
%>
Этот код, как и класс ListNode, описанный выше, предназначен для сохранения только одного объекта ListNode в сеансе пользователя. Таким образом, когда пользователь посещает веб-страницу в первый раз, объект ListNode будет создан и сохранен в сеансе («узел»); когда пользователь посетит веб-страницу позже, поскольку сеанс («узел») не пуст, он не пуст. не будет генерировать новый объект, а получит сохраненный объект из сеанса («узел»). По идее, тоже должно быть выведено 100, но тут возникает проблема, ASP продолжает сообщать об ошибке:
??Ошибка выполнения Microsoft VBScript «800a01b6»
??Объект не поддерживает это свойство или метод: 'n.Content'
??Использование n.Type также приведет к ошибкам. Тот же код переводится на PHP и успешно выполняется. Почему?
??После личного анализа я считаю правильным, что сеанс может сохранять объекты, но механизм преобразования типов в VBScript слишком слаб, и нет явного принудительного преобразования типов, которое могли бы использовать пользователи, поэтому сеанс («узел») не может быть правильно преобразован в тип ListNode. Поскольку это пользовательский класс, мы можем иметь только оператор определения класса на каждой странице. Таким образом, с точки зрения ASP, каждый раз, когда эта страница читается, класс ListNode является новым классом, поэтому он не является таковым. распознать класс в объекте Session этого класса.
Вывод: старайтесь не использовать сеанс или приложение для хранения объектов пользовательских классов в ASP. Если вам это действительно нужно, вы можете рассмотреть возможность использования COM для написания класса, а затем использовать: Set Session("obj") = Server.CreateObject("YourApp.YourClass") в VBScript для создания объекта, и тогда вы сможете добиться функции, предусмотренные выше.