Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
гос 15.docx
Скачиваний:
5
Добавлен:
01.09.2019
Размер:
83.44 Кб
Скачать
  1. Специализированные базы данных и их влияние на развитие коммерческих баз данных.

  1. Модели надежности программных средств. Аналитические динамические модели.

Модели надежности программных средств (МНПС) подразделяются на аналитические и эмпирические. Аналитические модели дают возможность рассчитать количественные показатели надежности, основываясь на данных о поведении программы в процессе тестирования (измеряющие и оценивающие модели).Аналитические модели представлены двумя группами: динамические модели и статические.

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

  1. Интерфейсы и наследование. Наследование от нескольких базовых интерфейсов.

Интерфейсный класс может реализовывать несколько интерфейсов. Если класс реализовывает несколько интерфейсов, то они перечисляются через запятую при объявлении классов. Рассмотрим пример объявлены 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. Нельзя объявить метод как виртуальный.