Организация доступа к базам данных в Интернет
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
?ает, что функция не должна ничего возвращать. Тогда используют специальный тип - 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) объявили переменную сложного типа "Люди" (так как мы пи?/p>