面向对象编程与过程编程 - 最大的区别是啥? [复制]
Posted
技术标签:
【中文标题】面向对象编程与过程编程 - 最大的区别是啥? [复制]【英文标题】:Object oriented programing vs procedural progaming - Whats the big difference? [duplicate]面向对象编程与过程编程 - 最大的区别是什么? [复制] 【发布时间】:2012-01-27 08:21:19 【问题描述】:可能重复:OOP vs Functional Programming vs Procedural
最近我被介绍了 OO 方法,到目前为止我一直在使用函数编写 php。
现在,老实说,我真的不明白: 当我使用“函数”的想法时,我只包含一个名为,例如,functions.php 的文件,其中包含我需要的所有函数,包括变量,当我需要使用那段代码时,我只是调用它并设置变量,如果有默认变量则留空。
现在据我了解 OO,我没有编写很多没有“类别”的函数,而是将它们收集在一个“类”中(例如,所有使用 db 的函数都在“db”下' class) - 我没有给他们 vars,而是在类中预先声明了这些 vars。
所以,感觉就像我基本上在做同样的事情。我知道变量在 OOP 中不是全局的,它们是每个实例的,这对于编写更易于理解的代码来说是可以的,但除此之外,我真的感觉不到这样做有很大的不同:
$html = new html();
$html->src='http://***.com';
$html->desc='Great place to learn & share knowledge';
$html->link();
--
html_link('http://***.com','Great place to learn & share knowledge');
我同意,对于没有编写该代码但看不到每个人都在谈论的巨大好处的人来说,它可能更具可读性:重用、有条理、更快等等。
分享您的想法,也许我会明白如何从 OOP 中受益 :)
提前致谢, 哎呀。
【问题讨论】:
您的意思不是“功能性”,而是“程序性”。函数式是完全不同的(想想 Lisp)。 如果你问我,PHP 的“面向对象”支持在很大程度上是作为事后的想法。如果您发现它有用,请使用它,但当语言的某些方面让人感觉是人工的、未经深思熟虑或令人费解时,请不要感到惊讶。 如果您只是将类用作命名空间来对函数进行分组,那么它就不是真正的 OOP。 不可变变量可能是“经典”函数式和 OO 之间的最大区别。 【参考方案1】:阅读多态性。一旦你理解了这一点,你就成功了一半。一个类不仅仅是一个函数的聚合(用oo说话的方法),一个类的实例封装了状态和行为。您还应该学习设计模式以充分实现 oo 范式的强大功能。从四人组开始 (http://en.m.wikipedia.org/wiki/Design_Patterns) 以及 fowlers 企业模式 (http://martinfowler.com/articles/enterprisePatterns.html)
【讨论】:
【参考方案2】:OOP 的基本本质是,您将功能(方法)和数据(属性)放在一个地方,即类/对象。 当您只编写函数和使用变量时,两者都是分开的。
注意:函数式编程不是您现在所做的。有一个范式functional programming,其中不存在循环等结构,一切都用函数表示。
【讨论】:
【参考方案3】:当您所做的只是编写不保留任何上下文等的简单函数时,过程式编程会容易得多。
一旦您想使用具有完全相同参数的两个函数,使用对象会容易得多,因为它需要的代码更少。
以下示例假设您有一个网站 (SO),并希望为单独的页面创建 URL。您需要在一个中心位置定义“基本位置”,以避免在域更改后重新编写所有页面。
$url = new URL('http://***.com');
echo $url -> link('home'); // http://***.com/home
echo $url -> link('review'); // http://***.com/review
用函数做到这一点:
echo linkURL('http://***.com', 'home');
echo linkURL('http://***.com', 'review');
如您所见,您甚至可能都懒得使用函数。
然后是面向对象之前的方法:
$context = prepareURL('http://***.com'); // returns <something>
echo createURL($context, 'home');
echo createURL($context, 'review');
这种方法在使用函数的同时仍然具有上下文。但是,您可能已经注意到,这与 OO 非常接近。
【讨论】:
以上是关于面向对象编程与过程编程 - 最大的区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章