Ждем Android 5.0, почитать про новинки дизайна и внутреннего устройства системы можно здесь
Предыдущее занятие | Следущее занятие |
С чем познакомимся:
Продолжаем разбираться с классами на примере класса Box из прошлого занятия. На этом занятии мы поговорим о методах класса.
Начнем с того, что программисту-пользователю класса Box необходимо будет создавать в программах экземпляры класса Box со своими значениями длины, ширины и высоты параллелепипеда. А значит мы, как создатели класса, должны предусмотреть различные варианты создания экземпляров этого класса.
Также вполне возможно, что потребуется узнать объем параллелепипеда (ведь для чего-то этот класс нужен!). Таким образом, чтобы решить эти задачи, нам необходимо дополнить код из листинга прошлого занятия - см. Листинг 1.
Листинг 1. Класс Box с тремя полями типа "double", конструктором и методом getVolume() "вычислить объем"
Для компиляции программы достаточно сохранить данный листинг как файл Box.java и выполнить команду в терминалеjavac Box.java
выполнение программы осуществляется командой (читайте об этом подробнее в материале Занятия №3)java Box
вывод программы Box см. на рисунке 1
Рисунок 1. Вывод программы Box
Как мы заставили нашу программу рассчитать объем параллелепипеда равный 30.0? Для этого мы наш класс снабдили методом (другими словами "определили в нем метод") getVolume()
... Обычно в тексте после названия метода ставятся скобки (как мы и написали - getVolume()), однако, не забывайте, что метод может принимать параметры, а может и не принимать (см. ниже конструктор Box()). В любом случае приглядывайтесь к описанию и реализации метода в программе. |
public double getVolume (double x, double y, double z) {...}
Который, как говорят, "принимает три параметра" (или "аргумента"). Эти параметры записываются в поля класса Box "в теле" метода getVolume() с помощью оператора присваивания
a=x; b=y; c=z;
Отметим, что тело метода обрамляется парой фигурных скобок, т.е. представляет собой законченный блок кода. Итак метод в Java - это "способ сделать что-то" или "совершить полезную работу" (см. подробнее у Эккеля).
Если переменные a, b, c были определены как double и в памяти было отведено место для их хранения (для интереса, переменной double в Java отводится 64 разряда или бита) то присутствие ключевого слова double перед определением метода getVolume() требует объяснения. Говорят, что метод getVolume() "возвращает значение double" и в памяти, отводимой для экземпляра класса Box будет определено место для хранения этого значения. Возврат значения осуществляется с помощью оператора
return a*b*c;
где, в-общем-то, и рассчитывается объем параллелепипеда. Для вывода значения объема мы воспользовались уже известной нам записью - вызовом метода println класса System:
System.out.println (bx.getVolume (4,2.5,3));
Кстати, об операции точка (.) мы с вами уже говорили на предыдущем занятии. Как и при обращении к полю, операция точка (.) плюс название метода для экземпляра класса вызывает этот метод (в нашем случае getVolume() с параметрами 4, 2.5 и 3).
Выделение же памяти для объекта bx осуществляется с помощью оператора new в предшествующей строке:
Box bx = new Box();
В данном случае после оператора new следует метод, название которого совпадает с названием класса Box, а именно Box(). Такой метод в ООП называют "конструктором". Наш конструктор в классе Box не принимает никаких значений. Такой конструктор называется "конструктором по-умолчанию". И если попробовать скомпилировать нашу программу без него, то она завершится ошибкой. Еще бы, ведь в Java нет способов создавать объекты без оператора new и компилятор не знает чем заполнить память для объектов Box. В нашем случае при создании объекта с помощью конструктора по-умолчанию или, как его еще называют, "конструктора без параметров", все переменные экземпляра класса становятся равными нулю (см. тело конструктора), а все самое интересное и полезное происходит в методе getVolume() .
Аналогично, с помощью операции точка (.), вызывается метод println (если не считать того, что мы не создавали экземпляров класса System, но об этом поговорим чуть позже).
Наше занятие, честно говоря, оказалось не совсем законченным. Не было дано окончательного объяснения о работе метода main(), описанного в строкеpublic static void main (String args []) {...}
А также вместе с объясненным ранее ключевым словом public, которое было употреблено применительно к классу, мы достаточно вольно и без объяснения применили в объявлении переменных ключевое слово private, и об этом мы обязательно поговорим на следующем занятии.
Конечно, занятие получилось довольно сложным и его необходимо осмыслить. Однако, на данном этапе будет достаточно того, что мы получили рабочую программу для упражнений (действительно, попытайтесь самостоятельно вычислить объем параллелепипеда с другими значениями длины, ширины и высоты). А понимание, обязательно придет со временем! Итак, считаю, что на занятии мы познакомились с важными, с точки зрения ООП, понятиями, а именно:
Литература:
1. Брюс Эккель "Философия Java", 4-е издание, с.21