当前位置: 首页 > news >正文

wordpress文章列分页/廊坊推广seo霸屏

wordpress文章列分页,廊坊推广seo霸屏,网站建设增值税税率是多少,南京建设人才网站《敏捷软件开发 原则、模式与实践(c#版)》 第9章 OCP:开放--封闭原则 定义: "软件实体(类、模块、函数等)应该是可以扩展的,但是不可以修改。"(P93) OCP概述 遵…

 

《敏捷软件开发 原则、模式与实践(c#版)》

第9章 OCP:开放--封闭原则

 定义:

    "软件实体(类、模块、函数等)应该是可以扩展的,但是不可以修改。"(P93)

OCP概述

    遵循开放--封闭原则设计出的模块具有两个主要的特征。它们是

    (1)对于扩展是开放的(open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。换句话说,我们可以改变模块的功能。

    (2)对于修改是封闭的(closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者是.EXE文件,都无需改动。

    这两个特征好像是互相矛盾的。扩展模块行为的通常方式,就是修改该模块的源代码,不允许修改的模块常常都认为具有固定的行为。

    怎样可能在不改动模块源代码的情况下去更改它的行为呢?如果不更改一个模块,又怎么能够去改变它的功能呢?

    答案就是 抽象。在C#或者其它任何的OOPL(面向对象程序设计语言)中,可以创建出固定却能够描述一组任意个可能行为的抽象体。这个抽象体就是抽象基类。而这一组任意个可能的行为则表现为可能的派生类。

    模块可能对抽象体进行操作。由于模块依赖于一个固定的抽象体,所以它对于更改可以是封闭的。同事,通过这个抽象体派生,可以扩展此模块的行为。

 Shape 应用程序

    Shape示例在许多讲述面向对象设计的书中都提到过。这个声明狼藉的例子常常用来展示多态的工作原理。不过,这次我们将使用它来阐明OCP。

    我们有一个需要在标准的GUI上绘制圆和正方形的应用程序。圆和正方形必须要按照特定的顺序绘制。我们将创建一个列表,列表由按照适当的顺序排列的圆和正方形组成,程序遍历该列表,依次绘制出每个圆和正方形。

 

    A 下面的代码是一个基于C语言的实现,它采用了不遵循OCP的过程化方法。

ContractedBlock.gifExpandedBlockStart.gifCode
ExpandedBlockStart.gifContractedBlock.gif/**//*
 * Language: C
 * Shape 示例程序
 
*/


//-- shape.h --------------------
ExpandedBlockStart.gifContractedBlock.gif
enum SharpType {cirle,square};
struct Sharp
ExpandedBlockStart.gifContractedBlock.gif
{
   ShapeType itsType;
}
;

//-- cirle.h --------------------
struct Cirle
ExpandedBlockStart.gifContractedBlock.gif
{
   ShapeType itsType;
   
double itsRadius;
   Point itsCenter;
}
;

void DrawCirle(struct Circle*);

//-- square.h --------------------
struct Square
ExpandedBlockStart.gifContractedBlock.gif
{
   ShapeType itsType;
   
double itsSide;
   Point itsTopLeft;
}
;

void DrawSquare(Struct Square*);

//-- drawAllShapes.cc --------------------
typedef struct Shape *ShapePointer;

void DrawAllShapes(ShapePointer list[],int n)
ExpandedBlockStart.gifContractedBlock.gif
{
   
int i;
   
for(i=0;i<n;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif   
{
      
struct Shape* s = list[i];
      
switch(s->itsType)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
{
      
case square:
         DrawSquare((
struct Square*)s);
      
break;
      
      
case cirle:
         DrawCirle((
struct Cirle*)s);
      
break;
      }

   }

}

 

 

    B 下面的代码是一个基于C#语言的实现,它采用了遵循OCP的过程化方法。

ContractedBlock.gifExpandedBlockStart.gifCode
ExpandedBlockStart.gifContractedBlock.gif/**//*
 * Language: C#
 * Shape 示例程序
 
*/


public interface Shape
ExpandedBlockStart.gifContractedBlock.gif
{
   
void Draw();
}


public class Square : Shape
ExpandedBlockStart.gifContractedBlock.gif
{
   
public void Draw()
ExpandedSubBlockStart.gifContractedSubBlock.gif   
{
      
//draw a square
   }

}


public class Circle: Shape
ExpandedBlockStart.gifContractedBlock.gif
{
   
public void Draw()
ExpandedSubBlockStart.gifContractedSubBlock.gif   
{
      
//draw a circle
   }

}



public void DrawAllShapes(IList shapes)
ExpandedBlockStart.gifContractedBlock.gif
{
   
foreach(Shape shape in shapes)
ExpandedSubBlockStart.gifContractedSubBlock.gif   

      shape.Draw();
   }

}

 

http://www.jmfq.cn/news/4945411.html

相关文章:

  • 深圳宝安高端网站建设报价/站长工具seo排名查询
  • 石家庄做网站哪家公司好/指数函数图像
  • 怎么制作网站客服/阿里云免费域名
  • 网站实施要求/网络营销推广要求
  • 赌博假网站这么做/软文公司代写
  • 丹徒网站建设多少钱/爱站网备案查询
  • 营销型企业网站的建设方案/百度一下你就知道原版
  • 营销型企业网站建设案例/做网络推广工作怎么样
  • 南和邢台网站制作/目前搜索引擎排名
  • 如何查看网站是否开启gzip/seo算法是什么
  • 西安网站建设怎样/福州百度快速优化
  • 如果网站不备案/搜索引擎关键词优化有哪些技巧
  • 公司注册网站需要什么条件/郴州网络推广外包公司
  • 物联网平台层/宁波网站关键词优化排名
  • 常见的网站开发工具/接app推广接单平台
  • wordpress首页循环/seo关键词优化排名公司
  • 晋江网站建设价格多少/超级优化
  • 如何做企业网站建设/网店代运营诈骗
  • 网站业务流程设计/百度云建站
  • seo 能提高网站速度吗/淘宝网站的推广与优化
  • 网站百度网盘/引擎搜索网站
  • 深圳哪家做网站比较好/精准客源引流平台
  • 网站虚拟域名/北京网站建设专业公司
  • 网站空间哪家好/专注于seo顾问
  • 手机640的设计稿做网站/宝鸡seo优化
  • 怎么做产品的网站/百度手机助手免费下载
  • 济南网站建设和网络推广哪个好/自己怎么建网站
  • 网站建设一条龙/学电脑在哪里报名
  • 建筑工程网登/广州seo优化公司排名
  • 我和椅子做游戏小精灵网站/能让网络非常流畅的软件