slice中的类

来源:互联网 发布:ps线稿上色知乎 编辑:程序博客网 时间:2024/06/17 07:11
 
     
    除了接口ice还允许定义类,类与接口区别在与它可以拥有成员,与结构的区别在于它可以拥有行为。类支持集成,因此是多态的。
     
  1. 简单类
       class test{
         string name;
         void sayhello();
     }
    能够使用结构的地方都可以使用类,但是从性能上考虑,如果结构够用了就请尽量使用结构。
     
     
  2. 类的继承
       使用extends关键字,派生类不能重新定义基类的数据成员
     
  3. 类的继承语义
       如果客户端和服务端都理解一个实例的基类和派生类,当客户端需要传回是基类时,服务器端传回了派生类,此时客户端也会得到派生类,但当客户端只连接了基类没有链接派生类时,客户端会把这个这个派生类切回基类。
     
  4. 自引用类
       class Link{
          string value;
          Link next;
       };
     
     interface Link{
         string getValue();
        Link* getNext();
    };
    之间的区别
     
    Link*是指返回的是Link的代理,它代表了某个地方的对象,如果你调用返回值的getValue方法,可能是某个servant会收到你的请求并返回给你一个值,对于代理而言他是存在它的服务器进程中的,我们是通过远程调用访问了这个对象的状态。
     
    而在class Link中 next是一个数据成员,它是一个本地实例的值,不能代表另外地址空间中的对象。这意味着我们的队列链是在当前地址空间的,读取某个值是对当前地址空间的操作。
     
  5. Vs结构
     类比结构:
       类支持继承,类可以自引用,类可以有操作,类可以实现接口,类的这些额外的特性带来实现上的代价,无论是生成代码的尺寸还是运行时消耗的内存和cpu的周期数量。所以使用结构你可以使程序有更好的性能和使用更少的内存。
     
  6. 有操作的类
     类上的操作总是在调用者的地址空间中执行,也就是说类的操作时本地操作。
     
  7. 类在构架上的影响
    没有继承、只有数据成员的类不会带来构架问题。
    一旦你使用了有操作的类,你实际上就是使用客户端原生代码,因此你能够再享受到接口提供的实现透明性。当你能够控制部署环境是你应该使用有操作的类,如果不是这样你最好使用接口或者没有操作的类。
     
  8. 实现接口的类
    通过implements实现接口
     
    类型ID
    以全局::起头,加上你module的类型::module,加上自身名字结束。
     
     
    Object上的操作
    Ice_ping操作,测试对象是否可以到达
    Ice_isA
    Ice_ids
     
    本地类型
    任何slice定义都可以有local修饰符。如果用local修饰,slice编译器不会为相应类型生成整编代码。本地类型永远不能被远地访问。
原创粉丝点击