Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИЧ. РАБОТЫ.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.49 Mб
Скачать

Практическая работа № 9

Тема: «Интерфейсы».

Цель: научиться работать с интерфейсами, познакомиться с стандартными интерфейсами .Net

при объектно-ориентированном подходе при использовании языка C#.

Ход работы:

Используя методические пособия, рассмотрите темы: «Интерфейсы» и «Стандартные интерфейсы .Net». Рассмотрите примеры выполнения практической работы и выполните задания, соответствующие Вашему варианту.

Теоретическая справка:

Интерфейсы

Интерфейс – это «крайний случай» абстрактного класса, в котором не предусмотрена ни одна реализация члена класса. Таким образом, интерфейс описывает функциональность классов, но не определяет способа ее реализации. Каждый класс, наследуя интерфейс, может реализовать его элементы по-своему. Так достигается полиморфизм – объекты разных классов по-разному реагируют на вызовы одного и того же метода.

Синтаксис интерфейса:

[атрибуты] [спецификаторы] interface имя_интерфейса : [предки]

{

//объявление функциональных членов интерфейса без реализации

}

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

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

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

Стандартные интерфейсы .Net

В библиотеке классов .Net определено множество стандартных интерфейсов, задающих желаемую функциональность объектов. Например, интерфейс IComparable задает метод сравнения объектов по принципу больше и меньше, что позволяет переопределить соответствующие операции в рамках класса, наследующего интерфейс IComparable. Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью оператора foreach.

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

Более подробно рассмотрим стандартный интерфейс IComparable.

Интерфейс IComparable определен в пространстве имен System и содержит единственный метод CompareTo, возвращающий результат сравнения двух объектов – текущего и переданного ему в качестве параметра:

interface IComparable

{

int CompareTo(object obj);

}

Реализация данного метода должна возвращать:

0 – если текущий объект и параметр равны;

<0 – если текущий объект меньше параметра;

>0 – если текущий объект больше параметра.

Используя собственную реализацию метода CompareTo можно перегрузить операции отношения. Напомним, что операции отношения должны перегружаться парами: < и >, <= и >=, == и !=.

Пример выполнения практической работы:

Составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу окончил. Вывести информацию о студентах отсортировав ее по году рождения.

namespace ConsoleApplicationTest

{

public struct Student : IComparable

{

public Student(string name, int yearOfBirth, string homeAddress, string school) : this()

{

Name = name;

YearOfBirth = yearOfBirth;

HomeAddress = homeAddress;

School = school;

}

public string Name { get; private set; }// ФИО

public int YearOfBirth { get; private set; }// год рождения

public string HomeAddress { get; private set; }// домашний адрес

public string School { get; private set; } // какую школу окончил

public int CompareTo(object obj)

{

return YearOfBirth.CompareTo(((Student)obj).YearOfBirth);

}

public override string ToString()

{

return string.Format("{0}; {1}; {2}; {3}", Name, YearOfBirth, HomeAddress, School);

}

}

public static class Program

{

private static void Main()

{

Student[] students = new Student[5];// массив студентов

string name, home, school;

int year;

for (int i = 0; i < 5; i++)

{

Console.Write("{0}\nИмя: ", i + 1);

name = Console.ReadLine();

Console.Write("Год рождения: ");

year = Convert.ToInt32(Console.ReadLine());

Console.Write("Домашний адрес: ");

home = Console.ReadLine();

Console.Write("Школа:");

school = Console.ReadLine();

Student student = new Student(name, year, home, school);

students[i] = student;

}

Array.Sort(students); // Сортируем

foreach (Student student in students) Console.WriteLine(student); // Выводим данные

Console.ReadKey();

}

}

}

Варианты заданий:

Замечания.

Для хранения данных внутри программы организовать массив структур.

В типе структура реализуется метод CompareTo интерфейса IComparable, перегружается метод ToString базового класса object и необходимые операции отношения, поля данных и дополнительные методы продумайте самостоятельно.

  1. Составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу окончил. Вывести информацию о студентах, окончивших заданную школу, отсортировав их по году рождения.

  1. Составить список студентов группы, включив следующие данные: ФИО, номер группы, результаты сдачи трех экзаменов. Вывести информацию о студентах, успешно сдавших сессию, отсортировав по номеру группы.

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

  1. Составить автомобильную ведомость, включив следующие данные: марка автомобиля, номер автомобиля, фамилия его владельца, год приобретения, пробег. Вывести информацию об автомобилях, выпущенных ранее определенного года, отсортировав их по пробегу.

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

  1. Составить инвентарную ведомость склада, включив следующие данные: вид продукции, стоимость, сорт, количество. Вывести информацию о той продукции, количество которой менее заданной величины, отсортировав ее по количеству продукции на складе.

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

  1. Составить список вкладчиков банка, включив следующие данные: ФИО, № счета, сумма, год открытия счета. Вывести информацию о тех вкладчиках, которые открыли вклад в текущем году, отсортировав их по сумме вклада.

  1. Составить список студентов, включающий фамилию, факультет, курс, группу, 5 оценок. Вывести информацию о тех студентах, которые имеют хотя бы одну двойку, отсортировав их по курсу.

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