Записки программиста Программирование и не только

6Ноя/123

Еще немного о классах

Класс - это упрощенное описание каких-нибудь реальных (чаще, правда, выдуманных) вещей.

Вот, например, точка. Единственное, что есть у точки - это её координаты в пространстве. Это её параметры.
Как задать точку на плоскости? Надо нарисовать точку и подписать её: M(1,2), т.е. точка с именем M и координатами х = 1, у = 2.
Это её "конструктор". Т.е. мы "сконструировали" конкретную точку М с конкретными координатами.

На языке Java это будет выглядеть так:

class Point {                       //общее описание точек
    private double x, y;            //параметры точки

    Point(double ax, double ay) {   //конструктор
        x = ax;
        y = ay;
    }
}

Сконструируем точку

Point M = new Point(1, 2);

В данном классе задан один конкретный конструктор. Из-за этого каждая создаваемая точка будет ожидать, что при создании ей назначат координаты.

Т.е. данная строчка работать не будет:

Point M = new Point(); //пустые параметры
//или
Point M = new Point(1); //неполные параметры

Дальше. Класс включает в себя не только параметры, но и методы.
Что такое метод класса? Это вопрос, который мы можем задать или указание, что-либо сделать. Причем и вопрос и указания нужно адресовать уже конкретной сконструированной точке.

Научим точку сообщать свои координаты и перемещаться по одной из координатных осей:

class Point {                       //общее описание точек
    private double x, y;            //параметры точки

    Point(double ax, double ay) {   //конструктор
        x = ax;
        y = ay;
    }

    //запрос координаты Х
    double getX() {
        return x;
    }

    //запрос координаты Y
    double getY() {
        return y;
    }

    //указание сдвинуться по оси X на расстояние dx
    void moveX(double dx) {
        x = x + dx;
    }

    //указание сдвинуться по оси Y на расстояние dy
    void moveY(double dy) {
        y = y + dy;
    }
}

//использование
public class Main {
    public static void main(String[] args) {
        //создаём точку
        Point M = new Point(1, 2);
        //спрашиваем у созданной точки - скажи нам, точка М свои координаты X и Y
        System.out.println("Текущие координаты точки М: x = " + M.getX() + ", у = " + M.getY());
        System.out.println("Сдвинем точку по оси Х на 5 и по оси У на -1");
        //просим точку М - точка М, сдвинься на 5 по оси X
        M.moveX(5);
        //просим точку М - точка М, сдвинься на -1 по оси Y
        M.moveY(-1);
        //спрашиваем у точки М - скажи нам, точка М свои координаты X и Y
        System.out.println("Новые координаты точки М: x = " + M.getX() + ", у = " + M.getY());
    }
}

Еще раз повторю - методы вызываются у конкретной точки - сконструированного объекта.
Класс - это просто заготовка, шаблон, описание.
Т.е. пока точка не создана - мы как бы задумываем её нарисовать.
А вот когда сказали new, это значит, что мы нарисовали конкретную точку в конкретном месте координатной плоскости.

Записи вида

Point.getX();
//или
Point.moveX(5);

Не имеют смысла, потому что описание ничего не знает.
Это как если спросить у человека - "скажи мне координаты точки?"
Логично будет подумать, что он ответит - "какой именно?"
Также делает и компилятор.

Комментарии (3) Пинги (0)
  1. Подскажите пожалуйста как можно нарисовать координатную плоскость по этому примеру.

    • Ну, вообще, это синтетический пример для объяснения того как устроен класс.
      «Нарисовать» здесь ничего не получится.

  2. Спасибо, у вас большой талант преподавателя. Как классно все понятно стало, спасибо еще раз!


Leave a comment

Нет обратных ссылок на эту запись.