→ Пошук по сайту       Увійти / Зареєструватися
Знання Програмування на Java

Реализация объектно-ориентированного подхода в Java

Как и объекты реального мира, объекты программирования также имеют две характеристики: состояние и поведение, причем состояние объекта определяется его свойствами, а поведение – выполняемыми им действиями.

Для объектно-ориентированных языков характерен следующий подход к программированию:

· все является объектом;

· программа является набором объектов, указывающих друг другу, что делать посредством посылки сообщений;

· каждый объект имеет некоторый тип;

· все объекты одного типа могут получать одни и те же сообщения.

Объект – это набор данных и процедур, работающих с этими данными. Эти процедуры (подпрограммы) обработки данных объекта называются в Java методами.

Таким образом, при объектно-ориентированном подходе любые объекты реального мира и абстрактные концепции можно легко воплотить в программы.

На рис. 2.1.4 представлено взаимодействие программных объектов с окружающей средой:

Рис. 2.1.4. Взаимодействие программных объектов с окружающей средой

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

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

Объекты программы взаимодействуют и связываются друг с другом с помощью сообщений. Информация, необходимая объекту для выполнения тех или иных методов данного объекта передается в сообщении с помощью параметров.

Таким образом, сообщение должно содержать три компонента:

· объекта – получателя сообщения;

· имени выполняемого действия;

· параметров, необходимых для выполнения действия.

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

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

При рассмотрении объектов предполагалось, что они уже существуют в системе. Для того, чтобы определить объект, в Java и других объектно-ориентированных языках используется фундаментальное понятие: класс.

Описывая поведение какого-либо объекта, например автомобиля, мы стро­им его модель. Модель, как правило, не может описать объект полностью, реальные объекты слишком сложны. Приходится отбирать только те харак­теристики объекта, которые важны для решения поставленной перед нами задачи. Необходимо абстрагироваться от некоторых конкретных деталей объекта. Очень важно выбрать правильную степень абстракции. Слишком высокая степень даст только приблизительное описание объекта, не позволит правильно моделировать его поведение. Слишком низкая степень абстракции сделает модель очень сложной, перегруженной деталями, и потому непри­годной.

Описание каждой модели производится в виде одного или нескольких клас­сов (classes). Класс – это шаблон или прототип, определяющий тип объекта. Класс содержит описание переменных и констант, характеризующих свойства объекта. Они называются полями класса (class fields). Процедуры, описывающие поведение объекта, называют­ся, как уже говорилось, методами класса (class methods).

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

Объявление класса в Java имеет следующий формат:

class идентификатор-класса

{

тело-класса

}

где идентификатор определяет имя класса. В соглашениях по кодированию рекомендуется начинать идентификатор класса с большой буквы. Если имя класса состоит из нескольких слов, то все они пишутся слитно, причем каждое слово начинается с большой буквы, например:

MyFirstClass.

В теле класса (и только в теле класса) определяются его переменные и методы.

Таким образом, программа на языке Java представляет собой объявления одного или нескольких классов. Каждый класс в программе компилируется в отдельный файл с именем идентификатор-класса.class.

В издания Java 2 входят сотни классов, которые можно использовать при создании программ. Кроме того, при разработке программ создаются и свои классы, число которых может быть довольно большим. Поэтому разработчики Java включили в язык дополнительную конструкцию – паке­ты (packages). Все классы Java распределяются по пакетам (обычно по функциональному признаку, например, классы-утилиты или классы ввода-вывода). Кроме классов пакеты могут включать в себя разновидность классов – интерфейсы (будут рассмотрены позднее) и вложенные подпакеты (subpackages). В результате образуется древовидная структура пакетов и подпакетов.

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

Пакет однозначно идентифицируется своим именем, перед которым, отделенные друг от друга точкой, идут имена всех пакетов, находящихся выше данного пакета в уровнях иерархии. Например, имя пакета:

java.awt.event

обозначает имя подпакета event, находящегося в подпакете awt, который, в свою очередь, находится в пакете java, а имя:

javax.swing.event

обозначает имя другого подпакета с тем же именем event, но который находится в подпакете swing пакета javax.

Каждый пакет образует одно пространство имен (namespace). Это означает, что все имена классов, интерфейсов и подпакетов в пакете должны быть уникальны. Имена в разных пакетах могут совпадать, но это будут разные программные единицы. Таким образом, ни один класс, интерфейс или подпакет не может оказаться сразу в двух пакетах. Если надо использовать два класса с одинаковыми именами из разных пакетов, то имя класса уточняется именем пакета: пакет.класс. Такое уточненное имя называется полным именем класса (fully qualified name). Например, имя

java.util.Date

указывает на класс Date в пакете java.util, а имя

java.sql.Date

указывает на другой класс с тем же именем Date, но в пакете java.sql.

Первая версия JDK (JDK 1.0) включала в себя 9 пакетов программ. В последующих версиях добавлялись новые классы и интерфейсы как в существующих пакетах, так и в созданных новых пакетах, и в состав SDK 1.4 включено около ста пакетов, охватывающих самые разные предметные области программирования.

Ниже представлены некоторые из основных пакетов Java:

· java.lang – классы, образующие ядро языка Java, в том числе классы определения базовых типов объектов, математических методов, организации потоков и обработки ошибок;

· java.awt – средства оконного пользовательского интерфейса (Abstract Window Toolkit, AWT), позволяющие создавать графические интерфейсы для программ;

· java.applet – содержит определение класса Applet, а также методы и интерфейсы, используемые для программирования апплетов;

· java.util – содержит классы и методы, которые могут оказаться полезными при разработке программ (например, средства работы с датами, организации массивов переменной длины и т.д.)

При компиляции необходимые для выполнения программы классы пакетов Java, за исключением пакета java.lang, автоматически не включаются. Для того, чтобы сделать их доступными в программе на языке Java, можно либо указывать полное имя класса, либо использовать оператор или операторы import с именем пакета и именем используемого класса данного пакета, например:

import java.util.Date;

делает доступным программе класс Date из пакета java.util. (в этом случае класс доступен в программе просто по своему имени Date).

Если необходимо использовать несколько классов или интерфейсов из пакета, обычно вместо имени класса или интерфейса ставится символ "*", что указывает, что данной программе будут доступны все классы и интерфейсы данного пакета, например, оператор:

import java.awt.*;

делает доступными программе все классы из пакета java.awt.

Операторы import должны быть заданы в программе до первого использования заданного в нем класса или классов, однако принято располагать все операторы import в самом начале программы (до объявления первого класса).

Код класса всегда может обращаться ко всем полям и методам данного класса. Однако по умолчанию методы и переменные класса доступны только в том пакете, где класс определен. Для того, чтобы сделать методы и переменные класса доступными во всех пакетах, необходимо перед ключевым словом класс указать модификатор доступа public, например:

public class publicClass

{

// Тело класса

}

Рассмотрим теперь, как определяются в Java переменные и методы…

Методы в Java

Возвращаемый-тип определяет тип данных, которые возвращает метод при вызове (возвращаемый ответ на сообщение). Если метод не возвращает никакого значения, то возвращаемый-тип имеет значение void. Идентификатор-метода определяет имя метода, а параметры – список параметров, которые необходимо передать методу при его вызове.

Переменные типа классов в Java

Аналогично переменным примитивных типов, переменные ссылочных типов также перед своим использованием должны получить определенные значения. Для объявленной же переменной типа класса создать конкретный объект, экземпляр (instance) описанного класса.
загрузка...
Теми розділу
Сторінки, близькі за змістом