yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

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

Лекция 12.

Краткий обзор языка Java. Классы и объекты в языке Java.

 

Язык Java был создан в 1995 г. сотрудниками компании Sun Microsystems. Первоначальным стимулом для появления была потребность в независимом от платформы языке, который мог использоваться для создания программного обеспечения с целью внедрения в электронные устройства различных потребителей. В процессе разработки всплыл второй, более важный фактор, который позднее стал играть ключевую роль в языке Java. Это был Web. Для программ, разрабатываемых для WWW, должна решаться проблема мобильности – переносимости на другие платформы и другие операционные системы. Свойства языка Java, с одной стороны, помогли развитию Интернет, а с другой стороны, Интернет помог развитию языка.

Java получил многие свойства из C и C++. Синтаксис языка Java близок к этим языкам. Он так же является объектно-ориентированным. Но это не дальнейшее развитие C++, приспособленное для Интернет, а самостоятельный язык программирования, не совместимый ни с С, ни с С++.

Язык Java мобилен. Дело в том, что выход компилятора Java является не выполняемым кодом, а байт-кодом – оптимизированным набором команд, предназначенных для выполнения специальной системой, которая называется виртуальной машиной Java (JVM). Поэтому единственным условием переноса программ в другую среду является наличие там JVM.

Из вышесказанного следует, что программа Java интерпретируется (следует иметь ввиду, что интерпретируется не исходный текст, а байт-код). Это помогает сделать ее более безопасной. JVM может как содержать программу, так и оберегать ее от побочных эффектов вне системы.

Исходный текст программы на Java – это один или несколько файлов, содержащие определения классов. Обычно один файл содержит одно определение класса. В Java ничто не может существовать вне класса. Рассмотрим простейшую программу. Программа представляет собой класс Example, который имеет один метод - main. Этот метод имеет спецификатор доступа public, и использует метод стандартного класса System. Метод позволяет напечатать на стандартном устройстве вывода переменную outstring, объявленную ранее. Заметим, что переменная outstring является объектом стандартного класса String. Имя файла, в котором записан данный класс, должно совпадать с именем класса и обычно имеет расширение java: Example.java.

 

public class Example {

public static void main(String args[]) {

String outstring=“Мы в мире Java-программ”;

System.out.println(outstring);

}

}

 

Для того, чтобы использовать программу, ее необходимо предварительно скомпилировать. Для компиляции можно использовать стандартный компилятор фирмы Sun javac. Например, чтобы компилировать написанный выше класс, необходимо осуществить из командной строки запуск следующим образом:

javac Example.java

Следует иметь ввиду, что может потребоваться указание полного пути к файлу.

 На основе этого текста компилятор Java создает файл Example.class. Для Java весьма существенно, что название файла совпадает с именем класса. Добавим, что каждый класс компилируется отдельно и для каждого класса создается отдельный файл, содержащий байт-код. Обычно этот код имеет очень небольшие размеры, так как все стандартные функции, вызываемые в программе, подключаются виртуальной машиной только на этапе выполнения, а не включаются в байт-коды. Таким образом, программы на языке Java подразумевают динамическую компоновку.

Для выполнения программы необходимо указать виртуальной машине точку входа – место, с которого программа выполняться. Такой точкой входа служит метод main. Этот метод может содержаться в любом классе программы. Более того, каждый класс может содержать метод main. Следует иметь ввиду, что в классе может быть только один метод main, и он обязательно должен быть объявлен как открытый (public), статический (static), не должен иметь возвращаемого значения (void). Его аргументами обязательно должен быть массив строк. Через этот массив в программу можно передать параметры. В отличие от C++, так как имя класса и имя файла всегда совпадают, в программу не передается имя файла. Поэтому массив аргументов содержит только те параметры, которые были переданы в программу.

Для выполнения программы с использованием средств разработки фирмы Sun требуется использовать интерпретатор java:

java Example

При этом не указывается расширение class, так это подразумевается. Если интерпретатор и программа не располагаются в одной директории, может потребоваться указание пути к классу. Обычно, если интерпретатор не находит класс, выдается ошибка «Класс не найден». Для указания пути к классу можно воспользоваться опцией classpath:

java –classpath путь_к_классу Exaple

 

Разберем, как же принципы ООП реализованы в Java. Как уже было сказано, в основе языка Java лежит класс. Общая форма объявления класса показана ниже.

 

class classname {

type instance-variable1;

type instance-variable2;

type methodname1(parameter-list) {

//тело метода

}

type methodname2(parameter-list) {

//тело метода

}

}

 

Данные или переменные, определенные в классе, называются экземплярными переменными. Код содержится внутри методов, которые определяют, как могут использоваться данные. Все вместе, переменные и методы, называются членами класса. Заметим, что методы класса описываются только внутри описания самого класса. А в связи с тем, что Java – язык со строгой типизацией, все переменные должны быть описаны, и каждая переменная должна быть определенного типа.

Приведем пример определения класса. Здесь описан класс, имеющий одну переменную length стандартного типа double и два метода – volume и show. Как мы видим, язык Java позволяет указать метод доступа к переменным и к методам. В нашем случае мы указываем, что переменная length является закрытой переменной, т.е. вне класса к этой переменной обратиться невозможно. Методы, напротив, описаны как отрытые. К ним мы можем обратиться из любой части программы (разумеется, соблюдая правила видимости). Данный класс имеет два конструктора – один с параметром, а другой – по умолчанию.

 

class Cube {

private double length;

Cube(double length) {

this.length=length;

}

Cube() {

length=1;

}

public double volume() {

return length*length*length;

}

public void show() {

System.out.println("length="+length+" volume="+this.volume());

}

public static void main(String args[]) {

Cube c1;

c1=new Cube();

c1.show();

Cube c2=new Cube(2.5);

double v=c2.volume();

System.out.println(" volume="+v);

}

}

 

В Java класс – это только объявление некоторого типа данных. Получение объектов класса в программе – двухуровневый процесс. Сначала должна быть объявлена переменная типа «класс». Она не определяет объект, а только ссылается на него. Для получения самого объекта необходимо использовать операцию new. Например, получение экземпляров приведенного выше класса (и работа с экземплярами) может выглядеть, как показано в методе main. Сначала мы определяем переменную c1, которая будет указывать на экземпляр данного класса. Сам экземпляр создается следующим оператором. Этот процесс можно совместить: создать объект одновременно с его объявлением.

 

14