Демонстрация иерархии классов
Реализация абстрактных методов демонстрации иерархии классов: постановка задачи, имитирующей жизнь двух племен муравьев, создание класса-родителя "муравей", определяющего методы и свойства, которые унаследуют потомки. Программное и аппаратное обеспечение.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.03.2012 |
Размер файла | 630,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
- Содержание
- 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. Реализация
Иерархия классов
Размещено на http://www.allbest.ru/
Рис. 4. Иерархия классов
Описание данных
В программе используются следующие классы
Абстрактный класс-родитель
public abstract class Ant
{
//дни жизни муравья
protected int days;
//конструктор
public Ant(Random rnd_1)
//свойство поля int days
public int Days
//отсчет до дня смерти муравья
public int DayPass()
//основная функция каждого вида муравья
public abstract int Doo();
}
«Личинка»
class Larva: Ant
{
//для личинок поле days указывает время через которое вылупится
муравей
//конструктор
public Larva(Random rnd_1): base(rnd_1)
//переопределение родительского метода
public override int Doo()
}
«Муравей - рабочий»
class Worker: Ant
{
//конструктор
public Worker(Random rnd_1): base(rnd_1)
//вклад муравья в запасы муравейника
public override int Doo()
}
«Муравей - воин»
class Soldier: Ant
{
//конструктор
public Soldier(Random rnd_1): base(rnd_1)
//каждый муравей-воин вносит вклад в общую победу
public override int Doo()
}
«Матка»
class Female: Ant
{
//конструктор
public Female(Random rnd_1):base (rnd_1)
//кол-во новорожденных личинок
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 rnd_1)
//добавление в муравейник 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 rnd_1)
{
rnd = rnd_1;
}
//свойство поля 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 rnd_1): base(rnd_1)
{
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 rnd_1): base(rnd_1)
{
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 rnd_1):base (rnd_1)
{
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 rnd_1): base(rnd_1)
{
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("\n\n\n");
i++;
inkognito
Размещено на Allbest.ru
Подобные документы
Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.
курсовая работа [3,3 M], добавлен 18.03.2011Классы и свойства объектно-ориентированного пространства. Методика создания новых классов в delphi: выбор родительского класса, изменение существующих компонентов, создание подклассов для элементов управления windows. Создание новой ветви классов.
контрольная работа [13,0 K], добавлен 07.07.2012Ознакомление с программой проведения сборки компьютера из деталей, имеющихся в базе данных. Рассмотрение правил создания иерархии классов. Описание основных методов и пользовательского интерфейса. Изучение системных требований и текстов основных классов.
курсовая работа [710,2 K], добавлен 26.07.2014Общие и отличительные черты объектов, связь между ними. Принципы организации иерархии и понятия объектно-ориентированной парадигмы программирования. Анализ предметной области, определение абстрактных типов данных, проектирование классов и коллекций.
курсовая работа [2,1 M], добавлен 11.03.2016Разработка иерархии классов, содержащей не менее трех уровней. Определение базовых и производных классов. Анализ технического задания. Проектирование структуры программы и базовых алгоритмов. Программная реализация разработанной структуры и алгоритмов.
курсовая работа [34,9 K], добавлен 11.01.2011Проектирование программного продукта для использования в организации учета медикаментов в аптеке. Построение функциональной модели автоматизированной системы; разработка и тестирование иерархии классов в соответствии с объектно-ориентированным подходом.
курсовая работа [1,5 M], добавлен 21.02.2013Принципы написания консольных приложений на языке Java в среде Eclipse. Составление программы завтрака на основе списка продуктов, передаваемых в качестве параметров в командной строке. Создание пакета для классов, интерфейса, базового класса иерархии.
лабораторная работа [1,2 M], добавлен 01.05.2014Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.
дипломная работа [1,0 M], добавлен 09.08.2016Описание классов данных. Основное меню программы. Добавление и удаление объектов. Вывод устройств хранения в указанном ПК. Устройство хранения, класс ноутбук, класс жёсткий диск, класс персональный компьютер, класс планшет и класс Flash-память.
курсовая работа [1,8 M], добавлен 30.03.2014Решение системы линейных алгебраических уравнений методом Гаусса с выборкой ведущего элемента. Изучение особенности программной реализации алгоритма, составленной средствами разработки Microsoft Visual Studio. Проведение сложения и умножения двух матриц.
курсовая работа [702,6 K], добавлен 22.03.2015