Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Отчёт по лабораторной работе №7.
Вариант 25 - Cпутник.
Цель: Ознакомиться с концепцией сборок в .NET Framework.
Постановка задачи:
1. Дополнить диаграмму классов UML.
2. Изучить способы задания пространства имён в C#.
UML диаграмма классов:
Описание программного модуля:
using System;
using System.Text;
using SatInfo = lab7.SatInfoStruct.SatInfo;
namespace lab7
{
//абстрактный класс солнечной системы
abstract class SolarSystem
{
public abstract void GetName(out string name);
public abstract string OpenYear
{
get;
set;
}
}
/// <summary>
/// Структура с информацией о периоде и первооткрывателе спутника
/// </summary>
namespace SatInfoStruct
{
struct SatInfo
{
/// <summary>
/// Период спутника
/// </summary>
private uint period;
/// <summary>
/// Первооткрыватель
/// </summary>
private string founder;
/// <summary>
/// Конструктор
/// </summary>
public SatInfo(uint period, string founder)
{
this.period = period;
this.founder = founder;
}
public uint Period
{
get { return period; }
set { period = value; }
}
public string Founder
{
get { return founder; }
set { founder = value; }
}
public static bool operator ==(SatInfo si1, SatInfo si2)
{
if (System.Object.ReferenceEquals(si1, si2))
return true;
if (((object)si1 == null) || ((object)si2 == null))
return false;
return (si1.period == si2.period &&
si1.founder == si2.founder);
}
public static bool operator !=(SatInfo si1, SatInfo si2)
{
return !(si1 == si2);
}
}
}
/// <summary>
/// Перечисление направления движения спутника
/// </summary>
enum Direction : int
{
forward,
reverse
};
/// <summary>
/// Класс, описывающий направление вращения спутника относительно планеты
/// </summary>
class Spin
{
Direction dir;
public Spin()
{
//System.Console.WriteLine("Constructor Spin() called");
}
public Spin(Direction dir)
{
this.dir = dir;
//System.Console.WriteLine("Constructor with parameters Spin() called");
}
}
/// <summary>
/// Перечисление размера спутника
/// </summary>
enum SatSize
{
SMALL,
MEDIUM,
LARGE
};
namespace Satellites
{
/// <summary>
/// Summary description for Satellite
/// </summary>
class Satellite : SolarSystem
{
//перегруженный оператор явного приведения типов
public static explicit operator Spin (Satellite sat)
{
Console.WriteLine("Вызван оператор явного приведения типов ");
Spin spn = sat.GetSpin();
return spn;
}
//перегруженный оператор неявного приведения типов
public static implicit operator Satellite(Spin spn)
{
Console.WriteLine("Вызван оператор неявного приведения типов ");
Satellite satl = new Satellite("Triton", "1846", 1352, 2.061);
satl.SetSpin(spn);
return satl;
}
public Spin GetSpin()
{
return spin;
}
public void SetSpin(Spin spn)
{
spin = spn;
}
protected SatSize satSize;
protected Spin spin;
/// <summary>
/// Название спутника
/// </summary>
protected string name;
/// <summary>
/// Год открытия спутника
/// </summary>
protected string openYear;
/// <summary>
/// Радиус спутника
/// </summary>
protected uint radius;
/// <summary>
/// Плотность спутника
/// </summary>
protected double density;
/// <summary>
/// Космическая система
/// </summary>
public static string system;
protected SatInfo sInfo;
public void GetSatInfo(ref SatInfo sInfo)
{
if(sInfo!=this.sInfo)
sInfo = this.sInfo;
}
public void SetSatInfo(SatInfo sInfo)
{
if (sInfo != this.sInfo)
this.sInfo = sInfo;
}
public override void GetName(out string name)
{
name = this.name;
Console.WriteLine("Called Satellite.GetName(...)");
}
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public Satellite()
{
spin = new Spin();
// System.Console.WriteLine("Satellite Default constructor called");
}
/// <summary>
/// Статический Конструктор
/// </summary>
static Satellite()
{
system = "Solar System";
// System.Console.WriteLine("Satellite Static constructor called");
}
/// <summary>
/// Параметризованный конструктор
/// </summary>
public Satellite(string name, string openYear, uint radius, double density)
{
// System.Console.WriteLine("Satellite Constructor with parameters called");
this.name = name;
this.openYear = openYear;
this.radius = radius;
this.density = density;
spin = new Spin(Direction.reverse);
}
/// <summary>
/// Деструктор
/// </summary>
~Satellite()
{
//System.Console.WriteLine("Destructor called");
}
/// <summary>
/// Свойство чтения-записи названия спутника
/// </summary>
public virtual string Name
{
get { Console.WriteLine("Called Satellite.Name "); return name; }
set { name = value; }
}
/// <summary>
/// Свойство чтения-записи года открытия спутника
/// </summary>
public override string OpenYear
{
get { return openYear; }
set { openYear = value; }
}
/// <summary>
/// Свойство чтения-записи радиуса спутника
/// </summary>
public uint Radius
{
get { return radius; }
set { radius = value; }
}
/// <summary>
/// Свойство чтения-записи размера спутника
/// </summary>
public SatSize Satsize
{
get{ return satSize;}
set { satSize = value; }
}
/// <summary>
/// Свойство чтения плотности спутника
/// </summary>
public double Density
{
get { return density; }
}
/// <summary>
/// Функция вычисления массы спутника
/// </summary>
public double Mass()
{
return 4.0*3.14 * Math.Pow(radius,3.0) * density / 3.0;
}
/// <summary>
/// Функция вычисления площади спутника
/// </summary>
public double Area()
{
return 4.0 * 3.14 * Math.Pow(radius, 2.0);
}
/// <summary>
/// Функция вычисления среднего периметра спутника
/// </summary>
public double Perimeter()
{
return 2.0 * 3.14 * radius;
}
}
}
}
using System;
using Satellite = lab7.Satellites.Satellite;
using ArrSatellite = lab7.SatellitesList.ArrSatellite;
namespace Planets
{
/// <summary>
/// Summary description for Planet.
/// </summary>
//запечатанный класс - не наследуется
sealed class Planet : Satellite
{
//название планеты, у которой есть спутник
private string plName;
//массив спутников для данной планеты
private ArrSatellite arrSatl;
public Planet()
{
//System.Console.WriteLine("Planet Default constructor called");
}
//конструктор с параметрами и вызывается вначале конструктор базового класса с параметрами
public Planet(string plName): base("Triton", "1846", 1352, 2.061)
{
this.plName = plName;
//System.Console.WriteLine("Planet constructor with parameters called");
}
public ArrSatellite ArrSatl
{
get{return arrSatl;}
set { arrSatl = value;}
}
/// <summary>
/// Свойство чтения-записи названия планеты
/// </summary>
public void SetPlName(string plName)
{
this.plName = plName;
}
public string GetPlName()
{
return plName;
}
public new void GetName(out string name)
{
name = plName;
Console.WriteLine("Called Planet.GetName(...)");
}
public override string Name
{
get { return plName;}
set { plName = value; }
}
public void BaseMethods()
{
Console.WriteLine("Calling base methods...");
Console.WriteLine("Mass {0}", base.Mass());
Console.WriteLine("Area {0}", base.Area());
Console.WriteLine("Perimeter {0}", base.Perimeter());
}
}
}
namespace lab7
{
/// <summary>
/// Summary description for ArrSatellite.
/// </summary>
namespace SatellitesList
{
public class ArrSatellite
{
string [][] arrName;
public ArrSatellite(uint count)
{
arrName = new string [count][];
}
//индексатор для чтения и записи
public object this [int id]
{
get
{
if(id>=0 && id < arrName.Length)
{
return arrName[id];
}
else throw new System.IndexOutOfRangeException("Out Of Range Array");
}
set
{
if(id>=0 && id < arrName.Length)
{
arrName[id]= new string[((string[])value).Length];
arrName[id]=(string[])value;
}
else throw new System.IndexOutOfRangeException("Out Of Range Array");
}
}
public void SetName(uint id, params string[][] name)
{
if(id>=0 && id < arrName.Length)
{
arrName[id]= new string[name[0].Length];
arrName[id]=name[0];
}
else throw new System.IndexOutOfRangeException("Out Of Range Array");
}
public void SetName(uint id, ref string[] name)
{
if(id>=0 && id < arrName.Length)
{
arrName[id]= new string[name.Length];
arrName[id]=name;
}
else throw new System.IndexOutOfRangeException("Out Of Range Array");
}
public string[] GetName(uint id)
{
if(id>=0 && id < arrName.Length)
{
return arrName[id];
}
else
throw new System.IndexOutOfRangeException("Out Of Range Array");
}
public void GetNameOut(uint id, out string[] name)
{
if(id>=0 && id < arrName.Length)
{
name = arrName[id];
}
else
throw new System.IndexOutOfRangeException("Out Of Range Array");
}
}
}
}
Результат работы программы:
lab7.dll.
Выводы: