Моделирование структуры сказки "Заюшкина избушка"

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


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

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

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН

Восточно-Казахстанский государственный технический

университет им. Д. Серикбаева

Факультет информационных технологий и энергетики

Кафедра математического и компьютерного моделирования

Курсовая работа

по объектно-ориентированному программированию на языке с++

ТЕМА: МОДЕЛИРОВАНИЯ СТРУКТУРЫ СКАЗКИ «ЗАЮШКИНА ИЗБУШКА»

Проверил: Бакланова О. Е.

Выполнил: Кабулова А. А

г. Усть-Каменогорск

2010 год

Содержание

Введение

1. Аналитическая часть

1.1 Анализ и описание предметной области проекта

1.2 Основные понятия и концепция, используемые в курсовой работе

1.2.1 Объекты и классы

1.2.2 Атрибуты объектов

1.2.3 Операции и методы

1.2.4 Зависимости между классами (объектами)

1.2.5 Агрегация

1.2.6 Обобщение и наследование

1.3 Разработка объектной модели

1.3.1 Графическое изображение объектной модели

2. Реализация объектной модели на языке программирования С++

2.1 Реализация класса

2.2.1 Порождение объектов

2.2.2 Использование конструктора и деструктора

2.2.3 Использование простого и множественного наследования

3. Итоговый код программы

4. Результат работы программы

Заключение

Список литературы

Введение

Основной целью этой курсовой работы является практическое освоение методики проектирования программных комплексов на базе объектно-ориентированного подхода.

Объектно-ориентированный подход основан на систематическом использовании моделей для языково-независимой разработки программной системы. В формулировке цели проекта участвуют предметы и понятия реального мира, имеющие отношение к разрабатываемой программной системе. При объектно-ориентированном подходе эти предметы и понятия заменяются их моделями, т. е. определенными формальными конструкциями, представляющими их в программной системе.

Модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой программной системы. Тем самым модель «беднее», а, следовательно, проще представляемого ею предмета (понятия). Но главное даже не в этом, а в том, что модель есть формальная конструкция: формальный характер моделей позволяет определить формальные зависимости между ними и формальные операции над ними. Это упрощает как разработку и изучение моделей, так и их реализацию на компьютере. В частности, формальный характер моделей позволяет получить формальную модель разрабатываемой программной системы как композицию формальных моделей ее компонентов. Таким образом, объектно-ориентированный подход помогает справиться с такими сложными проблемами, как:

— уменьшение сложности программного обеспечения;

— повышение надежности программного обеспечения;

— обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

— обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.

1. АНАЛИТИЧЕСКАЯ ЧАСТЬ

1.1 Анализ и описание предметной области проекта

Жили-били лиса и заяц. У лисы была избушка ледяная, а у зайца- лубяная. Пришла весна-красна- у лисы избушка растаяла, а у зайца стоит по- старому.

Вот лиса и попросилась у него переночевать, да его из избушки и выгнала.

Идет зайчик, плачет.

Ему навстречу собака: «Тяф, тяф, тяф! Что, зайчик, плачешь?» — «Как мне не плакать? Была у меня избушка лубяная, а у лисы ледяная, попросилась она мне ночевать, да и выгнала».- «не плачь, зайчик! Я твоему горю помогу».

Подошли они к избушке. Собака забрехала: «Тяф, тяф, тяф! Поди, лиса, вон!» А лиса им с печки: «Как выскочу, как выпрыгну, пойдут клочки по закоулочкам!» Собака испугалась и убежала.

Зайчик опять идёт, плачет. Ему навстречу медведь: «О чём, зайчик, плачешь?" — «Как мне не плакать? Была у меня избушка лубяная, а у лисы ледяная, попросилась она у меня ночевать, да и выгнала». — «Не плачь, я твоему горю помогу».

Подошли они к избушке. Медведь как зарычит: «Поди, лиса, вон!» А лиса им с печи: «Как выскочу, как выпрыгну, пойдут клочки по закоулочкам!» Медведь испугался и убежал.

Идёт опять зайчик, плачет пуще прежнего. Ему навстречу петух: «Ку- ка- ре- ку! О чём, зайчик, плачешь?» — «Как мне не плакать? Была у меня избушка лубяная, а у лисы ледяная, попросилась она у меня ночевать, да меня и выгнала».- «Пойдём, я твоему горю помогу».- «нет, выгоню!» Подошли они к избушке. Петух сапогами затопал, крыльями захлопал: «Ку-ка- ре-ку! Несу косу не на плечи, хочу лису посечи. Ступай, лиса, вон!»

Лиса услыхала, испугалась и говорит: «Обуваюсь…"Петух опять: «Ку-ка-ре-ку! Несу косу на плечи, хочу лиса посечи. Ступай, лиса, вон!» Лиса выскочила из избушки и убежала в лес. И стал зайчик опять жить- поживать в лубяной избушке.

1.2 Основные понятия и концепция, используемые в курсовой работе

1.2.1 Объекты и классы

Объектная модель описывает структуру объектов, составляющих систему, их атрибуты, операции, взаимосвязи с другими объектами. В объектной модели должны быть отражены те понятия и объекты реального мира, которые важны для разрабатываемой системы. В объектной модели представлены, прежде всего, практические аспекты разрабатываемой системы, что выражается в использовании терминологии прикладной области, связанной с разрабатываемой системой.

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

— понимание прикладной задачи (проблемы);

— введение основы для реализации на компьютере.

Цель разработки объектной модели — описать объекты, составляющие в совокупности проектируемую систему, а также выявить и указать различные зависимости между объектами.

Рисунок 1. Пример класса и объекта этого класса

Объединение объектов в классы позволяет ввести в задачу абстракцию и рассмотреть ее в более общей постановке. Класс имеет имя, которое относится ко всем объектам этого класса. Кроме того, в классе вводятся имена атрибутов, которые определены для объектов.

1.2.2 Атрибуты объектов

Атрибут — это значение, характеризующее объект в его классе. Примерами атрибутов являются:

— характеристика, место проживания (атрибуты объектов класса Лиса);

Среди атрибутов различаются постоянные атрибуты (константы) и переменные атрибуты. Постоянные атрибуты характеризуют объект в его классе (например, характеристика, место проживания и т. п.). Текущие значения переменных атрибутов характеризуют текущее состояние объекта; изменяя значения этих атрибутов, мы изменяем состояние объекта.

Атрибуты перечисляются во второй части прямоугольника, изображающего класс (см. рисунок 1). Иногда указывается тип атрибутов (каждый атрибут — это некоторое значение) и начальное значение переменных атрибутов (совокупность начальных значений этих атрибутов задает начальное состояние объекта).

Следует отметить, что, говоря об объектах и их классах, не подразумевают никакого объектно-ориентированного языка программирования. Это, в частности, выражается в том, что на данном этапе разработки программной системы следует рассматривать только такие атрибуты, которые имеют смысл в реальности.

1.2.3 Операции и методы

Операция — это функция (или преобразование), которую можно применять к объектам данного класса. Примерами операций являются (для объектов класса Лиса) выгоняет зайчика из своей избушки, собаку и медведя выгоняет, боится петуха (см. рисунок 1).

Все объекты данного класса используют один и тот же экземпляр каждой операции (т.е. увеличение количества объектов некоторого класса не приводит к увеличению количества загруженного программного кода). Объект, из которого вызвана операция, передается ей в качестве ее неявного аргумента (параметра).

Одна и та же операция может, вообще говоря, применяться к объектам разных классов: такая операция называется полиморфной, так как она может иметь разные формы для разных классов.

Каждой операции соответствует метод — реализация этой операции для объектов данного класса. Таким образом, операция — это спецификация метода, метод — реализация операции. Например, в классе файл может быть определена операция печать (print). Эта операция может быть реализована разными методами: (а) печать двоичного файла; (б) печать текстового файла и др. Логически эти методы выполняют одну и ту же операцию, хотя реализуются они разными фрагментами кода.

Каждая операция имеет один неявный аргумент — объект, к которому она применяется. Кроме того, операция может иметь и другие аргументы (параметры). Эти дополнительные аргументы параметризуют операцию, но не связаны с выбором метода. Метод связан только с классом и объектом (некоторые объектно-ориентированные языки, например Cи++, допускают одну и ту же операцию с разным числом аргументов, причем используя то или иное число аргументов, мы практически выбираем один из методов, связанных с такой операцией; на этапе предварительного проектирования системы удобнее считать эти операции различными, давая им разные имена, чтобы не усложнять проектирование).

Операция (и реализующие ее методы) определяется своей сигнатурой, которая включает, помимо имени операции, типы (классы) всех ее аргументов и тип (класс) результата (возвращаемого значения). Все методы, реализующие операцию должны иметь такую же сигнатуру, что и реализуемая ими операция.

Операции перечисляются в третьей части прямоугольника (см. рисунок 1), описывающего класс. В графическом языке технологии OMT тип любого объекта данных указывается вслед за именем этого объекта после двоеточия.

1.2.4 Зависимости между классами (объектами)

С каждым объектом связана структура данных, полями которой являются атрибуты этого объекта и указатели функций (фрагментов кода), реализующих операции этого объекта. Таким образом, объект — это некоторая структура данных, тип которой соответствует классу этого объекта.

Между объектами можно устанавливать зависимости по данным. Эти зависимости выражают связи или отношения между классами указанных объектов. В языке программирования Си++ зависимости между классами (объектами) реализуются с помощью ссылок (указателей) из одного класса (объекта) на другой. Представление зависимостей с помощью ссылок обнаруживает тот факт, что зависимость является свойством пары классов, а не какого-либо одного из них, т. е. зависимость — это отношение.

1.2.5 Агрегация

Агрегация — это зависимость между классом составных объектов и классами, представляющими компоненты этих объектов (отношение «целое"-"часть»). Агрегация обозначается ромбиком.

Наиболее важным свойством отношения агрегации является его транзитивность (если A есть часть B, а B есть часть C, то A есть часть C). Легко видеть, что отношение агрегации антисимметрично (если A есть часть B, то B не есть часть A). Отметим также, что часть свойств целого может быть перенесена и на его части, возможно, с несущественными изменениями (например, контекст каждого оператора некоторой функции совпадает с внутренним контекстом всей функции).

1.2.6 Обобщение и наследование

Обобщение и наследование позволяют выявить аналогии между различными классами объектов, определяют многоуровневую классификацию объектов.

Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса.

На схемах обобщение (наследование) изображается треугольником. Треугольник следует ставить даже в том случае, когда суперкласс имеет всего один подкласс. Слово «размерность» является дискриминатором.

Дискриминатор — это атрибут, показывающий, по какому из свойств объектов сделано данное обобщение.

Во время практического проектирования систем, следует избегать обширных многоуровневых классификаций, так как поведение подклассов низших уровней многоуровневой классификации бывает трудно понять, потому что большая часть (или все) атрибутов и операций таких классов определена в их суперклассах верхних уровней.

Если количество уровней классификации стало непомерно большим, нужно слегка изменить структурирование системы. Чтобы понять, какое число уровней является непомерно большим, можно руководствоваться следующими оценками: два-три уровня наследования, как правило, приемлемы всегда, а десятиуровневая классификация почти всегда неприемлема, наконец пять-шесть уровней, как правило, достаточны для программистов.

Обобщение и наследование широко применяются не только при анализе требований к программным системам и их предварительном проектировании, но и при их реализации.

Если в подклассе необходимо переопределить операцию, определенную в одном из его суперклассов, то операция, которая может быть получена из суперкласса в результате наследования, определяется и в подклассе. Повторное определение «заслоняет» ее определение в суперклассе, так что в подклассе применяется не унаследованная, а переопределенная в нем операция. Так как каждая операция определяется своей сигнатурой, следовательно, сигнатура переопределения операции должна совпадать с сигнатурой операции из суперкласса, которая переопределяется данной операцией.

1.3 Разработка объектной модели

1.3.1 Графическое изображение объектной модели

У лисы была избушка ледяная, а у зайца лубяная. Пришла весна и у лисы избушка растаяла, а у зайца стоит по- старому. Лиса попросилась у него переночевать, и его из избушки выгнала. Идет зайчик, встречает собаку и медведя. Они попытается помочь, но они боится лисы. Вдруг ему навстречу храбрый петух идет, и он выгоняет лису.

Основные классы:

· Лиса

· Зайчик

· Собака

· Медведь

· Петух

Рисунок 2. Полное представление объекта

Модель взаимодействия объектов.

Рисунок 3. Зависимости между классами

2. Реализация объектной модели на языке программирования С++

2.1 Реализация класса

2.2.1 Порождение объектов

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

Класс лиса

class lisa

{

public:

lisa (char *, char *, char *, char *);

void show_lisa (void);

private:

static int uroven_igry;

char name [64];

char harakter [64];

char obraz [64];

char mestozhitelstvo [64];

};

2.2.2 Использование конструктора и деструктора

Конструктор представляет собой специальную функцию, которую C++ автоматически, вызывает каждый раз при создании объекта. Обычное назначение конструктора заключается в инициализации элементов данных объекта. Конструктор имеет такое же имя, как и класс.

Многие объекты могут распределять память для хранения информации; когда вы уничтожаете такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта. Деструктор имеет такое же имя, как и класс, за исключением того, что вы должны предварять его имя символом тильды (~). Деструктор не имеет возвращаемого значения.

Пример конструктора и деструктора

class lisa//объявление класса

{

public: //открытые элементы

lisa (char*, char*, char*); // прототип конструктора

~lisa (); // прототип деструктора

void show_lisa (void);

private: //закрытые элементы

char harakter[64]; // элемент — деятельность

char obraz[64]; // элемент — образ

char mesto[64]; //элемент — место

};

/******** КОНСТРУКТОР *********/

lisa: :lisa (char* harakter, char* obraz, char* mesto, mesto)

{

strcpy (lisa: :harakter, harakter);

strcpy (lisa: :obraz, obraz);

strcpy (lisa: :mesto, mesto);

}

/********* ДЕСТРУКТОР **********/

}

lisa: :~lisa ();

2.2.3 Использование простого и множественного наследования

Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса.

Пример простого наследования

При множественном наследовании производный класс получает атрибуты двух или более классов. При использовании множественного наследования для порождения класса конструктор производного класса должен вызвать конструкторы всех базовых классов.

Пример множественного наследования

class lisa{ //объявление класса

public: //открытые элементы

lisa (char *, char*, char*, char*);

void show_lisa (void);

protected: //защищенные элементы

static int uroven_igry; // статический элемент — уровень игры

char name[64]; // имя игрока

char harakter[64]; // элемент — деятельность игрока

char obraz[64]; // элемент — образ игрока

char missia[64]; // элемент — миссия игрока

};

lisa: :lisa (char *name, char *harakter, char *obraz, char *missia)

{

strcpy (lisa: :name, name);

strcpy (lisa: :harakter, harakter);

strcpy (lisa: :obraz, obraz);

strcpy (lisa: :missia, missia);

lisa: :uroven_igry=uroven_igry;}

void lisa: :show_lisa (void) // вывод необходимых данных

{

cout < <"Введите имя игрока: «; //ввод необходимых данных

cin> >name;

cout< <"Его деятельность: «;

cin> >harakter;

cout< <"Образ игрока: «;

cin> >obraz;

cout< <"Миссия Лисы «< <name<<»: «< <missia<<endl;

cout< <"Уровень игры: «< <uroven_igry<<endl;

}

int lisa: :uroven_igry=2;

class helpers: public lisa { // порожденный класс helpers из базового класса lisa

public:

helpers (char *, char *, char *, char *, char *, int);

void show_helpers (void);

private:

char drug[64]; // друг игрока

int luk; // количество оружии

};

helpers: :helpers (char *mesto, char *harakter,

char *obraz, char *missia,

char *drug, int luk): lisa (mesto, harakter, obraz, missia)

{

strcpy (helpers: :drug, drug);

helpers: :luk=luk;

}

void helpers: :show_helpers ()

{

show_lisa ();

3. Итоговый код программы

программный конструктор наследование деструктор

#include < iostream>

#include < string. h>

#include < clocale>

using namespace std;

class lisa { //объявление класса лиса

public: //открытые элементы

lisa (char *, char *, char *, char *);

void show_lisa (void);

private: //закрытые элементы

static int uroven_igry; // статический элемент- уровень игры

char name[64]; // имя игрока

char harakter[64]; // деятельность игрока

char obraz[64]; // образ игрока

char missia[64]; // миссия игрока

};

lisa: :lisa (char *name, char *harakter, char *obraz, char *missia) //конструктор

{

strcpy (lisa: :name, name);

strcpy (lisa: :harakter, harakter);

strcpy (lisa: :obraz, obraz);

strcpy (lisa: :missia, missia);

lisa: :uroven_igry=uroven_igry;

}

void lisa: :show_lisa ()//вывод необходимых данных

{

cout < <"Введите имя игрока: «; //ввод необходимых данных

cin> >name;

cout< <"Его деятельность: «;

cin> >harakter;

cout< <"Образ игрока: «;

cin> >obraz;

cout< <"Миссия: «< <missia<<endl;

cout< <"Уровень игры: «< <uroven_igry<<endl;

}

int lisa: :uroven_igry=2;

class helpers { //объявление класса helpers

public: //открытые элементы

helpers (char *, int);

void show_helpers (void);

private: //закрытые элементы

char drug[64]; // элемент-друг

int luk; // его оружие

};

helpers: :helpers (char *drug, int luk)

{

strcpy (helpers: :drug, drug);

helpers: :luk=luk;

}

void helpers: :show_helpers (void)

{

cout< <"Ваш враг, который обманывает гео всю игру «< <drug<<endl;

cout< <"его оружие: «< <luk<<» лук"< <endl;

}

// Класс komanda образованный от двух базовых классав lisa и // helpers

class komanda: public lisa, public helpers {

public:

komanda (char *, int, char *,//дополнительные элементы класса komanda

char *, char *, char *, char *, //элементы класса lisa

char *, int); //элементы класса helpers

void show_komanda ();

private:

char nazvanie[64]; //название команды

int uchastniki; //число участников команды

char lozung[64]; // лозунг команды

};

komanda: :komanda (char *nazvanie, int uchastniki, char *lozung,

char *name, char *harakter, char *obraz, char *missia,

char *drug, int luk):

lisa (name, harakter, obraz, missia),

helpers (drug, luk)

{

strcpy (komanda: :nazvanie, nazvanie);

komanda: :uchastniki=uchastniki;

strcpy (komanda: :lozung, lozung);

}

void komanda: :show_komanda ()

{

cout< <"Введите название команды: «;

cin> >nazvanie;

cout< <"Количество участников команды: «< <uchastniki<<endl;

cout< <"Лозунг команды: «;

cin> >lozung;

show_helpers ();

show_lisa ();

}

int main ()

{

setlocale (LC_ALL, «rus»);

cout< <"Добро пожаловать в игру Лисичка! n";

cout< <"Введите все буквы английским шрифтом. «<<endl;

komanda my_kom («„, 9,“»,

«„,“»,"","Обманывать зайчику",

«Петух», 100);

cout < <"Твоя команда: «;

my_kom. show_komanda ();

komanda vrag_kom («„, 10,“»,

«„,“»,"","Вернуть свою избушку",

«Собака», 80);

cout < <"nКоманда противника: «;

vrag_kom. show_komanda ();

system («pause»);

}

4. Результат работы программы

Заключение

При работе над этой курсовой работой мы на практике освоили методику проектирования программных комплексов на базе объектно-ориентированного программирования. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.

Мы провели анализ выбранной предметной области. Теоретически описали понятия объект, класс, методы конструктор и деструктор, наследование простое и множественное, прилагая к ним примеры из своих программ. Графически изобразили объектную модель, установили связи между объектами и классами. Также описали реализацию объектной модели на языке С++ и оформили результаты работы в виде исходного кода С++ в пояснительной записке. Мы думаем, что мы достигли поставленной цели и получили навыки проектирования программных комплексов на базе объектно-ориентированного программирования.

Список литературы

1. Волнин, В. А. Стандартизация разработки программных средств [Текст] / В. А. Волнин. — М.: Финансы и статистика, 2005.

2. Гамма, Э. Приемы объектно-ориентированного программирования. Паттерны проектирования [Текст] / Э. Гамма, Р. Хелм, В. Джонсон. — СПб.: Питер, 2006.

3. Джамса, К. Учимся программировать на С++ [Текст] / К. Джамса. — М.: Мир, 2001.

4. Иванов, Г. С. Объектно-ориентированное программирование [Текст] / Г. С. Иванов. — М.: МГТУ им. Баумана, 2003.

5. Керниган, Б. Язык программирования СИ [Текст] / Б. Керниган, Д. Ритчи. — М.: Вильямс, 2006.

6. Маклаков, С. В. Анализ данных. Генератор ответов Crystal Reports [Текст] / С. В. Маклаков. — СПб.: БХВ, 2003.

7. Одинцов, И. Профессиональное программирование. Системный подход [Текст] / И. Одинцов. — СПб.: БХВ, 2004.

8. Павловская, Т. А. Языки программирования С, С++ [Текст] / Т. А. Павловская. — СПб.: Питер, 2005.

9. Пери, Г. Самоучитель программирования [Текст] / Г. Пери. — СПб.: Питер, 2002.

10. Петров, В. Н. Информационные системы [Текст] / В. Н. Петров. — СПб.: Питер, 2003.

11. Фаронов, В. В. Delphi. Программирование на языке высокого уровня [Текст]: учебник для вузов / В. В. Фаронов — СПб.: Питер, 2005.

12. Шилдт, Г. Самоучитель C++ [Текст]: Пер. с англ. — 3-е изд., перераб. и доп. / Г. Шилдт — СПб.: Питер, 2005.

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