686 ИНДЕКСЫ ДРУГИХ КЛАССИФИКАЦИЙ

Определение

Поле содержит индекс или ряд индексов общеизвестных систем классификации, обычно не применяемых в международной практике. Индекс(ы) соответствует заголовку авторитетной / нормативной записи. Система классификации идентифицируется в подполе $2. Коды системы классификации см. Приложение G к Российскому коммуникативному формату.

Наличие

Факультативное.

Повторяется.

Индикаторы

Индикаторы не определены, проставляются пробелы (##).

 

Подполяю Таблица 19

Идентификатор подполя Подполе Примечание
$a Индекс, отдельный или начальный в ряду НП
$b Индекс, конечный в последовательности НП
$c Поясняющие слова П
$2 Код системы предметизации НП

Взаимосвязанные документы

РОССИЙСКИЙ КОММУНИКАТИВНЫЙ ФОРМАТ ПРИЛОЖЕНИЕ G :"КОДЫ СИСТЕМ"

689 БИБЛИОТЕЧНО-БИБЛИОГРАФИЧЕСКАЯ КЛАССИФИКАЦИЯ (ББК) (предварительное)

Определение

Поле содержит классификационный индекс / индексы Библиотечно-библиографической классификации, соответствующие тематике заголовка в поле блока 2--.

Наличие

Факультативное.

Повторяется для составных индексов (соединенных знаком "+").

Индикаторы

Индикаторы не определены, проставляются пробелы (##).

Подполя. Таблица 20

Идентификатор подполя Подполе Примечание
$a Индекс ББК, отдельный или начальный в последовательности НП
$b Индекс ББК, конечный в последовательности НП
$c Поясняющие слова П
$v Сведения об изданиях ББК НП

$a индекс ББК, отдельный или начальный в последовательности

В подполе вносится простой индекс, сложный индекс (т.е. индекс, состоящий из комбинации индекса основных таблиц классификации с одним или несколькими индексами вспомогательных таблиц ББК) или начальная часть составного индекса, представляющего собой комбинацию индексов основных таблиц, соединенных знаком " : " (до знака " : ").

Не повторяется.

 

$b индекс ББК, конечный в последовательности

В подполе вносится заключительная часть составного индекса, представляющего собой комбинацию индексов основных таблиц, соединенных знаком " :" (после знака " : ").

Повторяется.

 

$c поясняющие слова

В подполе вносится слово или словосочетание, поясняющие наполнение классификационного индекса в подполях $a и $b. Как правило, это слово или словосочетание используется для дифференциации двух или более классификационных индексов, ассоциирующихся с заголовком в поле блока 2--.

Повторяется.

 

$v сведения об изданиях ББК

В подполе вносится название выпуска таблиц ББК, на основании которых построен классификационный индекс, записанный в подполях $a и $b (выпуск для научных библиотек, для массовых библиотек и т.д.). Название выпуска может вноситься либо полностью, либо в кодированной форме.

Не повторяется.

Примечание к содержанию поля

Составные индексы, представляющие собой комбинацию индексов, соединенных знаком "+", в поле не включаются. В случае, если содержанию заголовка соответствует такой составной индекс, каждая составная часть составного индекса записывается в отдельное повторение поля

КОНТРОЛЬНЫЕ ПОДПОЛЯ

Для дополнительной информации о заголовках в поле блока 2--, о справках и примечаниях в блоке 3--, для пояснений связей между принятыми заголовками или между принятым и отвергнутым заголовками, используются следующие подполя:

$0 Пояснительный текст

$2 Код системы предметизации

$3 Номер авторитетной / нормативной записи

$5 Управление формированием ссылок (контроль трассировки)

$6 Данные для связи полей

$7 Графика

$8 Язык заголовка

Эти подполя определены для всех полей блока заголовков 2--, блоков формирования ссылок 4-- и 5--, блока 7--, но их использование обусловлено определенными правилами. Никогда не приводятся в полях некоторых блоков. Отдельные подполя могут применяться также в полях блока примечаний 3--. Поскольку некоторые из контрольных подполей $0, $2, $3, $5, $6, $7, $8 в отдельных блоках не применяются, во вводных разделах к блокам указывается, какие контрольные подполя могут быть использованы. Эти подполя предшествуют всем другим подполям в поле.

$0 ПОЯСНИТЕЛЬНЫЙ ТЕКСТ

Определение

Подполе $0 содержит специальную текстовую информацию (хронологический аспект, др.), которая может выводиться на дисплей или печать ссылки. Пояснительный текст служит для представления заголовка поля блока 2-- в ссылке, генерируемой из полей блоков 4-- и 5--.

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

Пояснительный текст не заменяет функции блока 3--.

Примечание: Пояснительный текст служит для представления заголовка из поля блока 2-- в автоматически формируемой ссылке.

$2 КОД СИСТЕМЫ ПРЕДМЕТИЗАЦИИ

Определение

Подполе идентифицирует систему предметизации, к которой относится заголовок в поле блока 4-- или 5--, если она отличается от системы предметизации, указанной в поле 152 $b.

Как правило, предметная рубрика (в поле блока 2--) и ссылка (в полях блоков 4-- или 5--) являются частью системы предметизации, определяемой в поле 152 $b; в тех случаях, когда предметные рубрики взяты из других систем предметизации, предметные рубрики могут использоваться для обеспечения связи между системами.

Используется буквенный код переменной длины. Максимальная длина - 7 символов.

Код системы предметизации может использоваться в полях блоков 4--, 5--.

$3 НОМЕР ЗАПИСИ

Определение

Подполе идентифицирует запись, заголовок которой приведен в поле, к которому относится данное подполе. Подполе может использоваться в полях блоков 4-- и 5--, блока связанных заголовков 7--. Подполе $3 может использоваться также в поле блока 4--, когда оно содержит подполе $5, в первой позиции которого (код блокировки ссылки) приводится значение 0 - блокированная ссылка.

$5 УПРАВЛЕНИЕ ФОРМИРОВАНИЕМ ССЫЛОК (контроль трассировки)

Определение

Подполе содержит кодированные данные, относящиеся к использованию или выводу на экран дисплея или печать ссылок блоков 4-- и 5--, т.е. связи между принятыми или между принятым и вариантными заголовками. Данные приводятся в фиксированных позициях. Если заголовок в поле, к которому относится подполе $5, не нуждается в дополнительных инструкциях, подполе $5 не применяется.

Элементы данных. Таблица 21

 

Наименование элемента данных Кол-во символов Позиции символов
1 Код связи 1 0
2 Код блокировки ссылки 1 1

·        если требуется только указание связи, подполе $5 содержит лишь одну позицию символа (позиция 0), позиция 1 может опускаться

·        если требуется только указание кода блокировки ссылки, в позиции 1 указывается код блокировки ссылки, а в позиции 0 содержится символ-заполнитель

·        если требуются оба элемента - соответствующие значения приводятся в позициях 0 и 1

(1) Код связи (обязательный) (позиция символа 0)

Односимвольный буквенный код определяет связь между заголовком из полей блока 4-- или 5-- и заголовком в поле блока 2--. Код связи используется для автоматического генерирования пояснительного текста при выводе ссылки на экран дисплея или печать в соответствии с нижеприведенной таблицей.

Вывод пояснительного текста на экран дисплея не обязателен. Допустимо использование вместо него специальных знаков (см. п.11 Вывод на экран дисплея авторитетных / нормативных и ссылочных записей).

Код связи может применяться в полях ссылок блоков 4-- и 5--.

Определены следующие коды и их значения:

a = предыдущий заголовок (связанный заголовок, принятый до определенного времени)

b = последующий заголовок (связанный заголовок, принятый с определенного времени)

d = сокращение (сокращенное наименование или аббревиатура)

e = псевдоним

f = подлинное имя

g = более широкое понятие

h = более узкое понятие

z = другое (связь, не определяемая никаким из перечисленных выше кодов, например, от светской фамилии духовного лица, от девичьей фамилии, для заголовков коллективного автора: ссылка от города, ссылка от структурного подразделения, ссылки от других наименований коллектива и т.д.)

c = ассоциативное понятие (предварительный)

s = синоним (предварительный)

Примечание: коды c и s соответствуют коду z UNIMARC / AUTHORITIES

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

Код связи и его значение Пояснительный текст для ссылки из поля блока 4-- Пояснительный текст для ссылки из поля блока 5--
a = предыдущий заголовок см. последующий заголовок см. также последующий заголовок
b = последующий заголовок см. предыдущий заголовок см. также предыдущий заголовок
d = сокращение см. несокращенную форму см. также несокращенную форму
e = псевдоним см. подлинное имя см. также подлинное имя
f = подлинное имя см. псевдоним см. также псевдоним
g = более широкое понятие см. более узкое понятие см. также более узкое понятие
h = более узкое понятие см. более широкое понятие см. также более широкое понятие
z = другое см. см. также
c = ассоциативное понятие   см. также ассоциативное понятие
s = синоним см. дескриптор

 (2) Код блокировки ссылки

Односимвольный цифровой код, указывающий, что ссылка от вариантного заголовка не должна автоматически генерироваться из заголовков полей блока формирования ссылок "см." 4-- (т.к. существует самостоятельная ссылочная запись типа "y", включающая поле 310 ссылочное примечание "см.") и блока формирования ссылок "см. также" 5-- (т.к. существует примечание в поле 305, содержащее этот заголовок). В этих случаях предполагается, что при выводе на экран дисплея ссылка представлена только в форме примечания.

0 = блокированная ссылка

$6 ДАННЫЕ ДЛЯ СВЯЗИ ПОЛЕЙ

Определение

Подполе содержит информацию, позволяющую при обработке записи связывать одно поле с другими полями (например, с различной графикой). Предназначено для связи полей в одной записи. Два поля, между которыми устанавливается связь, должны содержать подполе $6 в соответствии с правилами, приведенными ниже. Подполе содержит также код мотивации связи. При использовании этого подполя первые два элемента приводятся всегда, третий элемент является факультативным. Подполе может использоваться в полях блока справок и примечаний 3-- и блоков формирования ссылок 4--, 5--.

Подполе может использоваться в полях блока информационных примечаний 3-- и блоков формирования ссылок 4--, 5--.

Для подполя $6 определены следующие элементы данных:

Элементы данных. Таблица 22

 

Наименование элемента данных Кол-во символов Позиции символов
1

Код мотивации связи - обязат.

1 0
2

Номер связи - обязат.

2 1-2
3 Метка связываемого поля 3 3-5

(1) Код мотивации связи (позиция символа 0)

Код определяет мотивацию связи полей.

a = альтернативная графика

z = другое

 

(2) Номер связи (позиции символов 1-2)

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

(3) Метка связываемого поля (позиции символов 3-5)

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

$7 ГРАФИКА

Определение

Подполе идентифицирует графику данных в поле, когда она отличается от графики, указанной в поле 100 (позиции символов 21-22).

Подполе может использоваться в полях блока заголовков 2--, блока справок и примечаний 3--, блоков формирования ссылок 4-- и 5--, блока 7--. В записи может приводиться более одного заголовка блока 2-- в повторяющихся полях. В этом случае поле блока 2-- для заголовка в альтернативной графике должно содержать подполе $7. Подробнее о методах обработки альтернативных график см. раздел Данные в альтернативной графике.

Наличие

Повторяется для заголовков, содержащих данные в различных графиках.

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

Используются следующие значения кода:

·        ba = латинская графика

·        ca = кириллица

·        da = японская - неопределенная графика

·        db = японская - каньи

·        dc = японская - кана

·        ea = китайская

·        fa = арабская

·        ga = греческая

·        ha = древнееврейская

·        ia = тайская

·        ja = деванагари

·        ka = корейская

·        la = тамильская

·        zz = другая

Если различные графики относятся к разным языкам, применяются правила обработки параллельных данных.

$8 ЯЗЫК ЗАГОЛОВКА

Определение

Подполе идентифицирует язык заголовка, если он (язык) отличается от языка каталогизации (языка ссылок, примечаний и т.д.), указанного в поле 100 (позиции 9-11). Подполе может использоваться в полях блоков заголовков 2--, блоков формирования ссылок 4-- и 5-- и блока связанных заголовков 7--. Если в подполе код языка не указывается, то по умолчанию считается, что язык заголовка, содержащегося в подполе $a данного поля, соответствует коду, приведенному в позициях 21-22 поля 100 данной записи.

Подробнее о языке заголовка см. раздел Параллельные данные.

Наличие

Повторяется для заголовка, содержащего данные на разных языках.

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


Приложение 2

 Спецификация языка Java

П2.1 Основные особенности П2.1.1. Введение

Язык хорош для сетей. Известно, что даже бытовую технику объединяют/подключают в(к) сети - "сетевой" язык очень полезен. На Java удобно писать сетевые программки. Язык придумали в фирме Sun не на пустом месте. (см также на их сайт (9) или русcкоязычный ресурс (10)). Итак Sun сделали интерпретируемую версию C++ под названием Oak - для видеомагнитофонов, микроволновых печей и проч.. Программы для такой техники не должны зависать (ТВ или печь не должна виснуть). Потому в синтаксис заложена надежность и безопасность программок. Язык JavaTM компании Sun Microsystems решает эти проблемы.

Java является объектно-ориентированным и одновременно простым языком программирования. Цикл разработки программных средств с использованием Java значительно сокращается в силу того, что Java - интерпретируемый язык. Процесс компиляции-сборки-загрузки устарел - теперь программу надо только откомпилировать и сразу запускать. Приложения переносимы на многие платформы. Однажды написанное приложение не придется модифицировать под другие платформы: оно будет работать без каких-либо изменений на различных операционных системах и аппаратных архитектурах. Приложения надежны: Java контролирует обращения к памяти. Приложения высокопроизводительны: несмотря на то, что язык Java - интерпретируемый, код Java программы оптимизируется до фазы исполнения. Поддержка системы многопоточности позволяет создавать параллельно исполняемые взаимодействующие легковесные процессы. Приложения настраиваемы под изменяющееся окружение: возможна динамическая загрузка программных модулей из любого места в сети. Пользователи могут быть уверены в безопасности приложений, даже если в них загружен программный код из любого места в Internet. Исполняющая система Java имеет встроенную защиту от вирусов и попыток взлома. П2.2 Синтаксис Java

// это однострочный комментарий

/* это многострочный

комментарий */

(или можно посреди строки /* кусок программки */ при отладке так вот закомментировать)

/** это особый комментарий */ для создания документации при помощи утилиты javadoc. Она кое-что понимает и создает документацию в виде HTML-страницы. Например комментарий относится к введенной следом переменной в программке. Тогда в HTML-странице будет мой комментарий и следом - та самая переменная указана. Посмотрите в Документацию Java! Полезно документацией уметь пользоваться. Ее очень много и все запомнить нереально. (и, как уже было сказано, в печатаных книгах за Sun не поспевают.. Реплика из зала: есть книжка, морально старая, но хорошо написанная - 2 тома - P.Norton "программирование на Java".

П2.2.1. Типы данных: Простые типы данных

целочисленные = для хранения целых чисел

byte (8 bit) : -128 - +127

short = 2 byte : -32768 .. +32767

int = 4 byte : -... +2147483647

long = 8 byte : много-много ( 10**19 степени)

Много разных типов? Это сделано для экономии места в оперативной памяти. Если есть куча *небольших* чисел, то мне незачем отводить на них *большие* куски памяти. На использование int рассчитаны все функции. Если переполняется предусмотренная под тот или иной тип ячейка памяти - данные просто теряются. Но такие ошибки надо предусматривать и перехватывать механизмом перехвата исключительных ситуаций.

Вещественные числа (с плав. точкой):

float : 4 byte : min=+/-1,4*10**-45 max=+/-3,4*10**+38

double : 8 byte : max=+/-2*10**-308 max=+/-1.7*10**+308

Символьные

char : 2 byte (чтобы туда влазила кодировка unicode - см www.unicode.org - 65 000 символов на всех языках и еще место осталось). В Win окне или в DOS-окне не сработает, но в бродилках все ОК

Логические-булевские

boolean : thrue/false (нельзя как в других языках понимать это как 0 или 1)

Что такое "простые типы" ? Это значит отвели память и никак ее не структурировали. А еще существуют сложные типы данных - объекты. Об них позднее. Теперь о них упоминаю, чтоб вас не пугало отсутствие строкового типа string. Объекты - это современно и здорово. Это нужно освоить. Это несложно и удобно... Но пока закончим разговор про простые типы.

int a; // мы сделали переменную имя а для хранения целого числа.

 // в конце оператора ставят ; и пробелов, табуляций.. может

// быть много (не то что в Бейсике)

Память не только выделилась, но и заполнилась. В других языках надо инициализировать переменную - назначить ей некоторое значение, "ноль" например, иначе там будет вредный мусор. А в java переменная сама собой заполняется нулями. Вещественная переменная заполнилась бы 0,0 ; Символьная заполнится нулевым символом кодировки unicode (т.е. 0000 ), boolean - false ; (хотя лучше все же инициализировать явно, по старинке)

Вводить переменные можно в любом месте до их использования. А не только в начале.

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

a = 5 ; // в объявленную ранее переменную занесли 5

Можно эти операции объединить вот так:

int a = 5 ;

Примеры для переменных других простых типов:

float c = 7.2 ;

boolean d = true ;

char e = 'M' ; // только в одинарные кавычки

Спецсимволы - как и в C - например:

\n enter=newline \t = tab \r = enter \f = newpagetoprint \b backspace

Использование числовых значений кодировки unicode:

\u0037 = это то же самое, что символ '7' (цифры десятичные)

Расшифровка символов есть на сайте Unicode и на

розданном CD есть расшифровка для русского языка.

Чтобы спецсимвол не работал как спецсимвол, ставят косую черту:

char c = '\'' ; // тут в "c" поместили символ "одиночная кавычка"

Экзотика: Можно использовать и 8 и 16-ричную форму записи, например так:

a = 0x7B // записано 16-ричное число 7B

a = 0175 // записано 8-ричное число 175

---

Какие преобразования типов данных возможны?:

int x; // 4 byte длиной

byte y; // 1 byte длиной

x=y; // более короткое число "y 1 byte длиной" положили в место

// для длинного "x 4 byte длиной"

Наоборот тоже возможно, но компилятор будет ругаться.

Еще можно явно преобразовывать типы:

y=(byte)x; // сделать из 4-байтового числа "x" 1-байтовое

Аналогичные штуки работают для вещественных чисел.

double z = 7.8; Превратим вещ. z в целое

x=(int)z; // сработает, но пропадет хвостик 0.8

А если попытаться написать x=z; то компилирование не произойдет и байт-код не получиться. Наоборот, преобразование с удлинением места в памяти не обязательно указывать во что преобразовываем. То есть при таком безопасном преобразовании можно применить неявную форму записи преобразования. То есть в примере выше можно написать z=x;

П2.2.2. Математические операции Все обычные операции

(кто не знает что такое % - это есть вычисление остатка от

целочисленного деления, например

10 % 3 -> получится 1 ,

10,2 % 3 -> тоже 1)

увеличить на число и результат положить в ту же ячейку-переменную, откуда брали. Сокращают запись:

а=а+5; то же самое что  а+=5;

Аналогично пишут для - % * /

Инкремент, например а=а+1;

++а = сначала увеличиваем переменную, потом можем

воспользоваться хранящимся в ней значением.

а++ = наоборот, сначала можем воспользоваться хранящимся

в переменной значением, потом увеличиваем ее на единицу;

Пример:

int a=5, b;

b=++a; // это значит в b попала шестерка

// (сначала к 5 прибавилась 1, потом ее

// использовали для занесения в ячейку "6")

 Аналогично есть "декремент"

--а или а--

(это все не сложно, нужно лишь привыкнуть и запомнить разные разности)

Сравнение

 (результат будет булевского типа)

< > =< >= ==

!= не равно

Пример

int a = 5;

int b = 6;

boolean c

c = а == b // в "с" будет-запишется false

Логические операции

|| или

! не

&& и

исчерпывающие примеры

true && true = true

true && false = false

false && true = false

false && false = false

true || true = true

true || false = true

false || true = true

false || false = false

!true = false

!false = true

Зачем это нужно? Для написания всяких сложных условий типа "если переменная А меньше того-то, но больше сего-то , тогда

П2.2.3. Исключительные ситуации (exeptions)

Прежде чем погибнуть по причине ошибки, программа создает "исключения". Это объекты - экземпляры какого-нибудь класса из подклассов java.lang.Throwable Класс Throwable содержит строку сообщения String. Много стандартных классов-наследников у Throwable.

Их (объекты-"исключения") можно перехватывать и обрабатывать, не давая совершиться чему-то страшному. Например вводим буквы вместо цифр в калькулятор. "Обработать искл.сит.", - значит понять что случилось, остановить программу и выдать сообщение, "не цифра!" например. Применяется конструкция

try{

тут кусок программы способный

привести к ошибкам

}catch(Exception e){

тут кусок программы "что делать"

когда ошибка произошла

}finally{

что делать дальше независимо от результатов обработки в catch

надеюсь далее будет пример

}

Имя "Exception" означает на самом деле ту самую искл. сит., которая произошла в классе, который мы вызвали из раздела Try{"тут кусок программы способный привести к ошибкам"}. Компилятор помнит, откуда был сделан вызов метода, далее в том же блоке try-catch приведшего к исключению, поэтому собственное имя искл.сит. не требуется, вполне годится общестандартное имя "Exception". Экземпляр класса Exception будет создан.

Исключительные ситуации можно создавать и искусственно. Для проверки неких условий. (оператор throw new "имя_Exception" <-[внутри try - catch]). Тут уже Исключ.сит. - это некий объект некоего нами названного класса (наследника класса "Exception"). И тут уже он (объект нашего класса-наследника) имеет собственное имя!

П2.3 Языковые конструкции Java П2.3.1. Циклы

с предусловием

while (condition) {

do-some-actions; // if condition=false, ни разу действие не сделается

}

с после условием

do{

do-some-actions; // at least it'll be done once

} while (condition a verifier);

с перечислением

for (intitialisation; condition; modification){

do-some-actions;

}

Пример:

for (int i = 0; i < 7; i++){

можно на самом деле инициализировать одну переменную, а наращивать другую и проверять третью, а можно и вообще какое-то условие пропустить (но обязательно его указать пустым местом, то есть поставить соответствующую ему точку с запятой!. Как вы помните, i++ означает i=i+1

Еще можно перечислять несколько переменных в каждом разделе for оператор break можно использовать во всех этих циклах (его пишут предварив его if(условие) тогда break

Еще есть оператор continue - пропускает текущую итерацию и продолжает цикл. Пример

Пример:

for (int i=-3; i<3; i++){

if (i==0) continue; // нельзя делить на ноль

float a = 5/i; // вообще-то если в Java делить на ноль,

} // получиться спец_значение inf (некая константа

// равная самому большому числу из возможных

// вещественных чисел

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

П2.3.2. Условный переход

Все программерство стоит на условных переходах вроде такого "если условие верно, то делай это, если нет - делай то" Короче говоря "Если.. то.." Или по иностранному (все как в языке C)

if (условие) {

действие; // действие м/б одно или куча

... // если действие одно, фигурные скобки можно не писать

действие;

}

Если действие одно-единственное, фигурные скобки можно не писать.

if (проверяемое условие или логическая переменная){

действие;

...

действие;

}else{

действие;

...

действие; // вместо действия могут быть вложенные if

}

Конструкция switch - выбор значений переменной из списка вариантов

switch (value){

case value1 : do_this;

break; // срочный выход из цикла

case value2 : do_this;

case value3 : разные операторы;

default : еще операторы ;

}

П2.3.3. Массивы

Это тоже объекты. В отличие от других типов, в библиотеке явно нет стандартного класса от Sun, из которых они создаются. Но оператор new используется и все делается похоже на создание других объектов.

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

int a[];

int[] a;

2) выделить память и указать сколько ячеек в массиве:

a=new int[5] ;

Все ячейки пронумерованы начиная с нуля. Обращаться к каждой можно используя квадратные скобки. А что тут объектного? Вот что: у объекта "массив" есть одно-единственное свойство length - длина массива в ячейках. Ее читают соответствующим методом-функцией. Длина обозначена числом типа int (long нельзя).

Массивы только одномерные. Подобие многомерности получается путем создания массива из массивов. В ячейке массива сидит массив (причем они разномерные и более того..)

Все массивы "динамические". Значит ли это, что они могут менять свою длину в процессе работы? НЕТ! Массив после создания можно только уничтожить (длина станет null). Слово "динамический" означает, что память под массив можно выделить в любом месте программы (а не заранее!) и память только в том месте программы - на том этапе работы программы - и выделится. Удобно вообще-то: если у вас огромный массив, то память он начнет загромождать не заранее, а только когда он понадобится.

Как еще можно создавать массивы? Можно сразу ему присвоить начальное значение. Длина будет такая, сколько значений указали:

int a[] = {7, 21, 85}; // слово new тут не нужнО

Многомерные массивы :

Объявим "массив с цифрами float в ячейках"

float a[][];

Инициализируем его:

float a[][] = new float [4][2]; // матрица 4 х 2

Разномерный массив:

float a[][] = new float [4][];

Не сказано какой длины будут висеть наборы ячеек из каждой из 4-х ячеек "первого" массива (массива массивов). Это первое new не выделяет память, а только создает некие указатели. Далее нужно написать для выделения памяти :

a[0] = new float[3]; - в первую ячейку положили массив длиной "три"...

Про массивы все. Очень нехарактерно для Java то, что в классе массив есть всего один метод. Есть еще класс Вектор, там методов полно, но есть и расплата - вектор медленно работает. Обычно в классах по не одному десятку методов.

П2.3.4. Подпрограммы

Все. Зачем все вышеназванное нужно? Все оно используется не само по себе, а внутри функций. ФУНКЦИЯ - группа операторов под общим ИМЕНЕМ. Обращаясь к ней по имени мы их все вызываем к работе. Может понятнее было бы назвать ПОДПРОГРАММОЙ. Отработав, операторы дают некий результат своей работы - его "функция" возвращает.

Чтобы вернуть результат, нужно указать заранее его тип. Итак функции пишут так:

data_type FunctionName (тип_арг1 имя_арг1, тип_арг2 имя_арг2, ... тип_аргN имя_аргN){

перечень действий-операторов, составляющих;

подпрограмму-функцию;

return(результат); // спец_оператор для возврата результата работы функции-подпрограммы

// return результат; - еще вариант записи оператора "возврат результата"

// этот оператор еще по совместительству завершает функцию (работу подпрограммы)

}

Результатов возвращаются не более одного. Бывает, что функция не должна ничего возвращать. Тогда используют специальный тип - void ;

Перед типом результата иногда пишут так наз. описание доступа (спецификатор доступа) - указывают кто может использовать данную. функцию. Об этом позже.

ПРИМЕР - некая функция для суммирования целых чисел.

int Sum(int x, int y){

return (x+y);

}

Аргументы простых типов передаются "по значению". Это значит, что внутри подпрограммы создаются копии переданных туда в качестве аргументов переменных, а сами эти переменные не изменяются. (((Если бы внутри функции использовались указатели - это было бы "по ссылке" .. На самом деле передача внутрь функции объектов производится "по ссылке" - об этом позднее. Еще раз: Объекты передаются по ссылке! (нужно внутрь некоторого объекта, в его функцию, передать посторонний объект со всеми его переменными=полями и их значениями... Передается лишь ссылка на этот объект. Внутри области нашего первого объекта НЕ выделяется память, не создается в ней копия постороннего передаваемого объекта.)))

Внутри функции-подпрограммы можно объявлять переменные - они есть "локальные". Когда функция начала работать, этим переменным отведется место в памяти компутера, но как только она перестанет работать (завершится), то эта переменная из памяти уничтожится. И вне функции она будет не видна все время работы функции.

В обычном программировании вы еще слышали "глобальную" переменную. Тут этого термина нет, но считайте что все переменные объявленные вне функции - "глобальные". Они называются на самом деле "полями" - об этом позднее!

int Sum(int x, int y){

int rez; // локальная

rez = x + y;

return (rez);

}

ПЕРЕГРУЗКА функции

Это просто. В программе можно объявить несколько функций с одинаковыми именами, различающиеся только списком аргументов. Этот список должен быть разным обязательно. Разница м/б как в количестве, так и в их типе. Очень популярный механизм. Буквально каждая функция имеет несколько однофамильцев. Например мы хотим суммировать не только целые, но и вещественные числа. А язык-то жестко типизированный. Вот и пригодится перегрузка:

float Sum(float x, float y){

return (x+y);

}

Если при вызове функции я указал вещественное, то вызовется Sum-вещественная, а если целые - Sum-цел.

float a=Sum(5, 6);

a = Sum(5,2, 6);

Пример не ахти какой, так как возможно безопасное преобразование типов... Но идея ясна. Очень это распространено, среди матем. библ. функций..

Функции не живут сами по себе в java-программировании. Они живут внутри КЛАССОВ.

П2.4. Объектно-ориентированное программирование (ООП).

Зачем нужно? Чтобы экономит силы и использовать объектный код, сочиненный другими людьми. Сама Java -программа - это некий объект. Главное понятие в ООП - понятие класса. Это структура (сложный тип данных), объединяющая переменные и функции для работы с ними.

Класс "мыша"

Mouse{

x // переменные внутри класса - "поля" или

y //  "свойства"

draw() // функция внутри класса = "метод"

}

Формальное описание синтаксиса класса:

class Name {

int x, y;

тело класса;

int Sum (int a, int b){} // описание функций

float z; // в любом порядке описание переменных и функций..

// хотя для читабельности все лучше по порядку

}

Класс не похож на функцию, не возвращает никакого значения.

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

По сути класс - что это? Это сложная структура в памяти. Выделяем 4 байта для целого, 4 байта для вещественного, и описываем структуру функции для работы с ними. Но это лишь описание - реально память не выделена. Память выделяется реально - создается объект. То есть конкретный экземпляр класса. Я месяца три после процедурного программирования не мог привыкнуть к терминологии и не мог понять, зачем же это нужно! Попытаюсь вам объяснить все же побыстрее :-)

Класс "люди"

голова

руки

метод_думать (увеличивает значение голова на 1)

метод хватать (увеличивает значение рук на 1)

все

Мы все - объекты=экземпляры этого класса. Нам выделено место на земле чтобы жить, хватать и думать.

Внутри класса помимо всего прочего существует специальная функция - "конструктор" - называется функция тем же именем, что и класс (в этом примере - "люди"). Она может существовать или не существовать. Она не возвращает никакого результата и void к конструктору не надо приписывать. Она - функция-конструктор - нужна для некоторых начальных (инициализирующих) действий при создании объекта. Какие действия? Разные..

В нашем примере: конструктор присвоит головам и рукам значение "десять". Это я придумываю сам. Пусть будет так. Или пример с мышой: пусть мыша будет при инициализации располагаться в центре экрана. Кто-то должен вычислить координаты центра экрана и вызвать функцию рисования чтобы там мыша была нарисована.

Когда объект создается (человек рождается), то вызывается один-единственный раз конструктор. Если я не описал спец. конструктор, то что по умолчанию? Обычно ничего. Но если и ничего, все же по умолчанию конструктор есть. Хотя по умолчанию он ничего не совершает, ничего не возвращает, никаких аргументов не получает.

Вернемся к примеру Люди: создаем объект Миша класса Люди -

1) объявили переменную сложного типа "Люди" (так как мы писали int a;

при объявлении переменной простого типа)

 Люди Миша; // никакая память не выделилась, переменной

// спец_типа Люди - нет, ее "значение" - null

// в отличие от случая простой переменной - она то

// "инициализируется" автоматически

2) выделили оперативную память для объекта Миша:

Миша=new Люди();

Теперь возник кусок выделенной памяти - конструктор там создал структуру для хранения переменных руки, голова, функций-методов.

Разница с обычным программированием: функция делается менее универсальной. Она может работать только над данными данного объекта! Нельзя заставить функцию-метод объекта взять переменную другого объекта. (можно ей передать извне эти переменные-поля как аргументы). Зато (выигрыш) все это дело увязано в одну взаимосвязанную структуру. Еще раз: даже если метод-функцию вызвать снаружи, она чужие данные не сможет взять. А как же передают данные внутрь переменных-полей объекта? Прямой записью в поле или передачей данных внутрь через функцию-метод, ему эти данные дают в качестве аргумента.

Уничтожение объектов. В отличие от Си++ в Java нет Деструктора. Я пишу

Миша = null;

Объект "Миша" не сразу убивается-освобождает память. Он просто лежит тут, ненужный Миша. А потом, в момент регулярной чистки памяти, его уберут. Java -машина чистит память регулярно.


Приложение 3

 Листинг программы – SearchEngein.java

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.net.*;

import java.util.*;

import java.lang.*;

// Класс Интерфейс

public class SearchEngein extends HttpServlet {

// Объявление глобальных переменных

Properties INIProperties = new Properties();

String query = null, // Запрос

value = null; // Запрос в нужной кодировке

String dbname, // Имя базы

dbpath; // Путь к базе

String dbselect; //

 byte MD = 30, // Код разделителя

MD2 = 31; // Код разделителя

String RusDos = new String("Cp866"); // Кодировка дос

String RusWin = new String("windows-1251"); // Кодировка Виндовс

String iso = new String("8859_1"); // Кодировка Сервлета

String RusIso = new String("8859-5"); // Кодировка Исо

// конвертор кодировки из ИСО В Виндовс

private String ConvertISO(String Str) {

try {

Str = new String( Str.getBytes(iso),RusWin);}

catch( java.io.UnsupportedEncodingException e ) { return Str;}

return Str;

}

 public String getServletInfo() {

return "Поиск в базе данных ";

 }

private String RemoveTrash(String str){

return new String(str);

}

// преобразование в нижний регистр

public String toLow(String str){

char old[] = str.toCharArray();

char news[] = new char[str.length()];

char c;

for (int i =0; i<str.length(); i++){

 c = old[i];

 switch (c) {

case 'А' : {c = 'а';break;}

case 'Б' : {c = 'б';break;}

case 'В' : {c = 'в';break;}

case 'Г' : {c = 'г';break;}

case 'Д' : {c = 'д';break;}

case 'Е' : {c = 'е';break;}

case 'Ё' : {c = 'ё';break;}

case 'Ж' : {c = 'ж';break;}

case 'З' : {c = 'з';break;}

case 'И' : {c = 'и';break;}

case 'Й' : {c = 'й';break;}

case 'К' : {c = 'к';break;}

case 'Л' : {c = 'л';break;}

case 'М' : {c = 'м';break;}

case 'Н' : {c = 'н';break;}

case 'О' : {c = 'о';break;}

case 'П' : {c = 'п';break;}

case 'Р' : {c = 'р';break;}

case 'С' : {c = 'с';break;}

case 'Т' : {c = 'т';break;}

case 'У' : {c = 'у';break;}

case 'Ф' : {c = 'ф';break;}

case 'Х' : {c = 'х';break;}

case 'Ц' : {c = 'ц';break;}

case 'Ч' : {c = 'ч';break;}

case 'Ш' : {c = 'ш';break;}

case 'Щ' : {c = 'щ';break;}

case 'Ъ' : {c = 'ъ';break;}

case 'Ы' : {c = 'ы';break;}

case 'Ь' : {c = 'ь';break;}

case 'Э' : {c = 'э';break;}

case 'Ю' : {c = 'ю';break;}

case 'Я' : {c = 'я';break;}

default : {news[i]=c;}

 }// switch

 news[i] = c;

}

 return new String(news);

}

//

private String TagRemove(String s){

boolean inTag = false;

boolean tag = false;

int sn = 0;

char c;

int m = s.length();

char[] cd = new char[m];

char[] old = s.toCharArray();

char cMD = (char) MD2;

for (int i=0; i<m; i++)

 {c=old[i];

 if (tag) { c=' '; tag = false; }

 else if ( c == cMD ) { c=' '; tag = true;}

cd[i] = c;

 }

return new String(cd);

}

//

public void dbFileRead(String dbNamePath, PrintStream out, String query) {

 String mAvtor = null; // 100

 String msAvtor = null; // 700

 String mName = null; // 245

 String mPrinter = null; // 260

 String mSize = null; // 300

 String mKey = null; // 653

 String mSeria = null; // 490

 String mBBK = null; // 91

 String mKaIndex = null; // 90

 

 long fPosMarker = 0, // Позиция относительно начала

fPosData = 0; //

 boolean done = false,

Avtor = false;

 int mC =0,

mE =0; // Счетчик

 byte Jumper[] = new byte[5]; // Размер запяси - символьный

 int JIndex = 0, // Размер запяси - числовой

JTemp = 0, // Размер данных + словарь

MIndex = 0, // Счетчик для массива

MTemp = 0; // Счетчик полей

if (query != null){

try { RandomAccessFile dbfile = new RandomAccessFile(dbNamePath,"r");

// Цикл чтения файла по маркерам

while (fPosMarker != dbfile.length()) {

try { mC++;

dbfile.seek(fPosMarker);

dbfile.read(Jumper);

String jBuf = new String(Jumper);

JIndex = Integer.parseInt(jBuf,10);

int b = 0;

// Поиск конца словаря

while ( b != MD){

dbfile.seek(fPosMarker+24+MIndex);

b = dbfile.read();

MTemp++;

MIndex = MTemp;

}

MTemp= MTemp - 1;

// чтение Словаря из файла в отдельный массив

byte Dic[] = new byte[MTemp];

dbfile.seek(fPosMarker+24);

dbfile.read(Dic);

// чтение полей данных из файла в массив

fPosData = fPosMarker+24+MTemp;

String sDic = new String(Dic);

byte MarcRec[] = new byte[JIndex-24-MTemp];

dbfile.seek(fPosData);

dbfile.read(MarcRec);

int DI2 = 0,

 DI3 = 0,

DI4 = 0,

DI5 = 0,

PNum = 0, // Номер поля числовой

PLength = 0, // Длинна поля числовая

PStart = 0; // Начальная позиция поля чиловая

// сканирование номеров полей

while ( DI2 != MTemp){

DI3=DI2+3;

String DStr = sDic.substring(DI2,DI3);// Номер поля

DI4=DI3+5;

String DStr2 = sDic.substring(DI3,DI4);// Начальная позиция

DI5=DI4+4;

String DStr3 = sDic.substring(DI4,DI5);// Длинна поля

DI2=DI2+12;

PLength = Integer.parseInt(DStr3,10);// Узнаем длинну поля

PStart = Integer.parseInt(DStr2,10);// Узнаем начало поля

PNum = Integer.parseInt(DStr,10);// Код

byte Pole[] = new byte[PLength];

// Чтение поля из файла

for (int PIndex = 0; PIndex < PLength; PIndex++) {

Pole[PIndex] = MarcRec[PStart+PIndex];

}

String Pol = new String(Pole);

if (Pol == null) Pol=" ";

switch (PNum) {

case 100 : { mAvtor = TagRemove(Pol.substring(5));break;}

case 700 : { msAvtor = TagRemove(Pol.substring(5));break;}

case 245 : { mName = TagRemove(Pol.substring(5));break;}

case 490 : { mSeria = TagRemove(Pol.substring(5));break;}

case 91 : { mBBK = TagRemove(Pol.substring(5));break;}

case 90 : { mKaIndex = TagRemove(Pol.substring(5));break;}

case 260 : { mPrinter = TagRemove(Pol.substring(5));break;}

case 300 : { mSize = TagRemove(Pol.substring(5));break;}

case 653 : { mKey = TagRemove(Pol.substring(5));break;}

default : {}

}// switch

}// конец проверки полей

if ( mAvtor == null) mAvtor=" ";

if ( msAvtor == null) msAvtor=" ";

if ( mName == null) mName=" ";

if ( mPrinter == null) mPrinter=" ";

if ( mSize == null) mSize=" ";

if ( mKey == null) mKey=" ";

MarcRecord Rec = new MarcRecord( mAvtor,

msAvtor,

mName,

mPrinter,

mSize,

mKey,

mSeria,

mBBK,

mKaIndex);

if ( Rec.rAvtor.indexOf(query) != -1 ||

Rec.rsAvtor.indexOf(query) != -1 ||

Rec.rName.indexOf(query) != -1 ||

Rec.rKey.indexOf(query) != -1)

{ mE++;

out.println("<table width=\"461\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"+

"<tr bgcolor=\"#3399FF\">"+

"<td colspan=\"3\" class=\"text\">&nbsp;&nbsp;&nbsp;Автор:&nbsp;"+

"<font color=\"#000000\">"+

Rec.rAvtor+" "+

Rec.rsAvtor+

"</font></td></tr><tr>"+

"<td colspan=\"3\" valign=\"top\" class=\"bodytext\">"+mE+". "+mC+

"&nbsp;<b>Название:</b>&nbsp;"+

Rec.rName+"<br>"+

Rec.rPrinter+" "+

Rec.rSize+"<br>"+

Rec.rBBK+" "+

Rec.rKaIndex+" "+

Rec.rSeria+

"</td></tr></table>");

}

fPosMarker = fPosMarker+JIndex;

MTemp = 0;

MIndex = 0;

}

catch (IOException e) {

out.println("Ошибка!!!"+"<br>");

done=true; }

}

 }

 catch (IOException e) { out.println("Ошибка доступа к "+dbNamePath); }

 if (mE == 0) {

out.println("Запос: "+query+" не найден");

}

} // end If

}

// Ридер файла настройки

public void INIFile(String filename, String directory, PrintStream out) {

DataInputStream inifile = null;

String path = null,

iniRecord = null,

section = null,

vname = null,

vvalue = null;

boolean done = false;

int equalIndex = 0;

//

if (filename.length() == 0) {

out.println("IOError ");

System.exit(0);

}

if (directory.length() == 0) { directory = new String("c:\\www\\db"); }

if (filename.indexOf(".") < 0) { filename = new String(filename+".ini"); }

path = new String(directory+System.getProperty("file.separator")+filename);

// открытие файла

 try { inifile = new DataInputStream(new FileInputStream(path)); }

 catch(FileNotFoundException e) {

out.println(filename+"not found");

System.exit(0);

}

// чтение файла

 try { iniRecord = inifile.readLine(); }

 catch (IOException e) { done=true; }

 while (!done && iniRecord != null)

{ if (iniRecord.startsWith("["))

{ section = iniRecord.substring(1,iniRecord.lastIndexOf("]"));}

else if (!iniRecord.startsWith(";"))

{ equalIndex = iniRecord.indexOf("=");

if (equalIndex > 0)

{ //Имя ключа => Раздел.ключ

 vname = new String(section+"."+iniRecord.substring(0,equalIndex));

vvalue = new String(iniRecord.substring(equalIndex+1));

INIProperties.put(vname, vvalue);

}

}

try { iniRecord = inifile.readLine(); }

catch (IOException e) { done=true; }

 }

}

// извлечь значение

 public String getINIVar(String key, String defValue) {

return INIProperties.getProperty(key, defValue);

 }

// извлечь значение

 public String getINIVar(String key) {

return INIProperties.getProperty(key);

 }

public void init(ServletConfig conf) throws ServletException {

super.init(conf);

}

public void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

PrintStream out;

out = new PrintStream(res.getOutputStream());

res.setContentType("text/html; charset=Cp866");

// Печать заголовка

printPageHeader(out);

INIFile("db.ini","c:\\www\\db",out);

// Определяем кодировку

String requestEnc = req.getCharacterEncoding();

String clientEnc = requestEnc;

if ( requestEnc==null ) requestEnc=iso;

requestEnc=iso;

// Тело

out.println("<body bgcolor=\"#FFFFFF\">");

out.println("<form method=\"get\" action=\"/serv/SearchEngein\">");

out.println(" <table width=\"461\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");

out.println(" <tr bgcolor=\"#3399FF\"> ");

out.println(" <td width=\"266\" class=\"text\">&nbsp;&nbsp;&nbsp;Запрос</td>");

out.println(" <td width=\"135\" class=\"text\">&nbsp;&nbsp;&nbsp;Каталог</td> ");

out.println(" <td width=\"207\">&nbsp;</td>");

out.println(" </tr>");

out.println(" <tr>");

out.println(" <td width=\"266\" valign=\"top\"> ");

out.println(" <input type=\"text\" name=\"Query\" maxlength=\"100\" size=\"38\" value=\"\">");

out.println("  </td>");

out.println(" <td width=\"135\" valign=\"top\"> ");

out.println(" <select name=\"select\" size=\"1\">");

out.println(" <option value=\"MARCFILE.Book\" selected>"+ConvertISO(getINIVar("KATALOG.Book"))+"</option>");

out.println(" <option value=\"MARCFILE.Stat\">"+ConvertISO(getINIVar("KATALOG.Stat"))+"</option>");

out.println(" <option value=\"MARCFILE.Periud\">"+ConvertISO(getINIVar("KATALOG.Periud"))+"</option>");

out.println(" <option value=\"MARCFILE.Podpis\">"+ConvertISO(getINIVar("KATALOG.Podpis"))+"</option>");

out.println(" <option value=\"MARCFILE.Ucheb\">"+ConvertISO(getINIVar("KATALOG.Ucheb"))+"</option>");

out.println(" </select>");

out.println(" </td>");

out.println("  <td width=\"207\" valign=\"top\"> ");

out.println(" <input type=\"submit\" name=\"Start\" value=\"Поиск\">");

out.println(" </td>");

out.println(" </tr>");

out.println(" </table>");

out.println(" </form>");

// Конец тела

// Взять текст из строки

query = req.getParameter("Query");

 if (query == null || query.length()<1)

 {

printPageFooter(out);

return;

}

dbselect = req.getParameter("select");

value = new String(ConvertISO(query));

// Чтение файла

dbFileRead(getINIVar(dbselect), out, value);

// Распечатка результата

printPageFooter(out);

query = null;

value = null;

}

// Вывод заголовка документа

private void printPageHeader(PrintStream out) {

out.println("<html>");

out.println("<head>");

out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Cp866\">");

out.println("<style type=\"text/css\">");

out.println("<!--");

out.println(".text { font: bold 12px Arial, Helvetica, sans-serif; color: #0000FF; text-decoration: none; text-align: left; }");

out.println(".bodytext { font: 12px Arial, Helvetica, sans-serif; color: #000000; text-decoration: none; text-align: left; }");

out.println("-->");

out.println("</style>");

out.println("</head>");

}

private void printPageFooter(PrintStream out) {

 out.println("</body>");

 out.println("</html>");

 out.flush();

}

}

// Класс Запясь для хранения данных считаных из запяси

class MarcRecord {

 protected String rAvtor; // Поле автор

 protected String rsAvtor; // Поле соавтор

 protected String rName; // Поле название произведения

 protected String rPrinter; // Поле издатель

 protected String rSize; // Поле Объем издания

 protected String rKey; // Поле ключевые слова

 protected String rSeria;

 protected String rBBK;

 protected String rKaIndex;

MarcRecord( String r1,

String r2,

String r3,

String r4,

String r5,

String r6,

String r8,

String r11,

String r12) {

rAvtor = r1;

rsAvtor = r2;

rName = r3;

rPrinter = r4;

rSize = r5;

rKey = r6;

rSeria = r8;

rBBK = r11;

rKaIndex = r12;

}

}


Приложение 4

Результаты тестирования программы

Тестирование программы проводилось на 4 массивах данных размером 1000, 5000, 8366, 10000 записей. Метод тестирования заключался в поиске последней записи массива по уникальному названию, чтобы определить время поиска по всему массиву. Полученные данные приведены в таблице и на основе данных построен график (см. график).

График


Информация о работе «Организация доступа к базам данных в Интернет»
Раздел: Информатика, программирование
Количество знаков с пробелами: 194681
Количество таблиц: 23
Количество изображений: 7

Похожие работы

Скачать
11056
0
0

... можно получить: ·       используя программу Gopher - клиена; ·       используя систему шлюров Gopher - mail; ·       используя программу WWW - клиена. Вопрос №2. Поиск информации в Интернет. Основные системы и средства. "Всемирная паутина" в Интернет - это миллионы документов с неструктурированной текстовой информацией (а также с графикой, аудио, видео). Чтобы найти нужную информацию ...

Скачать
183471
45
12

... Java, JavaScript и встроенные в сервер средства LiveConnect. Более мощными реляционными возможностями доступа к базе данных и более эффективным выполнением виртуальной Java-машины будут расширены услуги разработки приложений, обеспечиваемых в Enterprise Server 2.0,. Сервис управления. В дополнение к использованию встроенной машины каталога LDAP Enterprise Server 2.0 будет управляем через общие ...

Скачать
11261
0
0

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

Скачать
50692
14
18

... Цена Сумма 10) Отчет по точкам выдачи (для сайта) Точки выдачи Название точки Адрес точки Время работы 2. Выбор средств/методологии проектирования и СУБД При проектировании базы данных интернет-магазина после описания предметной области необходимо выбрать метод построения инфологической модели (ER-модели) и СУБД, в которой будет реализован проект. ...

0 комментариев


Наверх