??xml version="1.0" encoding="utf-8" standalone="yes"?> X君最初的工作d是设计制作公司的官方|站。对于“能熟练使用Photoshop、Dreamweaver{Y件”的X君,q不是一件复杂的工作。但是,要求他在一周之内交上来的网站徏讄划,直等了一个月Q我才收C张A4U。上面用四号字写了大?0行?/FONT> 六p水^Q编辑一些国外的资讯应该没有问题吧?……X君遇C大麻烦。因为对杂志所专向的电脑技术、电脑游戏不熟悉Q很多“专业术语”在X君的眼里Q简直就是“天书”!……X君在~辑部坐了一个月Q没有编译出一稿Ӟ只好帮着做了一Ҏ字校寏V?/FONT> 自然有网友给X君打׃q뀂譬如从回复中摘出的两段Q?/P>
MCSE是什么?它代表的是Windowspȝ理的水q뀂因此,q家公司要求他去做网站,他的表现不好Q公司的人由此认定“MCSEp个水q”未免太荒唐?/FONT> 想看看这个学生英语水q_何,找个p好的他对对话Q让他写几个两、三千字的材料就可以看出来了。那是基本功Q假不了的。至于专业术语的问题Q在业内摸爬滚打个把月也逐渐熟悉了?/FONT> 我想说的是,W一Q企业要的是创造h值的人才Q不能创造h|U|千般武功Q也是废Z个。不q这不是关键Q关键在于,必须看到Q这位X君太不喜?STRONG>?/STRONG>——这是我跟新员工常提的一个字。不会做事没关系Q你有时间学Q但你首先必d会喊Q要做Q何事Q先喊出来,让所有相关的人都知道你要做什么,打算怎么做;做完一件事Q要喊出来,让大家看C的成l;遇到问题了,更要毫不犹U地喊出来Q让别h知道状况Q甚至给你帮助。在我看来,能力是h和h不同的,学习也有机遇{等各方面的区别Q但无论如何Q只要喊出来Q至不会像X君这样“速|”而一败涂地?/P>
从我个h的经验而言Q凡是|得很隄的事情,大抵都是自己懒得喊造成的。所以,q篇也写l自q底:以后做事q要多喊。对于类似X君等{刚出或未出校园的同学,我的是:快忘记“考试不能作弊”的规章制度Q做M事情多说话,邮g也好MSN也好口头也好Q说比不说要好,多说比少说要好。另外,昨天晚上?A target=_blank>孟岩提到了关于简历的话题Q私以ؓ对于初次扑ַ作的同学也是颇有帮助的,看看孟岩要不要在《程序员?/A>杂志上放一攑?/P>
上位Z般是集中理监控机,下位机是指现场直接控制器或控制机?
上位机面向管理用户Q下位机面向底层讑֤控制?br>
--------------------------------------
上位机:上位监视pȝQ一般ؓ计算机系l(监控软gQ;
下位机:控制pȝ的现场执行系l,一般ؓPLC{设备?br>
--------------------------------------
上位机是指h可以直接发出操控命o的计机Q一般是PCQ屏q上昄各种信号变化Q液压,水位Q温度等Q?br>下位机是直接控制讑֤获取讑֤状况的的计算机,一般是PLC/单片Zcȝ。上位机发出的命令首先给下位机,下位机再Ҏ此命令解释成相应时序信号直接控制相应讑֤。下位机不时d讑֤状态数据(一般模拟量Q,转化成数字信号反馈给上位机。简a之如此,真实情况千差万别不离其宗。上下位机都需要编E,都有专门的开发系l?br>
两机如何通讯Q一般取决于下位机。TCP/IP一般是支持的。但是下位机一般具有更可靠的独有通讯协议Q购C位机Ӟ会带一大堆手册光盘Q告诉你如何使用Ҏ协议通讯。里面会丑֤量例子。一般对~程人员而言一看也那么回事,使用一些新的API|了。多语言支持功能模块Q一般同时支持数U高U语aZ位机~程?br>
---------------------------------------
上位机是指工业控制中位于较高层次的计机。上位机通常指电脑了
下位机就通常指单片机之类
---------------------------------------
下位Z般指攄在前端的采集机,比如AD4500{设备,用来采集讑֤数据Qƈ把数据通过串口或者其它方式发送给服务端。下位机一般具有自和自启功能,是一U小型的计算机,功能比较单一Q用DOS操作pȝ或其它操作系l。上位机是相对于下位言Q一般情况下一个上位机对应几个下位机,把下位机的数据{发给服务器或者把服务器的控制信息发送给下位机。有时候上位机本n充当服务器?br>
]]>
]]>
本文引用通告地址Q?http://blog.csdn.net/gigix/services/trackbacks/474983.aspx
]]>
一、信念:树立“双赢”(q等互利Q的信念
要想拥有良好的h际关p,p有^{、互利的思想。用旉的话_是要有双赢思维?BR>
在对待h际关pMQ存在着以下几种思维模式Q?BR>
1.我赢你输Q?BR> 我们从小受的教育在加强q种思想观念。考试的时候你要考得比别人好Q体育比赛时你要跑得比别人快、蟩得比别h高,你要得冠军。M只有过别hQ只有赢Q才能我们感到快乐。我们把生活看成是竞技场,要成功幸就要超别人,把别人甩在后面?BR> 另外Q自U自利的人抱持的也是q种我赢你输的思想?BR>
2.我输你赢Q?BR> ~Z自信、缺乏自的人往往是这U思想?BR> 他们不敢坚持自己的立场,无所Ʋ无所求,牺牲个h利益委曲求全Q以牺牲求太q?BR>
3.两|׃Q?BR> 表面上看q样做谁都得不到好处Q似乎没有h会这样做。可是有的h偏偏要这h、这样做Q损Z利己Q我得不到的你也别想得到Qؓ了报复,宁可牺牲自己Q也要把你拖垮?BR>
4.双赢Q?BR> 双赢是徏立在q等互利思想的基之上的。自p利但又不伤害别h利益。不把自己和别h对立hQ我和你不是敌对的双方,而是同一条战壕里的战友,有富同nQ有隑当,共同开创美好的未来?BR>
我赢你输Q自U自利)、我输你赢(委曲求全Q、双输(两|׃Q这些思维模式Q都是无法人拥有良好的人际关系的。要x有良好的人际关系Q就要有双赢思维Q拥有^{、互利的思想?BR>
本文引用通告地址Q?http://blog.csdn.net/i_like_cpp/services/trackbacks/475017.aspx
]]>
静态构造函数是一U成员,用来实现初始化一个类所需的操作。静态构造函C能带参数Q?BR>不能h可访问性修饰符Q也不能被显式调用。类的静态构造函数是自动地被调用的?BR>Q上面的说明摘自《C# Language Specification》)
CZ
class Employee
{
private static int ds;
static Employee() {
ds = 2;
}
public Employee(int n)
{
ds = n;
}
public string Name;
public decimal Salary;
}
昄了一?Employee c,该类含有一个静态构造函敎ͼ它初始化一个静态字D?/P>
h意下面的语句Q会D静态构造函数先被调用,然后调用public的构造函数。也是说执行了
两个不同的构造函敎ͼ因此在实际应用中Q需要注意到q种情况可能会引L问题?BR>
Employee em = new Employee(1);
Q本文是本h以baodi_z的网名原发表在CSDN的个人BLOGQ原文发表于 2005q?6?7?5:44 PM Q?/P>
之所以摘录这D|章,是因为我奇怪下面的例子竟然真的能够~译通过--在引用的文g中篡改类的private为public可以直接访问私有变量,而且能够正常讉K和赋倹{?BR> 下面是摘录的原文Q有兴趣的朋友不妨也试试~个代码试验一下?/FONT>
-------------------------------------------------------------------
装
先来看现在在各类VC教程中关于对象的讲解中经常能看见的如下的一个类的设计?BR> class Person
{ private: char m_Name[20]; unsigned long m_Age; bool m_Sex;
public: const char* GetName() const; void SetName( const char* );
unsigned long GetAge() const; void SetAge( unsigned long );
bool GetSex() const; void SetSex( bool );
};
上面成员变量全部定义ؓprivateQ然后又提供三对Get/Set函数来存取上面的三个成员变量Q因为它们是privateQ外界不能直接存取)Q这三对函数都是public的,Z么要q样Q那些教材将此称作封装,是对cPerson的内部内存布局的封装,q样外界׃知道其在内存上是如何布局的ƈq而可以保证内存的有效性(只由c自w操作其实例Q?BR> 首先要确认上面设计的荒谬性,它是正宗的“有门没锁”毫无意义。接着再看所谓的对内存布局的封装。回惛_?SPAN lang=EN-US>C++从零开始(十)》中说的Z么每个要使用cȝ源文件的开头要包含相应的头文g。假设上面是在Person.h中的声明Q然后在b.cpp中要使用cPersonQ本来要#include "Person.h"Q现在替换成下面Q?BR> class Person
{ public: char m_Name[20]; unsigned long m_Age; bool m_Sex;
public: const char* GetName() const; void SetName( const char* );
unsigned long GetAge() const; void SetAge( unsigned long );
bool GetSex() const; void SetSex( bool );
};
然后在b.cpp中照怋用类PersonQ如下:
Person a, b; a.m_Age = 20; b.GetSex();
q里q接用了Person::m_Age了,q不做q样y脚的动作,依旧#include "Person.h"Q如下:
struct PERSON { char m_Name[20]; unsigned long m_Age; bool m_Sex; };
Person a, b; PERSON *pP = ( PERSON* )&a; pP->m_Age = 40;
上面依旧直接修改了Person的实例a的成员Person::m_AgeQ如何能隐藏内存布局Q!请回惛_明的作用Q类的内存布局是编译器生成对象时必ȝQ根本不能对M使用对象的代码隐藏有兛_象实现的M东西Q否则编译器无法~译相应的代码?BR> 那么从语义上来看。Person映射的不是真实世界中的h的概念,应该是存放某个数据库中的某个记录人员信息的表中的记录的缓冲区Q那么缓冲区应该具备那三对Get/Set所代表的功能吗Q缓冲区是缓冲数据用的,~冲后被其它操作使用Q就好像子Q只是放东西用。故上面的三对Get/Set没有存在的必要,而三个成员变量则不能是private。当Ӟ如果Person映射的ƈ不是~冲区,而在其它的世界中具备像上面那栯现的语义Q则像上面那样定义就没有问题Q但如果是因为对内存布局的封装而那样定义类则是大错牚w的?BR> 上面错误的根本在于没有理解何谓封装。ؓ了说明封装,先看下MFCQMicrosoft Foundation Class Library——微软功能类库,一个定义了许多cȝ库文Ӟ其中的绝大部分类是封装设计。关于库文g在说明SDK旉qͼ中的cCFile的定义。从名字可看出它映的是操作系l中文g的概念,但它却有q样的成员函数——CFile::Open、CFile::Close、CFile::Read、CFile::WriteQ有什么问题?q四个成员函数映的都是Ҏ件的操作而不是文件所具备的功能,分别为打开文g、关闭文件、从文gL据、向文g写数据。这不是和前面说的成员函数的语义相背吗?上面四个操作有个共性,都是施加于文件这个资源上的操作,可以它们叫做“被功能”,如文件具有“被打开”的功能Q具有“被d”的功能Q但应注意它们实际ƈ不是文g的功能?BR> 按照原来的说法,应该文件映ؓ一个结构,如FILEQ然后上面的四个操作应映成四个函数Q再利用名字I间的功能,如下Q?BR> namespace OFILE
{
bool Open( FILE&, ?); bool Close( FILE&, ?);
bool Read( FILE&, ?); bool Write( FILE&, ?);
}
上面的名字空间OFILE表示里面的四个函数都是对文g的操作,但四个函数都带有一个FILE&的参数。回想非静态成员函数都有个隐藏的参数thisQ因此,一个了不v的想法诞生了?BR> 所有对某种资源的操作的集合看成是一U资源,把它映射成一个类Q则q个cȝ对象是Ҏ个对象的操作Q此法被UC装Q而那个类被称作包装类或封装类。很明显Q包装类映射的是“对某种资源的操作”,是一抽象概念Q即包装cȝ对象都是无状态对?/SPAN>Q指逻辑上应该是无状态对象,但如果多个操作间有联p,则还是可能有状态的Q但此时它的语义也相应地有些变化。如多一个CFile::Flush成员函数Q用于刷新缓冲区内容Q则此时p有一个状态——缓冲区Q还可有一个状态记录是否已l调用过CFile::WriteQ没有则不用hQ?BR> 现在应能了解装的含义了。将ҎU资源的操作装成一个类Q此包装cL的不是世界中定义的某一“名词性概念”,而是世界的“动词性概念”或法中“对某一概念的操作”这个h为定出来的抽象概c由于包装类是对某种资源的操作的装Q则包装cd象一定有个属性指明被操作的对象,对于MFC中的CFileQ就是CFile::m_hFile成员变量Q类型ؓHANDLEQ,其在包装cd象的主要q作q程Q前面的CFile::Read和CFile::WriteQ中被读?BR> 有什么好处?装提供了一U手D以世界中的部分“动词性概念”{换成对象Q得程序的架构更加单(多条“动词性概念”变成一个“名词性概念”,减少了“动词性概念”的数量Q,更趋于面向对象的~程思想?BR> 但应区别开包装cd象和被包装的对象。包装类对象只是个外壻I而被包装的对象一定是个具有状态的对象Q因为操作就是改变资源的状态。对于CFileQCFile的实例是包装cd象,其保持着一个对被包装对象——文件内核对象(Windows操作pȝ中定义的一U资源,用HANDLE的实例表征)——的引用Q放在CFile::m_hFile中。因此,包装cd象是独立于被包装对象的。即CFile a;Q此时a.m_hFile的gؓ0?1Q表C其引用的对象是无效的,因此如果a.Read( ?);失败,因ؓ操作施加的资源是无效的。对此,应先调用a.Open( ?);以将a和一特定的文件内核对象绑定v来,而调用a.Close( ?);解除绑定。注意CFile::Close调用后只是解除了l定Qƈ不代表a已经被销毁了Q因为a映射的ƈ不是文g内核对象Q而是Ҏ件内核对象操作的包装cd象?BR> 如果仔细xQ就会发玎ͼ老虎能够吃兔子,兔子能够被吃Q那q里应该是老虎有个功能是“吃兔子”还是多个兔子的包装cL装“吃兔子”的操作Q这其实不存在Q何问题,“老虎吃兔子”和“兔子被吃”完全是两个不同的操作,前者涉及两U资源,后者只涉及一U资源,因此可以同时实现两者,具体应视各自在相应世界中的语义。如果对于真实世界,则可以简略地说老虎有个“吃”的功能Q可以吃“肉”,而动物从“肉”和“自主能动性”多重承,兔子再从动物l承。这里有个类叫“自主能动性”,指动物具有意识,能够自己动作Q这在C++中的表现是有成员函数的c,表示有功能可以被操作Q但攉Zh调台{功能,N说收x也能自己动?Q这是世界的意义——运转?BR>
Q本文是本h以baodi_z的网名原发表在CSDN的个人BLOGQ原文发表于 2004q?2?9?2:09 PM Q?/P>