Chi*_*era 5 c c++ oop design-patterns
我正在开始学习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 */
}
Run Code Online (Sandbox Code Playgroud)
我已经考虑了一下,也许可以看到两个类:
CWinAmount 其中将包含处理要放入“转盘”上的货币金额的数据结构和功能。CWheel 它将封装车轮数据结构和控制车轮动画机制的功能。但是我只是不确定这是否是一个好的设计。
我不会提供有关如何进行此类转换的确切细节(这实际上取决于您)。但是,您所描述的方法听起来是一个完全合理的设计。通常,当将代码转换为面向对象时,我会发现最明显的具有共享状态的函数和结构分组,并将它们包装在一起。然后我查看剩下的函数,并尝试确定它们是否属于现有对象,是否具有某种可以证明对它们进行分组的关系,或者将它们保留为通用函数(如果我有选择)。
一般来说,转换为 OO 风格没有什么秘密,大多数方法只是尝试将任何/所有共享状态/功能分组为块(对象)。
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |