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() задаются требуемые значения объектам.

Добавить комментарий
  • Комментарии не найдены
 
Our website is protected by DMC Firewall!