Вводный курс. Язык программирования Java
- Вводный курс. Язык программирования Java
- Просмотров: 6950
15. Практика. Классы
Построить класс для описания плоских геометрических фигур: круг, прямоугольник, трапеция. Предусмотреть методы создания объектов, определения площади фигур. Написать программу, демонстрирующую работу с этим классом.
Ввыполним проектирование класса. Для описания заданных плоских геометрических фигур достаточно следующих параметров:
- круг – один параметр. Это радиус круга,
- прямоугольник – два параметра. Это длины сторон,
- трапеция – три параметра. Это длины сторон трапеции и высота.
Таким образом, класс описания плоских фигур круг, прямоугольник, трапеция класс должен иметь три поля:
int a;
int b;
int c.
Далее, нам необходимы три конструктора:
- конструктор создания круга,
- конструктор создания прямоугольника,
- конструктор создания трапеции,
а также конструктор по умолчанию, для работы с массивом объектов.
Кроме того, необходимы методы, с помощью которых можно изменить значения полей. В именах подобных методов принято использовать префиксы: set – для изменения и get – для чтения значений полей. Запишем имена методов. setA(int A) – установить значение поля a, соответственно b и c:
setA(int A),
setB(int B),
setC(int C).
И наконец, обозначим метод вычисления площади фигур - getArea().
Теперь все готово для записи класса Figura.
public class Figura {
//private (закрытые) поля класса
private int a;
private int b;
private int c;
//конструктор по умолчанию
public Figura(){};
//конструктор круга
//здесь а - радиус круга, поля b, c не используются, значения им не
//задаются и по умолчанию им будет присвоено значение 0.
public Figura(int A)
{
a=A;
}
//конструктор прямоугольника
//здесь a, b - стороны прямоугольника, с не используется
public Figura (int A, int B)
{
a=A; b=B;
}
//конструктор трапеции
//здесь a, b - стороны трапеции, с - высота трапеции
public Figura (int A, int B, int C)
{
a=A; b=B; c=C;
}
//метод устанавливающий значение поля a
public void setA(int A)
{
a=A;
}
//метод устанавливающий значение поля b
public void setB(int B)
{
b=B;
}
//метод устанавливающий значение поля c
public void setC(int C)
{
c=C;
}
//метод, вычисляющий площадь фигуры по ее номеру
//N - номер фигуры
//1 - круг, 2 - прямоугольник, 3 - трапеция
public double getArea(int N)
{
switch(N)
{
case 1: return a*a*Math.PI; //площадь круга
case 2: return a*b; //площадь прямоугольника
case 3: return (a+b)*c/2; //площадь трапеции
}
return 0;
}
}
Инкапсуляция
В классе Figura три скрытых поля:
//private (закрытые) поля класса
private int a;
private int b;
private int c,
доступ к которым возможет только с помощью методов setA(int A), setB(int B), setC(int C).
Инкапсуляция позволяет ограничить доступ к элементам класса, так что вне класса, например, в другом классе или в программе - функция main(), нет доступа к полям объектов a,b,c. Для примера создадим объект и попробуем присвоить полю a значение
public static void main(String[] args) {
//создаем объект круг, вызвав конструктор круга
Figura f1= new Figura(1);
//пытаемся присвоить полю a значение
f1.a=2; //операция не допустима. Поле a имеет private доступ
//используя метод полю a можно присвоить значение
f1.setA(2); //операция допустима. Доступ возможен.
}
Таким образом, доступ к полям, имеющим модификатор доступа private возможен только через методы.
Если в классе Figura объявить эти же поля без указания модификатора доступа
int a;
int b;
int c,
то поля будут иметь модификатор доступа по умолчанию и будут доступны всем классам в текущем пакете.
Пример.
public static void main(String[] args) {
//создаем объект круг, вызвав конструктор круга
Figura f1= new Figura(1);
//пытаемся присвоить полю a значение
f1.a=2; // операция допустима
}
Сделав поля закрытыми, мы получаем преимущество: методы изменения значений полей - setA() могут выполнять проверку ошибок, а вот при прямом присваивании ошибок не выявляется.
Методы set
Рассмотрим методы
public void setA(int A),
public void setB(int B),
public void setC(int C).
Они имеют доступ к закрытым полям (a,b,c) всех объектов своего класса.
Сами же методы являются открытыми (public), поскольку служат для взаимодействия с объектами.
Конструкторы
Конструктор – предназначен для инициализации объекта. Основными свойствами конструктора являются:
- Имя конструктора совпадает с именем класса.
- Класс может иметь несколько конструкторов.
- Конструктор не возвращает значение, даже void.
- Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
- Конструктор вызывается совместно с операцией new.
Класс Figura имеет три конструктора с параметрами и один конструктор по умолчанию.
Метод main()
Основная программа представляет статический метод main(). Статический метод можно вызвать, не имея не одного объекта класса. В методе main() с помощью вызова конструкторов создаются объекты, для последующей работы с ними. Конструктор всегда вызывается совместно с операцией new.
public class MyFigura {
public static void main(String[] args) {
double s;
// создаем объект круг, радиусом 1
Figura f1= new Figura(1);
s= f1.getArea(1);
System.out.println("площадь круга: "+s);
// создаем объект прямоугольник, задаем длины сторон прямоугольника a=1, b=1
Figura f2= new Figura(1,1);
s= f2.getArea(2);
System.out.println("площадь прямоугольника: "+s);
// создаем объект трапеция, задаем длины сторон a=1, b=1, высоту с= 1
Figura f3= new Figura(1,1,1);
s= f3.getArea(3);
System.out.println("площадь трапеции: "+s);
//определяем массив ссылок для трех объектов: круг, прямоугольник, трапеция
Figura [] mf = new Figura [3];
//создаем три объекта, используя конструктор по умолчанию
mf[0] = new Figura();
mf[1] = new Figura();
mf[2] = new Figura();
//для первого объекта задаем радиус круга
mf[0].setA(1);
//для второго объекта задаем длины сторон прямоугольника
mf[1].setA(1); mf[1].setB(1);
//для третьего объекта задаем длины сторон трапеции
mf[2].setA(1); mf[2].setB(1); mf[2].setC(1);
s= mf[0].getArea(1);
System.out.println("площадь круга: "+s);
s= mf[1].getArea(2);
System.out.println("площадь прямоугольник: "+s);
s= mf[2].getArea(3);
System.out.println("площадь трапеции: "+s);
}
}
Результат работы программы:
площадь круга: 3.141592653589793
площадь прямоугольника: 1.0
площадь трапеции: 1.0
площадь круга: 3.141592653589793
площадь прямоугольника: 1.0
площадь трапеции: 1.0
Пояснения.
В программе для создания объектов используются конструкторы круга, прямоугольника, трапеции. Метод getArea() вычисляет площадь этих фигур.
Для демонстрации работы с конструктором по умолчанию создается массив ссылок на объекты типа Figura.
Figura [] mf = new Figura [3];
Далее для каждого объекта вызывается конструктор по умолчанию:
mf[0] = new Figura();
mf[1] = new Figura();
mf[2] = new Figura();
И наконец, с помощью методов setA(),setB(),setC() задаются требуемые значения объектам.