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 }
     
  • 相关阅读:
    微服务架构技术栈选型手册(万字长文)
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    MFC对话框中使用CHtmlEditCtrl
    ATL开发 ActiveX控件的 inf文件模板
    ActiveX: 如何用.inf和.ocx文件生成cab文件
    Xslt 1.0中使用Array
    如何分隔两个base64字符串?
    An attempt was made to load a program with an incorrect format
    JQuery 公网 CDN
  • 原文地址:https://www.cnblogs.com/duanfu/p/12222544.html
Copyright © 2011-2022 走看看