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

Отчёт_сид

.doc
Скачиваний:
11
Добавлен:
27.03.2015
Размер:
44.54 Кб
Скачать

НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Институт радиоэлектроники и информационных технологий

Кафедра КТПП

Лабораторная работа №1

«Изучение основных принципов объектно-ориентированного программирования»

Выполнил: ст.гр. 07-СБК
Сидоров Иван

Проверил: Паршуков Антон

Нижний Новгород

2011 год

Цель работы: изучение преимуществ и базовых принципов объектно-ориентированного программирования.

Задание на лабораторную работу:

Разработать программу, которая читает откуда-либо текстовую строку, выводит ее куда-либо и сообщает общее количество символов во всех строках. Например, программа может считать строку из файла, получить от пользователя и из ресурсов, а выводить считанные строки в TextBox, ListBox и текстовый файл, соответственно. А также выводить суммарную длину строк в MsgBox. Программа должна обладать способностью к расширению возможных вариантов считывания и вывода строк, то есть модификация кода должна быть сведена к минимуму. В программе запрещается использование оператора Select case.

Программа на языке C#:

using System;

using System.Collections;

using System.Text;

using System.IO;

namespace test

{

class AnyReader // Какой-либо ридер

{

protected ArrayList _strs;

protected static int _charCount;

public AnyReader()

{

_strs = new ArrayList();

}

public static int CharCount

{

get { return FileReader._charCount; }

}

public ArrayList Strs

{

get { return _strs; }

}

}

class FileReader: AnyReader // Файловый ридер

{

public FileReader(string fname):base()

{

StreamReader rd = new StreamReader(fname, System.Text.Encoding.GetEncoding(1251));

while (rd.Peek() != -1)

{

string temp = rd.ReadLine();

_strs.Add(temp);

_charCount+= temp.Length;

}

rd.Close();

}

public void ReadAnotherFile(string fname)

{

_strs.Clear();

StreamReader rd = new StreamReader(fname, System.Text.Encoding.GetEncoding(1251));

while (rd.Peek() != -1)

{

string temp = rd.ReadLine();

_strs.Add(temp);

_charCount += temp.Length;

}

rd.Close();

}

}

class AnyWritter // Какой-либо райтер

{

protected ArrayList _strs;

protected int char_count;

public AnyWritter(AnyReader anyr)

{

_strs = anyr.Strs;

char_count = AnyReader.CharCount;

}

public void GetAnotherReader(AnyReader anyr)

{

_strs = anyr.Strs;

char_count = AnyReader.CharCount;

}

public void PrintCharCount()

{

Console.WriteLine("Общее кол-во считанных символов всеми Reader'ами = " + char_count.ToString() );

}

}

class ConsoleWriter:AnyWritter // Консольный райтер

{

public ConsoleWriter(AnyReader anyr) : base(anyr) { }

public void PrintAll()

{

foreach (string str in _strs)

{

Console.WriteLine(str);

}

}

}

class Program

{

static void Main(string[] args)

{

AnyReader ar = new FileReader("c:\\1.txt"); // Проверяем взаимодействие

AnyWritter aw = new AnyWritter(ar); // нескольких ридеров и райтеров

aw.PrintCharCount();

ConsoleWriter cw = new ConsoleWriter(ar);

cw.PrintAll();

cw.PrintCharCount();

FileReader fr = (FileReader)ar;

fr.ReadAnotherFile("c:\\2.txt");

cw.GetAnotherReader(fr);

cw.PrintAll();

cw.PrintCharCount();

FileReader fr2 = new FileReader("c:\\2.txt");

cw.GetAnotherReader(fr2);

cw.PrintAll();

cw.PrintCharCount();

Console.Read();

}

}

}

Выводы:

При разработке были использованы следующие понятия объектно-ориентированного программирования:

  • инкапсуляция – каждый разработанный класс выполняет определенную задачу, внутренняя реализация сокрыта, доступ осуществляется через интерфейс;

  • наследование (для многократного использования) – классы ввода строки наследуются от интерфейсного класса IReader;

  • полиморфизм (включения) – классы ввода строки по-разному реагируют на получение строки (каждый из них получает строку от своего источника).

3

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