Интернет Университет информационных технологий Твой путь к знаниям
  Искать!
Курсы | Обучение | Школа | Магазин | Общение | Новости | Помощь

поддержка курса Основы программирования на C#
информация [+] Автор: В.А. Биллиг | ISBN: 978-5-9556-0050-7


 
 
25. Лекция: Финальный проект
Страницы: 1 | 2 | 3 | 4 | 5 | » для печати и PDA
Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter

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

В финальном проекте создается семейство классов, описывающих геометрические фигуры. Проектирование начинается с абстрактного класса поведения, который описывает общие свойства и методы, характерные для всех фигур семейства. Затем, используя наследование, создаются классы конкретных геометрических фигур, начиная с простейших, таких, как круги и прямоугольники, до составных, таких, как класс Person. Мы добавим в наш проект динамические структуры данных, такие, как список с курсором, для хранения в нем фигур семейства. Наконец, мы создадим интерфейс, включающий меню с десятками команд и панель с инструментальными кнопками. Интерфейс позволяет конечному пользователю выполнять различные действия над геометрическими фигурами - создавать, рисовать их на форме, перемещать их с помощью команд и перетаскивать их мышью, менять их размеры и цвет, сохранять в списке и удалять из списка, отображать все фигуры списка или очистить его полностью.

Проект может служить образцом полноценного Windows-приложения, примером проектирования в классах с демонстрацией преимуществ, предоставляемых наследованием. Закончим на этом рекламную часть и приступим к делу. Хочу предупредить, вас ждут программные тексты, почти без всяких комментариев. Все нужные комментарии были даны в предыдущих лекциях. С моей точки зрения, наиболее интересная часть программистских книжек - это та, в которой приводится программный код. И значит, эта глава самая интересная.

Абстрактный класс Figure

Приведем код класса:

using System;
using System.Drawing;
namespace Shapes
{
/// <summary>
/// Figure - это абстрактный класс; прародитель семейства 
/// классов геометрических фигур. Все фигуры имеют:
/// центр - center, масштаб - scale. статус
/// перетаскивания - dragged center - объект встроенного
/// класса (структуры) Point. Этот объект задает характерную
/// точку фигуры - чаще всего ее центр (тяжести)
/// scale задает масштаб фигуры, первоначально единичный.
/// drugged = true, когда фигура следует за курсором мыши.
/// над фигурами определены операции: параллельный
/// перенос - Move(a,b) масштабирование - Scale(s)
/// Показ фигуры - Show. Область захвата - Region_Capture
/// возвращает прямоугольник, характерный для фигуры,
/// перетаскивание фигуры возможно при установке курсора 
/// мыши в области захвата.
/// </summary>
abstract public class Figure
{
	/// <summary>
	/// закрытые для клиентов атрибуты класса - center, scale 
	/// </summary>
	protected Point center;
	protected double scale ;
	protected bool dragged;
	protected Color color;
	//Доступ к свойствам 
	public Point center_figure
	{
		get {return(center);}
		set {center = value;}
	}
	public double scale_figure
	{
		get {return(scale);}
		set {scale = value;}
	}
	public bool dragged_figure
	{
		get {return(dragged);}
		set {dragged = value;}
	}
	public Color color_figure
	{
		get {return(color);}
		set {color = value;}
	}
	/// <summary>
	/// базовый конструктор фигур
	/// </summary>
	/// <param name="x">координата X характерной точки 
	///фигуры</param>
	/// <param name="y">Координата Y характерной точки 
	///фигуры</param>
	public Figure(int x, int y)
	{
		center = new Point(x,y);
		scale = 1;
		dragged = false;
		color = Color.ForestGreen;
	}
	/// <summary>
	/// отложенный метод 
	/// Параллельный перенос фигуры на (a,b)
	/// require : true;
	/// ensure : для любой точки фигуры p(x,y): 
	/// x = old(x) +a; y = old(y) + b;
	/// </summary>
	/// <param name="a">a - перемещение по горизонтали 
	///вправо </param>
	/// <param name="b">b - перемещение по вертикали 
	///вниз</param>
	/// Замечание: Для того, чтобы фигура при рисовании была  
	/// полностью видимой, координаты всех ее точек должны  
	/// быть в пределах области рисования.
	public void Move (int a,int b)
	{
		center.X +=a; center.Y += b;
	}
	/// <summary>
	/// изменяет масштаб фигуры
	/// </summary>
	/// <param name="s">масштаб изменяется в s раз</param>
	public void Scale(double s)
	{
		scale*=s;
	}		
	/// <summary>
	/// рисование фигуры в окне, передающем объекты g и pen
	/// </summary>
	/// <param name="g"> графический объект, методы которого 
	/// рисуют фигуру</param>
	/// <param name="pen">перо рисования</param>
	public abstract void Show(Graphics g, Pen pen, 
		Brush brush);
	public abstract System.Drawing.Rectangle Region_Capture();		
}

Абстрактный класс, относящийся к этапу проектирования системы, вместе с тем является важнейшим элементом заключительного семейства классов. В этом проявляется мощь объектно-ориентированного подхода к разработке программных систем. Заметьте, на данном уровне большая часть текста представляет документацию, являющуюся неотъемлемой частью программного проекта. Документация записана в тегах <summary>, что позволяет автоматически ее извлечь и сохранить в виде XML-отчета.

Классы семейства геометрических фигур

Приведем теперь программные коды классов, являющихся потомками класса Figure.

Дальше »
Страницы: 1 | 2 | 3 | 4 | 5 | » для печати и PDA
 
 

Внимание! Если Вы увидите ошибку на нашем сайте, выделите её и нажмите Ctrl+Enter.
Нужна помощь?
• Забыли пароль? Вам сюда...
• Есть вопрос? Спрашивайте!
Вы можете:
• Изменить персональные данные
• Изменить параметры подписки
Интернет-магазин:
• Ваши заказы здесь
• Ваш личный счет
Курсы | Учебные программы | Учебники | Вопросы и Ответы | Форум | Новости | Помощь

Телефон: +7 (499) 253-9312, 253-9313, факс: +7 (499) 253-9310, email: info@intuit.ru
© INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование, 2003-2011
Проект Издательства "Открытые Системы".
Партнеры: РМ Телеком, KRAFTWAY COMPUTERS.
Rambler's Top100