(JavaSE)九、面向对象三大特征-----封装

软件开发--面向对象

软件生命周期: 软件的产生直到报废的整个过程

软件生命周期内有:问题定义, 可行性分析, 总体描述, 系统设计,编码, 调试和测试, 验收与运行, 维护升级到废弃等阶段
 

软件的开发方式:

     1):面向过程的开发

     2):面向对象的开发

 

面向过程

        一种较早的编程思想,顾名思义该思想是站在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先干啥,后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。

面向过程的设计:

最小的程序单元是函数,每个函数负责完成某一个功能,用以接收输入数据,函数对输入数据进行处理,然后输出结果数据.

整个软件系统由一个个的函数组成,其中作为程序入口的函数称之为主函数,主函数依次调用其他函数,普通函数之间可以相互调用,从而实现整个系统功能.

                   

面向过程的缺陷:

面向过程的设计,是采用置顶而下的设计方式,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,每一个子模块有细分为更小的子模块,如此类推,直到将模块细化为一个个函数

存在的问题:

1):设计不够直观,与人类的习惯思维不一致.

2):系统软件适应性差,可拓展性差,维护性低.

面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想

面向对象

        一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。

具备某种功能的实体,称为对象

面向对象最小的程序单元是:类.

对象

现实中,随处可见的一种事物就是对象。通常把对象划分为两个部分,即静态部分动态部分

静态部分就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,其属性包括高矮、胖瘦、性别、年龄等等。然而具有此属性的人会执行哪些动作也是一个不可规定的部分,这个人可以喜怒哀乐、说话、走路、睡觉等等,这些行为就是这个人具备的动态部分

比如一个人:

                        

研究本质,所有的人都具有以上XXX同学的属性和行为,可以将这些属性和行为封装起来以描述整个“人”这一类的物种。

由此可见,类实质就是封装对象的属性和行为的载体,而对象是类抽象出来的一个实例。那么我们就引出了封装的概念。

封装

        什么是封装(面向对象三大特征之一)?

        (1)把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);

        (2)"信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,向外暴露方法,保证外界安全访问功能;  把所有的字段使用private私有化,不准外界访问,把方法使用public修饰,允许外界访问.

          把所有数据信息隐藏起来,尽可能隐藏多的功能,只向外暴露便捷的方法,以供调用.

        既然提及到了private 和 public,那我们就先说一下访问修饰符。

            

            private:表示私有的, 表示类访问权限.  只能在本类中访问,离开本类之后,就不能直接访问.
            无(default):表示包私有,表示包访问权限.  访问者的包必须和当前定义类的包相同才能访问.
            protected:表示子类访问权限,同包中的可以访问,即使不同包,但是有继承关系,也可以访问.
            public:表示全局的,可以公共访问权限,如某个字段/方法,使用了public修饰,则可以在当前项目中任何地方访问.

注意:一般字段都使用private修饰,表达隐藏,为了安全性.

          拥有实现细节的方法,一般使用private修饰,不希望外界(调用者)看到该方法的实现细节.

          方法一般使用public修饰,供外界直接调用.

封装的好处:

            1):使调用者正确,方便地使用系统功能,防止调用者随意修改系统属性。

            2):提高组件的重用性。

            3):达到组件之间的低耦合性(当某一个模块实现发生变化时,只要对外暴露的接口不变,就不会影响到其他模块)。
 

举个例子:

package Test;

import java.util.Arrays;

/**
 * 
 * @author FYDragon
 *
 */

class animal{
	private String name;

	public String getName() {
		return name;
	}

        public void setName(String name) {
		this.name = name;
	}	
}

public class TestDemo {
	  public static void main(String[] args) {
		animal cat = new animal();
		cat.setName("来福");
		System.out.println("这只猫名字叫:"+cat.getName());
	}
}

分析:因为name变量设置的是private权限,所以只有animal类能够直接访问这个变量的相关信息,其他类如果想要访问这个变量的内容,就需要调用这个类的get和set方法。set来设置值,get来获取值。


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值