
2 РАБОТА С КЛАССАМИ
2.1 Цель работы
Ознакомление со способами описания классов и составление автономных программ, выполняющих операции с объектами.
2.2 Оpганизация самостоятельной работы
При подготовке к лабораторной работе необходимо изучить лекционные материалы по теме “Классы”.
2.2.1 Объекты и классы
При использовании ООП программа представляется как совокупность объектов. Объекты – это не только значения, например, целые числа или строки. В них также имеются методы, связывающие данные и манипулирующие ими.
Объекты, которые идентичны, за исключением своих состояний во время исполнения программы, группируются вместе в “классы объектов”.
Создание абстрактных типов данных (классов) - это основополагающая концепция в объектно-ориентированном программировании. Абстрактные типы данных работают почти так же, как и базовые типы: можно создавать переменные этого типа (называемые объектами или экземплярами) и манипулировать этими переменными (это называется посылка сообщений или запрос; посылается сообщение и объект определяет, что нужно с ним делать).
Объекты каждого класса похожи: каждый счет имеет баланс, каждый кассир может принимать вклад и т.п. В то же время, каждый объект имеет свое собственное состояние: каждый счет имеет различный баланс, каждый кассир имеет имя. Поэтому кассиры, клиенты, счета, переводы и т.п. - уникальная сущность в компьютерной программе. Эта сущность и есть объект, а каждый объект принадлежит определенному классу, который определяет его характеристики и черты поведения.
Класс действительно является типом данных, потому что, например, число с плавающей точкой также имеет набор характеристик и черт поведения. Отличия в том, что программист определяет класс исходя из проблемы, которую решает в своей программе. Тем самым расширяется язык программирования, добавляются новые типы данных.
Как только класс описан, можно создать столько объектов этого класса, сколько нужно, а затем манипулировать этими объектами. Как заставить объект стать полезным? Должен существовать способ сделать запрос к объекту, чтобы он что-то сделал, например, что-то нарисовал на экране или включил переключатель. Каждый объект может удовлетворять только определенные запросы.
Должен существовать код для удовлетворения этого запроса. Класс, наряду с данными, содержит функцию, или метод для каждого возможного запроса и, когда делается определенный запрос к объекту, вызывается такая функция.
3.2.2 Компоненты классов
Классы имеют два основных компонента: состояние и методы. Состояние — это значения всех его переменных.
Методы определяют функциональные возможности класса.
Для того чтобы переменные класса отличать от переменных, входящих в методы, переменные класса называют полями или переменными области действия класса.
Описание класса в языке Java имеет две части: объявление и тело класса.
В общем виде объявление класса в языке Java имеет следующий вид:
модификаторы class НовыйКласс extends ИмяСуперКласса implements
ИмяИнтерфейса
Модификаторы в объявлении класса определяют способы последующего использования класса. При создании класса можно выбрать состояние по умолчанию или использовать один из трех модификаторов: public, final или abstract.
3.2.3 Методы
Метод – набор операторов и функций, выполняющих некоторую задачу.
Методы являются основой Java-программ, они служат тем же целям, что и функции в языках С, C++, Pascal. Все операции в приложениях осуществляются внутри методов, и Java-приложения строятся только путем комбинирования многочисленных методов.
Метод имеет два элемента: объявление и тело метода. Хотя функциональные возможности метода реализованы в его теле, множество важнейших сведений содержится в объявлении метода.
В объявлении метода, как минимум, указывается возвращаемый тип и название метода. Обычно используется больше опций. В общем виде объявление метода имеет вид:
спецификатор_доступа модификатор возвращаемое_значение имя_метода (параметры) throws список_исключений
Например:
public void init()
Спецификатор доступа применяется для ограничения доступа к данному методу. Вне зависимости от спецификатора этот метод будет доступен для любого другого метода, принадлежащего тому же классу. Может, однако, возникнуть необходимость ограничить доступ к некоторым функциям для других объектов.
Возможные значения спецификатора: public, protected, friendly, private.
Модификаторы метода определяют свойства метода, например, его видимость и способы взаимодействия с текущим классом его подклассов.
static
Статические методы используются всеми объектами. Для вызова такого метода не нужен объект. Java разрешает вызывать статический метод, используя имя класса вместо имени объекта.
abstract
Абстрактные методы объявляются, но не реализуются в данном классе. Тело метода должно быть описано в подклассах текущего класса.
Static-методы не могут объявляться как abstract. Абстрактные методы нельзя определять как final, поскольку в этом случае их нельзя будет переопределить.
final
Слово final означает, что никакой подкласс текущего класса не сможет переопределить данный метод. Эта возможность увеличивает защищенность классов и гарантирует, что операции, определенные в данном методе, никак нельзя будет изменять.
synchronized
Ключевое слово synchronized, помещенное в начале объявления метода, позволяет защитить данные, которые могут быть разрушены в том случае, если два метода пытаются одновременно обратиться к одним и тем же данным. Хотя в простых программах эта возможность не потребуется, при использовании потоков такая ситуация может вызвать серьезные проблемы.
Возвращаемая информация
Методы Java могут возвращать данные любых типов, начиная от простых, таких как целые числа и символы, и заканчивая сложными объектами.
Если не указано ключевое слово void, метод обязательно должен возвратить значение того типа, который указан в объявлении метода.
Список параметров
Список параметров записывается в формате
тип_данных имя_переменной, тип_данных имя_переменной, ...
и может содержать любое число параметров.
Если параметры отсутствуют, то в объявлении круглые скобки остаются пустыми. Этим Java отличается от других языков, в которых можно опускать список параметров, или от языка С, требующего ключевое слово void.
3.2.4 Конструкторы
Конструкторы — это специфические методы с особыми свойствами и особым назначением. Конструкторы используются для установки некоторых параметров при создании экземпляра класса. Пример конструктора для класса комплексных чисел Complex:
public Complex(float r, float i) {
re=r;
im=i;
}
Конструкторам дается такое же имя, как и классу. Конструкторы не возвращают значения, поскольку на самом деле они вызываются не как методы. Для создания экземпляра класса Complex нужно задать оператор:
Complex c1= new Complex(1.0, 1.5);
Метод-конструктор вызывается тогда, когда фактически создается экземпляр класса.
Можно создать несколько конструкторов. Тогда инициализация объекта будет выполняться различными способами. Например, можно описать второй конструктор для задания комплексных чисел с нулевой мнимой частью. Такой подход распространен в библиотеках JDK.
Чаще всего конструкторы определяются как public. Это связано с тем, что другие классы должны иметь возможность создания экземпляра этого класса.
Конструкторы нельзя объявлять как abstract, static, synchronized или final.