Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
325 Кб
Скачать
☆

2.3 Описание объекта проектирования.

Пяти этажное здание, расположенное на склоне холма. В отеле имеются следующие помещения: тридцать гостевых номеров, фойе, холл, ресепшен, кафе, конференц зал, санузлы, два спортивных зала, массажные кабинеты душевые, административные помещения, комната отдыха персонала, раздевалка с душевой, прачечная, склад с чистым постельным бельем, электрощитовая, котельная, кухня и другие вспомогательные помещения.2

В отделке интерьеров и фасадов используются местные природные материалы: камень, дерево. Природный камень – это неповторимость природы. Узоры облицовочного камня полностью неповторимы, в природе не встречается похожих материалов.

Кафе. Кафе расположено на первом этаже. В нем расположена барная стойка и три стола для посетителей. Столы являются десяти местными. В основании они представляют собой металлическую сетку наполненную местным природным камнем. Столешница же сделана из сделана из стекла через которое можно любоваться камнями. Стулья из прозрачного акрила. В помещении кафе также расположен фонтан с каскадом идущий от лестницы. Пол уложен керамическими плитками а в местах их стыка вставлена прожилка стекла.

Фойе. Главным художественным центром интерьера является лестница. Под стеклянными ступеньками лестницы расположен водный каскад который берет свое начало с пятого этажа и впадает в водоем на первом этаже.

Проектирование объекта задача не простая и себе в помощь мы использовали специальные программы. Необходимо подобрать подходящие объекты, отнести их к различным классам, соблюдая разумную степень детализации, определить интерфейсы классов и иерархию наследования и установить существенные отношения между классами. Дизайн должен, с одной стороны, соответствовать решаемой задаче, с другой - быть общим, чтобы удалось учесть все требования, которые могут возникнуть в будущем. Хотелось бы также избежать вовсе или, по крайней мере, свести к минимуму необходимость перепроектирования.

Прежде всего, понятно, что не нужно решать каждую новую задачу с нуля. Вместо этого нужно стараться повторно использовать те решения, которые оказались удачными в прошлом. Отыскав однажды удачное решение, можно прибегать к нему снова и снова. Во многих объектно-ориентированных системах встречаются повторяющиеся паттерны, состоящие из классов и взаимодействующих объектов. С их помощью решаются конкретные задачи проектирования, в результате чего объектно-ориентированный дизайн становится более гибким, элегантным, и им можно воспользоваться повторно.

В общем случае паттерн состоит из четырех основных элементов:

Имя. Сославшись на него, мы можем описать проблему проектирования, ее решения и их последствия.

Задача. Описание того, когда следует применять паттерн. Необходимо сформулировать задачу и ее контекст. Может описываться конкретная проблема проектирования, например способ представления алгоритмов в виде объектов.

Решение. Описание элементов дизайна, отношений между ними, функций каждого элемента.

Результаты - это следствия применения паттерна и разного рода компромиссы.

Паттерн проектирования - это не то же самое, что связанные списки или хэш-таблицы, которые можно реализовать в виде класса и использовать без каких-либо изменений. Но это и не сложные предметно-ориентированные решения для целого приложения. Паттерн проектирования - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.

При описании паттернов проектирования будем придерживаться единого принципа. Описание каждого паттерна разбито на разделы, описанные ниже.

Название и классификация паттерна. Название паттерна должно четко отражать его назначение.

Назначение. Ответ на вопросы: каковы функции паттерна, его обоснование и назначение, какую конкретную задачу проектирования можно решить с его помощью.

Применимость. Описание ситуаций, в которых можно применять данный паттерн. Примеры проектирования, которые можно улучшить с его помощью. Распознавание таких ситуаций.

Структура. Графическое представление классов в паттерне.

Участники. Классы или объекты, задействованные в данном паттерне проектирования и их функции.

Отношения. Взаимодействие участников для выполнения своих функций.

Результаты. Насколько паттерн удовлетворяет поставленным требованиям? Результаты применения, компромиссы, на которые приходится идти.

Реализация. Сложности и подводные камни при реализации паттерна. Советы и рекомендуемые приемы. Есть ли зависимость от языка программирования.

Родственные паттерны. Связь с другими паттернами проектирования. Важные различия. Совместное использование.

Решение задач проектирования с помощью паттернов

Паттерны проектирования позволяют разными способами решать многие задачи, с которыми постоянно сталкиваются проектировщики объектно-ориентированных приложений.

Объектно-ориентированные программы состоят из объектов. Объект сочетает данные и процедуры для их обработки. Такие процедуры называют методами или операциями. Объект выполняет операцию, когда получает запрос (или сообщение) от клиента.

Посылка запроса - единственный способ заставить объект выполнить операцию. А выполнение операции - единственный способ изменить внутреннее состояние объекта.

Самая трудная задача в объектно-ориентированном проектировании - разложить систему на объекты. При решении приходится учитывать множество факторов: инкапсуляцию, глубину детализации, наличие зависимостей, гибкость, производительность, развитие, повторное использование и т.д. и т.п.

Многие объекты возникают в проекте из построенной в ходе анализа модели. Но нередко появляются и классы, у которых нет прототипов в реальном мире. Если придерживаться строгого моделироания и ориентироваться только на реальный мир, то получится система, отражающая сегодняшние потребности, но, возможно, не учитывающая будущего развития. Абстракции, возникающие в ходе проектирования, - ключ к гибкому дизайну.

Паттерны проектирования помогают выявить не вполне очевидные абстракции и объекты, которые могут их использовать. Например, объектов, представляющих процесс или алгоритм, в действительности нет, но они являются неотъемлемыми составляющими гибкого дизайна.

При объявлении объектом любой операции должны быть заданы: имя операции, объекты, передаваемые в качестве параметров, и значение, возвращаемое операцией. Эту триаду называют сигнатурой операции. Множество сигнатур всех определенных для объекта операций называется интерфейсом этого объекта.

Тип - это имя, используемое для обозначения конкретного интерфейса. У одного объекта может быть много типов. Напротив, сильно отличающиеся объекты могут разделять общий тип. Часть интерфейса может характеризоваться одним типом, а чась - другим. Интерфейсы могут содержать другие интерфейсы в качестве подмножеств. Один тип является подтипом другого, если интерфейс первого содержит интерфейс второго. В этом случае второй тип является супер типом для первого. Говорят также, что подтип наследует интерфейс своего супер типа.

Когда объекту посылается запрос, то операция, которую он будет выполнять, зависит как от запроса, так и от объекта-адресата. Разные объекты могут выполнять разные операции. Ассоциация запроса с объектом и одной из его операций во время выполнения называется динамическим связыванием.

Динамическое связывание означает, что отправка некоторого запроса не определяет никакой конкретной реализации до момента выполнения. Следовательно, допустимо написать программу, которая ожидает объект с конкретным интерфейсом, точно зная, что любой объект с подходящим интерфейсом сможет принять этот запрос. Более того, динамическое связываение позволяет во время выполнения подставлять один объект вместо другого, сли они имеют одинаковые интерфейсы. Такая взаимозаменяемость называется полиморфизмом. Полиморфизм упрощает определение клиентов, позволяет отделить объекты друг от друга и дает объектам возможность менять взаимоотношения во время выполнения.

Важно понимать различие между классом объекта и его типом. Класс объекта определяет, как объект реализован, т.е. внутреннее строение. Напротив, тип относится только к интерфейсу объекта. У объекта может быть много типов, и объекты разных классов могут иметь один и тот же тип.

Важно также понимать различие между наследованием класса и наследованием интерфейса. В случае наследования класса реализация объекта определяется в терминах реализации другого объекта. Напротив, наследование интерфейса описывает, когда один объект можно использовать вместо другого. Стандартный способ реализации наследования интерфейса в C++ - это открытое наследование классу, в котором есть исключительно виртуальные функции. Наследование класса или реализации можно осуществить с помощью закрытого наследования.