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

Лабораторная работа №1 Вариант 11 (C#)

.doc
Скачиваний:
33
Добавлен:
20.06.2014
Размер:
137.22 Кб
Скачать

Липецкий государственный технический университет

Кафедра Автоматизированных систем управления

ЛАБОРАТОРНАЯ РАБОТА №1

по дисциплине «Объектно-ориентированное программирование»

«Реализация класса “Матрица”»

Студент

Ключанских А.С

подпись, дата

фамилия, инициалы

Группа

АС-10

Принял

ассистент

Тищенко А.Д.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

  1. Цель работы

Изучить базовые понятия объектно-ориентированного программирования и получить практические навыки разработки простейших классов, переопределения операций классов.

  1. Задание кафедры

Вариант 11:

Реализовать на языке C++ класс "Матрица целых чисел" такой, чтобы умножение целого числа на матрицу и присвоение результата третьей переменной-матрице можно было осуществить одной строкой C=b*A, где b – целое число, как во время объявлении переменной C, так и после.

  1. Краткие теоретические сведения

Объектно-ориентированное программирование и проектирование построено на классах. Любую программную систему, построенную в объектном стиле, можно рассматривать как совокупность классов, возможно, объединенных в пространства имен, проекты, решения. У класса две различные роли: модуля и типа данных. Класс - это модуль, архитектурная единица построения программной системы. Вторая роль класса не менее важна. Класс - это тип данных, задающий реализацию некоторой абстракции данных, характерной для проблемной области, в интересах которой создается программная система.

Синтаксис описания класса:

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

{тело_класса}

В теле класса могут быть объявлены:

константы; поля; конструкторы и деструкторы; методы; события; классы (структуры, делегаты, интерфейсы, перечисления).

У класса есть методы, решающие специальные задачи, - конструкторы. Конструктор представляет собой специальный метод класса, позволяющий создавать объекты класса. У конструкторов две синтаксические особенности:

  • имя конструктора фиксировано и совпадает с именем класса,

  • для конструктора не задается возвращаемое значение.

Многие объектно-ориентированные языки программирования позволяют выполнять перегрузку операторов для их использования в собственных классах. Это позволяет добиться естественного вида определяемого пользователем типа данных и использовать его в качестве основного типа данных. Например, можно создать новый тип данных с именем ComplexNumber, представляющий комплексное число, и определить методы выполнения математических операций над такими числами с использованием стандартных арифметических операторов, например оператора + для сложения двух комплексных чисел.

Например, так выполняется перегрузка оператора + в языке C#:

public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)

Конструктор без параметров называется конструктором по умолчанию. Конструкторы по умолчанию вызываются при создании экземпляров объекта с помощью оператора new, при этом для оператора new не указываются аргументы. Конструкторы могут быть отмечены модификаторами public (открытый), private (закрытый), protected (защищенный), internal (внутренний) или protected internal (защищенный внутренний). Эти модификаторы доступа определяют порядок доступа пользователей класса к конструкторам класса. Выделяют два особых случая конструкторов: конструктор по умолчанию и конструктор копирования. Конструктор по умолчанию используется при создании объекта без параметров (например, при объявлении массива объектов класса). Конструктор копирования используется при явном и неявном копировании объекта (например, при передаче параметра в функцию по значению или при возврате результата работы функции).

  1. Экспериментальные результаты

В результате выполнения лабораторной работы мной была написана программа на объектно-ориентированном языке C#, которая содержит в себе два класса: класс Matrix, содержащий одно поле – матрицу и соответствующие методы для работы с ней, а также перегрузку операции в соответствии с заданием, и класс Program, создаваемый автоматически при создании консольного проекта на C# и содержащий в себе всего одну статическую процедуру main, в которой создаются необходимые объекты и вызываются соответствующие методы этих объектов. Программный текст классов:

Program.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace oop

{

class Program

{

static void Main()

{

int m, n, b;

Console.WriteLine("Введите размеры матрицы и число, на которое ее нужно умножить: ");

try

{

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

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

if (m < 1 || m > 9 || n < 1 || n > 9)

{

Console.Write("Размеры матрицы должны быть не меньше 1 и не более 9\n");

return;

}

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

}

catch (Exception)

{

Console.WriteLine("Некорректный ввод, необходимо вводить целые положительные числа\n");

return;

}

Matrix A = new Matrix(m,n);

A.Input_Matrix();

Matrix C = b * A;

/* Matrix C = new Matrix(m, n);

C = b * A; - это тоже работает =)*/

C.Output_Matrix();

Console.ReadKey();

}

}

}

Matrix.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace oop

{

class Matrix

{

int [,] x;

public Matrix(int m, int n)

{

x = new int [m,n];

}

public static Matrix operator *(int b, Matrix X)

{

Matrix result = new Matrix(X.x.GetLength(0),X.x.GetLength(1));

for (int i = 0; i < X.x.GetLength(0); i++)

for (int j = 0; j < X.x.GetLength(1); j++)

result.x[i, j] = b * X.x[i, j];

return result;

}

public void Input_Matrix()

{

Console.Write("Заполнение матрицы: \n");

for (int i = 0; i < x.GetLength(0); i++)

{

for (int j = 0; j < x.GetLength(1); j++)

{

Console.Write("A[{0}][{1}]=", i + 1, j + 1);

try

{

x[i, j] = Convert.ToInt32(Console.ReadLine());

}

catch (Exception)

{

Console.Write("Некорректный ввод. Введите этот элемент снова\n");

j--;

}

}

Console.Write("\n");

}

}

public void Output_Matrix()

{

Console.Write("\n\n");

for (int i = 0; i < x.GetLength(0); i++)

{

for (int j = 0; j < x.GetLength(1); j++)

Console.Write("C[{0}][{1}]={2} \t", i + 1, j + 1, x[i, j]);

Console.Write("\n");

}

}

}

}

  1. Анализ полученных результатов

Практические результаты, полученные в ходе работы программы, представлены на следующих скриншотах:

Как видно из данных скриншотов, программа верно решает поставленную задачу и корректно реагирует на ввод недопустимых данных пользователем.

  1. Выводы

В ходе выполнения данной лабораторной работы я научился работать с базовыми элементами объектно-ориентированного программирования: классами, конструкторами и перегрузкой операторов и методов.

9