zoukankan      html  css  js  c++  java
  • 编程范式--对象范式,这不是原来的配方了

    编程范式|对象范式,这不是原来的配方了

    编程范式大家都应该不陌生,随口都可以说出来几个,比如 : 过程式,函数式,面向对象......

    前言

    在正式开始正文之前,我想你思考几个问题:

    1.什么是面向对象编程?

    2.面向对象的特性是什么?

    3.面向对象继承真的好吗?

    4.你还记得面向对象中的组合吗?

    好了,看完这四个问题,开始正文的内容吧。

    正文

    面向对象,即对象范式,诞生于20世纪80年代,属于第二次软件危机的产物,解决了结构化编程的危机。

    但是真正的发展,是很曲折的,毕竟编程范式,一定程度上解决了当前的环境的困惑,影响了下一代环境。

    诞生

    1967 年的** Simula-67 语言**,属于第一个面向对象的语言,使用的是直接调用目标对象的方法,也就是我们所称的组合方法。

    受到 Simula-67 语言的启发, Smalltalk-71 编程语言诞生,Smalltalk 不同于 Simula ,使用发消息实现对象方法的调用。

    在一开始的对象范式中,对象范式思想 : 程序由对象组成,对象之间互相发送消息,协作完成任务。
    注意 : 并不包括现在的 继承

    演变

    面向对象编程范式的流行,更多的原因是解决了当时的困境,进行了新的演化。可以将其称为软件方法

    **C++ **编程语言的诞生,带来了对象范式的演化。

    由于在原本的对象范式思想中,在对象之间互相发消息,需要知道目标对象有哪些方法。所以,此时就需要在对象范式中,引入定义对象本身有哪些方法的“类”和“继承”。此时的对象,也就是类造出来的,并不重要了。(七夕,程序员new对象,来源于此~)

    经过演变,此时的对象范式,核心就变成 : 封装、继承、多态。
    而原本的 面向对象 OOP(Object Oriented Programming) 也 演变为了 面向类程序设计 COP(Class Oriented Programming)

    注意 : 此时,你是不是觉得自己一直写的类,并且一直叫的面向对象,是不是可以更名为面向类了呢?

    变化与不变

    当对象范式变为 COP 之后,已经与初期的面向对象不一致了。

    或者说,使用 COP这个概念,是‘错’的。

    这里的错,来源于继承与组合

    1994 年 Robert C. Martin 在《** Object-Oriented C++ Design Using Booch Method** 》中,曾建议面向对象程序设计从对象活动图入手,而不是从类图入手。(对象活动图 : 组合,类图 : COP)

    1995 年出版的经典作品《 Design Patterns 》中,建议优先考虑组合而不是继承。

    2000 年后,工程界明确的提出:“组合比继承重要,而且更灵活”。

    好了,看到这里,我不知道大家,在自己写程序的时候,使用的是组合多呢? 还是继承多?

    结束语

    综上,我介绍了OOP的诞生,一级演化为COP,并且借用例证,表明对象范式的主张。

    此刻,不知道你是否对于前言的四个问题有了自己的答案。

    其实,面向对象的初衷 : 复合对象的唯一方法是组合。(并不是继承)

  • 相关阅读:
    求素数(定义法,埃式法,欧拉法)
    打表法
    python学习日记(匿名函数)
    python学习日记(编码再回顾)
    python学习日记(文件操作练习题)
    python学习日记(迭代器、生成器)-乱七八糟
    python学习日记(生成器函数进阶)
    python学习日记(装饰器的补充)
    python学习日记(函数--装饰器)
    python学习日记(函数进阶)
  • 原文地址:https://www.cnblogs.com/Kate-liu/p/11348855.html
Copyright © 2011-2022 走看看