共计 3628 个字符,预计需要花费 10 分钟才能阅读完成。
什么是面向对象编程和面向对象编程语言?
面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。对应地,面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language。
面向对象编程中有两个十分重要、十分根底的概念,那就是 类(class)和对象(object)。如果不依照严格的定义来说,大部分编程语言都是面向对象编程语言,比方 Java、C++、Go、Python、C#、Ruby、JavaScript、Objective-C、Scala、PHP、Perl 等等。除此之外,大部分程序员在开发我的项目的时候,都是基于面向对象编程语言进行的面向对象编程
- 面向对象编程是一种编程范式或编程格调。它以类或对象作为组织代码的根本单元,并将封装、形象、继承、多态四个个性,作为代码设计和实现的基石。
- 面向对象编程语言是反对类或对象的语法机制,并有现成的语法机制,能不便地实现面向对象编程四大个性(封装、形象、继承、多态)的编程语言。
一般来讲,面向对象编程都是通过应用面向对象编程语言来进行的,然而,不必面向对象编程语言,咱们照样能够进行面向对象编程。反过来讲,即使咱们应用面向对象编程语言,写进去的代码也不肯定是面向对象编程格调的,也有可能是面向过程编程格调的。
了解面向对象编程及面向对象编程语言两个概念,其中最要害的一点就是了解面向对象编程的四大个性。这四大个性别离是:封装、形象、继承、多态。
如何断定某编程语言是否是面向对象编程语言?
如果依照刚刚咱们给出的严格的面向对象编程语言的定义,后面提到的有些编程语言,并不是严格意义上的面向对象编程语言,比方 JavaScript,它不反对封装和继承个性。
实际上,面向对象编程从字面上,依照最简略、最原始的形式来了解,就是将对象或类作为代码组织的根本单元,来进行编程的一种编程范式或者编程格调,并不一定须要封装、形象、继承、多态这四大个性的反对。然而,在进行面向对象编程的过程中,人们不停地总结发现,有了这四大个性,咱们就能更容易地实现各种面向对象的代码设计思路。
比方,咱们在面向对象编程的过程中,常常会遇到 is-a 这品种关系(比方狗是一种动物),而继承这个个性就能很好地反对这种 is-a 的代码设计思路,并且解决代码复用的问题,所以,继承就成了面向对象编程的四大个性之一。然而随着编程语言的一直迭代、演变,人们发现继承这种个性容易造成档次不清、代码凌乱,所以,很多编程语言在设计的时候就开始摒弃继承个性,比方 Go 语言。然而,咱们并不能因为它摒弃了继承个性,就一刀切地认为它不是面向对象编程语言了。
实际上,只有某种编程语言反对类或对象的语法概念,并且以此作为组织代码的根本单元,那就能够被粗略地认为它就是面向对象编程语言了。
至于是否有现成的语法机制,齐全地反对了面向对象编程的四大个性、是否对四大个性有所取舍和优化,能够不作为断定的规范。基于此,咱们才有了后面的说法,依照严格的定义,很多语言都不能算得上面向对象编程语言,但依照不严格的定义来讲,当初风行的大部分编程语言都是面向对象编程语言。
什么是面向对象分析和面向对象设计?
实际上,跟面向对象编程常常放到一块儿来讲的还有另外两个概念,那就是 面向对象分析(OOA)和 面向对象设计(OOD)。
面向对象分析英文缩写是 OOA,全称是 Object Oriented Analysis;
面向对象设计的英文缩写是 OOD,全称是 Object Oriented Design。
OOA、OOD、OOP 三个连在一起就是面向对象分析、设计、编程(实现),正好是面向对象软件开发要经验的三个阶段。
之所以在后面加“面向对象”这几个字,是因为咱们是围绕着对象或类来做需要剖析和设计的。
剖析和设计两个阶段最终的产出是类的设计,包含程序被拆解为哪些类,每个类有哪些属性办法,类与类之间如何交互等等。它们比其余的剖析和设计更加具体、更加落地、更加贴近编码,更可能顺利地过渡到面向对象编程环节。这也是面向对象分析和设计,与其余剖析和设计最大的不同点。
那面向对象分析、设计、编程到底都负责做哪些工作呢?
简略点讲,面向对象分析就是要搞清楚做什么,面向对象设计就是要搞清楚怎么做,面向对象编程就是将剖析和设计的的后果翻译成代码的过程。
什么是 UML?咱们是否须要 UML?
提到面向对象分析、设计、编程,咱们就不得不提到另外一个概念,那就是 UML(Unified Model Language),对立建模语言。
很多解说面向对象或设计模式的书籍,罕用它来画图表白面向对象或设计模式的设计思路
罕用的有 7 种:类图、序列图、组件图、部署图、用例图、状态图和流动图。
类图
类图是最常见的 UML 图形,用来形容类的个性和类之间的动态关系。
一个类蕴含三个局部:类的名字、类的属性列表和类的办法列表。
类之间有 6 种动态关系:关联、依赖、组合、聚合、继承、泛化。把相干的一组类及其关系用一张图画进去,就是类图。
类图次要是在 具体设计阶段画 ,开发工程师只须要依照类图实现代码就能够了,只有类办法的逻辑不是太简单,不同的工程师实现进去的代码简直是一样的,这样能够保障软件的标准、对立。
在实践中,咱们通常不须要把一个软件所有的类都画进去,把外围的、有代表性的、有肯定技术难度的类图画进去,个别就能够了
具体举荐的学习链接:http://www.uml.org.cn/oobject/201610282.asp
序列图
序列图则用来形容参与者之间的动静调用关系。每个参与者有一条垂直向下的生命线,这条线用虚线示意,而参与者之间的音讯也从上到下示意其调用的前后程序关系,这正是序列图这个词的由来。每个生命线都有一个激活条,只有在参与者流动的时候才是激活的。
序列图通常用于示意对象之间的交互,这个对象能够是类对象,也能够是更大粒度的参与者,比方组件、服务器、子系统等,总之,只有是形容不同参与者之间交互的,都能够应用序列图,也就是说,在软件设计的不同阶段,都能够画序列图。
组件图
组件是比类粒度更大的设计元素,一个组件中通常蕴含很多个类。组件图有的时候和包图的用处比拟靠近,组件图通常用来形容物理上的组件,比方一个 JAR,一个 DLL 等等。在实践中,咱们进行模块设计的时候更多的是用组件图。
组件图形容组件之间的动态关系,次要是依赖关系,因为组件的粒度比拟粗,通常用以形容和设计软件的模块及其之间的关系,须要在设计晚期阶段就画进去,因而组件图个别用 在概要设计阶段。
部署图
部署图形容软件系统的最终部署状况,比方须要部署多少服务器,要害组件都部署在哪些服务器上。
部署图是软件系统最终物理出现的蓝图,依据部署图,所有相关者,诸如客户、老板、工程师都能清晰地理解到最终运行的零碎在物理上是什么样子,和现有的零碎服务器的关系,和第三方服务器的关系。依据部署图,还能够估算服务器和第三方软件的洽购老本。
部署图是整个软件设计模型中,比拟宏观的一种图,是在设计晚期就须要画的一种模型图。依据部署图,各方能够探讨对这个计划是否认可。只有对部署图达成共识,能力持续前面的细节设计。部署图次要用在 概要设计阶段。
用例图
用例图次要用 在需要分析阶段 ,通过反映用户和软件系统的交互,形容零碎的性能需要
图中君子形象的元素,被称为角色,角色能够是人,也能够是其余的零碎。
零碎的性能被一个矩形框框起来,这个矩形框被称为用例的边界。框里的椭圆示意一个一个的性能,性能之间能够调用依赖,也能够进行性能扩大。因为用例图中性能形容比较简单,通常还须要对用例图配以文字说明,造成需要文档。
状态图
状态图用来展现单个对象生命周期的状态变迁。
业务零碎中,很多重要的畛域对象都有比较复杂的状态变迁,比方账号,有创立状态、激活状态、解冻状态、欠费状态等等各种状态。
这些状态的变迁形容能够在用例图中用文字描述,一张状态图形容一个对象生命周期的各种状态,及其变迁的关系。状态与变迁关系用一张状态图就能够搞定。
流动图
流动图次要用来形容过程逻辑和业务流程。UML 中没有流程图,很多时候,人们用流动图代替流程图。
流动图和晚期流程图的图形元素也很靠近,实心圆代表流程开始,空心圆代表流程完结,圆角矩形示意流动,菱形示意分支判断。此外,流动图引入了一个重要的概念——泳道。流动图能够依据流动的范畴,将流动依据畛域、零碎和角色等划分到不同的泳道中,使流程边界更加清晰。流动图也比拟有普适性,能够在需要分析阶段形容业务流程,也能够在概要设计阶段形容子系统和组件的交互,还能够 在具体设计阶段 形容一个类办法外部的计算流程。
因为状态图和流动图设计和表白有相似的中央,有时合在一起表白在一张图上
举荐画图工具:https://www.processon.com/:能够邀请搭档一起绘图,反对导出导入
舒适提醒:要想齐全把握,并且纯熟使用 UML 图,必定要花很多的学习精力,实质是让团队更清晰地了解设计