- Жизненный цикл (ЖЦ) программного обеспечения (ПО). Итерационные модели ЖЦ. Каскадная модель ЖЦ;
- Стадии ЖЦ; V-образная, XP модель ЖЦ;
- Объектно-ориентированное программирование (ООП). Принципы ООП;
- ООП: Отношение между классами;
- С++: Классы – объявление, конструкторы, деструкторы, работа с памятью;
- Динамическое и статическое выделения памяти;
- С++: Наследование;
- С++: Перегрузка унарных и бинарных операторов;
- Асимптотическая сложность;
- Контейнеры С++: vector;
- Контейнеры С++: list;
- Контейнеры С++: deque;
- Контейнеры С++: set;
- Контейнеры С++: map;
- Контейнеры С++: stack;
- Контейнеры С++: queue;
- Отладка программ: классификация ошибок, основные приемы локализации ошибок;
- С++: исключения. Основные исключения STL;
- Абстрактные классы. C++: чистые виртуальные функции;
- С++: шаблоны функций и классов;
- Тестирование: классификации подходов к тестированию (типы тестирования);
- Паттерны программирования: Одиночка, Наблюдатель;
- Паттерны программирования: Декоратор, Фабричный метод;
- Паттерн (принцип) программирования: Получение ресурса – есть инициализация (RAII);
- Умные указатели: unique_ptr, auto_ptr;
- Умные указатели: shared_ptr;
- Умные указатели: weak_ptr.
Saturday 28 May 2016
Вопросы на экзамен 2016
Thursday 26 May 2016
Расписание занятий и консультаций до экзамена
Расписание экзаменов по технологии программирования можно найти по ссылке. Напомню, что для получения допуска на экзамен необходимо сдать все лабораторные работы и курсовой проект. Это можно сделать в следующие дни:
28 мая:
- с 11:50 до 15:10 в 7-410;
4 июня:
- с 10:10 до 11:30 в 7-405;
- с 11:50 до 15:10 в 7-410;
11 июня:
- с 10:10 до 11:30 в 7-405;
- с 11:50 до 15:10 в 7-410.
28 мая:
- с 11:50 до 15:10 в 7-410;
4 июня:
- с 10:10 до 11:30 в 7-405;
- с 11:50 до 15:10 в 7-410;
11 июня:
- с 10:10 до 11:30 в 7-405;
- с 11:50 до 15:10 в 7-410.
Saturday 21 May 2016
Saturday 14 May 2016
Пример работы с xml объектами в C++
Установка
В данном разделе приведена инструкция по установке в Microsoft Visual Studio 2012, возможно, для других версий подтребуется дополнительные действия, но общая логика останется прежней.
- Скачать библиотеку pugixml. На странице проекта нужно нажать на кнопку "Download ZIP";
- Распаковать скаченный zip архив;
- В распакованном проекте открыть проект MVS в каталоге "pugixml-1.7\scripts". Открывать желательно проект той версии MVS, которая у вас установлена. В моем случаи MVS 2012 не было, поэтому был открыт "pugixml_vs2015.vcxproj".
- Открытый проект необходимо собрать и в результате будет надпись вида:1>------ Rebuild All started: Project: pugixml_vs2015, Configuration: Debug Win32 ------1>Project file contains ToolsVersion="14.0". This toolset is unknown or missing. You may be able to resolve this by installing the appropriate .NET Framework for this toolset. Treating the project as if it had ToolsVersion="4.0".1> pugixml.cpp1> pugixml_vs2015.vcxproj -> C:\Users\rdo\Downloads\pugixml-1.7\pugixml-1.7\scripts\vs2015\Win32_Debug\pugixml.lib========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
- При сборке может дополнительно потребоваться изменить настроки компилятора, например, для MVS 2012 необходимо изменить версию "Platform Toolset" (Project -> Properties -> General -> Platform Toolset) с "v140" на "Visual Studio 2012 (v110)";
- Создать новый проект в MVS, если он еще не был создан.
- Из распакованного архива в новый проект скопировать файлы "pugixml.hpp" и "pugiconfig.hpp" из каталога "pugixml-1.7\src";
- Открыть проект, в заголовочные файлы проекта добавить скопированные файлы.
- В настройках проекта изменить следующие настроки:
- Project -> Properties -> Linker -> General: В поле "Additional libraries directories" прописать путь до каталога, в котором лежит скопилированная библиотека pugixml.lib (см. п4.). Например: "C:\Users\rdo\Downloads\pugixml-1.7\pugixml-1.7\scripts\vs2015\Win32_Debug";
- Project -> Properties -> Linker -> Input: В поле "Additional dependencies" указать сборщику, что нужно в проекте использовать дополнительную библиотеку "pugixml.lib". В итоге в поле должно быть запись вида "pugixml.lib;%(AdditionalDependencies)";
- Библиотека добавлена.
- Project -> Properties -> Linker -> General: В поле "Additional libraries directories" прописать путь до каталога, в котором лежит скопилированная библиотека pugixml.lib (см. п4.). Например: "C:\Users\rdo\Downloads\pugixml-1.7\pugixml-1.7\scripts\vs2015\Win32_Debug";
- Project -> Properties -> Linker -> Input: В поле "Additional dependencies" указать сборщику, что нужно в проекте использовать дополнительную библиотеку "pugixml.lib". В итоге в поле должно быть запись вида "pugixml.lib;%(AdditionalDependencies)";
Примеры работы с библиотекой
Полный список примеров можно посмотреть на еще одном сайте проекта.
Считывание с файла/строки
#include <iostream>
#include <iostream>
#include "pugixml.hpp"
std::string XML_CONTENT = "<xml>"
"<element1>value1</element1>"
"<element2>value2</element2>"
"<element3>value3</element3>"
"<element4>"
"<element5 attr=\"attribute-value\">5</element5>"
"<element6/>"
"</element4>"
"</xml>";
int main() {
std::cout << "Example 1: loading from string/file" << std::endl;
pugi::xml_document doc;
pugi::xml_parse_result result
= doc.load_string(XML_CONTENT.c_str());
//pugi::xml_parse_result result = doc.load_file("filename.xml");
std::cout << "Load result:" << result.description() << std::endl;
return 0;
}
Load results:No error
-------
Вывод на консоль:
Example 1: loading from string/fileLoad results:No error
Получение значений
std::cout << "Example 2: getting elements value" << std::endl;
std::cout << "xml->element1: " << doc.child("xml")
.child("element1")
.text()
.as_string() << std::endl;
std::cout << "xml->element4->element5: " << doc.child("xml")
.child("element4")
.child("element5")
.text()
.as_int() << std::endl;
std::cout << "xml->element4->element6: " << doc.child("xml")
.child("element4")
.child("element6")
.text()
.as_bool() << std::endl;
std::cout << "xml->element4->element5(attribute): "
<< doc.child("xml")
.child("element4")
.child("element5")
.attribute("attr")
.as_string() << std::endl;
-------
Вывод на консоль:
Example 2: getting elements valuexml->element1: value1
xml->element4->element5: 5
xml->element4->element6: 0
xml->element4->element5(attribute): attribute-value
Итерирование
int Count(pugi::xml_node_iterator& begin, pugi::xml_node_iterator& end) {
int r = -1;
while (begin != end) {
++r;
++begin;
}
return r;
}
void IterateNode(pugi::xml_node& root, int offset = 0) {
for (pugi::xml_node node: root.children()) {
int i = offset;
while (i > 0) {
std::cout << " ";
--i;
}
if (Count(node.begin(), node.end()) > 0) {
std::cout << "Node: " << node.name() << " :" << std::endl;
IterateNode(node, offset + 2);
return;
}
std::cout << "Node: " << node.name() << "; value: " << node.text().as_string() << std::endl;
}
}
//main
std::cout << "Example 3: children iteration" << std::endl;
IterateNode(doc.child("xml"));
-------
Вывод на консоль:
Example 3: children iterationNode: element1; value: value1
Node: element2; value: value2
Node: element3; value: value3
Node: element4 :
Node: element5; value: 5
Node: element6; value:
Файл проекта
Файл проекта с примерами.
Изменение в варианте №9 курсовой работы
В варианте №9 использование библиотеки wxWidgets необязательно.
Wednesday 11 May 2016
Пример работы с json объектами в C++
Введение
К сожалению, в стандартной библиотеке С++ (STL) нет инструментов для работы с json объектами. Но существует достаточно много реализаций библиотек для всех языков программирования, в том числе и для С++.
В данной статье приведен пример работы с json объектами с помощью библиотеки rapidjson. Все примеры из статьи есть в проекте (см. ниже).
Установка
В данном разделе приведена инструкция по установке в Microsoft Visual Studio 2012, но, почти со 100% вероятностью, она подойдет для любой версии MVS.
- Если проект в MVS еще не создан, но необходимо его создать;
- Скачать библиотеку rapidjson. На странице проекта нужно нажать на кнопку "Download ZIP";
- Распаковать скаченный zip архив;
- Из распакованного архива в проект скопировать каталог "rapidjson-master\include\rapidjson" в каталог "rapidjson" в проекте;
- Открыть проект, в заголовочные файлы проекта добавить содержимое скопированного каталога.
- Библиотека добавлена.
Примеры работы с библиотекой
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include <string>
using namespace rapidjson;
int main() {
std::string json = "{\"type\":\"test\",\"number\":1}";
Document document;
document.Parse(json.c_str());
// Example 1: Json modification, writing Json to console
Value& s = document["number"];
s.SetInt(s.GetInt() + 1);
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
document.Accept(writer);
std::cout << buffer.GetString() << std::endl;
return 0;
}
-------
Вывод на консоль:
{"type":"test","number":2}
Начинается этот пример с создания основного объекта
"Document
document" и парсинга json документа (в данном
примере он получен из строки, но также можно либо предварительно считать данные
из файла в строку, либо создать входной поток (см. следующий пример)). Далее создается
ссылка на значение элемента number, которой меняется значение: "Value& s = document["number"]; s.SetInt(s.GetInt() + 1);". Пример
заканчивается выводом содержимого измененного json объекта на консоль при помощи объектов классов StringBuffer и Writer<StringBuffer>.
Считывание с файла
//Example 2: Getting json from a file
std::ifstream ifs("test-json-file.json");
IStreamWrapper isw(ifs);
Document documentFromFile;
documentFromFile.ParseStream(isw);
В данном примере создается поток ifs, затем он передается в объект-обвертки isw. Созданный объект входного потока isw передается в метод ParseStream, с помощью которого считывается json файл и инициализируется объект documentFromFile.
Итерирование по json объекту
Содержимое файла "test-json-file.json".
{
"string": "test",
"number": 1,
"array": [1,2,3,4,5],
"object": {
"element1": 1,
"element2": 2,
"element3": 3
}
}
std::string GetElementValue(const Value& val)
{
if (val.GetType() == Type::kNumberType)
return std::to_string(val.GetInt());
else if (val.GetType() == Type::kStringType)
return val.GetString();
else if (val.GetType() == Type::kArrayType)
return "Array";
else if (val.GetType() == Type::kObjectType)
return "Object";
return "Unknown";
}
// Example 3: Iterating over elements
Value::ConstMemberIterator iter = documentFromFile.MemberBegin();
for (;iter != documentFromFile.MemberEnd(); ++iter) {
std::cout << "Element name:"
<< iter->name.GetString()
<< "; element value: "
<< GetElementValue(iter->value)
<< std::endl;
}
-------
Вывод на консоль:
Element name:string; element value: test
Element name:number; element value: 1
Element name:array; element value: Array
Element name:object; element value: Object
В данном примере создается итератор iter по объекту documentFromFile и на консоль выводятся названия json элементов и их значения.
Файл проекта
Файл проекта с примерами.
Subscribe to:
Posts (Atom)