Особенности реализации
Поведенческие и организационные факторы при управлении качеством. Методы контроля качества и надёжности в операционных системах.
Природа качества и надёжности продукции и услуг. Типы, категории и модели издержек по обеспечению качества продукции и услуг.
Принципы операционного контроля. Выполнение измерений: времени, продуктов, издержек. Основные параметры и показатели операционных измерений по времени и по стоимости. Система диспетчирования.
Литература [4] глава 6, [10] глава5?.
1. Минаев Э.С., Агеева Н.Г., Аббата Дага А. Управление производством и операциями: 17-модульная программа для менеджеров «Управление развитием оргназации». Модуль 15. – м.: ИНФРА-М, 2000. – 256 с.
Как уже говорилось выше, в современных объектно-ориентированных языках программирования каждый объект является значением, относящимся к определённому классу. Класс представляет собой объявленный программистом составной тип данных, имеющий в составе:
Поля данных
Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, из-за чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.
Методы
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.
Пример 1
myCalc cl=new myCalc(12.2);
cl.a=12;
using System;
public class myCalc
{
private int result;
public int a;
//constructor without a parameter defaults to 0
public myCalc()
{
result = 0;
}
//constructor with parameter
public myCalc(int x)
{
result = x;
}
//destructor
~myCalc()
{
result = 0;
}
//methods
public void displayResult()
{
Console.WriteLine("Result = {0}", result);
}
public void add(int x)
{
result = result + x;
}
public void subtract(int x)
{
result = result - x;
}
}
class myTest
{
public static void Main()
{
myCalc mC = new myCalc(90);
mC.displayResult();
mC.add(45);
mC.displayResult();
mC.subtract(35);
mC.displayResult();
mC.subtract(110);
mC.displayResult();
}
}
Пример 2
class TimeExcepts: Exception
{
public override string Message
{
get
{
return "Ошибка изменения значений времени.";
}
}
}
class HoursExcept: TimeExcepts
{
public override string Message
{
get
{
return base.Message + " Вы ввели недопустимое значение для переменной Часы.";
}
}
}
class MinutesExcept: TimeExcepts
{
public override string Message
{
get
{
return base.Message + " Вы ввели недопустимое значение для переменной Минуты.";
}
}
}
class SecondsExcept: TimeExcepts
{
public override string Message
{
get
{
return base.Message + " Вы ввели недопустимое значение для переменной Секунды.";
}
}
}
class Time
{
private int hours=0;
private int minuts=0;
private int seconds=0;
public Time(int hours, int minuts, int seconds)
{
SetTime(hours, minuts, seconds);
}
public Time() { }
public int Hours
{
get{return hours;}
set
{
if (value > 59 || value < 0)
throw new HoursExcept();
else hours = value;
}
}
public int Minutes
{
get { return minuts; }
set
{
if (value > 59 || value < 0)
throw new MinutesExcept();
else minuts = value;
}
}
public int Seconds
{
get { return seconds; }
set
{
if (value > 59 || value < 0)
throw new SecondsExcept();
else seconds = value;
}
}
public void SetTime(int hours, int minuts, int seconds)
{
Hours = hours;
Minutes = minuts;
Seconds = seconds;
}
}
Использование ...:
Код C#
Time t = new Time(24, 56, 34);
try
{
t.SetTime(61, 10, 5);
}
catch (TimeExcepts e)
{
Console.WriteLine(e.Message);
}
Гради Буч указывает[3] на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:
Динамическое связывание методов.
Обеспечение полиморфного поведения объектов приводит к необходимости связывать методы, вызываемые программой (то есть определять, какой конкретно метод будет вызываться) не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время. При этом реально динамическое связывание требуется не более чем для 20 % вызовов, но некоторые ООП-языки используют его постоянно.
Значительная глубина абстракции.
ООП-разработка часто приводит к созданию «многослойных» приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. В таком приложении происходит очень много вызовов методов и возвратов из методов, что, естественно, сказывается на производительности.
Наследование «размывает» код.
Код, относящийся к «оконечным» классам иерархии наследования (которые обычно и используются программой непосредственно) — находится не только в самих этих классах, но и в их классах-предках. Относящиеся к одному классу методы фактически описываются в разных классах. Это приводит к двум неприятным моментам:
· Снижается скорость трансляции, так как компоновщику приходится подгружать описания всех классов иерархии.
· Снижается производительность программы в системе со страничной памятью — поскольку методы одного класса физически находятся в разных местах кода, далеко друг от друга, при работе фрагментов программы, активно обращающихся к унаследованным методам, система вынуждена производить частые переключения страниц.
Инкапсуляция снижает скорость доступа к данным.
Запрет на прямой доступ к полям класса извне приводит к необходимости создания и использования методов доступа. И написание, и компиляция, и исполнение методов доступа сопряжено с дополнительными расходами.
Динамическое создание и уничтожение объектов.
Динамически создаваемые объекты, как правило, размещаются в куче, что менее эффективно, чем размещение их на стеке и, тем более, статическое выделение памяти под них на этапе компиляции.
Несмотря на отмеченные недостатки, Буч утверждает, что выгоды от использования ООП более весомы. Кроме того, повышение производительности за счёт лучшей организации ООП-кода, по его словам, в некоторых случаях компенсирует дополнительные накладные расходы на организацию функционирования программы. Можно также заметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором.