Отчёт_сид
.docНИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт радиоэлектроники и информационных технологий
Кафедра КТПП
Лабораторная работа №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;
-
полиморфизм (включения) – классы ввода строки по-разному реагируют на получение строки (каждый из них получает строку от своего источника).