软件的社交能力

两个人之间互不相识,则无法交往,两个系统之间相互不能识别,那么也就不可能相互通讯。但是人有一种社交能力,这种能力可以保证两个不相识的人,相互认识,开始交往。两个系统之间没有这种能力,所以不能通讯,为了实现任意系统之间的通讯,则所有系统必须都具备社交能力。在网络上的一个具备社交能力的系统,可以在满足某些条件的情况下(比如闲的无聊,比如需要帮助等等),自动查找和自己一样具备社交能力的系统,找到之后,可以相互“握手”,相互“交谈”,进而可能开始通讯。两个模块之间可以自由的调用,也同样必须具备社交能力方可,一个模块可以自动找到附近的(比如某个或某些目录下)的具备社交能力的模块,询问这些模块能够实现什么功能,如果是自己需要的,则调用这些功能,否则继续寻找。
    人为甚么具备社交能力,因为人首先具备一些统一的接口,这些接口就是眼睛、耳朵、嘴巴、肢体、容貌等等,其次还具有一些社交的常识,例如见面之后的你好,握手,微笑,谈论简单的感兴趣的话题,等等,然后根据交流的内容决定是否继续交往,还是就此打住;两个系统或模块之间要进行通讯,应该具备社交能力,首先也必须具备一些一致的接口,具备一些系统之间通讯的常识,两个系统相遇之后,通过常识进行应答,应答之后决定是否继续交往。一个模块可以搜索自己的周围,看十分有具备“社交能力”的模块,如果有,则跟这些模块进行初步的“社交活动”,初步的社交活动之后,决定是否相互调用,也就是进一步的交往。
    这里的系统可以是同一个机器上的进程,也可以是不同机器上进程,系统之间的通信,可以理解为进程间的通信。 模块可以理解为一个个的DLL,或COM组件,或.NET组件,模块之间的交往,也就是进程内部模块之间的通信。
    0):确定通讯方式,是使用Socket通信,还是使用SendMessage,还是使用MailSlot,或者是,Net Remoting。首先以第一种方式Ask,如果没有人回答,再使用第二种方式Ask。知道收到答复。这就像你在大街上需要帮助,或者希望跟别人聊天,你首先用汉语Ask,“谁能够帮助我?”,结果没有人听得懂;接着你用英语Ask,结果还是没有人听得懂,直到你用德语Ask,才有一个漂亮的小姐回答你。
    1):确定系统基本的初步接口。例如Ask(bool bBroadcast,),Reply(),OnHeard()
    2):确定系统社交的常识。A系统Ask之后,B系统安装什么方式回答,每一种回答具有哪些意义?A系统OnHeard()之后,应该如何回答,每一种回答又哪些意义。
    3):两个系统经过初步交往之后,发现有共同语言,A系统希望B系统提供自己关于青藏铁路售票的信息,B系统恰好有这些信息,则两个系统开始交换数据。
    具备社交能力的软件很有趣,要实现这样的软件,在系统集成方面将非常有用。或许,我会将这种软件的设计模式,写入我的关于UniObject有关的设计之中。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式实践

以前写程序不是太注意,将程序中的执行接口、容器接口和加载工具混合在一起设计。例如一个服务工厂,对于调用方来说,他是不关心你的容器机制,他关心的是执行接口,即他的结果。而对于服务的加载程序,他关心如…

侯捷面向对象高级编程(二)

侯捷面向对象高级编程(二) 转换函数 转换函数没有返回值,返回值就是double即函数名,不需要自己写因为转换函数一般不会改变其中内容,所以要加const限定 两条路都可以走,就回产生歧义,报错 explict禁止自动转换,于是4无法转转换为Fraction pointer-like cliasses ->作用之后…

拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限

在.net中调用时出现“拒绝了对对象 sp_sdidebug(数据库 master,所有者 dbo)的 EXECUTE 权限”的错误的解决办法。该问题是我在用指定的URL启动项目后,再“附加进程”后运行程序时出现的。该问题主要是.net2005的调试机制引起的&am…

ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证

在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证。字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数据库的…

人生的12个经典领悟

1、父子二人经过五星级饭店门口,看到一辆十分豪华的进口轿车。儿子不屑地对他的父亲说:「坐这种车的人,肚子里一定没有学问!」 父亲则轻描淡写地回答:「说这种话的人,口袋里一定没有钱!」 2…

poll聊天室程序

poll聊天室程序 客户端: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include &l…

EF Code First学习笔记:数据库创建(转)

控制数据库的位置 默认情况下&#xff0c;数据库是创建在localhost\SQLEXPRESS服务器上&#xff0c;并且默认的数据库名为命名空间context类名&#xff0c;例如我们前面的BreakAway.BreakAwayContext。 有几种方法可以改变这种默认约定。 利用配置文件 在配置文件中新加一个连接…

ASP.NET 2.0+Atlas编写鼠标拖放程序

作者&#xff1a;朱先忠编译摘要 本文将详细探讨Atlas中的声明性编程与强制性编程之间的关系&#xff0c;及如何用之在一个web客户端实现拖放功能。下图为本文相应示例程序运行结果快照。运行结果一. 简介  本文旨在帮助读者理 解微软的Atlas技术的某些方面的工作原理。Atlas…

疑难杂症--由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

在巡检数据库时发现&#xff0c;数据库备份作业失败&#xff0c;查看错误日志发现以下提示&#xff1a; 已以用户 WIN2008-JH122\SYSTEM 的身份执行。 Microsoft (R) SQL Server 执行包实用工具 Version 10.0.4000.0 for 64-bit 版权所有 (C) Microsoft Corp 1984-2005。保留…

call_once/once_flag的使用

call_once/once_flag的使用 保证在多线程环境中某个函数仅仅被调用一次,可以使用std::call_once函数,并且需要一个入参once_flag类型的入参 #include<iostream> #include <string> #include <tuple> #include <mutex> #include <thread> #incl…

算法基础系列之三:螺旋形矩阵

如何打印出如下这样的螺旋形的矩阵&#xff1a; 1 2 3 8 9 4 7 6 5 方法一&#xff1a; static void SpiralMatrix(int count) { int[,] iarray new int[count, count]; for (int i 0; i < count; i) { for (int j 0; j < count; j) { iarray[i, j] 0…

C++11异步操作

C11异步操作 C 11 提供了异步操作相关的类,主要有std::future std::promise std::package_task std::future作为异步结果的传输通道,获取线程函数的返回值; std::promise用来包装一个值,将数据和std::future绑定; std::package用来包装一个对象,将数据和future绑定起来,以方…

GDI对象的初始化

GDI对象的初始化 一、GR_GraphicsFactory对象的初始化在XAP_App对象的构造函数中创建GR_GraphicsFactory对象。在XAP_Win32App构造函数中&#xff0c;调用GR_GraphicsFactory对象的registerClass函数初始化m_vAllocators、m_vDescriptors、m_vClassIds集合成员变量&#xff0c;…

存储过程从入门到熟练(多个存储过程完整实例及调用方法)_AX

①为什么要使用存储过程?因为它比SQL语句执行快.②存储过程是什么?把一堆SQL语句罗在一起,还可以根据条件执行不通SQL语句.(AX写作本文时观点)③来一个最简单的存储过程CREATE PROCEDURE dbo.testProcedure_AXASselect userID from USERS order by userid desc注:dbo.testPro…