精华内容
下载资源
问答
  • 技术与设计的关系.

    2018-03-12 16:18:42
    技术与设计的关系一、技术的发展离不开设计 设计是推动技术发展的重要驱动力 设计是技术成果转化的桥梁和纽带 设计促进技术更新 二、技术的更新对设计产生重要影响
  • ①使用免洗型锡膏在空气中回流焊接时,基于焊盘设计的装配缺陷如图1所示。 图1 基于焊盘设计的装配缺陷(免洗型锡膏空气中回流)  在此装配工艺中,18种焊盘设计中的7种设计上(BDH,BEG,BFG,BFH,CDH,CEH&...
  • 论.NET反射、委托技术与设计模式关系 【原文】http://areliang.blogchina.com/2860041.html 反射技术与设计模式  反射(Reflection)是.NET中重要机制,通过放射,可以在运行时获得.NET中每一个类型...

    论.NET反射、委托技术与设计模式关系

    【原文】http://areliang.blogchina.com/2860041.html

                                          

    反射技术与设计模式

      反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。

      1、.NET可执行应用程序结构

      程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构。

      应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。

      程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。我们可以使用反射动态地创建类型的实例,将类型绑定到现有对象或从现有对象中获取类型,然后调用类型的方法或访问其字段和属性。反射通常具有以下用途。

      (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。

      (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。

      (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。

      (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。

      (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。

      (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。

      (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。

      (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

      System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,可以在运行时构造类型。

      反射也可用于创建称为类型浏览器的应用程序,使用户能够选择类型,然后查看有关选定类型的信息。

      此外,Jscript等语言编译器使用反射来构造符号表。System.Runtime.Serialization命名空间中的类使用反射来访问数据并确定要永久保存的字段,System.Runtime.Remoting命名空间中的类通过序列化来间接地使用反射。

      2、反射技术示例

      下面是反射技术的示例,我们可以在程序去得时动态实例化对象,获得对象的属性,并调用对象的方法。

    1Namespace ReflectionExample
    2{
    3 class Class1
    4 {
    5 [STAThread]
    6 static void Main (string [ ] args)
    7 {
    8  System.Console.WriteLine(“列出程序集中的所有类型”);
    9  Assembly a = Assembly.LoadFrom (“ReflectionExample.exe”);
    10  Type[ ] mytypes = a.GetTypes( );
    11
    12  Foreach (Type t in mytypes)
    13  {
    14   System.Console.WriteLine ( t.Name );
    15  }
    16  System.Console.ReadLine ( );
    17  System.Console.WriteLine (“列出HellWord中的所有方法” );
    18  Type ht = typeof(HelloWorld);
    19  MethodInfo[] mif = ht.GetMethods();
    20  foreach(MethodInfo mf in mif)
    21  {
    22   System.Console.WriteLine(mf.Name);
    23  }
    24  System.Console.ReadLine();
    25  System.Console.WriteLine("实例化HelloWorld,并调用SayHello方法");
    26  Object obj = Activator.CreateInstance(ht);
    27  string[] s = {"zhenlei"};
    28  Object bojName = Activator.CreateInstance(ht,s);
    29  BindingFlags flags = (BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance|BindingFlags.DeclaredOnly);
    30  MethodInfo msayhello = ht.GetMethod("SayHello");
    31  msayhello.Invoke(obj,null);
    32  msayhello.Invoke(objName,null);
    33  System.Console.ReadLine();
    34  }
    35 }
    36}
    1using System;
    2namespace ReflectionExample
    3{
    4  public class HelloWorld
    5  {
    6   string myName = null;
    7   public HelloWorld(string name)
    8   {
    9    myName = name;
    10   }
    11   public HelloWorld() : this(null)
    12   {}
    13   public string Name
    14   {
    15    get
    16    {
    17     return myName;
    18    }
    19   }
    20   public void SayHello()
    21   {
    22    if(myName == null)
    23    {
    24     System.Console.WriteLine("Hello World");
    25    }
    26    else
    27    {
    28     System.Console.WriteLine("Hello," + myName);
    29    }
    30   }
    31  }
    32}
    33

      3、在设计模式实现中使用反射技术

      采用反射技术可以简化工厂的实现。

      (1)工厂方法:通过反射可以将需要实现的子类名称传递给工厂方法,这样无须在子类中实现类的实例化。

      (2)抽象工厂:使用反射可以减少抽象工厂的子类。

      采用反射技术可以简化工厂代码的复杂程度,在.NET项目中,采用反射技术的工厂已经基本代替了工厂方法。

      采用反射技术可以极大地简化对象的生成,对以下设计模式的实现也有很大影响。

      (1)命令模式:可以采用命令的类型名称作为参数直接获得命令的实例,并且可以动态执行命令。

      (2)享元模式:采用反射技术实例化享元可以简化享元工厂。
    委托技术与设计模式

      委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。

      1、.NET中的委托技术

      .NET运行库支持称为“委托”的引用类型,其作用类似于C++中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于.NET Framework中的事件处理程序和回调函数。

      所有委托都从System.Delegate继承而来并且有一个调用列表,这是在调用委托时所执行方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法,没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。

      可以使用的委托Cimbine及Remove方法在其调用列表中添加和移除方法。若要调用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法异步调用委托。委托类的实现由运行库提供,而不由用户代码提供。

      委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。

      委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。

      委托实例的一个有用的属性是它既不知道,也不关心其封装方法所属类的详细信息,对它来说最重要的是这些方法与该委托的类型兼容。即只要方法的返回类型和参数表是相同的,则方法与委托类型兼容,方法的名称不一定要与委托类相同。

      定义和使用委托分为声明、实例化和调用3个步骤。委托用委托声明语法声明,如:

    delegate void myDelegate( );

      声明一个名为myDelegate的委托,它不带参数并且不返回任何结果,如:

    class Test
    {
     static void F( )
     {
      System.Console.WriteLine (“Test.F”);
     }
     static void Main ( )
     {
      myeDelegate d = new myDelegate (F);
      d ( );
     }
    }

      创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。当涉及其匿名特性时,委托才能真正显示出其效果,如:

    void MultiCall (myDelegate d, int count ) {
     for (int I = 0; I < count; I++) {
      d( );
     }
    }

      显示一个重复调用 myDelegate的MultiCall 方法,这个方法不知道,也不必知道myDelegate的目标方法的类型、该方法具有的可访问性或者是否为静态。对它来说最重要的是目标方法与myDelegate兼容。

      2、示例

      下面的例子说明了委托的实现,代码如下:

    1using System;
    2namespace DelegateExample
    3{
    4 public class TemplateMethod
    5 {
    6  public delegate float Comp(float a,float b);
    7  public Comp myComp;
    8  public TemplateMethod()
    9  {}
    10  public float DoComp(float[] f)
    11  {
    12   float nf = float.NaN;
    13   foreach(float df in f)
    14   {
    15    if(float.IsNaN(nf))
    16     nf = df;
    17    else
    18     nf = myComp(nf,df);
    19   }
    20   return nf;
    21  }
    22
    23 }
    24}

    委托技术与GOF设计模式中委托的关系

      需要指出的是,.NET中的委托技术与GOF在《设计模式》中所提列的委托的意图一致,但在实现方法上有相当大的区别。.NET中的委托更进一步地降低了对象间的耦合性,将静态的组合关系变为运行时的动态组合关系。

      GOF在《设计模式》中定义的委托是:“委托是一种组合方法,它使组合具有与继承同样的复用能力。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者(delegate),它类似于子类将请求交给它的父类处理。使用继承时,被继承的操作总能引用接受请求的对象。在C++中通过this成员变量,在Smalltalk中则通过self。委托方式为了得到同样的效果,接受请求的对象将自身传给被委托者(代理人),使被委托的操作可以引用接受请求的对象。”

      如果采用.NET的委托技术,上述结构可以更加灵活。Window不引用Rectangle即可实现Area的计算,为此首先声明一个计算面积的委托定义,示例代码如下:

    public delegate float Darea();

      然而在Window类中声明与这个代理一致的接口:

    class Window
    {
     public Darea Area;
    }

      这里不需要引用Rectangle类,只是在执行时动态绑定即可:

    Rectangle rc = new Rectangle();
    Window w = new Window();
    w.Area = new Darea(rc.Area);

      这样当调用w的Area时,实际调用的是Reactangel的Area方法。从实现意图上看,.NET的委托更好地实现了GOF所阐述的意图,结构上也更为灵活。但这两种委托解决的不是一个层面的问题,GOF的委托强调的是一种策略,而.NET和委托技术则是具体实现。

      委托技术与设计模式实现

      采用委托技术可以进一步实现用组合代替继承的思路,很多采用继承实现的关系可以采用委托实现。采用委托可以简化下列设计模式的使用。

      (1)模板方法:这种方法采用继承实现具体方法,采用委托可以动态实现方法的组合。

      (2)观察者:可以使用事件委托实现观察者与主题之间的通信。

      (3)中介者:使用委托可以去除工件与中介者之间的耦合关系。

    转载于:https://www.cnblogs.com/allanli/archive/2009/03/19/1416500.html

    展开全文
  • 论.NET反射、委托技术与设计模式关系 反射技术与设计模式   反射(Reflection)是.NET中重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)成员,包括方法...

    http://www.cnblogs.com/lemon0017/archive/2008/11/13/1332900.html

    论.NET反射、委托技术与设计模式关系

    反射技术与设计模式 

      反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。 

      1、.NET可执行应用程序结构 

      程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构。 

      应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。 

      程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。我们可以使用反射动态地创建类型的实例,将类型绑定到现有对象或从现有对象中获取类型,然后调用类型的方法或访问其字段和属性。反射通常具有以下用途。 

      (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 

      (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 

      (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数。 

      (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。 

      (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。

      (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。 

      (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。 

      (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。 

      System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,可以在运行时构造类型。 

      反射也可用于创建称为类型浏览器的应用程序,使用户能够选择类型,然后查看有关选定类型的信息。 

      此外,Jscript等语言编译器使用反射来构造符号表。System.Runtime.Serialization命名空间中的类使用反射来访问数据并确定要永久保存的字段,System.Runtime.Remoting命名空间中的类通过序列化来间接地使用反射。 

      2、反射技术示例 

      下面是反射技术的示例,我们可以在程序去得时动态实例化对象,获得对象的属性,并调用对象的方法。 

    1Namespace ReflectionExample 
    2{ 
    3 class Class1 
    4 { 
    5 [STAThread] 
    6 static void Main (string [ ] args) 
    7 { 
    8  System.Console.WriteLine(“列出程序集中的所有类型”); 
    9  Assembly a = Assembly.LoadFrom (“ReflectionExample.exe”); 
    10  Type[ ] mytypes = a.GetTypes( ); 
    11 
    12  Foreach (Type t in mytypes) 
    13  { 
    14   System.Console.WriteLine ( t.Name ); 
    15  } 
    16  System.Console.ReadLine ( ); 
    17  System.Console.WriteLine (“列出HellWord中的所有方法” ); 
    18  Type ht = typeof(HelloWorld); 
    19  MethodInfo[] mif = ht.GetMethods(); 
    20  foreach(MethodInfo mf in mif) 
    21  { 
    22   System.Console.WriteLine(mf.Name); 
    23  } 
    24  System.Console.ReadLine(); 
    25  System.Console.WriteLine("实例化HelloWorld,并调用SayHello方法"); 
    26  Object obj = Activator.CreateInstance(ht); 
    27  string[] s = {"zhenlei"}; 
    28  Object bojName = Activator.CreateInstance(ht,s); 
    29  BindingFlags flags = (BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance|BindingFlags.DeclaredOnly); 
    30  MethodInfo msayhello = ht.GetMethod("SayHello"); 
    31  msayhello.Invoke(obj,null); 
    32  msayhello.Invoke(objName,null); 
    33  System.Console.ReadLine(); 
    34  } 
    35 } 
    36} 
    1using System; 
    2namespace ReflectionExample 
    3{ 
    4  public class HelloWorld 
    5  { 
    6   string myName = null; 
    7   public HelloWorld(string name) 
    8   { 
    9    myName = name; 
    10   } 
    11   public HelloWorld() : this(null) 
    12   {} 
    13   public string Name 
    14   { 
    15    get 
    16    { 
    17     return myName; 
    18    } 
    19   } 
    20   public void SayHello() 
    21   { 
    22    if(myName == null) 
    23    { 
    24     System.Console.WriteLine("Hello World"); 
    25    } 
    26    else 
    27    { 
    28     System.Console.WriteLine("Hello," + myName); 
    29    } 
    30   } 
    31  } 
    32} 
    33

      3、在设计模式实现中使用反射技术 

      采用反射技术可以简化工厂的实现。 

      (1)工厂方法:通过反射可以将需要实现的子类名称传递给工厂方法,这样无须在子类中实现类的实例化。 

      (2)抽象工厂:使用反射可以减少抽象工厂的子类。 

      采用反射技术可以简化工厂代码的复杂程度,在.NET项目中,采用反射技术的工厂已经基本代替了工厂方法。 

      采用反射技术可以极大地简化对象的生成,对以下设计模式的实现也有很大影响。 

      (1)命令模式:可以采用命令的类型名称作为参数直接获得命令的实例,并且可以动态执行命令。 

      (2)享元模式:采用反射技术实例化享元可以简化享元工厂。
    委托技术与设计模式

      委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。

      1、.NET中的委托技术

      .NET运行库支持称为“委托”的引用类型,其作用类似于C++中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于.NET Framework中的事件处理程序和回调函数。

      所有委托都从System.Delegate继承而来并且有一个调用列表,这是在调用委托时所执行方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法,没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。

      可以使用的委托Cimbine及Remove方法在其调用列表中添加和移除方法。若要调用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法异步调用委托。委托类的实现由运行库提供,而不由用户代码提供。

      委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。

      委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。

      委托实例的一个有用的属性是它既不知道,也不关心其封装方法所属类的详细信息,对它来说最重要的是这些方法与该委托的类型兼容。即只要方法的返回类型和参数表是相同的,则方法与委托类型兼容,方法的名称不一定要与委托类相同。

      定义和使用委托分为声明、实例化和调用3个步骤。委托用委托声明语法声明,如:

    delegate void myDelegate( );

      声明一个名为myDelegate的委托,它不带参数并且不返回任何结果,如:

    class Test
    {
     static void F( ) 
     {
      System.Console.WriteLine (“Test.F”);
     }
     static void Main ( ) 
     {
      myeDelegate d = new myDelegate (F);
      d ( );
     }
    }

      创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。当涉及其匿名特性时,委托才能真正显示出其效果,如:

    void MultiCall (myDelegate d, int count ) {
     for (int I = 0; I < count; I++) {
      d( );
     }
    }

      显示一个重复调用 myDelegate的MultiCall 方法,这个方法不知道,也不必知道myDelegate的目标方法的类型、该方法具有的可访问性或者是否为静态。对它来说最重要的是目标方法与myDelegate兼容。

      2、示例

      下面的例子说明了委托的实现,代码如下:

    1using System;
    2namespace DelegateExample
    3{
    4 public class TemplateMethod
    5 {
    6  public delegate float Comp(float a,float b);
    7  public Comp myComp;
    8  public TemplateMethod()
    9  {}
    10  public float DoComp(float[] f)
    11  {
    12   float nf = float.NaN;
    13   foreach(float df in f)
    14   {
    15    if(float.IsNaN(nf))
    16     nf = df;
    17    else
    18     nf = myComp(nf,df);
    19   }
    20   return nf;
    21  }
    22
    23 }
    24}

     委托技术与GOF设计模式中委托的关系

      需要指出的是,.NET中的委托技术与GOF在《设计模式》中所提列的委托的意图一致,但在实现方法上有相当大的区别。.NET中的委托更进一步地降低了对象间的耦合性,将静态的组合关系变为运行时的动态组合关系。

      GOF在《设计模式》中定义的委托是:“委托是一种组合方法,它使组合具有与继承同样的复用能力。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者(delegate),它类似于子类将请求交给它的父类处理。使用继承时,被继承的操作总能引用接受请求的对象。在C++中通过this成员变量,在Smalltalk中则通过self。委托方式为了得到同样的效果,接受请求的对象将自身传给被委托者(代理人),使被委托的操作可以引用接受请求的对象。”

      如果采用.NET的委托技术,上述结构可以更加灵活。Window不引用Rectangle即可实现Area的计算,为此首先声明一个计算面积的委托定义,示例代码如下:

    public delegate float Darea();

      然而在Window类中声明与这个代理一致的接口:

    class Window

     public Darea Area;
    }

      这里不需要引用Rectangle类,只是在执行时动态绑定即可: 

    Rectangle rc = new Rectangle();
    Window w = new Window();
    w.Area = new Darea(rc.Area);

      这样当调用w的Area时,实际调用的是Reactangel的Area方法。从实现意图上看,.NET的委托更好地实现了GOF所阐述的意图,结构上也更为灵活。但这两种委托解决的不是一个层面的问题,GOF的委托强调的是一种策略,而.NET和委托技术则是具体实现。

      委托技术与设计模式实现

      采用委托技术可以进一步实现用组合代替继承的思路,很多采用继承实现的关系可以采用委托实现。采用委托可以简化下列设计模式的使用。

      (1)模板方法:这种方法采用继承实现具体方法,采用委托可以动态实现方法的组合。

      (2)观察者:可以使用事件委托实现观察者与主题之间的通信。

      (3)中介者:使用委托可以去除工件与中介者之间的耦合关系。

    展开全文
  • [架构设计]第五讲:技术、业务架构的关系对互联网感兴趣的同学,欢迎加入技术交流群:547147889

    [架构设计]第五讲:技术、业务与架构的关系

    对互联网感兴趣的同学,欢迎加入技术交流群:547147889

    展开全文
  • 基于数据挖掘技术的客户关系管理系统设计与实现 技术分类:商务智能 2009-9-24 0:00:00 作者:胡欣如 摘要:数据挖掘(Data Mining,又称数据库中知识发现(Knowledge Discovery in Database,KDD),是指从...

    基于数据挖掘技术的客户关系管理系统设计与实现

    技术分类:商务智能      2009-9-24 0:00:00    作者:胡欣如
    摘要:数据挖掘(Data Mining,又称数据库中的知识发现(Knowledge Discovery in Database,KDD),是指从大型数据库或数据仓库存储的大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含的、未知的、非平凡的及有潜在应用价值的信息或模式,它是数据库研究中的一个很有应用价值的新领域,融合了数据库、人工智能、机器学习、统计学等多个领域的理论和技术。

    引 言   

           数据挖掘(Data Mining,又称数据库中的知识发现(Knowledge Discovery in Database,KDD),是指从大型数据库或数据仓库存储的大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含的、未知的、非平凡的及有潜在应用价值的信息或模式,它是数据库研究中的一个很有应用价值的新领域,融合了数据库、人工智能、机器学习、统计学等多个领域的理论和技术。解决了在信息技术发展中存在拥有大量数据但缺乏有用信息的问题。完成了从业务数据到决策信息的转换。   

           CRM(Customer Relationship Management,CRM),即客户关系管理,是一个不断加强与顾客交流,不断了解顾客需求,并不断对产品及服务进行改进和提高以满足顾客的需求的连续的过程。从CRM软件所搜集的数据是最能帮助企业了解客户的,所谓的“一对一行”销也是注重在了解客户的需求,以便投其所好,以促成交易。数据是死的,但是如果能运用一些数学或统计模式,发现数据中存在的关系和规则,根据现有的数据预测未来的发展趋势,那么就可成为管理者的决策参考。

    1 系统架构   

           某汽车销售服务有限公司提供整车销售,汽车维修,汽车美容保养等一条龙服务。公司主要销售(CAMRY)凯美瑞系列车型。在日常的工作中面临着信息分布,业务流繁杂等问题。目前公司销售部门和客户服务部门工作人员仍进行传统的手录和使用Excel二次录入客户信息数据的工作,客户信息及业务信息查询需要翻查单据实现,工作复杂繁琐、效率低下。引入一套基于数据挖掘的CRM系统,旨在有效改变这一现状,软件除应具备通常CRM系统所具有的数据管理功能,还能够进行数据统计分析,筛选出有用的信息供给决策,以提高管理者判断与决策的科学性与准确性,从而最大限度挖掘企业潜力,提高企业效益。    系统由基础信息设置、客户信息维护、客户服务维护、客户信息查询、报表打印、数据挖掘、辅助工具、系统管理等模块组成,规划系统功能模块如下:   

          ·基础信息设置模块,包括:车型设置、整车颜色设置、服务类型设置、客户级别设置、客户满意程度设置。   

          ·客户信息模块,包括:企业客户信息、个人客户信息、企业客户业务往来、个人客户业务往来、企业邮件发送、个人邮件发送。   

          ·客户服务模块,该模块包括:客户反馈、客户投诉、客户反馈满意度分析、客户投诉满意度分析。   

          ·客户信息查询模块,包括:企业客户信息查询、个人客户信息查询、反馈查询、投诉查询。   

          ·数据挖掘模块,实现决策功能,运用数据挖掘的思想提供决策支持,包括:个人业务数据挖掘和企业业务数据挖掘两个模块。   

          ·打印报表模块.主要负责企业客户信息报表、个人客户信息报表、企业业务往来报表、个人业务往来报表、客户反馈报表、客户投拆报表。   

          ·辅助工具模块,该模块主要负责Word调用、Excel调用、计算器调用、登录互联网、工作备忘、区号邮编查询。   

          ·系统管理模块,该模块主要负责操作员管理(包括权限设置与密码修改)、日志查看(包括日志清理)、数据备份恢复、数据清空。

    2 数据挖掘在系统中的应用   

           根据1中的规划,基础信息设置、客户信息维护、客户服务维护、客户信息查询、报表打印、辅助工具、系统管理模块将为数据挖掘思想应用到系统之中提供了数据基础。由于篇幅限制,在这里略去了这些模块的实现过程。重点阐述数据挖掘模块的实现。   

           2.1 数据挖掘方法选型与数学建模   

           数据挖掘方法目前较为流行的由关联分析、序列模式分析、分类分析、聚类分析等。结合该汽车行业需求和数据特征,决定采用关联分析模型,理由如下:   

           其中关联分析能是挖掘隐藏在数据间的相互关系,它能发现数据库中形如80%的顾客在一次购买活动中购买商品A的同时可能会再购买商品B之类的知识。这对营销决策的意义是相当大的,也是最适用于该行业的挖掘模型。结合某汽车的行业需求和数据特征,决定采用关联分析模型。    假设在Y单业务往来中。整车销售业务A的顾客总共有X1人,汽车维修业务B的顾客的X2人,汽车保养C的顾客有X3人,保险上牌D的客户有X4人。同时办理A业务和B业务的人数为A∩B=Z12同时办理A业务和C业务的人数A∩C=Z13,同时办理A业务和D业务的人数为A∩D=Z14。同时办理B业务和C业务的人数为B∩C=Z23,同时办理B业务和D业务的人数为B∩D=Z24,同时办理c业务和D业务的人数为C∩D=Z34。根据关联分析的Apriori算法,其支持度为support(),置信度为confidence()。       

           由上可推出一条公式:support(A=>B)=ZAB/Y,confidence(A=>B)=ZAB/XA。编写程序使其自动运行得出结果为:    类似地可以设计其他数据挖掘设计,根据需求分析,我们设计的数据挖掘模块主要实现了以下功能。

           2.2 数据挖掘模块所实现的功能   

           2.2.1 业务往来统计功能

           主要实现基本的统计功能,从“业务往来”数据表中提取数据,统计出总业务量,总顾客量,各类型业务数量。设置动态数组X,用于记录各子项统计个数;设置动态数组Y,用于保存各子项统计的百分比,与最小置信度相关,通过Y数组与最小置信度输入框中的数据相比较,小于最小置信度的将不显示。设置动态数组Z,用于记录统计子项的项名,把统计数据和该数据所属项目对应起来。   

           2.2.2 关联分析功能的实现   

           利用2.1中推出的suppon(A=>B)=ZAB/Y,confidence(A=>B)=ZAB/XA和集合公式,编写循环算法自动执行。可以用于分析出顾客购买倾向,为后续或补充的销售及服务提供参考。如在表l中的数据中表示,汽车维修、汽车保养、保险上牌与整车销售有着密不可分的关系,是整车销售的后续服务。在顾客购买整车之后,商家可以向客户推荐维修、保养、上牌等服务,容易获得顾客的接受。而维修、保养与上牌之间的关联性则比较小。   

           2.2.3 集合分析功能的实现   

           利用程序之前建立的X数组,可以利用这个数组实现集合的运算,通过公式︱A∪B∪C︱=︱A︱+︱B︱+︱C︱-︱A∩B︱-︱A∩C︱-︱B∩C︱+︱A∩B∩C︱的变形计算出任意i种业务的并集。通过︱A∩B∩C∩D︱的公式计算出,所有业务的并集。    该功能可以帮助商家制定出合理可行的捆绑销售套餐,如表1的数据表明,愿意接受整车销售与汽车维修捆绑服务的人占了一半左右的比例,商家可以依据此信息推出其套餐优惠计划来吸引顾客和增加盈利。   

           2.2.4 客户购买特征分析功能的实现   

           主要是利用SQL Server 2000软件的跨表查询功能,将客户信息表和业务往来表进行联合分析。   

            该功能可以分析出不同客户的购买特征,从而针对不同类型的顾客,正确把握顾客的心态,制定出相应的推销策略。使推销行之有效,更有针对性。   

           例如我们设计了“个人业务数据挖掘模块”,分析可以得知男性买家相比女性买家更有购买力。所以在广告推销过程中,更要在男性顾客方面下足工夫,提高广告和推销活动的效率。而在男性选择车型时,可重点推销外型沉稳大方、行驶性能良好的凯美瑞240G车型。此车型在男性所购买的车型之中比例最大。而对于女性方面则可以推荐占37.5%的200E车型。这也有利于企业管理者更好的把握市场,及时准确地进货,减少成本风险。顾客对整车颜色偏好也可以在软件中体现出来,34.48%的紫钻黑则是男性的偏好颜色而女性则更钟情于珍珠白颜色车型。可以在展厅中放置较受欢迎的颜色车型,吸引顾客眼球。各年龄段购买情况的不同也可以准确的展示出来,这些都有利帮助商家更好的捕捉顾客的消费特征,提高推销成功率。   

           2.2.5 决策建议功能的实现   

           主要是利用前面4个功能所分析出来的信息进行用户自定义匹配。操作员可以选择不同类型的顾客,由系统预测出该顾客可能的购买行为和偏好,便于准确地制定推销策略。   

           此功能可以帮助业务员及时直观利用数据挖掘所得结果,针对不同类型的客户制定出相应的推销策略。

    3 结 论   

           在当今全球经济一体化大潮中,CRM已经成为一种企业生存必不可少的商业战略,它可以帮助企业实现利润最大化和提高企业的竞争力。将数据挖掘技术引入CRM系统,使数据挖掘技术和基本的商务过程关联起来,有助于企业利润与效率的提高;嵌套了数据挖掘技术的CRM系统可以极大地提高企业的竞争力。   

           本文所作的基于数据挖掘技术的客户关系管理系统,其功能基本符合用户需求,能够完成基本信息的输入和查询统计,各类相关报表的打印,客户满意度的图表分析,决策模块的实现。并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除。   

            当然,该项工作还处于比较初级阶段,联机文档还比较少,代码页不够精简,系统扩展性还不尽人意,这些有待进一步的研究和改善。

     

    展开全文
  • 要更好阐述软件人性化设计与技术含量的关系,个人认为应从开发软件的目的开始谈起,我们这里所指的软件应是给广大用户使用的商业软件,而绝大多数商业软件的开发目的都是给用户带来更大的商业价值,比如提高他们的...
  • 针对支持正向设计的设计系统企业设计能力关系问题,结合设计资源类型及集成技术成熟度方法创新性,提出设计能力衡量指标及其算法.设计能力衡量指标由设计流程完整率、设计工具完整率、设计准则完整率和设计数据使用...
  • 客户关系管理Customer Relationship Management 系统设计 现状需求 随着竞争加剧市场放开全球化和电子商务在业务环境上带来变化改变 着企业业已形成或正在建立营销体系日新月异信息技术剧烈地冲击着企业 ...
  • 反射技术与设计模式 反射(Reflection)是.NET中重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)成员,包括方法、属性、事件,以及构造函数等.还可以获得每个成员名称、...
  • 工程依赖技术的发展,技术是实现工程手段。技术比工程更依赖科学发展。也可以认为技术是建立在科学工程间桥梁。历史上,工程师在技术上是多面手,他需要解决产品设计与开发面临所有问题。 ...
  • 反射技术与设计模式 反射(Reflection)是.NET中重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员...
  • 世博会的历史也是融合于工业文明的现代设计的发展史,世博会代表了举办者的在经济、文化、...“后世博”时代的意义不仅仅在于对于经济、社会的巨大后续推动力,更为重要的是将会对与设计相关的诸多方面产生深深的影响.
  • 以下总结了八种电流线宽的关系公式,表和计算公式,虽然各不相同(大体相近),但大家可以在实际的PCB板设计中,综合考虑PCB板的大小,通过电流,选择一个合适的线宽。 一、PCB电流线宽 PCB载流能力的计算...
  • 北京航空航天大学学位论文 论文题目:科通CRM一客户关系管理系统的设计与实施 专 业:计算机技术 A 里夏-级LL遐题圭研究生Ai指导教师: 退 摘 要 本文目的在于探索信息化水平较低中小企业对先进管理经验利用途径...
  •  以下总结了八种电流线宽的关系公式,表和计算公式,虽然各不相同(大体相近),但大家可以在实际的PCB板设计中,综合考虑PCB板的大小,通过电流,选择一个合适的线宽。  一、PCB电流线宽  PCB载流能力的...
  • 反射技术与设计模式 反射(Reflection)是.NET中重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员...
  • 分布式系统特色

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,823
精华内容 3,129
关键字:

技术与设计的关系