Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бородина А.И. Крошинская Л.И. Сапун О.Л. Модуль...doc
Скачиваний:
5
Добавлен:
15.11.2019
Размер:
3.89 Mб
Скачать

Вопросы для самоконтроля

  1. Понятия класса, переменных класса, методов класса.

  2. Классы и объекты в Microsoft Office.

  3. Объектная модель Excel.

8.Объектно-ориентированное программирование на языке java

Одна из самых важных тем при изучении любого объектно-ориентированного языка – это понятие класса и приемы объектно-ориентированного программирования.

Класс – это базовый элемент объектно-ориентированного программирования. Он представляет собой шаблон для создания объектов, экземпляров класса. Класс объединяет в себе методы и поля, которые описывают поведение объекта этого класса.

Пример, который наглядно показывает, что собой представляет объектно-ориентированное программирование, – это описание какой-нибудь фигуры, например окружности. Для того, чтобы описать класс объектов, характеризующих окружность, объявим класс Circle. Это будет выглядеть следующим образом:

class Circle

{

}

Пока описанный класс не имеет ни одного поля и ни одного метода. Теперь добавим в описанный класс поля для координат центра окружности и радиуса, которые определяют окружность:

class Circle

{

int x, y, Radius;

}

Теперь объекты (экземпляры) этого класса могут иметь свои собственные значения этих полей.

Любая программа на Java – это класс, который имеет метод main(). Причем имя этого класса должно полностью совпадать с именем файла. Создадим основной класс программы МуАррl и сохраним его в файле МуАррl.java:

class МуАррl

{

public static void main (String argv[])

{

}

}

Теперь добавим к этой программе описанный класс Circle и создадим несколько объектов этого класса в методе main() класса МуАррl:

class МуАррl

{

public static void main (String argv[])

{

Circle c1, c2;

c1 = new Circle();

c2 = new Citcle();

c1.x = 100; c1.y = 90; c1.Radius = 20;

c2.x = 200; c2.y = 100; c2.Radius = 20;

}

}

class Circle

{

int x, y, Radius;

}

В этом примере мы имеем две разные окружности. У каждой из них есть свой радиус и свои координаты центра.

Для того, чтобы определить какие-нибудь действия над экземплярами класса Circle в нем нужно определить соответствующие методы. Например, метод show() (показать) и hide() (спрятать) окружность. При выполнении своей работы эти методы будут пользоваться свойствами класса Circle, т.е. координатами центра и радиусом. В этих методах описываем соответственно прорисовку окружности и ее сокрытие.

Не останавливаясь на реализации этих методов, подчеркнем, что главное – это усвоить, что любой метод соответствующего класса может пользоваться уже существующими свойствами этого класса как заранее определенными переменными.

public void show()

{

// рисуем окружность

}

public void hide()

{

// убираем окружность

}

Можно определить еще несколько методов этого класса. Предположим, нужно реализовать объекты часы – Clock, которые будут состоять из окружности и одной секундной стрелки, движущейся по этой окружности. В этом случае подойдет уже описанный класс Circle. Для того чтобы использовать его со всеми его свойствами и методами в новом классе Clock, воспользуемся таким понятием объектно-ориентированного программирования, как наследование. Создадим класс-потомок Clock, который унаследует методы и свойства класса Circle.

class Clock extends Circle

{

}

Теперь у класса Clock есть все те свойства, которые были в классе Circle: это координаты центра и радиус. Для того, чтобы реализовать в полной мере класс Clock, необходимо объявить еще одно поле. Это поле будет хранить текущую позицию секундной стрелки. Так как полный оборот стрелки 60 секунд, то для этого свойства будет достаточно разрядности типа byte.

class Clock extends Circle

{

byte sPos;

}

После этого к классу Clock добавляем методы start() и stop(), которые будут запускать и останавливать часы. Прорисовка часов реализуется в соответствии со значениями полей х, у, Radius и sPos.

public void start()

{

//запустить часы, начиная со значения sPos

}

public void stop()

{

//остановить часы, при этом не обнуляя значение свойства sPos

}

На примере класса Clock познакомимся более подробно с понятием конструктора в Java. Конструктор – это тот же метод класса, имя которого совпадает с именем класса. Он используется для инициализации свойств класса и при выполнении необходимых действий при создании экземпляра класса. В нашем случае важно при создании экземпляра объекта Clock задать начальные значения всем свойствам этого класса, в том числе и начальной позиции секундной стрелки часов sPos. Для создания конструктора определим метод класса Clock с таким же именем:

Clock (int px, int py, int pRadius, int psPos)

{

x = px;

y = py;

Radius = pRadius;

SPos = psPos

}

Важно, что конструктор ничего не должен возвращать.

Итак, наш класс в общем виде будет выглядеть следующим образом:

class Clock extends Circle

{

int sPos;

Clock(int px, int py, int pRadius, int psPos)

{

x = px;

y = py;

Radius = pRadius;

sPos = psPos

}

public void start()

{

// запустить часы, начиная со значения sPos

}

public void stop()

{

// остановить часы, при этом не обнуляя значение свойства sPos

}

}

В итоге имеем два класса: Circle и Clock. Методы и свойства класса Circle наследуются классом Clock.

Приведем пример использования класса Clock в методе main() какого-нибудь из классов основной программы:

public static void main(String argv[])

{

Clock cl;

cl = newClock(150, 150, 50, 0);

cl.start(); // часы пошли.

Этот метод лучше реализовывать в отдельном треде (потоке), чтобы затем можно было

// из любого места основной программы их остановить.

}

Относительно конструкторов важно отметить, что в Java реализован собственный сборщик мусора, обеспечивающий удаление из памяти своих объектов.