1. 如何理解抽象
我们在前面去定义一个结构体时,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模型(模板)。这种研究问题的方法称为抽象。
package main
import (
"fmt"
)
// 定义一个结构体Account
type Account struct {
AccountNo string
Pwd string
Balance float64
}
// 方法
// 1. 存款
func (account *Account) Deposite(money float64, pwd string) {
// 验证密码是否正确
if pwd != (*account).Pwd {
fmt.Println("你输入的密码不正确")
return
}
// 验证存款是否正确
if money <= 0 {
fmt.Println("你输入的金额不正确")
return
}
// 验证存款金额是否正确
account.Balance += money
fmt.Println("存款成功")
}
// 2. 取款
func (account *Account) WithDraw(money float64, pwd string) {
// 检查输入密码是否正确
if pwd != account.Pwd {
fmt.Println("你输入的密码不正确")
return
}
// 查看取款金额是否正确
if money <= 0 || money > account.Balance {
fmt.Println("你输入的金额不正确")
return
}
account.Balance -= money
fmt.Println("取款成功~")
}
// 查询余额
func (account *Account) Query(pwd string) {
// 检查输入密码是否正确
if pwd != account.Pwd {
fmt.Println("你输入的密码不正确")
return
}
fmt.Printf("你的账号为=%v 余额=%v\n",account.AccountNo,account.Balance)
}
func main() {
account := Account{
AccountNo: "yinsiyu",
Pwd: "666666",
Balance: 100.0,
}
account.Query("666666")
account.Deposite(100.0,"666666")
}
2.面向对象编程三大特性-封装
1)基本介绍
Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,下面我们一一为同学们进行详细的讲解Golang的三大特性是如何实现的。
2)封装介绍
封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有被通过被授权的操作(方法),才能对字段进行操作
3)封装的理解和好处
1. 隐藏实现细节
2. 可以对数据进行验证,保证安全合理(Age)
4)如何体现封装
1. 对结构体中的属性进行封装
2. 通过方法、包 实现封装
5)封装的实现步骤
1)将结构体、字段(属性)的首字母小写(不能导出了,其它包不能使用,类似private)
2)给结构体所在包提供一个工厂模式的函数,首字母大写,类似一个构造函数
3)提供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值
func (var 结构体类型名) SetXxx(参数列表)(返回值列表) {
// 加入数据验证的业务逻辑
var.字段 = 参数
}
4)提供一个首字母大写的Get方法(类似其它语言的public),用于获取属性的值
func (var 结构体类型名) GetXxx() {
return var. 字段
}
特别说明:在Golang开发中并没有特别强调封装,这点并不像Java,所以提醒学过Java的朋友,不用总是用Java的语法特性来看待Golang,Golang本身对面向对象的特性做了简化的