Демонстрация иерархии классов

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость новой

Детальная информация о работе

Выдержка из работы

  • Содержание
  • 1. Постановка задачи
  • 2. Анализ задачи
  • 3. Средства реализации
  • 4. Требования к аппаратному и программному обеспечению
  • 5. Интерфейс пользователя
  • 6. Реализация. Иерархия классов. Описание данных
  • 7. Тестирование
  • Заключение
  • Список используемой литературы

Приложение. Листинг программы

1. Постановка задачи

Реализовать программу, демонстрирующую:

Иерархию классов.

Работу с этой иерархией на основе задачи, имитирующей жизнь двух племен муравьев.

2. Анализ задачи

Для решения данной задачи необходимо создать абстрактный класс-родитель «муравей», определяющий методы и свойства, которые унаследуют потомки. Далее, в зависимости от того какую функцию выполняет тот или иной наследник — «муравей», реализация абстрактных методов будет различной. В данном случае понадобится 4 вида муравьев: «муравей-рабочий», «муравей-воин», «матка», «личинка». Класс «личинка» специфичен тем, что по истечении некоторого времени экземпляр этого класса преобразуются в один из видов «муравьев».

Для удобства работы с «племенем муравьев», как структурной единицей, создается класс-контейнер, содержащий массив и набор методов для имитации жизни муравейника.

3. Средства реализации

Данная программа реализована в визуальной среде программирования Visual Studio на языке C+ в графическом режиме. Выбор этот обусловлен тем, что в данном языке присутствуют все необходимые средства для реализации задачи, а так же требованиями учебной дисциплины «Объектно-ориентированные технологии».

4. Требования к аппаратному и программному обеспечению

В качестве аппаратной среды используются ПК типа IBM PC. Системные требования:

процессор Pentium 1000 МГц,

оперативная память 128 Mb,

видеокарта с разрешением 800Ч600,

операционная система Windows 2000/XP/Vista/7,

клавиатура, мышь,

размеры свободного дискового пространства зависят от размера обрабатываемых файлов.

5. Интерфейс пользователя

При запуске программы пользователь видит главную форму программы, которая содержит две кнопки Запустить и Остановить, а также компонент TextBox для вывода информации о муравейниках на экран. Также на форме присутствует невизуальный компонент типа Timer (рис. 1):

Рис. 1. Главная форма программы

Для запуска процесса имитации пользователь нажимает на кнопку Запустить. В этот момент запускается таймер, у которого срабатывает событие Tick. В теле обработки события информация по обоим племенам выводится в TextBox. Каждый Tick таймера это отдельный день имитации (рис. 2):

Рис. 2. Начало процесса имитации

Жизнь в муравейнике будет продолжаться до тех пор, пока в каждом из племен есть хотя бы один муравей, либо можно нажать кнопку Остановить (рис. 2), программа приостановится и пользователь, например, сможет более детально изучить результаты работы программы (рис. 3):

Рис. 3. Приостановка программы

6. Реализация

Иерархия классов

/

Рис. 4. Иерархия классов

Описание данных

В программе используются следующие классы

Абстрактный класс-родитель

public abstract class Ant

{

//дни жизни муравья

protected int days;

//конструктор

public Ant (Random rnd1)

//свойство поля int days

public int Days

//отсчет до дня смерти муравья

public int DayPass ()

//основная функция каждого вида муравья

public abstract int Doo ();

}

«Личинка»

class Larva: Ant

{

//для личинок поле days указывает время через которое вылупится

муравей

//конструктор

public Larva (Random rnd1): base (rnd1)

//переопределение родительского метода

public override int Doo ()

}

«Муравей — рабочий»

class Worker: Ant

{

//конструктор

public Worker (Random rnd1): base (rnd1)

//вклад муравья в запасы муравейника

public override int Doo ()

}

«Муравей — воин»

class Soldier: Ant

{

//конструктор

public Soldier (Random rnd1): base (rnd1)

//каждый муравей-воин вносит вклад в общую победу

public override int Doo ()

}

«Матка»

class Female: Ant

{

//конструктор

public Female (Random rnd1): base (rnd1)

//кол-во новорожденных личинок

public override int Doo ()

}

Класс — контейнер для муравьев

class Ants

{

//список муравьев

List< Ant> m_ants;

//список названий всех видов для более компактного рандомного

создания m_ants

List< string> m_types;

//наличие матки в муравейнике

bool m_female;

//порядковый номер матки в списке m_ants

int m_female_number;

//запасы муравейника

int m_provisions;

//read-only свойство поля m_provisions

public int Provisions

//read-only свойство кол-ва муравьев

public int Count

//конструктор

public Ants (Random rnd1)

//добавление в муравейник n муравьев случайного вида

private void AddAnts (int n)

//бой, на выходе общее число очков, заработанных кажыдй муравьем

public int Fight ()

//проверка оставшегося кол-ва дней для каждого муравья

public int DayPass (out int dead)

//запасы провиантом

public int Work ()

//рождение новых личинок маткой

public int NewAnts ()

//удаление n из списка муравьв, героически погибших в бою с другим муравейником

public void KillAnts (int n)

}

7. Тестирование

Так как мы используем TextBox для вывода процесса жизни муравьев, то у пользователя может возникнуть желание изменить данные в результирующем поле (рис. 5).

Рис. 5. Предотвращение ввода пользователем в результирующее поле

абстрактный демонстрация иерархия класс

Заключение

В результате проделанной работы была реализована программа, демонстрирующая:

Иерархию классов

Работу с этой иерархией на основе задачи, имитирующей жизнь двух племен муравьев

Приложение

Листинг программы

Модуль Ant. cs:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Task2

{

//абстрактный класс-родитель

public abstract class Ant

{

//дни жизни муравья

protected int days;

protected Random rnd;

//конструктор

public Ant (Random rnd1)

{

rnd = rnd1;

}

//свойство поля int days

public int Days

{

get

{

return days;

}

}

//отсчет до дня смерти муравья

public int DayPass ()

{

days--;

if (days == 0) return 1;

else return 0;

}

//основная функция каждого вида муравья

public abstract int Doo ();

}

}

Модуль Worker. cs:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Task2

{

//муравей-рабочий

class Worker: Ant

{

//конструктор

public Worker (Random rnd1): base (rnd1)

{

days = rnd. Next (5, 15);

}

//вклад муравья в запасы муравейника

public override int Doo ()

{

return rnd. Next (20, 60);

}

}

}

Модуль Larva. cs:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Task2

{

//личинка муравья

class Larva: Ant

{

//для личинок поле days указывает время через которое вылупится

муравей

//конструктор

public Larva (Random rnd1): base (rnd1)

{

days = 2;

}

//переопределение родительского метода

public override int Doo ()

{ return 0; }

}

}

Модуль Female. cs:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Task2

{

//муравьиная матка

class Female: Ant

{

//конструктор

public Female (Random rnd1): base (rnd1)

{

days = rnd. Next (7, 19);

}

//кол-во новорожденных личинок

public override int Doo ()

{

return rnd. Next (2, 20);

}

}

}

Модуль Soldier. cs:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Task2

{

//муравей-воин

class Soldier: Ant

{

//конструктор

public Soldier (Random rnd1): base (rnd1)

{

days = rnd. Next (4, 11);

}

//каждый муравей-воин вносит вклад в общую победу

public override int Doo ()

{

return rnd. Next (1, 10);

}

}

}

Модуль главной формы:

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace Task2

{

public partial class AntForm: Form

{

static Random rnd=new Random ();

//создание двух экземпляров абстрактного класса

Ants Red = new Ants (rnd);

Ants Black = new Ants (rnd);

int i = 1;

public AntForm ()

{

InitializeComponent ();

}

private void btnStart_Click (object sender, EventArgs e)

{

timer1. Start ();

}

private void btnStop_Click (object sender, EventArgs e)

{

timer1. Stop ();

}

//обработка события Tick компонента Timer

private void timer1_Tick (object sender, EventArgs e)

{

textMemo. AppendText («Наступил «+ i + «деньn»);

textMemo. AppendText («Сегодня в муравейнике Красных- «+

Red. Count. ToString () + «; Черных- «+ Black. Count. ToString () + «n»);

textMemo. AppendText («Закрома увеличились у Красных на- «+

Red. Work (). ToString () + «; у Черных- «+ Black. Work (). ToString () + «n»);

textMemo. AppendText («Общее кол-во припасов у Красных- «+

Red. Provisions. ToString () + «; у Черных- «+ Black. Provisions. ToString () +

«n»);

int r = Red. Fight ();

int b = Black. Fight ();

int deadsRed = 0;

int deadsBlack = 0;

//в зависимости от разницы r и b, в каждом муравейнике

//погибнет определенное кол-во муравьев

if (r > b)

{

double f = r — b;

double k = f / (10 * Red. Count — Black. Count);

deadsBlack = (int)(2*k * Black. Count);

Black. KillAnts (deadsBlack);

double d = 0.5 * k;

deadsRed = (int)(k * Red. Count);

Red. KillAnts (deadsRed);

}

else

{

double f = b — r;

double k = f / (10 * Black. Count — Red. Count);

deadsRed = (int)(2*k * Red. Count);

Red. KillAnts (deadsRed);

double d = 0.5 * k;

deadsBlack = (int)(k * Black. Count);

Black. KillAnts (deadsBlack);

}

textMemo. AppendText («Стычка двух племен закочилась потерями у

Красных- «+ deadsRed. ToString () + «муравьев; у Черных- «+

deadsBlack. ToString () + «n»);

textMemo. AppendText («Муравьев вылупилось из личинок у Красных- «

+ Red. DayPass (out deadsRed). ToString () + «; у Черных- «+

Black. DayPass (out deadsBlack). ToString () + «n»);

textMemo. AppendText («Умерло собственной смертью у Красных» +

deadsRed. ToString () + «; у Черных- «+ deadsBlack. ToString () + «n»);

textMemo. AppendText («Родилось новых личинок у Красных- «+

Red. NewAnts (). ToString () + «; у Черных- «+ Black. NewAnts (). ToString ()

+ «n»);

textMemo. AppendText («nnn»);

i++;

inkognito

Показать Свернуть
Заполнить форму текущей работой