Автор: Пользователь скрыл имя, 19 Февраля 2013 в 16:09, курсовая работа
Основной целью этой курсовой работы является практическое освоение методики проектирования программных комплексов на базе объектно-ориентированного подхода.
Объектно-ориентированный подход основан на систематическом использовании моделей для языково-независимой разработки программной системы. В формулировке цели проекта участвуют предметы и понятия реального мира, имеющие отношение к разрабатываемой программной системе. При объектно-ориентированном подходе эти предметы и понятия заменяются их моделями, т.е. определенными формальными конструкциями, представляющими их в программной системе.
Введение…………………………………………………………………………..3
1.Аналитическая часть……………………………………………....5
1.1 Анализ и описание предметной области проекта…………………………..5
1.2 Основные понятия и концепция, используемые в курсовой работе………5
1.2.1 Объекты и классы…………………………………………………………...5
1.2.2 Атрибуты объектов………………………………………………………..7
1.2.3 Операции и методы…………………………………………………………8
1.2.4 Зависимости между классами (объектами)……………………………....11
Агрегация………………………………………………………………….11
Обобщение и наследование………………………………………………12
1.3 Разработка объектной модели………………………………………………14
2 Реализация объектной модели на языке программирования С++…………………………………………….....15
2.1 Реализация класса……………………………………………………………15
2.2.1 Порождение объектов……………………………………………………..15
2.2.2 Использование конструктора и деструктора…………………………….15
2.2.3 Использование простого и множественного наследования…………….16
3. Итоговый код программы………………………………………19
4. Результат работы программы…………………………..……..22
Заключение……………………………………………………………………..23
Список литературы…………………………………………………………….24
1.2.5 Агрегация
Агрегация – это зависимость между классом составных объектов и классами, представляющими компоненты этих объектов (отношение “целое”-”часть”). Агрегация обозначается ромбиком.
Наиболее важным свойством отношения агрегации является его транзитивность (если A есть часть B, а B есть часть C, то A есть часть C). Легко видеть, что отношение агрегации антисимметрично (если A есть часть B, то B не есть часть A). Отметим также, что часть свойств целого может быть перенесена и на его части, возможно, с несущественными изменениями (например, контекст каждого оператора некоторой функции совпадает с внутренним контекстом всей функции).
1.2.6 Обобщение и наследование
Обобщение и наследование позволяют выявить аналогии между различными классами объектов, определяют многоуровневую классификацию объектов.
Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса.
На схемах обобщение (наследование) изображается треугольником. Треугольник следует ставить даже в том случае, когда суперкласс имеет всего один подкласс. Слово “размерность” является дискриминатором.
Дискриминатор – это атрибут, показывающий, по какому из свойств объектов сделано данное обобщение.
Во время практического проектирования систем, следует избегать обширных многоуровневых классификаций, так как поведение подклассов низших уровней многоуровневой классификации бывает трудно понять, потому что большая часть (или все) атрибутов и операций таких классов определена в их суперклассах верхних уровней.
Если количество уровней классификации стало непомерно большим, нужно слегка изменить структурирование системы. Чтобы понять, какое число уровней является непомерно большим, можно руководствоваться следующими оценками: два-три уровня наследования, как правило, приемлемы всегда, а десятиуровневая классификация почти всегда неприемлема, наконец пять-шесть уровней, как правило, достаточны для программистов.
Обобщение и наследование широко применяются не только при анализе требований к программным системам и их предварительном проектировании, но и при их реализации.
Если в подклассе необходимо переопределить операцию, определенную в одном из его суперклассов, то операция, которая может быть получена из суперкласса в результате наследования, определяется и в подклассе. Повторное определение “заслоняет” ее определение в суперклассе, так что в подклассе применяется не унаследованная, а переопределенная в нем операция. Так как каждая операция определяется своей сигнатурой, следовательно, сигнатура переопределения операции должна совпадать с сигнатурой операции из суперкласса, которая переопределяется данной операцией.
Посмотрим на примере схему наследования классом komanda свойств от двух базовых классов aladdin и helpers:
Рисунок 3. схема наследования классом komanda свойств от двух базовых классов aladdin и helpers
Рисунок 4. Модель взаимодействия объектов.
2. Реализация объектной модели на языке программирования С++
2.1 Реализация класса
2.2.1 Порождение объектов
Реализация
прикладной программной системы, спроектированной
с помощью объектно-
Класс аладдин
class aladdin {
public:
aladdin(char *,char *,char *,char *);
void show_aladdin(void);
private:
static int uroven_igry;//
char name[64]; //
char harakter[64]; //
char obraz[64]; //
char missia[64]; //
};
2.2.2 Использование конструктора и деструктора
Конструктор представляет собой специальную функцию,которую C++ автоматически, вызывает каждый раз при создании объекта. Обычное назначение конструктора заключается в инициализации элементов данных объекта. Конструктор имеет такое же имя, как и класс.
Многие объекты могут распределять память для хранения информации; когда вы уничтожаете такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта. Деструктор имеет такое же имя, как и класс, за исключением того, что вы должны предварять его имя символом тильды (~). Деструктор не имеет возвращаемого значения.
Пример конструктора и деструктора
class aladdin //объявление класса
{
public: //открытые элементы
aladdin(char*, char*, char*);// прототип конструктора
~aladdin(); // прототип деструктора
void show_aladdin(void);
private: //закрытые элементы
char name[64]; //элемент - имя
char harakter[64]; // элемент - деятельность
char obraz[64]; // элемент - образ
};
/******** КОНСТРУКТОР *********/
aladdin::aladdin(char* name, char* harakter, char* obraz)
{
strcpy(aladdin::name,name);
strcpy(aladdin::harakter,
strcpy(aladdin::obraz,obraz);
}
/********* ДЕСТРУКТОР **********/
aladdin::~aladdin()
2.2.3 Использование простого и множественного наследования
Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса.
Пример простого наследования
class helpers:public aladdin { // порожденный класс helpers из базового класса aladdin
public:
helpers(char *, char *, char *, char *, char *, int);
void show_helpers(void);
private:
char drug[64]; // друг игрока
int apple; // количество волшебных яблок
};
helpers::helpers(char *name, char *harakter,
char *obraz, char *missia,
char *drug, int apple): aladdin(name,harakter,obraz,
{
strcpy(helpers::drug,drug);
helpers::apple=apple;
}
void helpers::show_helpers()
{
show_aladdin();
cout<<"Его друг, который помогает ему всю игру "<<drug<<endl;
cout<<"Количество яблок, которые используют как оружие: "<<apple<<" волшебных яблок"<<endl;
}
При множественном наследовании производный класс получает атрибуты двух или более классов.
При использовании множественного наследования для порождения класса конструктор производного класса должен вызвать конструкторы всех базовых классов.
Пример множественного наследования
// Класс komanda образованный
от двух базовых классав
class komanda:public aladdin, public helpers {
public:
komanda(char *, int, char *,//доподнительные элементы класса komanda
char *, char *, char *, char *,//элементы класса aladdin
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 apple):
aladdin(name, harakter, obraz, missia),
helpers(drug, apple)
{
strcpy(komanda::nazvanie,
komanda::uchastniki=
strcpy(komanda::lozung,lozung)
}
void komanda::show_komanda()
{
cout<<"Введите название команды: ";
cin>>nazvanie;
cout<<"Количество участников команды: "<<uchastniki<<endl;
cout<<"Лозунг команды: ";
cin>>lozung;
show_helpers();
show_aladdin();
}
3. Итоговый код программы
#include <iostream>
#include <string.h>
#include <clocale>
using namespace std;
class aladdin { //объявление класса аладдин
public: //открытые элементы
aladdin(char *,char *,char *,char *);
void show_aladdin(void);
private: //закрытые элементы
static int uroven_igry;//статический элемент- уровень игры
char name[64]; // имя игрока
char harakter[64]; // деятельность игрока
char obraz[64]; // образ игрока
char missia[64]; // миссия игрока
};
aladdin::aladdin(char *name, char *harakter,char *obraz, char *missia) //конструктор
{
strcpy(aladdin::name, name);
strcpy(aladdin::harakter,
strcpy(aladdin::obraz,obraz);
strcpy(aladdin::missia,missia)
aladdin::uroven_igry=uroven_
}
void aladdin::show_aladdin()//вывод необходимых данных
{
cout <<"Введите имя игрока: "; //ввод необходимых данных
cin>>name;
cout<<"Его деятельность: ";
cin>>harakter;
cout<<"Образ игрока: ";
cin>>obraz;
cout<<"Миссия: "<<missia<<endl;
cout<<"Уровень игры: "<<uroven_igry<<endl;
}
int aladdin::uroven_igry=2;
class helpers { //объявление класса helpers
public: //открытые элементы
helpers(char *,int);
void show_helpers(void);
private: //закрытые элементы
char drug[64]; // элемент-друг
int apple; // количество волшебных яблок
};
helpers::helpers(char *drug, int apple)
{
strcpy(helpers::drug,drug);
helpers::apple=apple;
}
void helpers::show_helpers(void)
{
cout<<"Ваш друг, который помогает вам всю игру "<<drug<<endl;
cout<<"Количество яблок, которые вы можете использовать как оружие: "<<apple<<" волшебных яблок"<<endl;
}
// Класс komanda образованный
от двух базовых классав
class komanda:public aladdin, public helpers {
public:
komanda(char *, int, char *,//дополнительные элементы класса komanda
char *, char *, char *, char *, //элементы класса aladdin
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 apple):
aladdin(name, harakter, obraz, missia),
helpers(drug, apple)
{
strcpy(komanda::nazvanie,
komanda::uchastniki=
strcpy(komanda::lozung,lozung)
}
void komanda::show_komanda()
{
cout<<"Введите название команды: ";
cin>>nazvanie;
cout<<"Количество участников команды: "<<uchastniki<<endl;
cout<<"Лозунг команды: ";
cin>>lozung;
show_helpers();
show_aladdin();
}
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. Результат работы программы
Заключение
При работе над этой курсовой работой мы на практике освоили методику проектирования программных комплексов на базе объектно-ориентированного программирования. Объектно-ориентированный подход является одним из наиболее интенсивно развивающихся направлений теоретического и прикладного программирования.
Мы провели анализ выбранной предметной области. Теоретический описали понятия объект, класс, методы конструктор и деструктор, наследование простое и множественное, прилагая к ним примеры из своих программ. Графический изобразили объектную модель, установили связи между объектами и классами. Также описали реализацию объектной модели на языке С++ и оформили результаты работы в виде исходного кода С++ в пояснительной записке.
Мы думаем, что мы достигли поставленной цели и получили навыки проектирования программных комплексов на базе объектно-ориентированного программирования.
Информация о работе Реализация проекта на языке С++ на тему «Арабская сказка»