Объектно-ориентированное программирование

определение класса делается более трудным для чтения и поэтому должно использоваться только тогда, когда методов немного, а их код очень короткий. Кроме того, некоторые компиляторы требуют, чтобы поля данных и встраиваемые функции были определены до того, как они используются. Это вынуждает помещать внутренние(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.Цифровой счетчик — это переменная с ограниченным диапазоном, которая сбрасывается, когда ее целочисленное значение достигает определенного максимума. Примеры: цифровые часы и счетчик километража. Опишите класс для такого счетчика. Обеспечьте возможность установления максимальных и