zoukankan      html  css  js  c++  java
  • 7.封装

    封装:
    其实就是大家字面上所能看到的那种意思,把一个东西封装,装起来,只留一个口,只有那个口才能让别人拿到。比如看电视的时候,我们只需要拿遥控器换一下台就可以了,没有必要去了解电视机内部的构造,你也没有必要去碰那些显像管,那些制造的厂家为了我们方便的去使用电视,它就把内部非常复杂的一些细节,全部都给它封装起来了,值给我们暴露一些简单的接口。这样的话,你如一个电源开关,比如说一个换台键,这样的话,用户就可以玩了,不需要让用户全部了解里面的产品的所有东西。这就是封装。
    该露的露,该藏的藏:我们要把该暴露给用户的一些东西给暴露出来,但大部分程序的一些细节,都应该藏起来。我们程序设计要追求“高内聚,低耦合”高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;比如银行的钱,他只能由银行内部人员操作,不应该让所有人操作,每个人只能操作自己当前的那个账户。低耦合:仅暴露少量的方法给外部使用比如说,都是去取钱,能取钱的是不是只有一些普通的用户才可以,而顾客不能操作里面的钱,不能把钱借给别人。顾客的所有东西只能围绕着那张小卡来,方法是有限的。
    代码中呢,记住这句话:属性私有,get/set,有时候set方法里会做一些安全性的验证的判断。
     
    封装的意义:
    • 提高程序的安全性,保护数据
    • 隐藏代码的实现细节:刚才的设计年龄,用户只能去设置年龄,而里面的细节他是根本不知道的,作为一个调用者,他根本不知道类里面到底干了什么,当然我们时上帝视角,我们是开发人员,我们肯定知道。
    • 统一接口:就是所有的方法都是get、set、形成了一个规范,用户调用的接口那就是这一个。
    • 系统的可维护性增加了:良好的封装便于我们修改内部代码,可以提高咱们程序的可维护性。
     
    通常把数据封装(数据的隐藏),避免程序去直接访问一个对象中数据,而应通过接口方法来进行操作。

     1 package com.oop.demo03;
     2 
     3 //类     private:私有
     4 public class Student {
     5 
     6     //属性私有
     7     private String name;//名字
     8 
     9     private int id;//学号
    10 
    11     private char sex;//性别
    12 
    13     private int age;//年龄
    14 
    15     //提供一些可以操作这个属性的方法!
    16     //提供一些public的get set方法 快捷键:alt+insert -->setter getter
    17 
    18     //get 获取这个数据
    19 
    20     public String getName() {
    21         return name;
    22     }
    23 
    24     //set 给这个属性设置值
    25 
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29 
    30     public int getId() {
    31         return id;
    32     }
    33 
    34     public void setId(int id) {
    35         this.id = id;
    36     }
    37 
    38     public char getSex() {
    39         return sex;
    40     }
    41 
    42     public void setSex(char sex) {
    43         this.sex = sex;
    44     }
    45 
    46     public int getAge() {
    47         return age;
    48     }
    49 
    50     //通过一些内部的封装让程序变的更安全、避免用户破坏系统
    51     public void setAge(int age) {
    52         if (age > 120 || age < 0) {
    53             age = -1;
    54         } else {
    55             this.age = age;
    56         }
    57     }
    58 
    59 }
     1 package com.oop;
     2 
     3 import com.oop.demo03.Student;
     4 
     5 public class Application {
     6 
     7     public static void main(String[] args) {
     8         Student s1 = new Student();
     9 
    10         s1.setName("断浮");
    11 
    12         System.out.println(s1.getName());//
    13 
    14         //s1.setAge(999);//不合法
    15         s1.setAge(70);
    16         System.out.println(s1.getAge());//70
    17     }
    18 
    19 }
     
  • 相关阅读:
    android 自动化压力测试-monkey 3 命令参数
    android 自动化压力测试-monkey 2 获取程序包名
    Mysql清空表(truncate)与删除表中数据(delete)的区别
    Ubuntu下安装Navicat+mysql的各种utf-8设置
    Python——连接MongoDB
    数据库——MongoDB
    Linux——shell脚本编程2
    Linux——shell脚本编程
    centos中创建python虚拟环境(virtualenv)
    阿里云centos7下的nginx配置
  • 原文地址:https://www.cnblogs.com/duanfu/p/12222544.html
Copyright © 2011-2022 走看看