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

Реализация абстрактных методов демонстрации иерархии классов: постановка задачи, имитирующей жизнь двух племен муравьев, создание класса-родителя "муравей", определяющего методы и свойства, которые унаследуют потомки. Программное и аппаратное обеспечение.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.