随笔-3  评论-4  文章-0  trackbacks-0
  2007年1月22日
PHP
java->j2ee->servlet/jsp

c#->.net->asp.net

c/c++->php

其实我觉得就网页本身的逻辑而言,面向对象不是必须的,php这样的过程性语言完全合适。但是对于分析需求、业务逻辑而言,OO的优势就很明显了,所以php4中引入、php5中基本完善的oo机制是符合发展趋势的。不过听说那帮大牛们并不是很关心phpoo的发展,仍是一竿子得钻研这个简单(简单得有点过)、高效的php,不知将来会是何种景观。

就我而言,除了浅浅的看过python觉得相当好以外,php已是我认为的Web编程首选了。
posted @ 2007-01-22 09:12 Sunus 阅读(409) | 评论 (0)编辑 收藏
  2007年1月12日
   Thinking in c++ 第一版的中文翻译实在是无法忍,偏偏我就有这么一本(不知道哪儿来的:P)。幸好读到了一个从前没意识到的问题,也算是值了:句柄类,也叫Cheshire Cat。
   问题背景是这样的:1)在极为安全的领域,即使核心实现已经封闭在库中不可见,但是头文件中的变量定义仍然可能会曝露一些内部信息; 2)在设计初期,实现部分固然需要经常变动,连头文件中变量定义也需要经常变动,因此在重编译的时候头文件也需要编译,有时候导致编译时间过长。句柄类可以解决这类问题:
//:HANDLE.H -- Handle Classes
#ifndef HANDLE_H_
#define HANDLE_H_

class handle {
  
struct cheshire; // Class declaration only
  cheshire* smile;
public:
  handle( );

  void doit( );
     ~handle( ); 
}
;
#endif // HANDLE_H_
   这是所有客户程序员都能看到的,其中struct cheshire是没有完全指定的类型说明或类说明,将用来存放真正的变量。在这种技术中,包含具体实现的结构主体被隐藏在实现文件中。
//:HANDLE.CPP -- Handle implementation
#include "handle.h"

//Define handle's implementation
struct handle:cheshire {
  
int i;
}
;

handle::handle() 
{
  smile
=(cheshire*)malloc(sizeof(cheshire));
  smile
->i=0;
}


void handle::doit() {
  
//do something with i
}


handle::
~handle() {
  free(smile);
}
   
   句柄类的使用就像任何类的使用一样,包括头文件,创建对象,发送信息。但是通过这样的设计,即隐藏了变量的设计,也使得实现作变动时无需重编译头文件。Bruce说虽然这并不是完美的信息隐蔽,但毕竟是一大进步。
posted @ 2007-01-12 19:18 Sunus 阅读(2380) | 评论 (1)编辑 收藏
  2007年1月11日
   在CoreJava 7 中提到C++中没有类似final的关键字,因此无法直接实现禁止类继承,但是 Cay S. Horstmann又说可以通过一些小技巧达到同样的效果,留作思考,但提示说用到虚基类。
   究竟是如何的“技巧”呢,很惭愧,虚基类忘得快没影了,于是Google大神之,摘录如下:

   下面的代码将会禁止继承:
class A;
class Lock {
friend 
class A;
private:
Lock() 
{}
}
;
class A : virtual public Lock {
// 
public:
A()
{}
A(
int t){}
}
;
现在,如果你尝试从类A派生其它类将会得到类似下面这样的编译错误。
class B : public A{}// Lock::Lock' : cannot access private member declared in class 'Lock'
   这是因为派生类都需要调用虚基类的构造函数,因此从A派生的B需要调用虚基类的构造函数(也就是Lock的构造函数),而Lock的构造函数是私有的,类B又不是Lock的友元,所以这将会产生一个编译错误。 
   如果我们移除类A派生时的virtual关键字,程序将会成功编译。这是因为在非虚拟继承中,任何类都可以调用直接父类中的构造函数。因此,在非虚拟继承中,B将调用它的直接父类A的构造函数而A将调用它的直接父类Lock的构造函数,这都是合法的。
posted @ 2007-01-11 18:27 Sunus 阅读(3106) | 评论 (3)编辑 收藏
仅列出标题