Объектно-ориентированный дизайн -Преобразование приложения C в C++

Я начинаю процесс обучения C++и object oriented design. Каковы известные/распространенные методы преобразования процедурного кода в объектно-ориентированный -код? Какие варианты дизайна имеют смысл для следующего кода?

typedef struct
{
    int sector;
    int sectorPos;
}EndPosition;

typedef struct
{
    int rotateAngles;
    double brakingFactor;
}WheelStop;

WheelStop stops[][6] =
{
     /* data removed for brevity */
};

typedef struct
{
    int numImages;      /* Number of images in win amount string */
    int pixWidth;
    int indexes[7];     /* indexes into NumberImages[] */
}WinAmountData;

typedef struct
{
    int xOffset;    /* pixel count offset before next digit */
    std::string fileName;
    //char fileName[20];
    cairo_surface_t *image; 
}ImageInfo;

ImageInfo NumberImages[] =
{
     /* data removed for brevity */
};

enum { DOLLAR = 10, EURO, POUND, YEN };

double DegreesToRadians( double degrees )
{
    return((double)((double)degrees * ( (double)M_PI/(double)180.0 )));
}

int InitImages( void )
{
     /* uses NumberImages */
}


void DestroyNumberImages( void )
{
      /* uses NumberImages */
}

int ParseWinAmountString( char *string, WinAmountData *amtData )
{
        /* uses WinAmountData and enum */
}

gboolean rotate_cb( void *StopPos )
{
      /* uses EndPosition and stops */
}

static gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
     /* uses CairoImage class */
}

static void destroy (GtkWidget *window, gpointer data)
{
     /* cleanup GTK stuff */
}

Я немного подумал и вижу, может быть, два класса:

  • CWinAmountкоторый будет охватывать структуры данных и функции, которые обрабатывают суммы в валюте, которые должны быть помещены на «прялку».
  • CWheelкоторый будет инкапсулировать структуры данных колеса и функции, управляющие механикой анимации колеса.

Но я просто не уверен, что это хороший дизайн.

5
задан Chimera 24 July 2012 в 21:55
поделиться