zoukankan      html  css  js  c++  java
  • 面向对象编程三大特征1

    封装介绍:

      封装(encapsulation) 就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行操作。


    封装的理解和好处:

      1)隐藏实现细节
      2)提可以对数据进行验证,保证安全合理

    type Person struct {
      Age int
    }


    如何体现封装:

      1)对结构体中的属性进行封装
      2)通过方法,包 实现封装


    封装的实现步骤:

      1)将结构体、字段(属性)的首字母小写(不能导出了,其它包不能使用,类似private)

      2)给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数。

      3)提供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值

    func (var 结构体类型名) SetXxx(参数列表) (返回值列表) {
      //加入数据验证的业务逻辑
      var.字段 = 参数
    }

    4)提供一个首字母大写的Get方法(类似其它语言的public),用于获取属性的值

    func (var 结构体类型名) GetXxx() {
      return var.字段;
    }

    特别说明:在Golang开发中并没有特别强调封装,这点并不像java,不要总是用java的语法特性来看待Golang,Golang本身对面向对象的特性做了简化的。

    快速入门案例:

    看一个程序(person.go),不能随便查看人的年龄,工资等隐私,并对输入的年龄进行合理的验证。

    代码实现:

    model/person.go

    package model
    import "fmt"


    //定义一个结构体

    type person struct {

      Name string
      age int
      sal float64
    }

    //写一个工厂模式的函数,相当于构造函数
    func NewPerson(name string) *person {
      return &person{
        Name : name,
      }
    }

    //为了访问age 和 sal 我们编写一对SetXxx的方法和GetXxx的方法
    func (p *person) SetAge(age int) {
      if age > 0 && age < 150 {
        p.age = age
      } else {
        fmt.Println("年龄范围不正确..")
        //有些程序员给一个默认值,看自己需求。
      }
    }

    func (p *person) GetAge() int {
      return p.age
    }

    func (p *person) SetSal(sal float64) {
      if sal >= 3000 && sal <= 30000 {
        p.sal = sal
      } else {
        fmt.Println("薪水范围不正确..")
      }
    }

    func (p *person) GetSal() float64 {
      return p.sal
    }


    main/main.go

    package main
    import (
      "fmt"
      "chapter04/chapter08/model"
    )

    func main() {

      p := model.NewPerson("smith")
      p.SetAge(18)
      p.SetSal(5000)
      fmt.Println(p)
      fmt.Println("name=", p.Name, "age=", p.GetAge(), "sal=", p.GetSal())
    }

    执行的结果:

     

  • 相关阅读:
    【c语言趣味编程100例】爱因斯坦数学题
    【c语言趣味编程100例】求车速
    【c语言】sizeof和strlen函数区别
    Spiral Matrix I, II
    Trapping Rain Water
    Word Ladder**
    Minimum Size Subarray Sum
    Longest Substrings Without Repeating Characters
    Palindrome Linked List
    Container With Most Water
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11408264.html
Copyright © 2011-2022 走看看