Лабораторная работа №4
Анализ возможных путей развития программного обеспечения
Цель работы Реализация и анализ путей развития программного обеспечения в соответствие с новыми требованиями
Порядок работы
1. Получить новые требования к модулю, разработанному на лабораторных работах 1 и 2
2. Рассмотреть несколько путей развития программного обеспечения и предложить проект на основе диаграмм классов.
3. Реализовать рассмотренные классы
4. Провести анализ качества полученного кода и сделать вывод о перспективном варианте реализации
Пример:
Для модуля вычисления корней квадратного уравнения с действительными параметрами реализовать возможность поиска решения на множестве комплексных чисел
Для задачи можно рассмотреть два варианта решения
1. Путем ввода нового класса, который бы отвечал за хранение комплексных чисел
2. Путем ввода нового класса, который бы отвечал за хранение комплексных чисел и реализовывал стандартные операции с комплексными числами, необходимыми для решения задачи.
Оба решения отражены на диаграммах классов
Реализация приведенных модулей представлена в следующих листингах
Заголовочный файл
#pragma once
struct ComplexNumber
{
public:
double real;
double image;
ComplexNumber(double iReal,double iImage=0);
ComplexNumber();
};
struct CSqrResult
{
static const int C_OK=1;
static const int C_ERROR=2;
ComplexNumber x1, x2;
int status;
};
class CSqrRoot
{
private:
double mAparam,mBparam,mCparam;
public:
CSqrRoot(void);
~CSqrRoot(void);
void initA(double a);
void initB(double b);
void initC(double c);
CSqrResult solve();
};
Исходный файл
#include "SqrRoot.h"
#include <cmath>
using namespace std;
ComplexNumber::ComplexNumber(double iReal,double iImage)
{
real = iReal;
image =iImage;
}
ComplexNumber::ComplexNumber()
{
real=image=0;
}
CSqrRoot::CSqrRoot(void)
{
}
CSqrRoot::~CSqrRoot(void)
{
}
void CSqrRoot::initA(double a)
{
mAparam = a;
}
void CSqrRoot::initB(double b)
{
mBparam = b;
}
void CSqrRoot::initC(double c)
{
mCparam=c;
}
CSqrResult CSqrRoot::solve()
{
CSqrResult result;
if (mAparam==0)
{
if (mBparam!=0)
{
result.x1=result.x2=-mCparam/mBparam;
result.status=CSqrResult::C_OK;
}
else
{
result.status=CSqrResult::C_ERROR;
}
}else
{
double det = mBparam*mBparam-4*mAparam*mCparam;
if (det<0)
{
result.x1 = ComplexNumber((-2*mBparam/(4*mAparam)),sqrt(-det)/(4*mAparam));
result.x2 = ComplexNumber((-2*mBparam/(4*mAparam)),-sqrt(-det)/(4*mAparam));
}
else
{
result.x1 = ComplexNumber((-2*mBparam/(4*mAparam)),0);
result.x2 = result.x1;
}
}
return result;
}
Заголовочный файл
#pragma once
struct ComplexNumber
{
double real;
double image;
ComplexNumber();
ComplexNumber(double iReal,double iImage=0);
static ComplexNumber complexSqrt(double x);
static ComplexNumber add(ComplexNumber& x,ComplexNumber& y);
static ComplexNumber substract(ComplexNumber& x,ComplexNumber& y);
static ComplexNumber divide(ComplexNumber& x,double y);
};
struct CSqrResult
{
static const int C_OK=1;
static const int C_ERROR=2;
ComplexNumber x1,x2;
int status;
};
class CSqrRoot
{
private:
double mAparam,mBparam,mCparam;
public:
CSqrRoot(void);
~CSqrRoot(void);
void initA(double a);
void initB(double b);
void initC(double c);
CSqrResult solve();
};
#include "SqrRoot.h"
#include <cmath>
using namespace std;
ComplexNumber::ComplexNumber(double iReal,double iImage)
{
real = iReal;
image =iImage;
}
ComplexNumber::ComplexNumber()
{
real=image=0;
}
ComplexNumber ComplexNumber::complexSqrt(double x)
{
ComplexNumber result;
if (x>0)
{
result.real=sqrt(x);
result.image=0;
}
else
{
result.image=sqrt(-x);
result.real=0;
}
return result;
}
ComplexNumber ComplexNumber::add(ComplexNumber& x,ComplexNumber& y)
{
ComplexNumber result;
result.real=x.real+y.real;
result.image=x.image+y.image;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.