![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Диаграммы параллельных состояний observatlons.addElement(newObs); private Vector observations = new VectorO; } С помощью следующего фрагмента кода я могу создавать наблюдения. new Patient( Adams ).perslst(); new Observatlon(PhenomenonType.get( gender ), phenomenonNamed( male ), Patient.get( Adams ), new Date (96, 3, 1) ); class PhenomenonType { public Phenomenon phenomenonNamed(Strlng name) { Enumeration e = phenomenaO; while (e.hasMoreElementsO ) Phenomenon each = (Phenomenon)e.nextElement(); If (each.name().equals(name)) return each; return null; После создания наблюдений необходимо иметь возможность поиска самого последнего показателя. class Patient public Phenomenon phenomenonOf (PhenomenonType phenomenonType) return (latestObservatlon(phenomenonType) == null ? new NullPhenomenonO : latestObservatlon(phenomenonType).phenomenonO ); private Obsertatlon latestObservation(PhenomenonType value) { return latestObservatlonln(observatlonsOf(value) ); private Enumeration observatlonsOf(PhenomenonType value) { Vector result = new VectorO; Enumeration e = observatlonsO; while (e.hasMoreElementsO ) { Observation each = (Observation) e.nextElementO; if (each.phenomenonTypeO = = value) result.addElement(each); return result.elementsO; private Observation latestObservationln (Enumeration observationEnum) if (!ObservationEnum.hasMoreElementsO ) return null; Observation result = Observatlon)observationEnum. nextElementO; if (! ObservationEnum. hasMoreElementsO ) return result; do { Observation each = (Observation)observationEnum. nextElementO; if (each.whenObserved(). after(result.whenObservedO ) ) result = each; while (observationEnum. hasMoreElementsO ); return result; class Observation public PhenomenonType phenomenonType() { return phenomenon.phenomenonType() ; Для реализации этого можно объединить нескольких методов в один. Для иллюстрации можно было бы построить диаграмму, но я не буду этого делать. Способ, которым я декомпозирую метод, больше относится к реорганизации (см. главу 2), чем к уже выполненному проектированию. Теперь можно рассмотреть добавление поведения для измерений. Во-первых, давайте посмотрим на определение класса Измерение (Measurement) и его конструктор. public class Measurement extends Observation { public Measurement(Quantity amount, PhenomenonType phenomenonType, Patient patient, Date whenObserved) { initialize (patient, whenObserved); amount = amount ; phenomenonType = phenomenonType; public PhenomenonType phenomenonType() { return phenomenonType; }; public String toStrlngO { return .phenomenonType + : + amounts; private Quantity amount; private PhenomenonType .phenomenonType; } class Observation protected void lnitiallze(Patlent patient, Date whenObserved) { patient.observationsAdd(thls); whenObserved = whenObserved; Следует заметить, что диаграмма классов служит хорошей отправной точкой для разработки данного фрагмента кода. И снова нам требуется самое последнее измерение. Class Patient public Quantity latestAmountOf(phenomenonType value) { return ((latestMeasurement(value) == null) ) ? new NullQuantlty():latestMeasurement(value).amount(); private Measurement latestMeasurement(PhenomenonType value) { if (latestObservatlon(value) == null) return null; if (!latestObservatlon(value).lsMeasurement() ) return null; return (Measurement)latestObservatlon(value); В каждом их этих случаев диаграмма классов определяет основную структуру, мы же только добавляем поведение, чтобы реализовать интересующие нас запросы. На данной стадии можно описать наше положение с помощью диаграммы классов уровня спецификации, изображенной на рис. 11.7. Посмотрим, каким образом данная диаграмма акцентирует внимание на интерфейсе, а не на реализации. Роль от Типа Показателя к Показателю моделируется как некая квалифицированная роль, поскольку это главный интерфейс класса Тип Показателя. Аналогично показана связь Наблюдения с Типом Показателя, поскольку и здесь существует интерфейс, хотя имеется только одно измерение с прямым указателем на Показатель. Глядя на эту диаграмму, мы можем сделать вывод, что единственное различие между классами Измерение и Наблюдение заключается в том.
ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |