42721

Интерфейсы, делегаты, события

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

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

Таблица 1 Список используемых элементов управления Элемент управления Класс Описание textBox1 TextBox Окно ввода имени продавца textBox2 TextBox Окно ввода фамилии продавца textBox3 TextBox Окно ввода стажа продавца textBox4 TextBox Окно вывода списка продавцов textBox5 TextBox Окно ввода оклада продавца textBox6 TextBox Окно ввода имени менеджера textBox7 TextBox Окно ввода фамилии менеджера textBox8 TextBox Окно ввода стажа менеджера textBox9 TextBox Окно ввода оклада менеджера textBox10 TextBox Окно вывода зарплаты менеджера button1 Button...

Русский

2013-10-30

277.5 KB

60 чел.

ЛАБОРАТОРНАЯ РАБОТА № 6

Интерфейсы, делегаты, события

Цель работы:. 

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

1 Теоретическое введение

1.1 Интерфейсы

В C# для полного отделения структуры класса от его реализации используется механизм интерфейсов. Интерфейс является расширением идеи абстрактных классов и методов.

Синтаксис интерфейсов подобен синтаксису абстрактных классов. Объявление интерфейсов выполняется с помощью ключевого слова interface. При этом методы в интерфейсе не поддерживают реализацию. Членами интерфейса могут быть методы, свойства, индексаторы и события.

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

Синтаксис:

[атрибуты] [модификаторы] interface Имя_интерфейса[:список_родительских_интерфейсов] {

обьявление_свойств_и_методов}

Пример:

class Animal

{

public string Name;

private int Weight;

protected int Type;

public int Animal(int W, int T, string N)

{

 Weight=W;

 Type=T;

 Name=N;

   }

   public int GetWeight(){return Weight;}

}

interface Species

 {

string Species();

void Feed();

 }

class Cheetah:Animal,Species

 {

private string ScientificName;

public string Species()

{

return ScientificName;

}

public void Feed()

{Weight++;}

 }

Можно объявлять ссылочную переменную, имеющую интерфейсный

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

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

1.2 Делегаты

Делегат — это объект, имеющий ссылку на метод. Делегат позволяет выбрать вызываемый метод во время выполнения программы. Фактически значение делегата – это адрес области памяти, где находится точка входа метода.

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

Делегат объявляется с помощью ключевого слова delegate, за которым

указывается тип возвращаемого значения, имя делегата и список параметров

вызываемых методов.

Синтаксис:

delegate тип_возвращаемого_значения имя_делегата (список_параметров);

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

Метод можно вызвать только тогда, когда его подпись соответствует  подписи делегата.

1.2.1 Многоадресность делегатов

Многоадресность — это способность делегата хранить несколько ссылок на различные методы, что позволяет при вызове делегата инициировать эту цепочку методов.

Для создания цепочки методов необходимо создать экземпляр делегата,

и пользуясь операторами + или += добавлять методы к цепочке. Для удаления метода из цепочки используется оператор - или -=. Делегаты, хранящие несколько ссылок, должны иметь тип возвращаемого значения void.

1.3 События

Событие — это автоматическое извещение о каком-либо  роизошедшем

действии. События являются членами класса и объявляются с использованием ключевого слова event. Механизм событий основан на использовании делегатов.

Синтаксис:   event имя_делегата имя_обьекта;

1.3.1 Широковещательные события

События могут активизировать несколько обработчиков, в том числе те, что определены в других объектах. Такие события называются широковещательными. Широковещательные события создаются на основе многоадресных делегатов.

Пример:

// Объявление делегата, на основе которого будет  определено событие.

delegate void MyEventHandler () ;

// Объявление класса, в котором инициируется событие.

class MyEvent

{

public event MyEventHandler activate;

// В этом методе инициируется событие.

public void fire()

{ if (activate != null) activate();

}

class X

{

public void Xhandler()

{

Console.WriteLine("Событие получено объектом класса X.");

}

}

class Y

{

public void Yhandler()

{

Console.WriteLine("Событие получено объектом

класса Y.");

}

}

class EventDemo

{

 static void handler()

 {

   Console.WriteLine("Событие получено объектом

класса EventDemo.")

 }

 public static void Main()

 {

   MyEvent evt = new MyEvent();

   X xOb = new X();

   Y yOb = new Y();

   // Добавление методов handler (), Xhandler()

   // и Yhandler() в цепочку обработчиков события.

   evt.activate += new MyEventHandler(handler);

evt.activate += new MyEventHandler(xOb.Xhandler);

   evt.activate += new MyEventHandler(yOb.Yhandler);

   evt.fire();

   Console.WriteLine();

   evt.activate -= new MyEventHandler(xOb.Xhandler);

   evt.fire();

 }

}

2 Пример приложения для работы с интерфейсами, делегатами и событиями

В качестве примера рассмотрим объектно-ориентированное приложение – «Отдел магазина». Приложение включает следующие пользовательские классы:

  •  Класс человек «Person» - включает следующие свойства – Имя (Name), Фамилию (Fio) и оклад (Salary);
  •  Класс продавец «Assistant» - наследник класса «Person», содержит все свойства родительского класса, а также и дополнительные свойства Стаж (Seniority)  и Зарплата (Salarysum).  Зарплата рассчитывается как  оклад плюс стаж умноженный на 2% (Salarysum =Salary+ Seniority*0.2);
  •  Класс менеджер (зав.отделом, управляющий) «Manager» - наследник класса «Assistant», содержит все свойства родительского класса и дополнительное свойство Количество подчиненных (Subordinate). Зарплата у менеджера  рассчитывается как  оклад плюс стаж умноженный на 2%  плюс количество подчиненных умноженное на 2% (Salarysum =Salary+ Seniority*0.2+ Subordinate*0.2) .

Кроме того, приложение содержит интерфейсный класс ISalSum, в котором объявлен метод – Расчет зарплаты (CalcSalSum). Реализация данного метода приведена  в классах Assistant и Manager. Данные классы являются наследниками интерфейсного класса  ISalSum.

Диаграмма классов разработанного приложения приведена на рисунке 1.

Так как при изменении количества продавцов зарплата менеджера изменяется и данное изменение отображается в окне формы, выполняются следующие действия:

  1.  В классе продавец (Assistant) создается событие «Добавление продавца» (AddAssistant). Данное событие возникает при создании нового экземпляра класса продавец (Assistant). Другими словами, класс Assistant является издателем события;
  2.  Для реализации механизма обработки события  используется стандартный делегат из библиотеки .NETEventHandler;
  3.  Обработка события выполняется в классах – получателях события (класс Manager и класс Form1). Для этого в них описываются   методы-обработчики событий, сигнатура которых соответствует типу делегата. В классе Manager – это метод DoEvent, а в классе Form1 – это метод ViewEvent. Таким образом, классы Manager и Form1 являются подписчиками;
  4.  Каждый объект (не класс), желающий получать сообщение  должен зарегистрировать в объекте- издателе  этот метод.


Экранная форма разработанного приложения приведена на рисунке 2.


Список используемых элементов управления приведен в таблице 1.

Таблица 1 Список используемых элементов управления

Элемент управления

Класс

Описание

textBox1

TextBox

Окно ввода имени продавца

textBox2

TextBox

Окно ввода фамилии продавца

textBox3

TextBox

Окно ввода стажа продавца

textBox4

TextBox

Окно вывода списка продавцов

textBox5

TextBox

Окно ввода оклада продавца

textBox6

TextBox

Окно ввода имени менеджера

textBox7

TextBox

Окно ввода фамилии менеджера

textBox8

TextBox

Окно ввода стажа менеджера

textBox9

TextBox

Окно ввода оклада менеджера

textBox10

TextBox

Окно вывода зарплаты менеджера

button1

Button

Командная кнопка «Создать продавца» (экземпляр класса «Продавец»)

button2

Button

Командная кнопка «Создать менеджера» (экземпляр класса «Менеджер»)

button3

Button

Командная кнопка «Обновить список продавцов»

Последовательность действий по программированию приложения:

  1.  Создайте приложение,  окно которого изображенное на рисунке 1.
  2.  Создайте класс Person. Каждый класс будет храниться в отдельном файле, для это щелкните правой кнопкой мыши по имени проекта (как показано на рисунке 3). В появившемся контекстном меню выберите пункты AddNew Item. В появившемся окне в списке Templates выберите пункт Class и в поле Name введите имя Person.cs  (см. рисунок 4). В C# принято давать имена файлам по имена класса, который. В нем хранится.

  1.  Класс Person  будет иметь вид:

class Person

   {

       protected string name;

       public string Name

       {

           get { return name; }

           set { name = value; }

       }

       protected string fio;

       public string Fio

       {

           get { return fio; }

           set { fio = value; }

       }

       protected int salary;

       public int Salary

       {

           get { return salary; }

           set { salary = value; }

       }

   }

Где переменные name (имя), fio(фамилия) и salary (оклад) – поля, а Name, Fio и Salary – свойства. В Visual Studio, чтобы превратить переменную в свойство, нужно выделить переменную и в появившемся контекстном меню последовательно выбрать пункты: Refactor Encapsulated Fiels (Улучшение Инкапсулировать поле). В ответ появится окно, в котором нужно ввести имя будущего свойства. Свойства желательно именовать  так же как и переменные, но только с большой буквы.

  1.  Создание класса  Assisstant (Продавец). Класс также помещается в отдельный файл Assisstants. Класс Assisstant имеет вид:

// На интерфейс ISalSum пока не обращаем внимания

// (его можно пока не указывать)

class Assistant:Person, ISalSum

   {

       protected int seniority;

 // На данную строку пока не обращаем внимания

     //(ее можно пока пропустить)

       public event EventHandler AddAssistant;

       

       public int Seniority

       {

           get { return seniority; }

           set { seniority = value; }

       }

       protected double salarysum;

       public double Salarysum

       {

           get { return salarysum; }

           set { salarysum = value; }

       }

// На данную функцию пока не обращаем внимания

// (ее можно пока пропустить)

       double ISalSum.CalcSalSum()

       {

           salarysum = this.Salary + seniority * 0.2;

           if (AddAssistant != null) AddAssistant(this,null);

           return salarysum;

       }

   }

Как видно из листинга, класс Assistant является дочерним классом класса Person и содержит дополнительное поле seniority (стаж)  и соответствующее ему свойство Seniority.

  1.  Создание класса  Manager (Менеджер). Класс также помещается в отдельный файл Managers. Класс Manager имеет вид:

// На интерфейс ISalSum пока не обращаем внимания

// (его можно пока не указывать)

class Manager:Assistant,ISalSum

   {

       

       int subordinate;

       

       public int Subordinate

       {

           get { return subordinate; }

           set { subordinate = value; }

       }

       public static bool f=false;

// На данную функцию пока не обращаем внимания

// (ее можно пока пропустить)

       double ISalSum.CalcSalSum()

       {

           Salarysum = this.Salary + this.Seniority * 0.2+subordinate*0.2;

           return Salarysum;

       }

// На данную функцию пока не обращаем внимания

       public void DoEvent(object sender, EventArgs e)

       {

            salarysum = salary + seniority * 0.2 + subordinate * 0.2;

       }

       

   }

Как видно из листинга, класс Assistant является дочерним классом класса Person и содержит дополнительное поле subordinate (количество подчиненных)  и соответствующее ему свойство Subordinate.

Кроме того, класс Manager содержит статическое поле f – признак того, что объект Manager создан, но его поля не заполнены.

  1.  Объявляем интерфейс ISalSum, содержащий объявление метода CalcSalSum – для расчета зарплаты. Интерфейс будет располагаться в отдельном файле ISalSum.cs, который создается  аналогично файлам для классов. Для создания  интерфейса щелкните правой кнопкой мыши по имени проекта (как показано на рисунке 3). В появившемся контекстном меню выберите пункты AddNew Item. В появившемся окне в списке Templates выберите пункт Interface и в поле Name введите имя ISalSum.cs. В C# принято, чтобы имена интерфейсов начинались с буквы «I». Класс ISalSum имеет вид:

interface ISalSum

   {

      double CalcSalSum();

   }

  1.  Функции, объявленные в интерфейсах, должны быть реализованы. В данном примере функция CalcSalSum реализована в классах  Assistant и Manager. Для реализации интерфейса:

7.1. При объявлении классов Assistant и Manager указывают интерфейс:

    class Assistant:Person, ISalSum

и

 class Manager:Assistant,ISalSum

7.2. Кроме того, классы  Assistant и Manager должны содержать программную реализацию функции CalcSalSum

  1.    В классе Form1 описываем глобальные переменные:

public ArrayList section = new ArrayList();

       Manager mngr;

Где объект  mngr (менеджер) нужен для того, чтобы использовать этот объект в различных функциях  класса Form1, а динамический список section служит для хранения списка продавцов.  Для корректной работы динамического списка  ArrayList  может быть придется добавить пространство имен  System.Collections;

  1.   Так как при изменении количества продавцов изменяется и зарплата менеджера в классе Assistant объявляем событие AddAssistant:

public event EventHandler AddAssistant;

Для реализации механизма обработки события  используется  стандартный делегат EventHandler

  1.  Событие AddAssistant будет издаваться при создании нового объекта Assistant (продавец). Логичнее было бы поместить издание события в конструктор. Но в данном примере событие AddAssistant издается при расчете зарплаты продавца (а так как расчет зарплаты происходит при создании объекта Assistant, то ошибки не будет)
  2.   Обработка события будет выполняться в двух классах Manager и Form1. В классе  Manager будет введена функция DoEvent для   пересчета зарплаты менеджера (см. листинг в пункте 5 ), а в классе  Form1 – функция ViewEvent для отображения на экране измененной зарплаты.
  3.  Функция  ViewEvent, реализованная в классе  Form1 имеет вид:

public void ViewEvent(object sender, EventArgs e)

       {

           textBox10.Text = mngr.Salarysum.ToString();

       }

  1.   Теперь событие сформировано  и обработчики события созданы. Осталось только подписаться на событие. Полписка на событие происходит при создании нового экземпляра класса Assistant (Событие Click  кнопки button1).
  2.  Для события Load  формы Form1 пишем следующий программный код:

private void Form1_Load(object sender, EventArgs e)

       {

           mngr = new Manager();

           Manager.f = false;

       }

Создание объекта manager и установка флага f=false (поля объекта менеджер еще не заполнены)

  1.   Для события Click кнопки button2 пишем следующий программный код:

   private void button2_Click(object sender, EventArgs e)

       {

           if (!Manager.f)

           {

               Manager.f = true;

               mngr.Name = textBox6.Text;

               mngr.Fio = textBox7.Text;

               mngr.Seniority = Convert.ToInt32(textBox8.Text);

               mngr.Salary = Convert.ToInt32(textBox9.Text);

               mngr.Subordinate = section.Count;

               

               ISalSum iss = (ISalSum)mngr;

               mngr.Salarysum = iss.CalcSalSum();

               textBox10.Text = mngr.Salarysum.ToString();

           }

           else MessageBox.Show("В отделе может быть только однн управляющий");

       }

Заполняются поля объекта mngr (менеджер), создается экземпляр класса интерфейса ISalSum (объкт iss) и расчитывается зарплата менеджера.

  1.    Для события Click кнопки button1 пишем следующий программный код:

private void button1_Click(object sender, EventArgs e)

       {

if (Manager.f)

           {

              

 Assistant ass = new Assistant();

               mngr.Subordinate =section.Count+1;

               ass.AddAssistant += new EventHandler(mngr.DoEvent);

               ass.AddAssistant += new EventHandler(ViewEvent);

               ass.Name = textBox1.Text;

               ass.Fio = textBox2.Text;

               ass.Seniority = Convert.ToInt32(textBox3.Text);

               ass.Salary = Convert.ToInt32(textBox5.Text);

              

               ISalSum iss = (ISalSum)ass;

               ass.Salarysum = iss.CalcSalSum();

               section.Add(ass);

               textBox4.Text += ass.Name + "  " + ass.Fio + "   " + ass.Salary.ToString() + "   " + ass.Seniority + "     " + ass.Salarysum.ToString() + (char)13 + (char)10;

           }

           else MessageBox.Show("Предварительно следует ввести информацию о менеджере");

       }

        

  1.  Для события Click кнопки button3 пишем следующий программный код:

private void button3_Click(object sender, EventArgs e)

       {

           textBox4.Clear();

           foreach (Assistant ass in section)

           {

               textBox4.Text += ass.Name + "  " + ass.Fio + "   " + ass.Salary.ToString() + "   " + ass.Seniority + "     " + ass.Salarysum.ToString() + (char)13 + (char)10;

           }

       }

Вывод в окно text4 списка всех продавцов

  1.   Для получения диаграммы классов в окне Solution Explorer щелкните правой кнопкой мыши по имени проекта (как показано на рисунке 3). В появившемся контекстном меню выберите пункт View Class Diagram.

3.Задания для самостоятельной работы

Построить иерархию классов в соответствии с вариантом задания. Предусмотреть, по крайней мере, два интерфейса и обработку событий ( предусмотреть хотя бы одно событие)

  1.  Ученик, бакалавр, магистр
  2.  Студент, преподаватель, заведующий кафедрой
  3.  Студент, группа, институт
  4.  Служащий,  рабочий, инженер
  5.  Рабочий, цех, предприятие
  6.  Рабочий,  инженер, администрация
  7.  Деталь, узел, механизм
  8.  Организация,  завод, страховая компания
  9.  Журнал, книга,  учебник
  10.  Тест, экзамен, выпускной экзамен
  11.  Город, область, страна
  12.  Водоем, озеро, море
  13.  Растение, куст,  дерево
  14.  Растение, дерево, лесной массив
  15.  Молочный продукт, сметана. сыр
  16.  Квитанция, накладная,  счет
  17.  Транспортное средство, автомобиль, поезд
  18.  Двигатель, двигатель внутреннего сгорания, реактивный двигатель
  19.  Государство, республика, монархия
  20.  Животное, млекопитающее, парнокопытное
  21.  Корабль, парусник, пароход
  22.  Летательный аппарат,  планер, самолет
  23.  Спортсмен, мастер спорта,  заслуженный мастер спорта

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Что понимается под термином «интерфейс»?
  2.  Чем отличается синтаксис интерфейса от синтаксиса абстрактного класса?
  3.  Какое ключевое слово языка C# используется для описания  интерфейса?
  4.  Поддерживают ли реализацию методы интерфейса?
  5.  Какие объекты языка C# могут быть членами интерфейсов?
  6.  Каким количеством классов может быть реализован интерфейс?
  7.  Может ли класс реализовывать множественные интерфейсы?
  8.  Необходима ли реализация методов интерфейса в классе, включающем  этот интерфейс?
  9.  Какой модификатор доступа соответствует интерфейсу?
  10.  Допустимо ли явное указание модификатора доступа для  интерфейса?
  11.  Приведите синтаксис интерфейса в общем  виде.  Проиллюстрируйте его фрагментом программы на языке C#.
  12.  Возможно ли создание ссылочной переменной интерфейсного  типа?
  13.  Возможно ли наследование интерфейсов?
  14.  Насколько синтаксис наследования интерфейсов отличается от  синтаксиса наследования классов?
  15.  Необходимо ли обеспечение реализации в иерархии наследуемых  интерфейсов?
  16.  Что понимается под термином «делегат»?
  17.  В чем состоят преимущества использования делегатов?
  18.  В какой момент осуществляется выбор вызываемого метода в случае использования делегатов?
  19.  Что является значением делегата?
  20.  Какое ключевое слово языка C# используется для описания  делегатов?
  21.  Приведите синтаксис делегата в общем виде. Проиллюстрируйте  его фрагментом программы на языке C#.
  22.  Возможно ли использование делегата для вызова метода, соответствующего подписи делегата?
  23.  Возможен ли вызов метода в том случае, если его подпись не соответствует подписи делегата?
  24.  Что понимается под термином «многоадресность»?
  25.  В чем состоит практическое значение многоадресности?
  26.  Каким образом осуществляется создание цепочки методов для   многоадресных делегатов?
  27.  Какие операторы языка C# используются для создания цепочки методов для многоадресных делегатов?
  28.  Каким образом осуществляется удаление цепочки методов для  многоадресных делегатов?
  29.  Какие операторы языка C# используются для удаления цепочки  методов для многоадресных делегатов?
  30.  Каким должен быть тип возвращаемого значения для  многоадресных делегатов?
  31.  Что понимается под термином «событие»?
  32.  Являются ли события членами классов?
  33.  Какое ключевое слово языка C# используется для описания событий?
  34.  На каком механизме языка C# основана поддержка событий?
  35.  Приведите синтаксис описания события в общем виде.  Проиллюстрируйте его фрагментом программы на языке C#.
  36.  Что понимается под термином «широковещательное событие»?


Рисунок 1 – диаграмма классов приложения «Отдел магазина»

Рисунок 2 – экранная форма разработанного приложения

Рисунок 3- Создание нового файла для очередного класса

Рисунок 4 – Создание файла для нового класса


 

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

46436. Разграничение языка и речи. Проблема выделения языка, как научного объекта на теоретическом уровне 15.66 KB
  Разграничение языка и речи. Проблема выделения языка как научного объекта на теоретическом уровне. Разграничение языка и речи. Точки зрения с которых рассматривается язык: язык как универсальное средство общения общественное явление основа национального общественного сознания Разграничение понятий язык и речь впервые в четкой форме было выдвинуто и обосновано швейцарским лингвистом Фердинандом де Соссюром затем понятия эти были глубже разработаны другими учеными в частности академиком Л.
46437. The category of aspect 15.67 KB
  In generl the ctegory of spect shows the wy or mnner in which n ction is performed tht is whether the ction is perfective совершенное imperfective несовершенное momentry мгновенное однократное itertive многократное повторяющееся inchotive зачинательное durtive продолженное длительное etc.In English the ctegory of spect is constituted by the opposition of the continuous spect nd the common spect.The opposition the continuous spect the common spect is ctulized in the following contrsting pirs of forms: Continuous Common...
46438. Оппозитивные группировки лексики в языке: явление синонимии, омонимии и антонимии в языке 15.68 KB
  Синонимия тип семантических отношений языковых единиц заключающийся в полном или частичном совпадении их значений. Синонимия свойственна лексической фразеологической грамматической словообразовательной системам языка. Синонимия отражает в языке свойства объективного мира. Различаются два основных типа синонимии; семантическая идеографическая и стилистическая синонимия выражаемая словами с одинаковой предметной отнесённостью имеющими различную стилистическую характеристику: верить веровать книжн.
46439. Получение счетов на оплату товаров – заключительный этап выполнения договора 15.77 KB
  Форма расчетов: если иное не предусмотрено договором расчеты должны осуществляться платежными поручениямибанковский перевод Срок оплаты: если в договоре не указан срок оплаты и не предусмотрена предварительная оплата то платеж должен быть совершен сразу после получения товара. Безналичные расчеты между субъектами хозяйствования: Расчеты платежными поручениями. Расчеты по аккредитиву. Расчеты по инкассо Расчеты чеками .
46440. Ремонт деталей класса «Валы». Восстановление шлицевых и шпоночных пазов 15.79 KB
  В процессе эксплуатации у валов и осей изнашиваются посадочные шейки шпоночные канавки и шлицы повреждаются резьбы поверхности валов центрирующие отверстия а также происходит изгиб валов. Характерные дефекты валов: 1 износ повти трения в опорах; 2 износ сопрягаемых повтей с подшипниками качения; 3 разруше или смятие шпоночных пазов; 4 изгиб оси вала; 5 повреждение или износ резьбовых соединений; 6 продольный изгиб вала. Особое внимание при дефектовке уделяют контролю коленчатых валов. Шейки валов имеющие царапины риски и...
46442. Классификация объектов интеллектуальной собственности 15.81 KB
  К объектам промышленной собственности относятся: изобретения; промышленные образцы; полезные модели; товарные знаки; знаки обслуживания; наименование мест происхождения товара. Сделка может заключаться как по одному так и по нескольким патентам на изобретения. Беспатентными являются изобретения на которые поданы патентные заявки но не получены патенты на изобретения; изобретения не патентуемые изобретателями в целях сохранения секретности а также некоторые изобретения не подлежащие патентованию например в таких областях...
46443. Методы обеспечения безопасной эксплуатации МТ 18.25 KB
  Методы обеспечения безопасной эксплуатации МТ В целях обеспечения безопасности определения фактического технического состояния объектов МТ возможности их дальнейшей эксплуатации на проектных технологических режимах для расчета допустимого давления необходимости снижения разрешенного рабочего давления и перехода на пониженные технологические режимы или необходимости ремонта с точной локализацией мест его выполнения и продления срока службы объектов МТ в процессе эксплуатации должно проводиться периодическое техническое диагностирование...
46444. Модернизм XX век 15.87 KB
  Модернизм это масштабное культурное явление которое возникло на рубеже 19 и 20 веков и затронуло практически все сферы человеческой жизни. Модернизм отрицает культурное наследие и реальное воспроизведение действительности использует деформацию образов и субъективное восприятие художника т. Модернизм объединяет множество относительно самостоятельных идейнохудожественных течений: экспрессионизм кубизм конструктивизм сюрреализм абстракционизм попарт.