09.04.2016 Views

Priemioop

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ак решать задачи проектирования<br />

Сравнение структур времени выполнения<br />

и времени компиляции<br />

Структура объектно-ориентированной программы на этапе выполнения часо<br />

имеет мало общего со структурой ее исходного кода. Последняя фиксируется<br />

а этапе компиляции; код состоит из классов, отношения наследования между<br />

оторыми неизменны. На этапе же выполнения структура программы - быстро<br />

зменяющаяся сеть из взаимодействующих объектов. Две эти структуры почти<br />

езависимы.<br />

Рассмотрим различие между агрегированием и осведомленностью (acquaintance)<br />

бъектов и его проявления на этапах компиляции и выполнения. Агрегирование<br />

одразумевает, что один объект владеет другим или несет за него ответственность.<br />

общем случае мы говорим, что объект содержит другой объект или является его<br />

астью. Агрегирование означает, что агрегат и его составляющие имеют одинакоое<br />

время жизни.<br />

Говоря же об осведомленности, мы имеем в виду, что объекту известно о друом<br />

объекте. Иногда осведомленность называют ассоциацией или отношением<br />

использует». Осведомленные объекты могут запрашивать друг у друга операции,<br />

о они не несут никакой ответственности друг за друга. Осведомленность - это<br />

олее слабое отношение, чем агрегирование; оно предполагает гораздо менее тесую<br />

связь между объектами.<br />

На наших диаграммах осведомленность будет обозначаться сплошной линией<br />

о стрелкой. Линия со стрелкой и ромбиком вначале обозначает агрегирование.<br />

Агрегирование и осведомленность легко спутать, поскольку они часто реалиуются<br />

одинаково. В языке Smalltalk все переменные являются ссылками на<br />

бъекты, здесь нет различия между агрегированием и осведомленностью. В C++<br />

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

являются экземплярами, но чаще их определяют как указатели или ссылки.<br />

сведомленность также реализуется с помощью указателей и ссылок.<br />

Различие между осведомленностью и агрегированием определяется, скорее,<br />

редполагаемым использованием, а не языковыми механизмами. В структуре, суествующей<br />

на этапе компиляции, увидеть различие нелегко, но тем не менее оно<br />

ущественно. Обычно отношений агрегирования меньше, чем отношений освеомленности,<br />

и они более постоянны. Напротив, отношения осведомленности<br />

озникают и исчезают чаще и иногда длятся лишь во время исполнения некотоой<br />

операции. Отношения осведомленности, кроме того, более динамичны, что<br />

атрудняет их выявление в исходном тексте программы.<br />

Коль скоро несоответствие между структурой программы на этапах компиляии<br />

и выполнения столь велико, ясно, что изучение исходного кода может скаать<br />

о работе системы совсем немного. Поведение системы во время выполнения<br />

олжно определяться проектировщиком, а не языком. Соотношения между объеками<br />

и их типами нужно проектировать очень аккуратно, поскольку именно от

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

Saved successfully!

Ooh no, something went wrong!