java 面向对象

Posted 河图

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 面向对象相关的知识,希望对你有一定的参考价值。

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。他可能包括属性,数据,或者方法, java语言中对象是程序语言的基本单元我们把我们需要的属性都封装到一个对象中,以此来提高软件的灵活性,重用性以及扩展性。 在面向对象的设计语言中,程序中的各种对象通过关联关系 联系到一起,组合关系,继承关系,依赖关系等。通过这些组合关系对象和对象的就可以贯穿整个程序代码中。

面向对象是一个理念,是一种思想 这种与我们的传统思想是不同的,甚至可以认为是相反的,传统的思想,比如我们做一个具有逻辑的事情,我们通常是通过逻辑,一步一步完成一件事情,这个时候我们把自己当做了计算机本身,认为计算机会按照我们的思路执行这个代码逻辑,这种思想,我们通常认为是面向过程编程。 而面向对象程序设计中的每一个对象都应该可以接受数据,处理数据,以及传递数据。

现在很多重要的编程语言设计思想都是面向对象,比如java,php,Swift,C#以及现在特别火的 python 等

基本组成

  • 变量

    变量能储存一些内置的信息,可以是基本类型的变量,也可以是Map,List ,对象等其他类型的变量
  • 程序

    程序我们可以认为是函数,方法, 是指可以拥有生产和处理数据功能的一段代码

类和对象

  • 类(class):定义了一个实物的抽象特点.类的定义包含了数据的形式已经对数据的操作
  • 对象:对象可以认为是对类的一个实例化,类是 对实物的抽象,对象就是对这个类 实例化产生的

    我们可以将对象进行实例化理解,比如一只狗,他有鼻子,耳朵,眼睛(实物的特有属性,静态特征),它会呼吸,奔跑,吃饭,睡觉(固有动作动态特征,方法).简单的认为就是对象是一个拥有静态特征和动态特征的一个整体

三个基本特性

  • 封装

    把客观的实物抽象话,并且类可以把自己的数据和方法只是让自己可信的类或者对象操作,对不可信的类信息 进行隐藏,,通俗的我们 可以这样认为,封装让对象的设计者和使用者翻开,使用者只是需要知道这对象拥有什么功能特向,能做什么就行,根本不需要知道怎么是实现这个功能的,,封装可以提高类和系统的安全箱,
  • 继承

    继承我们可以认为是一个派生的功能,从一个或者是多个先定义的类中集成数据和函数,可以重新定义或者是加入新的数据和函数,从而建立了类的层次和等级
  • 多态

    多态从字面意思理解就是 一个事务或者动作的多种形态

    定义:所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能确定,

    我们读完多态的定义,一定回事很模糊,这都是啥,完全看不懂呀,,好了, 现在我们现在说一个例子,有一个睡觉的动态特性,人可以睡觉,猪也会睡觉,鸟也是睡觉,但是人是躺在床上睡觉,猪躺在猪圈里面睡觉,鸟是站在树上睡觉,当我们有一个人对象的时候,当调用睡觉的方法的时候,我们知道一定会执行躺在床上睡觉,同样有一个猪对象的时候,我们知道,猪就会在躺在猪圈里面睡觉,

    多态最根本的好处在于,你不必再像对象询问“你是还是什么类型”而后根据得到的答案调用对象的某个行为——你只管调用该行为就是了,其他的一切多态机制都会为你安排妥当。 – 《重构:改变既有代码的设计》

    总之就是,多态最根本的作用就是把过程化的条件分支语句转化为对象的多态性,从而消除这些机构的条件分支语句

面向对象的基本原则

  • 单一职责原则

    意思就是一个对类 功能,单一,不要将过多的功能都让这一个类实现,同样不要将同一个职责功能划分到多个类中,当一个类拥有职责越多的话,那么代码的耦合性会越来越高,最后导致代码难以维护
  • 开放封闭原则

    一个类是可扩展的,而不可修改的。也就是说,对扩展开放,对修改封闭。

    1. 对扩展开放,意味着 有新的需求或变化时,可以对现有的代码进行扩展,以适应新的情况。
    2. 对修改封闭,在对模块功能进行扩展时,不应该影响已有的程序模块。不得影响现有逻辑
  • 里氏替换原则

    通俗理解:只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应
  • 依赖导致原则

    高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

    抽象不应该依赖于具体实现细节,而具体实现细节应该依赖于抽象。

    问题: 高层模块,底层模块怎么理解??

    举例:《资本论》中都曾阐释依赖倒转原则——在商品经济的萌芽时期,出现了物物交换。假设你要买一个IPhone,卖IPhone的老板让你拿一头猪跟他换,可是你并没有养猪,你只会编程。所以你找到一位养猪户,说给他做一个养猪的APP来换他一头猪,他说换猪可以,但是得用一条金项链来换——所以这里就出现了一连串的对象依赖,从而造成了严重的耦合灾难。解决这个问题的最好的办法就是,买卖双发都依赖于抽象——也就是货币——来进行交换,这样一来耦合度就大为降低了

    在代码中,抽象的东西一般是接口或者抽象类,具体实现是指实现类

  • 接口隔离原则

    接口隔离的意思 我们顶贴接口(interface) 中的方法尽量少,接口尽量的纯洁,不要包含过多的方法,防止以后因为情况发生变化,导致所有实现了这个接口的实现类都要进行修改,开发编程设计中,我们可以尽量保证我们接口的纯洁性,不能 使我们接口过分的臃肿,但是过多的单一接口会导致我们代码的复杂度和易读性,我们应该遵循接口隔离原则,尽量提供小而美的接口。但同时我们也应该注意设计要适度,因为越小的东西就越灵活,但如果过于小又会增加系统的复杂性。

以上是面向对象的五种基本原则的简单解读,以后教程中,我们会课程更加详细的讲解,

23中设计模式

优秀的开发者们,依据面向对象的这五种基本原则,设计出了23中设计模式,工厂模式,装饰者模式,单例模式,代理模式等等,他们都是面向对象的具体表现,同学们,可以在闲暇时间多多关注这些设计模式,能够更好的理解和掌握面向对象编程,

以上是关于java 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

java面向对象:面向对象的思想和概述

java面向对象思想1

Java基础---面向对象

JAVA面向对象思想理解分析

JAVA面向对象简介

JAVA面向对象简介