Главная страница

Лабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74


Скачать 1.76 Mb.
НазваниеЛабораторная работа 1 2 лабораторная работа 2 31 лабораторная работа 3 44 лабораторная работа 4 74
Дата12.03.2021
Размер1.76 Mb.
Формат файлаdoc
Имя файлаOOP_Lab_Rus.doc
ТипЛабораторная работа
#184105
страница6 из 31
1   2   3   4   5   6   7   8   9   ...   31

4.2 Введение в ООП. Классы


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

Наиболее важным в понятии класса является то, чтоб он определяет новый тип данных. После определения новый тип можно использовать для создания объектов этого типа. Таким образом, класс – это шаблон для объекта, а объект – это экземпляр класса.

Определение класса объявляет его точную форму и природу. Объединяет данные, которые он содержит, и код, который оперирует с этими данными. В то время как очень простые классы могут содержать только код или только данные, наиболее реальные классы содержат и то и другое. Код класса определяет интерфейс к его данным.

Класс объявляется при помощи ключевого слова class. Ниже показана общая форма определения класса:

class classname {

type instance-variablel;

type instance-variable2;

//...

type instance-variableN;

type methodnamel (parameter-list) {

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

}

type methodnnme2(parameter-list) {

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

}

//...

type mathodnameN (parameter-list) { // тело метода

}

}

Данные или переменные, определенные в классе, называются переменными экземпляра или экземплярными переменными (instance variables). Код содержится внутри методов (methods). Все вместе, методы и переменные, определенные внутри класса, называются членами класса (class members). В большинстве классов на переменные экземпляра воздействуют методы, определенные в этих классах. Таким образом, именно методы определяют, как могут использоваться данные класса.

Переменные, определенные в классе, называются переменными экземпляра потому, что каждый экземпляр класса (т. е. каждый объект класса) содержит свою собственную копию этих переменных. Таким образом, данные одного объекта отделены от данных другого.

Все методы имеют ту же общую форму, как например main(). Однако большинство методов не будут определяться как static или public. Обратите внимание, что общая форма класса не определяет метод main().

Замечание. Программисты С++ обратят внимание, что объявление класса и реализация методов хранятся в одном месте и не определяются отдельно. Это иногда приводит к очень большим исходным (.java) файлам, т.к. любой класс должен быть полностью определен в одном исходном файле. Данное проектное свойство было встроено в Java потому, что, в конечном счете, хранение спецификации, объявления и реализации в одном месте упрощает поддержку кода.

4.3 Простой класс


Пример. Имеется класс с именем Box, который, определяет три переменных экземпляра: width, height и depth.
class Box {

double width;

double height;

double depth;

}
Класс определяет новый тип данных, который называется Box. Объявление класса создает только шаблон, а не фактический объект. Таким образом, предшествующий код не приводит к появлению каких-либо объектов типа Box. Чтобы фактически создать Box-объект, запишем:
Box mybox = new Вох(); // создать Box-объект с именем mybox
После этой строки переменная mybox станет экземпляром класса Box, т.е. в памяти создастся экземпляр класса.

Всякий раз, когда вы создаете экземпляр класса, образуется объект, который содержит свою собственную копию каждой экземплярной переменной, определенной в классе. Таким образом, каждый Box-объект будет содержать свою собственную копию переменных width, height и depth. Для доступа к этим переменным необходимо использовать операцию «точка» (.) Она связывает имя объекта с именем переменной экземпляра. Например, чтобы назначить переменной width объекта mybox значение 100, нужно использовать следующий оператор:
mybox.width = 100;
Этот оператор просит компилятор назначать копии переменной width, которая содержится в объекте mybox, значение 100. В общем случае, чтобы обращаться как к переменным экземпляра, так и к методам объекта, следует указывать операцию «точка». Далее предлагается законченная программа, которая использует Box-класс.
/*

Программа, которая использует Вох-класс.

Назовите этот файл BoxDemo.java

*/

class Box {

double width;

double height;

double depth;

}
// Этот класс объявляет объект типа Box.

class BoxDemo {

public static void main(String args[]){

Box mybox = new Box();

double vol;
// присвоить значения экземплярным переменным объекта mybox

mybox.width = 10;

mybox.height = 20;

mybox.depth = 15;
// вычислить объем блока

vol = mybox.width * mybox.height * mybox.depth;

System.out.println("Объем равен " + vol);

}

}
Вы должны назвать файл, который содержит эту программу, BoxDemo.java, потому что метод main() находится в классе с именем BoxDemo, а не в классе с именем Box. После компиляции программы вы обнаружите, что были созданы два файла с расширением .class – один для вох-класса и один для класса BoxDemo. Java-компилятор автоматически помещает каждый класс в его собственный class-файл. Нет необходимости в том, чтобы классы Box и BoxDemo находились в одном исходном файле. Можно было поместить каждый класс в свой собственный файл с именами Box.java и BoxDemo.java, соответственно.

После выполнения BoxDemo.class вы увидите (компилирование, и выполнение, программ рассмотрены в Приложении А):
Объем равен 3000.0
Каждый объект имеет свои собственные копии переменных экземпляра. Это означает, что, если вы имеете два Box-объекта, каждый из них обладает своей собственной копией depth, width и height. Важно понять, что изменения экземплярных переменных одного объекта не имеют никакого влияния на экземплярные переменные другого. Например, следующая программа объявляет два Box-объекта:
// Эта программа объявляет два Вох-объекта.

class Box {

double width;

double height;

double depth;

}
class BoxDemo2 {

public static void main(String args[]) {

Box myboxl = new Box();

Box mybox2 = new Box ();

double vol;

// присвоить значения экземплярньм переменным объекта myboxl

myboxl.width = 10;

myboxl.height = 20;

myboxl.depth = 15;

/* присвоить другие значения экземплярным переменным объекта mybox2 */

mybox2.width = 3;

mybox2.height = 6;

mybox2.depth = 9;

// вычислить объем первого блока

vol = myboxl.width * myboxl.height * myboxl.depth;

System.out.println("Объем равен " + vol);

// вычислить объем второго блока

vol = mybox2.width * mybox2.height * mybox2.depth;

System.out.println("Объем равен " + vol);

}

}
Вывод, выполненный этой программой:
Объем равен 3000.0

Объем равен 162.0
Можно видеть, что данные myboxl объекта полностью отделены от данных, содержащихся в mybox2.
1   2   3   4   5   6   7   8   9   ...   31


написать администратору сайта