1
.docxМіністерство освіти і науки України
Кременчуцький національний університет
імені Михайла Остроградського
Звіт
З лабораторної роботи №7
З дисципліни «Об’єктно-орієнтоване програмування»
Виконала
студентка 2 курсу
групи КН-13-1
Самойленко Ю.М.
18-варіант
Перевірив
Доц. каф.
Притчин С. Е.
Підпис ______________
Кременчук 2015
Лабораторна робота №7
Тема роботи: Интерфейсы.
Мета роботи: Освоить методы работы с интерфейсом.
Хід роботи
1 Набрать в редакторе следующую программу. Выполнить анализ кода и добавить комментарии:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LabIter
{
/// <summary>
/// интерфейс
/// </summary>
public interface IarOperation
{
///методы интерфейса
int Add();
int Subtraction();
int Multiplication();
int Division();
}
/// <summary>
/// интерфейс
/// </summary>
public interface IsqrSqrt
{
///методы интерфейса с параметрами
int Sqr(int x);
int Sqrt(int x);
}
/// <summary>
/// класс, реализующий методы интерфейса IarOperation
/// базовый класс
/// </summary>
class TestIntefece: IarOperation
{
int Test_x, Test_y;
/// <summary>
/// свойство чтение-запись
/// </summary>
public int x
{
set{ Test_x = value; }
get{ return Test_x; }
}
/// <summary>
/// свойство чтение-запись
/// </summary>
public int y
{
set{ Test_y = value; }
get{ return Test_y; }
}
public TestIntefece() { }
/// <summary>
/// конструктор
/// </summary>
public TestIntefece(int x, int y)
{
this.Test_x = x;
this.Test_y = y;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает сумму
/// </summary>
public virtual int Add()
{
return Test_x + Test_y;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает разницу
/// </summary>
public int Subtraction()
{
return Test_x - Test_y;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает произведение
/// </summary>
public int Multiplication()
{
return Test_x * Test_y;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает результат деления
/// </summary>
public int Division()
{
return Test_x / Test_y;
}
/// <summary>
/// метод класса
/// </summary>
public virtual void ShowNumber ()
{
Console.WriteLine("Переменная x: {0}\nПеременная y: {1}",Test_x,Test_y);
}
}
/// <summary>
/// класс-наследник
/// </summary>
class DeriveTestIntefece: TestIntefece
{
public int Test_z;
/// <summary>
/// конструктор
/// </summary>
public DeriveTestIntefece(int z, int x, int y):base(x,y)
{
this.Test_z = z;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает сумму
/// </summary>
public override int Add()
{
return base.x + base.y + Test_z;
}
/// <summary>
/// наследуемый метод
/// </summary>
public override void ShowNumber()
{
base.ShowNumber();
Console.WriteLine("Переменная z: "+ Test_z);
}
}
/// <summary>
/// класс, реализующий интерфейс IsqrSqrt
/// класс-наследник
/// </summary>
class Test2Interface: TestIntefece, IsqrSqrt
{
/// <summary>
/// реализация метода интерфейса
/// возвращает квадрат числа
/// </summary>
public int Sqr(int x)
{
return x * x;
}
/// <summary>
/// реализация метода интерфейса
/// возвращает куб числа
/// </summary>
public int Sqrt(int x)
{
return(int)Math.Sqrt((double)(x));
}
}
class Program
{
static void Main(string[] args)
{
TestIntefece MyInter = new TestIntefece(x: 10,y: 12); //создание обьекта
Console.WriteLine("MyInter: ");
///вызов методов, наследуемых с интерфейса
MyInter.ShowNumber();
Console.WriteLine("{0} + {1} = {2}", MyInter.x, MyInter.y, MyInter.Add());
Console.WriteLine("{0} * {1} = {2}", MyInter.x, MyInter.y, MyInter.Multiplication());
DeriveTestIntefece MyInter1 = new DeriveTestIntefece(z: 4, x: 5, y: 6); //создание обьекта
Console.WriteLine();
Console.WriteLine("MyInter1: ");
///вызов методов, наследуемых с интерфейса
MyInter1.ShowNumber();
Console.WriteLine("{0} + {1} + {3} = {2}", MyInter1.x, MyInter1.y, MyInter1.Add(),
MyInter1.Test_z);
Test2Interface MyInter2 = new Test2Interface(); //создание обьекта
MyInter2.x = 15;
MyInter2.y = 20;
Console.ReadKey();
}
}
}
2. Разработть программу в соответствии со своим вариантом.
Доработать задание лабораторной работы №6 использовав следующие изменения:
1. Добавить в проект два класса интерфейса;
2. В классах наследовать интерфейсы.
3. Продемонстрировать работу классов наследующих интерфейсы.
5. Выполнить описание добавляемых интерфейсов и методов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication49
{
class Program
{
/// <summary>
/// базовый класс
/// </summary>
public class Matrix
{
public double[,] matrix;
public int Row = 0, Col = 0;
//конструктор
public Matrix(int row, int col)
{
matrix = new double[row, col];
Row = row; Col = col;
}
//доступ к элементу по индексам
public double this[int i, int j]//индексатор
{
get { return matrix[i, j]; }
set { matrix[i, j] = value; }
}
//произведение матриц
public static Matrix operator *(Matrix first, Matrix second)
{
Matrix matr = new Matrix(first.Row, first.Col);
if (first.Col != second.Row) throw new ArgumentException("Число столбцов матрицы А не равно числу строк матрицы В.");
for (int i = 0; i < first.Row; i++)
{
for (int j = 0; j < second.Col; j++)
{
double sum = 0;
for (int r = 0; r < first.Col; r++)
sum += first[i, r] * second[r, j];
matr[i, j] = sum;
}
}
return matr;
}
//умножение на число
public static Matrix operator *(Matrix m, int t)
{
Matrix mat = new Matrix(m.Row, m.Col);
for (int i = 0; i < m.Row; i++)
for (int j = 0; j < m.Col; j++)
mat[i, j] = m[i, j] * t;
return mat;
}
//деление на число
public static Matrix operator /(Matrix m, int t)
{
Matrix mat = new Matrix(m.Row, m.Col);
for (int i = 0; i < m.Row; i++)
for (int j = 0; j < m.Col; j++)
mat[i, j] = m[i, j] / t;
return mat;
}
}
interface IA { void PrintMatrix(); }
interface IB { void Status(int pow);}
/// <summary>
/// класс-потомок
/// класс, реализующий интерфейсы
/// </summary>
class Matrix_1 : Matrix, IA,IB
{
public Matrix_1(int Row, int Col) : base(Row, Col) { }
/// <summary>
/// метод возведения в степень
/// возвращает матрицу
/// </summary>
public Matrix_1 Step(Matrix_1 first, int pow)
{
Matrix_1 matr = new Matrix_1(first.Row, first.Col);
matr = first;
for (int z = 1; z < pow; z++)
{
Matrix_1 bufer = new Matrix_1(first.Row, first.Col);
for (int i = 0; i < first.Row; i++)
{
for (int j = 0; j < first.Row; j++)
{
double sum = 0;
for (int r = 0; r < first.Row; r++)
sum += matr[i, r] * first[r, j];
bufer[i, j] = sum;
}
}
matr = bufer;
}
return matr;
}
/// <summary>
/// реализация интерфейса IA
/// выводит матрицу
/// </summary>
public void PrintMatrix()
{
for (int i = 0; i < this.Row; i++)
{
for (int j = 0; j < this.Col; j++)
Console.Write("{0} ", this[i, j]);
Console.Write("\n");
}
}
/// <summary>
/// реализация интерфейса IB
/// выводит текст
/// </summary>
public void Status(int pow)
{
Console.WriteLine("\n\n{0} степень матрицы:\n\n", pow);
}
static void Main(string[] args)
{
Console.WriteLine("Введите размерность матрицы:\n");
int N = Convert.ToInt32(Console.ReadLine());
int M = Convert.ToInt32(Console.ReadLine());
Matrix_1 first = new Matrix_1(N, M);//обьект класса
Console.WriteLine("Введите элементы матрицы:\n");
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
{
first[i, j] = double.Parse(Console.ReadLine());
}
Console.WriteLine("Введите степень:\n");
int pow = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введенная матрица:\n\n");
first.PrintMatrix();//вызов метода интерфейса
Matrix_1 s = first.Step(first, pow);
//вызов методов интерфейсов
s.Status(pow);
s.PrintMatrix();
Console.ReadKey();
}
}
}
}