Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Краткие теоретические сведения

Поиск

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

Рассмотрим методику использования шаблона Bridge для рисования в условиях алфавитно – цифрового экрана. Предполагается, что имеется два объекта рисования и два метода рисования.

Диаграмма шаблона имеет вид:


 

UML диаграмма шаблона Bridge


Класс Shape является общим для объектов рисования Circle и Rectangle.

Класс Drawing содержит методы рисования, сгруппированные к классах V1Drawing и V2Drawing. Для совместимости с возможными прежними разработками добавлены классы DP1 и DP2.

Порядок выполнения работы

1. Определить иерархию классов объектов рисования (в соответствии с вариантом).

2. Определить методы классов с учетом иерархии

3. Реализовать классы.

4. Написать демонстрационную программу мультипликации, в которой рисуются требуемые объекты в псевдографике и ncurses технологиях.

Методические указания.

Реализовать требуемые действия, рассматривая приведенные тексты как псевдокод.

//Функция Main

#include <iostream.h>

 

#include "Shape.h"

#include "Drawing.h"

#include "V1Drawing.h"

#include "V2Drawing.h"

#include "Rectangle.h"

#include "Circle.h"

//using namespace std;

int main ()

{

Shape *s1;

Shape *s2;

Drawing *dp1, *dp2;

 

dp1 = new V1Drawing;

s1 = new Rectangle(dp1, 1.0, 1.0, 2.0, 2.0);

 

dp2 = new V2Drawing;

s2= new Circle(dp2, 2, 2, 4);

   

s1->draw();

s2->draw();

   

float a;

cin >> a;

delete s1; delete s2;

delete dp1; delete dp2;

return 0;

}

 

// Shape.h: interface for the Shape class.

#pragma once

#include "Drawing.h"

class Shape 

{

public:

 //Чистая виртуальна функция.

// Параметры не указаны, поскольку их количество и тип могут меняться

virtual void draw() = 0;

Shape();

Shape(Drawing *dp);

void drawLine(double xl, double yl,

   double x2, double y2);

void drawCircle(double x, double y,

   double r);

private: Drawing *_dp;

};

 

// Drowing.h: interface for the Drowing class.

 

#pragma once

class Drawing 

{

public: virtual void drawLine (

   double xl, double yl,

   double x2, double y2) = 0;

   virtual void drawCircle (

   double x, double y,

   double r) = 0;

};

 

// Rectangle.h: interface for the Rectangle class.

 

#include "Shape.h"

 

#include "Drawing.h"

class Rectangle: public Shape{

public:

      Rectangle::Rectangle(Drawing *dp,

      double x1, double y1,

      double x2, double y2);

      double _x1; double _y1;

      double _x2; double _y2;

   void draw();

};

// Circle.h: interface for the Circle class.

 

#include "Shape.h"

 

#include "Drawing.h"

class Circle: public Shape{

public: Circle::Circle(

   Drawing *dp,

   double x, double y, double r);

public: double _x; double _y; double _r;

void draw();

};

 

// V1Drawing.h: interface for the V1Drawing class.

 

#include "Drawing.h"

 

#include "DP1.h"

class V1Drawing: public Drawing{

private: DP1 _DP1;

public: void drawLine(

   double xl, double yl,

   double x2, double y2);

public:

void drawCircle(

   double x, double y, double r);

};

 

// V2Drawing.h: interface for the V2Drawing class.

 

#include "Drawing.h"

 

#include "DP2.h"

class V2Drawing: public Drawing {

private: DP2 _DP2;  

public: void drawLine (

   double xl, double yl,

   double x2, double y2);

public:

 void drawCircle(

      double x, double y, double r);

};

// DP1.h: interface for the DP1 class.

 

class DP1 {

public:

static void draw_a_line (

   double xl, double yl,

   double x2, double y2);

static void draw_a_circle (

   double x, double y, double r);

};

// DP2.h: interface for the DP2 class.

 

class DP2 {

public:

   static void drawLine (

      double xl, double x2,

      double yl, double y2);

   static void drawCircle (

      double x, double y, double r);

};

# Makefile for Bridge project

 

bridge: Main.o Circle.o DP1.o DP2.o Drawing.o Rectangle.o Shape.o V1Drawing.o V2Drawing.o

g++ -o bridge Main.o Circle.o DP1.o DP2.o Drawing.o Rectangle.o Shape.o V1Drawing.o V2Drawing.o

Main.o: Main.cpp

g++ -c Main.cpp

Circle.o: Circle.cpp

g++ -c Circle.cpp

DP1.o: DP1.cpp

g++ -c DP1.cpp

DP2.o: DP2.cpp

g++ -c DP2.cpp

Drawing.o: Drawing.cpp

g++ -c Drawing.cpp

Rectangle.o: Rectangle.cpp

g++ -c Rectangle.cpp

Shape.o: Shape.cpp

g++ -c Shape.cpp

V1Drawing.o: V1Drawing.cpp

g++ -c V1Drawing.cpp

V2Drawing.o: V2Drawing.cpp

g++ -c V2Drawing.cpp

clean:

rm -f *.o bridge

 

Содержание отчета

1. Титульный лист: название дисциплины; номер и наименование работы; фамилия, имя, отчество студента; дата выполнения.

2. Постановка задачи. Следует дать конкретную постановку, т.е. указать, какие классы должны быть реализованы, какие должны быть в них конструкторы, компоненты-функции и т.д.

3. Иерархия классов в виде графа.

4. Определение технологии наследования с доказательством оптимальности.

5. Определение конструкторов классов и пояснение структуры аргументов конструкторов.

6. Реализация методов.

7. Make оператор

8. Листинг демонстрационной программы.

9. Объяснение необходимости виртуальных функций. Следует показать, какие результаты будут в случае виртуальных и не виртуальных функций.

Варианты заданий

В качестве классов рисования выступают классы работы 7.

В качестве объектов рисования берутся два объекты мультипликации из пункта Эффект мультипликации раздела Графика за 1 курс.

 

Исключительные ситуации

Цель.

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

Содержание работы.

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



Поделиться:


Последнее изменение этой страницы: 2021-11-27; просмотров: 59; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.216.248 (0.009 с.)