Table des matières
回复内容:
个人拙见,仅供参考,以期启发,抛砖引玉。
1. 什么事面向对象?
2. 与面向过程的区别?
3. 面向对象有什么好处?
更有助于人类的思考
把事物分解为实现,这是机器的脑子; 把事物联系成整体这才是人类的脑子
就拿买笔记本电脑来说吧
Maison développement back-end tutoriel php 用最简单的一句话说清,什么是面向对象?他和过程区别是什么?有什么好处?

用最简单的一句话说清,什么是面向对象?他和过程区别是什么?有什么好处?

Jun 06, 2016 pm 08:26 PM
c java object php 面向对象设计模式

可能我们都在用面向对象方式编程,我们真的理解到他了吗,每个程序员对面向对象的理解也不一样,每当别人问我为什么用对象不用过程时,我总是说不到一个充分的理由,我一般是这么说的,用对象的好处是,代码简洁,重用性高。。。。说说你们的看法和这么些年的总结阿。

回复内容:

可能我们都在用面向对象方式编程,我们真的理解到他了吗,每个程序员对面向对象的理解也不一样,每当别人问我为什么用对象不用过程时,我总是说不到一个充分的理由,我一般是这么说的,用对象的好处是,代码简洁,重用性高。。。。说说你们的看法和这么些年的总结阿。

个人拙见,仅供参考,以期启发,抛砖引玉。

1. 什么事面向对象?

面向对象就是把跟某一主题(类型称为类,实体叫做对象)的所有方法(即函数)和所有属性(即变量)组合起来,用这种逻辑来组织程序的一种程序开发方法。

2. 与面向过程的区别?

面向过程是通过一个一个的函数堆砌起来来组织程序的,面向的是过程(函数),而面向对象是通过一个一个的类/对象堆砌起来来组织程序的,面向的是对象(类/对象)。

3. 面向对象有什么好处?

当软件的规模不断扩大时,面向过程式的程序开发就会遭遇力不从心,一方面难以应付规模带来的压力,后期难以维护,另一方面代码也难以实现复用,造成重复编码(面向对象通过继承应对)。
因此,面向对象开发很好的解决了大型程序开发的困难,程序组织更为清晰,更容易后期维护。

王垠看待面向对象编程(王垠使用Java开发了许多项目,包括他的Yin语言):
http://www.yinwang.org/blog-cn/2015/04/03/paradigms/
王垠这篇文章中关于OOP的见解,提到了,面向对象=过程式+抽象,同时指出了完全面向对象导致过度抽象的问题,过度抽象反而会增加耦合.

“对象思想”作为数据访问的方式,是有一定好处的。然而“面向对象”(多了“面向”两个字),就是把这种本来良好的思想东拉西扯,牵强附会,发挥过了头。很多面向对象语言号称“所有东西都是对象”,把所有函数都放进所谓对象里面,叫做“方法”,把普通的函数叫做“静态方法”。实际上只有极少需要抽象的时候,需要使用内嵌于对象之内,跟数据紧密结合的“方法”。其他的时候,你其实只是想表达数据之间的变换操作,这些完全可以用普通的函数表达,而且这样做更加简单和直接。把所有函数放进对象的做法是本末倒置的,因为函数本身并不属于对象,它们只是对象上面的变换操作。绝大部分函数是独立于对象的,它们不能被叫做“方法”。强制把所有函数放进它们本来不属于的对象里面,把它们全都作为“方法”,导致了面向对象代码逻辑过度复杂。很简单的想法,非得绕好多道弯子才能表达清楚。很多人至今不知道自己所用的“面向对象语言”里面的很多优点,都是从过程式语言继承来的。

大多数的面向对象语言里都缺乏正确的实现一等函数的机制。Java语言是一个极致,它完全不允许将函数当作数据来传递。你需要将全部的函数都封装进类,然后称它们为“方法”,但就像我说的,这是绑架。缺乏一等函数是为什么Java里需要这么多“设计模式”的主要原因。一旦有了一等函数,你将不再需要大部分的这些设计模式。

编程最重要的事情,其实是让写出来的符号,能够简单地对实际或者想象出来的“世界”进行建模。一个程序员最重要的能力,是直觉地看见符号和现实物体之间的对应关系。不管看起来多么酷的语言或者范式,如果必须绕着弯子才能表达程序员心目中的模型,那么它就不是一个很好的语言或者范式。
(引用结束)

个人也觉得,面向对象没有错,错的是"完全"面向对象,因为有时候并不需要采用面向对象,完全面向对象就太过于一刀切了.拿PHP的mysqli扩展来说,其提供有面向对象和过程化两套使用方法.面向对象就是new mysqli()创建一个对象,然后就可以很方便的调用方法和成员.过程化则是使用前缀为mysqli_的一系列函数.在这个场景下,个人觉得new mysqli()的确更合适一些.不过,对于某些场景,比如PHP内置的解析URL的函数parse_url,个人觉得就不需要使用面向对象了,如果再搞个url处理的类,把parse_url放到里面,就太多此一举,把简单问题搞复杂了,作为一个功能性很明确的函数,直接提供给编程人员调用,显然很友好.

抛砖引玉。

Q: 什么是面向对象?
A: 一种编程范式,与面向过程相对,代表一种以数据(对象)为单元的对现实世界的抽象方式。

Q: 面向对象与面向过程的区别是什么?
A: 用程序描述"我吃饭"。面向过程的写法:eat(I, food),面向对象的写法:I.eat(food)。两者最直观的区别是程序的组织方式不同,面向过程的程序以动作(函数)为构建单元,通过在函数中调用其它函数完成对现实世界的描述。面向对象是以数据(名词)为核心,通过对象之间的消息传递构建程序。

Q: 面向对象的好处?
A: 面向对象更符合人类对现实世界的认知,人对抽象的“类”和具体的“对象实例”这些概念从童年起能有很好的理解,例如 "人类"就是一个抽象的 class,而"张三"就是一个属于"人类" class 的 object.面向对象有三大特征:封装、继承、多态,能够避免命名冲突、实现代码复用,对于构建大型程序十分有利。

上面的答案已经说的很清晰了。
面向对象就是对“类”的合理使用。
面向过程就是对“函数”的合理使用。
好处?减少重复的代码,增加可维护性。

以前在大学,跟马士兵老师学习 Java 时,他如是说:

面向过程
汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候,关心的是某一个事件,而不是汽车本身。
编写启动汽车程序。
编写汽车到站程序。
如果汽车坏了,还要编写"修理汽车"程序。

面向对象
先选择操作对象——汽车。在编程序的时候,关心的是汽车本身,让汽车去完成各个动作。
命令汽车——启动。
命令汽车——到站。
如果汽车坏了,命令汽车——修理。

很显然,面向对象是最接近人类思维的编程思想。


依我看,最大的好处就是:

更有助于人类的思考

面向对象的定义,网上一搜一大把。的确,我们每个人都在使用它,却很少有人思考过其中的原因。

事实上,从语法层面上来说: 面向对象只是面向过程的语法糖。继承,多态等等,完全可用面向过程来模拟,只是繁简的区别罢了。

面向对象的存在,肯定是有价值的。诚然,面向过程也可用于软件工程,但为何不被人们所推崇?原因就是: 不好想

人类更愿意用联系的思想去看问题,因为这更贴近生活经验,而面向对象就能很好地体现这种思想。

把事物分解为实现,这是机器的脑子; 把事物联系成整体这才是人类的脑子

上面说的都挺不错的,偶也来凑个热闹~
简单到一句话:(按题主的要求)

  1. 什么是面向对象?对象是数据+操作。

  2. 和面向过程的区别是什么?面向对象更关注数据,而面向过程更关注操作。

  3. 有什么好处?面向对象让我们能更容易去封装数据、封装操作、扩展(继承机制),以及提供更轻量的接口--多态和duckType

楼上说的都挺不错的,但是说好的一句话说清呢。。。

要我说,面向对象比面向过程好的是:人类语言很大程度是面向对象的。(至少中文、英文是。我就会这两个…)

如果非要一句话概括,那么就是:面向对象是将问题模块化,面向过程是将问题程序化

老程序员了,c# JAVA c++ py都走过,现在爱node。那么多年的感觉就是,oo其实就是一种建模方法,简单的说就是你是如何理解这个世界这些业务的,oo只是其中一种。多接触各种不同的思想,才明白其中的差别,别纠结于理论。

化整为零的哲学思想

举一个栗子
实现电商网站里面的一个小功能叫“删除商品”
如果是面向对象:可能的思路是---“删除商品”是对商品进行删除的一种方法,那就在商品这个类里面增加一个方法
如果是面向过程:可能的思路是---“删除商品”就是1,判断用户登录状况;2,判断用户权限;3,对提交的操作进行库表操作;4,返回结果;

不知道说的明不明白,我没有学过面向对象编程,小白的理解~~~~

就拿买笔记本电脑来说吧

过程思维:询问周围朋友-->网上查询报价-->到附近的电脑城自己去买;
对象思维:找个人给他钱,让他搞个笔记本电脑给你。

oo更适合把数据和其对应的操作封装起来,对外隐藏实现细节。

能封装的就封装

我写过java,node,,可以说是从面向对象过渡到了面向对象+面向过程。从我个人的体会来说,面向过程更加快速简便,更加贴近人解决事物的办法。比如,商店卖掉一个球,面向过程的思路就是把球的总数拿过来,减去一,然后保存,同时,添加一个订单。 这种思维方式和现实业务的过程是比较类似的。所以叫做面向过程。

但是面向对象就是另一种方式,它首先要把这些实体都抽象两个类,球,订单。然后提供实现方法。比如,球的类有方法 sell,调用这个方法就会把球总数减1,然后调用订单的方法add,添加订单。总体的思路就是,先设计好类的接口以及交互方式,然后只要在 业务发生的时候, 将消息发送给相关的类就可以了。 这里,我们只需要调用 球的sell方法就行了。至于,它怎么下订单,订单价格,我们都不管。

可以看出,面向对象的方式比较有利于业务逻辑内聚,只要设计好接口,可能很长时间都不用更改类的通讯方式。永远都是 调用球的sell。当球的价格变了,或者有促销了,我们只需要修改sell实现,或者针对临时的促销,实现一个球的子类,比如叫做促销球。这样的话,能最大限度的保证架构的稳定。但是反过来说,如果真的要改架构,成本是比较大的。而且为了保证架构的稳定,前期设计上也会花费更多的资源。

面向过程的优势也正在于此,虽然处理复杂的业务不是强项,但是开发迅速,改变成本也比较小。非常适合复杂度不高或者适中,业务内容多变的开发。

以上。

现在我们来应该讨论 oop 和 aop 。。

封装,继承,多态。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Expliquez l'expression de correspondance (PHP 8) et comment elle diffère du commutateur. Expliquez l'expression de correspondance (PHP 8) et comment elle diffère du commutateur. Apr 06, 2025 am 12:03 AM

Dans PHP8, les expressions de correspondance sont une nouvelle structure de contrôle qui renvoie différents résultats en fonction de la valeur de l'expression. 1) Il est similaire à une instruction Switch, mais renvoie une valeur au lieu d'un bloc d'instruction d'exécution. 2) L'expression de correspondance est strictement comparée (===), ce qui améliore la sécurité. 3) Il évite les éventuelles omissions de rupture dans les instructions de commutation et améliore la simplicité et la lisibilité du code.

See all articles