Главная » Статьи для тега "object"

Реализация на основе двусвязного списка

Добавлено Дата: 20 December, 2011 категория: Java, Структуры данных и алгоритмы

Предположим, необходимо создать АТД «список» с помощью дважды связного списка. В самом простом случае узлы двусвязного списка будут соответствовать позиции АТД. Другими словами, каждый узел реализует интерфейс Position и, следовательно, содержит метод element(), который возвращает элемент, хранящийся в данном узле. Таким образом, сами узлы выступают в качестве позиций, имея двойственный характер: с одной стороны, это внутренние узлы связного списка, а с другой — традиционные позиции. Таким образом, для каждого узла v можно задать переменные next и prev, осуществляющие обращения соответственно к последующему и предыдущему узлам (которые могут быть просто сигнальными узлами, обозначающими начало или конец списка). Далее с точки зрения позиции в S «откроем» позицию р, чтобы найти узел v. Эта операция выполняется с помощью приведения типа позиции к узлу. Поскольку действия осуществляются с узлами, можно выполнить метод before(/?), возвращая v.prev (при условии, что v.prev не является головным сигнальным узлом, иначе это приведет к ошибке). Таким образом, позиции списка при реализации двусвязным списком используют преимущества объектно-ориентированного программирования, причем для этого не требуются дополнительные затраты места и времени. Кроме того, данный подход позволяет скрыть детали реализации, что обеспечивает возможность неоднократного использования кода, так как пользователь не будет знать, что позиционные объекты, передаваемые и возвращаемые как параметры, в действительности являются объектами узлов.

Читать »

Реализация бинарного поискового дерева на Java

Добавлено Дата: 12 December, 2011 категория: Java, Структуры данных и алгоритмы

Теперь опишем класс бинарного поискового дерева BinarySearchTree, хранящий пары «ключ-элемент» класса Item (показанного повторно во фрагменте кода 9.2) в качестве элементов, расположенных в позициях (узлах) его бинарного дерева. Код BinarySearchTree приведен во фрагментах кода 9.3—9.5. Заметим, что показанное бинарное дерево Г использует только интерфейс BinaryTree, а также содержит методы expandExternal и removeAboveExternal (см. п. 6.4.2).

Читать »

Сочетания и компараторы

Добавлено Дата: 11 December, 2011 категория: Java, Структуры данных и алгоритмы

АТД «очередь с приоритетами» применяет две стандартные модели проектирования — сочетания и компараторы, которые и приводятся в этом подразделе.

Композиционная модель проектирования

Одной из этих моделей является композиционная модель (composition pattern). В ней объект е определяется как сочетание (композиция) других элементов. Эта модель используется в АТД «очередь с приоритетами» при необходимости представить объекты, хранимые в приоритетной очереди, в виде пары. Пара (к,е) представляет собой простейшее сочетание, состоящее из двух объектов. Для реализации данной концепции определим класс, который помещает два объекта в две свои переменные экземпляров и предоставляет метод доступа и обновления этих переменных. Во фрагменте кода 7.2 приведен пример реализации на Java парного шаблона применительно к парам «ключ-элемент», используемым в очереди с приоритетами. К другим видам сочетаний можнр отнести хроцкр, состоящие из, jpex объектов, четверки и, произвольные сочетания, способные хранить любое количество объектрв (например, с домощью последовательности).

Читать »

Прохождение графов

Добавлено Дата: 3 December, 2011 категория: Java, Структуры данных и алгоритмы

Пр9хождение (обход) — это системная процедура исследования графа посредством обращения ко всем его узлам и путям. Эффективным обход считается в том случае, когда обращение к узлам и путям выполняется за пропорциональное их количеству время, то есть в линейном времени. Рассмотрим два типа прохождения ненаправленного графа под названиями «поиск в глубину» (depth-first search) и «поиск в ширину» (breadth-first search), а также возможность расширения этих методик для прохождения направленных графов.

Читать »

Выполнение метода и возврат из него Java

Добавлено Дата: 10 June, 2011 категория: Java

 

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

Читать »

Расширенный класс Java

Добавлено Дата: 3 June, 2011 категория: Java

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

Читать »

Анонимные внутренние классы

Добавлено Дата: 2 June, 2011 категория: Java

Когда кажется, что без использования локального внутреннего класса просто обойтись, можно объявить анонимный (безымянный) класс (anonymous inner s), способный расширить другой класс или реализовать интерфейс. Объявления такого класса выполняется одновременно с получением его объекта посредством оператора new. Рассмотрим для примера тот же метод walkThrough, что и предыдущем разделе. Класс Iter достаточно специфичен и совершенно бесполезен за пределами метода walkThrough. Имя класса Iter вряд ли придает коду

Читать »

Класс Object Java

Добавлено Дата: 31 May, 2011 категория: Java

 

Класс Object находится на вершине иерархии классов Java. Object явно или косвенно наследуется всеми классами, поэтому переменная типа Object способна указывать на объект любого типа, будь то экземпляр какого-либо класса или массив. Например, разработанный нами класс Attr предназначен для хранения атрибутов любого типа, поэтому его поле value объявлено как ссылка на объект типа Object. полю value (и любой переменной типа Object) нельзя непосредственно присваивать значения простых типов (таких как int, boolеаn и т.п.), но это ограничение легко обойти, "запаковав" значения в объекты соответствующих классов-оболочек (Integer, Boolean и др.), которые подробно описаны в главе 11.

Читать »

Класс Arrays

Добавлено Дата: 30 May, 2011 категория: Java

 

   предлагает ряд полезных статических методов, предназначенных для работы с массивами. Большинство из этих методов представлено в виде наборов перегруженных вариантов — по одному на каждый из массивов простых типов (за исключением методов поиска и сортировки значений boolean), а также массив элементов Object. Для некоторых методов предусмотрены две формы: одна обрабатывает массив целиком, а вторая действует по отношению к фрагменту массива, определяемому двумя заданными граничными значениями индексов. Краткие описания методов приведены ниже.

Читать »

Вызов методов базового класса Java

Добавлено Дата: 24 May, 2011 категория: Java

Чтобы снабдить объект рiхеl требуемыми функциями "очистки" своего внутреннего состояния, в классе Рiхе1 мы реализовали новую версию метода с1еаг, в теле которого посредством ссылки 5uper первым делом вызывается одноименный метод базового класса Роint. Ссылка 5uper во многом напоминает ссылку this, о которой МЫ говорили выше, за тем исключением, что 5uper позволяет адресовать элементы базового класса, а this ссылается на текущий объект.

Читать »

Пример документированной версии класса в Java

Добавлено Дата: 23 May, 2011 категория: Java

 

  Следующий код представляет документированную версию класса Attr, рассмотренного в разделе 3.1:

/**

* Объект <code>Attr</code> определяет атрибут в виде пары

* <code>name/value</code>,   где <code>name</code> – объект типа

Читать »

org. omg. CORBA — функции поддержки CORBA

Добавлено Дата: 22 May, 2011 категория: Java

 

   Пакет org.omg.CORBA с его различными вложенными пакетами, а также другие пакеты семейства org.omg (такие как CosNaming) обеспечивают поддержку функций и сервисов архитектуры CORBA (Common Object Request Broker Architecture) в приложениях, написанных на языке программирования Java. (Имена упомянутых пакетов отличаются от стандартных, принятых для обозначения пакетов ядра, поскольку они разработаны в рамках сообщества производителей программного обеспечения Object Management Group.) Архитектура CORBA предоставляет средства обмена сообщениями между процессами, которые могут быть реализованы на различных языках программирования. Этим, например, она отличается от технологии RMI (Remote Method Invocation) (см. раздел 20.6 на странице 556), обеспечивающей взаимодействие приложений, написанных — по меньшей мере, частично — на языке Java (мы употребляем термин "частично" по той причине, что программы с использованием RMI могут включать и код, обозначенный как native).

Читать »

Пример простого интерфейса Java

Добавлено Дата: 22 May, 2011 категория: Java

 

Некий простой интерфейс часто определяет свойство, присущее множеству объектов самых разнообразных классов. Подобные свойства нередко выражают в терминах способности (“ability”) объекта выполнять определенные функции. Например, в составе стандартных пакетов Java есть немало интерфейсов, в названии которых присутствует характерный суффикс “able”
Читать »

Map и sortedMap

Добавлено Дата: 20 May, 2011 категория: Java

 

   Интерфейс Map не является расширением интерфейса Collection, поскольку следует контракту, отличному от контракта Collection во многих важных аспектах. Основное отличие состоит в том, что коллекция Map предназначена для хранения пар данных вида ключ/значение (key/value) и позволяет осуществлять поиск значений по заданным ключам. Каждый ключ поддерживает соответствие (тар) не более чем одному значению, а каждое значение, в свою очередь, способно соответствовать любому количеству ключей. Структура данных ключ/значение может быть применена, например, для задания связи между фамилией человека и адресом его проживания. Если в коллекции имеется адрес, отвечающий фамилии, значение адреса должно быть уникальным. В то же время по указанному адресу могут проживать несколько людей, так что объект коллекции вернет одно и то же значение адреса для нескольких ключей-фамилий.

Читать »

Простое и глубокое клонирование Java

Добавлено Дата: 20 May, 2011 категория: Java

Реализацию функций клонирования, предусмотренную по умолчанию в классе Object, принято обозначать термином простое (или мелкое – shallow) клонирование – выполняется обычное копирование полей из одного объекта в другой. В процессе глубокого (deep) клонирования соответствующие методы clone вызываются для каждого объекта, обозначенного переменной-полем, и каждого элемента массива объектов. Процесс носит рекурсивный характер – клонированию подвергаются все объекты, служащие членами других объектов, начиная от текущего. Глубокое клонирование, предусматривающее необходимость переопределения методов clone, обычно при меняется в тех случаях, когда функций простого клонирования недостаточно (как в примере класса IntegerStack, рассмотренном выше).

Читать »