RSS    

   Реферат: Организация доступа к базам данных в Интернет

Про массивы все. Очень нехарактерно для 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 "Поиск в базе данных ";

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.