首页 > 其他 > 详细

Golang 面向对象编程思想

时间:2021-06-08 10:04:17      阅读:19      评论:0      收藏:0      [点我收藏+]

1.抽象

在定义一个结构体的时候,实际上就是把一类事物的共有的属性和行为提取出来,行成一个物理模型。这种研究问题的方法称为抽象。

面向对象编程的三大特性:

Golang仍然有面向对象编程的继承,封装和多态特性,只是实现的方式和其他OOP语言不一样,Golang的三大特性是如何实现?

  • 封装

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

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

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

    func(var 结构体类型名) SetXxx(参数列表) (返回值列表){

      //加入数据验证的业务逻辑

      var.字段= 参数

    }

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

    func(var 结构体类型名) GetXxx(){

      return var.字段

    }

  特别说明:在Golang开发中并没有特别强调封装,Golang本身对面向对象的特性做了简化。

 

2.封装

1)创建一个model的包,在包中创建一个person的结构体和相关方法,限制个别属性是否允许被其他包访问

package model

import "fmt"

//定义一个结构体
//Name 首字母大写,表示其他包可以直接访问
//age和sal 首字母小写,其他包是不能访问的
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("年龄范围不正确...")
    }
}

//获取年龄的Get方法
func (p *person) GetAge() int {
    return p.age
}

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

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

 

2)创建一个main的包,在包中创建一个main方法用于访问model中的结构体

package main

import (
    "fmt"
    "src/main/src/go_code/chapter04/demo10/model"
)

func main() {
    p := model.NewPerson("ckfuture")
    p.SetAge(18)
    p.SetSal(5000)
    fmt.Println(p)
    fmt.Println(p.Name, "age = ", p.GetAge(), " sal = ", p.GetSal())
}

运行如图:

技术分享图片

代码结构:

技术分享图片

 3.继承

 继承主要解决代码复用,让我们的编程更加靠近人类思维。

当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体,在改结构体中定义这些相同的属性和方法。

其他的结构体不需要重新定义这些属性和方法,只需要嵌套一个匿名结构体即可。

也就是说:在Golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。

嵌套匿名结构体的基本语法:

type Goods struct{
    Name string
    Price int
}

type Book struct{
    Goods//这里就是嵌套匿名结构体Goods
    Writer string
}

 

Golang 面向对象编程思想

原文:https://www.cnblogs.com/ckfuture/p/14858019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!