您的位置:首页 > 其它

什么是哲学为基础的设计模式?

2011-10-17 10:35 381 查看
http://www.devx.com/dotnet/Article/47368 翻译而成的

什么是哲学为基础的设计模式?

软件工程主要是分析现实世界的一部分,它转化为一个软件系统。这可能是一个比哲学对现实的分析更丰富的思想来源?

正在研究哲学学术?毕竟,我们没有任何地方学习。( 参见附文1。古典哲学与分析哲学的哲学的局限性充分讨论。)我认为答案是否定的,特别是如果你是一名软件工程师。一个软件工程的大量分析现实世界的一部分,并试图“复制”到一套软件系统,现实。这可能是一个比哲学对现实的分析更丰富的思想来源?我们可能无法期望的理念,以实际解决生活中的大问题,但我们一定能期望得到思想从哲学有关的观赏和探索现实的想法,可以帮助我们解决我们自己的软件设计问题的新途径。毕竟,一些最伟大的头脑,不断作出贡献的这个所谓哲学思想的巨大集合。





事实上,任何软件的设计理念-故意或不-斜靠在坚实的哲学基础。例如,面向对象编程(OOP)的最根本的思想之一是实例化的想法。实例意味着任何运行时元素的性质(对象,实例等),这实际上是一个内存段进行详细描述了一个实际的,现实世界的实体,被抓获,并在一个抽象的元素定义。这个元素是类,一个不变的实体(只要该软件在运行时的状态),只存在于一个单独的抽象的领域,这实际上是代码本身(类似英语的语言字的集合)。之间OOP这个根本原则和柏拉图的形式理论的相似性是显而易见的。形式理论认为:

存在一个摘要或形式的世界,完全独立于经验,现实世界。

每个形式是由一定的属性集合(例如,“面料”是“服装”的属性)。

平行形式的抽象世界,经验世界的存在:我们的世界与我们的感官经验。

经验世界中包含的具体对象,其中每一个具体的对象是由平行的抽象世界的形式之一派生。

哲学为基础的设计模式,在这篇文章提出的思想争辩哲学的起源,目前的软件设计的,必须不时(特别是在我们当前的现实,我们没有提供足够的软件设计解决方案的情况下)的挑战, 必须更换新的,旧的基础 。

一种哲学为基础的设计模式的结构是这样的:

目的 -一个设计问题的一种哲学为主的格局应该处理的简短描述

动机 -动机的定义,基于软件设计问题的一个例子

哲学背景 -一个简短的讨论有关的一些见解,已经获得了世界哲学有关的利害攸关的问题

当前哲学为主的格局 -哲学思想的描述,其功能事情是如何完成今天的典范

建议哲学为主的格局 -这种模式暗示成为另一种哲学思想,在某些情况下,模型的设计方案

实施范例 -示范实施建议的哲学为主的格局

以下是一个这样的理念为基础的模式,涉及到对象的实例化方式可能看起来的例子 。寻找其他的哲学为基础的模式philosoftware.com

哲学为基础的设计模式:抑制模式

为了更好地理解哲学为基础的设计模式,考虑的抑制模式。

目的

这种设计模式的目的是为了让抑制继承的属性和方法,在继承对象不存在的。

动机

对象模型(分类反映现实世界的实体到一个给定的的应用程序相关的对象或类)的最突出的特点之一是事实,是有直接关系的对象之间的复杂程度和其树的深度内。也就是说,我们下降其走向它的叶子根的对象模型 - 或者换句话说,当我们通过从抽象走向具体的分类移动 - 我们会遇到的对象有更多的公共/受保护的属性和更多的公共/受保护的方法。

这种现象是面向对象的模型的定义继承的抽象和具体对象之间的关系的结果。但是,我们始终可以选择添加到具体对象的属性和行为,在其抽象基对象的背景下,将不存在。与此相反的行动 - 加入到抽象的公共/受保护对象的属性或行为,将在混凝土的继任范围内不存在 - 是不可能的,是继承,因为所有的公共/受保护的属性和行为。





点击图片放大

图1抽象和具体对象之间的关系

只是为了举例说明这个问题,让我们看看。NET Framework对象模型的根对象的对象类, 。它包含信息很少,很少的高度通用的功能
,如toString(
方法或等于
( )。然而,位于越低,更具体的部分。NET分类某处,Button类,包含许多特点和功能,其中一些是从继承其祖先(包括Object类)的长枝,以及其他一些这是独一无二的。

刻画了对象模型的另一个因素是存在的分裂路口 。每一个这样的路口分割成两个或两个以上不同的分支,共享相同的基类的类的分类,但彼此完全不同的分割,进一步交界点 。这种分裂交界处的一个例子可能是一个类作为基类的所有GUI类(职能 GUIObject) 。从这一点出发,层次结构分为以下:

GUIPrimitive是真正的互动与用户(信息显示或信息的接受),如按钮或TreeView,使用的所有GUI对象的基类。

GUIContainer是信封(含其他GUIContainers当然GUIPrimitives),如小组或GroupBox,使用的GUI对象的基础上。

结合上述两个特点的对象模型,揭示了以下的图片 - 我们下降的对象模型,我们会发现以下现象:

对象的复杂性增加的水平。

我们可能会遇到路口,分裂成两个或两个以上的类层次结构,其中有一个完全一致的“尾巴”,完全不同的分类法“的头。”



图2 GUI对象模型

我们可能会问自己是否一个对象模型,“行为”中所述总是适合我们的需求,作为软件工程师,这是最精确和有效的方式,以反映现实。

抑制模式的使用案例

假设我们要建立一个绘图应用程序,允许添加到画布上的各种图形对象,并允许编辑这些对象,如位置,大小,颜色等各种参数。一个形状的快速分析显示,折线,矩形和三角形的份额中不存在界的一些属性。例如,它们都具有一个定义的轮廓直线。因此,据推测,当我们定义此应用程序的对象模型,一个新的类可能是建表示,由边集和那些没有定义的形式之间的分化。我们可以调用这个新类ShapeWithEdges。图3显示了增强的对象模型 。



图3一个对象模型,涉及到线的特性

根类的类 Shape ,其中包含的基本要素的形状(例如,函数
绘制
)。Shape类继承ShapeWithEdges和圈类,这反过来将自己添加新的属性和行为(例如,列表的边缘,这将被添加到ShapeWithEdges,半径,将被添加到圆)。

另外,我们可能要占用空间的形状,形状的填充描述符定义。一类名为填充,结合相关信息,如填充颜色,梯度和纹理可能会满足我们的需要,但问题是从类表示的对象模型应包含此填充对象。它不属于Shape类的,因为这个属性是外国的折线类,所以我们应该添加一个新类:ShapeWithFill。ShapeWithFill ShapeWithEdges类在前面的例子一样,表示可填充形状和那些不能(见图4)之间的分化 。



图4一个对象模型,涉及到填充特性

但约的情况下,我们要表达相同的对象模型中的这两个属性又如何呢?显然,我们不得不重复扩张的尺寸之一。例如,我们可以添加一个填充对象的类,应该有它(圆,矩形,三角形) - 示例1。



图5一个对象模型,涉及到的填充和线条的特点 。

另外,我们可以添加一个边列表类,应该有这个列表(折线,矩形,三角形) - 示例2。



另一个涉及到的填充和线条特征的对象模型,图6 。

增加两款新车型保持模型的复杂程度,所以我们可能要寻找一个稍微不同的方式来建立一个模型,方法,将使我们克服上述问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: