精华内容
下载资源
问答
  • 这里有面向对象开发的几个核心的思想和概念 1、问题领域、对象、属性、状态、行为、方法、实现 问题领域: 指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场...
    这里有面向对象开发的几个核心的思想和概念

    1、问题领域、对象、属性、状态、行为、方法、实现

    问题领域:
    指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场等等,都可以使用软件来进行模拟,这些就是软件所针对的问题领域。

    对象:
    对象是对问题领域中的事物的一种抽象。
    1)所有的东西都是对象,万物皆对象,问题领域中的实体和概念都可以抽象为对象。
    2)世界上没有完全相同的两片叶子,每个对象都是唯一的,对象的唯一性来自于真实世界中的事物的唯一性,即使在系统中java的两个对象,内存地址也未必相同。
    3)每个对象具有属性和行为。
    4)每一个对象都具有状态,状态的意思就是在某一个时间点上,对象的各个属性的取值情况。
    5)对象都属于一个类,每个对象都是某一个类的实例,类是具有相同属性和行为的对象的集合,同一个类的所有的实例都具有相同的属性,表示他们的属性的含义是相同的,但是他们的状态未必是相同的,也就是属性的取值未必是一样的。

    2、类、类型
    类:
    类是一组具有相同属性和行为的对象的抽象。类以及类的关系构成了对象模型的主要内容。
    面向对象变成的主要任务就是定义对象模型中的各个类。
    对象是类的实例,类是对象的模板。

    3、消息、服务
    消息可以理解为参数,服务,就是方法返回的值。

    4、接口
    什么是接口?
    对象,通过接口对提供服务。在现实的世界中,接口是实体,但是在面向对象的范畴中,接口是一个抽象的概念,指的是系统对外提供的服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现的细节。对象是最小的子系统,每个对象都是服务提供者,因此每一个对象都具有接口。
    站在使用者的角度上,对象中所有向使用者公开方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务,使用者在获得服务的时候,不需要关心对象到底是如何实现服务的。
    接口,是实现系统之间松耦合的有力手段。
    计算机系统也是一个充分利用接口来提高系统松耦合的例子,接口还提高了系统的可扩展性。

    在java语言中,接口有两个方面的意思:
    1)接口是指概念性的接口,也就是系统对外提供的所有的服务,在对象中表现的是public类型的方法的声明。
    2)是指interface为关键字定义的实实在在的接口,也成为接口类型,用于明确的描述系统所提供的服务,能够更加清晰的把系统的实现细节与接口分离。

    5、封装、透明
    封装
    封装是指隐藏对象的属性和实现的细节,仅仅对外公开接口,封装能够带来的优点如下:
    1)便于使用者能够正确、方便的理解和使用系统,防止使用者错误修改系统的属性。
    2)有助于建立各个系统之间的松耦合关系,提高系统的独立性,当一个系统的实现发生变化的时候,只要她的接口不发生变化,就不会影响到其他的系统。
    3)提高系统的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。
    4)降低了构建大型系统的风险,就类似于搭积木一样,个别的系统不成功,但是代码还是可以被重用的。

    一个设计良好的系统会封装所有的实现细节,把它的接口与实现能够清晰的隔离起来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问控制机制来进行封装,这种机制能够控制对象的属性和方法的可访问性。在java语言中提供了如下四种方式的访问级别:
    public(公开)private(私有)protected(同一个包、子类)default(同一个包)
    把尽可能多的东西藏起来,然后对外提供间接的接口,如果封装的程度越高,那么相对的独立性就越高,这样使用起来就会更加的方便。
    把所有的属性封装起来,至少有几个好处:更符合客观世界规律、更灵活的控制属性访问级别、防止用户错误操作、有助于对象封装实现细节。

    6、抽象
    抽象
    从特定的角度出发,从已经存在的一些事物当中抽取我们所关注的细节,形成一个新的事物的思维过程。抽象是一种从具体到抽象、由复杂到简单的思维方式。
    三种类型的抽象:
    1)从问题领域到软件模型中的对象的抽象
    2)从对象到类的抽象
    3)从子类到父类的抽象

    在java语言中,抽象有两种意思:
    1)抽象,是一种思维过程,包含上面三种方式的抽象
    2)抽象,是一个形容词,可以用来修饰类以及方法,如果一个方法被abstract修饰的话,则说明这个方法没有被具体实现,如果一个类被abstract修饰,则说明这个是抽象类,不能被实例化。

    7、继承、扩展、覆盖
    在父类和子类之间同时存在着继承和扩展的关系。子类继承父类的属性以及方法,同时子类中还可以扩展出新的属性以及方法,并且还可以覆盖父类当中方法的实现方式。
    继承与扩展同时提高了系统的可重用性和可扩展性。
    继承与扩展导致了面向对象软件开发领域中的架构类软件系统的发展。

    如何在一些通用的软件架构的基础上进行扩展呢?
      这些通用的软件架构中都提供了一些扩展点,简单的说,这些扩展点就是为了让用户进行继承和扩展的类。这些类已经具备了一些功能,并且能够和软件中的其他的类能够进行紧密的协作,用户只需要创建这些类的子类,然后在这些子类中增加新的功能或者是重新实现某些功能,用户定义的子类能够和系统中原有的类进行和谐融洽的协作。
    比如:J2EE、Servlet、JSP、EJB、Struts、JSF、Spring这些都是一些通用的架构。

    8、组合
    组合 是一种用多个子系统来组装出复杂系统的有效的手段。
    对于一个组合系统,组合系统和他的子系统是聚集关系,子系统之间则是关联关系或者是依赖关系(在UML中的定义)
    面向对象的范畴中,组合具有以下的特点:
    1)在软件的分析和设计的阶段,简化为复杂系统建立对象的模型。在建立对象模型的时候,通常首先识别问题领域的粗粒度对象,然后对该对象进行分解,比较符合人类的思维。
    2)在软件编程的阶段中,假话创建复杂系统的过程,只需要分别创建独立的子系统,然后将其组合起来,就构成了一个复杂的系统。而且允许第三方参与系统的建设,提高了构架复杂系统的效率。
    3)向使用者隐藏系统的复杂度。
    4)提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂的系统当中。

    9、多态、动态绑定
    多态,是指系统A访问系统B提供的服务的时候,系统B可以通过多种方式来提供服务,而这一切对于系统A是透明的。

    动态绑定,一个接口=new 实现类,这个实现类在运行的时候并不知道,可能是实现类A,也可能是实现类B,java虚拟机的这种运行机制被称为动态绑定。
    抽象机制和动态绑定机制能够提高系统之间的松耦合性。

    需要注意的一点是:抽象机制是开发人员在开发过程当中使用的机制,但是动态帮顶机制是在java虚拟机运行的过程中提供的机制。
    展开全文
  • 面向对象方法,OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性... 面向对象开发的几个核心思想 1、问题领域、对象、属性、状态、行为、方法、实现 问题领域:  指软件系统所模拟的真实世界中的系统...

      面向对象方法,OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。Java主要特征:封装性,继承性,多态性.

    >>>> 面向对象开发的几个核心思想

    1、问题领域、对象、属性、状态、行为、方法、实现

    问题领域:
      指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场等等,都可以使用软件来进行模拟,这些就是软件所针对的问题领域。

    对象:对象是对问题领域中的事物的一种抽象。
    1)所有的东西都是对象,万物皆对象,问题领域中的实体和概念都可以抽象为对象。
    2)世界上没有完全相同的两片叶子,每个对象都是唯一的,对象的唯一性来自于真实世界中的事物的唯一性,即使在系统中java的两个对象,内存地址也未必相同。
    3)每个对象具有属性和行为。
    4)每一个对象都具有状态,状态的意思就是在某一个时间点上,对象的各个属性的取值情况。
    5)对象都属于一个类,每个对象都是某一个类的实例,类是具有相同属性和行为的对象的集合,同一个类的所有的实例都具有相同的属性,表示他们的属性的含义是相同的,但是他们的状态未必是相同的,也就是属性的取值未必是一样的。

    2、类、类型
    类:
     类是一组具有相同属性和行为的对象的抽象。类以及类的关系构成了对象模型的主要内容。
     面向对象变成的主要任务就是定义对象模型中的各个类。
     对象是类的实例,类是对象的模板。

    3、消息、服务
    消息可以理解为参数,服务,就是方法返回的值。

    4、接口
    什么是接口?
      对象,通过接口对提供服务。在现实的世界中,接口是实体,但是在面向对象的范畴中,接口是一个抽象的概念,指的是系统对外提供的服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现的细节。对象是最小的子系统,每个对象都是服务提供者,因此每一个对象都具有接口。
      站在使用者的角度上,对象中所有向使用者公开方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务,使用者在获得服务的时候,不需要关心对象到底是如何实现服务的。
      接口,是实现系统之间松耦合的有力手段。
      计算机系统也是一个充分利用接口来提高系统松耦合的例子,接口还提高了系统的可扩展性。

    在java语言中,接口有两个方面的意思:
      1)接口是指概念性的接口,也就是系统对外提供的所有的服务,在对象中表现的是public类型的方法的声明。
      2)是指interface为关键字定义的实实在在的接口,也成为接口类型,用于明确的描述系统所提供的服务,能够更加清晰的把系统的实现细节与接口分离。

    5、封装、透明
    封装
      封装是指隐藏对象的属性和实现的细节,仅仅对外公开接口,封装能够带来的优点如下:
    1)便于使用者能够正确、方便的理解和使用系统,防止使用者错误修改系统的属性。
    2)有助于建立各个系统之间的松耦合关系,提高系统的独立性,当一个系统的实现发生变化的时候,只要她的接口不发生变化,就不会影响到其他的系统。
    3)提高系统的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。
    4)降低了构建大型系统的风险,就类似于搭积木一样,个别的系统不成功,但是代码还是可以被重用的。

    一个设计良好的系统会封装所有的实现细节,把它的接口与实现能够清晰的隔离起来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问控制机制来进行封装,   这种机制能够控制对象的属性和方法的可访问性。在java语言中提供了如下四种方式的访问级别:
      public(公开)private(私有)protected(同一个包、子类)default(同一个包)
      把尽可能多的东西藏起来,然后对外提供间接的接口,如果封装的程度越高,那么相对的独立性就越高,这样使用起来就会更加的方便。
      把所有的属性封装起来,至少有几个好处:更符合客观世界规律、更灵活的控制属性访问级别、防止用户错误操作、有助于对象封装实现细节。

    6、抽象
    抽象:
      从特定的角度出发,从已经存在的一些事物当中抽取我们所关注的细节,形成一个新的事物的思维过程。抽象是一种从具体到抽象、由复杂到简单的思维方式。
      三种类型的抽象:
    1)从问题领域到软件模型中的对象的抽象
    2)从对象到类的抽象
    3)从子类到父类的抽象

    在java语言中,抽象有两种意思:
    1)抽象,是一种思维过程,包含上面三种方式的抽象
    2)抽象,是一个形容词,可以用来修饰类以及方法,如果一个方法被abstract修饰的话,则说明这个方法没有被具体实现,如果一个类被abstract修饰,则说明这个是抽象类,不能被实例化。

    7、继承、扩展、覆盖
      在父类和子类之间同时存在着继承和扩展的关系。子类继承父类的属性以及方法,同时子类中还可以扩展出新的属性以及方法,并且还可以覆盖父类当中方法的实现方式。
      继承与扩展同时提高了系统的可重用性和可扩展性。公有继承 私有继承 保护继承
      继承与扩展导致了面向对象软件开发领域中的架构类软件系统的发展。

    如何在一些通用的软件架构的基础上进行扩展呢?
      这些通用的软件架构中都提供了一些扩展点,简单的说,这些扩展点就是为了让用户进行继承和扩展的类。这些类已经具备了一些功能,并且能够和软件中的其他的类能够进行紧密的协作,用户只需要创建这些类的子类,然后在这些子类中增加新的功能或者是重新实现某些功能,用户定义的子类能够和系统中原有的类进行和谐融洽的协作。
      比如:J2EE、Servlet、JSP、EJB、Struts、JSF、Spring这些都是一些通用的架构。

    8、组合
       组合 是一种用多个子系统来组装出复杂系统的有效的手段。
      对于一个组合系统,组合系统和他的子系统是聚集关系,子系统之间则是关联关系或者是依赖关系(在UML中的定义)

    面向对象的范畴中,组合具有以下的特点:
     1)在软件的分析和设计的阶段,简化为复杂系统建立对象的模型。在建立对象模型的时候,通常首先识别问题领域的粗粒度对象,然后对该对象进行分解,比较符合人类的思维。
     2)在软件编程的阶段中,假话创建复杂系统的过程,只需要分别创建独立的子系统,然后将其组合起来,就构成了一个复杂的系统。而且允许第三方参与系统的建设,提高了构架复杂系统的效率。
     3)向使用者隐藏系统的复杂度。
     4)提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂的系统当中。

    9、多态、动态绑定
      多态,是指系统A访问系统B提供的服务的时候,系统B可以通过多种方式来提供服务,而这一切对于系统A是透明的。
      动态绑定,一个接口=new 实现类,这个实现类在运行的时候并不知道,可能是实现类A,也可能是实现类B,java虚拟机的这种运行机制被称为动态绑定。
      抽象机制和动态绑定机制能够提高系统之间的松耦合性。

    需要注意的一点是:抽象机制是开发人员在开发过程当中使用的机制,但是动态绑定机制是在java虚拟机运行的过程中提供的机制。

    >>>> 面向对象设计模式的几个核心思想: 高聚合低耦合

      面向对象,将世界归纳为一句话:万事万物皆对象。
      在没有面向对象之前,软件的可维护性是相当的烂,主要原因有四个:过于僵硬;过于脆弱;复用率低;黏度过高
      在软件设计过程当中无论那种设计思维都把可拓展性、灵活性、可插入性作为软件设计的一个基本的指导思想。

      设计模式的研究当中一个非常重要的概念就是:复用,那么什么是复用呢?软件的复用又有那些好处呢?复用又有那些基本的形式呢?复用和可拓展性、灵活性、可插入性又有那些关联或者关系呢?
      首先,复用就是重复使用的意思。软件复用带来了几个比较明显的好处:1,较高的生产率,2.较高的软件质量,3.恰当的使用复用可以改善软件的系统的可维护性。
      一个可复用的软件可以为将来的软件开发节省开发使用的时间和费用,一个越频繁使用的构件那么以后开发投资就相对越少。如果一个软件的复用路越高,那么发现它存在的缺陷就更快,从而也可以更为彻底的排除这种缺陷,这样很明显有利于系统的维护。更为重要的一点是,复用与系统的可维护行有着直接的关系。
      软件复用包括:代码的复制与粘贴;算法的复用;数据结构的复用,模型复用。

        在面向对象的语言当中数据的抽象化和继承的关系使得概念和定义可以复用;多态性使得实现和应用可以复用。而抽象化和封装可以保证和促进系统的可维护性。面向对象的复用的焦点不是函数不是算法等细节,而是体现在宏观意义上的商业逻辑的抽象的层次上,而这些是提高复用性和保证提高可维护性的关键所在。
        在面向对象的设计当中,抽象的层次应该是相对稳定的部分,也是复用的焦点,抽象模块相对于具体的模块独立,从而具体模块的内部结构的变化就不会影响到抽象层次的结构,因而抽象层次的模型复用就会较为容易。

      在面向对象的领域里边,可维护性复用是以设计原则和设计模式为基础的。
    系统的可拓展性由:开闭原则,里氏代换原则,依赖倒转原则和组合/聚合复用原则所保证。
    系统的灵活性由:  开闭原则、迪米特法则、接口隔离原则所保证
    系统的可插入性由:开闭原则、里氏代换原则,组合/聚合复用原则以及依赖倒转原则所保证。

    >>> 1.开闭原则
      开闭原则的核心我们总结为:对拓展开放,对修改关闭。说的直白点就是:在模块不被修改的的前提下可以被拓展。
     优点:
      通过拓展,可以提供新的行为,以满足新的需求,使其具有一定的灵活性和适应性。
      对已有模块,特别是最为重要的抽象模块不能再被修改,使得变化中的软件有一定的稳定性和延续性。
      在开闭原则当中最为关键的就是:抽象化。从另外一个角度讲就是所谓的“对可变性的封装原则”。这样就意味着有两点:
      1、可变性不应该散落到代码的角落,而应该白封装到对象里。继承不应当被看作是封装变化的方法,而应该被认为是从一般的对象生成特殊对象的方法。
      2、一种可变性,不应当与另一种可变性混合(设计模式的类图和继承结构一般都不会超过两层)。

    >>> 2.里氏代换原则是继承和复用的一个基石。
      里氏代换原则:任何基类可以出现的地方,子类一定可以出现。
      这个是对开闭原则的一个补充。开闭原则的关键是抽象化,里氏代换原则则是对实现抽象化具体步骤的规范化。

    >>> 3.依赖倒转原则
      核心是:依赖于抽象,而不依赖于具体的实现。开闭原则是目标,依赖倒转原则是一种手段。违反了依赖倒转原则就不可能达到开闭原则的要求。

    >>> 4.合成/聚合复用原则
      核心:尽量合成/聚合,而不是使用继承关系达到复用的目的。合成/聚合复用原则和里氏代换原则相辅相成,前者要求设计师首先考虑合成和聚合关系,后者则要求在使用继承关系的时候,必须确定这个关系符合这一条件。

      依赖也叫耦合,耦合分为三种,零耦合(如果两个类没有耦合关系),具体耦合(发生在两个具体的或者说是可以实例化的类之间,经由一个类对另一个具体类的直接引用造成的),抽象耦合(发生在一个具体的类和一个抽象类或者接口之间的,使两个必须发生关系的类之间存在最大的灵活性)。

    抽象不应当依赖与细节,而细节应当依赖于抽象。也就是针对接口编程,而不要针对实现编程。以抽象的方式耦合是依赖倒转原则的关键。里氏代换原则是依赖倒转原则的一个基础。
     
      组合/聚合复用原则
        核心:要尽量使用合成聚合,尽量不要使用继承。
        聚合用来表示“拥有”关系或者整体与部分的关系。而合成是一种表示强的多的“拥有”关系。上以篇博文中有提及这两者的区别。

    >>> 5.迪米特法则
        核心:一个软件的实体应当尽可能的减少和其他实体发生相互作用。
        迪米特法则所谈论的就是对对象之间的信息量、流线以及信息的影响的控制。在软件系统当中,一个模块设计的好不好的最主要也是最重要的标识就是该模块在多大程度上将自己的内部数据和其他有关的细节隐蔽起来。

      在类的划分上应当创建有弱耦合的类;
      在类的设计结构上,每一个类都应当尽量降低成员的访问权限,一个类不应当public自己的属性而应该提供取值和赋值的方法。 
    在类的设计上,只要有可能就应当设置成不变类。
    在对其他类的引用上,一个对象对其他对象的引用应当降到最低。


    >>> 6.接口隔离原则
      核心:客户端应该尽可能小的单独的接口,而不要提供大的总的接口。
      接口隔离原则和广义的迪米特法则都是对一个软件的实体与其他的软件实体的通信的限制。广义的迪米特法要求尽可能的减少通信的宽度和深度,接口隔离原则限制的是通信的宽度。遵循这两个法则会使一个系统软件,在功能拓展的过程当中,不会将修改的压力传递到其他对象。

        以上就是设计模式当中应该注意的几个原则,也是指导设计的一个关键性的原则。在设计软件的时候,应该充分的考虑这几个基本原则,同时也要考虑到软件或者其他工具本身,以及软件经济成本和时间成本等因素的一些制约,所以需要综合来考虑分析,用最合适的方式来开发和维护软件,避免成本虚高,设计过度的情形出现,总之,在允许的条件情况下用最合的的设计模式进行软件开发是最值得推荐的。

    展开全文
  • 企业管理系统有类型,分别是什么?


    当前,企业管理系统的应用很普遍,但是,你真的了解什么是企业管理系统吗?其实,从企业对管理系统的应用情况来看,答案是未必。为了帮助企业更好的应用企业管理系统,给企业带去更高的效益,在这里,给大家普及一下相关知识。


    1、企业管理系统的概念

    企业管理系统,是指建立在信息技术基础上,能够帮助企业实现大部分职能(包括决策、计划、组织、领导、监控、分析等)管理,并且能够提供实时、准确、完整的数据,为管理者提供决策依据、帮助企业提高工作效率的一种蕴含管理思想的软件。

    企业管理系统的流程设计简单明了,重视功能的全面性,流程的可控性,技术的先进性,更加注重系统的易用性。国内做的比较好的管理系统厂家有SAP、oracle、智邦国际等,大家可以去官网参考一下。


    2、企业管理系统分为哪些类型

    企业管理系统的划分标准通常为功能划分和行业划分。虽然从不同的角度,可以分为不同的类型,但是,都是以帮助企业实现快捷高效管理和办公为目的。

    常见的企业管理系统,如果按照其功能来划分的话,包括ERP(企业资源计划系统)、CRM(客户关系管理系统)、OA(办公自动化系统)、生产管理系统,进销存管理系统,项目管理系统、HR(人力资源管理系统)、财务管理系统等。

    如果按照行业来划分的话,可分为生产制造管理系统、建筑管理系统、物流管理系统、批发贸易管理系统、租赁管理系统、教育管理系统、互联网管理系统等等。


    1)ERP(企业资源计划系统)

    ERP(EnterpriseResource Planning)企业资源计划系统,是以全面系统化的管理思想为基础,帮助企业实现各部门的便捷管理,为决策层及员工提供决策依据并提高工作效率的企业管理系统软件。适用于管理流程成熟、顺畅,有各部门全方位管理需求的企业。国内市场做得比较好的ERP管理系统,大家可以参考oracle、智邦国际等厂商的产品。


    2)CRM(客户关系管理系统)

    CRM(CustomerRelationship Management)客户关系管理系统,是通过数据统计和数据挖掘、以及呼叫平台等客户管理平台的智能化管理,为企业提供业务自动化管理的软件系统,以“客户”为中心进行统筹化管理,通过深入的客户数据分析来更好的满足客户、跟进客户等,帮助企业提高业务效益,促进企业更好的管理和发展。适用于批发、贸易、销售型等有业务往来和需求的各行企业。


    3)OA(办公自动化系统)

    OA(Office Automation)办公自动化管理系统,是基于企业内部人员方便快捷地共享信息,高效地协同工作为目的,帮助企业实现网上办公的高级阶段;能够帮助企业实现协同化的高效办公,适用于所有企业。


    4)生产管理软件系统

    生产管理软件是针对生产制造企业而开发,能够帮助企业建立一个规范、准确、实时的生产数据库,轻松实现生产业务、库存业务等的一体化管理。能够帮助企业跟踪整个生产过程,科学管理生产物料,同时还可以帮助企业管理者有效控制生产成本、把控库存环节,避免库存积压,做到快速的市场反应。适用于所有从事产品制造及有库存管理的企业。


    5)进销存管理软件系统

    进销存系统,集采购、销售、存储管理于一体,提供订单、采购、销售、退货、库存、往来发票、往来账款等管理,实现企业对采购(进)、入库(存)、销售(销)过程的动态高效管理。适用于有进销存业务的企业。


    6)项目管理软件系统

    项目管理系统,是指在有限的资源约束下,对项目涉及的全部工作进行有效管理的软件系统。它从项目的投资决策开始到项目结束的全过程,进行计划、组织、指挥、协调、控制和评价,来帮助企业高效的实现项目预定目标。适用于项目型和业务周期长的企业。


    不管哪种企业管理系统,对企业而言,都是经营管理必不可少的得力助手,如果大家感兴趣,可以参考SAP、oracle、智邦国际等品牌厂商的企业管理系统。

    展开全文
  • 软件架构发展的几个阶段

    千次阅读 2009-04-29 15:22:00
    软件架构发展的几个阶段 1.基础研究阶段(1985年~1994年) 从20世纪60年代到20世纪80年代中期,软件系统的设计人员就已经习惯使用一些没有统一格式和语义的图线来描述系统的结构。当然,这样对所设计系统的表述是...

    软件架构发展的几个阶段

     

     1.基础研究阶段(1985年~1994年)
        从20世纪60年代到20世纪80年代中期,软件系统的设计人员就已经习惯使用一些没有统一格式和语义的图线来描述系统的结构。当然,这样对所设计系统的表述是一种很直观和容易理解的下意识的做法。虽然这样的做法已经有二十几年的历史,长期的实践经验也使这些设计人员认识到:虽然描述的是各自负责的不同类型的系统,但在描述风格和手段方面却有着很多共性的东西。更重要的是,不同系统之间也有着很多设计手段或风格上的共性。不幸的是,大家依旧使用各自的办法、各自的思路和设计手段来解决相似的问题。这样花样百出的系统结构描述和设计方式已经开始被当时的软件工程界接受为“架构”。但是,系统化的、风格通用的、严谨而且是结构化可重用的软件系统设计方法并没有被总结出来。
        具有里程碑意义的是,从20世纪80年代中期开始,一些重要的基本思想和基础概念开始浮出水面。这些重要的思想包括:将数据/信息隐藏和封装、利用抽象数据类型、以一系列封装的黑盒元素组成软件结构等。软件设计就是从这些重要的基础概念(有趣的是,这些基础概念也是经过了Redwine/Riddle模型所界定了15年到20年的演化历程)开始了自己的辉煌历程。当今最为著名的所谓面向对象的软件设计和开发就是来源于这些基础思想(当然,那是90年代以后的事了)。Dijkstra和Parnas在他们各自的著作里详尽阐述了这些通过自己多年实践观察所得来的重要思想。但是,这些基础概念不足以解决软件系统设计中遇到的其他典型问题,例如:如何解决模块之间的依赖性?如何使设计有利于设计和代码的维护和扩展?
        从20世纪80年代晚期开始,软件设计界开始尝试总结一些为了解决特定行业、特定问题所采用的具有明显针对性的设计手段和设计结构。试图探索出为了开发这样的特定软件系统,在结构设计时所带来的经验;同时总结出同类系统可重用的设计手法及其优缺点。这个时期的主要代表Louis Coglianese和E. Mettala分别在他们的研究结果中阐述了在特定的产品线环境以及特定的应用领域内的经验和分析。例如:航空电子工业领域、导弹控制领域。
        就在同一时期,其他的相关研究也正逐渐起步。这些研究的目的是试图从那些非正式、不标准的经验知识中,提炼和组织出构造软件架构可利用的、相似的问题解决手段和设计风格。这样,研究的成果就可以被不同的领域、在解决相似的问题时所重用。这些研究都是针对当时一些著名系统进行分析和总结的,试图识别出那些通用的系统架构风格和设计手法。其中,由Gregory Andrews领导的研究小组,分析和识别了很多不同类型系统的架构形式;由Robert Allen和David Garlan领导的研究小组,尝试找到和应用一些通用的方法来描述不同类型的系统结构。他们的不懈努力最终奠定了后人前进的基石。1992年以后,后人在他们研究成果的基础上,完善和建立了一些著名的系统架构风格,例如:pipe-filter架构风格、repository架构风格、隐式调用、流程协同等。他们的研究成果和基础思想,直到今天还被很多文章引用。
    2.概念确立阶段(1992年~1996年)
        从1992年至1996年,人类在软件架构方面的发展历程明显进入了新的一个重要阶段:架构基本概念和模型的确立。它是以五个方面的长足进展为标志的:架构描述语言的发展、初步的架构表述及分析规则的制定、架构元素及架构风格的分类研究、架构的评估方法(例如SAAM)、可借鉴的架构视角(例如4+1视角)。处于这个阶段的人们下意识地把主要的精力放在了所有软件系统结构中可能具有的共性方面。希望通过总结性的研究,发现那些在实践中反复出现的、具有共性的结构;并且能够把这些发现以比较严格的逻辑和规则统一描述出来,以方便业界同行的交流、改进和重用。
        以R.N.Taylor为代表,软件架构描述语言(ADL)方面的众多研究成果,成为了充实架构各个细节方面的强有力的媒介和载体。这个时期出现了很多架构描述语言,基本上都是以实践为根据,着重强调如何以缜密的逻辑方式来表述一些软件系统的组织结构。其中比较著名的包括:由David Garlan 领导的Aesop语言,它揭示了不同架构风格所具有的不同特征;由美国加州大学N. Medvidovic领导的C2语言,它揭示了基于事件处理的架构设计的魅力;由英国伦敦皇家大学J. Magee领导的Darwin语言,它揭示了动态分布式系统设计风格的实践;由P. Blinn与S. Vestal协同发布的Meta-H,它成为了实时系统设计在航空控制领域的经典;D.C. Luckham为架构描述语言家族增添了著名的Rapide语言,它为大家阐述了如何模拟和分析系统结构中动态行为的最佳实践;作为基于构件的系统,Robert Allen和David Garlan在1994年为业界提供了近乎完美的描述构件、构件端口、连接器、角色、交互的架构描述语言——Wright。我们还能举出那个时期其他很多的成就,例如Acme描述语言、UniCon描述语言等。
        架构表述及分析规则的制定是概念确立阶段的另外一个重要标志。它的完善也使架构描述语言得到了发展。这些规则有时很好地在架构描述语言中得到了应用。其中Darwin语言、Rapide语言和Wright语言就是表述规则和表述语言的和谐集成。但是,同时期也有一些其他人制定的架构表述规则(例如Robert Allen领导制定的表述规则),它们没有和某种语言结合,而是主要用来描述架构风格的;Kevin Sullivan提出的分析规则,可以用来分析特定的一些架构模型(比如说基于构件的架构模型)。C. Locke在一些应用领域分析方面也提出了自己的分析规则。后来,P. Kruchten认识到,只有提炼和总结上述各种规则,才能使架构分析更加趋于完善,同时也间接地帮助客户规范对系统的需求。
        架构元素及架构风格分类的研究同时在概念确立阶段得到了长足的发展。其中,Mary Shaw 与Paul Clements提出的一些架构风格的分类原则和各种架构风格的实际应用场景分析,成为了后人继续研究的基础。这个时期针对架构元素及架构风格的研究,已经开始尝试运用我们今天所运用的方式来进行表述,即设计模式的表述方式。其中具有里程碑性质的成果,包括Gang of four(即中国架构界俗称的“四人帮”)最著名的23个设计模式的成果,包括Frank Buschmann通过多年实践获取的经典设计模式和设计理念,还包括Mary Shaw和David Garlan为软件架构未来的发展所总结出的优秀架构风格与设计实践。
        Redwine/Riddle模型表明,在概念确立阶段还需要不断地提炼和完善所研究问题的结构。架构评估技术和方法就是在这个时期应运而生的。早期的架构设计人员通过自己长年的实践经验意识到:要设计一个架构,并检验该架构的有效性,一般是先明确该系统在质量方面的要求(即要解决的问题),然后从众多候选问题的解决方法中选用最适当的方法,这样的过程就是后来架构领域经常提到的一个用语——“设计决策”。只有系统在质量方面的要求与设计决策完全对应起来,才能确保该系统架构是有效的。所以该时期出现的一些常用方法有:Richard W. Selby与Ronald Reimer提出的衡量大型软件系统内各个部件互联关系的标准;AT&T公司提供给架构师的检查列表;C.Smith提出的基于系统的不同属性要求(例如性能要求)而可以采用的架构分析评估方法等。综合上面这些经验,R.Kazman等人在1994年汇总形成了更为通用的架构评估方法SAAM(Software Architecture Analysis Method)。
        概念确立阶段的最后的一个重要实践总结,是为后人发扬光大的“架构视角(Architecture View)”概念。其实,早在1974年,D. L. Parnas在《On a “buzzword”: hierarchical structure》一文中就已经为架构视角的研究开创了先河。他在对众多软件系统进行研究后提出了自己的成果:不同的软件系统运用不同形式的结构来构建和表述,是因为不同的构建形式能够满足不同的工程需求和目标。之后,架构视角的研究本身也经历了自己完整的Redwine/Riddle周期。期间出现了众多高质量的研究结果,当中最著名的是P. Kruchten在1995年提出的“4+1”视角,他为以后的架构实践奠定了坚实的基础。当今设计领域经常应用的那些UML视图,就是一个很典型的例子。
        1992年至1996年期间,国际上开始组织众多国际会议(例如软件设计国际大会),明显地完成了Redwine/Riddle模型中概念确立阶段的职能:沟通基本思想和概念并形成统一的认知。这些会议成为软件架构领域内从业人员的大家庭。为了有效地组织和确立研究团队、密切配合解决各个具体的子问题、逐步明确未来的研究方向、划分研究领域,国际软件架构研究会在1995年正式成立。在该组织的带领下,从1995年开始,召开了一系列国际软件架构会议,成为大家发表和讨论架构领域最新研究成果的大论坛。

    展开全文
  • MVC到底分几层?

    千次阅读 2016-09-05 16:14:29
    在技术分享课上,小组成员比较了Thinkjs与Express,说Thinkjs...其实,这是一混淆逻辑的说话,MVC是一种复合的设计模式,而分层则是一种降低耦合的架构设计思想,这两者本来风牛马不相及,然而随着Struts、Spring MV
  • 不幸的是,软件的本质是逻辑,解决方案的设计是要借助某种解决问题或编程的思想的。本文试图从抽象层面概括一点编程思想方面的东西。  一 c语言  1、相关概念:实模式、保护模式、调度、中断、调用栈、回调...
  • 编程思想

    千次阅读 2018-11-07 11:14:13
    什么是编程思想?答案可能很会复杂,但也可以很简单。一句话来讲就是,用计算机来解决人们实际问题的...那么学习计算机该如何入手,也是很多初学者犯难的一问题,特别是对与非计算机专业的人来说更是如此。面对...
  • 编程思想之消息机制

    万次阅读 多人点赞 2015-05-07 23:01:51
    在一个半山腰县立高中的大院坝里,在一个校园内的南墙根下,按班级排起了十几个纵队的年轻男女,各班的值日生正忙碌地给众人分发饭菜…… 菜分为甲、乙、丙三等,甲菜以土豆、白菜、粉条为主,还有可人大肉片,乙菜...
  • 【matlab】GUI 新手入门——最基本的几个概念

    万次阅读 多人点赞 2018-10-23 00:06:42
    1、从最简单的开始 编程的基本思想是:我执行一个操作,程序做出一个反应。...“做出一个反应”包括计算、储存在哪里、贴个图出来、显示...几个基本概念:  CallBack: 最常用的。点击按钮时,按钮下的Callback就会...
  • java中几个主流的数据库连接池

    万次阅读 多人点赞 2018-08-12 19:12:03
    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、...其他种池的设计思想也是如此,池技术的优势是...
  • Spring的几个经典常见面试题

    万次阅读 多人点赞 2019-06-01 01:03:37
    Spring 官网列出的 Spring 的 6 特征: 核心技术 :依赖注入(DI),AOP,事件(events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试 :模拟对象,TestContext框架,Spring MVC 测试,WebTestClient。 数据...
  • 前端组件化思想

    万次阅读 多人点赞 2018-02-27 09:59:14
      是的,前端越来越简单了,但也越来越复杂了—简单到你可以用一Github的starter搭建一框架,集成所有的全家桶,涵盖单元测试和功能测试,包括部署以及发布,甚至你开发时使用的UI库都让你写不了几行c...
  • 浅谈OO思想

    万次阅读 2016-01-26 09:47:39
    最近看到公司评级中,大量提到了OO思想,特别是开发,虽对...先说什么是OO(Object oriented)翻译过来就是面向对象,它包括有OOA面向对象的分析,OOD面向对象的设计,OOP面向对象的实现这几个方面,这几方面包含追M...
  • Spring--AOP中的几个名词

    千次阅读 热门讨论 2013-01-20 20:50:16
    这篇主要介绍SpringAOP的几个概念和一般用法,不再具体细说每个名词的来源,从用法中读者应该就会体会到。下面用三峡大坝作为例子,通俗的来理解几个生涩的名词。 场景:为了合理利用长江丰富水资源,要在长江流域...
  • 程序设计思想

    千次阅读 2018-08-17 17:22:49
    面向过程设计时,将整个程序切分成几个函数模块,每一个模块负责解决一个问题。 面向对象编程 OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法(Method)。面向对象的程序设计把计算机程序视为一...
  • 计算机语言的种分类

    万次阅读 2017-10-31 12:39:18
    常见的种分类 高级语言和低级语言 动态类型和静态类型 强制类型和弱类型 编译型,解释型,半编译半解释 面向对象型和面向过程型
  • 编程思想和网络协议处理

    千次阅读 2014-04-12 09:05:14
    最近发生了4件事1.JAVA编程思想最近在看《JAVA编程思想》,赐予我思想吧,我要编程,字字珠玑,遍地思想啊!2.最近在实现一协议如何判断一段数据是一IP数据报,这问题很简单,但是暴露的却是一大问题。引发...
  • iOS上实现链式编程比较好的框架就是Masonry,通过查看Masonry源码,我们发现,每一函数返回类型都是一Block变量,然后Block变量中返回的内容就是当前对象本身。这样来实现通过点调用,直接上实例,实现一简单...
  • 这一篇博客,主要分为以下几个部分: 1、OpenStack API的类型,通过这一部分学习,使大家基本了解OpenStack API的各种类型,虽然粗陋,但是非常有助于大家对于代码的理解。 2、service、manager、driver之间的关系,...
  • 服务的三种类型

    千次阅读 2019-08-04 20:29:07
    一般认为服务有以下三种主要的表现类型: 1. 工具服务 工具服务(Utility Service)代表可重用服务,区别业务模型。作为应用程序与技术基础设施之间的交叉点,工具服务的特点是业务领域无关,本质是面向技术、具备...
  • 回复几个问题

    万次阅读 多人点赞 2010-09-14 22:41:00
    上周末跟老朋友聚会,谈到技术的时候,有一共识,软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序员。多年以来,主流语言和系统的很多改进,其目的都是...
  • * 思想:先部分反转,后整体反转 * @param from * @param index * @return */ public static String leftMoveIndex (String from, int index){ String first = from.substring( 0 ,index); ...
  • LeNet论文的翻译与CNN三大核心思想的解读

    万次阅读 多人点赞 2017-05-01 23:20:34
    LeNet论文的翻译与CNN三大核心思想的解读
  • 编程思想之多线程与多进程(4)——C++中的多线程

    万次阅读 多人点赞 2015-07-10 21:48:18
    《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,《编程思想之多线程与多进程(2)——线程优先级与线程安全》一文讲了线程安全(各种同步锁)...
  • 注意力机制的基本思想和实现原理(很详细)

    万次阅读 多人点赞 2018-05-25 10:56:01
    注意力模型最近年在深度学习各个领域被广泛使用,无论是图像处理、语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影。所以,了解注意力机制的工作原理对于关注深度学习技术...
  • Java编程思想精彩评注分享之二

    千次阅读 2011-06-28 10:07:00
    学习一门编程语言,首先需要了解的是它的设计思想。而学习Java语言,最重要的也是了解Java语言的设计精髓——即面向对象... hashCode值必须是一int型,这里是常用的种数据类型的hash算法。可以参考这些hash来
  • C#之浅析面向对象编程思想(一)

    千次阅读 2015-02-02 14:49:11
    纵观MicroSoft公司的种主流语言,C是面向过程,VB既有面向过程也有面向对象的特性,而C#则是纯粹的面向对象的编程语言。在UML的学习过程中,画类图、对象图的时候面向对象的思想就已经用到了具体的学习中,而C#的...
  • 几个常用算法的适应场景及其优缺点(非常好)

    万次阅读 多人点赞 2016-10-25 10:03:58
    本文主要回顾下几个常用算法的适应场景及其优缺点! 机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验...
  • 《Java编程思想》 作者:Bruce Eckel 虽然这本书是经典,但是对于一入门java,又没有其他编程经验的人来讲,实在难以看懂,前前后后看了三遍。 什么都不懂的时候硬着头皮看,没看完,看了前面忘了后面,中间很...
  • 如何通俗理解设计模式及其思想

    万次阅读 多人点赞 2018-07-08 20:36:52
    不同类型的设计模式相互组合——最终展示出来的是一完整的架构设计体系 。这种设计模式复杂组合带来的好处是: 高内聚,低耦合 ,这使得库本身的拓展非常简单,同时也非常便于单元测试。 当然,对于通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 310,600
精华内容 124,240
关键字:

思想分几个类型