Слайд 1Технологии программирования
Направления:
Информационные системы и технологии
Информатика и вычислительная техника
2015
год
Часть 1
Слайд 2Разделы курса
Основы объектно-ориентированного программирования и язык С++
Библиотеки языка С++.
Основы конструирования
программных систем.
Программирование приложения с использованием базы данных.
Системы коллективной разработки программного
обеспечения.
13 лекций
9 лабораторных работ
11 упражнений
экзамен
Слайд 3Основная литература
Современные методы программирования на языках C и C++ /
Л.Б. Бузюков, О.Б. Петрова. - СПб.: Линк, 2008
Орлов С.А., Цилькер
Б.Я. Технологии разработки программного обеспечения. Учебник для вузов. 4-е издание. Стандарт третьего поколения. СПб, Питер, 2012.
Слайд 4Дополнительная литература
Павловская Т. А. - C/C++. Программирование на языке высокого
уровня, СПБ: Питер, 2010. - 260 с.
Шлее М. Qt
4.5 Профессиональное программирование СПБ.: БХВ-Петербург, 2010. - 896 с.
Буч Г. - Объектно-ориентированный анализ и проектирование с примерами приложений на C++. М.:БИНОМ, 1998. – 558 с.
Фридман А.Л. – Основы объектно-ориентированной разработки программных систем. М.: финансы и статистика, 2000. – 190 с.
Слайд 5Инструментальные средства для лабораторных работ
1. Netbeans IDE 6.x (Windows, Linux,
Mac OS X) и выше
www.netbeans.org
2. Code::Blocks 10.5 и выше (Windows,
Linux, Mac OS X)
www.codeblocks.org
3. Microsoft Visual Studio (Windows)
Visual Studio .NET 2013
Visual Studio .NET 2012
Visual Studio .NET 2010
Visual Studio .NET 2008
Visual C++ 6.0
Слайд 6Компиляторы
gcc (Linux, Mac OS X) – для Netbeans и Code::Blocks,
устанавливается отдельно
MinGW (Windows) - для Netbeans и Code::Blocks, устанавливается отдельно+пакет
MSYS (дистрибутивы Code::Blocks 12 и 13 содержат все необходимые компоненты)
Cigwin (Windows)
Слайд 7Дополнительное программное обеспечение
Инструментальная среда Qt Creator и библиотека Qt
.
qt-project.org
Subversion (svn) — система контроля версии программного обеспечения
http://subversion.apache.org/
http://tortoisesvn.net/
(TortoiseSVN)
Слайд 8Классификация языков программирования
Машинно-зависимые (машинные коды, ассемблеры)
Машинно-независимые (языки высокого уровня, ЯВУ)
Императивные
(процедурные): Fortran, Cobol, Си, Pascal, Basic
Функциональные: Lisp, Haskell, Erlang
Логические
(декларативные): Prolog, SQL
Объектно-ориентированные: Smalltalk, C++, Objective-C, Java, Object Pascal, Ruby
Слайд 9Язык программирования Си
Создан в начале 1970х годов
Стандарты ISO: 1990, 1999,
2011.
Процедурный язык общего назначения, используется для системного программирования.
Достоинства: простота, лаконичность,
встроенные типы данных, создание типов данных пользователем (структуры)
Недостатки: отсутствует автоматическое управление памятью
Имена файлов с исходным кодом: *.c .
Слайд 10Структуры в Си
1. Объявление типа структуры
2. Объявление структурной переменной
Объявление типа
(тег структуры Person):
struct Person
{
char Name[30]; /*поле структуры*/
int Year; /*поле структуры*/
} ;
Объявление переменной (Nick):
struct Person Nick;
Слайд 11Объявление синонима типа для структуры
typedef struct Person
{
char Name[30];
int Year;
} PERSON;
PERSON Ann;
Слайд 12Анонимный тип структуры
struct
{
char Name[30];
int
Year;
} Tom;
Tom — имя перемной структурного типа
Выделено памяти: 30 +
4 = 34 (байта)
Слайд 13Инициализация структурной переменной
struct Person
{
char Name[30];
int Year;
} ;
struct Person Stud1 = {''John'', 1994};
struct Person Stud2
= {''Ann'', 1993};
Слайд 14Обращение к полям структуры
Обращение к полю структуры через имя переменной:
Stud1.Year Stud2.Name
Обращение к полю через указатель:
struct Person* pStud = &Stud1;
printf(''%s %d'', pStud->Name, pStud->Year);
Слайд 15Действия над структурами
Использование в выражениях полей структур:
Stud1.Year =
1992;
int Age = 2011 - Stud1.Year;
strcpy(Stud1.Name,
''Bill'');
printf(''Имя:%s возраст:%d'', Stud1.Name, Age);
Слайд 16Передача в функцию структурной переменной
struct Person
{
char Name[30];
int Year;
} ;
void input_struct(struct
Person* P);
void output_struct(struct Person P);
int main(void)
{
struct Person Ann;
input_struct(&Ann);
output_struct(Ann);
return 0;
}
void input_struct(struct
Person* P)
{
scanf(''%s'', P->Name);
scanf(''%d'',&P->Year);
}
void output_struct(struct Person P)
{
printf(''%s %d\n'', P.Name, P.Year);
}
Слайд 17Массив структур
struct Person
{
char Name[30];
int
Year;
} ;
struct Person Mas[4];
Обращение к полю i-го элемента массива:
Mas[i].Year =
1996;
(Mas + i)->Year = 1993;
Слайд 18Передача в функцию массива структур
struct Person
{
char Name[30];
int Year;
} ;
void input_struct(struct
Person* P, int n);
void output_struct(struct Person* P, int n);
int main(void)
{
struct
Person su11[25];
input_struct(su11, 25);
output_struct(su11, 25);
return 0;
}
Слайд 19void input_struct(struct Person* P, int n)
{
int i;
for(i=0; i
output_struct(struct Person* P, int n)
{
int i;
for(i=0; i
printf(''%s %d\n'', (P+i)->Name, (P+i)->Year);
}
}
Слайд 20Управление памятью программы
Области памяти программы:
Сегмент кода
Статическая память (сегмент данных)
Стек
Динамическая память
(куча)
Слайд 21Динамическое распределение памяти в С
malloc
void* malloc(size_t size);
calloc
void* calloc(size_t num, size_t
size);
realloc
void* realloc(void* ptr, size_t size);
free
void free(void* ptr);
Слайд 22Пример создания динамической переменной
int *iPtr ;
iPtr = malloc(4);
/* malloc(sizeof(int)) */
scanf("%d", iPtr);
printf("Number:
%d\n", *iPtr);
free(iPtr);
iPtr = NULL;
Слайд 23Пример создания строки в динамической памяти
char buffer[200]; *stPtr;
scanf("%s", buffer);
int len = strlen(buffer);
stPtr
= malloc(len+1);
strcpy(stPtr, buffer);
printf("String: %s\n",stPtr);
free(stPtr);
stPtr = NULL;
Слайд 25Еще вариант контроля
#include
int main (void)
{
double* ptr;
int max = 4;
if
((ptr = (double*) malloc(max * sizeof (double))) == NULL)
{
printf('' Ошибка
выделения памяти!'');
exit (EXIT_FAILURE); /* stdlib.h EXIT_SUCCESS*/
}
// вычисления
free (ptr);
}
Слайд 26Язык программирования C++
Создан в начале 1980х годов.
Стандарты 1998, 2003, 2011.
Объектно-ориентированный
язык общего назначения.
Имеет код, частично совместимый с Си.
Состоит из ядра
и стандартной библиотеки (пространство имен std).
Большое количество сторонних библиотек, расширяющих возможности языка (диалекты С++).
Имена файлов с исходным кодом: *.cpp, *.cc.
Слайд 27Особенности C++, отсутствующие в Си
Новые стандартные типы данных (bool, string).
Шаблоны
(templates).
Операторы управления динамической памятью (new, delete).
Ссылки.
Пространства имен (namespace).
Перегрузка функций, операторов.
Обработка
исключительных ситуаций.
Стандартные классы и объекты для организации ввода/вывода (cin, cout).
Слайд 28Пространства имен
ключевое слово
оператор разрешения области видимости
глобальный идентификатор:
идентификатор из пространства имен
стандартной библиотеки С++:
идентификатор из пространства имен пользователя:
предложение using:
namespace
::
myfn();
std::cout << ''1234'';
myspace::myfn();
using namespace std;
cout << ''1234'';
Слайд 29Параметры функции
1. Передаются через стек
2. Виды параметров:
Параметр-значение,
Параметр-указатель,
Параметр-ссылка (в C++).
Слайд 30Передача параметра-значения
float mult(float a)
{
a = 2*a;
return a;
}
int main()
{
float num =
15.5;
printf(''%.3f \n'', mult(num));
printf(''%.3f '', num);
return 0;
}
Ответ:
31.000
15.500
Слайд 31Передача параметра-указателя
void mult2(float* pa)
{
*pa = *pa * 2;
}
int main()
{
float num
= 15.5;
mult2(&num);
printf(''%f\n'',num);
return 0;
}
Ответ:
31.000
Слайд 32Передача параметра-ссылки
void mult3(float &b)
{
b = b*2;
}
int main()
{
float num = 15.5;
mult3(num);
printf(''%f\n'',num);
return
0;
}
Ответ:
31.000
Слайд 33Создание динамических переменных в C++
Операторы С++:
1. new — выделение динамической
памяти для одной переменной
2. new[ ] — выделение динамической памяти
для массива
3. delete — освобождение динамической памяти из-под переменной (кроме массива)
4. delete[ ] - освобождение динамической памяти из-под массива
Слайд 34Пример программы с динамической переменной
#include
using namespace std;
int main()
{
float *iptr; // объявление переменной-указателя
iptr = new float;
// выделение динамической памяти
cin >> *iptr; // ввод числа в динамич. переменную
cout << *iptr; // вывод из динамич. переменной
delete iptr; // освобождение памяти
iptr = NULL;
return 0;
}
Слайд 35Массив в динамической памяти
#include
using namespace std;
int main()
{
float
*mptr;
int n = 3, i;
// выделение памяти
mptr = new float[n];
// заполнение массива
for(i=0;i{
cout << "enter->";
cin >> *(mptr+i);
}
// вывод массива
for(i=0;i cout << *(mptr+i)<// освобождение памяти
delete[ ] mptr;
mptr = NULL;
return 0;
}
Слайд 36Ввод/вывод в С++
Консольный ввод/вывод — стандартные объекты-потоки cin (ввод) и
cout (вывод):
std::cout a;
Файловый ввод/вывод
— классы ifstream и ofstream (подключить fstream), последовательность действий:
создать объект-поток,
открыть его в заданном режиме,
выполнить ввод/вывод данных,
закрыть объект-поток.
Слайд 37Пример работы с файлом
// Чтение из файла
std::ifstream fin;
fin.open(''my1.txt'');
if (fin)
{
fin>>number;
fin.close();
}
else cout
not found'';
// Запись в файл
std::ofstream fout;
fout.open(''my2.txt'');
fout <<"Number= "<< number<<"\n";
fout.close();
Слайд 38Класс string
#include
int main(int argc, char** argv)
{
std::string st1("My
"), st2="string", st3;
st3 = st1+st2;
int i;
for(i=0;i std::cout << st3[i] < return 0;
}
Слайд 39Другие методы класса string
insert — вставка подстроки
string
st("ererer");
st.insert(1,"567"); //e567rerer
erase — удаление символов
st.erase(5,3); //e567rr
empty — проверка наличия символов в строке
st.clear();
if(st.empty())
cout << "Пустая строка "< else cout << st<c_str — получение указателя на строку
int len = strlen(st.c_str());