Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Показатели эффективности систем

ВВЕДЕНИЕ

Наследование классов

Чтобы указать, что один класс является наследником другого, используется следующий синтаксис:

class <имя наследника>: <имя базового класса> {<тело класса>}

Наследник обладает всеми полями, методами и свойствами предка, однако элементы предка с модификатором private не доступны в наследнике. Любой класс, участвующий в наследовании, не может быть потомком самого себя. Наследование от двух и более классов в C# запрещено.

Конструкторы класса-предка не переносятся в класс-наследник.

При наследовании нельзя расширить область видимости класса: internal–класс может наследоваться от public–класса, но не наоборот.

 

Опишем класс Point для представления точки на двумерной плоскости.

class Point

{

protected double x, y;

static int amount = 0;

public void PrintInfo()

{

Console.WriteLine("x={0}, y={1} ",x, y);

Console.WriteLine("amount = " + amount);

}

 

Опишем класс Rectangle для представления прямоугольника, который будет наследником класса Point.

class Rectangle: Point

{

double w, h;

static int amount = 0;

public void PrintInfo()

{

Console.WriteLine("Координаты " + x + " " + y);

Console.WriteLine("amount = " + amount);

Console.WriteLine("w={0},h={1}", w, h);;

}

}

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

При компиляции данного фрагмента будет получено предупреждающее сообщение о том, что метод Rectangle.PrintInfo() скрывает метод базового класса Point.PrintInfo(). Чтобы подчеркнуть, что поле или метод класса-наследника замещает поле или метод базового класса, используется ключевое слово new. В этом случае происходит компиляция без предупреждений.

class Rectangle: Point

{

new public void PrintInfo(){...}

 

}

В Visual Studio 2005 имеются встроенные средства графического представления иерархии классов, которые вызываются в панели Solution Explorer командой View Class Diagram контекстного меню класса.

Для построенной иерархии классов увидим:

 

Для обращения к методам непосредственного предка класс-наследник может использовать ключевое слово base в форме base.<имя метода базового класса>.

Например, метод PrintInfo класса Rectangle можно переписать следующим образом:

public void PrintInfo()

{

base.PrintInfo();// выведет x, у, значение поля amount

базового класса Paint

Console.WriteLine("amount = " + amount);

Console.WriteLine("Ширина и высота " + w + " " + h);

}

Если конструктор базового класса имеет параметры, то их значения при наследовании нужно ему передать через конструктор производного класса. Для этого также используется base:

<конструктор наследника>([<параметры>]): base([<параметры_2>])

В этом случае конструктор производного класса вначале совершает вызов конструктора базового класса с подходящей сигнатурой. Если вызов конструктора базового класса отсутствует, компилятор автоматически подставляет в заголовок конструктора вызов: base().

Добавим в класс Paint два конструктора:

public Point()

{

Console.WriteLine("Point");

x = 0;

y = 0;

amount++;

}

public Point(double x, double y)

{

Console.WriteLine("Point");

this.x = x;

this.y = y;

amount++;

}

 

Добавим в класс Rectangle конструктор:

public Rectangle(double x, double y, double w, double h)

: base(x, y)

{

Console.WriteLine("Rectangle");

this.w = w;

this.h = h;

amount++;

}

Поля x и у инициализирует конструктор базового класса с соответствующей сигнатурой, а поля w и h инициализирует конструктор производного класса.

Создадим объект типа Rectangle.

Rectangle r1 = new Rectangle(3, 3, 3, 3);

r1.PrintInfo(); // выведет x=3,y=3,w=3,h=3,amount=1

Если из заголовка конструктора удалить вызов конструктора базового класса:

public Rectangle(double x, double y, double w, double h)

то будет вызван конструктор базового класса без параметров.

Создадим объект типа Rectangle.

Rectangle r2 = new Rectangle(3, 3, 3, 3);

r2.PrintInfo(); // выведет x=0,y=0,w=3,h=3,amount=1

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

 

Для классов можно указать два модификатора, связанных с наследованием. Модификатор sealed задает класс, от которого запрещено наследование. Например,

sealed class Rectangle {...}

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

Например,

abstract class Point {...}

 

Очевидно, что объект, созданный по описанию производного класса, всегда содержит ядро, созданное по описанию базового класса. Это означает, что ссылка, объявленная как на базовый тип, может адресоваться к своей части любого объекта производного типа. Именно только к своей части, поскольку базовый тип не знает о существовании других частей в объекте производного (расширенного) класса. Такие ссылки называют тонкими (худыми).

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

Обратное утверждение неверно, то есть ссылка производного типа не может адресоваться к объекту базового класса. Такие ссылки можно назвать толстыми.

Итак, ссылки базового типа могут адресовать объекты производного типа (тонкие ссылки могут адресовать толстые объекты), а ссылки производного типа не могут адресовать объекты базового типа (толстые ссылки не могут адресовать тонкие объекты).

Создадим следующую иерархию классов:

Код класса приведен ниже:

class Square: Point

{

double h;

protected static int amount = 0;

public Square(double x, double y, double h): base(x, y)

{

Console.WriteLine("Square");

this.h = h;

amount++;

}

public void PrintInfo()

{

Console.WriteLine("amount = " + amount);

Console.WriteLine("w=h={0}",h);

}

}

Создадим массив из трех объектов Point, Square, Rectangle:

Point[] point = {

new Point(1, 1),

new Square(2,2,2),

new Rectangle(3, 3, 3, 3)

};

Console.WriteLine("Содержимое слоя Point");

for (int i = 0; i < point.Length; i++)

point[i].PrintInfo();

//выведет только координаты х и у каждого объекта

Увеличение полномочий тонких ссылок называется явным приведением типов. Вначале все объекты цепочки наследования адресовались тонкими ссылками, имеющими базовый тип. Это допустимо и при формировании массива базового типа компилятор осуществлял неявное преобразование к тонкому типу. Хоть некоторые из тонких ссылок адресовали толстые объекты, но ссылались в них только на базовый слой.

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

((Square)point[1]).PrintInfo();//выведет h

((Square)point[2]).PrintInfo();//выведет h

((Rectangle)point[2]).PrintInfo();//выведет h и w

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

Более простой способ выполнить то же самое, если в базовом классе Point объявить функцию PrintInfo() виртуальной с помощью ключевого слова virtual,

public virtual void PrintInfo()

а в каждом классе-наследнике подтвердить новую версию этой функции с помощью ключевого слова override (переопределенная).

public override void PrintInfo()

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

 

 

 

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

 

Распределение информации (теория телетрафика, или просто телетрафик) - это понятие, которое может быть определено как движение сообщений (информационных потоков). Теория распределения информации - это научная дисциплина о закономерностях и количественном описании процессов движения этих сообщений в сетях и системах. Построение сетей связи на принципах компьютерных сетей потребовали разработки специальных методов анализа их производительности.

Начало теории телетрафика положил датского математика Эрланга, исследовавшего статистические характеристики работы телефонных сетей и опубликовавшего свою основополагающую работу "Теория вероятностей и телефония".

 

Некоторые примеры:

1) На вычислительную машину поступают сигналы датчиков, управляющих некоторым технологическим процессом. Сигналы от датчиков формируются независимо друг от друга, поступают, вообще говоря, в случайные моменты времени. Сигналы требуют некоторого, времени для их обработки. В момент поступления вычислительная машина может оказаться загруженной. В этом случае сигнал может либо потерян, либо обработан с запаздыванием. В обоих случая качество управления ухудшается. ТМО позволяет оценить качество управления.

2) Задача обслуживания некоторого числа абонентов системой связи (например, АТС). Вследствие загрузки АТС некоторые сообщения могут быть потеряны или переданы с опозданием. ТМО позволяет численно оценить влияние этих факторов.

3) Сборка изделия, состоящего из ряда агрегатов, узлов, деталей. Комплектующие изделия поступают от разных смежных, часто не связанных друг с другом, производств. Требуется, например, определить производительность сборочного производства с учетом возможной нерегулярности их поступления.

4) При проектировании морского порта необходимо учитывать тот факт, что суда из разных портов приходят в случайные моменты времени имеют разную грузоподъемность (и следовательно, требуют разного времени для разгрузки). В этом случае удешевление строительства порта приводит к простою судов (за что порт платит штрафы), а чрезмерное увеличение пропускной способности порта – к неоправданным затратам. ТМО позволяет оптимизировать затраты.

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

ТМО позволяет оптимизировать запасы.

 

СМО предназначены для многократного проведения некоторой однотипной операции, которую называют обслуживанием.

 

Обслуживаются один или несколько входящих потоков однородных событий (заявок, требований, вызовов). Если потоков несколько, то они могут отличаться некоторыми признаками, влияющими на их обслуживание. События наступают, вообще говоря, в случайные моменты времени.

Система массового обслуживания состоит из каналов обслуживания (приборов, линий связи, станков, бригад рабочих и т.д.), которых может быть один, несколько или даже неограниченное число. Они характеризуются производительностью, то есть временем, которое необходимо для обслуживания заявки. Обычно время обслуживания заявки - величина случайная. Канал принимает на обслуживание только одну заявку и по окончании обслуживания он готов к приему следующей заявки (немедленно или через некоторое время).

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

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

При определенных условиях заявка может получить отказ в обслуживании. Во многих случаях полагается, что заявка, получившая отказ, покидает систему и больше в нее не возвращается (теряется).

 

 

<== предыдущая лекция | следующая лекция ==>
Описание статических элементов | Массового обслуживания
Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 272; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.053 сек.