Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

~а’Д’А’В- ~Ю~А’’’’~Ж’П ’~~Б~В~Г’~ ~~ ’’’~ ’’’Л~Е ~~ ~Ш’В’А’~~В.html

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.11.2024

Зачем нужно? Чтобы экономит силы и использовать объектный код, сочиненный другими людьми. Сама 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 записей. Метод тестирования заключался в поиске последней записи массива по уникальному названию, чтобы определить время поиска по всему массиву. Полученные данные приведены в таблице и на основе данных построен график (см. график).

График




1. 1 Метод уравнений Кирхгофа
2. Тема лекції Політикоідеологічна криза
3. тема- Электронные таблицы Microsoft Excel.html
4. Удерживающая от зла
5. Управленческое воздействи
6. Разработка технологического процесса восстановления оси коромысел двигателя Д37
7. Диодные ограничители
8. Глиэр Рейнгольд Морицевич
9. Логика (Контрольная)
10. И вспыхнет пламя- АСТ Астрель ВКТ Москва Владимир 2010 Оригинальное название- Suznne Collins Ctching Fire 2009 ISBN 9.html
11. тематическому анализу 15
12. Общая и таможенная статистика для студентов специальностей 080115036401 Таможенное дело
13. ЗАДАНИЕ 1 для группы 42131 Номер варианта соответствует номеру по списку Вычислить определитель -
14. Законы, определения и принципы экологии
15. тема достаточно актуальна в рамках современных условий сложившихся в сфере туризма так как сегодня туризм в
16. Реферат- Исследования автомобильного рынка в России
17. РЕФЕРАТ дисертації на здобуття наукового ступеня доктора біологічних наук Київ ~
18. Проблема пространства и времени в истории науки
19. Новоуральская СОШ Рассмотрено Руководитель МО - Протокол.
20. Мифологема шизофренического и мистического переживания