- •Лабораторная 3 Объектно-ориентированное проектирование и программирование
- •Объектно-ориентированное проектирование Язык объектного моделирования uml. Виды диаграмм
- •Виды диаграмм
- •Диаграмма сценариев или прецедентов
- •Диаграммы классов
- •Диаграмма последовательности
- •Объектно-ориентированное программирование
- •Класс (поля, методы и свойства, области видимости, разработчики и пользователи класса)
- •Инкапсуляция, наследование и полиморфизм как свойства класса
- •Пример программирования классов
- •Пример приложения, использующего классы
Пример приложения, использующего классы
Рассмотрим приложение, основанное на рассмотренной иерархии классов. В приложение поместим главную форму, форму добавления экземпляров классов, форму просмотра всех экземпляров классов и форму запроса.
На главной форме поместим меню (рис. ):
Рис. Главная форма приложения
Кроме двух классов иерархии, создадим класс Global для размещения полей, видимых всем формам:
class Global
{
public struct st
{
public string name, place;
public int age, ball, group;
};
public static st st1;
public static stud A1=new stud();
public static stud A2 = new stud();
public static grad_stud B1=new grad_stud();
public static grad_stud B2 = new grad_stud();
public static FileStream aFile;
public static StreamWriter sw;
public static StreamReader sr; }
Форма добавления (рис. )
Рис. Форма добавления студента
На форме есть компонента groupBox, содержащая две компоненты radioButton для выбора типа добавляемого объекта, при выполнении события radioButton1_CheckedChanged поля, связанные с местом распределения, становятся невидимы; для аналогичного события для второй кнопки они становятся видимыми:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ label5.Visible = false;
textBox1.Visible = false; }
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ label5.Visible = true;
textBox1.Visible = true; }
После заполнения необходимых полей в зависимости от нажатой кнопки создается и инициализируется определенный экземпляр определенного класса, например, при нажатии кнопки «Первый студент» выполняется код:
private void button5_Click(object sender, EventArgs e)
{Global.st1.name=textBox2.Text;
Global.st1.age = Convert.ToInt32(maskedTextBox1.Text);
Global.st1.ball = Convert.ToInt32(maskedTextBox2.Text);
Global.st1.group = Convert.ToInt32(maskedTextBox3.Text);
Global.A1 = new stud(Global.st1.name, Global.st1.age, Global.st1.ball,
Global.st1.group); }
Заполняются поля структуры и инициализируктся экземпляр Global.A1.
Форма просмотра содержит компоненту ListBox; при загрузке формы выполняется код для добавления в список значений метода Info() для каждого объекта:
private void Form3_Load(object sender, EventArgs e)
{ listBox1.Items.Clear();
if (Global.A1!=null)
listBox1.Items.Add(Global.A1.info());
if (Global.A2!=null)listBox1.Items.Add(Global.A2.info());
if (Global.B1!=null)listBox1.Items.Add(Global.B1.info());
if (Global.B2!=null)listBox1.Items.Add(Global.B2.info()); }
Форма запроса имеет вид (рис. ):
Рис. Форма просмотра
При нажатии кнопки выполняется код:
private void button1_Click(object sender, EventArgs e)
{int cnt=0;
if (Global.B1.get_place() == textBox1.Text)
cnt++;
if (Global.B2.get_place() == textBox1.Text)
cnt++;
MessageBox.Show(Convert.ToString(cnt)); Close(); }
Код записи объектов в файл:
Global.aFile = new FileStream("stud.txt", FileMode.Create);
Global.sw = new StreamWriter(Global.aFile);
Global.sw.Close();
Global.aFile = new FileStream("stud.txt", FileMode.Append);
Global.sw = new StreamWriter(Global.aFile);
// Записатьданныевфайл
Global.sw.WriteLine("{0},{1},{2},{3},{4}", Global.A1.GetType(), Global.A1.Name, Global.A1.Age,
Global.A1.Ball,Global.A1.Group);
Global.sw.WriteLine("{0},{1},{2},{3},{4}", Global.A2.GetType(), Global.A2.Name, Global.A2.Age,
Global.A2.Ball, Global.A2.Group);
Global.sw.WriteLine("{0},{1},{2},{3},{4},{5}", Global.B1.GetType(), Global.B1.Name, Global.B1.Age,
Global.B1.Ball, Global.B1.Group,Global.B1.Place);
Global.sw.WriteLine("{0},{1},{2},{3},{4},{5}", Global.B2.GetType(), Global.B2.Name, Global.B2.Age,
Global.B2.Ball, Global.B2.Group,Global.B2.Place);
Global.sw.Close();
Код чтения объектов из файла:
stringlin,ob;
char[] separator = new char[] { ',' };
string[] slov = new string[6];
Global.aFile = new FileStream("stud.txt", FileMode.Open);
Global.sr = new StreamReader(Global.aFile);
Global.A1 = new stud();
Global.A2 = new stud();
Global.B1 = new grad_stud();
Global.B2 = new grad_stud();
lin = Global.sr.ReadLine();
slov = lin.Split(separator);
ob=slov[0];
if (ob == ("WindowsFormsApplication2.stud"))
{Global.A1.Name=slov[1];
Global.A1.Age=Convert.ToInt32(slov[2]);
Global.A1.Ball=Convert.ToInt32(slov[3]);
Global.A1.Group=Convert.ToInt32(slov[4]);
}
lin = Global.sr.ReadLine();
slov = lin.Split(separator);
Global.A2.Name=slov[1];
Global.A2.Age=Convert.ToInt32(slov[2]);
Global.A2.Ball=Convert.ToInt32(slov[3]);
Global.A2.Group=Convert.ToInt32(slov[4]);
lin = Global.sr.ReadLine();
slov = lin.Split(separator);
Global.B1.Name=slov[1];
Global.B1.Age=Convert.ToInt32(slov[2]);
Global.B1.Ball=Convert.ToInt32(slov[3]);
Global.B1.Group=Convert.ToInt32(slov[4]);
Global.B1.Place=slov[5];
lin = Global.sr.ReadLine();
slov = lin.Split(separator);
Global.B2.Name=slov[1];
Global.B2.Age=Convert.ToInt32(slov[2]);
Global.B2.Ball=Convert.ToInt32(slov[3]);
Global.B2.Group=Convert.ToInt32(slov[4]);
Global.B2.Place=slov[5];
Global.sr.Close();
