Диаграмма UML
Я опубликовал диаграмму UML для назначения, которое просит декодировать цветовые полосы для данного резистора и вернуть строку, которая возвращает сопротивление в омах, а такжеего терпимость.
Я немного борюсь с иерархией наследования, и в описании проблемы профессора класс LookupTable - это абстрактный класс с абстрактным методом get ().Классы NumberLookup и ToleranceLookup расширяют класс LookupTable, а класс MultiplierLookup расширяет класс NumberLookup.
Полагаю, у меня больше всего проблем с концептуализацией того, должен ли класс MultiplierLookup расширять класс LookupTable или класс NumberLookup.
Вот описание конкретной проблемы:
Объект ResistorDecoder будет объектом, используемым вашим Program.java для преобразования массива цветов в удобную для человека строку,ResistorDecoder потребуется несколько различных типов таблиц поиска в зависимости от того, ищем ли мы строку по цветам или по числовому значению.Объект LookupTable является абстрактным классом, поскольку он содержит абстрактный метод get ().Объект ToleranceLookup принимает цвет и возвращает строку, которая является строкой допуска (например, ± 5%).Объект NumberLookup принимает цвет и может возвращать String, но он также может возвращать Double.Так как мы расширяем объект LookupTable (у него не было возможности возвращать удвоение раньше), нам нужно наследовать от объекта LookupTable.Объект MultiplierLookup работает аналогично объекту NumberLookup, но внутренние таблицы поиска отличаются.Поэтому нам нужно наследовать от таблицы NumberLookup, даже если нам не нужно добавлять какие-либо методы.Подсказка: можете ли вы заставить MultiplierLookup использовать поведение getDouble NumberLookup, чтобы упростить его ответственность?
До сих пор я пытался создать различные классы / подклассы следующим образом:
LookupTable.java
/**
* abstract class with abstract method get()
*
*
*/
public abstract class LookupTable {
/**
*
* abstract class with abstract get method that has no implementation defined, behavior is defined in subclasses
*
* @param color
* @return
*/
abstract String get(String color);
}
NumberLookup.java
public class NumberLookup extends LookupTable {
private HashMap<String, String> numberTable = new HashMap<>();
String get(String color) { // abstract method implementation
return color;
}
public NumberLookup() {
String[] colors = { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue", "Violet",
"Gray", "White" };
for (String color : colors) {
for (int i = 0; i <= 9; i++) {
numberTable.put(color, (i));
}
}
// constructor
}
/**
*
* @param color
* @return the corresponding
*/
public double getDouble(String color) { // new method
return (numberTable.get(color));
}
}
ToleranceLookup.java
/**
* intakes a color and returns a String that is the tolerance String ex.( (+/-
* 5%))
*
* adds the OHM symbol and tolerance to the end of the final string to be
* printer
*/
public class ToleranceLookup extends LookupTable {
/**
*
* default empty constructor
*/
public ToleranceLookup() {
}
/**
*
* @param color band as a string
* @return the Ohm and tolerance suffix
*/
public String get(String color) {
switch (color) {
case "Black":
return "\u03A9";
case "Brown":
return ("\u03A9, \u00B1" + "1%");
case "Red":
return ("\u03A9, \u00B1" + "2%");
case "Orange":
return ("\u03A9");
case "Yellow":
return ("\u03A9, \u00B1" + "5%");
case "Green":
return ("\u03A9, \u00B1" + ".5%");
case "Blue":
return ("\u03A9, \u00B1" + ".25%");
case "Violet":
return ("\u03A9, \u00B1" + ".1%");
case "Gray":
return ("\u03A9, \u00B1" + "10%");
case "White":
return ("\u03A9");
case "Gold":
return ("\u03A9, \u00B1" + "5%");
case "Silver":
return ("\u03A9, \u00B1" + "10%");
case "None":
return ("\u03A9, \u00B1" + "20%");
default:
return null;
}
}
}
MultiplierLookup.java
/**
* inherits from the NumberLookup object but no methods need to be added.
*
* Internal lookup table is different
*
*
*/
public class MultiplierLookup extends NumberLookup {
private HashMap<String, Double> multiplier = new HashMap<>();
String get(String color) {
return color;
}
public MultiplierLookup() {// constructor
String[] colors = new String[] { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue",
"Violet", "Gray", "White" };
for (String color : colors) {
int j = -2;
while (j <= 9) {
multiplier.put(color, (Double.toString(Math.pow(10, j)));
j++;
}
}
}
public Double getDouble(String color) { // returns a double value
return multiplier.get(color);
}
}
Я понимаю, что на данный момент в коде есть некоторые ошибки, и я думаю, что по большей части понимаю, как их исправить, но я действительно новичок в ООПи взаимосвязанные / зависимые классы.Хотя я понимаю, как наследование работает на базовом уровне, я не уверен, как заставить мой класс MultiplierLookup наследоваться от NumberLookup и LookupTable.Извините, если этот вопрос многословен и / или слишком прост, но я потратил много времени, просматривая этот сайт для всех своих заданий, и вклад в этот документ в буквальном смысле неоценим, поэтому я подумал, что это будет лучшим местом для обращения к,
Я ни в коем случае не ожидаю, что кто-нибудь завершит этот код для меня, и я действительно получаю удовольствие от решения проблемы, но я чувствую, что объяснение мне понятий с конкретным примером для работы будет полезным.Заранее спасибо!
Кроме того, я еще не совсем создал класс ResistorDecoder из-за его зависимости от подклассов.Но в основном он будет составлять строку, основанную на информации из других классов.