GO-面向对象1-封装

面向对象概述

  • 在没有面向对象的年代,编程的方式是面向过程的
  • 面向过程的编程,管理的是一个一个的函数,撸工程就是堆砌大量的函数
  • 面向对象中类的概念,Go语言是通过结构体来实现的
  • 类/结构体是对函数的进一步封装,即把有机关联的变量和函数封装为一个结构体
  • 有了类/结构体的概念以后,撸工程就由管理大量的函数变为了管理少量的类
  • 书本理论中面向函数的三大特性是:封装、继承、多态(有时会再加一个抽象)
  • 继承性实现了低成本地扩展原有代码
  • 多态性实现了大规模代码的组装和调度
  • 面向对象使工程开发变成了搭建框架和组装模块的游戏
  • 面向对象的出现使大规模协作与大规模开发变得更容易了

封装性概述

  • 封装就是将业务逻辑相近的变量和函数封装在一起,成为一个结构体
  • 被封起来的变量称之为属性
  • 被封起来的函数称之为方法
  • 封装的意义,在于整理和简化代码结构
  • 封装也是继承和多态的基础

封装结构体 
下面的例子,把狗的属性(名字和性别)和狗的方法(取名字和咬人)封装成了一个结构体

//定义结构体
type Dog struct {
    //定义狗的属性
    name string
    sex int
}

/*封装狗的方法*/
//setter
func (d *Dog)SetName(name string)  {
    //在这里可以加一些权限校验
    d.name = name
}

//getter
func (d *Dog)GetName() string {
    //在这里可以加一些权限校验
    return d.name
}

//定义咬人方法
func (d *Dog)bite()  {
    fmt.Printf("让本汪%s来给你一些震撼教育...",d.name)
}

创建空白对象并给属性赋值

func demo21() {
    //创建空白对象
    d := Dog{}

    //给对象的属性赋值
    d.name = "臭皮"
    d.sex = 1
    fmt.Println(d.sex)
    d.bite()
}

创建对象的同时有序而完整地给属性赋值

func demo22() {
    //创建对象的同时有序而完整地给属性赋值
    d := Dog{"臭皮", 1}
    fmt.Println(d.sex)
    d.bite()
}

 

创建对象并有选择地给属性赋值

func demo23() {
    d := Dog{name: "臭皮"}
    d.sex = 1
    d.SetName("旺财")
    fmt.Println(d.GetName())
    d.bite()
}

创建空白指针对象并给属性赋值

func demo24() {
    dp := new(Dog)

    //通过【指针】访问结构体的【成员】(包括属性和方法)和通过【值】访问一模一样
    dp.SetName("臭皮")
    dp.bite()
}

使用工厂模式创建对象

//工厂方法
func NewDog(name string,sex int) *Dog  {
    d := new(Dog)
    d.name = name
    d.sex = sex
    return d
}

//使用工厂模式创建对象
func demo25() {
    xiaohei := NewDog("小黑", 1)
    xiaohei.bite()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值