Смекни!
smekni.com

Организация доступа к базам данных в Интернет (стр. 22 из 23)

Класс "мыша"

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, // Номер поля числовой