Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных - словарь терминов на Delphi + Пояснительная записка
Медиа плейер на Delphi + Пояснительная записка
База данных студентов на Delphi (файл записей) + Блок схемы

Пример применения списков


Рассмотрим задачу поиска маршрутов между заданными пунктами на карте. Карта может быть представлена графом, узлами которого являются города, а дороги отражаются как связи между узлами. Если наша программа должна быть универсальной, т.е. уметь обрабатывать различные карты, то подходящим контейнером для хранения карты является список. В нем можно хранить список городов и связей между ними. Такой список легко создавать и обрабатывать.
Что такое город с точки зрения структуры данных? Город имеет название, координаты и список соседей к которым проложены дороги. С другой стороны, ни к городу ни к карте как к прикладным объектам не целесообразно применять ссылочную семантику принятую для списков. Мы приходим к ситуации, когда желательно использовать код разработанный для класса списков, но не порождать потомков этого класса. Поэтому карта и город должны включать поля TRList, но не наследовать от него.
Определим два вспомогательных класса для положения города и указания связи с другим городом. Положение, это информация. Бессмысленно говорить о положении как об информации, если оно не содержит координат, отсюда конструктор содержит два параметра — x и y, и в класс добавлены соответствующие свойства.
Пример применения списков
Связь это тоже информация. Точно так же связь не информативна, если не указывает с чем связан объект, поэтому город сделан параметром конструктора.

Описание города является информацией, а конструктор имеет параметры названия и координат. Название и положение города можно узнать не только при создании, но и в любой последующий момент, поэтому добавлены свойства Name и Pos.
Описание города является информацией
Обратите внимание, что связи с другими городами непосредственно заложены в определение города а не карты. Это вопрос который можно решать так или иначе, но связи в TCity скрыты, т.е. являются реализацией. Если в дальнейшем вопрос размещения связей будет пересмотрен, пользователи класса не испытают никаких неудобств.
Наконец, карта — это объект в который можно добавлять города, связывать города с известным названием, находить город по названию и представлять карту в текстовом виде.
карта — это объект в который можно добавлять города
Проанализируем наиболее интересные фрагменты реализации новых классов.
Проанализируем наиболее интересные фрагменты
Обратите внимание, что полю FPCity в конструкторе присваивается параметр C, а не его адрес. Так и должно быть, ведь C это ссылка на объект. Для TLink нет необходимости в деструкторе, ведь уничтожается только ссылка, а сам объект может продолжать существовать. По аналогичной причине не создается копии FPCity при копировании, создается ссылка на тот же самый объект.
Функция копирования города не копирует связи с другими городами. Это задача карты. Ведь связи указываются по ссылке, а город сам по–себе не должен содержать связей с городами конкретной карты.

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

Наиболее сложный метод это связывание двух городов.
Перечислим ограничения на связывание, которые призваны обеспечить безопасность и удобство использования классов и осмысленность возникающих карт:
• город не следует связывать сам с собой;
• оба города должны принадлежать карте;
• не следует дублировать связь, если она уже существует;
• если A связан с B, то и B связан с A.


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

Метод для распечатки карты демонстрирует переход к новой строке текста. Такой переход задается специальной комбинация символов #13#10 — новая строка. Если добавить такую комбинацию в текст, то вся последующая часть будет выводиться с новой строки.
сли добавить такую комбинацию в текст, то вся последующая часть будет выводиться с новой строки
Все недостающие методы приведены в Приложении. Там же имеются достаточные комментарии, позволяющие понять назначение и алгоритм каждого метода.
Опубликовал Kest September 01 2011 11:47:39 · 0 Комментариев · 7520 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
3D Тетрис [Исходн...
Размещение элемен...
Усложнённый кальк...
Приемы программир...
Советы по Delphi
Java в примерах -...
Fig [Исходник на ...
AdBlaster v2.5 - ...
XPATComponents
Таймер и секундомер
Профессиональное ...
INSTANT BOOSTER v...
TrayIcon
AboutSystem
Delphi 7 Enterpri...
Архив значков
Calendar
39 статьи по Delphi
PHP/MySQL для нач...
DelphiX

Топ загрузок
Приложение Клие... 100779
Delphi 7 Enterp... 97928
Converter AMR<-... 20283
GPSS World Stud... 17034
Borland C++Buil... 14206
Borland Delphi ... 10329
Turbo Pascal fo... 7380
Калькулятор [Ис... 6047
Visual Studio 2... 5213
Microsoft SQL S... 3666
Случайные статьи
Спец. команды
Изучение средств D...
Она не действует н...
Перегрузка функций...
Этап формализации
Суд Федеральный
Найдите лучшие RTP...
В какие игры играт...
Casino Parimatch
Волновой алгоритм ...
Пример программы —...
Работа с диспетчер...
Конвои и семафоры
Архитектура ISDN
Класс граничных ре...
НЕОДНОЗНАЧНЫЕ ГРУППЫ
Сценарий не опреде...
Type mismatch
Твой электронный щит
Линейное рехеширов...
Восстановление сис...
Бесплатные игровые...
Клининговые компан...
Элементы протокола
Модифицированные ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?