- •I. Написать программу, которая подсчитывает:
- •II. Написать программу, которая определяет:
- •Практическая работа № 2
- •Практическая работа № 3
- •Практическая работа № 4
- •Практическая работа № 5
- •Практическая работа № 6
- •Практическая работа № 7
- •I. Решить следующие задачи с использованием класса Stack:
- •II. Решить следующие задачи с использованием класса Queue:
- •III. Решить задачи из задания II, используя класс ArrayList. Практическая работа № 8
- •Практическая работа № 9
- •Практическая работа № 10
- •Практическая работа № 12
Практическая работа № 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 и необходимые операции отношения, поля данных и дополнительные методы продумайте самостоятельно.
Составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу окончил. Вывести информацию о студентах, окончивших заданную школу, отсортировав их по году рождения.
Составить список студентов группы, включив следующие данные: ФИО, номер группы, результаты сдачи трех экзаменов. Вывести информацию о студентах, успешно сдавших сессию, отсортировав по номеру группы.
Составить багажную ведомость камеры хранения, включив следующие данные: ФИО пассажира, количество вещей, общий вес вещей. Вывести информацию о тех пассажирах, средний вес багажа которых превышает заданный, отсортировав их по количеству вещей, сданных в камеру хранения.
Составить автомобильную ведомость, включив следующие данные: марка автомобиля, номер автомобиля, фамилия его владельца, год приобретения, пробег. Вывести информацию об автомобилях, выпущенных ранее определенного года, отсортировав их по пробегу.
Составить список сотрудников учреждения, включив следующие данные: ФИО, год принятия на работу, должность, зарплата, рабочий стаж. Вывести информацию о сотрудниках, имеющих зарплату ниже определенного уровня, отсортировав их по рабочему стажу.
Составить инвентарную ведомость склада, включив следующие данные: вид продукции, стоимость, сорт, количество. Вывести информацию о той продукции, количество которой менее заданной величины, отсортировав ее по количеству продукции на складе.
Составить инвентарную ведомость игрушек, включив следующие данные: название игрушки, ее стоимость (в руб.), возрастные границы детей, для которых предназначена игрушка. Вывести информацию о тех игрушках, которые предназначены для детей от N до M лет, отсортировав их по стоимости.
Составить список вкладчиков банка, включив следующие данные: ФИО, № счета, сумма, год открытия счета. Вывести информацию о тех вкладчиках, которые открыли вклад в текущем году, отсортировав их по сумме вклада.
Составить список студентов, включающий фамилию, факультет, курс, группу, 5 оценок. Вывести информацию о тех студентах, которые имеют хотя бы одну двойку, отсортировав их по курсу.
Составить список студентов, включающий ФИО, курс, группу, результат забега. Вывести информацию о студентах, показавших три лучших результата в забеге. Если окажется, что некоторые студенты получили такие же высокие результаты, то добавить их к списку победителей.
