设计模式学习笔记 - 面向对象 - 1.面向对象到底讨论的是什么

这篇具有很好参考价值的文章主要介绍了设计模式学习笔记 - 面向对象 - 1.面向对象到底讨论的是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.到底什么是面向对象编程和面向对象编程语言?

面向对象编程(OOP)的全称是 Object Oriented Programming
面向对象编程语言(OOPL)的全称是 Object Oriented Programming Language

面向对象编程中有两个非常重要的概念,就是类(Class)和对象(Object)。面向对象编程这个概念第一次使用是在SmallTalk 这种编程语言中,它也被认为是第一个真正意义上的面向对象编程语言。后来C++带动了面向对象编程的流程。到今天,如果不按照严格的定义来说,大部分编程语言都是面向对象编程语言,比如JavaC++GoPythonJavaScript等等。

那么到底什么是面向对象编程?什么语言才算是面向对象编程语言呢?

  • 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。
  • 面向对象编程语言是支持类或对象的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。

一般来说,面向对象编程都是通过面向对象编程语言来进行的,但是,不用面向对象编程语言也可以进行面向对象编程。反之,即使我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格的。

2.如何判定某编程语言是否是面向对象编程语言?

在上面刚刚的讲解中,提到“如果不按照严格的定义来说,大部分编程语言都是面向对象编程语言”。为什么要加上“如果不按照严格的定义”这个前提呢?

这是因为如果严格按照面向编程语言的定义,前面提到的有些编程语言并不是严格意义上的面向对象编程语言。比如 JavaScript,它不支持封装和继承特性。

实际上,面向对象编程从字面上,按照最简单、最原始的方式来理解,就是将类或对象最为代码组织的基本单元,来进行编码的一种编程范式或者编程风格,并不一定需要封装、抽象、继承、多态这四大特性的支持。但是,在进行面向对象编程的过程中,人们不停地总结发现,有了这四大特性,我们就能更容易地实现各种面向对象的代码设计思路。

例如,在面向对象编程的过程中,经常会遇到 is-a 这种类关系(比如狗是一种动物),而继承这个特性就能很好的支持这种 is-a 的代码设计思路,并且解决代码复用的问题。但是随着编程语言的不断迭代、演进,人们发现继承这种特性容易造成层次不清、代码混乱,所以很多编程语言在设计时就摒弃了继承特性,比如 Go。但是,我们不能因为它摒弃了继承特性,就一刀切地认为它不是面向对象编程语言了。

个人觉得,只要某种编程语言支持类或对象的语法概念,并且以此作为组织代码的基本单元,那就可以被粗略地认为它就是要面向对象编程语言了,至于是否完全地支持了面向对象编程的四大特性、是否对四大特性有所取舍,可以不作为判定的标准。基于此,才有了前面的说法:“不按照严格定义来说,现在流行的大部分编程语言都是面向对象编程语言。但是按照严格的定义,很多语言都不能算得上面向对象编程语言”。

3.什么是面向对象分析和面向对象设计?

和面向对象编程经常放到一起讲的,还有面向对象分析(OOA)和面向对象设计(OOD)。OOAOODOOP 三个连在一起就是面向对象分析、设计、编程(实现),正好是面向对象软件开发要经历的三个阶段。

面向对象分析和面向对象设计中的“分析”和“设计”这两个词,完全可以从字面上去理解,不需要过度解读。之所以在前面加上“面向对象”这几个字,是因为我们是围绕着对象来做需求分析和设计的。分析和设计两个阶段的产出是类的设计,包括程序被拆解为哪些类,每个类有哪些属性方法,类与类之间如何交互等等。

面向对象分析就是 要搞清楚做什么,面向对象设计就是要搞清楚怎么做,面向对象编程就是将分析和设计的结果翻译成代码的过程。

4.什么是 UML?是否需要 UML?

降到面向对象分析、设计、编程,那就不得不提到 UML(Unified Model Language),统一建模语言。很多书籍中,常用它来画图表达面向对象或设计模式的设计思路。

实际上,UML 是一种非常复杂的东西。它不仅仅包含类图,还包括用例图、顺序图、活动图、状态图、组件图等等。即使使用类图的学习成本也是很高的,比如说类之间的关系,UML就定义了很多种,比如泛华、实现、关联、聚合、组合、依赖等。

要完全掌握,并且熟练运用这些类之间的关系,来画 UML 类图,肯定要花很多的学习经理,而且即使你按照 UML 画出类图,可对于不熟悉的人来说,看懂的成本还是很高的。

一般在互联网公司的项目开发中,UML 用处可能不大。为了文档化软件设计或者方便讨论软件设计,大部分情况下会画一个不是那么规范的草图,能够达意,方便沟通就够了。文章来源地址https://www.toymoban.com/news/detail-834997.html

到了这里,关于设计模式学习笔记 - 面向对象 - 1.面向对象到底讨论的是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • javascript设计模式-面向对象基础

    在JS这种弱类型的语言中,类型不匹配错误很难跟踪。可以使用接口来进行类型检查。如果强制使用,又会弱化语言的灵活性。因为有额外的代码调用,所以又会降低性能。解决方法就是在开发时进行类型检查,在开始完成后删除此部分代码。 但JS中的接口实现方式是模拟的

    2024年01月18日
    浏览(37)
  • C++设计模式_02_面向对象设计原则

    变化是复用的天敌!面向对象设计或者说使用了抽象原则的面向对象设计最大的优势在于#

    2024年02月11日
    浏览(51)
  • C++中的面向对象设计模式实践

    面向对象程序设计(Object-Oriented Programming,简称OOP)是一种将程序设计问题分解为对象的思维方式。它通过定义对象和对象之间的关系,将问题模型化并转化为代码实现。在面向对象设计模式中,设计模式是一种被普遍接受的解决问题的方法论。 C++作为一种多范式编程语言,

    2024年01月17日
    浏览(43)
  • 设计模式 -- 策略模式(传统面向对象与JavaScript 的对比实现)

    规则:根据员工的工资基数和年底绩效情况计算年终奖 初级实现 缺点 多重 if else 违反开发-封闭原则,可维护性差 复用性差 使用组合函数重构代码 使用组合函数来重构代码,把各种算法封装到一个个的小函数里面,这些小函数有着良好的命名,可以一目了然地知道它对应着

    2024年02月11日
    浏览(67)
  • 一网打尽java注解-克隆-面向对象设计原则-设计模式

    注解 :也叫标注,用于包、类、变量、方法、参数上。可以通过反射获取标注。可以在编译期间使用,也可以被编译到字节码文件中,运行时生效。 内置注解 :Java语言已经定义好的注解。 @Overread :用于方法重写。 @Deprecated :标记过时方法。 @SuppressWarnings :指示编译器去

    2024年02月11日
    浏览(46)
  • 2.python设计模式【面向对象设计的SOLID原则 基础概念】

    概念:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应该尽量在不修改原有代码的情况下进行扩展 概念:所有引用父类的地方必须能透明地使用其子类的对象 概念:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不依赖细节;细节

    2024年02月16日
    浏览(51)
  • 基于C语言的面向对象设计模式(持续更新)

    首先这篇文章只是初步的尝试,不涉及过于高深的编程技巧;同时需要表明的是, 面向对象只是一种思想 ,不局限于什么样的编程语言,不可否认的是基于面向对象特性而设计的语言确实要比面向过程式的语言更加容易进行抽象和统筹,可以说面向对象的设计模式可以很大

    2024年04月10日
    浏览(47)
  • 【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用

    实现商场收银系统从简单的面向过程到面向对象的演变。 最容易想到的: 单价*数量=总价 根据输入的单价和数量,直接计算,将结果显示在listbox控件中。 重置按钮可以清零。 1、运行效果 2、界面设计 3、代码 版本2在版本1的基础上增加了打折优惠。 1、运行效果 打折下拉框

    2024年02月09日
    浏览(45)
  • 【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

    掌握 抽象类和接口的定义、使用、区别、常见设计模式; 抽象类是代码开发中的重要组成部分,利用抽象类可以明确地定义子类需要覆写的方法,这样相当于在语法程度上对子类进行了严格的定义限制,代码的开发也就更加标准。下面具体介绍抽象类的概念。 普通类可以直

    2024年02月16日
    浏览(48)
  • java的面向对象编程(oop)——static概述及初始单例设计模式

    过了入门阶段,开始学习进阶语法了。每天进步一点点,打好基础,daydayup! 什么是面向对象编程(oop),可以看这篇 java的面向对象编程(oop)概述及案例  static的意思为静态,用于修饰成员变量及成员方法。 成员变量根据有无static可以分为两种 ——类变量及实例变量 1,类

    2024年01月19日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包