Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дипл 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
609.28 Кб
Скачать

ГАОУ ВПО «ДАГЕСТАНСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ НАРОДНОГО ХОЗЯЙСТВА»

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Кафедра «Информационные технологии и информационная безопасность»

Специальность 08.08.01 «Прикладная информатика (в экономике)»

ДОПУСТИТЬ К ЗАЩИТЕ

Зав. кафедрой.

____________ Раджабов К.Я.

«___»___________2015г.

Выпускная квалификационная работа

(Дипломная работа)

на тему:

«Программирование классов Java»

Научный руководитель:

к.ф.-м.н., доцент кафедры

Прикладной математики и

информационных технологий

Якубов А.З.

Выполнил:

Студент 5 курса 3 группы (ОЗО)

Халирбагинов М.М.

МАХАЧКАЛА – 2015

Содержание

Введение…………………………………………………………………………3

  1. Программирование на основе классов в Java…………………...5

    1. Понятие и виды классов Java……………………………………………...5

    2. Внутренние и вложенные классы……………………………………… 14

    3. Классы Java для работы с потоками……………………………………..24

    4. Программирование на основе классов Java…………………………… .33

  1. Создание и использование классов в Java………………………38

    1. Создание классов в Java…………………………………………………..38

    2. Методы использования классов Java…………………………………….45

  1. Разработка системы Деканат на Java……………………………59

3.1 Система Деканат…………………………………………………………..59

3.2. Создание Gui с помощью пакета Swing……………………………….…67

Заключение……………………………………………………………………72

Список литературы………………………………………………………..…74

Введение

Актуальность исследования. Как известно, классы Java включает в себя несколько особенностей – простой, интерпретируемый, распределенный, надежный, безопасный, машино не зависимый, объектно-ориентированный, высокопроизводительный, многопоточный, динамичный, не зависящий от архитектуры компьютера

Цель исследования дипломной работы состоит в изучении основ работ с классами Java, и создание проекта.

Для достижения поставленной цели, следует выполнить следую-щие задачи:

* Изучить основные методы использование классов Java;

* Изучить особенности классов, и рассмотреть ее цели;

* Изучить и описать основные виды классов и показать на примере их использования.

Структура - Дипломная работа состоит из введения, трех глав, заключения и списка использованной литературы.

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

Класс есть ключевое понятие в объектно-ориентированном программировании, на чем и основывается Java. Класс описывает содержание и поведение некой совокупности данных и действий над этими данными. Объявление класса производится с помощью ключевого слова class. Пример: class < имя_класса > {// содержимое класса}.

К примеру, если мы моделируем прямоугольную комнату классом Комната, то данными могут быть длина, ширина и высота, двери, электророзетки, мебель. Заметим, что на уровне класса мы ещё не знаем, о которой комнате идет речь, но точно знаем, что это не ящик (который тоже имеет длину, высоту и ширину), а именно комната. Действиями могут быть вычисление объема, помещение и изъятие мебели, открытие дверей. Чтобы вычислить объем комнаты или наклеить обои, нам не нужны ее размеры, о своих размерах каждая конкретная комната знает сама.

Глава 1. Программирование на основе классов в Java.

1.1.Понятие и виды классов Java.

Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления — характеризуются какими-то своими, другими особенностями. Наряду с понятием «объекта» класс является ключевым понятием в ООП, хотя существуют и бесклассовые объектно-ориентированные языки, например, Self, Lua. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. Точный смысл этой фразы будет раскрыт ниже.

На деле объектно-ориентированное программирование сводится к созданию некоторого количества классов, включая интерфейс и реализацию, и последующему их использованию. Графическое представление некоторого количества классов и связей между ними называется диаграммой классов. Объектно-ориентированный подход за время своего развития накопил множество рекомендаций (паттернов) по созданию классов и иерархий классов.

Идея классов пришла из работ по базам знаний, имеющих отношение к исследованиям по искусственному интеллекту. Используемые человеком классификации в зоологии, ботанике, химии, деталях машин, несут в себе основную идею, что любую вещь всегда можно представить частным случаем некоторого более общего понятия. Конкретное яблоко — это в целом некоторое яблоко, вообще яблоко, а любое вообще яблоко — фрукт.

Везде далее слова «класс», «объект», «интерфейс» и «структура» будут употребляться в своих специальных значениях, заданных в рамках ООП.

Определение класса на языке Java с помощью оператора class:

class MyClass {

String name = "Example";

// "Конструктор"

public MyClass(String name) {

this.name = name;

}

// "Метод"

public String getName() {

return name;

}

}

Класс это языковая конструкция, определяющая поля данных объектов данного класса (instance variables) и их поведение (methods). Практически класс в Java сам по себе не является объектом. Это лишь шаблон, который определяет, из каких частей будет состоять объект, созданный с помощью этого класса, и как он будет себя вести.

Конструкторы.

При объявлении класса, возможно, указать методы специального вида, называемые конструкторами и предназначенные для инициализации созданного объекта. Имя этих методов должно совпадать с именем класса, они могут иметь какое-то количество аргументов, например:

class Point extends Object {

Point() {

x = 0.0;

y = 0.0;

}

Point(double x, double y) {

this.x = x;

this.y = y;

}

public double x;

public double y;

}

а использованы они могут быть следующим образом

Point a;

Point b;

a = new Point();

b = new Point(1.0, 2.0);

Имя this в определении конструктора с аргументами используется для обозначения самого объекта, в методе которого мы находимся, в тех случаях,

когда ссылка на этот объект не подразумевается неявно.

Методы и посылка сообщений.

Если один объект, в программе заставляет другой выполнить какую-то операцию, то принято говорить, что он посылает сообщение другому объекту. Например, можно переопределить класс следующим образом:

Pclass Point extends Object {

private double x;

private double y;

public void setX(double x) {

this.x = x;

}

public void setY(double y) {

this.y = y;

}

...

}

Поля x и y теперь недоступны извне класса, но для изменения их состояния

предусмотреys специальные методы setX и setY.

Финализаторы.

Специальное имя finalize зарезервировано для метода, который будет вызван сборщиком мусора перед тем, как объект будет уничтожен. В силу того, что Java освобождает разработчиков от необходимости самим следить за освобождением памяти, занимаемой объектами, необходимость в таких методах обычно возникает лишь тогда, когда надо освободить какие-то внешние ресурсы, например, закрыть открытый файл:

protected void finalize() {

try {

file.close();

} catch (Exception e) {

}

}

Производные классы.

Наследование классов позволяет создавать новые типы объектов, эффективно использующие функциональность уже существующих типов. Новый тип обычно называется производным классом, а тот, чьи свойства наследуются – базовым классом.

Например, можно описать новый класс, соответствующий координатам точки в трехмерном пространстве, на основе уже описанного класса для точки на плоскости.

class ThreePoint extends Point {

protected double z;

ThreePoint() {

super();

z = 0.0;

}

ThreePoint(double x, double y, double z) {

super(x, y);

this.z = z;

}

}

Здесь была добавлена новая координату z, а поля x и y (и методы доступа к

ним) унаследовали от класса Point.

Контроль доступа.

Контроль доступа к данным и методам объекта в Java несколько отличается от С++. Помимо трех уровней доступа, имеющихся в С++ (public, private, protected) имеется четвертый, находящийся где-то между уровнями public и protected. Он не имеет имени и используется по умолчанию, когда явно не указан другой уровень. Поля этого типа доступны внутри только одного программного пакета. Пакет представляет группу классов, объединенных в одну логическую группу. Например, классы, описывающие точку и прямоугольник в графическом пакете, могут иметь прямой доступ к полям данных друг друга, запрещенный обычно для остального мира.

Также следует отметить, что контроль доступа в C++ помогает программисту лишь при построении программы. Различия между полями, помеченными public и private, отсутствуют в выполняемом модуле, созданном с использованием этого языка. В Java контроль доступа реален, т.к. он осуществляется не только при компиляции, но и непосредственно перед запуском кодов на выполнение виртуальной машиной.

Переменные и методы класса.

Как и С++ язык Java позволяет использовать переменные и методы, принадлежащие классу целиком. Для определения их используется ключевое слово static. Естественно, что методы самого класса не могут оперировать данными и методами объекта класса, т.к. они не относятся ни к какому определенному объекту. Например, версия реализации класса Rectangle может быть задана следующим образом:

class Rectangle extends Object {

static final int version = 2 ;

static final int revision = 0 ;

}

Ключевое слово final означает, что значение поля окончательное и изменению не подлежит (это константа).

Абстрактные методы.

Абстрактные методы - это методы, для которых в данном классе не определена их реализация. Мы указываем лишь на необходимость наличия методов с данным протоколом. Конкретная реализация должна быть осуществлена классами- наследниками. В то же время остальная, "неабстрактная" часть класса может содержать конкретную информацию, которая может быть использована производными классами.

Например:

abstract class Graphical extends Object

{

protected Point lowerLeft;

protected Point upperRight;

...

public void setPosition(Point ll, Point ur)

{ lowerLeft = ll;

upperRight = ur;

}

abstract void drawMyself();

}

class Rectangle extends Graphical

{ void drawMyself()

{ ....

}}

Рис.1.1.1. Модификаторы доступа.

  • private члены класса доступны только внутри класса 

  • package-private или default (по умолчанию) члены класса видны внутри пакета

  • protected члены класса доступны внутри пакета и в классах-наследниках

  • public члены класса доступны всем

Классы и объекты, понятие экземпляра класса, понятие членов класса.

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

Например, абстрактный тип данных «строка текста» может быть оформлен в виде класса, и тогда все строки текста в программе будут являться объектами — экземплярами класса «строка текста».

При использовании классов все элементы кода программы, такие как переменные, константы, методы, процедуры и функции, могут принадлежать (а во многих языках обязаны принадлежать) тому, или иному классу. Сам класс в итоге определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур. В зависимости от языка программирования к этому списку могут добавиться константы, атрибуты и внешние определения.

Как и структуры, классы могут задавать поля — то есть переменные, принадлежащие либо непосредственно самому классу (статические), либо экземплярам класса (обычные). Статические поля существуют в одном экземпляре на всю программу (или, в более сложном варианте, — в одном экземпляре на процесс или на поток/нить). Обычные поля создаются по одной копии для каждого конкретного объекта — экземпляра класса. Например, общее количество строк текста, созданных в программе за время её работы, будет являться статическим полем класса «строка текста». А конкретный массив символов строки будет являться обычным полем экземпляра класса «строка текста», так же как переменная «фамилия», имеющая тип «строка текста», будет являться обычным полем каждого конкретного экземпляра класса «человек».

В ООП при использовании классов весь исполняемый код программы (алгоритмы) будет оформляться в виде так называемых «методов», «функций» или «процедур», что соответствует обычному структурному программированию, однако теперь они могут (а во многих языках обязаны) принадлежать тому или иному классу. Например, по возможности, класс «строка текста» будет содержать все основные методы/функции/процедуры, предназначенные для работы со строкой текста, такие как поиск в строке, вырезание части строки и т. д.

Как и поля, код в виде методов/функций/процедур, принадлежащих классу, может быть отнесен либо к самому классу, либо к экземплярам класса. Метод, принадлежащий классу и соотнесенный с классом (статический метод) может быть вызван сам по себе и имеет доступ к статическим переменным класса. Метод, соотнесенный с экземпляром класса (обычный метод), может быть вызван только у самого объекта, и имеет доступ как к статическим полям класса, так и к обычным полям конкретного объекта (при вызове этот объект передастся скрытым параметром метода). Например, общее количество созданных строк можно узнать из любого места программы, но длину конкретной строки можно узнать только указав, тем или иным образом, длину какой строки будем мерить.