Цель лабораторной работы
Цель данной лабораторной работы - изучить основные концепцииобъектно-ориентированного программирования, ввести понятиекласса и научиться создавать собственные классы.
Для начала разберем, что такое модификаторы доступа в Java. В Java существуют следующие модификаторы доступа:
· private: данные класса доступны только внутри класса;
· protected: данные класса доступны внутри пакета и в наследниках;
· public: данные класса доступны всем.
В качестве примера рассмотрим программу, описывающую окружность. Создадим класс Circle. Каждая окружность имеет несколько параметров:
· Координаты по оси x;
· Координаты по оси y;
· Радиусr;
· Цвет colour.
Объявимнашипеременные:
private double x;
private double y;
private double r;
private String colour;
Как мы уже знаем, тип данных doubleприменяется для числовых значений, а String для текстовых.
Одним из стандартных подходов при проектировании классов на языке Java является управление доступом к атрибутам класса через пару методов get и set. Метод get позволяет получить значение поля, set — установить новое значение. Общий принцип именования этих методов (называемых, также, геттером и сеттером). Для того, чтобы вызвать эти методы, щелкаем правой кнопкой мыши (или путем сочетания клавиш Alt+Insert) и из выпадающего меню выбираем «Generate», а затем щелкаем по «Getter» или «Setter», в зависимости от того, что нам необходимо.
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public String getColour() {
returncolour;
}
public void setColour(String colour) {
this.colour = colour;
}
Обратите внимание, что в теле метода автоматически прописались два вида строчек: return (для getter) и this. (для setter). Return пишется для возврата значений переменной (чтения), this. пишется в качестве ссылки на данные переменной.
Затем также, как мы вызывали методы getter и setter, вызываем метод Constructor.Constructor — это специальный метод, который вызывается при создании нового объекта. Не всегда удобно инициализировать все переменные класса при создании его экземпляра. Иногда проще, чтобы какие-то значения были бы созданы по умолчанию при создании объекта. По сути Constructor нужен для автоматической инициализации переменных.
publicCircle(doublex, doubley, doubler, Stringcolour) {
this.x = x;
this.y = y;
this.r = r;
this.colour = colour;
}
Далее мы также вызываем еще один метод – toString().Метод toString в Java используется для предоставления ясной и достаточной информации об объекте (Object) в удобном для человека виде.
@Override
public String toString() {
return "Circle{" +
"x=" + x +
", y=" + y +
", r=" + r +
", colour='" + colour + '\'' +
'}';
}
Последним этапом формирования класса Circle будет создание метода getLength(). В теле данного метода мы объявляем переменную c, которая обозначает длину нашей окружности. Длина окружности описывается формулой: с = 2*PI*r. В Java нельзя просто так написать PI, поэтому следует обратиться к библиотеке Math. В конце тела метода необходимо возвратить значение c. Получается такая запись:
public double getLength(){
double c;
c = 2*Math.PI*r;
return c;
}
}
Последняя фигурная скобка не является лишней – она закрывает тело нашего класса Circle.
Следующим этапом написания нашей программы будет создание в этом же пакете, в котором мы работали, класса Tester. Затем добавляем необходимые библиотеки: lang и Scanner (в дальнейшем мы будем использовать ввод с клавиатуры):
import java.lang.*;
import java.util.Scanner;
Далее прописываем аббревиатуру «psvm» для создания статического метода main(String[]). Следующим шагом будет объявление переменной r. Второй раз мы объявляем переменную с таким же именем, но в другом классе, чтобы ввести значение r с клавиатуры и посмотреть, как меняется значение c:
public class Tester {
public static void main(String[] args) {
doubler;
Затем мы создаем экземпляр (k1) класса Circle:
Circle k1 = new Circle(x:3.1, y:4.1, r:5.1, colour:“red”);
Далее прописываем стандартную процедуру “Ввод”:
System.out.println("Длина окружности = " + k1.getLength() + "см\n");
После ввода этой строчки на консоли выведется длина окружности c, при радиусе к, который мы ввели для экземпляра класса (r:5.1).
Включаем ввод с клавиатуры и пишем процедуру «Вывод», в которой будет содержаться информация о том, что нам необходимо ввести, и пишем переменную, которую нам необходимо будет ввести. Делается это так: r = source.nextDouble();. В итоге получается следующее:
Scanner source = new Scanner(System.in);
System.out.println("Введитерадиус ");
r = source.nextDouble();
Пишемk1.setR(r);. Это необходимо для того, чтобы при работе программа обращалась уже к новому значению r, а не к тому, которое мы ввели для экземпляра класса. Завершением класса «Tester» будет написание процедуры “Вывод”.
k1.setR(r);
System.out.println("\nДлина окружности = " + k1.getLength() + "см");
}
}
Рис. 13
Ниже приведен пример работы программы:
Рис. 14