<>面向过程与面向对象

首先看一下百度百科给出的解释

* 面向过程 : 是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。
*
* 面向对象 :
主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
区别

* 面向过程 : 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

* 面向对象 : 是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

<>三大基本特征

*
1,封装
封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。对不可信的信息隐藏。隐藏实现细节,使得代码模块化。
比如:
人是有名字、年龄、性别等属性,行为有:走路、说话等。人Person可以视为一个对象,其属性有名字name、年龄age、性别sex;行为(方法)有走路walk()、说话speek()。这就是一个封装。UML类图如下:

*
2,继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。同样也可以进行扩展。
比如:
学生Student也是人,他可以继承人这个对象;但是学生也有自己的属性,譬如学号no、班级class。他也具有人的行为:走路、说话。也有自己的行为考试test();这就是一个继承。UML类图如下:

*
3,多态

多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
多态存在的三个必要条件:

* 继承
* 重写(子类继承父类后对父类方法进行重新定义)
* 父类引用指向子类对象
比如: 学生继承人这个走路的行为,但是现在学生走路需要走正步。那么学生就需要重写走路walk()这个行为,这就是多态的一种表现。UML类图如下:

<>五大基本原则

*
1,单一职责原则(SRP)
一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。
比如:
一个人的接口IPerson同时实现了维护属性(name、age、sex)和行为(walk、speek);那么在更新人的姓名(name)的时候,或者执行用户的行为(walk);都会导致在这个类改变,这样就属于违背了单一职责原则。应该定义两个接口分别去维护属性和行为。
优点

* 1,降低类的复杂性,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
* 2,提高类的可读性,提高系统的可维护性;
* 3,降低变更引起的风险,变更是必然的,如果单一职责原则遵守的好,当修改一个接口的功能时,可以显著降低对其他接口功能的影响。
*
2,开放封闭原则(OCP)
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

*
3,里氏替换原则(LSP)

任何基类可以出现的地方,子类一定可以出现。通俗的说,即父类出现的地方子类也可以出现,并且将父类用子类替换后,也不会产生任何问题。然而,需要注意的是里氏替换原则反过来使用是不行的,子类出现的地方,父类未必适用。
里氏替换原则为良好的继承定义了一个规范,一句简单的话包含了4层含义

* 1,子类必须完全实现父类的方法
* 2,子类可以拥有自己的“个性”
* 3,覆盖或实现父类方法时输入参数可以被放大
* 4,覆盖或实现父类方法时输出结果可以被缩小
*
4,依赖倒置原则(DIP)
高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。//“抽象”指“接口或抽象类”,“细节”指“实现类”
依赖倒置的本质原则就是 :通过抽象(接口或抽象类)使各个类或模块实现彼此独立,互不影响,实现模块间的松耦合。

*
5,接口隔离原则(ISP)
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
接口隔离原则 : 不要把一大堆方法塞进一个接口里,导致这个接口变得臃肿无比。应该要根据实际需要,让接口中只有用得上的方法,也就是说要细化我们的接口。

接口隔离原则和单一职责原则非常类似。单一职责原则要求接口的职责是单一的,而接口隔离原则要求接口尽量细化,它们有异曲同工之妙,都是要让我们的接口功能尽量单一,尽量小。
但是,单一职责原则的着重点是在“职责”,而接口隔离原则只单纯地要求接口最小化。

<>Java 的平台无关性

一次编译,到处执行

Java种说的最多的一句话就是一次编译,到处执行
;这就话的意思就是Java的class文件,可以在不需要任何改变的情况下,运行在多个平台上面(这里的平台可以理解为安装了jdk的不同的操作系统或者不同的设备,譬如打印机、扫描仪等)。这个就是Java
的平台无关性的体现。

如何实现Java 的平台无关性

*
1,首先是Java代码的编译,我们都知道计算机只能识别0和1;真正计算机执行的文件也是由0和1组成的二进制的文件。JVM编译分成两步编译,一个是前端编译,一个属于后端编译;前端编译就是我们熟知的利用javac将Java代码编译成class文件。后端编译就是class文件运行在JVM上,由JVM将class文件再编译成0和1的二进制文件,最后由计算机进行执行。
*
2,Java的语义规范;Java中基本数据类型的值域和行为都是由其自己定义的。而C/C++中,基本数据类型是由它的占位宽度决定的,占位宽度则是由所在平台决定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。

举个简单的例子:对于int类型,在Java中,int占4个字节,这是固定的。但是在C++中却不是固定的了。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。所以以后怎么发展就是未可知的。
总结实现Java平台无关性
Java语言规范
通过规定Java语言中基本数据类型的取值范围和行为
Class文件
所有Java文件要编译成统一的Class文件
Java虚拟机
通过Java虚拟机将Class文件转成对应平台的二进制文件等

<>为什么说Java只有值传递

首先我们理解一下值传递和引用传递的概念(请看百度百科)
值传递 : 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递 : 引用传递是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

Java之所以说只有值传递,即使在传递引用对象时,修改了引用对象;是的原有对象也发生改变,但是Java传递的是引用地址的复制,而不会原有的引用地址,可以理解为有两个引用地址指向同一个物理地址,所以修改对象也会使得原有对象发生改变。所以说Java只有值传递。引用传递的概念是直接传递引用地址,并非复制一份地址后再进行传递。

<>Java 中还支持的其他语言

Kotlin、Groovy、JRuby、Jython、Scala等,其中Kotlin、Groovy可以扩展一下

之所以可以支持,就是因为这些语言也可以被编译成字节码。而虚拟机并不关心字节码是有哪种语言编译而来的。

技术
©2019-2020 Toolsou All rights reserved,
LeetCode 67. 二进制求和 Add Binary(C语言)有些事情现在不做,就一辈子也不会做了gitlab-ci集成kubernetes自动化部署swift 算法 简单72.FizzBuzz程序员这样面试,效率提升,offer不断!opencv进阶篇---银行卡数字识别大数据测试要点总结公布!达摩院2020年十大科技趋势普通的程序员和大神级的程序员有什么区别?考虑清楚该不该跳槽(转)