我正在开始学习C和面向对象设计的过程.将过程代码转换为面向对象代码的已知/常用技术是什么?哪些设计选择对以下代码有意义? typedef struct{ int sector; int sectorPos;}EndPosition;typedef st
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将封装车轮数据结构和控制车轮动画机制的功能.
但我不确定这是不是一个好的设计.
我不会提供有关如何进行此类转换的确切详细信息(这完全取决于您).但是,您描述的方法听起来像是一个非常合理的设计.通常在将代码转换为OO时,我会找到最明显的函数和结构分组,并将它们包含在一起.然后我看看剩下的函数是什么,并尝试确定它们是否属于现有对象,有一些可以证明对它们进行分组的关系,或者将它们保留为通用函数(如果我有选项).一般来说,转换为OO风格并不是秘密,大多数方法只是尝试将任何/所有共享状态/功能分组为块(对象).