определение класса делается более трудным для чтения и поэтому должно использоваться только тогда, когда методов немного, а их код очень короткий. Кроме того, некоторые компиляторы требуют, чтобы поля данных и встраиваемые функции были определены до того, как они используются. Это вынуждает помещать внутренние(private) поля данных до определения интерфейсных компонент(public), и приводит к изменению порядка функций.
Отделяя определение встраиваемых функций от описания класса, можно в области описания перечислять методы в логическом порядке, в то время как реализация, следующая за описанием класса, вероятно, продиктует другой порядок.
3.5.5. Классы и методы в языке Java
Трудно сказать, следует ли описывать языкJava как диалектC++. Хотя сначала кажется, что эти два языка имеют много общего, внутренние различия достаточно значительны, что оправдывает дляJava статус совершенно нового языка. С одной стороны, языкJava не имеет указателей, ссылок, структур, объединений, оператораgoto, функций(есть методы), перегрузки операторов. С другой стороны, он поддерживает строки как примитивный тип данных(что не делаетC++) и использует»сборку мусора» для управления памятью.
Хотя сам по себе Java является языком программирования общего назначения, недавний интерес к нему связан с его использованием в качестве средства разработки дляWorld Wide Web. В нашем изложении мы будем игнорировать этот аспект и сконцентрируемся на свойствахJava как одного из языков программирования.
Описание класса на языке Java (пример приведен в листинге3.8) очень похоже на определение класса в языкеC++ за исключением следующих отличий:
∙Отсутствуют препроцессор, глобальные переменные, перечисляемые типы данных.
Символьные константы могут быть созданы путем описания и инициализации локальных переменных с использованием ключевого слова final. Такие»терминальные» значения не могут впоследствии изменяться и тем самым оказываются эквивалентными символьным константам.
Листинг 3.8. Стандартное описание класса на языке Java
class Card
{
// статические значения цветов и мастей
final public int red | = 0; | ||||
final public int black | = 1; | ||||
final | public | int | spade | = | 0; |
final | public | int | heart | = | 1; |
final public int diamond | = 2; | |
final public int club | = 3; | |
// поля данных | faceup; | |
private boolean | ||
private int | r; | |
private int | s; | |
// конструктор |
Card (int sv, int rv)
{s = sv; r = rv; faceup = false; } // доступ к атрибутам карты
public int rank ()
{return r; }
public int suit()
{return s; } public int color ()
{if ( suit() == heart ЅЅ suit() == diamond ) return red;
return black; } public boolean faceUp() { return faceup; }
// выполняемые действия
public void draw (Graphics g, int x, int y)
{
/* … пропущено … */
}
public void flip ()
{ faceup = ! faceup; }
};
∙Реализация методов приводится непосредственно внутри определения класса, а негде-либов другом месте. (Это разрешено в языкеC++ в качестве опции, но является обязательным для языкаJava.)
∙Вместо разбиения описания класса на private иpublic эти ключевые слова присоединяются в явном виде к каждой переменной или методу.
∙Логический тип данных именуется boolean вместоbool, используемого в языке С++.
∙За исключением конструкторов (которые, как и в языкеC++, распознаются в силу того факта, что их имена совпадают с названием класса) все методы должны иметь возвращаемое значение.
Вглаве 8 мы рассмотрим учебный пример, целиком написанный на языкеJava.
Упражнения
1.Предположим, вам требуется программа на традиционном(не объектно- ориентированном) языке программирования вроде Паскаля илиC. Как бы вы смоделировали классы и методы?
2.В языках Smalltalk иObjective-C методы, имеющие несколько аргументов, описываются с использованием ключевых слов, отделяющих каждый аргумент. В языкеC++ список аргументов идет сразу за именем метода. Опишите преимущества и недостатки, свойственные каждому подходу, — в частности, объясните влияние на читаемость и степень понимания текста программы.
3.Цифровой счетчик — это переменная с ограниченным диапазоном, которая сбрасывается, когда ее целочисленное значение достигает определенного максимума. Примеры: цифровые часы и счетчик километража. Опишите класс для такого счетчика. Обеспечьте возможность установления максимальных и