Как поддерживать несколько реализаций без изменения клиентского кодаJAVA

Программисты JAVA общаются здесь
Anonymous
Как поддерживать несколько реализаций без изменения клиентского кода

Сообщение Anonymous »

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

Код: Выделить всё

class Date {
private final int month;
private final int day;
private final int year;

public BasicDate(int m, int d, int y) { //constructor
this.month = m;
this.day = d;
this.year = y;
}

public int month() {
return month;
}
public int day() {
return day;
}
public int year() {
return year;
}

public String toString() {
return month() + "/" + day() + "/" + year();
}
}
И вторая реализация с большим количеством вычислительных циклов, но меньшим объемом памяти:

Код: Выделить всё

class Date{
private final int value;

public SmallDate(int m, int d, int y) {
this.value = y*512 + m*32 + d;
}

public int month() {
return (value / 32) % 16 ;
}
public int day() {
return value % 32 ;
}
public int year() {
return value / 512 ;
}

public String toString() {
return month() + "/" + day() + "/" + year();
}
}
А потом они говорят следующее: В Java есть различные продвинутые языковые механизмы для поддержки нескольких реализаций без необходимости изменения клиентского кода, но мы используем их экономно
потому что их использование ограничено. сложно (и даже спорно) даже для экспертов
, особенно в
в сочетании с другими продвинутыми функциями языка, которые мы ценим (обобщениями и итераторами).
Что это такое функции? И как я могу поддерживать эти две реализации одновременно?

Подробнее здесь: https://stackoverflow.com/questions/786 ... lient-code

Вернуться в «JAVA»