основных можносчитатьзнаниеязыкапрограммирования, средыразработкиисис-
темных технологийбазовойоперационнойсистемы. Рассматриваемыйучебный курс
предназначен дляначальнойподготовкипрограммиста, владеющегоязыкомпро-
граммирования Си++ применительнокразработкепрограммвОСсемейства Win32.
При анализедоступныхвИнтернетзарубежныхкурсов, связанныхсобучени-
ем практическомупрограммированиюврамкахподготовкипоспециальностям Computer
Science, оказаласьзаметнаследующаятенденция: существуюткурсыпоизуче-
нию языкаСи++, курсыпоизучениюобъектно-ориентированногопрограммирования
на базе, чащевсего, Java иреже, Си++, ипрактическистандартныйкурс "Операцион-
ные системы", посвященныйструктуре Unix-совместимыхоперационныхсистем. Ха-
рактерной особенностьюзарубежныхуниверситетскихкурсовявляетсяотсутствие
разделов, посвященныхизучениюпрактическогопрограммированиявсредекоммер-
ческих ОСмассовогораспространения, впервуюочередь, ОС Windows. Сдругой
стороны, изучениепрограммированиядляэтихОСпредлагаетсярядом коммерческих
учебных организаций, носрокиобученияпорядка 3-5 днейпредполагаютобучение
уже грамотногоспециалиста, имеющегонавыкипрограммированиявкакой-либодру-
гой ОСилинадругомязыкепрограммирования.
В сегодняшнихроссийскихусловиях, неотрицаянеобходимостифундамен-
тальной подготовкиспециалистовповычислительнойтехникевобластитеорииалго-
ритмов иустройствавычислительныхипрограммныхсистем, можноотметитьполез-
ность изучения технологийпрактическогопрограммирования–использованиясред
разработки ибиблиотекпрограммированиядляОСмассовогораспространения. Этим
обусловлена направленностьрассматриваемогокурса–начальнаяподготовкапро-
граммистов наСи++ длясредыОС Windows.
Сложность обученияпрактическомупрограммированию, нанашвзгляд, за-
ключается втрудностисочетанияобученияабстрактнымпонятиямпрограммирова-
ния (таким, какструктурыданных, понятие алгоритма, основныекомпонентыалго-
ритмического языка, методологияпроектированияпрограммногообеспечения), с
изучением технологийисредпрограммированиянабазекакой-либоконкретнойОС.
Эти практическиетехнологиипребываютвпостоянномразвитии, поэтомуможет
быть сложновыделитькакие-либоконкретныесредстваразработкивкачествепред-
мета изучения.
Несмотря наширокоераспространениесредбыстройразработкиПрО (напри-
мер, Visual Basic, Inprise Builder и Inprise Delphi), выборихвкачествеучебнойсреды
представляется нецелесообразным, т.к. вэтихсредахкажущаясяпростотаразработки
ПрО касаетсятолькоформированиякаркасаприложенияизнабораготовыхкомпо-
нент, аустройствоэтихкомпонентилиизменениеструктурыкаркасатребуетсерьез-
ных знанийнетолькопоструктуребазовойОС, ноипосистемнойархитектуресреды
программирования.
Программа данногокурсапредназначенадляобучениялиц, имеющих навыки
пользовательской работынаперсональномкомпьютере, основнымпонятиямимето-
дам современногопрактическогопрограммирования. Предметомизучениякурсаяв-
ляется объектно-ориентированноепрограммирование наязыкеСи++ всредесовре-
менных 32-хразрядныхоперационныхсистемсемейства Windows. Программакурса
6
разбита на 4 части:
1) ВведениевпрограммированиенаязыкеСи++ (9 лекций)
2) Основыпрограммированиятрехмернойграфики (8 лекций)
3) Объектно-ориентированноепрограммированиенаязыкеСи++ (9 лекций)
4) Программированиедля Microsoft Windows сиспользованием Visual C++ и
библиотеки классов MFC (9 лекций)
На каждоелекционное занятиедолжнобытьпредусмотреноминимумодно
практическое (2 академическихчаса) иеще, всреднем, 4 часасамостоятельныхзаня-
тий. Т.о., наизучениекурсаотводится 72 лекционныхчаса, 72 практических (т.о., 144
аудиторных часа) и 144 часасамостоятельныхзанятий.
Методические материалыдлякурсасформированынаосновепримерно 10-ти
зарубежных изданий, частьизкоторыхпереведенанарусскийязык.
В первойчастикурсарассматриваютсяпроцедурныеосновы языка Си++. Они
включают всебяоформлениетекстапрограмм, правилазаписивыраженийнаСи++,
рассмотрение простыхтиповданныхиалгоритмическихконструкцийусловныхопе-
раторов, циклов_______идр. Вконцеэтойчастикурсаподробнорассматриваютсясоставные
типы данных. Приэтомделаютсязамечанияодостоинствахинедостаткахэтихтипов
данных, чтовпоследствииупрощаетвведениепонятийобъектно-ориентированного
программирования.
Вторая частькурсапосвященаприменениюязыкаСи++ дляпрограммирования
задач вконкретнойпредметнойобласти–трехмернойкомпьютернойграфики. Вка-
честве базовойграфическойбиблиотекивыбранабиблиотека OpenGL, являющаяся
открытым стандартомвданнойобласти. Изучениеэтойбиблиотекидемонстрирует
методику освоенияготовогоинструментария, сформированноговрезультатеприме-
нения методовструктурногопроектированиявконкретнойпредметнойобласти. По-
нятия, относящиесякмашиннойграфике, понятиекаркасаприложенияиобработки
событий иллюстрируютсяпростымипримерамиивдальнейшемиспользуютсяпри
изучении программированиявсреде Windows.
Третья частькурсаизучаетсяпослеусвоениястудентамипроцедурногопро-
граммирования. Основныевопросыобъектно-ориентированногопрограммирования
на Си++ излагаются напримерепрограммированияконсольныхприложений Win32.
Рассматриваются элементарныеприемыобъектно-ориентированногопроектирования
–проектированиенаосновераспределенияобязанностей, метод CRC-карточек.
В четвертойчастикурсаизучаетсяархитектураоперационныхсистемсемейст-
ва Windows иметодыпрограммированиядляэтихОС. Примернотретьэтойчастипо-
священа рассмотрениюосновныхкомпонентоперационныхсистем Windows 9x/NT,
знакомству сбазовыми сервисамиоперационныхсистемипрограммированиюдля
этих ОСнаязыкеСи++ науровне Win32 API. Воставшейсячастирассматриваются
приемы программированиядляОС Windows набазебиблиотекиклассов MFC. Эта
библиотека классовявляетсяпромышленнымстандартом, упрощающимразработку
программ ииспользование Win32 API. Подробноописываетсякаркасприложения
MFC, основныеклассыэтойбиблиотеки, приемыиспользованияэтихклассоввсоб-
ственных программах, архитектура однодокументныхприложений "документ/вид".
После изучениякурсастудентполучаетдостаточнополноепредставлениео
содержании современногообъектно-ориентированногопрограммирования, обуст-
ройстве современныхоперационныхсистем Win32 иособытийно-управляемомпро-
граммировании. Напрактическихзанятияхвырабатываютсянавыкипрограммирова-
ния наСи++ винтегрированнойсредеразработки Microsoft Visual C++ 5.0.
7
ЛЕКЦИЯ 1. Основы Си++
1. Несколько замечаний о назначении программирования
Программирование –этотехническаятворческаядеятельность, целькоторой
заключается врешенииважныхдлячеловеказадачиливыполненииопределенных
действий спомощьюкомпьютера. Нарис. 1 представленаидеализированнаясхема
решения типичнойзадачипрограммирования.
Подробное описание
задачи илинеобходимых
действий КОМПЬЮТЕР
Решение задачиили
выполнение действий
Рис. 1. Схема решениязадачиспомощьюкомпьютера.
В рамкахтакойсхемынеобходимымикомпонентамикомпьютераявляются
центральный процессор, устройстваввода/выводаипамять (рис. 2).
Рис. 2. Основные компонентыкомпьютера.
Конечно, вдействительностиделообстоитнетакпросто, какпоказанона
рис. 1. Например, "подробноеописание (спецификация) задачи" наестественномязы-
ке длякомпьютеранегодится (внастоящеевремя). Болеетого, длярешениязадачина
компьютере недостаточнополногоописаниязадачи, необходимотакжеснабдить
компьютер информациейотом, какименноследуетрешатьзадачу–т.е. составитьал-
горитм. Дляописанияалгоритмоврешениязадачилиалгоритмоввыполнениякаких-
либо действий (например, управлениероботом-манипулятором) спомощьюкомпью-
тера применяютсяязыкипрограммирования.
На рис. 3 показанаболееподробнаясхемарешениязадачиспомощьюкомпью-
тера, вкоторойучтенанеобходимостьиспользованияязыкапрограммирования. Ил-
люстрация этойсхемынаконкретномпримереприведенавтаблице 1.
Существует большоеколичестворазличныхязыковпрограммированияимного
способов ихклассификации. Например, "языкамивысокогоуровня" считаютсяте
языки, синтаксискоторыхсравнительно близоккестественномуязыку, втовремякак
синтаксис "низкоуровневых" языковсодержитмноготехническихподробностей, свя-
занных сустройствомкомпьютераипроцессора.
8
Рис. 3. Схема решениязадачинакомпьютересиспользованиемязыкапрограммирования.
Таблица 1. Основные этапырешениязадачипопроверкечисланапростоту.
Спецификация задачи Требуется определить, являетсялиданноечислопростым.
Алгоритм Ввести x
Для каждого целого числа z из диапазоне от 1 до x
Если остаток от деления x на z равен 0, то
вывести сообщение "число не простое" и закончить работу
Если такого числа z не найдено, то
вывести сообщение "число простое" и закончить работу
Описание алгоритма на
языке высокого уровня
#include <iostream.h>
int main()
{
int x;
cout << "Введите число:\n";
cin >> x;
for (int z=2; z<x; z++)
if (x % z == 0)
{
cout << "Это не простое число.\n";
return 0;
}
cout << "Это простое число.\n";
return 0;
}
Объектный код (внут-
ренний код конкретного
компьютера)
Двоичные командыпроцессора (частично)
Исполняемый файл для
конкретного компьютера
Двоичные командыпроцессора (полностью)
"Императивные" или "процедурные" языкипозволяютпрограммистуописать, в
какой последовательностикомпьютербудетвыполнятьотдельныешагиалгоритмаи,