Программирование - Лекция 1 (3 семестр).pptx
- Количество слайдов: 9
Особенности языков С, С++ и С# Касаткин Алексей Александрович УГАТУ 2014
История и область применения С История Основные области применения: ◦ ◦ ◦ 1969 -1973 Bell Labs, Д. Ритчи и др. 1978: книга Брайана Керниган и Денниса Ритчи 1983: стандарт ANSI C, С 89 1999 -2000: стандарт C 99 (MSVC-частично) 2011: стандарт С 11 ◦ Системное ПО Ядро ОС (Unix 1973, Linux 1991, Windows, BSD, OS X) Драйверы и прошивки (альтернатива или дополнение к ассемблеру) ◦ Низкоуровневая работа с железом и функциями ОС ◦ Вычислительные библиотеки, в т. ч. HPC (производительность и экономия памяти) ~Fortran ◦ … Что есть: структуры, указатели, препроцессор Чего нет: классов и ООП, шаблонов, переопределения операций
История и применение С++ История ◦ Нач. 1980 -х: Bell Labs, Б. С. , «С с классами» ◦ 1985: книга Бьерна Страуструпа классы, виртуальные функции, ссылки (с 1983) ◦ 1989 -1990: абстр. классы, статические функции, шаблоны, исключения, пространства имен, … ◦ стандарты ISO/IEC 1998, 2003, С++0 x ◦ C++11: лямбда-функции, обобщ. константы, override, final, в стандартной библиотеке многопоточность и т. д. С++14 Основные области применения: большое ПО ◦ Графический интерфейс (Qt, MFC, …) ◦ Игры (много разнородных объектов) ◦ Сложная обработка данных (графы, ГИС, моделирование, визуализация)
С# История ◦ ~2000: Microsoft, Андерс Хейлсберг и др. много идей из С++ и Java ◦ C# 1. 0 /. NET Framework 1. 0 (VS. NET 2002) ◦ C# 2. 0 /. NET Framework 2. 0 (VS. NET 2005) ◦ C# 3. 0 /. NET Framework 3. 5 (VS. NET 2008) ◦ C# 4. 0 /. NET Framework 4. 0 (VS. NET 2010) ◦ C# 5. 0 /. NET Framework 4. 5 (VS. NET 2012) ◦ Регулярно появляются открытые стандарты и альтернативные реализации (Mono c 2001 г. ) Основные области применения: ◦ Основной язык Microsoft. NET Framework ◦ Серверные системы на платформе MS (динамические веб-приложения, бизнес) ◦ Сложные GUI-приложения и игры (в осн. Windows)
Когда не хватает С? Когда требуется развитое ООП ◦ Есть структуры (с методами, но без наследования!) ◦ Можно «имитировать» (граф. интерфейс GTK) Высокоуровневое программирование ◦ в С «ручное» управление памятью ◦ Метод с 15 параметрами? А может, лучше передать один объект или вызвать его метод? ◦ хотим заносить объекты в переменные, и не думать об их абсолютно точном типе при вызове методов (полиморфизм) При отказе от С и переходе к С++ ◦ Связь с машинным кодом сложнее просматривается ◦ ~ Чуть менее эффективно используется память и ЦП
Сложности С++ Управление памятью: множество ошибок, не определяемых компилятором Переопределение операций и преобразование типов Множественное наследование, виртуальные и невиртуальные функции – проблемы с «чистотой» ООП Очень хитро устроенные шаблоны Сложно подключать библиотеки, особенно на других языках
Проблемы c памятью Обращение к неинициализированной переменной int x; std: : cout << x + 10; // runtime error или "мусор" Выход за выделенную память int *a = new int(3); std: : cout << a[3]; // runtime error или "мусор" a[3] = 5; // runtime error или ошибка ПОТОМ! Все просто? Да, если это 2 строки подряд… Могут работать несколько объектов совместно, и один из них что-то нарушит.
Проблемы c памятью Обращение к неинициализированной переменной int x; std: : cout << x + 10; // runtime error или "мусор" Выход за выделенную память int *a = new int(3); std: : cout << a[3]; // runtime error или "мусор" a[3] = 5; // runtime error или ошибка ПОТОМ! Уязвимости из-за переполнения буфера! Все просто? Да, если это 2 строки подряд… Могут работать несколько объектов совместно, и один из них что-то нарушит.
Утечки памяти Есть new (C - malloc), но нет вызова delete (free). ◦ Если это повторяется в цикле, потребление ОЗУ резко растёт ◦ Объект можно удалять только после его использования! ◦ Проблема: не всегда точно известен заранее момент удаления объекта. Он уже не нужен создавшему методу, но нужен кому-то ещё… ◦ Работа метода может быть прервана исключением и до delete дело не дойдёт. (исключение не обязательно остановить программу)
Программирование - Лекция 1 (3 семестр).pptx