WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 6 | 7 || 9 | 10 |   ...   | 16 |

* * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

*/ #ifndef SGI_STL_MAP_H #define SGI_STL_MAP_H #ifndef SGI_STL_INTERNAL_TREE_H #include #endif #include #include #include #ifdef STL_USE_NAMESPACES using STD::rb_tree;

- 57 - УМП «Автоматизированные методы разработки архитектуры ПО» using STD::map;

#endif /* STL_USE_NAMESPACES */ #endif /* SGI_STL_MAP_H */ // Local Variables:

// mode:C++ // End:

Для использования контейнера map необходима инструкция:

#include ;

”… Если вы хотите использовать данную коллекцию, чтобы избежать дубликатов, то вы избежите их только по ключу”, сообщает Олег Ремизов про контейнер map.

set – это контейнер уникальных значений const Key каждое из которых также является и ключом (отсортированная коллекция, предназначенная для быстрого поиска необходимого значения). К ключу предъявляются те же требования, что и в случае ключа для map.

Использование контейнера set позволяет избежать повторного сохранения одного и того же значения. Скотт Майерс в Совете пишет, "...Контейнеры set/multi set, как и все стандартные ассоциативные контейнеры, хранят свои элементы в отсортированном порядке, и правильное поведение этих контейнеров зависит от сохранения этого порядка. Если изменить значение элемента в ассоциативном контейнере (например, заменить 10 на 1000), новое значение окажется в неправильной позиции. Это нарушит порядок сортировки элементов в контейнере. Сказанное, прежде всего, касается контейнеров map и multimap, поскольку программы, пытающиеся изменить значение ключа в этих контейнерах, не будут компилироваться..." [21].

Ниже приведён исходный код контейнера set.

/* * * Copyright (c) * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

* * * Copyright (c) 1996, * Silicon Graphics Computer Systems, Inc.

* * Permission to use, copy, modify, distribute and sell this software - 58 - УМП «Автоматизированные методы разработки архитектуры ПО» * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

*/ #ifndef SGI_STL_SET_H #define SGI_STL_SET_H #ifndef SGI_STL_INTERNAL_TREE_H #include #endif #include #include #include #ifdef STL_USE_NAMESPACES using STD::rb_tree;

using STD::set;

#endif /* STL_USE_NAMESPACES */ #endif /* SGI_STL_SET_H */ // Local Variables:

// mode:C++ // End:

Для использования контейнера set необходима инструкция:

#include ;

multimap – это модифицированный конейнер map, в котором отсутствует требования уникальности ключа. Как сообщает Олег Ремизов “если вы произведете поиск по ключу, то вам вернется не одно значение, а набор значений, сохраненных с данным ключом”.

Ниже приведён исходный код контейнера multimap.

/* * * Copyright (c) * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

* * * Copyright (c) 1996, * Silicon Graphics Computer Systems, Inc.

* * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear - 59 - УМП «Автоматизированные методы разработки архитектуры ПО» * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

*/ #ifndef SGI_STL_MULTIMAP_H #define SGI_STL_MULTIMAP_H #ifndef SGI_STL_INTERNAL_TREE_H #include #endif #include #include #include #ifdef STL_USE_NAMESPACES using STD::rb_tree;

using STD::multimap;

#endif /* STL_USE_NAMESPACES */ #endif /* SGI_STL_MULTIMAP_H */ // Local Variables:

// mode:C++ // End:

Для использования контейнера multimap необходима инструкция:

#include < multimap.h>;

multiset – соответствнно замечанию Скотта Майерса, контейнер multiset это модифицированный контейнер set. Он также не содержит требования уникальности ключа, что, в свою очередь, приводит к возможности хранения дубликатов значений. Тем не менее, как объясняет Олег Ремизов, существует возможность быстрого нахождения значений по ключу в случае, если в процессе разработки был определен свой класс. Поскольку все значения в котнейнерах map и set хранятся в отсортированном виде, то получается, что в них можно быстро отыскать необходимое значение по ключу. Однако при этом, операция вставки нового элемента T, по выражению Олега Ремизова, “будет стоить нам несколько дороже, чем например в vector”.

Ниже приведён исходный код контейнера multiset.

/* * * Copyright (c) * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Hewlett-Packard Company makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

* * - 60 - УМП «Автоматизированные методы разработки архитектуры ПО» * Copyright (c) 1996, * Silicon Graphics Computer Systems, Inc.

* * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty.

*/ #ifndef SGI_STL_MULTISET_H #define SGI_STL_MULTISET_H #ifndef SGI_STL_INTERNAL_TREE_H #include #endif #include #include #include #ifdef STL_USE_NAMESPACES using STD::rb_tree;

using STD::multiset;

#endif /* STL_USE_NAMESPACES */ #endif /* SGI_STL_MULTISET_H */ // Local Variables:

// mode:C++ // End:

Для использования контейнера multiset необходима инструкция:

#include < multiset.h>;

- 61 - УМП «Автоматизированные методы разработки архитектуры ПО» 4.2. Строки и STL Наверно каждый программист C/C++, как, впрочем, и представители других языковых средств программирования, включали в проектируемые программы модули для обработки строк.

Не существует библиотек, которые не содержат класс для представления строк или даже несколько подобных классов. Библиотека STL в этом смысле также не исключение и строки в STL поддерживают как формат ASCII, так и формат Unicode. Говоря о программировании обработки строк в STL, Скотт Майерс предостерегает от неверных последствий при использовании динамической памяти при обработке строк: “…Каждый раз, когда вы готовы прибегнуть к динамическому выделению памяти под массив (собираетесь включить в программу строку вида «new T[...]»), подумайте, нельзя ли вместо этого воспользоваться контейнером vector или string. Как правило, контейнер string используется в том случае, если Т является символьным типом, a контейнер vector — во всех остальных случаях.

Контейнеры vector и string избавляют программиста от хлопот, о которых говорилось выше, поскольку они самостоятельно управляют своей памятью. Занимаемая ими память расширяется по мере добавления новых элементов, а при уничтожении контейнера vector или string деструктор автоматически уничтожает элементы контейнера и освобождает память, в которой они находятся.

Кроме того, контейнеры vector и string входят в семейство последовательных контейнеров STL, поэтому в вашем распоряжении оказывается весь арсенал алгоритмов STL, работающих с этими контейнерами. Впрочем, алгоритмы STL могут использоваться и с массивами, однако у массивов отсутствуют удобные функции begin, end, size и т. п., а также вложенные определения типов (iterator, reverseiterator, value_type и т. д.), а указатели char* вряд ли могут сравниться со специализированными функциями контейнера string. Работа с библиотекой STLприводит к исключению практики применения встроенных массивов.

Контейнер string – представляет собой коллекцию, хранящую символы char в формате ASCII.

Исходный код контейнера контенера string приведен в Приложении.

Для использования контейнера string необходима инструкция:

#include ;

Иногда выбор контейнера vector является лучшим решением.

- 62 - УМП «Автоматизированные методы разработки архитектуры ПО» wstring - это контейнер, храннящий двухбайтные символы wchar_t, используемые для представления символов в формате Unicode.

Относительно строковых контейнеров Скотт Майерс указывает, что: “…Все, что говорится о контейнере string, в равной степени относится и к wstring, его аналогу с расширенной кодировкой символов. Соответственно, любые упоминания о связи между string и char или char* относятся и к связи между wstring и wchar_t или wchar_t*. Иначе говоря, отсутствие специальных упоминаний о строках с расширенной кодировкой символов не означает, что в STL они не поддерживаются. Контейнеры string и wstring являются специализациями одного шаблона basic_string”.

В таблице представлены имена используемых в STL функций (методов).

Таблица empty определяет, не пустой ли контейнер size определяет размер контейнера begin возвращает прямой итератор, указывающий на начало контейнера end возвращает прямой итератор, указывающий на конец контейнера rbegin возвращает обратный итератор, указывающий на начало контейнера rend возвращает обратный итератор, указывающий на конец контейнера clear удаляет все элементы контейнера erase удаляет элемент или несколько элементов из контейнера capacity определяет размер буфера контейнера Алгоритмы STL представлены в виде функций, которые можно разделить на три группы:

“…Функции для перебора всех членов коллекции и выполнения определенных действий над каждым из них:

count, count_if, find, find_if, adjacent_find, for_each, mismatch, equal, search copy, copy_backward, swap, iter_swap, swap_ranges, fill, fill_n, generate, generate_n, replace, replace_if, transform, remove, remove_if, remove_copy, remove_copy_if, unique, unique_copy, reverse, reverse_copy, rotate, rotate_copy, random_shuffle, partition, stable_partition Функции для сортировки членов коллекции:

- 63 - УМП «Автоматизированные методы разработки архитектуры ПО» Sort, stable_sort, partial_sort, partial_sort_copy, nth_element, binary_search, lower_bound, upper_bound, equal_range, merge, inplace_merge, includes, set_union, set_intersection, set_difference, set_symmetric_difference, make_heap, push_heap, pop_heap, sort_heap, min, max, min_element, max_element, lexographical_compare, next_permutation, prev_permutation.

Функции для выполнения определенных арифметических действий над членами коллекции:

Accumulate, inner_product, partial_sum, adjacent_difference”.

Остальной материал по библиотеке STL необходимо изучать по документации. Читая документацию, следует повторить все особенности элементов библиотеки STL, рассмотренные выше, и восполнить значительный, как по объёму, так и по значимости, метериал, о котором в данной главе не упоминалось.

4.3. Вопросы и задания для самостоятельной работы студента по теме «Компонентная архитектура» 1) Что такое компонентная архитектура ПО 2) С помощью какого языка программирования можно разрабатывать компонентную архитектуру и почему 3) Что Вы знаете про STL 4) Назовите другие библиотеки стандартных шаблонов.

5) Какие библиотеки разработки для компонентных архитектур Вы знаете 6) Какое направление развивает Бьерн Страуструп в области разработки ПО 7) Какое направление развивает Александр Степанов в области разработки ПО Литература по теме «Компонентная архитектура» • Калянов Г. Н. CASE: структурный системный анализ (автоматизация и применение). М.: ЛОРИ, 1996.

• Элджер Д. C++: библиотека программиста. Питер, 2000.

• Александреску А. Современное проектирование на C++. М. :

Вильямс, 2002.

- 64 - УМП «Автоматизированные методы разработки архитектуры ПО» • Мейерс С. Эффективное использование STL. Библиотека программиста. СПб.: Питер, 2002.

• Страуструп Б. Язык программирования С++. Специальное издание. Бином. М.: 2006.

• CoderSource.net, C++ Tutorial on Templates, Explains the basics of C++ Class Templates http://www.codersource.net/cpp_template_function.html • Ремизов О. Использование STL в C++, http://www.codenet.ru/progr/cpp/stl/Using-STL.php - 65 - УМП «Автоматизированные методы разработки архитектуры ПО».

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

Применение проектировщиками систем CAD (Computer Aided Desighn) позволяет автоматизировать выполнение чертёжных работ для оформления конкретной части проекта. Проект в целом представляет собой набор документов по всем частям проекта и документ общего описания проекта (пояснительная записка). Только после разработки проекта производятся работы по возведению объекта строительства.

Архитектор программного обеспечения, разрабатывая детали и части проекта выполняет разработку проекта в целом.

Действия архитектора по разработке архитектурной части программной системы тесно связаны с использованием выразительных функций языка моделирования UML. В отличие от графических средств систем автоматизированного проектирования (CAD), функции UML, представленные в виде графических символов, предоставляют больший и существенно более гибкий арсенал средств модельного проектирования (моделирования) ПО. Применение языка UML и представляет, таким образом, собой процесс проектирования системы в целом. Описание языка UML не включено в данный материал, но описание некотоых подходов при проектировании ПО тесно связано с представлениями, заложенными в языке моделирования UML.

Pages:     | 1 |   ...   | 6 | 7 || 9 | 10 |   ...   | 16 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.