C++面向对象设计的挫折感。
在一个团队项目中工作,构建了一个IRC的副本,并负责GUI战斗站,我意识到我编写的代码远远不止GUI用户命令、字体命令、聊天过滤器等 这是我第一次尝试OOP,我现在被一个巨大的GUI类困住了,我想把它分成更小的类 然而,我现在面临的情况如下:C++面向对象设计的挫折感。,c++,oop,C++,Oop,在一个团队项目中工作,构建了一个IRC的副本,并负责GUI战斗站,我意识到我编写的代码远远不止GUI用户命令、字体命令、聊天过滤器等 这是我第一次尝试OOP,我现在被一个巨大的GUI类困住了,我想把它分成更小的类 然而,我现在面临的情况如下: Class A { public: int printStuff(); int doThings(); } A::printStuff() { return doThings; } A::doThings() { ret
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一无所知,计划很差,添加新功能的兴奋让我非常难过
计划得当,否则就会吃亏 既然你说的是子类,那么B应该在你真正的代码中继承类A吗?如果是,你确定B真的是A吗?