Лекция: Непроцедурные языки

Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.

Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.

Табличные методы легко осваиваются специалистами любых профессий.

Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.

__________________________

Базы данных (БД) – это данные, организованные в виде набора записей определенной структуры и хранящиеся в файлах, где, помимо самих данных, содержится описание их структуры.

Система управления базами данных (СУБД) – система, обеспечивающая ввод данных в БД, их хранение и восстановление в случае сбоев, манипулирование данными, поиск и вывод данных по запросу пользователя.

По моделям представления, базы данных делятся на:

— иерархические;

— сетевые;

— реляционные;

— объектно-реляционные.

Иерархические базы данных – это самая первая модель представления данных, в которой все записи базы данных представлены в виде дерева, с соотношением предок-потомок (рис. 30).

Фактически данные отношения реализуются в виде указателей на предков и потомков, содержащихся в самой записи. Такая модель представления данных связана с тем, что на ранних этапах, базы данных часто использовались для планирования производственного процесса: каждое выпускаемое изделие состоит из узлов, каждый узел из деталей и т.д.

Для того, чтобы знать сколько деталей каждого вида надо заказать, строилось дерево. Поскольку список составных частей изделия представлял собой дерево, то для его хранения в базе данных наилучшим образом подходила иерархическая модель организации данных.

Рис. 30. Иерархическая база данных.

Однако иерархическая модель не является оптимальной. Допустим, что один и тот же тип болтов используется в автомобиле 300 раз в различных узлах. При использовании иерархической модели, данный тип болтов будет фигурировать в базе данных 1 раз, а 300 раз (в каждом узле — отдельно). В данном случае, будет прослеживаться дублирование информации. Чтобы устранить этот недостаток была введена сетевая модель представления данных.

Сетевая база данных – это база данных, в которой одна запись может участвовать в нескольких отношениях предок-потомок (рис. 31). Т.е. фактически, база данных представляет собой не дерево, а граф.

Рис. 31. Сетевая база данных.

Физически данная модель также реализуется за счет хранящихся внутри самой записи указателей на другие записи, только, в отличие от иерархической модели, число этих указателей может быть произвольным.

И иерархическая и сетевая модели достаточно просты, однако они имеют общий недостаток: для того, чтобы получить ответ даже на простой вопрос, программист должен был написать программу, которая просматривала базу данных, двигаясь по указателям от одной записи к другой. Написание программы занимало некоторое время, и часто к тому моменту, когда такая программа была написана, необходимость в получении данных уже не требовалась. Поэтому в середине 80-х годов 20 века произошел практически повсеместный переход к реляционным базам данных.

В реляционной базе данных вся информации представляется в виде таблиц, и любые операции над данными – это операции над таблицами. Таблицы строят из строк и столбцов. Строки – это записи, а столбцы представляют собой структуру записи (каждый столбец имеет определенный тип данных и длину данных). Строки в таблице не упорядочены – не существует первой или десятой строки. Однако поскольку на строки необходимо как-то ссылаться, то вводится понятие «первичный ключ».

Первичный ключ – это столбец, значение которого во всех строках разные. Используя первичный ключ, можно однозначно ссылаться на любую строку таблицы. Первичный ключ может состоять и из нескольких столбцов (составной первичный ключ).

Некоторые СУБД требуют в явном виде указать первичный ключ таблицы, а некоторые позволяют пользователю не задавать для таблицы первичный ключ – в таком случае СУБД сама добавляет в таблицу столбец – первичный ключ, не отображаемый на экране (так, например, в СУБД Oracle у любой таблицы существует псевдо-столбец ROWID, формируемый Oracle, который содержит уникальный адрес каждой строки). Отношения предок-потомок в реляционных БД реализуются при помощи внешних ключей.

Внешний ключ – это столбец таблицы, значения которого совпадают со значениями первичного ключа некоторой другой таблицы.

Так, например, на рис. 32 столбец «Ответственный» таблицы «Мероприятия» является внешним ключом для таблицы «Сотрудники» (первичный ключ – столбец «Фамилия»).

Рис. 32. Отношения предок-потомок в реляционных базах данных.

Важным моментом является также использование значения NULL в таблицах реляционной базе данных. NULL – это отсутствующее значение, отсутствие информации по данной позиции. Не допускается использование 0 или пробела вместо NULL: понятно, что «нулевой» объем продаж – это не тоже самое, что «неизвестный» объем продаж. По этой же причине, ни одно значение NULL не равно другому значению NULL. В реляционной базе данных, при запросах, группировке, сравнениях, и т.д., значения NULL обрабатываются особым образом.

Объектно-реляционные базы данных появились в последнее время у значительного числа производителей СУБД (Oracle, Informix, PostgreSQL) и сочетают в себе реляционную модель данных с концепциями объектно-ориентированного программирования (полиморфизм, инкапсуляция, наследование).

_____________________________

Macromedia Dreamweaver 8 — профессиональный редактор HTML для проектирования, написания кода и поддержки сайтов, web-страниц и приложений сети. Практикуете ли вы написание кода HTML вручную или предпочитаете работать в визуальной среде редактирования, Dreamweaver обеспечивает вас полезными инструментальными средствами, чтобы увеличить ваш опыт создания web-страниц и сайтов.

Визуальные возможности редактирования в Dreamweaver позволяют вам быстро создавать страницы без того, чтобы писать код вручную. Вы можете просматривать все ваши элементы сайта или активы и быстро вставлять их из панели непосредственно в документ. Вы можете упрощать ваши действия, создавая и редактируя изображения в Macromedia Fireworks или в другом графическом редакторе, затем импортируя их непосредственно в Dreamweaver или добавляя объекты Macromedia Flash.

Dreamweaver также обеспечивает полно-функциональную среду написания кода, которая включает инструментальные средства редактирования кода (например, раскраска кода или проверка закрытия тегов) и справочная информация по HTML, CSS, JavaScript, язык разметки ColdFusion (CFML), Microsoft Active Server Pages (ASP) и страницы JavaServer (JSP).

Технология Roundtrip HTML импортирует документы HTML без переформатирования кода и вы можете настроить Dreamweaver, чтобы он наводил порядок и переформатировал HTML как вы этого хотите без того, чтобы повторно форматировать код.

Dreamweaver также дает возможность вам строить динамические станицы использующие сервер-технологии CFML, ASP.NET, ASP, JSP и PHP.

Dreamweaver полностью настраиваемый. Используйте Dreamweaver, чтобы создавать свои собственные объекты и команды, изменять «горячие» клавиши и даже писать код JavaScript, чтобы расширять возможности Dreamweaver новыми свойствами, инспекторами свойств и новыми отчетами о сайте.

2. Модульность. Модули при структурном и объектно-ориентированном подходе. Отношения между сущностями в объектно-ориентированном проектировании.

3. Обработка текстовой информации с использованием визуальных, сетевых языков и серверного скрипта PHP.

4. Обработка графической информации с использованием визуальных, сетевых языков и серверного скрипта PHP.

5. Обработка математической информации с использованием визуальных, сетевых языков и серверного скрипта PHP.

6. Развёртывание и поиск информации в XML-документах с помощью XML DOM.

Задача
Необходимо проанализировать XML-файл с помощью DOM API. Он преобразует файл в дерево, которое можно обработать, применяя функции DOM. DOM позволяет без труда найти и извлечь элементы, удовлетворяющие определенному набору критериев.

Решение
Для этого надо прибегнуть к PHP-расширению DOM XML. Ниже показано, как читать XML из файла:

$dom = domxml_open_file('books.xml');
Теперь приведем пример чтения XML из переменной:
$dom = domxml_open_mem($books);

Можно также извлекать один конкретный узел. Следующее выражение демонстрирует чтение корневого узла:

$root = $dom->document_element();

Приведем пример обработки всех узлов документа с помощью рекурсии типа «сначала вглубь»:

function process_node($node) {
if ($node->has_child_nodes()) {
foreach($node->child_nodes() as $n) {
process_node($n);
}
}
// обработка элементов нижнего уровня
if ($node->node_type() == XML_TEXT_NODE) {
$content = rtrim($node->node_value());
if (!empty($content)) {
print "$content\n";
}
}
}
process_node($root);

Обсуждение
DOM W3C предоставляет независимую от платформы и языка технологию описания структуры и содержимого документа. DOM позволяет прочитать документ XML в дерево узлов, а затем перемещаться по дереву для поиска информации об определенном элементе или группе элементов, удовлетворяющей критерию поиска. Подобный способ называется анализом на основе дерева. В отличие от него, функции XML, не основанные на DOM, позволяют проводить анализ на основе событий.

Кроме того, можно модифицировать структуру документа путем создания, редактирования и удаления узлов. Фактически можно использовать функции DOM XML для создания нового XML-документа (и его элементов) с нуля.

Одним из главных преимуществ DOM является то, что, следуя спецификации W3C, функции DOM во многих языках реализуются одинаковым образом. Поэтому работа по переносу логики и инструкций из одного приложения в другое значительно упрощается. Версия PHP 4.3 поставляется с обновленным комплектом функций, более строго согласованным со стандартом DOM, чем в предыдущих версиях PHP. Однако эти функции согласованы еще не на 100%. Будущие версии PHP должны будут обеспечить более точное совмещение. При этом некоторые приложения могут оказаться неработоспособными и потребовать
незначительной доработки. Чтобы больше узнать о производимых изменениях, обратитесь к материалам по DOM XML онлайн-версии руко-одства по PHP по адресу www.php.net/domxml. Функции более ранних версий PHP по-прежнему доступны, но их применение очень
не одобряется.

Модель DOM большая и сложная. Более подробную информацию ищите в спецификации на www.w3.org/DOM/, книге «XML in a Nutshell» и на форумах, посвященных DOM.
Для DOM-анализа в PHP используется модуль libxml, разработанный для проекта Gnome. Загрузить его можно с адреса www.xmlsoft.org. Для подключения этого модуля сконфигурируйте PHP с опцией --with-dom.

Функции DOM в PHP объектно-ориентированны. Чтобы перемещаться от узла к узлу, вызывайте такие методы, как $node->child_nodes(), который возвращает дочерние объекты-узлы, и $node->parent_node(), возвращающий объект родительского узла. При обработке узла проверьте его тип и вызовите соответствующий метод:

// $node — это проанализированный с помощью DOM
// узел PHP Cookbook
$type = $node->node_type();
switch($type) {
case XML_ELEMENT_NODE:
// Я – тег. У меня есть свойство «имя тега».
print $node->node_name(); // печатает свойство имя тега: «book»
print $node->node_value(); // null
break;
case XML_ATTRIBUTE_NODE:
// Я – атрибут. У меня есть пара свойств «имя-значение».
print $node->node_name(); // печатает свойство имя: «cover»
print $node->node_value(); // печатает свойство значение: «soft»
break;
case XML_TEXT_NODE:
// Я – часть текста внутри элемента.
// У меня есть свойства имя и содержание.
print $node->node_name(); // печатает свойство имя: "#text"
print $node->node_value(); // печатает свойство содержание:
// «PHP Cookbook»
break;
default:
// другой тип
break;
}

Для автоматического поиска определенного элемента в дереве DOM используйте функцию get_elements_by_tagname(). Ниже показано, как это сделать в случае нескольких записей book:

 

<title>PHP Cookbook</title>
SklarTrachtenberg
<subject>PHP</subject>


<title>Perl Cookbook</title>
Christiansen
Torkington
<subject>Perl</subject>

 

Следующий фрагмент демонстрирует, как найти всех авторов:

// находим и печатаем всех авторов
$authors = $dom->get_elements_by_tagname('author');
// выполняем цикл по элементам автор
foreach ($authors as $author) {
// метод child_nodes() извлекает значения элементов автор
$text_nodes = $author->child_nodes();
foreach ($text_nodes as $text) {
print $text->node_value();
}
print "\n";
}

Функция get_elements_by_tagname() возвращает массив объектов узлов указанного элемента. Выполняя цикл по каждому потомку элемента, можно извлечь текстовый узел, связанный с этим элементом. Теперь можно получить значения узлов, которыми в данном случае являются имена авторов книг, например Sklar и Trachtenberg.

 

еще рефераты
Еще работы по информатике