转载 实现类的封装性

实现类的封装性

为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。
一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。

private变量只能被内部类使用,不能被外部的类使用,有一种例外,如下:

  • 在一个类中定义了一个private成员变量age,然后产生了这个类的两个实例d1、d2,则在d1对象的方法中可以访问d2对象中的私有变量age,代码如下:
    class Person
    {
            private int age=-1;
             void aa(Person a)
             {
                      System.out.println(a.age);
             }
    }
    class bbc
    {
             public static void main(String[] args) 
             {
                      Person d1=new Person();
                      Person d2=new Person();
                      d1.aa(d2);   //在这里d1对象的aa方法中访问了d2对象中的私有变量age
              }
    }
  • 只有在方法内才能出现访问另一个对象的私有变量的语句,如下代码是错误的:
    class Person
    {
            private int age=-1;
             void aa(int age)
             {
                      System.out.println(age);
             }
    }
    class bbc
    {
             public static void main(String[] args) 
             {
                      Person d1=new Person();
                      Person d2=new Person();
                      d1.aa(d2.age);   //不是在方法内不能出现访问私有成员变量的语句,所以这里会报错
                      System.out.println(d2.age);   //这句也是错的
             }
    }

类的封装所带来的优点

    • 隐藏类的实现细节;
    • 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
    • 便于修改,增强代码的可维护性;
    • 可进行数据检查
      例子:
      class Person
      {
              int  age ;
              void shout()
              {
                      System.out.println("您的年龄是:" + age)
              }
              pubic static void main(String args[ ])
              {
                      Person  p = new Person();
                      p.age = -30;    
                      p.shout();
              }
      }
      如果有人把年龄输入为负数,很明显是不对的,可以修改如下:
      class Person
      {
              private int  age ;
              public int setAge(int age)
              {
                      if(age<0)
                              return;
                      this.age = age ;
              }
              public int getAge()
              {
                      return age;
              }
              void shout()
              {
                      System.out.println("您的年龄是:" + age)
              }
              pubic static void main(String args[ ])
              {
                      Person  p = new Person();
                      p.setAge = -30;    
                      p.shout();
              }
      }
      经过这样的封装之后,负数的年龄将不会被赋值给age。还有两个数相除,除数不能为0也可用这方法
    • 转自:http://blog.csdn.net/dai_zhenliang/article/details/7496668
时间: 2024-11-05 16:33:23

转载 实现类的封装性的相关文章

2019-07-23 类的封装性

类的封装性,简单来说就是在属性和方法前加了一个限定词,在php中有三个限定词:public(公共的).protected(被保护的).private(私有的),如果属性前加了任何一个限制词var要省略.它们具体有什么区别呢?它们的关系又是什么呢?下面做一个解析. 首先来看一个表格:     public protected private 类中 可以被访问 可以被访问 可以被访问 类外 可以被访问     子类 可以被访问 可以被访问   上面的表格已经可以让我们对这三个属性做一个清楚地认知,下

类的封装性和继承

面向对象思想已经存在了好多年了,PHP之前没有面向对象,是PHP开发者后期加上的.面向对象思想有三大特征,封装,继承,多态,其中多态并不适用于PHP.之前使用的是public关键词,它的意思是公开的,意思就是只要拿到这个类,谁都可以使用,谁都可以赋值调用,重新赋值调用.封装:即禁止某些方法/属性 ,不充许外部调用.并开放部分方法 ,来间接调用.比如 银行的 ATM, 你可以输入密码 " 检测 " 用户的密码是否正确, 但不能 " 查询 " 用户的密码.代码 : 1

类的封装性和信息隐蔽—类声明和成员函数定义的分离

在面向对象的程序开发中,一般做法是将类的声明(其中包含成员函数的声明)放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工作量,节省篇幅,提高编程的效率. 由于在头文件中包含了类的声明,因此在程序中就可以用该类来定义对象.由于在类体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数.为了实现上一节所叙述的信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一个文件中. 例如,可以分别写两个文件: //student.h

java面向对象基础 封装性

对于刚学习java的人来说可能不知道 封装性的好处,感觉麻烦,封装有很多好处.最主要的目的就是 保护内容.保证某些属性或者方法不被外部看见. 类的封装性即不能让外面的类随意修改一个类的成员变量: 在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用: 为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问.对一个变量的操作,一般都有 读取和赋值操作,我们一般定

Java——类的封装、继承与多态

一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> [extends 父类] [implements 接口列表] <泛型>——类的参数,带有参数的类成为泛型类. 1.2 声明成员变量和成员方法 成员变量声明格式:[修饰符] 数据类型 变量[=表达式]{,变量[=表达式]}: 成员方法——用来描述对成员变量进行的操作,格式:[修饰符] 返回值类型 方

vb.net和C#两兄弟谁的封装性更好?

引言: 虽然没怎样接触过vb.net,但是大概对于vb6还是比较了解的.前者是从后者基础上发展而来的.后来接触了C#编程语言,起初没有太关心她和vb.net有啥不同的地方,话说都是面向对象的,而且都是MS帝国的产品.一直觉得没什么区别,直到昨天的下午……我才发现这样一个吊炸天的问题……原来vb.net她……竟然…… 最近看一些博客发现,也发一些vb6.0论坛,vb.net论坛等比较冷清,更多的人从过去的vb6.0和vb.net选择转向了C#……刚好也和我昨天的发现不谋而合. 下面是我的一点小小的

Python 基础之面向对象初识与类的封装

一: 面向对象类的初识#(1) 类的定义#三种方式:#1.class MyClass:    pass #2.推荐class MyClass():    pass #3.class MyClass(object):    pass#(2) 类的实例化class MyClass():    pass#类的实例化,实例化对象obj = MyClass() #obj 就是一个对象#(3)类的基本结构只有成员方法和成员属性对象.属性  对象.方法()#例:class MyClass():    #成员属

验证码确保php无输出、sql语句的封装性、文件上传的工具类【这三个重点工具类实现】

1.php代码在引入中不会进行结束或者确保结束之后没有空格,来保证php在被包含中没有被输出[防止header和session_start()对输出的控制]实质上,需要注意的就是,要不就进行输出缓存控制以及php开始标签前没有空格 验证码这个功能需要header和session两个功能[尤其需要注意输出的问题] [总结:防止php代码中带着一些输出的问题](1)在php标签中开始<?php 前顶格(2)php结束符要不不写,写了就不要在结束之后还有换行[防止该文件被包含之后提前出线输出](3)或

谈谈C++的三大特性之一:封装性 (转载)

引言 对象的C++语言与以往的模块化程序语言的不同点在于:数据与操作数据的函数连接起来(即:封装性),结构紧凑,数据安全.正是由于这种封装性,大大强化了C++语言的可移植性及数据的安全性.类封装的形式很简单,本文主要谈谈封装的内部结构. 实例问题 类的内部数据存储地址仅表示相对对象首地址的地址偏移量.实例(引自:疯狂学习ING<作者网名>)如下: #include <iostream.h> class base { // 假定有很多成员 //..... //..... }; cla