c++面向对象设计受挫
C++ Object Oriented Design frustration.
在一个小组项目中构建了一个IRC的副本,并管理了GUI战斗站之后,我意识到我编写的代码远不止GUI(用户命令,字体命令,聊天过滤器等)。
这是我第一次尝试面向对象,我现在被一个巨大的GUI类困住了,我想把它分成更小的类。
然而,现在我面临着这样的情况:
Class A {
public:
int printStuff();
int doThings();
}
A::printStuff() {
return doThings;
}
A::doThings() {
return 2;
}
类仍然需要交互的情况。请记住,类系统比这复杂得多,我所提议的5个子类之间存在交互。
但是类A应该只打印东西,而不是做事情;因此,我希望它是这样的:
Class A {
public:
int printStuff();
}
Class B {
public:
int doThings();
}
最好/最优雅的方法是什么?
如果有帮助的话,这里是头文件的实际块;我已经在每个方法需要的函数/变量中进行了注释,并概述了我建议的子类:
// ncurses (GUI, screens)
void setup(); // initScreen(); initWindows();
void initScreen(); // ncurses.h
void initWindows(); // screen vars, ncruses.h, dummy text
void resize(); // screen vars, ncruses.h, showScreen();
void Routine();
// message factory (GUI, controll, vars)
string mRequested(); // _messageQueue
void mRecieved(string message); // command(), printchat(), _chatlog, _user
bool command(string message, int out_in); // _user, _messageQueue, mRecieved -- quit(not made), removeUser
int checkVulgar(string *message); // _user
string upperCase(string message);
// GUI (windows, vars)
void printAscii(WINDOW *scr, char *gaphics[], int sizey, int sizex, int starty, int startx); // ncurses.h, windows
void printServers(WINDOW *scr, int a); // ncurses.h, windows
void printMessage(string message, int message_lines, int *h_index, int *attempt, int *message_len, int prev_len, int endline); // ncurses.h, windows
void printUsers(WINDOW *scr); // _users, ncurses.h, windows
void printTimeout();
void printChat(); // printMessage(), fontcommands, _chatlog, ncurses.h, windows //
void showScreen(int a, int b); // printAscii,servers,users,chat , ncurses.h, windows
// control (GUI, _users)
void updateUsers(vector<User> users); // _users, printUsers();
void removeUser(string user); // _users, printUsers();
// Boundary (ncurses, GUI, messageFactory, vars)
void userInput();
void userInputB(); // _user, resize(), printchat(), mRecieved(), checkvulgar(), quit(), command(), _messageQueue
int selectServer(); // showScreen()
最好/最优雅的方法是什么?
在沙发上坐几天,想出一个健壮而优雅的设计。
然后实现这个设计。
你所犯的错误是没有在开始编码之前设计。现在已经到了重构的时候了。弄清楚哪些类应该做什么,尝试制作一些CRC卡。它们对于找出类图应该是什么样子有很大的帮助。
在重新设计类并从头开始之后,我已经设法分离并重用了大多数早期代码。
对于任何想知道的人来说,mainApp现在直接与MessageFactory对话;MF包含GUI和Windows的对象(前一个图像中的ncurses)。
从一开始它就应该是这样的,糟糕的计划(由于对命令行GUI一无所知,以及添加新功能的兴奋)给我带来了很大的痛苦。
计划得当,否则吃亏。
相关文章:
- 分段错误(内核转储) C++面向对象编程
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- 在C++面向对象程序中,谁负责删除传递给构造函数的对象
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 面向对象的设计选择
- 程序语言和面向对象语言的游戏设计差异
- 面向对象的数据设计
- 面向对象设计-将C应用程序转换为C++
- C++面向对象的客户端套接字应用程序设计
- 设计模式:可重用的面向对象软件的元素
- 设计面向对象的同步接收器和发射器
- 用C++实现面向对象设计中的内存管理
- C++中的面向对象设计问题
- 面向对象的酒店预订系统设计
- 面向对象设计播放器和AI控制单元.dynamic_cast
- c++面向对象设计
- 需要列表设计(面向对象)建议
- typeid()面向对象设计备选方案
- 在保持良好的面向对象设计的同时重用代码以提高性能的最佳方法是什么?
- c++面向对象设计受挫