вторник, 29 марта 2011 г.

c. 163 Поиск последнего наблюдения показателя


Неужели у меня тоже получится так сложно?..
-----
Patient
public Phenomenon phenomenonOf (PhenomenonType phenomenonType)
По названию метода никак не понятно, что он возвращает последний показатель указанного типа.
---
public Phenomenon phenomenonOf (PhenomenonType phenomenonType).
return ( latestObservation(phenomenonType) == null ? new NullPhenomenon() : latestObservation(phenomenonType).phenomenon() );
Неясно, что такое NullPhenomenon. Как именно этот объект будет использоваться? Почему не возвращается простой null? Это нужно знать, чтобы правильно его написать.
По идее, NullPhenomenon должен наследовать Phenomenon, однако для Phenomenon не определён конструктор Phenomenon(). Соответственно, нет такого конструктора и у NullPhenomenon. И как это должно заработать?

public class NullPhenomenon extends Phenomenon {
    public NullPhenomenon() {
        super (name, type); // Какие значения я должен сюда положить? Особенно интересует type, который не может быть null.
    }
}
-
Два раза вычисляется latestObservation(phenomenonType).
Observation. Метод phenomenon() нужно дописать самому.
---
private Enumeration observationsOf (PhenomenonType value).
Enumeration e = observations();
Метод observations() тоже нужно писать самому. И если это просто _observations.elements(), то зачем отдельный метод?
---
Observation. Метод whenObserved() тоже не описан. Выдавать просто дату?
---
После "парного программирования" с Лёнькой получился такой код:
public Observation getLatestObservation (ResolutionType resolutionType) {
 List resolutionTypeObservations = this.getObservations (resolutionType);
 return resolutionTypeObservations.isEmpty () ? new NullObservation (resolutionType) : Collections.max (resolutionTypeObservations); 
    }
    
      private List getObservations (ResolutionType resolutionType) {
 List resolutionTypeObservations = new ArrayList();
 for (Observation observation : this.history) {
     if (observation.getResolutionTypeName().equals(resolutionType.getName())) {
  resolutionTypeObservations.add(observation);
     }
 }
 return resolutionTypeObservations;
    }

2 комментария:

  1. Поясни пожалуйста фразу

    "По идее, NullPhenomenon должен наследовать Phenomenon, однако для Phenomenon не определён конструктор Phenomenon(). Соответственно, нет такого конструктора и у NullPhenomenon."

    Какая связь между наличием/отсутствием какого-либо конструктора у родителя и наследника?

    ОтветитьУдалить
  2. "Implicit super constructor Test01() is undefined. Must explicitly invoke another constructor."
    [12:25:11] Leonid: я придираюсь к фразе
    "По идее, NullPhenomenon должен наследовать Phenomenon, однако для Phenomenon не определён конструктор Phenomenon(). Соответственно, нет такого конструктора и у NullPhenomenon."
    без того что сообщил компилятор потому что наличие или отсутствие конструктора у родителя не создаёт конструктор у наследника
    [12:25:57] Leonid: соответственно слово "Соответственно" в твоей фразе непонятно
    [12:26:31] Leonid: причинно-следственной связи в моей системе координат тут нет
    [12:26:49] Leonid: слово "Соответственно" говорит о наличии такой связи в твоей модели мира поэтому я и спросил...
    [12:27:04] alexded: А как написать? После "соответственно" обычно следует объяснение причины.
    [12:27:28] Leonid: да... в том то и дело я не вижу что то что ты написал там является причиной
    [12:28:08] alexded: Я провёл эксперимент. Если в родителе есть консруктор, ошибки нет. Нет конструктора - есть.
    [12:28:30] alexded: Значит, причина - конструктор. Его наличие или отсутствие.
    [12:28:45] Leonid: ага... значит я не так понял фразу "нет такого конструктора у..."
    [12:29:04] Leonid: в моей модели мира это звучало бы наверное по другому
    [12:29:08] alexded: "Соответственно, не может быть определён..."
    [12:30:57] alexded: А почему, кстати, неявный конструктор не определён. Он разве не определён по-умолчанию для каждого класса?
    [12:31:58] Leonid: конструктор без параметров создаётся только в том случае неявно, если разработчик не определил НИ ОДНОГО конструктора
    [12:32:27] alexded: А я думал, они существуют одновременно...
    [12:32:52] Leonid: нет...

    ОтветитьУдалить