Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1

.docx
Скачиваний:
7
Добавлен:
16.02.2016
Размер:
84.17 Кб
Скачать

Міністерство освіти і науки України

Кременчуцький національний університет

імені Михайла Остроградського

Звіт

З лабораторної роботи №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();

}

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]