学习笔记:封装性

关于封装性的讨论:源自尚硅谷宋红康老师

面向对象的特征之一:封装于隐藏

一、问题引入:

     当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性赋值。这里的赋值操作收到属性

数据类型和存储范围的制约。但是除此之外,没有其他制约条件,但是,实际问题中,我们往往需要给属性赋值,添加

额外的限制条件。这个条件不能在属性声明时体现(不能对属性直接进行if  ,else)我们只能通过方法限制条件的添加。

比如(setLegs),同时需要避免用在使用"对象.属性"进行赋值。则需要将属性声明为私有的(private)

此时,针对此属性的操作,视作封装性。

二、封装性的体现:

    我们将类的属性xxx私有化(private),同时,提供公共的(public )方法来获取(getXxx)和设置(setXxx)

拓展:封装性的体现——1)如上,2)不对外暴露私有的方法,3)单例模式...

三、封装性的体现,需要权限修饰符来配合。

1.   java规定的4中权限(从小到大排列):private 、缺省(特别是缺省,英文单词时default,但是不要写出来,写出来是错误                 的,)、protected、public

2.    4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类

3.    具体的,4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类

      修饰类的话:只能使用   :缺省 、public

 

 

第一步实现,类的完整展示:

package prectice;

/**
 * 面向对象特征之一:封装与隐藏   简称::封装性。
 * 介绍:为什么需要封装,封装的作用和含义?
 * 我要用洗衣机,只需要按一下开关和洗涤模式就可以了,不必要了解洗衣机内部的结构,不必要碰电动机。
 * 我要开车,只需要....
 * 
 * 开发原则:	高内聚低耦合
 * 高内聚(类的内部数据操作细节自己完成,不允许外部干涉)	低耦合(仅对外暴露少量的方法用于使用)
 * 
 * 隐藏对象内部的复杂性,之对外公开简单的接口。方便外接调用,从而提高系统的可扩展性、可维护性。
 * 通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来,——即封装性的设计思想。
 * 
 * @author ZZ1299
 *
 */

//本类讲的就是怎么不对外暴露,用权限设置实现
public class AnimalTest {

	public static void main(String[] args){
		
		Animal a = new Animal();
		a.name = "大黄";
		a.age = 1;
		a.legs = 4;
		
		a.show();//通过对象调用show方法,show方法中有Animal 的属性,谁调用的show方法,这个属性就是谁的
	}
	
	
}

class Animal{
	String name;
	int age;
	int legs;//腿的个数
	
	public void eat(){
		System.out.println("动物进食");
	}
	
	public void show(){
		System.out.println("name = "+name+ ",age="+ age +",legs="+legs);
	}
}


第二步:需求更改:

如果想把   legs   改成 -4 ,违背客观规律,但是第一段代码的写法是允许的,如下文

package prectice;

/**
 * 面向对象特征之一:封装与隐藏   简称::封装性。
 * 介绍:为什么需要封装,封装的作用和含义?
 * 我要用洗衣机,只需要按一下开关和洗涤模式就可以了,不必要了解洗衣机内部的结构,不必要碰电动机。
 * 我要开车,只需要....
 * 
 * 开发原则:	高内聚低耦合
 * 高内聚(类的内部数据操作细节自己完成,不允许外部干涉)	低耦合(仅对外暴露少量的方法用于使用)
 * 
 * 隐藏对象内部的复杂性,之对外公开简单的接口。方便外接调用,从而提高系统的可扩展性、可维护性。
 * 通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来,——即封装性的设计思想。
 * 
 * @author ZZ1299
 *
 */

//本类讲的就是怎么不对外暴露,用权限设置实现
public class AnimalTest {

	public static void main(String[] args){
		
		Animal a = new Animal();
		a.name = "大黄";
		a.age = 1;
		a.legs = 4;
		
		a.show();//通过对象调用show方法,show方法中有Animal 的属性,谁调用的show方法,这个属性就是谁的
		
		a.legs =-4;
		a.show();//实际上是不可以有-4条腿。可以作为一个限制条件。但是我们又不可以在属性上进行修改。
		//要怎么进行限制,可以考虑用方法来限制。
	}
	
	
}

class Animal{
	String name;
	int age;
	int legs;//腿的个数
	
	public void eat(){
		System.out.println("动物进食");
	}
	
	public void show(){
		System.out.println("name = "+name+ ",age="+ age +",legs="+legs);
	}
}


第三步:改进

package prectice;

/**
 * 面向对象特征之一:封装与隐藏   简称::封装性。
 * 介绍:为什么需要封装,封装的作用和含义?
 * 我要用洗衣机,只需要按一下开关和洗涤模式就可以了,不必要了解洗衣机内部的结构,不必要碰电动机。
 * 我要开车,只需要....
 * 
 * 开发原则:	高内聚低耦合
 * 高内聚(类的内部数据操作细节自己完成,不允许外部干涉)	低耦合(仅对外暴露少量的方法用于使用)
 * 
 * 隐藏对象内部的复杂性,之对外公开简单的接口。方便外接调用,从而提高系统的可扩展性、可维护性。
 * 通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来,——即封装性的设计思想。
 * 
 * @author ZZ1299
 *
 */

//本类讲的就是怎么不对外暴露,用权限设置实现
public class AnimalTest {

	public static void main(String[] args){
		
		Animal a = new Animal();
		a.name = "大黄";
		a.age = 1;
		a.legs = 4;
		
		
		/**
		 * 学习顺序,这里是测试阶段,第二个阶段
		 */
		
		a.show();//通过对象调用show方法,show方法中有Animal 的属性,谁调用的show方法,这个属性就是谁的
		
//		a.legs =-4;
		
		a.setLegs(6);//把 a.legs =-4修改成   a.legs =6___________实验得到:输出legs = 6
		
		//如果把	a.setLegs(6); 改成-6   则输出为			0
		
		
		
		
		
		
		
		
		
		
		
		a.show();//实际上是不可以有-4条腿。可以作为一个限制条件。但是我们又不可以在属性上进行修改。
		//要怎么进行限制,可以考虑用方法来限制。
	}
	
	
}

class Animal{
	String name;
	int age;
	int legs;//腿的个数
	
	
	/**
	 * 学习顺序,这里是第一阶段,改了这里的if语句在改  public static void main(String[] args)
	 * 中 的     a.setLegs(6);  语句
	 * 
	 * @param l
	 */
	
	//做一个设置属性的方法:这个方法要有形参,这个形参作为赋值,代入值到属性中。
	public void setLegs(int l){//这里把 l 赋值给  属性 int legs 。
		
		//legs = l;//相当于,谁调用这个setLegs方法,谁就填入了一个l,然后 l 赋给 调用此方法的legs 的属性。
		//因此,上一行的语句可以改成我们的逻辑:		l 大于等于零,	而且,是一个偶数
		
		if(1>=0 && 1%2 ==0){
			legs =l;
		}else {
			legs = 0;
			//或者不等于零,抛出一个异常。
		}
	}
	
	
	public void eat(){
		System.out.println("动物进食");
	}
	
	public void show(){
		System.out.println("name = "+name+ ",age="+ age +",legs="+legs);
	}
}


第四步:属性还是可以设置,如下文:

package prectice;

/**
 * 面向对象特征之一:封装与隐藏   简称::封装性。
 * 介绍:为什么需要封装,封装的作用和含义?
 * 我要用洗衣机,只需要按一下开关和洗涤模式就可以了,不必要了解洗衣机内部的结构,不必要碰电动机。
 * 我要开车,只需要....
 * 
 * 开发原则:	高内聚低耦合
 * 高内聚(类的内部数据操作细节自己完成,不允许外部干涉)	低耦合(仅对外暴露少量的方法用于使用)
 * 
 * 隐藏对象内部的复杂性,之对外公开简单的接口。方便外接调用,从而提高系统的可扩展性、可维护性。
 * 通俗的说:把该隐藏的隐藏起来,该暴露的暴露出来,——即封装性的设计思想。
 * 
 * @author ZZ1299
 *
 */

//本类讲的就是怎么不对外暴露,用权限设置实现
public class AnimalTest {

	public static void main(String[] args){
		
		Animal a = new Animal();
		a.name = "大黄";
		a.age = 1;
		a.legs = 4;
		
		
		/**
		 * 学习顺序,这里是测试阶段,第二个阶段
		 */
		
		a.show();//通过对象调用show方法,show方法中有Animal 的属性,谁调用的show方法,这个属性就是谁的
		
//		a.legs =-4;
		
		a.setLegs(6);//把 a.legs =-4修改成   a.legs =6___________实验得到:输出legs = 6
		
		//如果把	a.setLegs(6); 改成	a.setLegs(-6);   则输出为			0
		
		
		//第四部分:属性的权限问题还是没解决:如下
		
		a.legs = -4;		
		/**
		 * 这里,编译器没有报错,并且可以运行。怎么办呢??			设置权限。
		 * 在class Animal 类中的变量设置权限,把int legs 加上private。
		 */
		
		
		
		
		
		a.show();//实际上是不可以有-4条腿。可以作为一个限制条件。但是我们又不可以在属性上进行修改。
		//要怎么进行限制,可以考虑用方法来限制。
	}
	
	
}

class Animal{
	String name;
	int age;
	
	/**
	 * 声明完  private 之后
	 * 类中的	public static void main(String[] args)		a.legs = -4;		将报错
	 * The field Animal.legs is not visible    这个属性不可见   但是,堆空间中依然有这个属性。
	 * 
	 * 这个属性不对外开放了
	 */
	private int legs;//腿的个数    
	
	
	
	/**
	 * 学习顺序,这里是第一阶段,改了这里的if语句在改  public static void main(String[] args)
	 * 中 的     a.setLegs(6);  语句
	 * 
	 * @param l
	 */
	
	//做一个设置属性的方法:这个方法要有形参,这个形参作为赋值,代入值到属性中。
	public void setLegs(int l){//这里把 l 赋值给  属性 int legs 。
		
		//legs = l;//相当于,谁调用这个setLegs方法,谁就填入了一个l,然后 l 赋给 调用此方法的legs 的属性。
		//因此,上一行的语句可以改成我们的逻辑:		l 大于等于零,	而且,是一个偶数
		
		if(1>=0 && 1%2 ==0){
			legs =l;
		}else {
			legs = 0;
			//或者不等于零,抛出一个异常。
		}
	}
	
	
	public void eat(){
		System.out.println("动物进食");
	}
	
	public void show(){
		System.out.println("name = "+name+ ",age="+ age +",legs="+legs);
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python学习笔记PDF是一种学习Python编程语言的资料形式,它包含了Python的基本语法、数据类型、流程控制、函数、模块、面向对象编程、异常处理等相关内容。以下是关于Python学习笔记PDF的详细内容说明: 1. 基本语法:Python学习笔记PDF中,首先介绍了Python的基本语法,例如如何定义变量、数据类型的使用(包括整数、浮点数、字符串、列表、元组、字典等),以及如何进行算术运算、比较运算和逻辑运算。 2. 流程控制:Python学习笔记PDF中,进一步介绍了流程控制的知识,包括条件判断和循环控制。条件判断主要是通过if语句进行判断执行不同的代码块,而循环控制则通过while循环和for循环来实现重复执行一段代码。 3. 函数:Python学习笔记PDF中,对函数的概念和使用进行了详细的解释。函数是代码的封装和组织方式,通过定义函数可以提高代码的重用和可读学习者将了解到如何定义函数、调用函数、函数参数的传递以及函数返回值的使用。 4. 模块:Python学习笔记PDF中,介绍了Python中的模块和包的概念。模块是一组函数、类或变量的集合,以.py文件的形式存在,可以被其他程序调用和使用。学习者将学习如何导入模块、使用模块中的函数和变量。 5. 面向对象编程:Python学习笔记PDF中,对面向对象编程进行了系统的讲解。面向对象编程是一种以对象为基本单位的编程思想,通过定义类和对象,可以更好地组织和管理代码。学习者将了解如何定义类、创建对象、封装、继承和多态的使用。 6. 异常处理:Python学习笔记PDF中,对异常处理进行了介绍。异常是程序在运行过程中出现的错误,通过捕获和处理异常,可以更好地控制程序的执行流程并提高程序的健壮学习者将了解到如何使用try-except语句来捕获和处理异常。 总之,Python学习笔记PDF是一份全面而详细的学习Python编程语言的资料,通过学习该资料,学习者将获得扎实的Python编程基础,并能够运用Python进行简单的程序开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值