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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 28.12.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. Контрольная работа- Основы управления предприятием
2. Определение экономической эффективности электрической тяги
3. Направления и проблемы западной философии ХХ века
4. специальностью в сфере деловой и политической журналистики
5. а SDR 33 Р5 атм 050МПа SDR 26 Р63 атм 063МПа SDR 21 Р8 атм 080МПа Т
6. Исследование возможностей операционной системы Windows
7. Тема 8 Планування виробництва та реалізації продукції собівартості та ціни на продукцію
8.  Геохронологическая шкала Q ~ четвертичный пери
9. Реферат- Мерчендайзинг как эффективная маркетинговая технология.html
10. на тему история развития туризма в России Учащейся II курса заочного отделения факультета Социа
11. Курсовая работа- Психологическая готовность к обучению в школе
12. Анализ экспортной стратегии промышленного предприятия на примере ЗАО КВАРТ
13. Исследование использования заемного капитала предприятия на примере ОАО
14. I. Физические основы цвета ИСТОРИЯ ТЕОРИИ О СВЕТЕ С начала времен и по сегодняшний день лучшие умы человеч
15. Gypsy Hertwv 03-50New 00-03-50Kene Is It ny Wonder
16. ФАКТОРЫ, ВЛИЯЮЩИЕ НА МОЛОЧНУЮ ПРОДУКТИВНОСТЬ СКОТА
17. лекция-практика. Медитация для снятия напряжения и оздоровления
18. Школьная неуспеваемость
19. Паевые инвестиционные фонды ПИФы
20. тема стандартов по информации библиотечному и издательскому делу