Рассмотрим конкретную задачу – адресную книгу.

Часть 1

Это пример на работу со стандартной библиотекой Си++.

Формат файла книги построчный, в каждой строке:

имя ; почта ; телефон

Имя должно присутствовать. Если нет почты, но есть телефон, то должны быть обе точки с запятой.

Строки могут быть пустыми (пробельными).

abook-monolith.cpp

Часть 2

Это пример на взаимодействие объектов классов.

Обратите внимание на то, что общение с пользователем (Dialog и Command) и с файлом (AddressBook::File) отделены от обработки данных (AddressBook).

Также показаны шаблоны проектирования "Одиночка" (класс Dialog), "Фабричный метод" (Command::create) (можно было создать свою фабрику для каждой команды и сделать create виртуальной, но здесь это усложнение не оправдано).

Шаблон "Команда" используется частично (Command), полностью его потенциал не реализован, в частности нет отмены действий. Но добавить отмену в данную программу уже существенно проще, чем в предыдущий пример.

Данный пример использует умный указатель std::unique_ptr из Си++11. В GCC нужно указать стандарт, например:

g++ -std=c++11 *.cpp

В Visual Studio 2010 и выше данный класс реализован, компилируется как консольное приложение без дополнительных настроек.

abook.zip

Часть 3

Это пример на создание оконного интерфейса с помощью Qt.

Обратите внимание на то, что классы, работающие с данными (AddressBook и AddressBook::File), никак не изменились с предыдущего примера. Заменён лишь пользовательский интерфейс с терминала на окна.

abook-qt-1-ui.zip

Часть 4

Пример 1. Классы данных (AddressBook и AddressBook::File) переписаны под Qt с минимальными изменениями.

abook-qt-2-complete-01.zip

Пример 2. Формат файла переведён на XML.

Если используются классы из модуля QtXml (например, QDomDocument), его нужно подключать в файле проекта (см. pro-файл).

Если работаете с QXmlStreamWriter/Reader, дополнительные модули Qt не нужны, это QtCore.

abook-qt-2-complete-02.zip

Пример 3.

Несколько переработана архитектура приложения. Появился свой класс приложения, который связывает данные и интерфейс (выполняя роль "контроллера" в шаблоне"модель-вид-контроллер"). Сигналы и слоты используются чаще (например, для оповещения окна об изменении данных). Исправлены некоторые ошибки.

Наследование проиллюстрировано ещё раз: теперь приложение умеет сохранять данные как обычном текстовом формате, так и в XML, класс файла сам выбирает свою реализацию по имени файла.

Изменились почти все файлы проекта.

abook-qt-2-complete-03.zip

 

  • Нет меток