hur.cn - 华软网

 热门搜索

[求助]关于类如何设计?

  作者:未知    来源:网络    更新时间:2011/7/14
这段时间做个网络编程的小程序.对如何设计类之间的关系感到头大,特来求助.

先阐述一下问题.

服务器端有两个类,一个是界面类,一个是通信类.

服务器启动的时候,初始化通信类和界面类..


当服务器端收到消息,通信类处理消息,并通知界面类做出相应的响应,然后界面类返回一个处理后的值给通信类,通信类发回客户端.

这样做的目的主要是想用面向对象的思想,以后如果修改类比较好修改

但苦于没有思路,不知道怎么设计类?

特来求助各位大神啊....
---华软 网友回答---
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?
---华软网友回复---
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?


做个简单的小程序而已,只是想知道思想.又不是很复杂啊.
最简单的,收到一条消息,显示在界面上,然后返回显示成功.

我并不是问这么做这个系统,只是想知道里面一部分类之间通信啊.
---华软网友回复---
我的做法:
界面继承通信,处理相应的网络事件
class communicate
{
virtual void OnRecv(char* buff){};
virtual void OnAccept(){};
//...
};
class UI:public communicate
{
//...
void OnRecv(char* buff);
void OnAccept();
};

---华软网友回复---
引用 2 楼 lanyan822 的回复:
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?


做个简单的小程序而已,只是想知道思想.又不是很复杂啊.
最简单的,收到一条消息,显示在界面上,然后返回显示成功.

我并不是问这么做这个系统,只是想知……

你还是没说用什么框架
控制台?
我明白你的意思
不过你用这种程序来体验面向对象......
你想做基于什么的通信
---华软网友回复---
引用 4 楼 xianglitian 的回复:
引用 2 楼 lanyan822 的回复:
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?


做个简单的小程序而已,只是想知道思想.又不是很复杂啊.
最简单的,收到一条消息,显示在界面上,然后返回显示成……


用mfc
基于udp的聊天

之前聊天程序都是将sock通信写在界面类里面.
我在想可不可以把通信那一块单独封装在一起
只是没弄懂,通信类怎么去通知界面类,并且界面类处理后的消息怎么通过界面类发送出去

之前那么哥们说用继承.还在琢磨
---华软网友回复---
引用 3 楼 qq752923276 的回复:
我的做法:
界面继承通信,处理相应的网络事件
class communicate
{
virtual void OnRecv(char* buff){};
virtual void OnAccept(){};
//...
};
class UI:public communicate
{
//...
void OnRecv(char* buff);
void OnAccept……


谢谢...还在琢磨你这种思想怎么用
---华软网友回复---
引用 5 楼 lanyan822 的回复:
引用 4 楼 xianglitian 的回复:
引用 2 楼 lanyan822 的回复:
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?


做个简单的小程序而已,只是想知道思想.又不是很复杂啊.
……

封装通信功能进一个类
然后在界面类里声明一个通信类的对象
---华软网友回复---
引用 7 楼 xianglitian 的回复:
引用 5 楼 lanyan822 的回复:

引用 4 楼 xianglitian 的回复:
引用 2 楼 lanyan822 的回复:
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包括了?
你用什么框架开发呢?


做个简单的……


这种早想过了.通信类对象收到消息后,怎么通知界面类?
这点没想到怎么弄.
---华软网友回复---
学学设计模式
---华软网友回复---
之前想的是,通信类构造函数的一个参数是界面类指针,然后收到消息后,通过指针调用界面类方法.
---华软网友回复---
引用 9 楼 quwei197874 的回复:
学学设计模式


设计模式那么多种,麻烦你告知这种情况该用哪一种?
---华软网友回复---
引用 6 楼 lanyan822 的回复:
引用 3 楼 qq752923276 的回复:
我的做法:
界面继承通信,处理相应的网络事件
class communicate
{
virtual void OnRecv(char* buff){};
virtual void OnAccept(){};
//...
};
class UI:public communicate
{
//...
void OnRecv(ch……



我也赞成这个。。  
假设你用对话框工程, 

CMyDialog :public communicate

因为你通信类中的响应函数都是虚函数, 

所以你在界面类中再重写 基类的虚函数就行, 

然后UpdateData( FALSE )
---华软网友回复---
引用 10 楼 lanyan822 的回复:
之前想的是,通信类构造函数的一个参数是界面类指针,然后收到消息后,通过指针调用界面类方法.

如果想分离通信和界面,可以如7L所说的,然后在网络事件中通过HWND SendMessage发送自定义消息更新界面,但是似乎不是很效率?
LZ 加点分吧 我以前做网络编程也想过这方面的设计 这个问题值得探讨啊 
---华软网友回复---
引用 8 楼 lanyan822 的回复:
引用 7 楼 xianglitian 的回复:
引用 5 楼 lanyan822 的回复:

引用 4 楼 xianglitian 的回复:
引用 2 楼 lanyan822 的回复:
引用 1 楼 xianglitian 的回复:
我觉得你的思路从根上就有问题
什么叫两个类?
你的服务器就像用两个类实现?
类是抽象模型是不假
但你这也太抽象了
一个界面类就把界面功能全都包……

通信功能都已经是界面的一个对象了
那通信接到消息不就是界面接到消息么
再说你一再强调消息
消息有很多种理解
单纯的从面向对象的角度理解一个类封装的方法就可以认为是消息
从windows框架理解消息是不同窗口可以相应和产生的动作
从程序设计的角度理解消息是相互通信的一种机制
具体到你说的UDP通信
用一个线程recive然后根据消息内容作相应处理不就完事了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。