русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Кортежи


Дата добавления: 2015-06-12; просмотров: 1950; Нарушение авторских прав


При вызове метода часто требуется, чтобы метод возвращал несколько объектов. Команда return позволяет вернуть только один объект, поэтому проблема решается созданием объекта, содержащего несколько возвращаемых объектов. Конечно, можно создавать специальный класс каждый раз, когда возникает подобная ситуация, но параметризованные типы позволяют решить проблему один раз и избавиться от хлопот в будущем. Заодно решается проблема безопасности типов на стадии компиляции. Концепция нескольких объектов, «упакованных» в один объект, называется кортежем (tuple). Получатель объекта может читать элементы, но не может добавлять их (эта концепция еще называется объектом передачи данных). Обычно кортеж может иметь произвольную длину, а все объекты кортежа могут относиться к разным типам. Однако мы хотим задать тип каждого объекта и при этом гарантировать, что при чтении значения будет получен правильный тип. Для решения проблемы переменной длины мы создадим несколько разных кортежей. Вот один из них, рассчитанный на два объекта:

//: net/mindview/util/TwoTuple.java

package net.mindview.util;

 

public class TwoTuple<A,B> {

public final A first;

public final B second;

public TwoTuple(A a, B b) { first = a; second = b; }

public String toString() {

return "(" + first + ", " + second + ")";

}

}

Конструктор запоминает сохраняемый объект, а вспомогательная функция toString() выводит значения из списка. Обратите внимание: кортеж подразумевает упорядоченное хранение элементов. При первом чтении может показаться, что такая архитектура нарушает общие принципы безопасности программирования на Java. Разве first и second не должны быть объявлены приватными, а обращения к ним осуществляться только из методов getFirst() и getSecond()? Подумайте, какая безопасность реализуется в этом случае: клиент может читать объекты и делать с прочитанными значениями все, что пожелает, но не может изменить first и second. Фактически объявление final делает то же самое, но короче и проще. Кортежи большей длины создаются посредством наследования. Добавить новый параметр типа несложно:



//:------------ net/mindview/util/ThreeTuple.java

package net.mindview.util;

 

public class ThreeTuple<A,B,C> extends TwoTuple<A,B> {

public final C third;

public ThreeTuple(A a, B b, C c) {

super(a, b);

third = c;

}

public String toString() {

return "(" + first + ", " + second + ", " + third +")";

}

}

 

//:-------------- net/mindview/util/FourTuple.java

package net.mindview.util;

 

public class FourTuple<A,B,C,D> extends ThreeTuple<A,B,C> {

public final D fourth;

public FourTuple(A a, B b, C c, D d) {

super(a, b, c);

fourth = d;

}

public String toString() {

return "(" + first + ", " + second + ", " +

third + ", " + fourth + ")";

}

}

 

//:--------------- net/mindview/util/FiveTuple.java

package net.mindview.util;

 

public class FiveTuple<A,B,C,D,E>

extends FourTuple<A,B,C,D> {

public final E fifth;

public FiveTuple(A a, B b, C c, D d, E e) {

super(a, b, c, d);

fifth = e;

}

public String toString() {

return "(" + first + ", " + second + ", " +

third + ", " + fourth + ", " + fifth + ")";

}

}

Чтобы воспользоваться этими классами, достаточно определить кортеж нужной длины как возвращаемое значение функции, а затем создать и вернуть его командой return:

//: generics/TupleTest.java

import net.mindview.util.*;

 

class Amphibian {}

class Vehicle {}

 

public class TupleTest {

static TwoTuple<String,Integer> f() {

// Autoboxing converts the int to Integer:

return new TwoTuple<String,Integer>("hi", 47);

}

static ThreeTuple<Amphibian,String,Integer> g() {

return new ThreeTuple<Amphibian, String, Integer>(

new Amphibian(), "hi", 47);

}

Static

FourTuple<Vehicle,Amphibian,String,Integer> h() {

Return

new FourTuple<Vehicle,Amphibian,String,Integer>(

new Vehicle(), new Amphibian(), "hi", 47);

}

Static

FiveTuple<Vehicle,Amphibian,String,Integer,Double> k() {



<== предыдущая лекция | следующая лекция ==>
Простая параметризация | Класс стека


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.045 сек.