美文网首页
go语言(四):面向对象

go语言(四):面向对象

作者: 宋song一 | 来源:发表于2020-07-14 22:14 被阅读0次

面向对象OOP,注重重用
面向过程OPP

一。传统面向对象类与类的关系:(go为struct)

  • 继承:is-a ,强耦合
  • 实现 : like-a
  • 依赖: use-a,一般作为方法参数
  • 关联:has-a,强依赖,平等。
  • 聚合:has-a,整体与部分,拥有。可拆分
  • 组合:contains-a,强聚合,不可拆分
  • 组合>聚合> 关联> 依赖
    继承有多种实现方式,(1)强耦合(关键字继承)(2)松耦合(组合式)。一般组合式更好

接口命名习惯以er结尾

一、go语言面向对象

封装:方法(带有接收者的函数,自带参数)(首字母大小写控制访问权限。属性首字母小写,对外提供访问方法)
继承:通过组合(匿名字段/属性,结构体)实现。代码复用。
type Teacher struct{
People //匿名属性实现继承
class string
}
多态:基于接口的多态,接口作为方法的参数。结构体赋给接口

go语言中,可以给除了指针类型以外的自定义类型(包括内置类型)添加相应的方法
方法的receiver类型可以是T(不能是接口或指针)或*T
不支持重载方法(名字相同,参数不同)
receiver类型不同就是不同的方法

方法的receiver为普通类型时,为值传递。 指针类型时,为引用传递
Person结构体的方法:
func (tmp Person) Print(){
...
结构体本身为值类型
结构体指针:new(Person) 或&Person{}。结构体指针取值
Person
}

1. 方法的重写

方法名相同,接收者不同
默认时按就近原则调用。也可以指定调用

2. 方法表达式

f=(Person).SetInfo
f(p) //普通变量作为接收者(p Person)
通过结构体变量调用。
接收者传指针类型,可以修改接收者变量的值

3. (接口)超集(变量)可以转换(/赋值)为子集,反之不可以。

属于关系

type Live interface{
run()
}
func a(*People) run(){
fmt.Println("人在跑步")
}
func allRun(live Live){
live.run()
}
func main(){
peo:=&People{}
allRun(peo)
}

4. 类型断言 for...range

  1. if value,ok := data.(int);ok==true{
    ...
    }
  2. switch v :=data.(type){
    ...
    }

相关文章

网友评论

      本文标题:go语言(四):面向对象

      本文链接:https://www.haomeiwen.com/subject/dldqhktx.html