русс | укр

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

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

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

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


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

Построение сложных моделей


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


К числу важных преимуществ параметризации относится простота и надежность создания сложных моделей. Например, можно легко создать список (List) с элементами-кортежами:

//: generics/TupleList.java

// Построение сложных параметризованных типов путем объединения

import java.util.*;

import net.mindview.util.*;

 

public class TupleList<A,B,C,D>

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

public static void main(String[] args) {

TupleList<Vehicle, Amphibian, String, Integer> tl =

new TupleList<Vehicle, Amphibian, String, Integer>();

tl.add(TupleTest.h());

tl.add(TupleTest.h());

for(FourTuple<Vehicle,Amphibian,String,Integer> i: tl)

System.out.println(i);

}

}

<spoiler text="Output:"> (75% match)

(Vehicle@11b86e7, Amphibian@35ce36, hi, 47)

(Vehicle@757aef, Amphibian@d9f9c3, hi, 47)

</spoiler> Запись получается довольно громоздкой (особенно при создании итератора), однако вы получаете довольно сложную структуру данных без излишков программного кода. А вот другой пример, который показывает, как легко строить сложные модели на основе параметризованных типов. Хотя каждый класс представляет собой автономный «строительный блок», их совокупность имеет сложную структуру. В данном случае моделируется магазин с товарами, полками и стеллажами:

//: generics/Store.java

// Построение сложной модели на базе параметризованных контейнеров

import java.util.*;

import net.mindview.util.*;

 

class Product {

private final int id;

private String description;

private double price;

public Product(int IDnumber, String descr, double price){

id = IDnumber;

description = descr;

this.price = price;

System.out.println(toString());

}

public String toString() {

return id + ": " + description + ", price: $" + price;



}

public void priceChange(double change) {

price += change;

}

public static Generator<Product> generator =

new Generator<Product>() {

private Random rand = new Random(47);

public Product next() {

return new Product(rand.nextInt(1000), "Test",

Math.round(rand.nextDouble() * 1000.0) + 0.99);

}

};

}

 

class Shelf extends ArrayList<Product> {

public Shelf(int nProducts) {

Generators.fill(this, Product.generator, nProducts);

}

}

 

class Aisle extends ArrayList<Shelf> {

public Aisle(int nShelves, int nProducts) {

for(int i = 0; i < nShelves; i++)

add(new Shelf(nProducts));

}

}

 

class CheckoutStand {}

class Office {}

 

public class Store extends ArrayList<Aisle> {

private ArrayList<CheckoutStand> checkouts =

new ArrayList<CheckoutStand>();

private Office office = new Office();

public Store(int nAisles, int nShelves, int nProducts) {

for(int i = 0; i < nAisles; i++)

add(new Aisle(nShelves, nProducts));

}

public String toString() {

StringBuilder result = new StringBuilder();

for(Aisle a : this)

for(Shelf s : a)

for(Product p : s) {

result.append(p);

result.append("\n");

}

return result.toString();

}

public static void main(String[] args) {

System.out.println(new Store(14, 5, 10));

}

}

<spoiler text="Output:">

258: Test, price: $400.99

861: Test, price: $160.99

868: Test, price: $417.99

207: Test, price: $268.99

551: Test, price: $114.99

278: Test, price: $804.99

520: Test, price: $554.99

140: Test, price: $530.99

</spoiler> Как видно из Store.toString(), в результате мы получаем многоуровневую архитектуру контейнеров, не лишаясь преимуществ безопасности типов и управляемости. Впечатляет и то, что построение такой модели не потребует заметных умственных усилий.



<== предыдущая лекция | следующая лекция ==>
Анонимные внутренние классы | Тайна стирания


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


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

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

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


 


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

 
 

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

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