70731

ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS

Лабораторная работа

Информатика, кибернетика и программирование

В настоящее время операционные системы фирмы Microsoft прочно завоевали господствующее положение на рынке операционных систем для персональных компьютеров на платформе Intel. Доминирующее положение Microsoft укрепил выпуск новых 32-разрядных систем: Windows 95 и Windows NT 4.0.

Русский

2014-10-26

83.5 KB

2 чел.

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА   ЭВМ И СИСТЕМ

ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS

Методические  указания к лабораторным работам

по курсу “Системное программное обеспечение”

Часть  IV

Волгоград

1999

УДК 681.31

ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS. Методические  указания к лабораторным работам по курсу “Системное программное обеспечение”. Часть IV. /Cост. Деревенсков С.О.;  Волгоград.гос.техн.ун-т.- Волгоград, 1999. – 12 с.

    Содержатся  сведения, необходимые для изучения студентами основ программирования в API WIN32 для операционных систем Windows95 и Windows NT, архитектуры приложений WIN32, основ взаимодействия приложения с операционной системой, организации интерфейса пользователя с использованием ресурсов приложения и стандартных органов управления. Приведены варианты заданий к лабораторной работе.

    Предназначены для  студентов,  обучающихся по направлению 5528  "Информатика и вычислительная техника" и  специальности 2201 "Вычислительные машины, комплексы, системы и сети"  всех форм обучения.

   Табл. 1         Библиогр. - 6 назв. 

   

   Рецензент  Игнатьев А.Н.

   Печатается  по  решению  редакционно-издательского совета Волгоградского государственного технического университета

                                       

©           Волгоградский

государственный

технический                                                                                      

университет, 1999

3

Лабораторная работа N 7

Основы программирования приложений Windows 

 Цель работы: изучение структуры приложений Windows, способов их взаимодействия с операционной системой и основных приемов программирования в API Win32.

 Основные сведения

В настоящее время операционные системы фирмы Microsoft прочно завоевали господствующее положение на рынке операционных систем для персональных компьютеров на платформе Intel. Доминирующее положение Microsoft укрепил выпуск новых 32-разрядных систем: Windows 95 и Windows NT 4.0. Windows 95 в настоящее время рекомендуется разработчиками как ОС рабочей станции сети Microsoft для большинства персональных компьютеров среднего класса. Для более производительных рабочих станций в качестве альтернативы Windows 95 рассматривается более надежная Windows NT 4.0 Workstation. Для организации корпоративных сетей Microsoft предлагает ОС Windows NT 4.0 Server, поддерживающую функции файлового сервера, сервера приложений, сервера печати, сервера удаленного доступа и ряд других.

Все 32-разрядные версии Windows используют единый интерфейс прикладных программ - API WIN32. API WIN32 представляет собой совокупность более 1000 системных функций. В  отличие от MS DOS, где для вызова  функций  ОС  используется  механизм  программных  прерываний,  вызов  системных  функций  WIN32 производится по их  именам. При этом независимо от языка программирования имена функций, а также входные и выходные параметры остаются неизменными.

 Прикладная программа, разработанная специально для Windows95 или Windows NT называется приложением WIN32 (WIN32 application). Архитектура  приложения  представляет собой  архитектуру  программы, управляемой  событиями.  Ключевую  роль в организации  работы  всех  подсистем и приложений  Windows играет система сообщений.

Процесс обработки сообщений представлен на рис. 1.

В Windows95 и Windows NT реализована вытесняющая мультизадачность на уровне потоков. Поток (thread) описывает последовательность исполнения кода внутри процесса. В соответствии с установленным приоритетом система выделяет каждому потоку кванты процессорного времени, задаваемые системным таймером. Любому потоку в приложении соответствует некоторая функция - функция потока.  При запуске приложения создается процесс, а в его рамках – первичный поток, который и получает управление. Приложение  должно  состоять  как  минимум  из  одной  функции – функции первичного потока,  которая  при  программировании  на  языке  С  заменяет  функцию main и должна быть определена  следующим  образом:

     

4

  

Рис. 1.  Процесс  обработки  сообщений

5

int WINAPI WinMain  (HINSTANCE   hinstance ,  HINSTANCE   hPrevinstance,

                                LPSTR   lpszCmdLine,        int  nCmdShow)

{ //    Тело    функции    }

Все  параметры ,  получаемые  функцией  WinMain ,  формируются  операционной системой. Параметры  hinstance  и hPrevinstance представляют  собой  соответственно  идентификаторы  текущей  и  предыдущей  копии  приложения. Приложения WIN32 функционируют в изолированных виртуальных адресных пространствах и в силу этого не имеют возможности определить через параметр hPrevinstance, не запущено ли приложение вторично. Этот параметр использовался в предыдущих версиях Windows, для приложений WIN32 он всегда равен нулю.  Параметр lpszCmdLine - дальний  указатель на строку  запуска  приложения,  параметр nCmdShow указывает рекомендуемый приложению способ представления главного окна  при  запуске. Приложение может игнорировать этот  параметр, однако это не является хорошим стилем программирования.

Для нормальной работы приложения функция потока (то есть в нашем случае – функция   WinMain)   должна    обрабатывать    сообщения.    Сообщение представляет собой сформированную операционной системой в виде структуры типа MSG информацию о некотором событии во “внешнем” (по отношению к потоку) мире, о котором, по мнению ОС, должен “узнать” поток. Имеется три основных источника сообщений: аппаратура, потоки других процессов (или одного процесса – в случае мультипотоковых приложений) и сама ОС.

Для обработки сообщений функция потока должна  содержать цикл обработки  сообщений (message loop). Основу  этого цикла  составляют  две  функции API WIN32,  имеющие  следующие  прототипы:

BOOL GetMessage (LPMSG lpmsg ,  HWND  hwnd, UINT uMsgFilterMin ,

UINT uMsgFilterMax);

LONG DispatchMessage(const MSG  * lpmsg);

Простейший  цикл обработки  сообщений выглядит следующим  образом:

           MSG      msg;

      .   .   .

       while (GetMessage(&msg ,  0 ,  0  ,  0 ) ) { DispatchMessage(&msg); }

Функция GetMessage извлекает очередное сообщение из очереди сообщений вызвавшего ее потока. Параметр lpmsg - дальний указатель на структуру сообщения (типа MSG). Параметр hwnd (идентификатор окна) определяет конкретное окно из числа окон, созданных потоком, которому  послано  сообщение.

Функция GetMessage возвращает значение FALSE в случае, если извлекается сообщение WM_QUIT, во всех остальных случаях возвращается значение TRUE. Выборка сообщения WM_QUIT приводит к выходу из цикла, после чего обычно поток завершается. Следует также отметить важную особенность функции GetMessage : если функция обнаруживает, что очередь сообщений потока пуста, то поток блокируется и ему не выделяется процессорное время до тех пор, пока новое сообщение не поступит в очередь. Функция  DispatchMessage определяет окно ,  которому  предназначено сообщение ,  и вызывает  соответствующую  функцию окна .  Функция  окна    относится    к      так    называемым   косвенно вызываемым  

6

(callback)  функциям  ,  которые  создаются  разработчиком  приложения  ,  а  вызываются  Windows.  Каждому  окну  ,  создаваемому потоком, должна соответствовать  некоторая  функция  окна  (допустимо ,  когда  одна  функция  определяется  как  функция  окна  сразу  для  нескольких  окон).  В  функции  окна  сосредоточены  все  действия  потока  по обработке  сообщений ,  направленных  окну.  Так  как  абсолютное большинство приложений  можно рассматривать как  совокупность  окон,  можно  считать ,  что основная  работа  приложения выполняется  функцией  ( или  функциями)  окна.

Функции  окна  соответствует  следующий  прототип  (имя  функции  выбирается  произвольно):

LRESULT  CALLBACK WndProc ( HWND  hwnd ,  UINT  msg ,

                                                           WPARAM  wParam  ,  LPARAM lParam);

Параметры  функции  полностью  аналогичны  соответствующим  полям  структуры  MSG.

Фактически функция окна представляет собой один большой оператор выбора из обрабатываемых функцией  окна сообщений и содержит обработчики этих сообщений. Как правило, программист планирует обработку далеко не всех сообщений, поступающих в функцию окна. Поэтому, перед возвратом из функции необработанные сообщения передаются на обработку по умолчанию функции DefWindowProc. Значение, возвращаемое функцией окна, в общем случае определяется тем, какое обрабатывалось сообщение.

Приложение, использующее графический интерфейс с пользователем, должно иметь, как минимум, одно окно – главное окно приложения. Для  того,  чтобы  создать окно, необходимо вначале зарегистрировать класс  окна .  Класс  окна  определяет  набор  свойств ,  характерных  для  всех  окон ,  создаваемых  на базе данного класса.  В  Windows  определены  стандартные  классы  окон, используемые  для  создания  стандартных  органов  управления.  Стандартные  классы  не регистрируются   приложением  и для  них  не  определяется  функция окна ,  так  как  эти операции  выполняются  автоматически  при  загрузке  Windows.

Для  регистрации  класса  окна  используется  следующая  функция  API WIN32:

ATOM   WINAPI  RegisterClassEx ( const  WNDCLASSEX  FAR  * lpwcx);

В качестве параметра эта функция  получает дальний указатель на структуру  WNDCLASSEX, описывающую основные свойства всех окон, формируемых на базе создаваемого класса. Заметим, что среди прочих параметров, структура WNDCLASSEX содержит дальний указатель на функцию, которая будет использоваться как функция окна для всех окон, созданных на основе данного класса.

Для  создания  окна  используется  функция  CreateWindow :

HWND    WINAPI  CreateWindow( LPCSTR lpszClassName,

LPCSTR  lpszWindowName ,      DWORD  dwStyle , int x , int y , int nWidth , int nHeight, HWND hwndParent,  HMENU hmenu , HINSTANCE  hinst , LPVOID      lpvParam );

 

7

Функция  CreateWindow не отображает окно на экране (для этого предназначена  функция ShowWindow). Функция CreateWindow создает  в оперативной  памяти структуру типа WND,  на которую фактически  указывает идентификатор  окна  типа HWND, возвращаемый  этой  функцией .  Если  создать окно не удалось,  функция  возвращает значение NULL . Параметры функции служат для определения внешнего вида создаваемого окна.

Загрузочный модуль приложения, кроме сегментов кода и данных, может также содержать дополнительные данные в специальном формате, называемые ресурсами приложения. К числу наиболее часто используемых типов ресурсов относятся пиктограмма ( ICON ), курсор ( CURSOR ), таблица текстовых строк (STRINGTABLE), графическое изображение ( BITMAP ), произвольные данные (RCDATA), меню ( MENU и MENUEX ), акселераторы меню (ACCELERATORS), шаблон диалога ( DIALOG и DIALOGEX ).

Для  включения  ресурсов  в  загрузочный  модуль  приложения  необходимо  создать  текстовый  файл  описания  ресурсов (*.rc)  и  включить  его  в  состав  создаваемого  программного  проекта.  В  процессе  сборки  загрузочного модуля  этот  файл  обрабатывается  компилятором  ресурсов,  в  результате  чего  ресурсы  включаются  в состав  exe-файла  приложения,  там  же  формируется таблица  ресурсов ,  которая  используется  для  поиска  и загрузки  ресурсов  в  оперативную  память. Промежуточным результатом данного процесса является скомпилированный двоичный файл описания ресурсов (*.res).  Файл описания ресурсов состоит из специальных операторов, определяющих включаемые ресурсы. Обычно ресурсы загружаются автоматически перед их использованием, например при создании окна или диалоговой панели. Кроме того, имеются функции API, позволяющие загружать ресурсы динамически в процессе работы приложения.

Стандартные органы управления представляют собой дочерние окна созданные на основе предопределенных в Windows классов окон. Для создания органа управления используется функция CreateWindow. В качестве имени класса окна для этой функции необходимо указать имя одного из предопределенных классов. Заголовок окна при этом рассматривается как строка, которая будет написана на поверхности органа управления. Для органа управления, на котором отсутствует надпись, соответсвующий параметр функции CreateWindow должен быть указан как NULL. Стиль окна задается как комбинация стилей WS_CHILD, WS_VISIBLE и стилей, определенных для соответствующих органов управления. Координаты, высота и ширина органа управления имеют тот же смысл, что и для произвольного окна. Параметр  hwndParent должен содержать идентификатор окна, на поверхности которого создается орган управления. В качестве параметра hMenu следует указать определенную Вами через #define константу, которая будет служить идентификатором органа управления. Остальные параметры функции CreateWindow имеют обычный смысл. Как правило, органы управления создаются при обработке функцией окна сообщения WM_CREATE. 

 Когда пользователь совершает какое-то действие над органом управления, в функцию родительского окна поступает сообщение WM_COMMAND. Параметр lParam этого  сообщения  содержит   идентификатор окна органа управления  типа

8

HWND, который возвращается функцией CreateWindow при создании органа управления. Младшее слово параметра wParam содержит уже упоминавшийся идентификатор органа управления. Именно по этому идентификатору функция родительского окна определяет, от какого именно органа управления получено сообщение. Старшее слово wParam содержит код извещения, специфичный для каждого органа управления и определяющий, о чем собственно уведомляет родительское окно орган управления. Таким образом, для работы с органами управления родительскому окну достаточно обрабатывать сообщение WM_COMMAND. Обработчик этого сообщения должен вернуть нулевое значение.

Из всего выше сказанного имеется одно исключение, касающееся полос просмотра. Во-первых, если необходимо иметь окно с полосами просмотра, то для

этого достаточно при создании этого окна указать стили WS_VSCROLL и WS_HSCROLL для вертикальной и горизонтальной полос, соответственно. Во-вторых, вместо сообщения WM_COMMAND от вертикальной полосы просмотра поступает сообщение WM_VSCROLL, а от горизонтальной – WM_HSCROLL.

Для того, чтобы влиять на состояние органов управления, необходимо посылать сообщения органу управления. Для каждого органа управления определен свой набор сообщений. Сообщения обычно посылаются при помощи функции SendMessage, имеющей тот же набор параметров, что и функция окна:

          LRESULT SendMessage(HWND hwnd, UINT uMsg, WPARAM  wParam, LPARAM  lParam);

Кроме того, довольно часто эта функция используется для посылки в собственную очередь сообщений WM_COMMAND, WM_VSCROLL, WM_HSCROLL для имитации событий от органов управления. Подобный прием часто используется, например, для синхронизации полосы просмотра с клавиатурой: при нажатии соответствующих клавиш обработчик сообщения WM_KEYDOWN посылает сообщения WM_VSCROLL или WM_HSCROLL.

Следует напомнить также, что органы управления являются окнами, и поэтому к ним применимы те же функции, что и для любых других окон, в частности MoveWindow, EnableWindow, IsWindowEnabled, SetWindowText, ShowWindow, DestroyWindow. Кроме того, в дополнение к посылке сообщений органам управления, влиять на их состояние можно при помощи специальных функций API, определенных для некоторых органов управления. В файле windowsx.h системы программирования Borland C++ 5.02 для большинства стандартных органов управления определены также макросы, упрощающие передачу сообщений органам управления.

В таблице 1 приведена общая информация о стандартных органах управления.

 Более подробно сведения, необходимые для выполнения лабораторной работы, изложены в учебном пособии  С.О. Деревенсков, Е.И.Духнич “Основы программирования  для Windows 95 и Windows NT” (с. 1 - 42) и    многочисленной литературе [2-6]. В помощь студентам на дискете, прилагаемой к настоящим указаниям, приводятся примеры программирования простейших приложений Win32. 

9

Таблица 1

Стандартные органы управления

Орган управления

Имя класса

Стиль окна

Коды извещения

Сообщения для органа управления

Кнопка

“button”

BS_*

BN_*

BM_*

Статическое окно

“static”

SS_*

STN_*

STM_*

Полоса просмотра

“scrollbar”

SBS_*

SB_*

SBM_*

Простой редактор текста

“edit”

ES_*

EN_*

EM_*

Простой список выбора

“listbox”

LBS_*

LBN_*

LB_*

Список выбора с окном редактирования

“combobox”

CBS_*

CBN_*

CB_*

Порядок выполнения работы

  1.  Получите вариант задания у преподавателя.
  2.  Напишите программу согласно варианту задания.
  3.  Отладьте разработанную программу и покажите результаты работы программы преподавателю.
  4.  Составьте отчет по лабораторной работе

Содержание отчета

Отчет по лабораторной работе должен содержать следующие сведения:

  •  название и цель работы;
  •  вариант задания;
  •  листинг разработанной программы с комментариями;
  •  результаты работы программы.

Варианты  заданий

Приложение должно формировать главное окно с заголовком, системным меню, кнопками закрытия, минимизации и максимизации. Приложение должно использовать собственные курсор, стандартную и уменьшенную пиктограмму. В рабочей области окна должны формироваться стандартные органы управления, предусмотренные заданием.

1.Формируются несколько стандартных кнопок и статическое окно. Информация о нажатии каждой кнопки должна отображаться в статическом окне.

2. Формируются несколько радиокнопок и статическое окно. В каждый момент времени только одна из радиокнопок должна быть нажата. Информация об изменении состояния каждой кнопки должна отображаться в статическом окне.

10

3. Формируются несколько групп переключателей по 2 – 3 переключателя  и статическое окно. В каждый момент времени только один из переключателей в группе может быть выбран. Информация об изменении состояния каждого переключателя должна отображаться в статическом окне.

4. Формируются три стандартные кнопки и статическое окно. Две кнопки управляют размерами третьей: нажатие на них пропорционально увеличивает и уменьшает ее размеры. Информация об изменении размеров кнопки должна отображаться в статическом окне.

5. Формируются вертикальная полоса просмотра и статическое окно. В статическом окне должна отображаться информация о текущем положении ползунка.

6. Формируются простой список выбора и статическое окно. В статическом окне должна отображаться информация о выбираемом пользователем элементе списка.

7. Формируются список выбора с окном редактирования и статическое окно. В статическом окне должна отображаться информация о выбираемом пользователем элементе списка.

8. Формируются однострочный текстовый редактор и статическое окно. В статическом окне должна отображаться информация, вводимая пользователем в редакторе.

9. Формируются многострочный текстовый редактор и статическое окно. В статическом окне должна отображаться информация, вводимая пользователем в редакторе.

10. Формируются однострочный текстовый редактор, простой список выбора и стандартная кнопка. Нажатие на кнопку должно помещать введенную пользователем в редакторе строку в список выбора.

Контрольные вопросы

  1.  Что такое сообщение? Какова роль сообщений в организации работы приложения? Объясните процесс обработки сообщений в Windows.
  2.  Расскажите о структуре приложений Windows.
  3.  Расскажите о регистрации класса окна и создании окна приложения.
  4.  Расскажите о назначении функции окна.
  5.  Что такое ресурсы приложения? Каким образом они создаются и как используются в процессе работы приложения?
  6.  Что такое стандартные органы управления? Расскажите об их создании и использовании.

11

Л и т е р а т у р а

  1.  Деревенсков С.О., Духнич Е.И. Основы программирования для Windows 95 и Windows NT: Учеб. пособие / ВолгГТУ, Волгоград, 1998, - 84 с.
  2.  Рихтер Дж. Windows для профессионалов (программирование в Win32 API для Windows NT 4.0 и Windows 95) / Пер. с англ. – М.: Издательский отдел “Русская редакция” ТОО “Chanel Trading Ltd.”, 1997 – 720 c.:ил.
  3.  Петзолд Ч. Программирование для Windows 95; в 2-х томах / Пер. с англ. – СПб.:BHV-Санкт-Петербург, 1997.
  4.  Фролов А.В., Фролов Г.В. Операционная система Windows 95 для программиста – М.: ДИАЛОГ-МИФИ, 1996. – 288 с. – (Библиотека системного программиста; Т. 22)
  5.  Фролов А.В., Фролов Г.В. Операционная система Microsoft Windows 3.1 для программиста: В 3-х ч.Часть 1.  – М.: ДИАЛОГ-МИФИ, 1994. – 269 с. – (Библиотека системного программиста; Т. 11)
  6.  Фролов А.В., Фролов Г.В. Операционная система Microsoft Windows 3.1 для программиста: В 3-х ч.Часть 2.  – М.: ДИАЛОГ-МИФИ, 1994. – 269 с. – (Библиотека системного программиста; Т. 12)

Составитель:   Сергей Олегович Деревенсков

 

ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS. Методические  указания к лабораторным работам по курсу “Системное программное обеспечение”. Часть  IV.

   Редактор  Е.И. Кагальницкая

   Темплан 1999 г. , поз. N ____

Подписано в печать _________ . Формат  60 х 84  1/16  Бумага газетная. Печать         офсетная.  Усл. печ. л.  ____ .    Уч. -изд.л.  ___ .  Тираж _____ . Заказ _____ .

   Волгоградский государственный технический университет.

   400066 Волгоград , пр. Ленина , 28.

   РПК "Политехник" Волгоградского государственного технического

   университета.

   400066 Волгоград , ул. Советская , 35.


 

А также другие работы, которые могут Вас заинтересовать

46635. Синтаксичні конструкції в різностильових текстах 23.5 KB
  Словосполучення і речення це синтаксичні конструкції. Прості речення вживаються в усіх стилях мовлення. Однак стилістичного забарвлення вони набувають залежно від способів вираження членів речення інтонації порядку слів тощо. Яскравого стилістичного забарвлення набувають речення де в ролі підмета виступають прислівник дієслово частка вигук: Немає слово як полин гірке.
46636. Правила оформлення наукової роботи: структура, нумерація, ілюстративний матеріал, загальні правила цитування й покликання на використані джерела, оформлення бібліографічного опису 23.5 KB
  Правила оформлення наукової роботи: структура нумерація ілюстративний матеріал загальні правила цитування й покликання на використані джерела оформлення бібліографічного опису. Структура наукової роботи досить своєрідна. Після нього повинен бути зміст на якому вказується структура наукової роботи. Власне наукова робота починається із вступу в якому вказується актуальність теми мету дослідження завдання роботи теоретичне та практичне значення дослідження тощо.
46637. Традиційні формули звертання в діловому та науковому стилях 23.5 KB
  Традиційні формули звертання в діловому та науковому стилях. Звертання найяскравіший і часто вживаний вид мовленнєвого етикету. Вибір звертання значною мірою залежить від тональності спілкування. В офіційному здебільшого усному спілкуванні послуговуються цим звертанням у поєднанні з прізвищем або назвою особи за фахом чи родом діяльності напр.
46639. Quite and rather 23.5 KB
  Мы часто употребляем quite в позитивных ситуациях, а rather в негативных: She is quite intelligent but rather lazy. Когда мы употребляем rather с позитивными словами
46640. ОСНОВНЫЕ ИТОГИ СОЦИАЛЬНО–ЭКОНОМИЧЕСКОГО РАЗВИТИЯ СССР К ИСХОДУ 30–Х ГОДОВ 23.6 KB
  На наш взгляд в оценке итогов развития страны к началу 40х годов следует учитывать два объективных обстоятельства: вопервых конечный результат вовторых средства и методы с помощью которых он был достигнут. Бесспорно то что в конце 30хгодов были созданы основные конструкции социалистического общества. К исходу 30х годов наша страна вышла с пятого места в1913году на второе место в мире после США по объемам валовой промышленной продукции.
46641. Прогнозирование возможной радиационной обстановки и ее оценка 23.62 KB
  Полученные размеры ОЯП и зон РЗ ВП наносят на карту или схему местности с учетом принятого или фактического направления ветра. Методика прогнозирования и оценки зон РЗ местности при ЯВ. На 1 этапе определяют размеры зон Р3 изображают их на карте схеме местности в соответствующих цветах и находят в какую зону по РЗ попал рассматриваемый объект. На 3 этапе разрабатывают текст оповещения населения об опасности РЗ местности и принимают решения по работе персонала объекта.
46642. Образование единых централизованных государств 23.65 KB
  Экспансия государства была в основе своей экспансией сельского хозяйства которое при всей своей первобытности обнаруживало превосходство над кочевниками Юга и Востока. Жадная требовательность государства и скудость крестьянской базы под господствующими классами порождали самые ожесточенные формы эксплуатации. Национальный гнет в России был несравненно грубее чем в соседних государствах не только по западную но и по восточную границу. Если в национально однородных государствах буржуазная революция развивала могучие центробежные тенденции...