作者归档:hizhou

UML中的依赖关系和关联关系

dependency_association

在 UML 中,依赖关系(dependency)和关联关系(association)都是类之间的横向关系,较难区分,所以我在这里做些整理,以便更好的阅读 UML 类图。

依赖关系(dependency)

阐述:
可以简单的理解,就是一个类 A 使用到了另一个类 B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是 B 类的变化会影响到 A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;依赖关系总是单向的。

表现:
表现在代码层面,如类 B 作为参数被类 A 在某个方法中使用。

实现:
依赖关系体现为:局部变量、方法中的参数,还有对静态方法的调用。

关联关系(association)

定义:
该关系体现的是两个类、或者类与接口之间语义级别的一种强依赖关系;这种关系比依赖更强,不存在依赖关系的偶然性,关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的,可以是双向的。

表现:
表现在代码层面,比如被关联类 B 以类属性的形式出现在关联类 A 中,也可能是关联类 A 引用了一个类型为被关联类 B 的全局变量;

实现:
关联关系是使用实例变量实现的。

两者之间的联系

很多关系(泛化、继承、关联、聚合,等)都包含依赖关系,当这些关系存在时,不需要再额外建立依赖关系。依赖关系强调一个类需要使用另一个类;关联关强调结构,一个类持有另一个类的实例,当有需要时可以自由地使用。

例子

UML参考封面图片

 

参考资料:
What is the difference between dependency and association?
wiki Dependency_(UML)
wiki Association_(object-oriented_programming)
wiki Coupling_(computer_science)
wiki Class_diagram
Dependency & association in UML

 

是 WordPress 让 PHP 更流行了,而不是框架

trends_php

Tiobe Index(编程语言世界排名指数),是一个显示各种编程语言的相对流行趋势的排名,开始于 2001 年,每个月更新一次。它将很多站点的搜索结果计算在内,以得到统计数据。这些站点包括:Google,Blogger,Wikipedia,YouTube,Baidu,Yahoo,Bing,Amazon 等。

PHP 在 Tiobe 上排名一直靠前,但最近它的排名更靠前了,2012 年是第7,现在是第5。人们可能将此归因为去年年底 Zend Framework 2 的发布,但并没有什么依据。

于是作者开始探究为什么 PHP 在 Tiobe 上的排名曲线突然上扬,真的是官方框架发布造成的么?下面是他的结论,我大致翻译如下。

一、WordPress 是最流行的 PHP 应用

作者用 Google Trends 去比较几个关键字的趋势,这些关键词是:WordPress,Joomla,Drupal,Magento,Zend Framework,它们的趋势走势图如封面所示。

介绍下它们。WordPress 是开源博客程序,Joomla 和 Drupal 都是开源内容管理发布系统,Magento 是开源的电子商务程序(国内似乎有家麦神电子商务把它汉化了在卖服务),Zend Framework 是官方开源的 PHP 框架。

最流行的是 WordPress,比其他应用都流行很多,垫底的是 Zend Framework。

其实这些关键词是作者认为最流行的关于 PHP 的词了,我觉得选这些词也是合适的。框架选一个做代表就行,而应用的流行程度差别很大,尽量选名气大的。我在这些词中把 PHP 也加进去,发现 WordPress 的流行程度都快接近 PHP 了,所以说,用“最流行的 PHP 应用”来描述 WordPress 没任何问题。

二、WordPress 自身比任何 PHP 框架要流行的多

这个结论细化了第一个结论。别以为只选了一个框架做比较,其实所有框架都差不多那个数量级。

三、WordPress 没有用第三方框架

为了补充第二个结论…

四、是应用让技术流行起来,而不是框架

趋势图上提到的 Magento 这个电子商务应用,是基于 Zend Framework 开发的,但它比框架流行。所以让应用流行起来的原因,并不是因为它使用了什么框架,而是它解决了用户的实际问题。

WordPress 也是同样道理,它对很多人都很有用。当人们要装个 WordPress 时,他们就知道了 PHP 这门技术,他们需要支持 PHP 的虚拟主机空间。这就促使了 PHP 的流行。

五、可扩展的 WordPress 插件生态

让 WordPress 流行的最重要原因之一就是它的插件系统。插件几乎能做任何事情,它们让 WordPress 成为一个平台,而不仅仅是一个应用。

六、很多非程序员因为 WordPress 开始开发 PHP

很多 WordPress 用户并不是程序员,但是因为找不到合适的插件、主题等,他们开始自己开发这些需求。

七、实用主义比理想主义好

软件项目,在技术上得是美丽的,得是一致的,得遵循良好的项目计划,得赞扬设计模式。

但上面这些真的没想象中的重要。很多应用被创建是基于一种很实际的感觉,它们只专注于解决现实世界的需要。

相对而言,很多 PHP 框架,它们似乎开发自另一个星球。它们常常由理想主义的人开发,更关注设计模式。

 

我的一点总结:

作者还是用确凿的证据证明了他的观点。而我,也从中看到一些要注意的地方:

1、过于注重技术。在开发岗位工作,注重技术是必须的。但是当自己做一个产品时,最应该关注的是解决现实世界的问题。

2、框架,解决的现实问题是,帮助普通开发者基于框架能更轻松快捷地开发应用。相对应用来说,面对的用户量肯定是少几个数量级的。

3、也许,针对某个流行应用提供解决方案或服务,就很有前途。当然,开发出解决现实世界问题的应用,更有前途。

 

编程要不要美

mujiang

在《GAE 添加 PHP 支持引发的一波讨论》中,有篇挺 PHP 的文章,第四部分,作者提出了:编程不一定要美(因为 PHP 被诟病的原因之一就是很多 PHP 代码是丑陋的)。

先翻译出来,再说说我的观点。

翻译开始 {

多年前,我开始看到人们赞美 RoR(Ruby On Rails),相对于使用 Java 或 PHP 这些语言,他们认为 RoR 是 Web 应用开发的最佳选择。

我看到在 RoR 创建者 David Heinemeier Hansson 的一些言论中,他在推行这样一个概念:编程必须要美。我想知道这是什么意思,是指代码风格么?还是指项目架构?还是指开发方法学?或者其他?

可能我没抓住要点,但我会这样设想:RoR 在推行一种开发方法学,作为一种正确和多产的方式。如果你不离开 Rails 平台,你的“火车”可以行驶得飞快。

但在我看来,持续地使用一种开发方法学并不依赖于你使用哪种开发语言或者框架。

我使用同样的方法学开发 PHP 项目很多年了。我觉得自己是多产的,因为我也是一贯遵循同样的方法学。我开发项目相当的快,因为工作已趋于机械化。

看起来,RoR 给那些没有方法学可遵循的同学的 Web 项目开发带来了一致性。

但是,遵循方法学的开发并不一定要基于 RoR,也不需要基于 Ruby。在 PHP 中也同样可以,你可以选择使用一个类似的框架或者不用也可以。事实上,现在出现的很多 PHP 框架都从 RoR 中学习引进了一些东西。

RoR 也从 PHP 中引进了些东西。例如,已经整合到 RoR 项目中的 ERB 模板系统,其实这就是一套模板解析机制,在 PHP 中早就有了。

有些人还布道说,你不能将代码和 HTML 模板混在一起,如果那样,就是丑陋的,在你死后你会被打入地狱的。所以,我猜 RoR 的同学也会同意:编程不一定要美。

还有一件被人们认为丑陋的事情是,在应用中使用全局代码而不是用类封装。好吧,你看看 WordPress 的源代码,你会看到遍地的全局代码。

我写过一篇为什么《用类组织你的代码》比使用全局代码要好,但也不是一种强制性的规则。

全局代码并不美,但它能工作,PHP 允许它的存在,很多开发者还在使用它,还靠它谋生。

} 翻译结束。

 

下面是我的观点。
一、作者提及的几个事实:

1、确切的说,RoR 是指一套开发框架,而 PHP 是指一门脚本语言,但在文章中,大家应该都能看出,作者是在比较两个开发平台(或者说环境、生态)。

2、RoR 推行了一套开发方法学,能提高生产力。这也是 RoR 流行的重要原因之一。

3、PHP 因为诞生的早,使用广泛,也遗留下来很多原始的特性;而 RoR 诞生在行业更加成熟的时期,是更先进的。解释型语言很多方面可以互相学习,但 RoR 有更多值得 PHP 学习的地方。

4、开发方法学等理论知识,都是跨语言的,这些知识比掌握一门语言语法更有价值。当然语言对理论的支持程度有高低,RoR 对开发方法学的支持应该不错(我没实践过,此为揣测),而 PHP 中也有框架能支持,但框架太多,还得进行选择。

二、作者并没有证明他的观点:

1、关于“美”的概念,RoR 创建者所指的“美”应该是:好的编码风格、好项目的架构、等等(如作者所理解的),目的是为了能良好应对未来的变化。但是作者举的例子中,HTML 模板和代码不能混杂,这里的“美”的意思更偏向“完美”的硬性标准,概念变了,不能作为论据。

2、WordPress 的成功,主要是市场上的成功,而不是技术上的。不管代码美不美,我想 WordPress 都能成功,只要它抓住了市场的需求。所以,WordPress 的代码并不能作为论据。

3、作者在自己的文章《用类组织你的代码》中也提倡让代码“美”些,为了应对将来的变化。所以摆明了是在反驳自己提出的观点,除非他认为的“美”的意思是指完美。

4、所以,我和作者的观点一样,都是:编程还是得美一点。

三、题外话,学 PHP 还是 RoR:

1、如果选择 PHP

能从零开始学习服务端 Web 开发,当你达到一定的精通程度(特别是熟悉一两个主流 PHP 框架时),转学 RoR 会很容易。写一些原生的 PHP 脚本和 SQL 查询语句,会帮助你理解 Web 应用的实现原理。

2、如果选择 RoR

能马上上手进行 Web 开发,能学习更先进的 Web 开发方法,高效,享用 RoR 带来的丰富的工具(我没实践,人云亦云下)。等等。但是底层细节都被隐藏,对原理会比较模糊。

3、Web 产业如何选择

现在,Python、Ruby 比起 PHP 更能满足 Web 产业对技术的生产力的需求。虽然 PHP 也一直在进步,单元测试、包依赖管理等工具也早都有了,但还是没有大面积应用起来。

从 GAE 支持 PHP 这事看来,Google 还是承认了 PHP 的地位,也许是因为 PHP 的门槛确实低得小盆友都能进来了。

4、我的理解是:学深了,都差不多。