09.04.2016 Views

Priemioop

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

_^ ч Структурные паттерны<br />

Теперь мы можем представить аппаратный блок компьютера в виде подкласса<br />

к CompositeEquipment под названием Chassis. Chassis наследует порожденные<br />

операции класса CompositeEquipment.<br />

class Chassis : public CompositeEquipment {<br />

public:<br />

Chassis(const char*);<br />

virtual -Chassis();<br />

};<br />

virtual Watt Power();<br />

virtual Currency NetPriceO;<br />

virtual Currency DiscountPrice();<br />

Мы можем аналогично определить и другие контейнеры для оборудования,<br />

например Cabinet (корпус) и Bus (шина). Этого вполне достаточно для сборки<br />

из отдельных блоков довольно простого персонального компьютера:<br />

Cabinet* cabinet = new Cabinet("PC Cabinet");<br />

Chassis* chassis = new Chassis("PC Chassis");<br />

cabinet->Add(chassis);<br />

Bus* bus = new Bus("MCA Bus");<br />

bus->Add(new Card("16Mbs Token Ring"));<br />

chassis->Add(bus);<br />

chassis->Add(new FloppyDisk("3.Sin Floppy"));<br />

cout « "Полная стоимость равна " « chassis->NetPrice()<br />

« endl;<br />

Известные применения<br />

Примеры паттерна компоновщик можно найти почти во всех объектно-ориентированных<br />

системах. Первоначально класс View в схеме модель/вид/контроллер<br />

в языке Smalltalk [KP88] был компоновщиком, и почти все библиотеки для<br />

построения пользовательских интерфейсов и каркасы проектировались аналогично.<br />

Среди них ЕТ++ (со своей библиотекой VObjects [WGM88]) и Interviews (классы<br />

Styles [LCI+92], Graphics [VL88] и Glyphs [CL90]). Интересно отметить, что<br />

первоначально вид View имел несколько подвидов, то есть он был одновременно<br />

и классом Component, и классом Composite. В версии 4.0 языка Smalltalk-80 схема<br />

модель/вид/контроллер была пересмотрена, в нее ввели класс Visual-Component,<br />

подклассами которого являлись View и CompositeView.<br />

В каркасе для построения компиляторов RTL, который написан на Smalltalk<br />

[JML92], паттерн компоновщик используется очень широко. RTLExpression -<br />

это разновидность класса Component для построения деревьев синтаксического<br />

разбора. У него есть подклассы, например Binary Express ion, потомками которого<br />

являются объекты класса RTLExpression. В совокупности эти классы определяют<br />

составную структуру для деревьев разбора. RegisterTransf'er - класс

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!