封装
基本介绍
基本介绍
- 封装(Encapsulation)是面向对象编程(OOP)中的一种重要概念,封装通过将数据和相关的方法组合在一起,形成一个称为类的抽象数据类型,只暴露必要的接口供外部使用。
- 封装可以隐藏数据的实际实现细节,外部只能通过公共(public)接口来访问和修改数据,使得代码更加模块化和结构化,同时可以防止不恰当的访问和操作,提高数据的安全性。
- 封装将相关的数据和方法组织在一起,形成了一个独立的单元,外部使用者只需关心公共接口,无需了解内部实现细节,简化了使用方式,提高了代码的可读性和可维护性。
- 封装使得内部实现可以独立于外部接口进行修改,如果内部实现发生了变化,只需要确保公共接口的兼容性,而不会影响使用该类的其他代码,提供了更好的灵活性和可扩展性。
封装的实现
封装的实现
- Go中的封装是通过命名约定和访问控制来实现的,而不像一些其他面向对象语言那样使用访问修饰符(如public、private、protected),因此开发者需要自觉遵守约定来保持封装的效果。
- Go中通过结构体将相关的字段和方法组合在一起,并通过首字母大小写来控制其可访问性。结构体中的字段和方法使用大写字母开头表示公共的(可导出的),可以被其他包访问,而使用小写字母开头表示私有的(不可导出的),只能在当前包内使用。
- Go中的封装更加宽泛,其封装的基本单元不是结构体而是包(package),包内的所有标识符(变量、函数、结构体、方法等)都通过首字母大小写来控制其可访问性
封装案例如下:
package model
import "fmt"
type Student struct {
name string
age int
gender string
}
// 访问name字段
func (stu Student) GetName() string {
return stu.name
}
func (stu *Student) SetName(name string) {
stu.name = name
}
// 访问age字段
func (stu Student) GetAge() int {
return stu.age
}
func (stu *Student) SetAge(age int) {
stu.age = age
}
// 访问gender字段
func (stu Student) GetGender() string {
return stu.gender
}
func (stu *Student) SetGender(gender string) {
stu.gender = gender
}
// Student的其他方法
func (stu Student) Print() {
fmt.Printf("student info: <name: %s, age: %d, gender: %s>\n",
stu.name, stu.age, stu.gender)
}
使用上述包内结构体的案例如下:
package main
import (
"go_code/OOP2/Encapsulate/model"
)
func main