ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面向对象

2021-01-11 22:33:07  阅读:139  来源: 互联网

标签:对象 事物 编程 面向对象 抽象 方法


今天初步了解了面向对象,将针对下面几点来进行学习

面向对象

面向对象概论

面向对象的三大基本特征是:封装、继承、多态

  • 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据
  • 继承是为了重用父类代码,同时为实现多态性作准备
  • 多态性是发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。

编程概述

面向过程是一种自上而下的程序设计方法,主要思路专注于算法的实现

  • 过程式的特征是以函数为中心,用函数作为划分程序的基本单位;数据在过程式设计中处于从属的位置
  • 过程式设计的优点是易于理解和掌握,这种逐步细化问题的设计方法与大多数人的思维方式比较接近
  • 软件代码的重用性很差,即使重用,也是简单的复制和拷贝,代码数量急剧增加。而不能直接继承和应用

面向对象是一种自下而上的程序设计方法,以数据为中心,类是表现数据的单位,是划分程序的基本单位

  • 面向对象设计是自下而上的特性,允许开发者从问题的局部开始,在开发过程中逐步加深对系统的理解。需求变化会作用到系统开发本身,形成一种螺旋式的开发方式
  • 面向对象设计中,类封装了数据,而类的成员函数作为其对外的接口,抽象地描述类,用类将数据和操作这些数据的函数放在一起,这就是面向对象设计方法的本质

对象的引入

造房子的砖头有红色的砖、有方砖、有圆砖,此时现实生活中的各种各样的砖头都可以称作是对象

方砖、圆砖,他们之间头共同点,但也有不同方面,这些不同的地方使得它们不可能是同一种对象,然而砖头是所有种类砖的总成,所有的砖都是由它派生出来的,所以这个砖可以称为是一个类
类就是模板,也可以说类就是创建对象的基地,能产生出很多不同的对象

  • java语言与其他面向对象语言一样,引入类的概念是用来创建对象的模板,它包含被创建对象的状态描述和方法的定义。java是面向对象语言,它的源文件是由若干个类组成,源文件的扩展名为.java的文本文件
  • 要学习java编程就必须学会怎样去编写类,即怎样用java的语法去描述一类事物共有的属性和功能。属性通过变量来刻画,功能通过方法来体现,即方法操作属性形成一定的算法来实现一个具体的功能

类把数据和对数据的操作封装成一个整体

  • 数据是描述某种类型的相关参数
  • 操作是允许执行的动作
class 学生{ //这就是人为定义的新的数据类型,和int/double之类系统预定义类型没有什么区别
String 学历;
int 身高;
public void 设置学历(String str){}
}

如何描述现实生活中的事物

对于事物描述通常只关注属性和行为两方面
明确该事物的属性和行为并定义在类中即可
抽象数据类型
不要把自定义的类和一般数据类型对立
不同于int类型:具有方法
一切事物皆对象
通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世
界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面
向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统

抽象

抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程

  • 把众多的事物归纳、划分成类是我们在认识世界时经常采用的方法
  • 分类所依据的原则是抽象,也就是忽略事物的非本质特征,只注意那些与当前目标有关的本质特征
  • 找出事物的共性并将具有共同性质的事物划分为同一个类

面向对象的概念

面向对象是一种新兴的程序设计方法或者是一种新的程序设计规范paradigm,其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计

  • 从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式
  • 开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等
  • 面向对象的思想已经涉及到软件开发的各个方面。如面向对象的分析OOA、面向对象的设计OOD以及面向对象的编程实现OOP

OOP使得现实世界中的概念在计算机程序中编程模块,它包括构造程序的特征以及组织数据和算法的机制
面向对象是一种对现实世界理解和抽象的方法
OOP语言有3大特征:封装、继承及多态,所有这些特征与类的概念是息息相关的

对象

对象是要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件

在现实世界中:是客观世界中的一个实体
在计算机世界中:是一个可标识的存储区域

  • 现实世界中所有的事物都是对象
  • 对象都具有某些特征,并展现某些行为

对象的两个要素

  • 属性
    于描述对象静态特性(结构特性)的一个数据项, 描述一个人可用姓名、性别、身份证号等属性
  • 方法(也称服务)
    用于描述对象动态特性(行为特性)的一个操作系列,每个人都具有工作、学习等行为特性
  • 对象将数据和施加于数据上的操作打包成一个不可分割的最基本的模块,使得仅有该类的有限个方法才可以操纵、改变这些数据,

对象的状态和行为

对象具有状态,一个对象用数据值来描述它的状态
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

用Java语言对现实生活中的事物进行描述,通过类的形式来体现
类是具有共同属性和行为的对象的抽象

  • 类是用于组合各个对象所共有操作和属性的一种机制
  • 类是具有相同属性和行为的一组对象的集合
  • 对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象

类可以定义为数据和方法的集合,类也称为模板,因为它们提供了对象的基本框架

  • 一旦定义类后,就可以用这种新类来创建该类型的对象
  • 类就是对象的模板(template )而对象就是类的一个实例(instance)

类实际上就是一种数据类型

  • 类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性
  • 类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述

类和对象之间的关系

类是事物的描述

  • 类是Java程序的核心,它定义了对象的形状和本质,可以用类来创建对象。当使用一个类创建了一个对象时,通常说给出了这个类的一个实例
  • 类由类声明和类体构成,一般命名方法为:首字母大写,大写字母分词,例如XueSheng
class className{
//类体;
}
  • 类包含数据成员(数据、属性)和成员方法(函数)。一般建议数据成员应该是通过函数(方法)访问的
  • 对象是类的实例,就是应用中定义的某个类的变量,例如Person p=new Person(); p就是对象
  • 类是和问题域相关的具有相同属性和行为的对象的抽象

对象是该类事物的实例,在Java中通过new来创建的

消息和方法

  • 对象之间进行通信的结构叫做消息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)
  • 类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体
    面向对象的三大特征:封装、继承、多态

总结

面向对象的编程,我们可以认为是面向类的编程。编写类的过程,相当于我们定义了一种新的数据类型。
对象对象编程的核心是面向抽象编程,面向抽象编程的核心是面向接口编程

面向对象和面向过程的区别

面向过程:

  • 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
  • 缺点:没有面向对象易维护、易复用、易扩展

面向对象:

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
  • 缺点:性能比面向过程低

成员变量和局部变量的区别

  • 成员变量定义在类中,整个类中都能访问
  • 局部变量定义在方法、语句、局部代码块中,只在所属的区域中有效,而且必须是先定义后使用,必须是先赋初值后使用
  • 成员变量存在于堆内存的对象中,堆内存中的对象大小可以任意,并允许在运行时进行调整。所以访问查找的效率比较低。
  • 局部变量存在与栈内存的方法中,可以快速定位,但是大小是限定的
  • 成员变量随着对象的创建而存在,随着对象的表示而消失。局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
  • 成员变量都有默认初始化值;局部变量没有默认初始化值

标签:对象,事物,编程,面向对象,抽象,方法
来源: https://blog.csdn.net/mhfaaa/article/details/112497941

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有