- •Дайте общее представление об информационной технологии управления и назовите их основные компоненты.
- •Архитектура Ethernet (csma/cd, формат пакета, разновидности)
- •Специализированные базы данных и их влияние на развитие коммерческих баз данных.
- •Модели надежности программных средств. Аналитические динамические модели.
- •Интерфейсы и наследование. Наследование от нескольких базовых интерфейсов.
Специализированные базы данных и их влияние на развитие коммерческих баз данных.
Модели надежности программных средств. Аналитические динамические модели.
Модели надежности программных средств (МНПС) подразделяются на аналитические и эмпирические. Аналитические модели дают возможность рассчитать количественные показатели надежности, основываясь на данных о поведении программы в процессе тестирования (измеряющие и оценивающие модели).Аналитические модели представлены двумя группами: динамические модели и статические.
В динамических моделях поведение ПО (появление отказов) рассматривается во времени. Если фиксируются интервалы каждого отказа, то получается непрерывная картина появления отказов во времени (модели с непрерывным временем). Может фиксироваться только число отказов за произвольный интервал времени. В этом случае поведение ПО может быть представлено только в дискретных точках (модели с дискретным временем).
Интерфейсы и наследование. Наследование от нескольких базовых интерфейсов.
Интерфейсный класс может реализовывать несколько интерфейсов. Если класс реализовывает несколько интерфейсов, то они перечисляются через запятую при объявлении классов. Рассмотрим пример объявлены 2 интерфейса – интерфейс IMusician и ISoccerPlayer. Базовый класс Human определяет человека, а производный от него класс SoccerGuitarist определяет гитариста, который может играть в футбол. При определении производного класса сначала указывается имя его базового класса, а затем перечисляются имена реализуемых им интерфейсов. Так как оба интерфейса – IMusician и ISoccerPlayer содержат метод Play(), имеющий одну и ту же сигнатуру, а класс SoccerGuitarist обязан его реализовать, то в классе SoccerGuitarist использована явная реализация этого метода. При явной реализации перед именем метода указывается имя его интерфейсного класса, (например IMusician.Play) и таким образом становится понятно, какой именно метод реализует интерфейсный класс.
Реализация наследования и интерфейсов
using System;
using System.Collections.Generic;
using System.Text;
namespace Interface_IBase
{
// интерфейс «музыкант»
interface IMusician {
void Tune ();
void Play();
}
// интерфейс «футболист»
interface ISoccerPlayer {
void Play();
}
// базовый клас «человек»
class Human {
public Human()
{
Console.WriteLine("Я человек");
}
}
// класс SoccerGuitarist является производным от класса Human и реализует
// интерфейсы классов IMusician и ISoccerPlayer
class SoccerGuitarist : Human, IMusician, ISoccerPlayer
{
public void Tune()
{
Console.WriteLine("Я гитарист");
}
// IMusician.Play() – это явная реализация метода Play() в классе
// SoccerGuitarist, требует указания полного имени метода, которое
// включает имя его интерфейса – IMusician
// модификатор доступа при явной реализации указывать нельзя!
void IMusician.Play()
{
Console.WriteLine("Я играю на гитаре");
}
// ISoccerPlayer.Play() – это явная реализация метода Play() в классе SoccerGuitarist, //требует указания полного имени метода, которое включает имя его интерфейса – //ISoccerPlayer
void ISoccerPlayer.Play()
{
Console.WriteLine("Я играю в футбол");
}
}
class Program
{
static void Main(string[] args)
{
// при создании объекта производного класса неявно вызывается конструктор
// по умолчанию базового класса Human
SoccerGuitarist val = new SoccerGuitarist();
val.Tune();
// при доступе к методу Play() выполняется явное приведение ссылки val
// к типу интерфейса, метод которого мы вызываем
((IMusician)val).Play();
((ISoccerPlayer) val).Play();
}
}
}
Явная реализация методов интерфейса – это единственный способ избежать потенциальных конфликтов между именами методов разных интерфейсов.
При реализации методов явным образом следует учитывать следующее:
1. При доступе к методу необходимо явно приводить ссылку к типу интерфейса, метод которого мы вызываем, или вызвать через ссылку на этот интерфейс.
2. Нельзя указывать для реализуемого метода модификатор доступа.
3. Нельзя объявить метод как виртуальный.