Классы в языке программирования Java
.pdfString author; |
// автор |
|
String publishingHouse; |
// издательство |
|
int year; |
// год выпуска |
|
int pageCount; |
// количество страниц |
|
// Конструктор класса
public Book(String bookTitle, String author, String publishing, int year, int pageCount) {
this.bookTitle = bookTitle; this.author = author; this.publishing = publishing; this.year = year; this.pageCount = pageCount;
}
// Метод
double calculateCountPrintedSheets(int pageCount){ return pageCount / 8 * 0.93;
}
}
Обратите внимание на то, что описание полей, конструктора и метода сдвинуто влево относительно заголовка класса на позицию табуляции, а в каждой строке с описанием полей присутствуют комментарии.
Наличие комментариев в программном коде – признак хорошего тона. Комментарии не влияют на ход выполнения программы, так как компилятор пропускает их при компиляции программы, а правильно записанные комментарии улучшают читаемость кода и понимание логики программы.
Комментарии к классу, полям, методам, конструктору
Вязыке программирования Java различают строчные, блочные комментарии и комментарии документации.
Строчные комментарии обозначаются двумя наклонными чертами и продолжаются до конца строки. Их используют, как правило, для пояснения назначения полей.
Вкомментариях к классам и методам можно использовать блочные комментарии или комментарии документации.
Блочные комментарии содержат несколько строк, которые заключаются между символами /* …… */.
Комментарии документации предназначены для автоматизации создания документации к приложению с помощью утилиты javadoc. Они оформляются аналогично блочным, но начинаются с символов /**, а каждая внутренняя строка начинается с символа *. Комментарии документации могут содержать специальные теги, которые начинаются с символа @. Подробное описание этих тегов приводится в прил. 2.
11
В комментарии к классу обычно помещают строки с описанием назначения класса, фамилией автора и версией программного кода. Эти строки содержат те-
ги @author и @version.
Комментарии к методу могут быть как строчными, так и блочными. Если метод имеет список формальных параметров или возвращаемое значение, то их можно записать с помощью специальных тегов @param и @return, описание которых также приводится в прил. 2.
Класс «Книга» с комментариями будет выглядеть следующим образом:
/**
*Класс, описывающий книгу
*@author Болбот О.М.
*@version 1.0
*/ |
|
|
public class Book { |
|
|
String bookTitle; |
|
// название книги |
String author; |
// автор |
|
String publishingHouse; |
// издательство |
|
int year; |
// год выпуска |
|
int pageCount; |
// количество страниц |
|
/**
*Метод для вычисления количества печатных листов
*@param pageCount количество страниц формата А4
*@return double количество печатных листов
*/
double calculateCountPrintedSheets(int pageCount){ return pageCount / 8 * 0.93;
}
}
Компиляция и запуск
Программный код класса можно набрать в любом текстовом редакторе и сохранить в текстовом файле с именем Book.java. Затем можно вызвать компилятор и передать ему имя этого файла в качестве аргумента:
javac Book.java
Из текстового файла компилятор создаст файл с байт-кодами, даст ему имя Book.class и запишет этот файл в ту же папку.
Для выполнения нужно вызвать интерпретатор байт-кодов, передав ему имя файла с байт-кодами (имя файла записывается без расширения) в качестве аргумента:
java Book
12
Для |
втоматизации работы по созданию приложения можно использовать раз- |
личные |
интегрированные среды разработки Java-приложений: NetBeans, Eclipse, |
7.4 JDeveloper, JBuilder и др. Да лее в пособии будет рассматриват ся среда NetBeans, основные сведе ия, необходимые для работы, привод ятся в прил. 1.
Постановка задачи
Работу с классами рассмотрим на примере следующей задачи. Представим себе работу офиса издательства, выпускающего пе атную продукци ю: книги, учебники, журна ы и т. п.
Проанализировав данную пред метную область, можно выделить такие сущности, как автор , публикуемые материалы, издаваемая продукция, работники издательства. Не бходимо создать проект и разработать классы, которые будут моделировать эти сущности и взаи одейств ие между ними.
Назовем проект «Изда ельство». Он буд т содержать классы «Автор», «Публикуемый материал», «Книга», «Журнал», а также собственно класс « Издательство». Для каждого из них необходимо определить и разработать структуру: поля, методы и конструкторы .
Среди классо |
проекта по своем у функциональному назначению вы деляется |
|
класс «Издательство». Назовем его управля щим классом. |
||
Задание 1. |
Создайте новый проект «Издательс во» (publishing). |
|
|
|
Порядок ра оты |
1. |
Запустите NetBeans. |
|
2. |
Нажмите |
нопку на панели инстр ментов или откройте меню Файл |
Создать проект. |
категор ю прое кта: Java; тип проекта: Приложение Java |
|
3. |
Выберите |
|
(рис. 1.1) и нажмите кнопку Далее > .
Р с. 1.1. Перв ый шаг создания прое та
13
4. Имена про ектов принято за писывать словами на английском языке. Введите имя проекта: publishing, выберите место его расположения и нажмите
кнопку отово (рис. 1.2).
Рис. 1.2. Вто рой шаг создания проекта
5.Удалите комментарии, расположенные выше заголовка проекта.
6.Запишите коммент рии к классу.
7.Удалите к мментарии, разме щенные в методе main. В результате должен получиться программный код, изображенный на рис. 1.3.
Рис. 1.3. Программный код класса Publishing
Задание 2. В проект е publishing создайте новый класс, описывающий автора и содержащий 5–6 полей. Назовите класс и е о поля согласно соглашениям ко дирования Java. пределите типы данных. Создайте конструктор. Создайте м етод toString для вывода п олной и нформации об экземпляре класса и метод, возвращающий фамилию и инициалы автора.
14
В соответствии с соглашением о кодировании имя класс а должно быть английски м существительн ым, записанным с пропи ной буквы. Назовем его: Author. Сведения, которы нужны издательству для работы с авторами: фамилия, имя, отчество, паспортные дан ные, адрес, контактный телефон. Имена полей класса должны быть английски ми существительными, записанны ми строчными буквами.
Имена и типы полей класса Author представлены в табл. 1.2.
Таблица 1.2
Имена и типы полей класса Author
Имя поля |
Тип поля |
|
|
surnam e |
String |
name |
String |
secondName |
String |
passportData |
String |
address |
String |
phone umber |
String |
Описани
Фамилия Имя Отчество
Паспорт ные дан ые Адрес Контактный телефон
Порядок ра оты
1.Для созда ия класса Author нажмите кнопку
на панели инструментов или откройте меню Файл Создать файл.
2.Выберите Категорию: Java; Тип фа йла: Кла с Java и нажмите кнопку
Далее (рис. 1.4).
Рис. 1.4. Первый шаг создания класса
15
3. Введите имя класса: Author и нажми е кнопку Готово (рис. 1.5).
Рис. 1.5. Второй шаг со дания класса
4.Удалите комментарии, расположенные выше заголовка проекта.
5. В комментариях к классу укажите автора и запишите н азначени класса.
6.После заголовка класса объявите его поля.
7.В результате получится код, изображенный на рис. 1.6.
Ри . 1.6. Прогр аммный код класса Author
8. После объявления олей класса Auth r добавьте код ко структо а:
/** |
Конструктор для создания экземпляра автора |
|
* |
||
* |
@param |
surname фамилия |
* |
@param name имя |
|
* |
@param |
secondName отчество |
* |
@param |
passportData паспортные данные |
16
*@param address адрес
*@param phoneNumber контактный телефон */
public Author(String surname, String name, String secondName, String passportData, String address, String phoneNumber) {
this.surname = surname; this.name = name; this.secondName = secondName;
this.passportData = passportData; this.address = address; this.phoneNumber = phoneNumber;
}
9. Создайте метод toString.
Данный метод используется для формирования символьной строки, содержащей информацию об экземпляре класса. Программный код метода toString для класса Author приводится ниже (аннотация @Override используется для переопределения метода).
/**
*Метод, формирующий полную информацию об авторе
*@return the str возвращает строку
*/
@Override
public String toString() {
String str = surname + " " + name + " " + secondName + ", " + "паспортные данные: " + passportData + ", " + "\nадрес: " + address + ", телефон: " + phoneNumber;
return str;
}
10. Создайте метод, возвращающий фамилию и инициалы автора. Формальными параметрами метода будут выступать фамилия, имя и отчество. Для выбора первой буквы имени и отчества используется метод substring:
/**
*Метод, возвращающий фамилию и инициалы автора
*@param surname фамилия
*@param name имя
*@param secondName отчество
*@return the str возвращает строку типа Иванов И.И. */
String getShortName(String surname, String name, String second Name) {
String str = surname + " " + name.substring(0, 1) + "." + secondName.substring(0, 1) + ".";
return str;
}
17
11. Сохраните работу, открыв меню Фай |
Сохранить или нажав кнопку |
|
на панели инструментов. |
|
|
12. Создайте экземпляр класс Author |
и выведите на консоль полную ин- |
|
формацию о нем, затем – |
только фа милию и |
инициа ы. Для этого пер йдите на |
вкладку класса P ublishing |
и в методе main запишите следующи е команды: |
|
public stat ic void main(St ring[] |
args) { |
|
// Создание автора |
|
|
System.out.println("Авторы:") ; |
||
Author vasilev = new A uthor("Васильев", "Павел ", "Иванович", |
||
"МР |
2035648, выдан |
18.05.2011", |
"г. |
Минск, ул.Васне |
цова, д.45, кв. 79", |
"8( 029)33 564 78 0 2"); System.out.println(vas ilev.to String());
String shortNa meVasil ev = va silev.g etShortN ame(vas ilev.get Surname(),
vas ilev.getName(), vasilev.getSec ondName()); System.out.println("Фамилия и нициалы: " + sh ortNameVasilev);
}
13. Если выполнить проект, то на консоли появятся сообщ ения:
run:
Авторы:
Васильев Павел Иванович , паспортные д нные: МР203564 8, выдан
18.05.20 11,
адрес: г.Минск, ул.Васнецова , д.45, кв.79, конт. телефон:
8(029)33 564 78 02
Фамилия и инициалы: Васильев П.И.
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)
Статические чле ы класса
Раз ные экзе мпляры одного и того же класса имеют поля, принимающие различн ые значения. Изменение поля одного экземпляра не влияет на значение того же поля в д ругом экземпляре, потому что в каж дом экземпляре д ля таких полей в ыделяется своя ячейка пам яти. Такие поля называются переменными экземпляра клас а (instance variabl es).
Иногда бывает необходимо создать по е, общее для всего класса, не принадлежащее отдельному экземпляру класса. Например, в издательстве необходимо ве сти учет поступивших материалов, то есть в классе «Публикуемый материал» необходи мо создать поле, которое будет содержать п орядков ый номер последнего поступившего матери ала. Таки е поля называют ся статическими, или пер еменными класса (class variables). Для переменных класса вы деляется только одна ячейка памяти общая для всех экземпляров класса, независимо от того, сколько их было создано.
18
Переменные класса помечаются в языке программирования Java модификатором static. Этот модификатор используется в том случае, когда нужно создать такое поле, которое относилось бы не к экземпляру класса, а собственно к классу. Это означает создание переменной, которая должна изменяться под воздействием класса, а не объекта.
Статическими могут быть как поля, так и методы. Для методов модификатор static используются так же, как и для полей класса. Модификатор static говорит о том, что данный метод может вызываться только посредством класса, а не экземпляра класса. Необходимо помнить, что статические методы могут осуществлять доступ только к статическим переменным.
Чтобы вызвать статический метод или использовать статическое поле, нужно написать имя класса, затем поставить точку, а затем записать имя метода (если необходимо его вызвать) или имя поля (если необходимо получить его значение или записать в него новое значение):
имя_класса.статический_метод() имя_класса.статическое_поле
Задание 3. В проекте publishing создайте новый класс для описания публикуемого материала. Опишите поля класса. Одним из полей должен быть порядковый номер публикуемого материала. Создайте метод toString для вывода информации об экземпляре класса и метод для подсчета общего количества поступивших в издательство материалов.
Имя класса должно быть английским существительным, записанным с прописной буквы: Note. Определим поля, которые должны быть у любой публикации: порядковый номер, название материала, фамилии и инициалы автора, объем материала (в авторских листах).
Для формирования порядковых номеров, присваиваемых поступающим в издательство материалов, необходимо объявить еще одно поле, в котором будет храниться последний номер поступившего в издательство материала. Оно будет статическим. При объявлении присвоим ему нулевое значение.
Имена полей класса должны быть английскими существительными, записанными строчными буквами. Имена и типы полей класса Note представлены в табл. 1.3.
Таблица 1.3
Имена и типы полей класса Note
Имя поля |
Тип поля |
Описание |
|
|
|
numberNote |
int |
Порядковый номер материала |
lastNumberNote |
int статическое поле |
Последний порядковый номер |
noteTitle |
String |
Название материала |
authorNote |
String |
Автор материала |
numberAuthorsSheets |
double |
Количество авторских листов |
19
Порядок работы
1.В проекте publishing создайте новый класс Note.
2.Удалите комментарии, расположенные выше заголовка проекта.
3.В комментариях к классу запишите автора и назначение класса.
4.После заголовка класса объявите поля класса:
int numberNote;
static int lastNumberNote = 0; String noteTitle;
String authorNote;
double numberAuthorsSheets;
//порядковый номер материала
//последний порядковый номер
//название материала
//автор материала
//количество авторских листов
5. Создайте конструктор класса Note. Переменная numberNote экземпляра класса будет получать порядковый номер из статической переменной класса lastNumberNote, поэтому ее не нужно указывать в списке формальных параметров конструктора.
/**
*Конструктор для создания экземпляра публикуемого материала
*@param noteTitle название материала
*@param authorNote автор материала
*@param numberAuthorsSheets количество авторских листов */
public Note(String noteTitle, String authorNote, double numberAuthorsSheets) {
numberNote = ++lastNumberNote; // создаем порядковый номер this.noteTitle = noteTitle;
this.authorNote = authorNote; this.numberAuthorsSheets = numberAuthorsSheets;
}
6. Создайте метод toString:
/**
*Метод, формирующий информацию о публикуемом материале
*@return the str возвращает строку
*/
@Override
public String toString() {
String str = numberNote + " " + authorNote + " " + noteTitle + ", авт. листов: " + numberAuthorsSheets;
return str;
}
7. Метод для подсчета количества поступивших в издательство материалов является статическим и будет возвращать значение переменной класса lastNumberNote:
20
